求解给定变量和不确定性的线性方程组:scipy-optimize?

我想最小化一组方程,其中变量具有不确定性.本质上,我想检验以下假设:给定的测量变量符合方程式给出的公式约束.这似乎是我应该能够对scipy-optimize做的.例如,我有三个方程式:

8 = 0.5 * x1 + 1.0 * x2 + 1.5 * x3 + 2.0 * x4  
4 = 0.0 * x1 + 0.0 * x2 + 1.0 * x3 + 1.0 * x4  
1 = 1.0 * x1 + 1.0 * x2 + 0.0 * x3 + 0.0 * x4  

四个具有1σ不确定度的未知量:

x1 = 0.246 ± 0.007  
x2 = 0.749 ± 0.010  
x3 = 1.738 ± 0.009  
x4 = 2.248 ± 0.007  

寻找正确方向的任何指针.

解决方法:

这是我的方法.假设x1-x4大约在每个均值周围均呈正态分布(1-sigma不确定性),那么问题就变成了使用3个线性约束函数将误差平方和最小化的问题之一.因此,我们可以使用scipy.optimize.fmin_slsqp()对其进行攻击

In [19]:

def eq_f1(x):
    return (x*np.array([0.5, 1.0, 1.5, 2.0])).sum()-8
def eq_f2(x):
    return (x*np.array([0.0, 0.0, 1.0, 1.0])).sum()-4
def eq_f3(x):
    return (x*np.array([1.0, 1.0, 0.0, 0.0])).sum()-1
def error_f(x):
    error=(x-np.array([0.246, 0.749, 1.738, 2.248]))/np.array([0.007, 0.010, 0.009, 0.007])
    return (error*error).sum()
In [20]:

so.fmin_slsqp(error_f, np.array([0.246, 0.749, 1.738, 2.248]), eqcons=[eq_f1, eq_f2, eq_f3])
Optimization terminated successfully.    (Exit mode 0)
            Current function value: 2.17576389592
            Iterations: 4
            Function evaluations: 32
            Gradient evaluations: 4
Out[20]:
array([ 0.25056582,  0.74943418,  1.74943418,  2.25056582])
上一篇:codereview


下一篇:OpenCVSharp 4.5 单应性矩阵(Homography)估计相机姿态