我在python中做了這個小測試程序,看看solve
和nsolve
是如何工作的。Sympy nsolve函數和多種解決方案
from sympy import *
theta = Symbol('theta')
phi = Symbol('phi')
def F(theta,phi):
return sin(theta)*cos(phi)+cos(phi)**2
def G(phi):
return ((1 + sqrt(3))*sin(phi) - 4*pi*sin(2*phi)*cos(2*phi))
solution1 = solve(F(pi/2,phi),phi)
solution2 = solve(G(phi),phi)
solution3 = nsolve(G(phi),0)
solution4 = nsolve(G(phi),1)
solution5 = nsolve(G(phi),2)
solution6 = nsolve(G(phi),3)
print solution1, solution2, solution3, solution4, solution5, solution6
而且我得到這樣的輸出:
[pi/2, pi] [] 0.0 -0.713274788952698 2.27148961717279 3.14159265358979
解決的第一個電話給我相應的功能的兩種解決方案。但不是第二個。我想知道爲什麼? nsolve
似乎與初始測試值一起工作,但取決於該值,它會給出不同的數值解。有沒有一種方法可以用nsolve
或其他函數列出所有數字解決方案,只需一行?
謝謝!我把'nsolve'放在for循環中,以跟蹤不同初始猜測中找到的解,均勻分佈在[0,pi]中。 – aymenbh
@ user1816760是的,這可以工作。多表面方法通常是適用的正確方法。請記住,很可能多次發現相同的解決方案,並且解決方案只是近似的。例如,假設確切的解決方案是0.5,那麼您會發現0.4999997和0.5000002等等。儘管它們有所不同,但只能保存其中的一個。我希望你明白我的意思。 – Ali
是的,我明白了。我嘗試過使用其他函數,並且我有時會多次使用完全相同的解決方案,或者您提到的某些值彼此接近。爲了存儲數據,我會考慮這一點。 – aymenbh