python fsolve说明_Python fsolve()抱怨形状。为什么?

Having the function f(x,y,z), I need to solve the restriction f(x,y,z) = 0 and then plot it. I tried to find for each pair (y,z) the value x for which f(x,y,z) = 0:

from numpy import *

from scipy.optimize import fsolve

def func(x,y,z):

return x+y+z

y = linspace(0,1,100)

z = linspace(0,1,100)

x0 = zeros((y.size,z.size)) + 0.5 # the initial guess

yz = (y[:,newaxis],z[newaxis,:]) # the other parameters

x, info, iterations, message = fsolve(func,x0,yz)

contour(y,z,x)

Python (2.7.5) says "TypeError: fsolve: there is a mismatch between the input and output shape of the 'func' argument 'func'."

But if I test it myself, it gives the same shape:

func(x0,y[:,newaxis],z[:,newaxis]).shape == x0.shape

returns True.

Why does fsolve() complain?

解决方案

fsolve expects the x argument and the return value of func to be a scalar or one-dimensional array. You'll have to modify your code to work with flattened x values. E.g.

def func(x, y, z):

x = x.reshape(y.size, z.size)

return (x + y + z).ravel()

and something like this for the call to fsolve:

sol, info, ier, mesg = fsolve(func, x0.ravel(), args=yz, full_output=True)

x = sol.reshape(y.size, z.size)

你可能感兴趣的:(python,fsolve说明)