Stan Schymanski wrote:
> Hi Jason,
>
> Thanks a lot for that! This brings me back to the original problem. I
> expected plot and find_root to replace the variable with a float and
> call the function, but it does not seem to do that. For example, it
> would be nice if the following worked:
>
> var('a b c d x dummy')
> F = fast_float(a*x^3 + b*x^2 + c*x + d, 'a', 'b', 'c', 'd', 'x')
> ff = lambda a,b,c,d,x: F(a,b,c,d,x)
> plot(ff(a=1,b=2,c=3,d=4,x=dummy),(dummy,0,6))
>
>
> Traceback (click to the left for traceback)
> ...
> TypeError: a float is required
>
> This works:
> [ff(a=1,b=2,c=3,d=4,x=dummy) for dummy in srange(6)]
>
> [4.0, 10.0, 26.0, 58.0, 112.0, 194.0]
>
> Why don't plot and find_root just replace 'dummy' with a float and run
> ff just like in the list?
>
Unfortunately, I don't that will ever work, as Python does not do
automatic currying (did I use the right term?). The list comprehension
in python is a special case, where the function is not evaluated until
you have a value for x. However, in the case of plot, the function ff
is evaluated first, and since x is missing, there is an error.
However, in your case, it would probably make a lot more sense to do this:
f = a*x^3+b*x^2+c*x+d
plot(f.subs(a=1,b=2,c=3,d=4), (x, 0, 6))
This uses the fact that f is a symbolic expression, then the subs
command substitutes in variables and returns another expression.
fast_float is called by plot automatically.
If find_root doesn't automatically use fast_float (it should!), then you
could do something like:
f = a*x^3+b*x^2+c*x+d
find_root(fast_float(f.subs(a=1,b=2,c=3,d=4), 'x'), (x, 0, 6))
(or whatever the syntax is).
Again, this only works for Sage symbolic expressions...
Sorry I didn't think of this earlier. For general python functions, you
could use the partial trick we talked about.
It might make sense to have some sort of partial evaluation available
for fast_float functions, so if a few arguments were given, it behaved
like the partial trick above.
Thanks,
Jason
--~--~---------~--~----~------------~-------~--~----~
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/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---