double arrow

II. Отделения корней программным способом

Пусть имеется уравнение F(x)=0, причем все корни находятся на отрезке [ a,b ]. Будем вычислять все значения функции y=F(x), начиная с точки x=a, двигаясь вправо шагом h. Если функция на отрезке длины h меняет знак (т.е. F(a)F(b)<0) и монотонна, можно считать, что на этом отрезке ровно 1 корень.


Правильность нахождения отрезков, содержащих один корень, зависит от характера функции y=F(x) и от величины шага h. При выборе шага должна соблюдаться «золотая середина», т.к. шаг h должен быть с одной стороны достаточно малым, чтобы не произошло потери корней, а с другой стороны не настолько маленьким, чтобы число отрезков не было слишком большим.

Программа отделения корней:

program otd_korn;

var x1,x2,a,b,h:real;

function f(x: real):real;

begin {записать, функцию в виде f:=[математическое выражение]} f:=x*x*x-x+4;

end;

begin

write('Введите левую границу отрезка - a: ');readln(a);

write('Введите правую границу отрезка - b: ');readln(b);

write('Введите шаг - h:'); readln(h);

x1:=a; x2:=x1+h;

while x2<b do

begin

if f(x1)*f(x2)<0

then writeln('[ ',x1:6:2,', ',x2:6:2,' ]');

x1:=x2; x2:=x1+h;

end;

readln;

end.

Блок-схема отделения корней: Результаты выполнения программы:
Введите левую границу отрезка - a: -100 Введите правую границу отрезка - b: 100 Введите шаг - h:1 [ -2.00, -1.00 ]


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: