Sage has several special functions:
and orthogonal polynomials
In Sage these are restricted to numerical evaluation and plotting but via maxima, some symbolic manipulationis allowed:
sage: maxima.eval("f:bessel_y (v, w)")
'?%bessel_y(v,w)'
sage: maxima.eval("diff(f,w)")
'(?%bessel_y(v-1,w)-?%bessel_y(v+1,w))/2'
sage: maxima.eval("diff (jacobi_sn (u, m), u)")
'?%jacobi_cn(u,m)*?%jacobi_dn(u,m)'
sage: jsn = lambda x: jacobi("sn",x,1)
sage: P = plot(jsn,0,1, plot_points=20); Q = plot(lambda x:bessel_Y( 1, x), 1/2,1)
sage: show(P)
sage: show(Q)
In addition to maxima,
pari and octave also have special functions
(in fact, some of pari's special functions are wrapped in Sage).
Here's an example using Sage's interface (located in sage/interfaces/octave.py)
with octave (http://www.octave.org/doc/index.html).
sage: octave("atanh(1.1)") ## requires optional octave
(1.52226,-1.5708)
Here's an example using Sage's interface to pari's
special functions.
sage: pari('2+I').besselk(3)
0.04559077184075505871203211094 + 0.02891929465820812820828883526*I # 32-bit
0.045590771840755058712032110938791854704 + 0.028919294658208128208288835257608789842*I # 64-bit
sage: pari('2').besselk(3) # random
0.061510458471742038
The last command can also be executed using the Sage command
sage: bessel_K(3,2) 0.647385390948634 sage: bessel_K(3,2,prec=100) 0.64738539094863415315923557097
See About this document... for information on suggesting changes.