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;
}
---------------------------------------------------------------------------------------------
我猜是宣告錯誤了
有高手可以幫我除錯我的宣告嗎??非常感謝