python - 求解具有标量值的矩阵方程
问题描述
我有两个方阵 A 和 B,并希望找到标量值 s,它可以最小化以下等式:
||A-sB||
在哪里 || 是 2 范数。如何使用 numpy 或 scipy 在 python 中有效地编写代码?
解决方案
您可以使用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']
。
推荐阅读
- javascript - 调用 MenuItem 的单击事件时如何使菜单不关闭(电子)
- windows - Windows 10的“任务调度程序”存储日志文件在哪里?
- python-3.x - 如何在 Kivy App 中实现 Twitter 身份验证,无需人工干预
- node.js - Node.js async.then 循环 i 变量不同的值
- javascript - 如何自定义可调整大小的 div?
- batch-file - 如何随时重定向输出新文件
- linux - ldapsearch 我们需要查找在 openDJ 中创建/更新的用户,例如从特定时间开始
- python - 如何使用python删除excel中的合并行?
- c# - 悬停时的 C# WPF 按钮未完全填充背景
- android - 如何在 ROOM UPDATE 查询中将数据增加到现有数据