Метод Ньютона для функций, содержащих матрицы с использованием Python - PullRequest
0 голосов
/ 25 марта 2019

Мне удалось найти несколько реализаций методов Ньютона, например, эта ссылка или , может быть, эта .

Однако в большинстве случаев примерыс простыми функциями, такими как: x ^ 2−9 = 0 или x ^ 3-x ^ 2-1 = 0.Я ищу что-то, что будет работать для: enter image description here

У меня вопрос, который я потерял в том, как использовать этот код для решения моей проблемы.Например, я не уверен, как бы я применил производную (dfdx) к моему F (x), который содержит матрицы.Кроме того, если мне нужно напрямую ввести матрицы в моем "def f (x)"

Код, который я использую:

def Newton(f, dfdx, x, eps):
    f_value = f(x)
    iteration_counter = 0
    while abs(f_value) > eps and iteration_counter < 100:
        try:
            x = x - float(f_value)/dfdx(x)
        except ZeroDivisionError:
            print "Error! - derivative zero for x = ", x
            sys.exit(1)     # Abort with error

        f_value = f(x)
        iteration_counter += 1

    # Here, either a solution is found, or too many iterations
    if abs(f_value) > eps:
        iteration_counter = -1
    return x, iteration_counter

def f(x):
    return x**2 - 9

def dfdx(x):
    return 2*x

solution, no_iterations = Newton(f, dfdx, x=1000, eps=1.0e-6)

if no_iterations > 0:    # Solution found
    print "Number of function calls: %d" % (1 + 2*no_iterations)
    print "A solution is: %f" % (solution)
else:
    print "Solution not found!"

1 Ответ

0 голосов
/ 25 марта 2019

Специальных правил для получения матриц не существует - производная просто рассчитывается для каждого элемента отдельно. Я бы предложил оценить выражение $ [x1, x2] '* M * [x1, x2] $ на бумаге, чтобы получить матрицу многочленов, а затем вычислить производную каждого из них.

...