# ======================================================================
# 2. Метод Ньютона (адаптирован для новой системы)
# Система:
# 1) 2^x1 - x2 - 1.5 = 0
# 2) ln(x1+1.5) + x2 - 0.2 = 0
# ======================================================================
import numpy as np
# Определение системы уравнений
def F(x):
"""Вектор функций: [F1, F2]"""
x1, x2 = x[0], x[1]
f1 = 2**x1 - x2 - 1.5
f2 = np.log(x1 + 1.5) + x2 - 0.2
return np.array([f1, f2], dtype=float)
# Матрица Якоби
def Jacobian(x):
"""Матрица Якоби 2x2"""
x1, x2 = x[0], x[1]
J = np.zeros((2, 2))
# ∂F1/∂x1 = 2^x1 * ln(2)
J[0, 0] = (2**x1) * np.log(2)
# ∂F1/∂x2 = -1
J[0, 1] = -1.0
# ∂F2/∂x1 = 1/(x1+1.5)
J[1, 0] = 1.0 / (x1 + 1.5)
# ∂F2/∂x2 = 1
J[1, 1] = 1.0
return J
# Метод Ньютона по блок-схеме
def newton_system(x0, eps=1e-4, max_iter=100):
x = np.array(x0, dtype=float)
ndx = 2.0 * eps
it = 0
print("Итерация | x1 x2 | F1 F2 | ||dx||")
print("-" * 70)
while ndx > eps and it < max_iter:
fx = F(x)
print(f"{it:5d} | {x[0]:10.6f} {x[1]:10.6f} | {fx[0]:10.6f} {fx[1]:10.6f} | {ndx:10.6f}")
J = Jacobian(x)
invJ = np.linalg.inv(J)
dx = invJ @ fx
ndx = np.linalg.norm(dx)
x = x - dx
it += 1
fx_final = F(x)
print(f"{it:5d} | {x[0]:10.6f} {x[1]:10.6f} | {fx_final[0]:10.6f} {fx_final[1]:10.6f} | {ndx:10.6f}")
print("\nРешение найдено за", it, "итераций")
print(f"x1 = {x[0]:.6f}, x2 = {x[1]:.6f}")
print(f"Невязки: F1 = {fx_final[0]:.2e}, F2 = {fx_final[1]:.2e}")
return x
if __name__ == "__main__":
x0 = [0.3, 0.3]
eps = 0.0001
solution = newton_system(x0, eps)
A