Python fsolve()抱怨形状。为什么?

发布于 2021-01-29 14:59:28

具有函数f(x,y,z),我需要求解约束f(x,y,z)= 0,然后对其进行绘制。我试图为每对(y,z)查找f(x,y,z)= 0的值x:

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)说“ TypeError:fsolve:’func’参数’func’的输入和输出形状不匹配。”

但是,如果我自己进行测试,它会具有相同的形状:

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

返回True。

为什么fsolve()抱怨?

关注者
0
被浏览
58
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    fsolve期望x参数和的返回值为func标量或一维数组。您必须修改代码才能使用展平的x值。例如

    def func(x, y, z):
        x = x.reshape(y.size, z.size)
        return (x + y + z).ravel()
    

    以及类似这样的调用fsolve

    sol, info, ier, mesg = fsolve(func, x0.ravel(), args=yz, full_output=True)
    x = sol.reshape(y.size, z.size)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看