繁体   English   中英

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

[英]Python scipy fsolve “mismatch between the input and output shape of the 'func' argument”

在我遇到问题之前,我在stackoverflow上搜索了相同的线程并遇到了同样的问题:

根据我的理解阅读有关此错误,

提出TypeError(msg)
TypeError:fsolve:'func'参数'fsolve_function'的输入和输出形状不匹配

问题是输入和输出的形状一样。

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

  • input, initialGuessinitialGuessfsolve函数中使用的起始估计值)。 输入initialGuess有3个坐标x,y和z的起始估计值。 因此,我希望我的初始输入估计总是有三个输入。
  • 输出, out (非线性联立方程)。 在这个例子中,我有4个非线性方程。
  • scipy.optimize.fsolve提高上面强调的错误,因为输入和输出具有相同的形状。 在我的特定情况下,我希望我的输入总是有三个值(猜测x,y和z的初始起点)。 在这种情况下,输出具有4个非线性方程,使用初始输入估计求解。
  • 附注:使用相同的输入和输出形状,例如。 输入3 [x,y,z]的形状和3个非线性方程的输出, fsolve将相应地进行计算。 我只是想知道你怎么能扩展fsolve使用let说的等于或超过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 

fsolve是MINPACK的hybrd的包装器,它要求函数的参数和输出具有相同数量的元素。 你可以尝试更普遍的scipy.optimize.root中没有这个限制的其他算法(例如lm ):

from scipy.optimize import fsolve, root

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 = root(fsolve_function, initialGuess, method='lm')
print(result.x)

顺便说一句,它找不到实际的零点---应该有一个吗?

你可以强制fsolve使用你的函数,如果你提供一个初始猜测与“假”第四个变量:

initialGuess = [35, 93, -39, 0]

但我不确定这种情况下的结果有多可靠。

暂无
暂无

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

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