Python scipy fsolve“func参数的输入和输出形状不匹配”

2024-05-28 22:54:31 发布

您现在位置:Python中文网/ 问答频道 /正文

在我进入问题之前,我已经搜索了stackoverflow上的相关线程,发现了相同的问题:

根据我对这个错误的理解

raise TypeError(msg)
TypeError: fsolve: there is a mismatch between the input and output shape of the 'func' argument 'fsolve_function'

问题是输入和输出的形状是不同的。

在下面的代码示例中,我有以下内容:

  • 输入,initialGuess(要在scipy.optimize中的fsolve函数中使用的起始估计)。输入initialGuess对坐标x、y和z有3个初始估计值。因此,我希望我的初始输入估计值始终有3个输入值。
  • 输出,out(非线性联立方程)。在这个例子中,我有4个非线性方程。
  • scipy.optimize.fsolve引发上面突出显示的错误,因为输入和输出的形状不同。在我的特殊情况下,我希望我的输入总是有三个值(猜测x、y和z的初始起点)。在这种情况下,输出有4个非线性方程需要使用初始输入估计来求解。
  • 旁注:使用相同的输入和输出形状,例如3[x,y,z]的输入形状和3个非线性方程的输出,fsolve将相应地进行计算。我只是想知道,如何扩展fsolve来使用等于或大于4个非线性联立方程,并且只有3个输入初始估计?
  • 代码如下:

    from scipy.optimize import fsolve
    
    def fsolve_function(arguments):
        x = arguments[0]
        y = arguments[1]
        z = arguments[2]
    
        out = [(35.85 - x)**2 + (93.23 - y)**2 + (-39.50 - z)**2 - 15**2]
        out.append((42.1 - x)**2 + (81.68 - y)**2 + (-14.64 - z)**2 - 27**2)
        out.append((-70.90 - x)**2 + (-55.94 - y)**2 + (-68.62 - z)**2 - 170**2)
        out.append((-118.69 - x)**2 + (-159.80 - y)**2 + (-39.29 - z)**2 - 277**2)
    
        return out
    
    initialGuess = [35, 93, -39]
    result = fsolve(fsolve_function, initialGuess)
    print result 
    

Tags: inputoutputfunctionscipybetweenoutargumentsoptimize

热门问题