/usr/share/axiom-20170501/src/algebra/IRRF2F.spad is in axiom-source 20170501-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | )abbrev package IRRF2F IntegrationResultRFToFunction
++ Author: Manuel Bronstein
++ Date Created: 21 August 1988
++ Date Last Updated: 4 October 1993
++ Description:
++ Conversion of integration results to top-level expressions.
++ This package allows a sum of logs over the roots of a polynomial
++ to be expressed as explicit logarithms and arc tangents, provided
++ that the indexing polynomial can be factored into quadratics.
IntegrationResultRFToFunction(R) : SIG == CODE where
R: Join(GcdDomain, RetractableTo Integer, OrderedSet,
LinearlyExplicitRingOver Integer)
RF ==> Fraction Polynomial R
F ==> Expression R
IR ==> IntegrationResult RF
SIG ==> with
split : IR -> IR
++ split(u(x) + sum_{P(a)=0} Q(a,x)) returns
++ \spad{u(x) + sum_{P1(a)=0} Q(a,x) + ... + sum_{Pn(a)=0} Q(a,x)}
++ where P1,...,Pn are the factors of P.
expand : IR -> List F
++ expand(i) returns the list of possible real functions
++ corresponding to i.
complexExpand : IR -> F
++ complexExpand(i) returns the expanded complex function
++ corresponding to i.
if R has CharacteristicZero then
integrate : (RF, Symbol) -> Union(F, List F)
++ integrate(f, x) returns the integral of \spad{f(x)dx}
++ where x is viewed as a real variable..
complexIntegrate : (RF, Symbol) -> F
++ complexIntegrate(f, x) returns the integral of \spad{f(x)dx}
++ where x is viewed as a complex variable.
CODE ==> add
import IntegrationTools(R, F)
import TrigonometricManipulations(R, F)
import IntegrationResultToFunction(R, F)
toEF: IR -> IntegrationResult F
toEF i == map(z1+->z1::F, i)$IntegrationResultFunctions2(RF, F)
expand i == expand toEF i
complexExpand i == complexExpand toEF i
split i ==
map(retract, split toEF i)$IntegrationResultFunctions2(F, RF)
if R has CharacteristicZero then
import RationalFunctionIntegration(R)
complexIntegrate(f, x) == complexExpand internalIntegrate(f, x)
-- do not use real integration if R is complex
if R has imaginary: () -> R then
integrate(f, x) == complexIntegrate(f, x)
else
integrate(f, x) ==
l := [mkPrim(real g, x) for g in expand internalIntegrate(f, x)]
empty? rest l => first l
l
|