我需要通過迭代方法實現具有指定精度的尋根算法。這種方法的主要思想是Cn = f(Cn-1); C0 =(A + B)/ 2;其中a,b爲包含根的區間邊界。我寫了這個代碼(在Delphi7中)迭代尋根算法的實現
program iter;
{$APPTYPE CONSOLE}
uses
SysUtils,Math;
function GetCn(Cn1:Double):Double;
begin
Result:=Cn1+sin(1/Cn1);
end;
var
a,b:Double;
Cn,Cn1:Double;
eps,eps1:Double;
begin
a:=1.2;b:=2;
Cn:=(a+b)/2;
Write('Input precision ');Readln(eps);
eps1:=Abs(Cn-Cn1);
While eps1>eps do
begin
Cn1:=Cn;
Cn:=GetCn(Cn);
eps1:=Abs(Cn-Cn1);
end;
Writeln(Cn);
Readln;
end.
在測試數據f(x)= x-2 + sin(1/x) a:= 1.2 b:= 2.0 eps:= 0.001我的程序給出了答案1.00000143538244E + 0003,但是在一組問題中答案是1,3077
爲什麼會這樣?我在哪裏錯誤?如何糾正?
對不起我的英語
該算法看起來不像根找到我。你覺得算法的名字是什麼? – 2013-02-24 09:11:49
[俄文維基百科](http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%BF%D1%80%D0%BE %D1%81%D1%82%D0%BE%D0%B9_%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8#。 D0.9C.D0.B5.D1.82.D0.BE.D0.B4_.D0.BF.D1.80.D0.BE.D1.81.D1.82.D0.BE.D0.B9_.D0。 B8.D1.82.D0.B5.D1.80.D0.B0.D1.86.D0.B8.D0.B8)關於它 – skeeph 2013-02-24 09:15:09
你的代碼太糟糕了,很難糾正。 'Cn1'沒有初始化,'Cn'可以表示參數值和函數值... – kludg 2013-02-24 09:16:25