ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ -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 xi1 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 ba . 2 Положительные стороны метода: всегда сходится («абсолютно застрахован от неудачи»). Отрицательные стороны метода: довольно медленный; не обобщается на системы уравнений. ЧИСЛЕННОЕ РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ -5- Пример 1. Решение в пакете MATLAB методом половинного деления уравнения x 11x 3 x 2 x 0.1 0 с точностью 105 на отрезке [-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 с точностью 105 на отрезке [-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 . Расчетная формула метода Ньютона: xn1 xn f xn . f xn (2) Если x n1 x n , (3) то значение xn1 считается приближенным значением корня уравнения (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 n1 расположены достаточно близко друг к другу, то производную 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 с точностью 105 на отрезке [-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 xn31 1 не выполнены. итерационный процесс расходится. Если исходное уравнение записать в виде x 3 x 1 то x 3 x 1 x На отрезке [1, 2] max x 1 33 x 12 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 затруднеxa , 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 ; x1, 2 2) m min f x f 1 2 . x1, 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