Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sympy nsolve function and multiple solutions

I did this little test program in python to see how solve and nsolve work.

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

And I get this output:

[pi/2, pi] [] 0.0 -0.713274788952698 2.27148961717279 3.14159265358979

The first call of solve gave me two solutions of the corresponding function. But not the second one. I wonder why? nsolve seems to work with an initial test value, but depending on that value, it gives different numerical solutions. Is there a way to get the list all numerical solutions with nsolve or with another function, in just one line?

like image 475
aymenbh Avatar asked Nov 12 '12 13:11

aymenbh


1 Answers

The first call of solve gave me two solutions of the corresponding function. But not the second one. I wonder why?

In general, you cannot solve an equation symbolically and apparently solve does exactly that. In other words: Consider yourself lucky if solve can solve your equation, the typical technical applications don't have analytic solutions, that is, cannot be solved symbolically.

So the fall-back option is to solve the equation numerically, which starts from an initial point. In the general case, there is no guarantee that nsolve will find a solution even if exists one.

Is there a way to get the list all numerical solutions with nsolve or with another function, in just one line?

In general, no. Nevertheless, you can start nsolve from a number of initial guesses and keep track of the solutions found. You might want to distribute your initial guesses uniformly in the interval of interest. This is called multi-start method.

like image 88
Ali Avatar answered Nov 08 '22 11:11

Ali