Приближённое решение систем уравнений с несколькими переменными итерационными методами
×

Приближённое решение систем уравнений с несколькими переменными итерационными методами

Системы уравнений:

Пример решения системы уравнений методом Ньютона:

Система из двух уравнений имеет решения (3; -1) и (1; -3). Для их получения необходимо задать начальные приближения в соответствующих четвертях.

Код:

from sympy import *

x, y = symbols('x y')

#Система уравнений
f1 = (x + y) * (x ** 2 - y ** 2) - 16
f2 = (x - y) * (x ** 2 + y ** 2) - 40

#Диффернцируем обе функции по х и по у
f1x, f1y = diff(f1, x), diff(f1, y)
f2x, f2y = diff(f2, x), diff(f2, y)

#Находим определители
d = f1x * f2y - f2x * f1y
dx = f1 * f2y - f2 * f1y
dy = f1x * f2 - f2x * f1

#Начальное приближение (для получения второй точки необходимо заменить на xi, yi = -0.1, -0.5)
xi, yi = -0.1, 0.5

e = 1
while e > 0.001:
    #фактические значения определителей
    dxi = dx.evalf(subs={'x':xi, 'y':yi})
    dyi = dy.evalf(subs={'x':xi, 'y':yi})
    di = d.evalf(subs={'x':xi, 'y':yi})
    #уточнение решения заданной системы
    xi = xi - dxi / di
    yi = yi - dyi / di
    e = max(dxi, dyi)

print(xi, yi)

Система из трех уравнений имеет решения (-1; -2; -3) и (1; 2; 3). Для их получения необходимо задать начальные приближения в соответствующих частях осей координат.

Код:

from sympy import *

x, y, z = symbols('x y z')

#Система уравнений
f1 = x * y + y * z - 8
f2 = y * z + z * x - 9
f3 = z * x + x * y - 5

#Диффернцируем обе функции по х и по у
f1x, f1y, f1z = diff(f1, x), diff(f1, y), diff(f1, z)
f2x, f2y, f2z = diff(f2, x), diff(f2, y), diff(f2, z)
f3x, f3y, f3z = diff(f3, x), diff(f3, y), diff(f3, z)

#Находим определители
d = (f1x * f2y * f3z) + (f1y * f2z * f3x) + (f2x * f3y * f1z) - (f3x * f2y * f1z) - (f2x * f1y * f3z) - (f2z * f3y * f1x)
dx = (f1 * f2y * f3z) + (f1y * f2z * f3) + (f2 * f3y * f1z) - (f3 * f2y * f1z) - (f2 * f1y * f3z) - (f2z * f3y * f1)
dy = (f1x * f2 * f3z) + (f1 * f2z * f3x) + (f2x * f3 * f1z) - (f3x * f2 * f1z) - (f2x * f1 * f3z) - (f2z * f3 * f1x)
dz = (f1x * f2y * f3) + (f1y * f2 * f3x) + (f2x * f3y * f1) - (f3x * f2y * f1) - (f2x * f1y * f3) - (f2 * f3y * f1x)

#Начальное приближение (для получения второй точки необходимо заменить на xi, yi, zi = -0.5, -0.5, -0.5)
xi, yi, zi = 0.5, 0.5, 0.5

e = 1
while e > 0.01:
    #фактические значения определителей
    dxi = dx.evalf(subs={'x':xi, 'y':yi, 'z':zi})
    dyi = dy.evalf(subs={'x':xi, 'y':yi, 'z':zi})
    dzi = dz.evalf(subs={'x': xi, 'y': yi, 'z': zi})
    di = d.evalf(subs={'x':xi, 'y':yi, 'z':zi})
    #уточнение решения заданной системы
    xi = xi - dxi / di
    yi = yi - dyi / di
    zi = zi - dzi / di
    e = max(dxi, dyi, dzi)

print(xi, yi, zi)