ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ 0. Постановка задачи y

реклама
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
-1-
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
0. Постановка задачи
Задача нахождения корней нелинейного уравнения вида y=f(x) часто встречается в научных исследований и инженерных расчетах. В зависимости от свойств
функции f(x) уравнение y = f(x) = 0 может иметь конечное или бесконечное число
решений.
Уравнение вида y = f(x) называется нелинейным, если отсутствует линейная
связь переменной x и значения функции y.
Например: tg x 
1
или ax12  bx1 x2  c x2  0 .
x
Методы решения нелинейных уравнений делятся на прямые и итерационные.
Прямые методы позволяют записать корни уравнения в виде точных аналитических формул. Для некоторых типов нелинейных уравнений прямые методы решения известны (например, для алгебраических уравнений не выше 4-й степени, для
частных случаев тригонометрических и логарифмических уравнений и др.). Однако
для большинства нелинейных уравнений найти решение в явном виде невозможно.
Для их решения используются итерационные методы, т.е. методы последовательного
приближения к точному решению x*.
Итерационный процесс решения уравнения f(x) = 0 состоит в последовательном уточнении некоторого начального приближения x0. В результате итераций находится последовательность приближенных значений корня: x1 , x2 ,, xn . Если эти
значения с увеличением числа итераций n приближаются к точному значению корня
x  x  ), то говорят, что итерационный процесс решения сходится, в
x*(т.е. lim
k  k
противном случае – расходится.
-2-
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
1. Отделение корней
Определение 1. Дано уравнение
f x   0 ,
(1)
где f x  определена и непрерывна в некотором конечном или бесконечном интервале a  x  b .
 
Всякое значение x*, обращающее функцию f x  в нуль, то есть такое, что
f x   0 , называется корнем уравнения (1) или нулем функции f x  .
Приближенное нахождение корней уравнения (1) обычно складывается из
двух этапов:
1. Отделение корней, то есть поиск интервалов ai , bi , называемых также отрезками локализации корней, в которых содержится один корень уравнения (1).
2. Уточнение приближенных корней, то есть доведение их до заданной точности.
f(x)
0
Для отделения корней полезна
следующая теорема:
a
b
Теорема 1. Если непрерывная функция f x  принимает значения разных знаков на концах отрезка [a, b] , то есть f a   f b  0 , то внутри этого отрезка содержится, по меньшей мере, один корень уравнения f x   0 , то есть найдется хотя бы
 
одно число x   a, b  , такое, что f x   0 .
Корень заведомо единственный, если f x  существует и сохраняет постоянный знак внутри интервала [a, b].
-3-
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
СПОСОБЫ ОТДЕЛЕНИЯ КОРНЕЙ.
1. Табличный способ отделения корней. В заданном интервале [a, b] задается сетка a  x1  x2  ...  xn  b и вычисляют значения функции f xi  (достаточно
определить лишь знаки в узлах x i ). Если окажется, что f xi  f xi1   0 , то в силу
теоремы 1 в интервале xi , xi 1  имеется корень уравнения.
Пример. Определить корни уравнения
f x   x 3  6 x  2  0 .
(*)
Решение: Составляем таблицу.
 -3
x
f(x)
-
-
-1
0
1
3
+
+
-
+

+
Следовательно, уравнение (*) имеет три действительных корня лежащих в интервалах (-3,-1), (0,1) и (1,3).
2. Графический способ отделения корней.
Пример. x lg x  1.
Решение: Преобразуем уравнение к виду lg x 
1
,
x
И построим 2 графика как на рисунке. Искомый интервал [a, b] = [2, 3].
3. Отделение корней путем исследования функции f(x) методами математического анализа.
4. Отделение корней путем использования современных систем компьютерной алгебры.
Итак, мы выделили интервалы, в которых содержится единственный корень.
Рассмотрим теперь методы уточнения корней.
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
-4-
2. Метод половинного деления (дихотомии, бисекции)
Пусть требуется найти корень уравнения (1) с заданной точностью  > 0. Отрезок локализации [a, b], содержащий только один корень, будем считать заданным.
Предположим, что f(x) непрерывна на [a, b] и f(x)f(x) < 0.
Разделим отрезок [a, b] пополам точкой с = (a + b)/2. Если f(c)  0, то возможны два случая:
1) функция f(x) меняет знак на отрезке [a, c];
2) функция f(x) меняет знак на отрезке [c, b].
Выбирая в каждом случае тот отрезок, на котором функция меняет знак, и
продолжая процесс половинного деления дальше, можно дойти до сколь угодно малого отрезка, содержащего корень уравнения.
На практике процесс прекращается, когда длина отрезка L = (b – a), полученная на очередной итерации, становится меньше заданной погрешности :
L
В качестве корня берется величина
x 
ba
.
2
Положительные стороны метода:
 всегда сходится («абсолютно застрахован от неудачи»).
Отрицательные стороны метода:
 довольно медленный;
 не обобщается на системы уравнений.
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
-5-
Пример 1. Решение в пакете MATLAB методом половинного деления уравнения x  11x 3  x 2  x  0.1  0 с точностью   105 на отрезке [-1, 1].
4
Для решения данной задачи в первую очередь создадим рабочий каталог
lab2_1. В этом каталоге необходимо создать 3 файла:
1. М – файл функция f.m, содержащий описание функции
f x   x 4  11x 3  x 2  x  0.1.
function z=f(x)
% функция f(x)
z=x.^4-11*x.^3+x.^2+x+0.1;
2. М – файл функция div2.m, содержащий описание функции, возвращающей
значение корня уравнения f x   0 методом половинного деления
function z=div2(f,a,b,eps)
% f имя m-файла, содержащего описание функции f
% a левая граница отрезка, на котором ищется
%
решение уравнения
% b правая граница отрезка, на котором ищется
%
решение уравнения
% eps - точность решения
L=b-a;
while L > eps
c=(a+b)/2;
if f(c)*f(a)<0
b=c;
else
a=c;
end;
L=b-a;
end;
z=(a+b)/2;
3. М – файл сценарий task1.m. Это основная программа, из которой вызываются М – файлы функции.
-6-
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
Данный файл будем создавать по частям. на первом этапе построим график
функции на отрезке [-1,1].
% Решение уравнения методом половинного деления
% График функции на отрезке [1, 2]
x=-1:10^-3:1;
plot(x,f(x)); grid on
График функции
15
10
f(x)
5
0
-5
-10
-1
-0.5
0
x
0.5
1
На втором этапе проведем отделение корней графически. В результате получим отрезок [0.3, 0.5]. Зададим границы отрезка и построим график на данном отрезке локализации.
% Задание отрезка локализации корня
a=0.3;
b=0.5;
% График функции на отрезке локализации корня [0.3, 0.5]
figure % Создание второго графика
x=a:10^-3:b;
plot(x,f(x)); grid on
-7-
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
График на отрезке локализации
0.3
0.2
0.1
f(x)
0
-0.1
-0.2
-0.3
-0.4
-0.5
0.3
0.32
0.34
0.36
0.38
0.4
x
0.42
0.44
Убедимся, что корень локализован верно.
На третьем этапе вычислим корень уравнения
% Решение уравнения
format long e
x=div2(@f,a,b,10^-5)
% Проверка
format short e
e=f(x)
В командном окне получим
x =
3.941741943359375e-001
e =
2.7715e-006
0.46
0.48
0.5
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
-8-
Пример 2. Решение в пакете MATLAB уравнения x 4  11x 3  x 2  x  0.1  0 с
точностью   105 на отрезке [-1, 1] с использованием функции fzero.
Функция fzero() имеет множество форматов, мы рассмотрим следующий:
fzero('f(х)', [a , b])
fzero('f(х)', [a , b] , tol )
Здесь
 'f(х)' — решаемое уравнение, взятое в одиночные кавычки;
 [a, b]—область локализации корня;
 tol — заданная погрешность вычисления корня; в случае отсутствия берется значение tol по умолчанию 10-6.
