簡體   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