Решение нелинейных уравнений

1. Численные методы решения нелинейных уравнений.

1.1. Постановка задачи.

Пусть имеется уравнение вида
f (x) = 0.                                                                          (1)
где f (x)  - заданная алгебраическая или трансцендентная функция. (Функция называется алгебраической, если для получения её значения нужно выполнить арифметические операции и возведение в степень с рациональным показателем. Примеры трансцендентных функций - показательная, логарифмическая, тригонометрические, обратные тригонометрические.)
Решить уравнение - значит найти все его корни, то есть те значения x, которые обращают уравнение в тождество, или доказать, что корней нет.
Если алгебраическое или трансцендентное уравнение достаточно сложно, то довольно редко удается точно найти его корни. Кроме того, в некоторых случаях уравнение может содержать коэффициенты, известные лишь приблизительно, поэтому сама задача о точном нахождении корней теряет смысл. В таких случаях применяют численные (приближенные) методы решения.
Поставим задачу найти такое приближенное значение корня xпр, которое мало отличается от точного значения корня x*, так что выполняется неравенство │x* xпр │< e , где e (эпсилон) – малая положительная величина – допустимая ошибка, которую мы можем заранее задать по своему усмотрению. Если корень найден с точностью e, то принято писать x* = xпр ± e.
Будем предполагать, что уравнение (1) имеет лишь изолированные корни, т.е. для каждого корня существует окрестность, не содержащая других корней этого уравнения.

1.2. Этапы приближенного решения нелинейных уравнений.

 

            Приближенное решение уравнения состоит из двух этапов:

  1. Отделение корней, то есть нахождение интервалов из области определения функции f (x), в каждом из которых содержится только один корень уравнения (1).
  2. Уточнение корней до заданной точности.

            Отделение корней можно проводить графически и аналитически.
Для того чтобы графически отделить корни уравнения (1), необходимо построить график функции . Абсциссы точек его пересечения с осью Ox являются действительными корнями уравнения (рис. 1).

 Рис. 1. Графическое отделение корней (1-ый способ).
            На практике же бывает удобнее заменить уравнение (1) равносильным ему уравнением
,                                                             (2)
где  и  - более простые функции, чем . Абсциссы точек пересечения графиков функций  и  дают корни уравнения (2), а значит и исходного уравнения (1) (рис.2).


Рис 2. Графическое отделение корней (2-ой способ).

Пример 1. Отделить графически корень уравнения .
Решение. Для решения задачи построим график функции  (рис. 3).

Рис. 3. График функции .

Из рисунка видно, что один из корней уравнения принадлежит отрезку , второй – отрезку . Так как рассматриваемое уравнение имеет третью степень, то должен существовать еще один корень на интервале .
Пример 2. Отделить графически корень уравнения .

Решение. Преобразуем уравнение к виду  и построим графики функций  и  (рис. 4).
Рис. 4. Графическое отделение корней.

Из рисунка видно, что абсцисса точки пересечения этих графиков принадлежит отрезку .

Аналитическое отделение корней основано на следующих теоремах.
Теорема 1. Если непрерывная функция  принимает на концах отрезка  значения разных знаков, т.е. , то на этом отрезке содержится по крайней мере один корень уравнения (1) (рис. 5).


Рис. 5. Существование корня на отрезке.

Теорема 2. Если непрерывная на отрезке  функция  принимает на концах отрезка  значения разных знаков, а производная  сохраняет знак внутри отрезка , то внутри отрезка существует единственный корень уравнения f (x) = 0 (рис. 6).

Рис. 6. Существование единственного корня на отрезке.

Пример 3. Подтвердить аналитически правильность нахождения отрезка изоляции корня уравнения .
Решение. Для отрезка  имеем: ;  Значит, . Следовательно, корень отделён правильно.

            Уточнение корней до заданной точности заключается в сужении интервала изоляции корня и выполняется одним из специальных методов. Наиболее распространенными являются метод деления отрезка пополам, метод касательных (Ньютона), метод секущих (хорд).

1.3. Уточнение корней методом деления отрезка пополам.

 

Метод деления отрезка пополам имеет другие названия: метод половинного деления, метод дихотомии, метод проб, метод бисекций.
Пусть корень уравнения f (x) = 0 отделен на отрезке , т.е. .
Алгоритм приближенного вычисления корня методом половинного деления.
Исходные данные:
f (x) – функция;
ε – требуемая точность;
a, b – границы заданного интервала (границы поиска корня).
Результат: xпр – приближенный корень уравнения f (x) = 0.
Метод решения:
Шаг 1. Выбрать середину  отрезка  в качестве приближенного корня.
Шаг 2. Если , то cискомый корень уравнения, на этом прекращаем вычисления. В противном случае перейти к шагу 3.
Шаг 3. Точный корень уравнения x* отличается от cне более чем на половину длины отрезка, т.е. не более чем на  (полученная точность). Проверяем условие . Если условие не выполняется, т.е. полученная точность нас не устраивает (она больше, чем требуемая), то перейти к шагу 4; в противном случае прекратить вычисления, поскольку мы достигли требуемой точности, и приближенным корнем уравнения f (x) = 0 считать середину c  отрезка .
Шаг 4. Определить интервал дальнейшего поиска корня. Из двух образовавшихся при делении отрезков переходим к той из его половин  и , на концах которого функция принимает значения разных знаков.
Случай 1 (рис. 7). Корень на отрезке . , граница bсдвигается влево – заменить b на с: b:= c.