Для решения данной задачи в первую очередь создадим рабочий каталог
lab2_2. В этом каталоге необходимо создать 2 файла:
1. М – файл функция f.m, содержащий описание функции
f x   x 4  11x 3  x 2  x  0.1.
Его мы копируем в проводнике из папки lab2_1.
3. М – файл сценарий task2.m. Это основная программа, из которой вызываются М – файлы функции.
Мы копируем из папки lab2_1 файл task1.m и переименовываем его в файл
task2.m. В этом файле оставляем строки, полученные на первом и втором этапе
предыдущего примера – построение графиков, локализация корня и задание отрезка
локализации.
На третьем этапе вычислим корень уравнения
% Решение уравнения
format long e
x=fzero('f(x)',[a,b],10^-5)
% Проверка
format short e
e=f(x)
В командном окне получим
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
-9-
x =
3.941750901087657e-001
e =
-2.7756e-017
Функция fzero вычисляет корень уравнения в два этапа, на первом из которых
происходит сужение отрезка локализации методом половинного деления. На втором
этапе используется модификация метода Ньютона, рассматриваемая в следующем
разделе.
Заметим, что оба варианта использования функции f(x) в качестве параметра:
@f и 'f(х)' – дают одинаковый результат.
-10-
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
3. Метод Ньютона (касательных)
Предположим, отделение корней произведено и на отрезке [a, b] расположен
один корень, который необходимо уточнить с точностью .
Пусть задано начальное приближение x0  a, b . Расчетная формула метода
Ньютона:
xn1  xn 
f  xn 
.
f  xn 
(2)
Если
x n1  x n   ,
(3)
то значение xn1 считается приближенным значением корня уравнения (1).
Выражение для метода Ньютона получается из разложения функции f(x) в ряд
Тейлора в окрестности точки x n . Ограничиваясь двумя членами ряда, получим
f x   f xn   x  xn  f xn  .
Отсюда, полагая f x  0 и решая полученное уравнение относительно x, получим
x  xn 
f xn 
.
f  xn 
Выражение (4) получается при замене x на xn+1.
Геометрическая иллюстрация
f(x)
{xn, f(xn)}
x*
x
xn+2
xn+1
xn
-11-
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
Уравнение касательной к кривой в точке xn , f xn :
y  f xn   x  xn  f xn  .
Полагая y  0, x  xn 1, получаем (2).
Теорема 2. Если f a  f b  0 , причем f x  и f x  отличны от нуля и не меняют знак на отрезке [a, b] , то при любом начальном приближении x0  [a, b] , удовлетворяющему условию
f x0  f x0   0 ,
(т.е. знаки функции и второй производной в точке х0 совпадают на интервале [a, b])
итерационный процесс (2) сходится к корню уравнения f x   0 с любой заданной
точностью.
Замечание 1. Формула (2) справедлива и для комплексных корней.
Замечание 2. Скорость сходимости выше, чем у других методов.
Замечание 3. В общем случае критерий окончания итерационного процесса
(3) не гарантирует, что с той же точностью совпадет xn и x*. Поэтому целесообразно
дополнительно проверять также условие f xn    f .
-12-
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
4. Метод секущих
Если итерации x n и x n1 расположены достаточно близко друг к другу, то
производную f  x n  в алгоритме Ньютона можно заменить ее приближенным значением
f  xn    f  xn   f xn 1 
1
.
xn  xn 1
Таким образом, из формулы метода Ньютона получим формулу секущих
xn 1  xn 
xn  xn 1
f  xn  .
f  xn   f  xn 1 
Геометрический смысл такого изменения алгоритма Ньютона состоит в том,
что от аппроксимации f  x  касательной мы переходим к секущей – прямой, проходящей через 2 точки.
f(x)
x*
x
x3
x2
x1
x0
Замечание 1. Здесь в начале итерационного процесса задаются две точки x0 и
x1 .
Замечание 2. Условия сходимости метода и критерий окончания итерационного процесса те же, что и в методе Ньютона.
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
-13-
Замечание 3. Метод секущих также уступает методу Ньютона в скорости сходимости, однако не требует вычисления производной.
Пример 3. Решение в пакете MATLAB уравнения x 4  11x 3  x 2  x  0.1  0 с
точностью   105 на отрезке [-1, 1] с использованием функции fzero.
Здесь мы рассмотрим следующие форматы функции fzero():
fzero('f(х)', х)
fzero('f(х)', х, tol)
Здесь
 'f(х)' — решаемое уравнение, взятое в одиночные кавычки;
 х — начальное приближение (значение) искомого корня;
 [a, b]—область локализации корня;
 tol — заданная погрешность вычисления корня; в случае отсутствия берется значение tol по умолчанию 10-6.
