Мне нужен алгоритм для поиска корней с заданной точностью с помощью итерационного метода. Основная идея этого метода - Cn = f (Cn-1); С0 = (А + В)/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 (х) = х-2 + Sin (1/х); a: = 1.2 b: = 2.0 eps: = 0.001 моя программа дает ответ 1.00000143538244E + 0003, но в комплекте проблем ответ 1,3077
Почему это так? Где я ошибаюсь? Как исправить?
P.S К сожалению Ф.О. мой английский
Этот алгоритм для меня не похож на корневой искатель. Как вы думаете, что называется этим словом? –
[Russian Wikipedia] (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
Ваш код настолько плохой, что его трудно исправить. 'Cn1' не инициализируется,' Cn' может означать как значение аргумента, так и значение функции ... – kludg