Программирование -> Классическое ->
Python 3
Приближённое решение систем уравнений с несколькими переменными итерационными методами
Системы уравнений:

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

Система из двух уравнений имеет решения (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)