Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

how to solve this equation for several variables (with sympy?)

Hi, I found some similar questions but i can´t solve my problem with these answers. I use sagemath since 2 days and want to investigate a equation in dependence for all variables for that i try to solve it for any variables:

var('r h s phi theta d')

s_v=vector([s*cos(theta),-s*sin(theta)])
h_v=vector([h*sin(phi),-h*cos(phi)])
r_v=vector([r*cos(phi),r*sin(phi)])

f_v=r_v+h_v-s_v

def f(r,h,s,phi,theta): return norm(f_v(r=r,h=h,s=s,phi=phi,theta=theta))


eq1(r,h,s,phi,theta)=f(r,h,s,phi,theta)-f(r,h,s,0,theta)

solve([eq1(r,h,s,phi,theta)==4],r)

so i want to solve this equation for r (and later for all other variables) but the solution is shitty like this:

[sqrt(abs(s*cos(theta) - r)^2 + abs(s*sin(theta) - h)^2) ==
sqrt(abs(-h*cos(phi) - r*sin(phi) + s*sin(theta))^2 + abs(-r*cos(phi) +
s*cos(theta) + h*sin(phi))^2) - 4]

so no r=...

as far as i understood does the solve command has problem with sqrt() so i found the sympy command in this forum and tried to use like this(for me its not possible to take the equation befor the sympy announcement so i wrote an other example by hand:

var('r h s phi theta d')

s_v=vector([s*cos(theta),-s*sin(theta)])
h_v=vector([h*sin(phi),-h*cos(phi)])
r_v=vector([r*cos(phi),r*sin(phi)])

f_v=r_v+h_v-s_v

def f(r,h,s,phi,theta): return norm(f_v(r=r,h=h,s=s,phi=phi,theta=theta))

eq1(r,h,s,phi,theta)=f(r,h,s,-phi,theta)-f(r,h,s,0,theta)


from sympy import *            
r,h,s,phi,theta,d=symbols('r h s phi theta d') 

eq1= sqrt(r^2+h^2+s^2+2*s*cos(theta)*(-r*cos(phi)-h*sin(phi))+2*s*sin(theta)*(r*sin(phi)-h*cos(phi))) 

from sympy.solvers import solve
solve(eq1, h)

But now i can´t variate the variables.

That is a very long question, it would be very nice if some of you make the afford and have a look at this. Thank you very much for this

how to solve this equation for several variables (with sympy?)

Hi, I found some similar questions but i can´t solve my problem with these answers. I use sagemath since 2 days and want to investigate a equation in dependence for all variables for that i try to solve it for any variables:

var('r h s phi theta d')

s_v=vector([s*cos(theta),-s*sin(theta)])
h_v=vector([h*sin(phi),-h*cos(phi)])
r_v=vector([r*cos(phi),r*sin(phi)])

f_v=r_v+h_v-s_v

def f(r,h,s,phi,theta): return norm(f_v(r=r,h=h,s=s,phi=phi,theta=theta))


eq1(r,h,s,phi,theta)=f(r,h,s,phi,theta)-f(r,h,s,0,theta)

solve([eq1(r,h,s,phi,theta)==4],r)

so i want to solve this equation for r (and later for all other variables) but the solution is shitty like this:

[sqrt(abs(s*cos(theta) - r)^2 + abs(s*sin(theta) - h)^2) ==
sqrt(abs(-h*cos(phi) - r*sin(phi) + s*sin(theta))^2 + abs(-r*cos(phi) +
s*cos(theta) + h*sin(phi))^2) - 4]

so no r=...

as far as i understood does the solve command has problem with sqrt() so i found the sympy command in this forum and tried to use like this(for me its not possible to take the equation befor the sympy announcement so i wrote an other example by hand:

var('r h s phi theta d')

s_v=vector([s*cos(theta),-s*sin(theta)])
h_v=vector([h*sin(phi),-h*cos(phi)])
r_v=vector([r*cos(phi),r*sin(phi)])

f_v=r_v+h_v-s_v

def f(r,h,s,phi,theta): return norm(f_v(r=r,h=h,s=s,phi=phi,theta=theta))

eq1(r,h,s,phi,theta)=f(r,h,s,-phi,theta)-f(r,h,s,0,theta)


from sympy import *            
r,h,s,phi,theta,d=symbols('r h s phi theta d') 

eq1= sqrt(r^2+h^2+s^2+2*s*cos(theta)*(-r*cos(phi)-h*sin(phi))+2*s*sin(theta)*(r*sin(phi)-h*cos(phi))) 

from sympy.solvers import solve
solve(eq1, h)

But now i can´t variate the variables.

That is a very long question, it would be very nice if some of you make the afford and have a look at this. Thank you very much for this

very nice, thank you! how can i convert an sage expression to an sympy expression? i`d like to create the equation in sage and than solve it with sympy or is there a better way?

var('r h s phi theta d')

s_v=vector([s*cos(theta),-s*sin(theta)])
h_v=vector([h*sin(phi),-h*cos(phi)])
r_v=vector([r*cos(phi),r*sin(phi)])

f_v=r_v+h_v-s_v

def f(r,h,s,phi,theta): return norm(f_v(r=r,h=h,s=s,phi=phi,theta=theta))

from sympy import *   

r,h,s,phi,theta,d=symbols('r h s phi theta d') 
eq = f           
from sympy.solvers import solve
sol=solve(eq, h)
sol1=sol[0]._sage_()
sol1(s=1)