一道狂郁闷的程序,起始值不同,在相同的值下,竟然结果不同?

huangran_lw 2003-12-12 11:38:04
#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的结果不同。
如果不用悬环,结果与后一次相同,为何???、

...全文
40 6 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
间谍 2003-12-12
范围总在是缩,初始值不是问题的关键
  • 打赏
  • 举报
回复
redhat_xu 2003-12-12
我感觉是个死循环呀!

while语句没有输来的语句。
  • 打赏
  • 举报
回复
hcj2002 2003-12-12


欧拉方法解常微分方程其实是一个迭代的过程,不管初始值是什么,通过迭代最终都能得到解。

^_^
  • 打赏
  • 举报
回复
nilm 2003-12-12
好几个解阿,笨!生活往往是多解的。
  • 打赏
  • 举报
回复
huangran_lw 2003-12-12
问题是得到结果但是结果在不同的初始值下得到的值不同:)
  • 打赏
  • 举报
回复
qufan 2003-12-12


>欧拉方法解常微分方程其实是一个迭代的过程,不管初始值是什么,通过迭代最终都能得到解。

^_^
补充一点,迭代初始值是有个范围的,在一个范围里可能能得到结果但是速度比较慢
甚至有时候根本就得不到结果(发散了哈)
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.2w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
申请成为版主
帖子事件
创建了帖子
2003-12-12 11:38
社区公告
暂无公告