Для решения данной задачи в первую очередь создадим рабочий каталог
lab2_3. В этом каталоге необходимо создать 2 файла:
1. М – файл функция f.m, содержащий описание функции
f x   x 4  11x 3  x 2  x  0.1.
Его мы копируем в проводнике из папки lab2_1.
2. М – файл сценарий task3.m. Это основная программа, из которой вызываются М – файлы функции.
Мы копируем из папки lab2_1 файл task1.m и переименовываем его в файл
task3.m. Затем меняем только алгоритм вычисления корня.
% Решение уравнения
format long e
x=fzero('f(x)', 0.3, 10^-5)
% Проверка
format short e
e=f(x)
В командном окне получим
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
-14-
x =
3.941750901087656e-001
e =
2.7756e-017
Функция fzero вычисляет корень уравнения в два этапа, на первом из которых
происходит сужение отрезка локализации методом золотого сечения. На втором этапе используется метод секущих.
-15-
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
5. Метод простых итераций
Одним из наиболее эффективных способов численного решения уравнений является метод итерации. Сущность этого метода заключается в следующем. Пусть дано уравнение (1)
f x   0 .
Заменим его равносильным уравнением
x  x.
(4)
Пример. x  ln( x)  0  x   ln( x) .
Выберем начальное приближение корня x0 и подставим его в правую часть
уравнения (4). Тогда получим некоторое число
x1  x0  .
Подставляя теперь в правую часть (4) вместо x0 число x1 получим число
x2   x1  . Повторяя этот процесс, будем иметь последовательность чисел
xn  xn 1  , n  1,2,....
(5)
Если эта последовательность сходящаяся, то есть существует предел
x   lim xn , то данный предел является корнем уравнения (4) и может быть вычисk 
лен по формуле (5) с любой степенью точности.
Сформулируем достаточные условия сходимости метода итерации.
Теорема 3. Пусть функция (x) определена и дифференцируема на отрезке
[a, b] , причем все ее значения x[a, b] и пусть
| x  | q  1 при x  [a, b] .
(6)
Тогда
1) процесс итерации (5) сходится независимо от начального приближения
x0  [a, b] ;
2) предельное значение x   lim xn является единственным корнем уравнения
x  x на отрезке [a, b] .
n 
Пример. Дано уравнение f ( x)  x 3  x  1. Данное уравнение имеет корень
x   1,2, т.к. f(1) = -1 < 0, f(2) = 5 > 0.
-16-
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
Корень единственный, т.к. f ( x)  3x 2  1 > 0 на отрезке [1, 2].
Уравнение можно записать в виде
x  x3  1   x   x 3  1   x   3x 2  1 на отрезке [1, 2].
Следовательно, условия сходимости итерационного процесса
xn  xn31  1
не выполнены. итерационный процесс расходится.
Если исходное уравнение записать в виде
x  3 x 1
то
 x   3 x  1   x  
На отрезке [1, 2] max  x  
1
33  x  12
1
3 1  1
3
2

1
3
3 4
 1.
Следовательно, итерационный процесс
xn  3 xn 1  1 , n = 1, 2, …,
где x0  1,2 , сходится к корню исходного уравнения.
6. Сходимость метода простых итераций
Геометрический смысл метода простых итераций
а) 0   x   1
б)  1   x   0
-17-
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
в) | x  | 1
На последнем рисунке | x | 1 и процесс итерации расходится.
Теорема 4. Пусть выполняются условия теоремы 3. Тогда критерием окончания итерационного процесса (5) является условие
xn  xn 1 
1 q
,
q
(7)
где  - заданная точность вычисления корня уравнения. В качестве корня берется величина xn.
Замечание . Скорость сходимости итерационного процесса тем быстрее, чем
меньше величина q. Это непосредственно следует из теоремы 4.
Доказательство следует из выражения (7) и того факта, что величина
  q  1
2

1 q
1
.
  принимает значения   q 
2
q

  q  12
Пример. Рассмотрим случаи
1) q = 0.1 < ½ 
1 q
  = 9
q
2) q = 0.9 > ½ 
1 q
  = /9.
q
-18-
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
7. Алгоритм представление уравнения f (x) = 0 в форме x =  (x).
Заменим уравнение f  x   0 эквивалентным ему уравнением
x  x  f x  .
(8)
Тогда
x   x  f x  .
Нам необходимо подобрать параметр  таким образом, чтобы на отрезке [a, b]
выполнялось неравенство
0   x   1  f  x   q  1.
(9)
Поскольку нам известна функция f(x) и соответственно производная данной
функции, то нам известны величины m и M, такие, что на отрезке [a, b] выполняется
неравенство
0  m  f  x   M .
Отсюда с учетом (11) можно записать
0  1  M  1  m  q .
Выбирая, например,

