OBJECTIVE: get variables in returned equation to synch with local
variables.
EXAMPLE OF PROBLEM
Let's say I want to find where a parabola intersects with a line.
I create variables and a parabola equation
>>> var('x y')
(x, y)
>>> p=2*x**2-3*x+4
I create a line that I know passes through two points on that parabola
using geometry:
>>> l=Line(Point(-2, p.subs(x, -2)), Point(2, p.subs(x, 2)))
I get the equation of the line in terms of x and y:
>>> line = l.equation(); line
-48 + 4*y + 12*x
The problem is, though "in" thinks x (and y are in the equation)...
>>> x in line
True
the local variables that I created above are not actually in there:
>>> x in line.atoms(), y in line.atoms()
(False, False)
So I can't solve that line for y and use the x-dependent part along
with the parabola I defined to find the intersection, e.g.
>>> solve(line, y)
[]
So I want a way to, by name, connect the variables in line to my local
variables. I use this (which works) but I am looking for a way to pass
something from which the variables in the local context can be found.
def remap(eq, *locals):
d = dict((s.name, s) for s in eq.atoms(Symbol))
l = dict((s.name, s) for s in locals)
for n,s in d.items():
eq=eq.subs(d[n], l[n])
return eq
>>> line = remap(line, x, y)
>>> x in line.atoms()
True
>>> solve(line, y)
[12 - 3*x]
>>> print solve(Eq(p, solve(line, y)[0]), x)
[2, -2]
Does anyone have suggestions on how to better accomplish that
remapping? Perhaps the equation() should take two variables rather
than two strings. Right now it essentiall creates x as
Symbol(given_string_for_x, real=True). The problem is that the local
symbol may not have the same assumptions and then the two variables
are not the same. remap() would make them the same:
>>> Symbol('x') in (2+Symbol('x', real=1)).atoms()
False
>>> Symbol('x') in remap((2+Symbol('x', real=1)), Symbol('x')).atoms()
True
/c
--
You received this message because you are subscribed to the Google Groups
"sympy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sympy?hl=en.