Случай 2 (рис. 7). Корень на отрезке . , граница aсдвигается вправо – заменить a на с: a:= c.

Рис. 7. Графическая иллюстрация метода половинного деления.

Перейти к шагу 1.

Алгоритм деления отрезка пополам довольно медленный, но зато абсолютно застрахован от неудач. Основное достоинство метода состоит в том, что его скорость сходимости не зависит от вида функции f (x). Данный метод не имеет дополнительных условий сходимости, кроме .

1.4. Уточнение корней методом касательных.

 

Пусть корень уравнения f (x) = 0 отделен на отрезке . Необходимым условием сходимости метода является то, что производные  и  непрерывны и сохраняют постоянные знаки.
Алгоритм приближенного вычисления корня методом касательных.
Исходные данные:
f (x) – функция;
f(x) – производная заданной функции f (x);
ε – требуемая точность;
x0 – начальное приближение.
Результат: xпр – приближенный корень уравнения f (x) = 0.
Метод решения:
Рассмотрим случай, когда , т.е.  и  имеют одинаковые знаки. Тогда возможны два случая построения кривой на отрезке (рис 8).
Проведем касательную к кривой y =f (x) в точке В0(b; f(b)). В курсе алгебры выводится уравнение касательной.
Уравнение касательной в точке В0 имеет вид . В качестве очередного приближения к корню уравнения берем точку пересечения касательной с осью Оx. Полагая y = 0, найдем . Теперь . Применяя метод еще раз для отрезка , получим .
Получаем рекуррентную формулу вычисления приближений к корню:
                                                               (3)

 

         

Рис. 8. Геометрическая интерпретация метода касательных для случая .

Обратим внимание, что в этом случае в качестве начального приближения к корню выбираем точку x0 = b. Приближение к корню происходит с правой стороны, поэтому получаем приближенное значение корня с избытком.
Пусть теперь , т.е.  и  имеют разные знаки. Тогда также возможны два случая построения кривой на отрезке (рис 9).

B0

 

A0

  

Рис. 9. Геометрическая интерпретация метода касательных для случая.

  Если снова провести касательную к кривой в точке В0, то она пересечет ось Ох в точке не принадлежащей отрезку . Поэтому проведем касательную в точке . Ее уравнение . Находим x1, полагая y = 0: . Корень . Применяя метод еще раз для отрезка , получим .
Получаем рекуррентную формулу вычисления приближений к корню, аналогичную первому случаю:

В данном случае в качестве начального приближения к корню выбираем точку x0 = a. Приближение к коню происходит с левой стороны, поэтому находим приближенное значение корня с недостатком.
Заметим, что вычислительные формулы метода отличаются друг от друга только выбором начального приближения: в первом случае за x0 принимаем конец b отрезка, во втором – конец a.
Убедитесь сами, что при выборе начального приближения корня можно руководствоваться правилом: за исходную точку следует выбрать тот конец отрезка , в котором знак функции совпадает со знаком второй производной (см. рисунки 8,9).
Условие окончания вычислительного процесса: , где ε - заданная точность. Тогда xпр = xn+1  с точностью ε.

1.5. Уточнение корней методом хорд.

 

Пусть на отрезке  функция непрерывна, принимает на концах отрезка значение разных знаков, а производная  сохраняет знак. В зависимости от знака второй производной возможны следующие случаи расположения кривых (рис. 10).



Рис. 10. Возможные случаи расположения кривых.

Алгоритм приближенного вычисления корня методом хорд.
Исходные данные:
f (x) – функция;
ε – требуемая точность;
x0 – начальное приближение.
Результат: xпр – приближенный корень уравнения f (x) = 0.
Метод решения:

Рассмотрим случай, когда  и  имеют одинаковые знаки (рис. 11).

Рис. 11. Геометрическая интерпретация метода хорд для случая .

График функции проходит через точки  и . Искомый корень уравнения (точка x*) нам неизвестен, вместо него возьмет точку х1 пересечения хорды А0В0 с осью абсцисс. Это и будет приближенное значение корня.
В аналитической геометрии выводится формула, задающая уравнение прямой, проходящей через две точки с координатами (х1; у1) и (х2; у2): .
Тогда уравнение хорды А0В0 запишется в виде: .
Найдем значение х = х1, для которого у = 0: . Теперь корень находится на отрезке . Применим метод хорд к этому отрезку. Проведем хорду, соединяющую точки  и , и найдем х2 - точку пересечения хорды А1В0 с осью Ох: .
Продолжая этот процесс, находим: . Получаем рекуррентную формулу вычисления приближений к корню .
В этом случае конец b отрезка  остается неподвижным, а конец a перемещается.
Таким образом, получаем расчетные формулы метода хорд:
; .                                                                                     (4)
Вычисления очередных приближений к точному корню уравнения продолжается до тех пор, пока не достигнем заданной точности, т.е. должно выполняться условие: , где  - заданная точность.
Теперь рассмотрим случай, когда первая и вторая производные имеют разные знаки, т.е.  (рис. 12).


