[英]Python scipy fsolve “mismatch between the input and output shape of the 'func' argument”
[英]fsolve - mismatch between input and output
我正在尝试用三个未知数来解决一个方程组过多的问题。 我可以通过for循环调用方程组,从而在MATLAB中使用fsolve和lsqnonlin获得解决方案。
但是在使用scipy的python中,我收到以下错误消息:
fsolve: there is a mismatch between the input and output shape of the 'func' argument 'fnz'
代码如下:
from xlrd import open_workbook
import numpy as np
from scipy import optimize
g = [0.5,1,1.5]
wb = open_workbook('EThetaValuesA.xlsx')
sheet=wb.sheet_by_index(0)
y=sheet.col_values(0,1)
t1=sheet.col_values(1,1)
t2=sheet.col_values(2,1)
t3=sheet.col_values(3,1)
def fnz(g):
i=0
sol=[0 for i in range(len(t1))]
x1 = g[0]
x2 = g[1]
x3 = g[2]
print len(t1)
for i in range(len(t1)):
# various set of t1,t2 and t3 gives the various eqns
print i
sol[i]=x1+t1[i]/(x2*t2[i]+x3*t3[i])-y[i]
return sol
Anz = optimize.fsolve(fnz,g)
print Anz
有人可以建议我错了吗? 先感谢您。
异常意味着fnz()
函数调用的结果与输入g
维数不同,后者是3个元素的列表,或者可以看作形状(3,)
的array
。
为了说明这个问题,如果我们定义:
def fnz(g):
return [2,3,5]
Anz = optimize.fsolve(fnz,g)
不会有例外。 但这将:
def fnz(g):
return [2,3,4,5]
Anz = optimize.fsolve(fnz,g)
fnz()
的结果应与t1
长度相同,我确定它的长度大于3个元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.