Python 为什么在Scipy优化中缩放向量和矩阵会得到完全不同的结果
我有以下优化方案:Python 为什么在Scipy优化中缩放向量和矩阵会得到完全不同的结果,python,math,numpy,scipy,linear-algebra,Python,Math,Numpy,Scipy,Linear Algebra,我有以下优化方案: import numpy as np from scipy.optimize import minimize #Define problem A = np.array([[60., 90., 120.], [30., 120., 90.]]) b = np.array([6700.5, 699.,]) def f(x): return np.linalg.norm(A.dot(x) - b) cons ={'type': 'eq'
import numpy as np
from scipy.optimize import minimize
#Define problem
A = np.array([[60., 90., 120.],
[30., 120., 90.]])
b = np.array([6700.5, 699.,])
def f(x):
return np.linalg.norm(A.dot(x) - b)
cons ={'type': 'eq',
'fun': lambda x: sum(x) - 1}
x0 = [1, 0, 0] # initial guess
minimize(f, x0, method='SLSQP', bounds=((0, np.inf),)*3, constraints=cons)
这将提供以下输出:
status: 0
success: True
njev: 2
nfev: 10
fun: 6608.620222860367
x: array([ 0., 0., 1.])
message: 'Optimization terminated successfully.'
jac: array([ -62.50927734, -100.675354 , -127.78314209, 0. ])
nit: 2
这工作正常。但是下一步我要做的是通过这样做来规范化或缩放向量b
和矩阵A
,并将其放在def(x)
之前
现在结果完全不同了
x: array([ 1., 0., 0.])
我的问题是
- 为什么这两种解决方案不同
- 缩放
和A
以使结果一致的最佳方法是什么b
A
和b
。这取决于你为什么要这样做。你可以选择两个因子中的最大值作为你的比例因子。我希望答案会有所不同。必须一致地应用矩阵方程的缩放。它还应该允许您在缩放和未缩放答案之间进行转换。这是一个新的向量空间。显而易见的答案是:对方程的左右两侧使用一致的缩放矩阵。其他任何东西都是无效的线性代数。出于好奇:你为什么不使用平方误差(即,np.linalg.norm(a.dot(x)-b)**2
)有什么原因吗?然后可以使用np.linalg.lstsq()
。不能用不同的因子缩放A
和b
。这取决于您为什么要这样做。你可以选择两个因子中的最大值作为你的比例因子。我希望答案会有所不同。必须一致地应用矩阵方程的缩放。它还应该允许您在缩放和未缩放答案之间进行转换。这是一个新的向量空间。显而易见的答案是:对方程的左右两侧使用一致的缩放矩阵。其他任何东西都是无效的线性代数。出于好奇:你为什么不使用平方误差(即,np.linalg.norm(a.dot(x)-b)**2
)有什么原因吗?您可以使用np.linalg.lstsq()
。
x: array([ 1., 0., 0.])