Файл: Решение Перепишем систему в векторноматричной форме.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 25.10.2023
Просмотров: 13
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Решить систему методом Ньютона:
№ | Система уравнений | Точность |
12 | 14 =0 2x+ -9=0 | 0.0001 |
Решение:
Перепишем систему в векторно-матричной форме:
Запишем итерационную формулу метода Ньютона:
и перепишем ее, переходя от вычисления обратной матрицы к решению системы линейных алгебраических уравнений:
;
.
Таким образом, на каждой итерации надо вычислить якобиан и функцию F, решить возникшую систему линейных алгебраических уравнений (например, методом Крамера) относительно [d1i; d2i]T и по ним найти xi+1, yi+1. Итерации закончатся, когда квадрат нормы вектора приращений переменных станет меньше заданной точности.
Решение на Паскале:
Program task3; { Решение системы методом Ньютона }
Const EPS = 0.0001; { Точность расчета }
{ Процедура, вычисляющая первую и вторую функции системы [ F1(X,Y) = 0; F2(X,Y) = 0 ] }
Procedure F(X, Y: Real; Var F1, F2: Real);
Begin
F1 := 14.0*X*X - 12.0*Y*Y + 3.0;
F2 := 2.0*X + 7.0*Y*Y - 9.0
End;
{ Процедура, вычисляющая якобиан системы функций [ F1(X,Y) = 0; F2(X,Y) = 0 ] }
{ Результатом является матрица = [ dF1/dX dF1/dY ] = [ G11 G12 ] }
{ [ dF2/dX dF2/dY ] [ G21 G22 ] }
Procedure G(X, Y: Real; Var G11, G12, G21, G22: Real);
Begin
G11 := 28.0*X;
G12 := -24.0*Y;
G21 := 2.0;
G22 := 14.0*Y
End;
{ Процедура, реашющая систему линейных уравнений методом Крамера: }
{ A1*X1 + B1*X2 = C1 }
{ A2*X2 + B2*X2 = C2 }
Procedure Solve(A1, B1, C1, A2, B2, C2: Real; Var X1, X2: Real);
Var D: Real; { Определитель системы }
Begin
D := A1*B2 - A2*B1;
X1 := (C1*B2 - C2*B1)/D;
X2 := (A1*C2 - A2*C1)/D
End;
Var X0, Y0: Real; { Предыдущая точка решения }
X1, Y1: Real; { Следующая точка решения }
D1, D2: Real; { Приращения X и Y }
F1, F2: Real; { Значения функций системы }
G11, G12, G21, G22: Real; { Компоненты якобиана }
k: Integer; { Число итераций }
D: Real; { Невязка }
Begin
{ Ввод исходных данных }
WriteLn('Vvedite nachalnuyu tochku:');
Write('X0 = '); ReadLn(X0);
Write('Y0 = '); ReadLn(Y0);
k := 1;
F(X0, Y0, F1, F2); { Вычисляем функции системы }
D1 := 0.0; D2 := 0.0;
Repeat { Цикл расчета }
G(X0, Y0, G11, G12, G21, G22); { Вычисляем градиент }
Solve(G11, G12, -F1, G21, G22, -F2, D1, D2); { Находим приращения, решая систему Jacobian*D = -F, что }
{ эквивалентно нахождению D = (Jacobian^(-1))*(-F) }
X1 := X0 + D1;
Y1 := Y0 + D2;
F(X1, Y1, F1, F2); { Вычисляем функции системы }
WriteLn(k:2, '. X = ', X1:8:5, ' : Y = ', Y1:8:5);
WriteLn(' F1(X,Y) = ', F1:8:5, ' : F2(X,Y) = ', F2:8:5);
D := D1*D1 + D2*D2;
WriteLn(' Nevyazka = ', D:8:5);
X0 := X1;
Y0 := Y1;
Inc(k);
Until D <= EPS; // Пока невязка не станет меньше точности расчета
ReadLn
End.
Результат (скриншоты):
Обнаружилось, что система имеет четыре решения, которые удалось получить, изменяя начальную точку.
Первое решение:
Второе решение:
Третье решение:
Четвертое решение: