讓我們說我有一個公式的Python和fsolve():一個函數f(x)由fsolve所謂的動態內容()
x + 2*cos(x) = 0
,我想解決這個問題。然後我可以編程以下內容:
def func1(x):
out = x + 2*cos(x)
return out
Solution = fsolve(func1, StartValue)
在此示例中,StartValue可以具有任意值。到現在爲止還挺好!我正在編寫一個模擬程序,創建一個我想用fsolve()解決的非線性方程組。 現在的挑戰是,運行時間之前(!)非線性方程組的大小是未知的(!)。這意味着,我可以具有例如
X + 2個* COS(X)= 0
以同樣的方式,我可以有
2*x + 4*y = 0
18*y -18 = 0
爲了解決的最後提到的系統公式(這通常會永遠在我的節目一個非線性的)我已經找到了以下解決方案:
def func2(x):
out = [2*x[0] + 4*x[1]]
out.append(18*x[1]-18)
return out
Solution = fsolve(func2, [1, 1])
這工作得很好了。但是爲什麼我不能使用func2(x)顯示的解決方案有一定的原因:它使我的程序非常慢! 函數fsolve()迭代地調用函數func2(x)數次,直到找到解[-2 1]爲止。但是我的程序會處理幾百到幾十行的線性方程組 。這意味着在每個迭代步驟中,所有這些連續行都被附加,如func2(x)所示。因此,我正在尋找一種方法作爲函數func3(x)創建方程組,並且之後fsolve()僅調用現成的func3(x)。下面是一個僞代碼示例:
func3 = lambda x: 2*x[0] + 4*x[1]
func3.append(lambda x: 18*x[1] - 18)
Solution = fsolve(func3, [1, 1])
不幸的是,功能不能如我在僞代碼顯示它上面追加。因此,我的問題:我如何動態地建立我的函數func3,然後通過( !)ONCE READY BUILT(!)函數func3到fsolve()?
非常感謝你提前