我一直在測試已發表在文獻中的一種算法,該算法涉及在Matlab和Python中求解一組'm'非線性方程。非線性方程組涉及包含複數的輸入變量,因此得到的解決方案也應該是複雜的。截至目前,我已經能夠通過使用下面的代碼行獲得在Matlab不錯的成果:從Python中的非線性方程組中找到復數根
lambdas0 = ones(1,m)*1e-5;
options = optimset('Algorithm','levenberg-marquardt',...
'MaxFunEvals',1000000,'MaxIter',10000,'TolX',1e-20,...
'TolFun',1e-20);
Eq = @(lambda)maxentfun(lambda,m,h,g);
[lambdasf] = fsolve(Eq,lambdas0,options);
其中h和g分別是一個複雜的矩陣和向量。該解決方案非常適合各種初始值。
但我一直試圖在Python中模仿這些結果,但收效甚微。數值解算器的設置看起來有很大不同,'levenburg-marquardt'算法存在於函數根源下。在蟒蛇這種算法不能處理複雜的根源,當我運行下面幾行:
lambdas0 = np.ones(m)*1e-5
sol = root(maxentfun, lambdas0, args = (m,h,g), method='lm', tol = 1e-20, options = {'maxiter':10000, 'xtol':1e-20})
lambdasf = sol.x
我收到以下錯誤:
minpack.error: Result from function call is not a proper array of floats.
我已經使用了一些其他算法嘗試,如「 broyden2'和'anderson',但是它們遠不如Matlab,並且只有在初始條件下玩後才能給出好的結果。函數'fsolve'也不能處理複雜的變量。
我想知道是否有東西我申請不正確,如果有人有一個想法可能如何正確地解決在Python中的複雜的非線性方程。
非常感謝您