简体   繁体   中英

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.

But in python using scipy, I'm getting the following error message:

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,) .

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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