Выполним отделение корней графическим методом.
1 способ.
Корни отделяются просто, если построен график функции . Точки пересечения графика с осью дают значение корня, и по графику легко определить интервал , в котором находится только один корень.
-
2 способ.
Уравнение имеет вид . Все члены уравнения разбивают на две группы, одну из них записывают в левой части уравнения, другую – в правой, т.е. записывают уравнение в виде
После этого строят графики функций и . Абсциссы точек пересечения графиков этих двух функций и являются корнями данного уравнения. По графику и определяют интервал , в котором заключен корень.
Уточнение корней методом проб (метод половинного деления)
Итак, выполнен первый этап – отделение корня.
Второй этап заключается в уточнении корней, в вычислении корней с заданной точностью.
Пусть дано уравнение , где - непрерывная функция. Требуется найти корень этого уравнения с точностью до величин , где малое, нами заданное число.
Будем считать, что выполнено отделение корня и известно, что корень находится в интервале . Числа и можно рассматривать как приближенные значения корня, - значение корня с недостатком, а - с избытком. Погрешность этих вычислений не превышает величины . Если , то необходимая точность вычислений достигнута, и за приближенное значение корня можно принять либо , либо . Если же , то требуемая точность не достигнута и необходимо сузить интервал, в котором находится корень . Для этого на отрезке выберем точку , которая делит отрезок пополам =(a+b)/2 (в этом случае метод проб называют методом половинного интервала). Если , то - точный корень уравнения . Если же , то из двух полученных отрезков и выберем тот, на концах которого функция принимает значения противоположных знаков. Затем этот отрезок также делим пополам и проводим те же рассуждения. Процесс деления отрезка пополам продолжаем до тех пор, пока на каком – то этапе либо середина отрезка окажется корнем уравнения (случай, теоретически возможный, но чрезвычайно редко встречающийся на практике), либо отрезок, длина которого меньше заданной малой величины .
Задание.
Задан полином третьей степени
,
где
Требуется вычислить корень полинома на отрезке
(требуется составить программу в системе MATLAB (M-языке) методом половинного деления или методом Ньютона (по указанию преподавателя)).
В критериях окончания счета на ЭВМ для обоих методов принять
eps=0.001, xk=3 .
Пример
Найти корни полинома на отрезке ,
Ручной счет
Вычисление корня методом половинного деления
K | а | b | c=(a+b)/2 | f(a) | f (b) | f(c) | b-a |
3.0 | 1.5 | -2.92 | 9.79 | 0.51 | 3.0 | ||
1.5 | 0.75 | -2.92 | 0.51 | -0.67 | 1.5 | ||
0.75 | 1.5 | 1.125 | -0.67 | 0.51 | -0.11 | 0.75 | |
1.125 | 1.5 | 1.3125 | -0.11 | 0.51 | 0.173 | 0.375 | |
1.125 | 1.3125 | 1.218 | -0.11 | 0.173 | 0.0267 | 0.187 |
Решение нелинейного уравнения методом половинного деления.
Для выполнения создается М-файл. Ниже приведен текст М-файла.
%Решение нелинейного уравнения методом половинного деления
function Lab_3_6_1
a=input('Введите a=');
b=input('Введите b=');
eps=input('Введите eps=');
kmax=100;
for k=1:kmax
c=(a+b)/2;
y=f(c);
if(f(a)*y>0)
a=c;
else
b=c;
end
if((b-a)<=eps)|(y==0)|(k>=kmax)
x=c;
break;
end
end
fprintf('\n Корень уравнения x=%10.3f ',x);
fprintf('\n f(x)=%12.4g',y);
fprintf('\n Количество итерации k=%3d',k);
end
function y=f(x)
y=x^3-3.2*x^2+4.84*x-2.928;
end
Результаты расчета в командном окне при a=0, b=0, eps=0.001:
Корень уравнения x= 1.200
f(x)= 0.0006505
Количество итерации k= 12
Решение нелинейного уравнения методом Ньютона.
Пусть корень уравнения отделен на отрезке . Причем
, непрерывны и сохраняют постоянные знаки на всем отрезке .
Геометрический смысл метода Ньютона состоит в том, что дуга кривой заменяется касательной к этой кривой.
Пусть , , , . В этом случае касательную проводим в точке B.
Уравнение касательной в точке B имеет вид
при , получим
Теперь корень уравнения находится на отрезке
Продолжая процесс, найдем
Ручной счет
k | |||||
3.0 | 9.79 | 12.64 | 2.22 | 0.78 | |
2.22 | 3.01 | 5.45 | 1.67 | 0.55 | |
1.67 | 0.89 | 2.52 | 1.32 | 0.35 | |
1.32 | 0.18 | 1.62 | 1.20 | 0.12 | |
1.2 | Критерий окончания счета |
Напишем программу вычисления отделенного корня с точностью до величин порядка 0,001.
Для выполнения создается М-файл. Ниже приведен текст М-файла.
Решение нелинейного уравнения методом Ньютона.
function Lab_3_6_2
xk=input('Введите xk=');
eps=input('Введите eps=');
kmax=100;
for k=1:kmax
y=f(xk);
y1=f1(xk);
xk1=xk-y/y1;
if(abs(xk1-xk)<eps)|(k>kmax)
break;
end
xk=xk1;
end
y2=f(xk1);
fprintf('\n Корень уравнения x=%10.3f',xk1);
fprintf('\n f(x)=%12.4g',y);
fprintf('\n Количество итерации k=%3d',k);
end
function y=f(x)
y=x^3-3.2*x^2+4.84*x-2.928;
end
function y1=f1(x)
y1=3*x^2-6.4*x+4.84;
end
Результаты расчета в командном окне при xk=3, eps=0.001:
Корень уравнения x= 1.200
f(x)= 0.0009755
Количество итерации k= 3
В системе MATLAB имеется большое количество функций для работы с полиномами, с использованием которых можно вычислить значение полинома, найти корни полинома, выполнить операции умножения и деления полиномов, произвести дифференцирование и интегрирование полиномов.
Как известно, полином (или многочлен) — это выражение вида
Pn(x)=anxn+an-1xn-1+...+a2x2+a1x+a0
где a0, a1, a2, …, an-1, an — постоянные коэффициенты.
В MATLAB полином задаётся и хранится в виде вектора, элементами которого являются коэффициенты полинома
Так, например, для задания полинома
следует ввести команду
>> p=[5 -4 2 -1 8]
p =
5 -4 2 -1 8