Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

I re-ran your code, replacing ϕ withphi. After :

f = function('f')(x,y,z) == phi_t.expand();

we have :

sage: f
f(x, y, z) == k*q/(a^2 + x^2 + y^2 + 2*a*z + z^2) + k*q/(a^2 + x^2 + y^2 - 2*a*z + z^2) - 2*k*q/(x^2 + y^2 + z^2)

meaning that f is a Python variable whose value is an equality. Probably not what you wanted.

I am guessing that your intent was :

sage: reset("f")
sage: f(x,y,z) = phi_t.expand(); f
(x, y, z) |--> k*q/(a^2 + x^2 + y^2 + 2*a*z + z^2) + k*q/(a^2 + x^2 + y^2 - 2*a*z + z^2) - 2*k*q/(x^2 + y^2 + z^2)

f is now (a Python variable whose value is) a symbolic function (a. k. a. a callable symbolic expression).

sage: f(x, y, z).subs(z^2+x^2+y^2+w0==r^2+w0)
k*q/(a^2 + r^2 + 2*a*z) + k*q/(a^2 + r^2 - 2*a*z) - 2*k*q/(x^2 + y^2 + z^2)

which seems to be closer to what you seem to want.

But writing yourself your conversion functions may be unnecessary : you may be interested by this tutorial, then by this one, using this (large) Sage module.

HTH,