作者bank2698763 (地瓜)
看板Math
标题[数值]method of false position
时间Fri Dec 2 14:55:04 2011
我想请问个数值程式的题目
我们数值课 老师希望我们做出一个 method of false position 的程式
我做好了 不过答案在第1次迭代的时候 没有问题
不过在第2次迭代的时候 和课本的表格 还有我手算的结果有一些不一样
本来想去问老师的 不过老师似乎回家了
我想了很久 想不出程式当中出了什麽问题
本来想说po 到程式相关的版 去问一下人
不过 不太确定 程式版的板友 是否知道 数值这方面的东西
所以 想在这边问一下 如果 有违反版规的话 跟我说一下
#include "stdlib.h"
#include "stdio.h"
#include "math.h"
double f(double x);
main()
{
int i;
double x1,f1;
double x2,f2;
double xmid,fmid;
x1=1.0;
f1=f(x1);
x2=2.0;
f2=f(x2);
printf("EnclosingInterval approximation absoluteError\n");
for ( i=1;(x2-x1)>0.0001;i++)
{
xmid=x1-f1*(x2-x1)/(f2-f1);
fmid=f(xmid);
printf("(%1.10f,%1.10f) %1.10f \n",x1,x2,xmid);
if(f1*fmid<0)
{ x2=xmid;}
else if (f2*fmid<0)
{x1=xmid;}
else{ exit(0);}
}
printf("(%1.10f,%1.10f) %1.10f %\n",x1,x2,xmid);
printf("总共做了%d次",i);
system("PAUSE");
return 0;
}
double f(double x)
{
return x*x*x+2.0*x*x-3.0*x-1.0;
}
这是我的程式 题目是 求出f(X)=x^3+2*x^2-3*x-1 在(1,2)之间的根
在第一次 迭代的时候 我找出1.1 和课本相同
在第二次 迭代的时候 我程式跑出1.19的值 不过 我手算 还有课本的解为1.15
然後 在後面的表格似乎都跟课本上的有点差异
最後我的解逼近1.1986939 课本的为1.198599
我想请问一下 有没有人有做过这方面的数值问题 可以帮我解答一下
谢谢
如果 版友觉得 有更适合我这些问题的版 可以问 也帮忙跟我说一下
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.123.225.31
1F:→ ejialan :你更新了x1 x2 但没有更新f1 f2 12/02 16:25
2F:→ bank2698763 :恩 不过 我这个程式 是用二分法的加以修改的 12/02 16:34
3F:→ bank2698763 :在更新x1x2f1f2 上没有发生问题呢 我程式不太好 12/02 16:35
4F:→ bank2698763 :方便跟我说一下 该怎麽修改吗qq 12/02 16:35
5F:→ bank2698763 :恩 我下去计算後 好像真的是f1 f2没有改变 12/02 16:51
6F:→ bank2698763 :不过 方便请问一下 该怎麽改吗 我把他加入下方後 12/02 16:51
7F:→ bank2698763 :它就变成一个无穷回圈了 12/02 16:51
8F:→ bank2698763 :恩 解决了 谢谢啦 y 12/02 16:58