Загрузка данных


# ======================================================================
# 3. Метод Бройдена (адаптирован для новой системы)
# Система:
#   1) 2^x1 - x2 - 1.5 = 0
#   2) ln(x1+1.5) + x2 - 0.2 = 0
# ======================================================================

import numpy as np

def broyden(f, x, eps=1e-5):
    it = 0
    e = np.eye(len(x)) * eps
    J = (f(x-e) - f(x+e)) / (-2*eps)
    x = np.array(x).reshape(len(x), 1)
    fx = f(x)

    while np.linalg.norm(fx) >= eps:
        dx = -np.linalg.inv(J) @ fx
        x = x + dx
        fx = f(x)
        J = J + (fx @ dx.T) / (dx.T @ dx)
        it += 1
    return x.flatten(), fx.flatten(), it

# Новая система уравнений
def f(x):
    return np.array([
        2**x[0] - x[1] - 1.5,
        np.log(x[0] + 1.5) + x[1] - 0.2
    ])

x, y, it = broyden(f, [0.3, 0.3])
print("Решение методом Бройдена:")
print(f"x1 = {x[0]:.6f}, x2 = {x[1]:.6f}")
print(f"Количество итераций: {it}")
print(f"Невязки: F1 = {y[0]:.2e}, F2 = {y[1]:.2e}")