Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Метод Ньютона






 

Для системы второго порядка

f (x, y) = 0,

g (x, y) = 0.

Последовательные приближения по методу Ньютона вычисляются по формулам

, ,

где , , .

Метод Ньютона сходится, если начальное приближение выбрано удачно и матрица Якоби невырожденная, причем сходимость квадратичная. На практике итерации обычно заканчивают, когда одновременно достаточно малы значения | f (xn, yn)| и | g (xn, yn)| или разности | xn +1xn | и | yn +1yn |. Для выбора начального приближения применяют графический метод, метод проб и т.д.

Пример. Решить систему уравнений

Решение в системе Maple:

1) Очистим оперативную память. Нам в дальнейшем потребуется функции det и implicitplot, которых нет в ядре системы, поэтому здесь подключим пакет линейной алгебры linalg и графических построений plots.

> restart;

> with(linalg): with(plots):

2) Зададим функции f (x, y) и g (x, y).

> f: =(x, y)-> x^7-5*x^2*y^4+1510;

> g: =(x, y)-> y^5-3*x^4*y-105;

3) Для отделения корней системы построим графики неявных функций f (x, y)=0 и g (x, y)=0.

> implicitplot({f(x, y)=0, g(x, y)=0}, x=-5..5, y=-5..5);

Видим пять пересечений графиков, значит, система имеет (минимум) пять корней.

4) Определим якобиан

> J: =[[diff(f(x, y), x), diff(f(x, y), y)], [diff(g(x, y), x), diff(g(x, y), y)]];

5) Введём функцию Jn(x, y), являющуюся определителем матрицы J.

> Jn: =unapply(det(J), x, y);

6) Определим величины An и Bn в виде соответствующих определителей

> An: =det([[f(x, y), diff(f(x, y), y)], [g(x, y), diff(g(x, y), y)]]);

> Bn: =det([[diff(f(x, y), x), f(x, y)], [diff(g(x, y), x), g(x, y)]]);

7) Присвоим начальные значения переменным. x0 и y0 определяет точку начального приближения (определяется графически).

> x0: =-3; y0: =-1.; eps: =0.001: n: =0:

8) Организуем цикл вычислений по методу Ньютона

> while abs(f(x0, y0))+abs(g(x0, y0))> eps do

> if abs(Jn(x0, y0))< 10^(-4) then print(`Якобиан = 0`); break fi;

> x0: =x0-subs(x=x0, y=y0, An)/Jn(x0, y0);

> y0: =y0-subs(x=x0, y=y0, Bn)/Jn(x0, y0);

> if n=50 then break fi;

> n: =n+1;

> od:

9) Вывод результата: (x0, y0) – решение системы, n – число итераций

> evalf({x0, y0}); n;

10) Для вычисления остальных четырёх корней системы нужно выполнить шаги 7)–9), предварительно изменив в п. 7) начальные приближения соответственно на

> x0: =-3; y0: =-3.;

> x0: =2; y0: =-3.;

> x0: =-2; y0: =3.;

> x0: =2; y0: =3.;

5. Использование стандартных функций системы Maple

 

Maple имеет мощные средства для решения линейных и нелинейных уравнений. Для аналитического решения используется достаточно универсальная и гибкая функция solve. solve(eqn, var);

solve({eqn1, eqn2, …}, {var1, var2, …});

Здесь eqn, eqn1, … – уравнения, содержащие неизвестные переменные var, var1,

Используя функцию solve в комбинации с функциями evalf или convert, можно получить корни в численном виде. Если результат представлен через функцию RootOf, то зачастую можно получить все корни с помощью функции allvalues.

Для получения численного решения нелинейного уравнения или системы уравнений удобно использовать функцию

fsolve(eqns, vars, options);

Эта функция может быть использована со следующими параметрами:

complex – находит один или все корни (чаще полинома) в комплексной форме

fulldigits – определяет счет для полного числа цифр, заданного функцией Digits

maxsols=n – задает вычисление только n корней

interval – задается в виде a..b или x=a..b, или { x=a..b, y=c..d, … } и обеспечивает поиск корней в указанном интервале.

Для вычисления корней полиномов, зависящих от одной переменной, существует специальная функция roots. В простейшем варианте roots(a) (или roots(a, x)) она возвращает рациональные корни полинома a с указанием их кратностей.

Примеры.

 

> solve(x^3-2*x+1, x);

 

> eq: = x^4-5*x^2+6*x=2:

> sols: = [solve(eq, x)];

sols: = [–1+ , –1– , 1, 1]

> sols[1];

–1+

> evalf(sols);

[.732050808, –2.732050808, 1., 1.]

 

> solve(sqrt(ln(x))=2, x);

e 4

> evalf(");

54.59815003

 

> solve(x^5-3*x^4+2*x^2-x+3, x);

RootOf(_ Z 5 – 3 _ Z 4 + 2 _ Z 2 – _ Z + 3)

> allvalues(");

–1.127479307,.03687403922 –.8565945569 I,

.03687403922 +.8565945569 I, 1.327862375, 2.725868853

 

> solve({exp(x)=sin(x)}, x);

{ x = RootOf(_ Z – ln(sin(_ Z)))}

> allvalues(");

{ x =.3627020561 – 1.133745919 I }

 

> fsolve(exp(x)=sin(x), x=–4..0);

–3.183063012

 

> fsolve(exp(x)=sin(x), x=–7..–4);

–6.281314366

 

> fsolve(exp(x)=sin(x), x, complex);

.3627020561 – 1.133745919 I

 

> solve({x^2*y^2=0, x-y=1});

{ y = –1, x = 0}, { y = –1, x = 0}, { x = 1, y = 0}, { x = 1, y = 0}

 

> f: =x^7-5*x^2*y^4+1510:

> g: =y^5-3*x^4*y-105:

> s1: =solve({f, g}, {x, y}); # Результат этой функции не приводится

> evalf(");

{ x = –2.844483289, y = –.5348543088}

> allvalues(s1); # Ниже приводится только часть результата

{ x = –2.844483289, y = –.5348543088}, { y = –2.573256586, x = –2.304767679},

{ y =.1857181696+2.786617077 I, x = –2.107398990–.1931448896 I }

{ x = –2.107398990+.1931448896 I, y =.1857181696–2.786617077 I },

{ y = 2.957183542, x = –1.922332687},

--------------------------------------------------------

{ x = 15.00039270, y = 19.74216374}

 

> fsolve({sin(x+y)-exp(x)*y=0, x^2-y=2}, {x, y}, {x=-1..1, y=-2..0});

{ x = –.6687012050, y = –1.552838698}

 

> roots(2*x^3+11*x^2+12*x-9);

[[–3, 2], [ , 1]]

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.