Sympy nsolve功能和多种解决方案

时间:2012-11-12 13:21:07

标签: python math solver sympy

我在python中做了这个小测试程序,看看solvensolve是如何工作的。

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或其他函数获取所有数值解,只需一行?

1 个答案:

答案 0 :(得分:6)

  

解决的第一个调用给了我两个相应函数的解决方案。但不是第二个。我想知道为什么?

一般情况下,你不能象征性地解决方程,显然solve就是这样做的。换句话说:如果solve可以解决您的等式,那么考虑自己很幸运,典型的技术应用程序没有解析解,也就是说,无法用符号解决。

所以后退选项是以数字方式求解方程,它从初始点开始。在一般情况下,即使存在解决方案,也无法保证nsolve能找到解决方案。

  

有没有办法通过nsolve或其他函数获取列表中的所有数值解,只需一行?

一般来说,没有。不过,您可以从许多初步猜测中开始nsolve并跟踪找到的解决方案。您可能希望在感兴趣的区间内均匀分布初始猜测。这称为多启动方法