首页 > 解决方案 > 求解具有标量值的矩阵方程

问题描述

我有两个方阵 A 和 B,并希望找到标量值 s,它可以最小化以下等式:

||A-sB||

在哪里 || 是 2 范数。如何使用 numpy 或 scipy 在 python 中有效地编写代码?

标签: pythonnumpyscipyminimize

解决方案


您可以使用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']


推荐阅读