- •Содержание
- •2. Понятие уравнения
- •2.1. Численное решение нелинейных алгебраических и транцендентных уравнений
- •2.1.1. Метод перебора
- •2.1.2. Метод дихотомии (половинного деления)
- •2.1.3. Метод отделения корней
- •2.1.4. Метод хорд
- •2.1.5. Метод касательных (метод Ньютона, метод линеаризованной итерации)
- •2.1.6. Метод секущих (комбинированный метод секущих – хорд, метод хорд - касательных)
- •2.1.7. Метод простых итераций
- •2.2. Численные методы решения систем нелинейных алгебраических уравнений (снау)
- •2.2.1. Метод последовательных приближений (простых итераций) для снау
- •2.2.2. Метод Ньютона для снау
- •2.2.2.1. Вариант 1
- •2.2.2.2. Вариант 2
- •2.2.2.3. Меры предосторожности в методе Ньютона
- •2.2.2.4. Локальное решение нелинейного уравнения
- •2.2.3. Метод Ньютона по параметру
- •2.2.4. Метод Бройдена
- •2.2.5. Метод Матвеева
- •Литература
- •Задания и примеры выполнения нахождение корня нелинейного уравнения
- •1. Постановка задачи
- •2. Методы решения задачи
- •2.1 Метод деления отpезка пополам
- •2.2 Метод простой итерации
- •2.3 Метод Ньютона
- •Методы решения системы нелинейных уравнений
- •Постановка задачи
- •2. Методы решения системы нелинейных уравнений
- •2.1.Метод простой итерации
- •2.2. Метод Ньютона
2.1.6. Метод секущих (комбинированный метод секущих – хорд, метод хорд - касательных)
В методе секущих линейная аппроксимация функции строится с использованием двух предыдущих итераций и . Метод основан на уточнении приближённого значения корня с помощью линейной интерполяции. При этом на каждом шаге за приближённое значение корня принимается корень интерполяционного многочлена первой степени, построенного по значениям функции в точках и .
Вычисления строятся по итерационной формуле
.
Это и есть формула метода секущих.
Геометрический смысл такого изменения алгоритма Ньютона в том, что от аппроксимации функции касательной мы переходим к секущей (рис. 6).
Рис. 6. Метод секущих.
Заметим, что формула метода секущих соответствует формуле метода Ньютона, в которой используется аппроксимация
.
Использование этой аппроксимации избавляет нас от необходимости вычислять производную, но приводит к замедлению сходимости алгоритма.
Для того, чтобы начать итерационный процесс, необходимо задать два начальных приближения x 0 и x 1. Затем каждое новое приближение к корню получаем по формуле . Заканчиваем процесс уточнения корня при выполнении условия x k+1 - x k
где – заданная абсолютная погрешность определения корня.
Метод секущих уступает методу Ньютона в скорости сходимости, однако не требует вычисления производной левой части уравнения.
По алгоритму метод секущих близок к методу хорд, однако в отличии от последнего, начальные приближения в методе секущих могут располагаться как с разных сторон от корня, так и с одной стороны; кроме того, при уточнения корня не проверяются знаки функции .
Метод секущих сходится сверхлинейно со скоростью .
Метод секущих может не сходится, во многом по тем же самым причинам, что и метод Ньютона. Например, при метод просто неопределён. Однако, многие проблема можно обойти, если включить в алгоритм предупредительные меры.
2.1.7. Метод простых итераций
Существует простой метод, позволяющий решить уравнение . Рассматриваемое уравнение представляют в виде и находят более точное значение корня по первому приближению с помощью формулы .
Повторяя этот процесс («итерируя») несколько раз, можно получить значения корня с любой степенью точности, если на интервале между корнем уравнения и первым приближением . Если это условие выполняется, то считается, что решение сходится к искомому корню.
При этом сходимость будет более быстрой для малых значений . Поэтому особенно выгодно подобрать, если это возможно, функцию так, чтобы её производная в точке истинного значения корня обращалась в нуль. Если же это условие не выполнимо, то уравнение следует преобразовать (хотя бы переходом к обратной функции). Если , то два смежных приближённых значения корня, полученных путём итерации, будут последовательно больше и меньше корня, что позволяет оценить достигнутую степень точности.
Метод простой итерации относится к числу медленно сходящихся процессов. Поэтому его целесообразно применять для получения значения корня с небольшой точностью, а также для получения более точного результата с использованием одного из способов ускорения итерационных процессов.
Исходя из предположения, что метод может не сойтись, необходимо предусмотреть в программе следующие условия окончания работы:
Остановка, как только .
Остановка, как только число итераций достигнет N.
Величины задаются.
Алгоритм , реализующий данный метод в сочетании с методом Эйткена, выражается следующей схемой:
Вычисление ( )-го приближения по формуле при фиксированном значении (начиная с );
Вычисление ( )-го приближения по той же формуле;
Проверка достигнутой точности вычислений . Если искомый корень вычислен с нужной степенью точности, то задача считается решенной и управление передаётся оператору п. 5, при недостаточной точности вычислений выполняется оператор п. 4;
Вычисление ( )-го приближения по формуле Эйткена
;
Окончание вычислений искомого корня.
Пример 1.
PROGRAM Me_Pro_It;
{Решение нелинейных и транцендентных уравнений методом
простых итераций}
{Рассматриваемое уравнение представляется в виде x=f(x). Задают
начальное приближение X0 и уточняют с помощью формулы X1=f(X0).
Повторяют процесс до тех пор, пока не будет достигнута заданная
точность Epsi}
Uses CRT;
Type
Func = Function(a,b,c,X:Real):Real;
Const
a=5.67;
b=4.794;
c=4.5;
Epsi=0.001;
Var
I : Integer;
X0, X, Y : Real;
{$F+}
Function F(a,b,c,X:Real):Real;
{Преобразованная к виду x=f(x) заданная функция}
Begin
F:= a/c*SIN(b*X);
End; {F}
{$F-}
Procedure Iter(a,b,c,Epsi,X0:Real;var X, Y : Real; var I : Integer; F:Func);
Var E:Real;
Begin
X:= X0; {Начальное приближение}
I:=0; {Параметр, позволяющий определить число итераций}
Repeat
I:=I+1;
Y:= F(a,b,c,X);
WriteLn (' Кол. итер.', I:7, ' X= ',X:5:3,' Y= ',Y:5:3);
E:=ABS(Y-X);
X:=Y;
Until (E < Epsi);
End; {Iter}
BEGIN
{Головная программа}
TextBackGround(Black);{Меняет цвет фона на черный, модуль Crt}
ClrScr;{Очищает экран, модуль Crt}
HighVideo; {Устанавливает высокую яркость символов, модуль Crt}
TextColor(LightRed);{Меняет цвет символов на светло-красный, модуль Crt}
WriteLn (' Работает программа Me_Pro_It');
TextColor(Yellow);{Меняет цвет символов на желтый, модуль Crt}
Write (' Введите начальное приближение корня ');
ReadLn (X0);
Iter(a,b,c,Epsi,X0,X, Y,I,F);
TextColor(LightRed);{Меняет цвет символов на светло-красный, модуль Crt}
WriteLn (' **************** РЕЗУЛЬТАТ ****************');
TextColor(LightGreen);{Меняет цвет символов на светло-зеленый, модуль Crt}
WriteLn (' Кол. итер.', I:7, ' X= ',X:5:3,' Y= ',Y:5:3);
NormVideo;{Устанавливает первоначальную яркость символов, модуль Crt}
TextColor(LightGray);{Меняет цвет символов на светло-серый, модуль Crt}
WriteLn (' ДЛЯ ПРОДОЛЖЕНИЯ НАЖМИТЕ ЛЮБУЮ КЛАВИШУ!!!');
Repeat Until KeyPressed; {Ожидает нажатия любой клавиши, модуль Crt}
ClrScr;{Очищает экран, модуль Crt}
END.