1
,
M
получим
q 1
m
1.
M
Очевидно, что при таком выборе  неравенство (9) заведомо выполняется.
Примечание 1. Отрезок [a, b] выбирается таким, чтобы производная f x  не
меняла знак на данном отрезке.
Примечание 2. Если вычисление точного значения M  max f  x  затруднеxa , b 
но, его можно заменить произвольным значением M1 > M. Однако при большом M1
m
величина q  1 
ближе к единице и итерационный процесс будет сходиться медM1
леннее.
-19-
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
Пример 4. Привести уравнение f ( x)  x 3  x  1 к виду, пригодному для его
решения методом простых итераций на отрезке [1, 2] и определить условие окончания итерационного процесса.
Решить данное уравнение в пакете MATLAB методом простых итераций
  10 на отрезке [1, 2].
5
Решение.
В примере раздела 3.5 мы уже показали, что данное уравнение имеет ровно
один корень на отрезке [1, 2].
Представим уравнение в форме




x  x   x 3  x  1 . Т.е.  x   x   x 3  x  1 .
Найдем
1) f ( x)  3x2  1 > 0 на отрезке [1, 2];
2) M  max f x   f 2  11 ;
x1, 2
2) m  min f x   f 1  2 .
x1, 2
Тогда

1
1
 ;
M 11
q 1
m
2 9
1  ;
M
11 11
9
1 q
 11 
9
q
11
Т.о., получаем
1
xn   xn 1 
2
11  2 .
9
9
11


1
xn 13  xn 1  1 ,
11
2
xn  xn 1   .
9
-20-
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
Решение в MATLAB.
Для решения данной задачи создадим рабочий каталог lab2_4. В этом каталоге
необходимо создать 4 файла:
1. М – файл функция f.m, содержащий описание функции
f ( x)  x 3  x  1 .
function z=f(x)
% функция f(x)
z=x.^3-x-1;
2. М – файл функция fi.m, содержащий описание функции


 x   x   x 3  x  1 .
function z=fi(x)
% функция f(x)
lambda=1/11;
z=x-lambda*(x.^3-x-1);
3. М – файл функция iter.m, содержащий описание функции, возвращающей
значение корня уравнения f x   0 методом половинного деления
function z=iter(fi,x0,q,eps)
% Решение уравнения x=fi(x) методом итераций
% f имя m-файла, содержащего описание функции
% x начальное приближение корня
% eps - точность решения
p=(1-q)*eps/q
x1=fi(x0);
while abs(x1-x0) > p;
x0=x1;
x1=fi(x0);
end;
z=x1;
4. М – файл сценарий task4.m. Это основная программа, из которой вызываются М – файлы функции.
Данный файл также будем создавать по частям. на первом этапе построим
график функции на отрезке [1, 2].
-21-
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
% Решение уравнения методом итераций
% График функции на отрезке [1, 2]
x=1:10^-3:2;
plot(x,f(x)); grid on
График функции
5
4
fi(x)
3
2
1
0
-1
1
1.1
1.2
1.3
1.4
1.5
x
1.6
1.7
1.8
1.9
2
На втором этапе проведем отделение корней графически. В результате получим отрезок [0.3, 0.5]. Зададим границы отрезка и построим график на данном отрезке локализации.
% Задание отрезка локализации корня
a=1.2;
b=1.4;
% График функции на отрезке локализации корня [0.3, 0.5]
figure % Создание второго графика
x=a:10^-3:b;
plot(x,f(x)); grid on
-22-
ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ
График на отрезке локализации
0.4
0.3
0.2
0.1
f(x)
0
-0.1
-0.2
-0.3
-0.4
-0.5
1.2
1.22
1.24
1.26
1.28
1.3
x
1.32
1.34
Убедимся, что корень локализован верно.
На третьем этапе вычислим корень уравнения
% Решение уравнения
q=9/11;
eps=10^-5;
format long e
x=iter(@fi,a,q,eps)
% Проверка
format short e
e=f(x)
В командном окне получим
x =
1.324714836029538e+000
e =
-1.3311e-005
1.36
1.38
1.4
Скачать