Паскаль.
На интервале (a, b) найти с точностью ε= 10⁻⁵ корни уравнения f(x)=0 методом деления отрезка пополам.
Примечание: a, b и ε вводятся с клавиатуры; на экран осуществляется вывод промежуточных результатов в три столбика (n=K, x=K, f(x)=K), где n – номер шага (целое число), x – середина отрезка [a,b] ; x и f(x) выводятся с точностью до 6 знаков после запятой; когда и длина отрезка [a,b] , и модуль f(x) становятся меньше ε , делается сообщение о завершении вычислений.
Приложения:
Ответы
Ответ дал:
0
function f(var x: real): real;
begin
f:=power(x,5)-0.3*abs(x-1);
end;
var a,b,c,eps: real;
k: integer;
begin
writeln('метод деления пополам');
repeat
write('границы интервала a b через пробел: ');
readln(a,b);
if f(a)*f(b)>0 then writeln('не верные границы интервала');
until f(a)*f(b)<0;
write('точность вычислений eps = '); readln(eps);
repeat
c:=(a+b)/2;
if sign(f(c))=sign(f(b)) then b:=c
else a:=c;
inc(k);
writeln('n = ',k,' x = ',c:8:6,' f(x) = ',f(c):8:6);
until (abs(f(c))<eps) and (b-a<eps);
writeln('корень x = ',c:8:6,' f(x) = ',f(c):8:6);
end.
метод деления пополам
границы интервала a b через пробел: 0 1
точность вычислений eps = 1.0e-5
n = 1 x = 0.500000 f(x) = -0.118750
n = 2 x = 0.750000 f(x) = 0.162305
n = 3 x = 0.625000 f(x) = -0.017133
n = 4 x = 0.687500 f(x) = 0.059840
n = 5 x = 0.656250 f(x) = 0.018591
n = 6 x = 0.640625 f(x) = 0.000087
n = 7 x = 0.632813 f(x) = -0.008677
n = 8 x = 0.636719 f(x) = -0.004335
n = 9 x = 0.638672 f(x) = -0.002134
n = 10 x = 0.639648 f(x) = -0.001026
n = 11 x = 0.640137 f(x) = -0.000470
n = 12 x = 0.640381 f(x) = -0.000192
n = 13 x = 0.640503 f(x) = -0.000052
n = 14 x = 0.640564 f(x) = 0.000017
n = 15 x = 0.640533 f(x) = -0.000018
n = 16 x = 0.640549 f(x) = 0.000000
n = 17 x = 0.640556 f(x) = 0.000009
корень x = 0.640556 f(x) = 0.000009
begin
f:=power(x,5)-0.3*abs(x-1);
end;
var a,b,c,eps: real;
k: integer;
begin
writeln('метод деления пополам');
repeat
write('границы интервала a b через пробел: ');
readln(a,b);
if f(a)*f(b)>0 then writeln('не верные границы интервала');
until f(a)*f(b)<0;
write('точность вычислений eps = '); readln(eps);
repeat
c:=(a+b)/2;
if sign(f(c))=sign(f(b)) then b:=c
else a:=c;
inc(k);
writeln('n = ',k,' x = ',c:8:6,' f(x) = ',f(c):8:6);
until (abs(f(c))<eps) and (b-a<eps);
writeln('корень x = ',c:8:6,' f(x) = ',f(c):8:6);
end.
метод деления пополам
границы интервала a b через пробел: 0 1
точность вычислений eps = 1.0e-5
n = 1 x = 0.500000 f(x) = -0.118750
n = 2 x = 0.750000 f(x) = 0.162305
n = 3 x = 0.625000 f(x) = -0.017133
n = 4 x = 0.687500 f(x) = 0.059840
n = 5 x = 0.656250 f(x) = 0.018591
n = 6 x = 0.640625 f(x) = 0.000087
n = 7 x = 0.632813 f(x) = -0.008677
n = 8 x = 0.636719 f(x) = -0.004335
n = 9 x = 0.638672 f(x) = -0.002134
n = 10 x = 0.639648 f(x) = -0.001026
n = 11 x = 0.640137 f(x) = -0.000470
n = 12 x = 0.640381 f(x) = -0.000192
n = 13 x = 0.640503 f(x) = -0.000052
n = 14 x = 0.640564 f(x) = 0.000017
n = 15 x = 0.640533 f(x) = -0.000018
n = 16 x = 0.640549 f(x) = 0.000000
n = 17 x = 0.640556 f(x) = 0.000009
корень x = 0.640556 f(x) = 0.000009
Ответ дал:
0
PascalABC.NET 3.3.5, сборка 1644 от 23.03.2018
Внимание! Если программа не работает, обновите версию!
begin
var f:real->real:=x->x**5-0.3*Abs(x-1);
var (a,b):=ReadReal2('Введите границы интервала:');
var (fa,fb):=(f(a),f(b));
var eps:=ReadReal('Введите требуемую точность:');
var n:=1;
Writeln(' n',12*' ','x',14*' ','y');
while True do begin
var x:=(a+b)/2;
var y:=f(x);
if (Abs(y)<eps) and (Abs(b-a)<eps) then break;
Writeln(n:3,x:15:6,y:15:6);
if Sign(fa)=Sign(y) then a:=x else b:=x;
n+=1
end
end.
Внимание! Если программа не работает, обновите версию!
begin
var f:real->real:=x->x**5-0.3*Abs(x-1);
var (a,b):=ReadReal2('Введите границы интервала:');
var (fa,fb):=(f(a),f(b));
var eps:=ReadReal('Введите требуемую точность:');
var n:=1;
Writeln(' n',12*' ','x',14*' ','y');
while True do begin
var x:=(a+b)/2;
var y:=f(x);
if (Abs(y)<eps) and (Abs(b-a)<eps) then break;
Writeln(n:3,x:15:6,y:15:6);
if Sign(fa)=Sign(y) then a:=x else b:=x;
n+=1
end
end.
Приложения:
Вас заинтересует
2 года назад
3 года назад
3 года назад
9 лет назад