2.例子
3.运行结果
三.改进欧拉法 1.程序代码
#include
double fun(double x,double y) {
return(-0.9*y/(1+2*x)); }
void main() {
double a,b,*y,h,*x,yp,yc; int n,k;
cout<<\常微分方程为y'=-0.9*y/(1+2*x)\ cout<<\其中0<=x<=1\ cout<<\初值为y(0)=1\ cout<<\请输入计算区间(a,b):\ cin>>a>>b;
cout<<\请输入步长h:\ cin>>h;
cout<<\请输入计算次数:\ cin>>n;
y=new double[n]; x=new double[n];
cout<<\请输入初值y(0)=\ cin>>y[0]; x[0]=a;
for(k=0;k<=n;k++) {
yp=y[k]+h*fun(x[k],y[k]); yc=y[k]+h*fun(x[k]+h,yp); y[k+1]=0.5*(yp+yc); x[k+1]=x[k]+h; }
cout<<\迭代结果为:\ for(k=0;k<=n;k++)
cout<<\ getch(); }
2.例子
3.运行结果
四.四阶龙格-库塔 1.程序代码
#include
double fun(double x,double y) {
return(x-y); }
void main() {
double a,b,*y,h,x,k1,k2,k3,k4; int n,k;
cout<<\常微分方程为y'=x-y\ cout<<\其中0<=x<=1\ cout<<\初值为y(0)=0\ cout<<\请输入计算区间(a,b):\ cin>>a>>b;
cout<<\请输入步长h:\ cin>>h;
cout<<\请输入计算次数:\ cin>>n;
y=new double[n];
cout<<\请输入初值y(0):\ cin>>y[0]; x=a;
cout<<\迭代法结果为:\ cout<<\ for(k=0;k<=n-1;k++) {
k1=fun(x,y[k]);
k2=fun(x+h/2,y[k]+k1*h/2); k3=fun(x+h/2,y[k]+k2*h/2); k4=fun(x+h,y[k]+k3*h);
y[k+1]=y[k]+(h/6)*(k1+2*(k2+k3)+k4);
cout<<\ x=x+h; }
getch(); }
2.例子
3.运行结果