Рис. 12. Геометрическая интерпретация метода хорд для случая .

Соединим точки  и  хордой А0В0. Точку пересечения хорды с осью Ох будем считать первым приближение корня. В этом случае неподвижным концом отрезка будет являться конец а.
Уравнение хорды А0В0: . Отсюда найдем , полагая y = 0: . Теперь корень уравнения . Применяя метод хорд к этому отрезку, получим . Продолжая и т.д., получим .
Расчетные формулы метода:
,    .                                                                                  (5)
Условие окончания вычислений: . Тогда хпр = xn+1с точностью .
Итак, если  приближенное значение корня находят по формуле (4), если , то по формуле (5).
Практический выбор той или иной формулы осуществляется, пользуясь следующим правилом: неподвижным концом отрезка является тот, для которого знак функции совпадает со знаком второй производной.
Пример 4. Проиллюстрировать действие этого правила на уравнении , если отрезок изоляции корня [2;3].
Решение. Здесь .
; . Вторая производная в этом примере положительна на отрезке изоляции корня [2;3]: , , т.е. . Таким образом, при решении данного уравнения методом хорд для уточнения корня выбираем формулы (4).

 

program horda;
var e,c,a,b,y,ya,yb,yn,x,x1,x2,xn,f1,f2:real;
begin
e:=0.0001;
writeln('vvedi nachalo otrezka');
readln(a);
writeln('vvedi konec otrezka');
readln(b);
x:=a;
y:=((x-1)*ln(x))-1;
ya:=y;
x:=b;
y:=((x-1)*ln(x))-1;
yb:=y;

c:=(a+b)/2;
x:=c;
y:=((x-1)*ln(x))-1;
f1:=ln(x) + (x-1)/x ;
f2:= 1/x + 1/(x*x);

if (ya*yb < 0) and (f1*f2 > 0)
then
begin
x1:=a;
while abs(x2 - x) > e do
begin
x:=x1;
y:=((x-1)*ln(x))-1;
yn:=y;
x2:=x1 - (yn*(b-x1))/(yb - yn);
x1:=x2;
end;
writeln('koren uravneniya xn = ', x2)
end
else
begin
x1:=b;
while abs(x2 - x) > e do
begin
x:=x1;
y:=((x-1)*ln(x))-1;
yn:=y;
x2:=x1 - (yn*(x1- a))/(yn - ya);
x1:=x2;
end;
writeln('koren uravneniya xn = ', x2);
end;
end.

 


program l1;
var a,b,c,x,ya,yc,y1,y,e:real; y2:longint;
begin
writeln('input otrezok');
readln(a);
readln(b);
e:= 0.001;
y:=(x-1);
while (b-a)/2 > e do
begin
c:= (b+a)/2;
x:=c;
if (x-1)=0 then begin
writeln('koren_1=',c:2:2); halt ; end
else
begin
ya:= (a-1);
yc:=(c-1);
if ya*yc<=0 then b:=c else a:=c;
end;
end;
writeln('koren_2=',c:2:2);
end.

 

program kasatelnaya;
var x,y,a,b,c,n,f1,f2,e,xn,x1,x2:real;
begin
e:=0.0001;
writeln('vvedi nachalo otrezka');
readln(a);
writeln('vvedi konec otrezka');
readln(b);
c:=(a+b)/2;
x:=c;
y:=((x-1)*ln(x))-1;
f1:=ln(x) + (x-1)/x ;
f2:= 1/x + 1/(x*x);
if f1*f2 > 0 then
begin
x:=b;
y:=((x-1)*ln(x))-1;
f1:=ln(x) + (x-1)/x ;
x1:= x - (y/f1);
x:=x1;
x2:=0;
while abs(x - x2) > e do
begin
x:=x1;
y:=((x-1)*ln(x))-1;
f1:=ln(x) + (x-1)/x ;
x2:= x - (y/f1);
x1:=x2;
writeln('x =' , x, 'x2=', x2);
end;
x:=x2;
y:=((x-1)*ln(x))-1;
f1:=ln(x) + (x-1)/x ;
xn:= x - (y/f1);
writeln('koren uravneniya xn = ', xn);
end
else
begin
x:=a;
y:=((x-1)*ln(x))-1;
f1:=ln(x) + (x-1)/x ;
x1:= x - (y/f1);
x:=x1;
x2:=0;
while abs(x - x2) > e do
begin
x:=x1;
y:=((x-1)*ln(x))-1;
f1:=ln(x) + (x-1)/x ;
x2:= x - (y/f1);
x1:=x2;
writeln('x =' , x, 'x2=', x2);
end;
x:=x2;
y:=((x-1)*ln(x))-1;
f1:=ln(x) + (x-1)/x ;
xn:= x - (y/f1);
writeln('koren uravneniya xn = ', xn);
end;
end.

 

 


На Главную

Hosted by uCoz