我需要通过迭代方法实现具有指定精度的寻根算法。这种方法的主要思想是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