我知道 scipy.optimize 中有一个最小二乘的例子,但是我在 残差函数上遇到了超过三天的问题。我决定全面描述这个问题。我通过该站点发现了其他一些类似的问题,但我无法真正通过编程方式解决它,并且在我的情况下真的很困惑。我无法正确创建适合 scipy.optimize.leastsq residual的残差函数。我真的是堆栈..
这个问题就是 A*x=b 问题。让我简短地解释一下:
输入:
- y - 例如:y1 = dot(delta_1, array([x2, x5, x6]))
- x - 8 个未知数 [x2, x4, x5, x6, x7, x10, x13, x16]
- delta - 长度。
脚步:
- 函数f(x_m, delta_n_m),n - 行,m - 列。
- 残差|b_n - f(x, delta) |^2
- 使用 scipy.optimize.leastsq(residual, x0, arg(delta))最小化残差
我也有函数、残差、最小化器和输入,但是,我真的与我的残差函数叠加。
找到: - (x2, x4, x5, x6, x7, x10, x13, x16),所以,我将所有值都放在代码中。
代码:
import numpy as np
from scipy.optimize import leastsq
def function(x,delta):
return dot(delta, x)
def residual(x, delta, y):
error = y - dot(delta, x)
return sum(error**2)
def main():
# INPUTS
# Unknown values
x = [x2, x4, x5, x6, x7, x10, x13, x16]
delta = np.array([1.76762035, 2.04349174, 1.25674742],
[0.94873891, 2.01859342, 1.46348023],
[0.83678402, 1.12030343, 0.92516861],
[1.43, 2., 2., 1.57])
y = np.array([0.8353410485015903, 0.73620941924970962,
0.45428639186344633, 1.6180418445100002]
x_init = np.zeros(len(x))
result = leastsq(residual, x, args=(delta,y) )
print result[0]
if __name__ == '__main__':
main()