I have some equations that depend on a number of variables. I would like to solve the equations in python. Here is one of the simpler equations:
f(x,y,theta,w) = x - y + theta * (w - y)
How can I solve/find the roots of this equation for a particular variable, given values for the rest of the arguments. Sometimes I want to solve for x
, sometimes I want to solve for theta
.
Is there an elegant way of solving this without having to rewrite the function for each dependant variable?
Take a look at the python library Sympy. Here's a sample Jupyter notebook session.
In [71]: from sympy import *
In [72]: w, x, y, theta = symbols('w x y theta') # define symbols
In [75]: func = x - y + theta * (w - y) # define function
In [76]: solve(func, x) # algebraic solution for x
Out[76]: [-theta*w + theta*y + y]
In [77]: solve(func, theta) # algebraic solution for theta
Out[77]: [(-x + y)/(w - y)]
In [81]: func2 = func.subs([(w,2.0), (y,0.5), (theta,3.14)])
In [82]: func2 # substitute for some variables
Out[82]: x + 4.21
In [83]: a = np.arange(5)
f = lambdify(x, func2, "numpy") # convert to a func to use with numpy
f(a)
Out[83]: array([ 4.21, 5.21, 6.21, 7.21, 8.21]) # apply to numpy array
In [84]: func2.evalf(subs={x:33}) # evaluate
Out[84]: 37.2100000000000
Not sure about scipy, but you might want to have a look at Sage:
x,y,w,theta = var('x','y','w','theta')
f = x - y + theta * (w - y)
solve(f,x)
[x == -theta*w + (theta + 1)*y]
solve(f,theta)
︡theta == -(x - y)/(w - y)]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With