> def f(y,t): return (1+(bessel_J(0, gro)/bessel_J(2, gro)))*(r/
> kro)*(bessel_J(1, r)/bessel_J(1,gro))*z.cos()-(bessel_J(0,r)/
> bessel_J(2, gro))*(r**2/kro**2) if t != 0 else infinity

A few things:

(1) Your arguments to this function are y and t, but inside you use r
and z.  r and z are still the symbolic values.  That's why the error
message says "Cannot evaluate symbolic expression to a numeric value",
and that's usually the problem: some variable isn't being assigned a
number.

(2) Since z is going to be a float, not a Sage real, "z.cos()" isn't
going to work as .cos() isn't a float method.  (Sorry about this; in a
sense it's an implementation detail there's no way to guess.  Python
floats are low-level "dumb" numbers which only have a few methods
living inside them.)

(3) The "if condition else infinity" trick was a workaround for a
singularity that wasn't being handled too well.  If there isn't one,
there's no need to worry about it.

So I'd simply replace your f function with something like

def f(r,z):
    term1 = (1+(bessel_J(0, gro)/bessel_J(2,
gro)))*(r/kro)*(bessel_J(1, r)/bessel_J(1,gro))*cos(z)
    term2 = -(bessel_J(0,r)/bessel_J(2, gro))*(r**2/kro**2)
    return term1 + term2

[possible typos, I didn't check too carefully, but you get the idea]


Doug

-- 
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org

Reply via email to