Hello,
I solve cubic equation and try to plot imaginary part of its solutions (to find out, at which intervals roots are purely real).
The code is something like this
var('a, b, P, E')
P_sols = solve(a*P + b*P**3 - E, P)
P1 = lambda E_: P_sols[0].rhs().subs({a:-5, b:5, E:E_}).n().imag()
plot(P1, [-10, 10])
Plot function (actually, generate_plot_command) fails to evaluate at points, where image part is nearly zero (range approximately between -2 and 2).
verbose 0 (4190: plot.py, generate_plot_points) WARNING: When plotting,
failed to evaluate function at 39 points.
verbose 0 (4190: plot.py, generate_plot_points) Last error message:
'negative number cannot be raised to a fractional power'
But if I try to evaluate this function directly
P1(0) # OK
P1(float(0)) # OK
it works OK.
I've found on ask-sage (here), that to create callables it is better to use fast_callable, but I still wonder, why I can call function directly, but plot() function cannot. I've looked into code of generate_plot_points and find there only call line (x, f(x)), so I cannot understand, why it do not work.
I've already solved my practical issue with fast_callable(), but I'm still curious about this behavior.
Thanks.