fsolve - 输入和输出之间不匹配

时间:2014-03-14 18:54:11

标签: python excel numpy scipy

我试图用三个未知数来解决一个过度定义的方程组。通过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

有人可以建议我错在哪里吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

异常意味着fnz()函数调用的结果与输入g的维度不同,后者是3个元素的列表,或者可以看作是{{1}形状array

为了说明问题,如果我们定义:

(3,)

不会有这样的例外。但这会:

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()具有相同的长度,我相信它长于3个元素。