Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scipy.optimize.minimize函数中方形拟合约束中的错误_Python_Python 3.x_Scipy_Least Squares - Fatal编程技术网

Python scipy.optimize.minimize函数中方形拟合约束中的错误

Python scipy.optimize.minimize函数中方形拟合约束中的错误,python,python-3.x,scipy,least-squares,Python,Python 3.x,Scipy,Least Squares,我正在将数据拟合到最小平方拟合。我给出了装配的约束条件,如下所示。”“实验规范”没有定义,但它包含我的数据,将我的数据调用到代码中并不是问题,所以我没有把它放在我的问题中。但在我的约束中,我想问的一件事是,p[3],p[4],p[5],p[6]和p[7]小于1。但是当我调用p[3]、p[4]、p[5]、p[6]和p[7]的优化参数时,它们都大于1。我做错什么了吗 def myerr(p, xdata, ydata): return sum((ydata - calculate_spectru

我正在将数据拟合到最小平方拟合。我给出了装配的约束条件,如下所示。”“实验规范”没有定义,但它包含我的数据,将我的数据调用到代码中并不是问题,所以我没有把它放在我的问题中。但在我的约束中,我想问的一件事是,p[3],p[4],p[5],p[6]和p[7]小于1。但是当我调用p[3]、p[4]、p[5]、p[6]和p[7]的优化参数时,它们都大于1。我做错什么了吗

def myerr(p, xdata, ydata):  
return sum((ydata - calculate_spectrum(p,xdata))**2)

con = ({'type': 'eq', 'fun': lambda p: p[11]+p[12]+p[13]-1}, {'type': 'ineq', 'fun': lambda p: p[11]}, {'type': 'ineq', 'fun': lambda p: p[12]},{'type': 'ineq', 'fun': lambda p: p[13]},{'type': 'ineq', 'fun': lambda p: p[3]-1},{'type': 'ineq', 'fun': lambda p: p[4]-1},{'type': 'ineq', 'fun': lambda p: p[5]-1},{'type': 'ineq', 'fun': lambda p: p[6]-1},{'type': 'ineq', 'fun': lambda p: p[7]-1})
p0 = [m,z,3000,0.3,0.3,0.1,0.2,0.3,0.4,0.4,0.4,0.2,0.5,0.6]
p_opt = scipy.optimize.minimize(myerr, p0, args=(mz,experiment_norm), constraints = con)
从:

等式约束表示约束函数结果为零,而不等式表示约束函数结果为非负

让我们看看您的一个约束条件:

{'type': 'ineq', 'fun': lambda p: p[3]-1}
非负表示
p[3]-1
必须大于或等于零。所以
p[3]-1>=0
p[3]>=1
。您没有指定contstraint小于1,而是大于1!你想要的是:

{'type': 'ineq', 'fun': lambda p: 1-p[3]}
请注意,您还可以将多个contstraint分组在一起,以获得更简单的代码:

{'type': 'ineq', 'fun': lambda p: [1-p[3], 1-p[4], 1-p[5], 1-p[6], 1-p[7]]}
或者如果
p
是一个numpy数组:

{'type': 'ineq', 'fun': lambda p: 1-p[3:8]}

发布一个完全有效的代码示例是一种良好的礼仪。这使得乐于助人的人更容易发现错误并测试解决方案。