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 ] |