МОДУЛЬ 2. ЧИСЛЕННЫЕ МЕТОДЫ
Лабораторная работа № 1
ПРИБЛИЖЕННОЕ РЕШЕНИЕ АЛГЕБРАИЧЕСКИХ
И ТРАНСЦЕНДЕНТНЫХ УРАВНЕНИЙ
МЕТОДОМ ПОЛОВИННОГО ДЕЛЕНИЯ (ДИХОТОМИИ)
Цель работы: используя метод половинного деления, вычислить с точностью до все действительные корни полинома .
Постановка задачи
1. Отделить корни для заданного алгебраического уравнения .Для решения этой задачи можно использовать аналитический, графический или табличный метод.
2. Уточнить один из корней методом дихотомии (ручной счет, 5-7 итераций).
3. Решить задачу уточнения корней двумя способами в пакете МathCAD, используя оператор if и программный блок.
4. Решить задачу отделения и уточнения корней методом половинного деления в среде MATLAB.
5. Сравнить все полученные результаты. Проверить правильность результатов с помощью встроенных функций пакетов. Сделать выводы.
Теоретические сведения
Постановка задачи. Решение уравнений является одной из задач, наиболее часто встречающихся в практике инженера. Всякое уравнение с одним неизвестным можно записать в виде
. (1.1)
Решением уравнения (1.1) называется такое значение (корень уравнения), при котором . Формулы для нахождения точного значения корней известны только для узкого класса уравнений. На практике часто встречаются уравнения, которые невозможно решить с помощью элементарных приемов. Кроме того, в инженерных расчетах в большинстве случаев нельзя говорить о точном решении уравнений, так как входящие в них коэффициенты заданы приближенно. Поэтому важное значение приобретают методы, позволяющие сколь угодно точно находить корни уравнения (1.1).
Задача решения уравнения с заданной точностью обычно содержит два этапа:
а) отделение корней – выделение отрезков, в которых содержится один и только один корень уравнения (1.1);
б) уточнение приближенных корней, т.е. вычисление их с требуемой точностью.
Для каждого из этапов решения задачи разработаны свои численные методы.
Отделение действительных корней. Рассмотрим уравнение (1.1). Для отделения корней используем теорему Больцано–Коши: если непрерывная функция принимает значения разных знаков на концах отрезка , т.е. , то внутри этого
отрезка находится по крайней мере один корень уравнения . Этот корень будет единственным, если производная существует и сохраняет постоянный знак внутри интервала .
На практике часто используют табличный метод отделения корней и графический.
1. Табличный метод (метод перебора).
Находим знаки функции в ряде точек из области определения функции , , , …. Если , то в силу сформулированной выше теоремы на отрезке имеется по крайней мере один корень уравнения . Теперь нужно тем или иным способом проверить, является ли этот корень единственным. Если на отрезке не меняет знак, корень – единственный (в силу монотонности ).
2. Графический метод.
Строим график функции и по чертежу находим интервалы, содержащие абциссы точек пересечения графика функции с осью , т.е. нули функции . Если уравнение не имеет близких по значению корней, то этим способом корни легко отделяются. Иногда уравнение удобно представить в виде , где функции – более простые, и, построив графики функций и , определить интервалы, содержащие точки их пересечения.
Рассмотрим этап отделения корней в случае алгебраического уравнения n-степени ():
, (1.2)
где коэффициенты – действительные числа, причем .
Основная теорема алгебры: алгебраическое уравнение n-степени (а следовательно, и полином P(x)) имеет ровно n корней, действительных или комплексных, при условии, что каждый корень считается столько раз, какова его кратность.
Теорема 1. Если коэффициенты алгебраического уравнения (1.2) действительные, то комплексные корни этого уравнения попарно комплексно-сопряженные, т.е. если ( – действительные) есть корень уравнения (1.2) кратности s, то число также является корнем этого уравнения и имеет ту же кратность s.
Следствие. Алгебраическое уравнение нечетной степени с действительными коэффициентами имеет по меньшей мере одиндействительный корень.
Грубая оценка модулей корней уравнения (1.2) получается на основании теоремы 2.
Теорема 2. Пусть , где – коэффициенты уравнения (1.2). Тогда модули всех корней уравнения (1.2) удовлетворяют неравенству
,
т.е. корни этого уравнения на комплексной плоскости расположены внутри круга.
Уточнение корня методом половинного деления. Пусть найден отрезок , на котором находится единственный корень уравнения . Обозначим его . Для нахождения корня уравнения делим отрезок пополам. Если , то и задача решена. В случае выбираем ту половину отрезка , на концах которой функция имеет противоположные знаки. Новый суженный отрезок снова делим пополам, повторяем те же действия и т.д. В результате на каком-то этапе получаем точный корень уравнения или последовательность вложенных друг в друга отрезков , ,…, ,…. Доказано, что . Для вычисления корня уравнения с точностью до отрезок делим до тех пор, пока выполнится условие . За приближённое значение корня выбираем среднее значение на отрезке :
.
Дихотомия проста и надежна: к простому корню она сходится для любых непрерывных функций , в том числе и недифференцируемых. Метод половинного деления устойчив к погрешностям округления, но сходится он медленно. Количество итераций, необходимое для достижения заданной точности , можно оценить заранее по формуле
.
Примеры выполнения заданий
Пример ручного счета
Вычислить с точностью действительный корень уравнения
.
Рассмотрим функцию .(требуемая форма уравнения должна быть f(x)=0).
Интервал изоляции корня [1;2], т.к. f(1)=-3 и f(2)=6.
Соответственно, корень заданного уравнения находится внутри интервал [1, 2] и является единственным, т.к. >0 для всех аргументов х.
Обозначим а0=1, b0=2. Процесс деления пополам нужно продолжать до тех пор, пока .
Вычисления оформим в виде табл. 1.1 (приведено 5 итераций).
Табл 1.1
1.25 1.375 1.4375 | 1.5 1.5 1.5 1.5 | 0.5 0.25 0.125 0.0625 | 1.5 1.25 1.375 1.4375 1.46875 | 0.37 -1.58 -0.65 -0.15 |
Ответ: .
Заметим, что в данном примере оформления метода половинного деления нет необходимости вычисления f(x) в крайних точках интервала, т.к. заранее определено, что в точке an функция f(x) должна быть положительна, а в bn - отрицательна. Точность метода определяется по значению модуля разности
Расчет в пакете MATHCAD
Пусть требуется вычислить корни уравнения
с точностью e =10-5.
1. Интервалы изоляции корней для заданного уравнения определяются с помощью графика:
Интервалы изоляции корней:
2. Решение уравнения методом половинного деления с использованием if:
Замечание. Для увеличения точности необходимо увеличить количество итераций или необходимое количество итераций n можно задать с помощью формулы
3. Решение уравнения методом половинного деления с использованием простейшего программного блока:
Программный блок с проверкой корректности задания отрезка, содержащего корень уравнения, и с подсчетом количества итераций для выполнения заданной точности решения может иметь такой вид:
4. Решение уравнения с помощью встроенных функций.
Решение уравнения с помощью встроенной функции root:
– переопределение встроенной точности решения
Решение уравнения с помощью функции polyroots:
Расчет в пакете MATLAB
1. Сравнение кодов метода дихотомии в пакетах MATHCAD и MATLAB представлено в виде табл.1.1.
Табл.1.1.
MATHCAD | MATLAB |
function res = f(x) res=x^5-2*x-10 end | |
function [rez, k] =R(a, b, eps) if f(a)*f(b)>0 error('error'); else i=0; while abs(b-a)>2* eps c=(a+b)/2; if f(c)*f(a)>0 a=c; end if f(c)*f(b)>0 b=c; end if f(c)==0 break; end i=i+1; end rez=c k=i end | |
>> R(0,2,0.00000); rez = 1.6794 k =52 |
2. Функция отделения и уточнения корней для решения алгебраического уравнения .
function RTS=dixotomia(pol,eps);
% метод половинного деления для решения алгебраических уравнений
% функция определяет интервалы изоляции действительных корней
% формирует вектор действительных корней уравнения
% левая граница интервала, содержащего все корни уравнения
A0=-1-max(abs(pol))/(abs(pol(1)));
disp(A0)
% правая граница интервала, содержащего все корни уравнения
A1=-A0;
disp(A1)
d=A0;
d1=d;
i=1;
while d<=A1 % цикл отделения действительных корней (шаг 0.1)
d=d+0.1;
if polyval(pol,d)*polyval(pol,d1)<0
K(i)=d1;K(i+1)=d;
i=i+2;
end;
d1=d;
end;
disp(K);
% количество действительных корней
nrts=i-1;
i=1; j=1;
while i<nrts % цикл уточнения действительных корней
X=K(i); X1=K(i+1); x=X; x1=X1;
% метод половинного деления
while abs(polyval(pol,x)-polyval(pol,x1))>eps
x1=X; x=(X+X1)/2;
if polyval(pol,x)*polyval(pol,x1)>0
X=(X+X1)/2;
else
X1=(X+X1)/2;
end;
end;
% вектор, содержащий действительные корни уравнения
RTS(j)=x1; i=i+2; j=j+1;
end
RTS;
end
Результаты вычислений:
>> dixotomia([1 3 -12],0.00001) – вызов функции; полином задается значениями коэффициентов
-13 – левая граница интервала, содержащего корни уравнения
13 – правая граница интервала, содержащего корни уравнения
-5.3000 -5.2000 2.2000 2.3000 – интервалы изоляции корней
RTS =
-5.2749 2.2749 – корни уравнения
В арианты лабораторных работ
Номер варианта | Уравнение | Номер варианта | Уравнение |