Автор работы: Пользователь скрыл имя, 07 Мая 2013 в 14:27, курсовая работа
Численные методы решения нелинейных уравнений
Геометрический смысл метода касательных состоит в замене дуги y = f (x) касательной, одной к одной из крайних точек . Начальное приближение x 0=a или x0 = b брать таким, чтобы вся последовательность приближения х k принадлежала интервалу (a;b). В случае существования производных f ’, f ”, сохраняющих свои знаки в интервале, за х0 берется тот конец отрезка [a;b], для которого выполняется условие f ’(х0) * f (х0) > 0. Для оценки приближения используется общая формула :
|c-x k-1 | £ | f (x k+1)/m| , где m = min f ’(x) на отрезке [a;b] .
На практике проще пользоваться другим правилом :
Если на отрезке [a;b] выполняется условие 0 < m < | f (x)| и e - заданная точность решения, то неравенство | x k+1-x k| £ e влечет выполнение неравенства |c-x k-1| £ e .
В этом случае процесс последовательного приближения продолжают до тех пор, пока не выполнится неравенство:
|c-x k-1| £ e .
Пример 1. Определим корни уравнения х3 + 0,1х2 + 0,4х – 1,2 = 0 аналитически. Находим: f (x) = х3 + 0,1х2 + 0,4х – 1,2
f ‘ (x) = 3х2 + 0,1х + 0,4
f (–1) = –2,5 < 0 f (0) = –1,2 < 0 f (+1) = 0,3 > 0
x |
- ¥ |
-1 |
0 |
+1 |
+ ¥ |
sign f (x) |
- |
- |
- |
+ |
+ |
Следовательно, уравнение имеет действительный корень, лежащий в промежутке [0; +1].
Приведем уравнение к виду x = j (x), так, чтобы |j ‘ (x)|<1 при 0 £ x £ +1.
Так как max | f ’(x) | = f ’(+1) = 3 + 0,1 + 0,4 = 3,5 то можно взять R = 2.
Тогда j (x) = x – ( f (x) / R) = x – 0,5 х3 – 0,05 х2 – 0,2 х + 0,6 = – 0,5 х3 – 0,05 х2 + 0,8 х + 0,6.
Пусть х0 = 0 , тогда х n+1 = j (х n).
Вычисления расположим в таблице.
n |
хn |
х2n |
х3n |
j (хn). |
f (x) |
1 |
1 |
1 |
1 |
0,85 |
-0,17363 |
2 |
0,85 |
0,7225 |
0,614125 |
0,9368125 |
0,08465 |
3 |
0,9368125 |
0,87761766 |
0,822163194 |
0,89448752 |
-0,04651 |
4 |
0,89448752 |
0,800107923 |
0,715686552 |
0,917741344 |
0,024288 |
5 |
0,917741344 |
0,842249174 |
0,772966889 |
0,905597172 |
-0,01306 |
6 |
0,905597172 |
0,820106238 |
0,74268589 |
0,912129481 |
0,006923 |
7 |
0,912129481 |
0,83198019 |
0,758873659 |
0,908667746 |
-0,0037 |
8 |
0,908667746 |
0,825677072 |
0,750266124 |
0,910517281 |
0,001968 |
9 |
0,910517281 |
0,829041719 |
0,754856812 |
0,909533333 |
-0,00105 |
10 |
0,909533333 |
0,827250884 |
0,752412253 |
0,910057995 |
0,000559 |
11 |
0,910057995 |
0,828205555 |
0,753715087 |
0,909778575 |
-0,0003 |
12 |
0,909778575 |
0,827697055 |
0,753021048 |
0,909927483 |
0,000159 |
13 |
0,909927483 |
0,827968025 |
0,753390861 |
0,909848155 |
-8,5E-05 |
14 |
0,909848155 |
0,827823665 |
0,753193834 |
0,909890424 |
4,5E-05 |
15 |
0,909890424 |
0,827900583 |
0,753298812 |
0,909867904 |
-2,4E-05 |
16 |
0,909867904 |
0,827859602 |
0,753242881 |
0,909879902 |
1,28E-05 |
17 |
0,909879902 |
0,827881437 |
0,753272681 |
0,90987351 |
-6,8E-06 |
18 |
0,90987351 |
0,827869803 |
0,753256804 |
0,909876916 |
3,63E-06 |
19 |
0,909876916 |
0,827876002 |
0,753265263 |
0,909875101 |
-1,9E-06 |
20 |
0,909875101 |
0,827872699 |
0,753260756 |
0,909876068 |
1,03E-06 |
График функции y = х3 + 0,1х2 + 0,4х – 1,2
Блок-схема программы
Программа на языке Paskal
program metod_kasatel;
var xn,xn1,a,b,c,mx,y0,x0:real;
function f1(x1:Real): Real;
begin
f1 := x1*x1*x1*(-0.5)-0.05*x1*x1+0.
end;
function f2(x4:Real): Real; {Производная от основной функции}
begin
f2 := x4*x4*x4+0.5*x4*x4+0.1*x4*x4+
end;
begin
a:=0;b:=1;c:=0.00000001;
Writeln(' От A=',a,' до B=',b);
Writeln(' Погрешность с=',c);
Readln;
xn:=b;
xn1:= f1(xn);
y0:=f2(b);
while ABS(y0)>c do {Проверка по точности вычисления корня}
begin xn:=xn1;
xn1:=f1(xn);
y0:= f2(xn1);
{Печать промежуточного результата}
Writeln('xn=',xn,' xn+1=',xn1,' f(xn+1)=',y0);
Readln;
end;
Writeln('Конечные значения'); {Печать полученного результата}
Writeln(' xn+1=',xn1,' f(xn+1)=',y0);
end.
Результат выполнения программы
От A= 0.0000000000E+00 до B= 1.0000000000E+00
Погрешность с= 1.0000000000E-08
От A= 0.0000000000E+00 до B= 1.0000000000E+00
Погрешность с= 1.0000000000E-08
xn= 8.5000000000E-01 xn+1= 9.3681250000E-01 f(xn+1)= 8.4649960270E-02
xn= 9.3681250000E-01 xn+1= 8.9448751986E-01 f(xn+1)=-4.6507647892E-02
xn= 8.9448751986E-01 xn+1= 9.1774134381E-01 f(xn+1)= 2.4288343840E-02
xn= 9.1774134381E-01 xn+1= 9.0559717189E-01 f(xn+1)=-1.3064617920E-02
xn= 9.0559717189E-01 xn+1= 9.1212948085E-01 f(xn+1)= 6.9234699658E-03
xn= 9.1212948085E-01 xn+1= 9.0866774587E-01 f(xn+1)=-3.6990702320E-03
xn= 9.0866774587E-01 xn+1= 9.1051728099E-01 f(xn+1)= 1.9678960780E-03
xn= 9.1051728099E-01 xn+1= 9.0953333295E-01 f(xn+1)=-1.0493249720E-03
xn= 9.0953333295E-01 xn+1= 9.1005799543E-01 f(xn+1)= 5.5884091853E-04
xn= 9.1005799543E-01 xn+1= 9.0977857497E-01 f(xn+1)=-2.9781681224E-04
xn= 9.0977857497E-01 xn+1= 9.0992748338E-01 f(xn+1)= 1.5865717614E-04
xn= 9.0992748338E-01 xn+1= 9.0984815480E-01 f(xn+1)=-8.4537703515E-05
xn= 9.0984815480E-01 xn+1= 9.0989042365E-01 f(xn+1)= 4.5040009354E-05
xn= 9.0989042365E-01 xn+1= 9.0986790364E-01 f(xn+1)=-2.3997676180E-05
xn= 9.0986790364E-01 xn+1= 9.0987990248E-01 f(xn+1)= 1.2785800209E-05
xn= 9.0987990248E-01 xn+1= 9.0987350958E-01 f(xn+1)=-6.8122881203E-06
xn= 9.0987350958E-01 xn+1= 9.0987691573E-01 f(xn+1)= 3.6295678001E-06
xn= 9.0987691573E-01 xn+1= 9.0987510095E-01 f(xn+1)=-1.9338276616E-06
xn= 9.0987510095E-01 xn+1= 9.0987606786E-01 f(xn+1)= 1.0303429008E-06
xn= 9.0987606786E-01 xn+1= 9.0987555269E-01 f(xn+1)=-5.4896190704E-07
xn= 9.0987555269E-01 xn+1= 9.0987582717E-01 f(xn+1)= 2.9248803912E-07
xn= 9.0987582717E-01 xn+1= 9.0987568093E-01 f(xn+1)=-1.5583464119E-07
xn= 9.0987568093E-01 xn+1= 9.0987575885E-01 f(xn+1)= 8.3031409304E-08
xn= 9.0987575885E-01 xn+1= 9.0987571733E-01 f(xn+1)=-4.4236003305E-08
xn= 9.0987571733E-01 xn+1= 9.0987573945E-01 f(xn+1)= 2.3572283681E-08
xn= 9.0987573945E-01 xn+1= 9.0987572766E-01 f(xn+1)=-1.2558302842E-08
xn= 9.0987572766E-01 xn+1= 9.0987573394E-01 f(xn+1)= 6.6920620156E-09
Конечные значения
xn+1= 9.0987573394E-01 f(xn+1)= 6.6920620156E-09
Пусть на отрезке [a;b] функция непрерывна, принимает на концах отрезка значение разных знаков, а производная f '(x) сохраняет знак. В зависимости от знака второй производной возможны следующие случаи расположения кривых (рис. 1).
Рис. 1. Возможные случаи расположения кривых.
Алгоритм приближенного вычисления
корня методом хорд.
Исходные данные: f (x) – функция; ε –
требуемая точность; x0 –
начальное приближение.
Результат: xпр – приближенный корень уравнения f (x) =
0.
Метод решения:
Рис. 2. Геометрическая интерпретация метода хорд для случая f '(x) f ''(x)>0.
Рассмотрим случай, когда f '(x) и f ''(x) имеют одинаковые знаки (рис. 2).
График функции проходит через
точки A0(a,f(a)) и B0(b,f(b)). Искомый корень
уравнения (точка x*)
нам неизвестен, вместо него возьмет точку х1 пересечения
хорды А0В0 с осью абсцисс. Это и будет приближенное
значение корня.
В аналитической геометрии выводится
формула, задающая уравнение прямой, проходящей
через две точки с координатами (х1; у1) и (х2; у2): .
Тогда уравнение хорды А0В0 запишется
в виде: .
Найдем значение х = х1,
для которого у = 0: . Теперь корень находится
на отрезке [x1;b]. Применим метод хорд к этому отрезку.
Проведем хорду, соединяющую точки A1(x1,f(x1)) и B0(b,f(b)), и найдем х2 -
точку пересечения хорды А1В0 с
осью Ох: x2=x1 .
Продолжая этот процесс, находим: x3=x2. Получаем рекуррентную
формулу вычисления приближений к корню xn+1=xn.
В этом случае конец b отрезка [a;b] остается неподвижным, а конец a перемещается.
Таким образом, получаем расчетные формулы
метода хорд:
xn+1=xn; x0=a.
Вычисления очередных
Теперь рассмотрим случай, когда первая
и вторая производные имеют разные знаки,
т.е. f '(x) f ''(x)<0. (рис. 3).
Соединим точки A0(a,f(a)) и B0(b,f(b)) хордой А0В0. Точку
пересечения хорды с осью Ох будем
считать первым приближение корня. В этом
случае неподвижным концом отрезка будет
являться конец а.
Уравнение хорды А0В0:. Отсюда найдем x1, полагая y = 0: x1=b. Теперь корень уравнения x[a;x1]. Применяя метод хорд к этому отрезку,
получим x2=x1. Продолжая и т.д.,
получим xn+1=xn.
Расчетные формулы метода:
xn+1=xn, x0=0 . (5)
Условие окончания вычислений: |xn+1-xn|<. Тогда хпр = xn+1 с
точностью Итак, если f '(x) f ''(x)>0 приближенное значение корня находят
по формуле (4), если f '(x) f ''(x)<0, то по формуле (5).
Практический выбор той или иной формулы осуществляется, пользуясь следующим правилом: неподвижным концом отрезка является тот, для которого знак функции совпадает со знаком второй производной.
Пример. Проиллюстрировать действие этого правила на уравнении
(x-1)ln(x)-1=0, если отрезок изоляции корня [2;3].
Решение. Здесь f(x)=(x-1)ln(x)-1.
f '(x)=ln(x)+;
f ''(x)=.
Вторая производная в этом примере положительна на отрезке изоляции корня [2;3]: f ''(x)>0, f(3)>0, т.е. f(b) f''(x)>0. Таким образом, при решении данного уравнения методом хорд для уточнения корня выбираем формулы (4).
program horda;
var e,c,a,b,y,ya,yb,yn,x,x1,x2,xn,
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 elsebegin 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.
Метод простых итераций.
Рассмотрим уравнение f(x)=0 (1) с отделенным корнем X[a, b]. Для решения уравнения (1) методом простой итерации приведем его к равносильному виду: x=φ(x). (2)
Это всегда можно сделать, причем многими способами. Например:
x=g(x) · f(x) + x ≡ φ(x), где g(x) - произвольная непрерывная функция, не имеющая корней на отрезке [a,b].
Пусть x(0) - полученное каким-либо способом приближение к корню x (в простейшем случае x(0)=(a+b)/2). Метод простой итерации заключается в последовательном вычислении членов итерационной последовательности:
x(k+1)=φ(x(k)), k=0, 1, 2, ... (3)
начиная с приближения x(0).
УТВЕРЖДЕНИЕ: 1 Если последовательность {x(k)} метода простой итерации сходится и функция φ непрерывна, то предел последовательности является корнем уравнения x=φ(x)
ДОКАЗАТЕЛЬСТВО: Пусть . (4)
Перейдем
к пределу в равенстве x(k+1)=
В результате получаем x*=φ(x*). Следовательно, x* - корень уравнения (2), т.е. X=x*.
Чтобы пользоваться этим утверждением нужна сходимость последовательности {x(k)}. Достаточное условие сходимости дает:
ТЕОРЕМА 1: (о сходимости) Пусть уравнение x=φ(x) имеет единственный корень на отрезке [a,b] и выполнены условия:
1) φ(x) C1[a,b];
2) φ(x) [a,b] " x [a,b];
3) существует константа q > 0: | φ '(x) | ≤ q < 1 x [a,b]. Tогда итерационная последовательность {x(k)}, заданная формулой x(k+1) = φ(x(k)), k=0, 1, ... сходится при любом начальном приближении x(0) [a,b].
ДОКАЗАТЕЛЬСТВО: Рассмотрим два соседних члена последовательности {x(k)}: x(k) = φ(x(k-1)) и x(k+1) = φ(x(k)) Tак как по условию 2) x(k) и x(k+1) лежат внутри отрезка [a,b], то используя теорему Лагранжа о средних значениях получаем:
x (k+1) - x (k) = φ(x (k)) - φ(x (k-1)) = φ '(c k )(x (k) - x (k-1)), где c k (x (k-1), x (k)).
Отсюда получаем:
| x (k+1) - x (k) | = | φ '(c k ) | · | x (k) - x (k-1) | ≤ q | x (k) - x (k-1)| ≤
≤ q ( q | x (k-1) - x (k-2) | ) = q 2 | x (k-1) - x (k-2) | ≤ ... ≤ q k | x (1) - x (0) |. (5)
Рассмотрим ряд S∞ = x (0) + ( x (1) - x (0) ) + ... + ( x (k+1) - x (k) ) + ... . (6)
Если мы докажем, что этот ряд сходится, то значит сходится и последовательность его частичных сумм
Sk = x (0) + ( x (1) - x (0) ) + ... + ( x (k) - x (k-1) ).
Но нетрудно вычислить, что
Sk = x (k)). (7)
Следовательно, мы тем самым докажем и сходимость итерационной последовательности {x(k)}.
Для доказательства сходимости pяда (6) сравним его почленно (без первого слагаемого x(0)) с рядом
q 0 | x (1) - x (0) | + q 1 |x (1) - x (0)| + ... + |x (1) - x (0)| + ..., (8)
который сходится как бесконечно убывающая геометрическая прогрессия (так как по условию q < 1). В силу неравенства (5) абсолютные величины ряда (6) не превосходят соответствующих членов сходящегося ряда (8) (то есть ряд (8) мажорирует ряд (6). Следовательно ряд (6) также сходится. Tем самым сходится последовательность {x(0)}.
Получим формулу, дающую способ оценки погрешности |X - x (k+1)|
метода простой итерации.
Имеем
X - x(k+1) = X - Sk+1 = S∞ - Sk+1 = (x(k+2) - (k+1) ) + (x(k+3) - x(k+2) ) + ... .
Следовательно
|X - x(k+1)| ≤ |x(k+2) - (k+1) | + |x(k+3) - x(k+2) | + ... ≤ qk+1 |x(1) - x(0) | + qk+2 |x(1) - x(0) | + ... = qk+1|x(1) - x(0) | / (1-q).
В результате получаем формулу
|X - x(k+1)| ≤ qk+1|x(1) - x(0) | / (1-q). (9)
Взяв за x(0) значение x(k), за x(1) - значение x(k+1) (так как при выполнении условий теоремы такой выбор возможен) и учитывая, что при имеет место неравенство qk+1 ≤ q выводим:
|X - x(k+1)| ≤ qk+1|x(k+1) - x(k) | / (1-q) ≤ q|x(k+1) - x(k) | / (1-q).
Итак, окончательно получаем:
|X - x(k+1)| ≤ q|x(k+1) - x(k) | / (1-q). (10)
Используем эту формулу для вывода критерия окончания итерационной последовательности. Пусть уравнение x=φ(x) решается методом простой итерации, причем ответ должен быть найден с точностью ε, то есть
|X - x(k+1)| ≤ ε.
С учетом (10) получаем, что точность ε будет достигнута, если выполнено неравенство
Информация о работе Численные методы решения нелинейных уравнений