Найти корень уравнения методом итерации - Pascal
Формулировка задачи:
Здравствуйте. помогите пожалуйста надо Найти корень уравнения методом итерации с точностью 0.001
sin(x)-x2+1=0
заранее спасибо
Решение задачи: «Найти корень уравнения методом итерации»
textual
Листинг программы
function f(x: real): real;
begin
f := sin(x) - x * x + 1
end;
procedure root(x: real; n: integer);
const eps = 0.001;
var lambda, xi: real;
begin
lambda := 0.5 / (f(x) - f(x - 0.5));
repeat
xi := x;
x := xi - lambda * f(xi)
until abs(x - xi) < eps;
writeln('x', n, ' = ', x:6:3)
end;
var f1, f2, x: real;
i, k: integer;
begin
k := 0;
f2 := f(-1);
for i := -1 to 3 do
begin
f1 := f2;
x := i / 2;
f2 := f(x);
if f1 * f2 <= 0
then begin
inc(k);
root(x, k)
end
end;
readln;
end.
Объяснение кода листинга программы
- Объявляется функция
fс параметромxи возвращаемым значением типаreal. - В функции
fвычисляется значение функции для заданногоxпо формулеsin(x) - x * x + 1и возвращается результат. - Объявляется процедура
rootс параметрамиxтипаrealиnтипаinteger. - В процедуре
rootобъявляется константаepsсо значением 0.001 и переменныеlambdaиxiтипаreal. - В процедуре
rootвычисляется значениеlambdaпо формуле0.5 / (f(x) - f(x - 0.5)). - В процедуре
rootначинается циклrepeatдля вычисления корня уравнения методом итерации. - В цикле
repeatпеременнойxiприсваивается значениеx. - В цикле
repeatзначениеxпересчитывается по формулеxi - lambda * f(xi). - Цикл
repeatповторяется, пока разница междуxиxiменьше заданной точностиeps. - После выхода из цикла
repeatвыводится на экран результат в виде строкиx n = значение_xс округлением до трех знаков после запятой. - Объявляются переменные
f1,f2иxтипаreal, и переменныеiиkтипаinteger. - Происходит инициализация переменной
kнулем и переменнойf2значением функцииfпри-1. - Выполняется цикл
forот -1 до 3 для всех значенийi. - В цикле
forпеременнойf1присваивается значение переменнойf2, переменнойxприсваивается значениеi / 2и переменнойf2присваивается значение функцииfдля данногоx. - Проверяется условие, а именно, если произведение
f1иf2меньше или равно 0, то выполняется блок операций. - В случае выполнения условия переменная
kувеличивается на 1, и вызывается процедураrootс параметрамиxиk. - В конце программы осуществляется ожидание ввода данных из консоли.