Определим функцию f (x) = x^2 - 5cos(x-1); Необходимо найти ноль функции f (x) , т.е. значение х, при котором f(x) = 0; f(x) обратится в 0 , если cos(x-1) > 0 => - pi/2 < x < pi/2 => => (2 - pi)/2 < x < (2 + pi)/2 Корня будет два. Определим интервал для первого корня. Левая граница а = - 0,57, правая граница b = 1 Для второго корня левая граница а = 1, правая b = 2 корни будем находить методом деления пополам. Интервал [ a, b] делится пополам и определяется знак функции в этой точке, в зависимости от знака изменяется левая или правая граница интервала.
Программа будет следующей:
function f(x: real): real; begin f:=x*x-5*cos(x-1); end; { основная программа } var a,b,c,eps: real; k: integer; { a - начало интервала, b - конец } begin write('a = '); readln(a); write('b = '); readln(b); if f(a)*f(b)<0 then begin write('точность вычислений eps: '); readln(eps); k:=1; while abs(a-b)>eps do begin c:=(a+b)/2; if f(c)<>0 then begin if f(c)*f(b)<0 then a:=c else b:=c end; k:=k+1; end; writeln('корень = ',a:12:8); writeln('количество итераций: ',k); end else writeln('интервал задан неверно'); end.
a = -0.57 b = 1 точность вычислений eps: 0.00001 корень = -0.51726021 количество итераций: 19
a = 1 b = 2 точность вычислений eps: 0.00001 корень = 1.83345795 количество итераций: 18
f(x) обратится в 0 , если cos(x-1) > 0 => - pi/2 < x < pi/2 =>
=> (2 - pi)/2 < x < (2 + pi)/2
Корня будет два. Определим интервал для первого корня.
Левая граница а = - 0,57, правая граница b = 1
Для второго корня левая граница а = 1, правая b = 2
корни будем находить методом деления пополам.
Интервал [ a, b] делится пополам и определяется знак функции в этой точке, в зависимости от знака изменяется левая или правая граница интервала.
Программа будет следующей:
function f(x: real): real;
begin
f:=x*x-5*cos(x-1);
end;
{ основная программа }
var a,b,c,eps: real;
k: integer;
{ a - начало интервала, b - конец }
begin
write('a = '); readln(a);
write('b = '); readln(b);
if f(a)*f(b)<0 then
begin
write('точность вычислений eps: '); readln(eps);
k:=1;
while abs(a-b)>eps do
begin
c:=(a+b)/2;
if f(c)<>0 then
begin
if f(c)*f(b)<0 then
a:=c
else
b:=c
end;
k:=k+1;
end;
writeln('корень = ',a:12:8);
writeln('количество итераций: ',k);
end
else
writeln('интервал задан неверно');
end.
a = -0.57
b = 1
точность вычислений eps: 0.00001
корень = -0.51726021
количество итераций: 19
a = 1
b = 2
точность вычислений eps: 0.00001
корень = 1.83345795
количество итераций: 18