一道狂郁闷的程序,起始值不同,在相同的值下,竟然结果不同?
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
#define e1 exp(1)
void improve_euler()
{
double y0=1.0;
double h=1e-6;
while (fabs(e1-y0)>10E-12){
h=h/10;
y0=1.0;
double n=1/h;
double m=n/10;
cout<<"h="<<h<<endl;
for (double i=1.0;i<=n;i++){
double yp=y0+h*y0;
double yc=y0+h*yp;
double yi=(yp+yc)/2;
y0=yi;
}
cout<<y0<<endl;
}
}
void main()
{
cout<<setprecision(16);
cout<<e1<<endl;
improve_euler();
}
该题使用改进的欧拉方话解常微分方程;
注意步长h的起始值如果h=1e-5,那么算出的当步长为1e-6,1e-7的结果与
当步长h的起始值是h=1e-6,算出的不上为1e-7.1e-8的结果不同。
如果不用悬环,结果与后一次相同,为何???、