作者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