發新話題

[討論] runge-kutta 跑不出來

runge-kutta 跑不出來

題目是 y'''+y''-4y'-4y=0
y(0)=3
y'(0)=-1
y''(0)=9 h=0.2

actual solution y(t)=e的-t次方+e的2t次方+e的-2t次方

我的程式改成這個樣子了
-----------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<cmath>

void f(double t,double *y, double *fy)
{
    *fy=*(y+1);
   *(fy+1)=(4*(exp((-1)*t)+exp(2*t)+exp((-2)*t)))+
            (4*(((-1)*exp((-1)*t))+(2*exp(2*t))+((-1)*2)*exp((-2)*t)))-
            (exp((-1)*t)+4*exp(2*t)+4*exp((-2)*t));
           
   
}
int main()
    {
          double a,w[2],h,t,K1[2],K2[2],K3[2],K4[2],fy[2],yi;
          int N;
          a=0.0;
          N=10;
          w[0]=9;
          w[1]=-1;
          w[2]=3;
          h=0.2;
          t=a;

         
         
          printf("─────────────────────\n");
          printf("      ti        w1i       w2i        yi\n");
          printf("─────────────────────\n");
          printf("     %5.3f   %10.8f   %10.8f    %10.8f\n",t,w[0],w[1],w[2]);

          for(int i=1;i<=N;i++)
                  {
        
                   f(t,w,fy);
                   K1[0]=h*fy[0];
                   K1[1]=h*fy[1];
                   K1[2]=h*fy[2];
                   K2[0]=w[0]+K1[0]/2;
                   K2[1]=w[1]+K1[1]/2;
                   K2[2]=w[2]+K1[2]/2;
        
                   f(t+h/2,K2,fy);
                   K2[0]=h*fy[0];
                   K2[1]=h*fy[1];
                   K2[2]=h*fy[2];
                   K3[0]=w[0]+K2[0]/2;
                   K3[1]=w[1]+K2[1]/2;
                   K3[2]=w[2]+K2[2]/2;
        
                   f(t+h/2,K3,fy);
                   K3[0]=h*fy[0];
                   K3[1]=h*fy[1];
                   K3[2]=h*fy[2];
                   K4[0]=w[0]+K3[0];
                   K4[1]=w[1]+K3[1];
                   K4[2]=w[2]+K3[2];

        
                   f(t+h,K4,fy);
                   K4[0]=h*fy[0];
                   K4[1]=h*fy[1];
                   K4[2]=h*fy[2];
                   w[0]=w[0]+(K1[0]+2*K2[0]+2*K3[0]+K4[0])/6;        
                   w[1]=w[1]+(K1[1]+2*K2[1]+2*K3[1]+K4[1])/6;     
                   w[2]=w[2]+(K1[2]+2*K2[2]+2*K3[2]+K4[2])/6;   
                  
                   t=a+i*h;
                   yi=exp((-1)*t)+exp(2*t)+exp((-2)*t);
                   printf("     %5.3f   %10.8f   %10.8f   %10.8f\n",t,w[0],w[1],yi);

                  
                   }
   
                   system("pause");
                   return 0;

}
---------------------------------------------------------------------------------------------

我猜是宣告錯誤了

有高手可以幫我除錯我的宣告嗎??非常感謝

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。