Решите матричное уравнение со скалярным значением - PullRequest
1 голос
/ 28 мая 2020

У меня есть две квадратные матрицы, A и B, и wi sh, чтобы найти скалярное значение s, которое минимизирует приведенное ниже уравнение:

|| A-sB ||

где || 2-норма. Как я могу эффективно закодировать это в python с помощью numpy или scipy?

1 Ответ

1 голос
/ 28 мая 2020

Вы можете использовать scipy.optimize.minimize : сначала определите вашу целевую функцию, которую я назвал f, затем minimize требует первоначального предположения x0 и дополнительных параметров функции, которую вы хотите для минимизации:

import numpy as np
from scipy.optimize import minimize

def f(x, A, B):
    return np.linalg.norm(A-x*B, ord=2)

n = 3

A = np.ones((n,n))
B = np.arange(n**2).reshape(n,n)

minimize(f, x0=1, args=(A, B))
      fun: 1.5845110835227028
 hess_inv: array([[0.00838895]])
      jac: array([-4.47034836e-08])
  message: 'Optimization terminated successfully.'
     nfev: 24
      nit: 5
     njev: 8
   status: 0
  success: True
        x: array([0.1844041])

Minimize вернет своего рода отчет об оптимизации, в частности, вам нужно значение x, которое вы можете получить как словарь minimize(f, x0=1, args=(A, B))['x'].

...