欧拉法及改进的欧拉法求解方程
#include
#include
void f1(double *y,double *x,double *yy)
{int i;
y[0]=2.0;
x[0]=0.0;
yy[0]=2.0;
for( i=1;i<=9;i++)
{
x[i]=x[i-1]+0.2;
y[i]=y[i-1]+0.2*(y[i-1]-x[i-1]);
yy[i]=x[i]+1+exp(x[i]);
printf("若x=%f,计算值是 %f,真实值是 %f,截断误差是 %f\n
",x[i],y[i],yy[i],y[i]-yy[i]);
}
};
void f2(double *y,double *x,double *yy)
{int i;
y[0]=1.0;
x[0]=0.0;
yy[0]=1.0;
for(i=1;i<=9;i++)
{
x[i]=x[i-1]+0.2;
y[i]=y[i-1]+0.2*(2*y[i-1]+x[i-1]*x[i-1]);
yy[i]=-0.5*(x[i]*x[i]+x[i]+0.5)+1.25*exp(2*x[i]);
printf("若x=%f,计算值是 %f,真实值是 %f,截断误差是 %f\n
",x[i],y[i],yy[i],y[i]-yy[i]);
}
};
void f3(double *y,double *x,double *yy,double *y0)
{int i;
y[0]=2.0;
x[0]=0.0;
yy[0]=2.0;
for( i=1;i<=9;i++)
{
x[i]=x[i-1]+0.2;
y0[i]=y[i-1]+0.2*(y[i-1]-x[i-1]);
y[i]=y[i-1]+0.1*(y[i-1]-x[i-1]+y0[i-1]-x[i-1]);
yy[i]=x[i]+1+exp(x[i]);
printf("若x=%f,计算值是 %f,真实值是 %f,截断误差是 %f\n
",x[i],y[i],yy[i],y[i]-yy[i]);
}
};
void f4(double *y,double *x,double *yy,double *y0)
{int i;
y[0]=1.0;
x[0]=0.0;
yy[0]=1.0;
for( i=1;i<=9;i++)
{
x[i]=x[i-1]+0.2;
y0[i]=y[i-1]+0.2*(2*y[i-1]+x[i-1]*x[i-1]);
y[i]=y[i-1]+0.1*(2*y0[i-1]+x[i-1]*x[i-1]+2*y[i-1]+x[i-1]*x[i-1]);
yy[i]=-0.5*(x[i]*x[i]+x[i]+0.5)+1.25*exp(2*x[i]);
printf("若x=%f,计算值是 %f,真实值是 %f,截断误差是 %f\n
",x[i],y[i],yy[i],y[i]-yy[i]);
}
};
void main()
{
double y[10],x[10],yy[10],y0[10];
printf("\n常微分方程组是 y'=y-x and y(0)=2采用欧拉法求解得\n");
f1(y,x,yy);
printf("\n常微分方程组是 y'=x*x+2y and y(0)=1采用欧拉法求解得\n");
f2(y,x,yy);
printf("\n常微分方程组是 y'=y-x and y(0)=2采用欧拉改进法求解得
\n");
f1(y,x,yy);
printf("\n常微分方程组是 y'=x*x+2y and y(0)=1采用欧拉改进法求解得
\n");
f1(y,x,yy);
}
#include
#include
double f(double y,double x)
{int i;
double k1,x,y, k2;
y(0)=0.0;
x(0)=0.0;
for( i=1;i<=20;i++)
{
x(i)=x(i-1)+0.1;
k1=y(i-1)+0.1*(9.8-y(i-1)* y(i-1)*0.27/70);
k2=y(i-1)+0.1*(9.8-y0(i-1)* y0(i-1)*0.27/70);
y(i)=(k1+k2)/2;
printf("若x(i)=%f,计算值是 %f \n ",x(i),y(i));
}
};
void main()
{
double y,x;
printf("\n常微分方程组是 y'=9.8-y*y*o.27/70 and y(0)=0采用欧拉改进
法求解得\n");
f(y,x);
}