Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Solving multiple argument equations, choosing the dependent variable. [Python, Scipy]

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?

like image 218
user668074 Avatar asked Feb 10 '16 05:02

user668074


2 Answers

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
like image 171
RootTwo Avatar answered Sep 22 '22 00:09

RootTwo


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)]
like image 27
maxymoo Avatar answered Sep 23 '22 00:09

maxymoo