Вопрос по информатике:
Паскаль.
На интервале (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) становятся меньше ε , делается сообщение о завершении вычислений.
- 23.09.2017 17:09
- Информатика
- remove_red_eye 10917
- thumb_up 11
Ответы и объяснения 2
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))
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
- 24.09.2017 00:40
- thumb_up 10
Внимание! Если программа не работает, обновите версию!
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)
if Sign(fa)=Sign(y) then a:=x else b:=x;
n+=1
end
end.
- 26.09.2017 00:06
- thumb_up 39
Знаете ответ? Поделитесь им!
Есть сомнения?
Не нашли подходящего ответа на вопрос или ответ отсутствует? Воспользуйтесь поиском по сайту, чтобы найти все ответы на похожие вопросы в разделе Информатика.
Трудности с домашними заданиями? Не стесняйтесь попросить о помощи - смело задавайте вопросы!
Информатика — наука о методах и процессах сбора, хранения, обработки, передачи, анализа и оценки информации с применением компьютерных технологий, обеспечивающих возможность её использования для принятия решений.