简体   繁体   English

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

[英]fsolve - mismatch between input and output

I'm trying to solve an overdetmined system of equations with three unknowns. 我正在尝试用三个未知数来解决一个方程组过多的问题。 I'm able to get solution with fsolve and lsqnonlin in MATLAB by calling the system of equations through a for loop. 我可以通过for循环调用方程组,从而在MATLAB中使用fsolve和lsqnonlin获得解决方案。

But in python using scipy, I'm getting the following error message: 但是在使用scipy的python中,我收到以下错误消息:

fsolve: there is a mismatch between the input and output shape of the 'func' argument 'fnz'

The code is given below: 代码如下:

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

Could anyone please suggest where I'm wrong? 有人可以建议我错了吗? Thank you in advance. 先感谢您。

The exception means that the result from fnz() function call does not has the same dimension as the input g , which is a list of 3 elements, or can be seen as an array of shape (3,) . 异常意味着fnz()函数调用的结果与输入g维数不同,后者是3个元素的列表,或者可以看作形状(3,)array

To illustrate the problem, if we define: 为了说明这个问题,如果我们定义:

def fnz(g):
    return [2,3,5]
Anz = optimize.fsolve(fnz,g)

There will not be such an exception. 不会有例外。 But this will: 但这将:

def fnz(g):
    return [2,3,4,5]
Anz = optimize.fsolve(fnz,g)

The result from fnz() should have the same length as t1 , which I am sure is longer than 3 elements. fnz()的结果应与t1长度相同,我确定它的长度大于3个元素。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM