-
-
Notifications
You must be signed in to change notification settings - Fork 678
Symbolics functions
Kwankyu Lee edited this page Feb 12, 2023
·
1 revision
Sage is missing symbolic definitions for many special functions that we are capable of evaluating numerically. Some of these are even provided in symbolic form by Maxima.
- Implementing a symbolic function involves subclassing
sage.symbolic.function.BuiltinFunctionand defining most or all of the following:- Custom evaluation (
_eval_) - Numeric evaluation (
_evalf_) - Differentiation (
_derivative_) - Conjugate (
_conjugate_) - Imaginary and real part methods (
_{imag,real}_part_)
- Custom evaluation (
- Returning None in
_eval_leaves the function symbolic with the given input. - See sage.functions.other.Function_gamma_inc or sage.functions.trig.Function_cot for examples.
- regarding the maxima(_lib) interfaces see also [#16671 comment:6](https://github.com/sagemath/sage/issues/16671#comment:6)
- ticket #17130 added code that makes
_eval_and_evalf_much simpler, see #12455 or #17151 for example
- #6466 Implement functional derivative and Euler-Lagrange equation
- #8383 make symbolic versions of moebius, sigma and euler_phi
- #9874 derivative of ceil and floor
- #9935 Make a symbolic mod function
- #10050 wrap the polylogarithm functions from pynac
- #10071 make a few held functions able to evaluate
- #10636 Make Bessel zeros available as symbolic entities
- #12074 real nth root function
- #12179 Binomial of integer (mod n) returns integer
- #13050 allow different algorithms for evaluating erf
- #13869 Gamma of complex numbers incorrectly simplifies to factorial
- #14897 binomial(x, m) gives incorrect answer when m is float
- #15344 asin(2.0) should not return NaN
- #15354 Make elliptic_j function symbolic
- #15497 Make lcm() symbolic
- #16202 agm(x,y)
- #16670 make all orthogonal polynomials symbolic
- #16816 symbolic sums of roots
- #17722 lower incomplete gamma as gamma(a,0,x)
- #17970 implement Meijer G function
- #18141 special values of transcendental functions
- #18956 incomplete gamma identities
- #19032 qgamma function
- #19461 Pochhammer symbols
- #20615 derivative of Bessel with respect to order
- #21215 Periodic piecewise functions
- #21274 frac(x) immediate simplifications
- #21560 return Infinity from factorial of negative integer
- #21639 Implement derivative of gegenbauer(n,a,x) wrt to a
- #21655 Return (d/dn)f with f(n,x).diff(n) instead of runtime error
- #21945 Symbolic min/max
- #22028 Symbolic catalan number
- #22146 Symbolic eta function
- #22399 piecewise and hypergeometric functions fail their TestSuite: _test_category, _test_pickling
- #22569 Symbolic fibonacci
- #22651 symbolic AppellF1
- #22713 multiple zeta
- #22873 No evaluation with gamma of ball arguments
- #24171 Formal set membership function
- #24176 Implement formal Set comprehension
- #24365 Nonnumeric integer expressions not handled by floor/ceil
- #24554 Refactoring in Chebyshev functions
- #24603 chebyshev_T/U fail with float/complex argument
- #24604 No evaluation with some functions
- #24861 Formal diff (Option to hold for derivative)
- #12449 - symbolic functions on basic types improvements
- #14270 - remove deprecated function-call syntax
-
#14608 - Symbolic functions break the
__hash__contract - #15021 - Return unevaluated derivative from BuiltinFunction
- #15025 - automatically injected function does not work with desolve
-
#15200 -
_evalf_handling of backends - #17547 - BuiltinFunction overriding GiNaC function is allowed
- #17701 - SR(f) or diff(f,t) should work even with NewSymbolicFunction
- #18259 - comparison of symbolic functions
- #20812 - derivative of integer wrt to variable in polynomial ring should belong to that ring, not symbolic ring
- #24398 - Document function initialization parameters
- #24832 - Extend function domain with some symbolic function calls
- #24212 Fresnel integrals
- #24411 Move gamma functions into their own file
- #17790 BuiltinFunction doesn't pass non-SR-coercible arguments to function code
- #22024 symbolic placeholder for complex root
- #22079 Infinite loop in ceil() function
- #23224 wrong symbolic comparison of log
- #18386 polylog quirks
- #20191 implement ExprCondPair equivalent
- #19906 dilog(RR) should return an element of RR
- #11349 Implement Inverse Erf function
- #17505 symbolic product
- #21819 Rewrite error functions and documentation
- #22209 Differentiation of conj/imag/real/abs functions
- #22844 symbolic limit
- #10070 make heaviside and step play nicely together.
- #19439 Different infinities returned by zeta/polylog
- #21657 Import abs in functions/all.py
- #20939 Remove pexpect-Maxima usage in Y(m,n)
- #21906 Bug in bessel_K
- #22004 Allow algorithm='sympy' in symbolic_sum function
- #16813 Legendre functions/polynomials
- #21365 cot(float) returns complex
- #21614 Make atan2(0,0) return NaN
- #21645 Full symbolic sum function
- #16671 implement harmonic number function H_n
- #17678 special values of Bessel functions
- #20139 implement trigonometric symmetry simplifications
- #18832 - non-numeric non-symbolic BuiltinFunction arguments?
- #16587 - f(expr).n() fails for all generalized functions
- #12521 evaluate log gamma for complex input
- #14896 Symbolic hypergeometric confluent
- #15024 More Hankel functions available
- #16697 implement symbolic lower incomplete gamma function
- #15046 Symbolic elliptic integrals
- #17770 Euler numbers revamp
- #19464 floor/ceil don't accept hold
- #20297 ECL crash with Hermite polynomials
- #20428 crash with ultraspherical polynomials
- #20098 Re/Im(tanh) wrong formula
- #16221 add Struve functions
- #19834 implement symbolic Stieltjes constants
- #19836 expansion of zeta using stieltjes-constants
- #19425 - Order function in symbolic ring: error calling operator
- #17447 Clarify and complete documentation of function()
- #19336 bug in lambert_w.print_latex()
- #12588 abs(pi*I) should return pi
- #18954 special values of trig. functions with arguments (m/n)*pi
- #17151 symbolic Laguerre / associated Laguerre polynomials
- #17953 symbolic function args prevent forced conversion of result to numeric
-
#18091 symbolic floor,ceil,factorial need
_evalf_too - #10074 Improve less-used hyperbolic functions
- #12455 Make Airy functions symbolic
- #15017 Symbolic spherical harmonic
- #2516 hypergeometric function
- #12596 improve incomplete elliptic integrals docs
- #9130 Access to beta function
- #3401 extend li to work with complex arguments
- #7357 add non offset logarithm
- #8983 erf(0) should return 0
- #4498 symbolic arg function
- #11143 exponential integral
- #10075 Make log gamma symbolic
-
#11155 abs(pi+I) = pi+I (new
_eval_method forabs()) - #11423 Make atan2(0,0) consistent
- #14996 Lots more elliptic functions
- #1173 implement numerical evaluation of erf at complex arguments
- #3426 bessel_K function is broken
- #4102 make bessel_J symbolic
- #4230 implement arbitrary precision Bessel Y
- #9424 make symbolic summation numerically evaluable
- #20312 - parent of argument lost with GinacFunctions
- implement
parabolic_cylinder_d - add maxima conversion for
elliptic_kc(#15046) - Associated Legendre functions
Notes from Benjamin Jones (#11143) (http://maxima.sourceforge.net/docs/manual/en/maxima_16.html#SEC56)
hankel_1 (v,z) Hankel function of the 1st kind
hankel_2 (v,z) Hankel function of the 2nd kind
struve_h (v,z) Struve H function
struve_l (v,z) Struve L function
- Notes: None of these functions are currently exposed at the top level in Sage. Evaluation is possible using mpmath. #15024 adds Hankel. #16221 is for Struve.
assoc_legendre_p[v,u] (z) Associated Legendre function of degree v and order u
assoc_legendre_q[v,u] (z) Associated Legendre function, 2nd kind
- These are not Maxima's
legendre_p(n,x)andlegendre_q(n,x)functions, which correspond tolegendre_P(n,x)andlegendre_Q(n,x)in Sage.
%f[p,q] ([], [], expr) Generalized Hypergeometric function
hypergeometric(l1, l2, z) Hypergeometric function
slommel
%m[u,k] (z) Whittaker function, 1st kind
%w[u,k] (z) Whittaker function, 2nd kind
- Notes:
hypergeometric(l1, l2, z)needs a conversion to Sage'shypergeometric_U(see #2516). The others can be evaluated using mpmath.slommelis presumably mpmath'slommels1()orlommels2()(or both?). This isn't well documented in Maxima.
expintegral_e (v,z) Exponential integral E
expintegral_e1 (z) Exponential integral E1
expintegral_ei (z) Exponential integral Ei
expintegral_li (z) Logarithmic integral Li
expintegral_si (z) Exponential integral Si
expintegral_ci (z) Exponential integral Ci
expintegral_shi (z) Exponential integral Shi
expintegral_chi (z) Exponential integral Chi
erfc (z) Complement of the erf function
- Notes: This was done in #11143!
kelliptic (z) Complete elliptic integral of the first
kind (K)
parabolic_cylinder_d (v,z) Parabolic cylinder D function
- Notes:
kelliptic(z)needs a conversion toelliptic_kcin Sage (done in #15046) andparabolic_cylinder_d (v,z)does not seem to be exposed at top level. It can be evaluated by mpmath.
inverse_jacobi_cd
inverse_jacobi_cn
inverse_jacobi_cs
inverse_jacobi_dc
inverse_jacobi_dn
inverse_jacobi_ds
inverse_jacobi_nc
inverse_jacobi_nd
inverse_jacobi_ns
inverse_jacobi_sc
inverse_jacobi_sd
inverse_jacobi_sn
jacobi_cd
jacobi_cn
jacobi_cs
jacobi_dc
jacobi_dn
jacobi_ds
jacobi_nc
jacobi_nd
jacobi_ns
jacobi_sc
jacobi_sd
jacobi_sn
- It turns out there are a slew of elliptic functions that we only have thinly wrapped and could make better - see this Maxima page. Basically, all of these are in Sage, but could be made more native. This was done in #14996.
dgauss_a
dgauss_b
dkummer_m
dkummer_u
gauss_a
gauss_b
kummer_m
kummer_u
- These are some specific functions defined in Maxima's
contrib_odepackage, some of which we may have. Some hypergeometric function returned by certain ODE solvers in Maxima and which mpmath can evaluate are out there too (maybe same ones?). See #2516, for instance.