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

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的结果不同。
如果不用悬环,结果与后一次相同,为何???、

...全文
79 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
间谍 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
  • 打赏
  • 举报
回复


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

^_^
补充一点,迭代初始值是有个范围的,在一个范围里可能能得到结果但是速度比较慢
甚至有时候根本就得不到结果(发散了哈)

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