|
spad -- Copyright (C) 2006 Martin Rubey <Martin.Rubey@univie.ac.at>
- -- This program is free software; you can redistribute it and/or
-- modify it under the terms of the GNU General Public License as
-- published by the Free Software Foundation; either version 2 of
-- the License, or (at your option) any later version.
--
-- This program is distributed in the hope that it will be
-- useful, but WITHOUT ANY WARRANTY; without even the implied
-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-- PURPOSE. See the GNU General Public License for more details.
)abbrev domain SUPEXPR SparseUnivariatePolynomialExpressions
SparseUnivariatePolynomialExpressions(R: Ring): Exports == Implementation where
Exports == UnivariatePolynomialCategory R with
if R has TranscendentalFunctionCategory
then TranscendentalFunctionCategory
Implementation == SparseUnivariatePolynomial R add
if R has TranscendentalFunctionCategory then
exp(p: %): % ==
ground? p => coerce exp ground p
output(hconcat("exp p for p= ", p::OutputForm))$OutputPackage
error "SUPTRAFUN: exp only defined for elements of the coefficient ring"
sin(p: %): % ==
ground? p => coerce sin ground p
output(hconcat("sin p for p= ", p::OutputForm))$OutputPackage
error "SUPTRAFUN: sin only defined for elements of the coefficient ring"
asin(p: %): % ==
ground? p => coerce asin ground p
output(hconcat("asin p for p= ", p::OutputForm))$OutputPackage
error "SUPTRAFUN: asin only defined for elements of the coefficient ring"
cos(p: %): % ==
ground? p => coerce cos ground p
output(hconcat("cos p for p= ", p::OutputForm))$OutputPackage
error "SUPTRAFUN: cos only defined for elements of the coefficient ring"
acos(p: %): % ==
ground? p => coerce acos ground p
output(hconcat("acos p for p= ", p::OutputForm))$OutputPackage
error "SUPTRAFUN: acos only defined for elements of the coefficient ring"
)abbrev package UTSSOL TaylorSolve
TaylorSolve(F, UTSF, UTSSUPF): Exports == Implementation where
F: Field
SUP ==> SparseUnivariatePolynomialExpressions
UTSF: UnivariateTaylorSeriesCategory F
UTSSUPF: UnivariateTaylorSeriesCategory SUP F
NNI ==> NonNegativeInteger
Exports == with
seriesSolve: (UTSSUPF -> UTSSUPF, List F) -> UTSF
Implementation == add
seriesSolve(f, l) ==
c1 := map(#1::(SUP F), l)$ListFunctions2(F, SUP F)::(Stream SUP F)
coeffs: Stream SUP F := concat(c1, generate(monomial(1$F,1$NNI)))
-- coeffs: Stream SUP F := concat(c1, monomial(1$F,1$NNI))
st: List Stream SUP F := [coeffs, coeffs]
next: () -> F :=
nr := st.1
res: F
if ground?(coeff: SUP F := nr.1)$(SUP F)
then
res := ground coeff
st.1 := rest nr
else
ns := st.2
eqs: Stream SUP F := coefficients f series ns
while zero? first eqs repeat eqs := rest eqs
eq: SUP F := first eqs
if degree eq > 1 then
if monomial? eq then res := 0
else
output(hconcat("The equation is: ", eq::OutputForm))
$OutputPackage
error "seriesSolve: equation for coefficient not linear"
else res := (-coefficient(eq, 0$NNI)$(SUP F)
/coefficient(eq, 1$NNI)$(SUP F))
nr.1 := res::SUP F
-- concat!(st.2, monomial(1$F,1$NNI))
st.1 := rest nr
res
series generate next
)abbrev package EXPRSOL ExpressionSolve
ExpressionSolve(R, F, UTSF, UTSSUPF): Exports == Implementation where
R: Join(OrderedSet, IntegralDomain, ConvertibleTo InputForm)
F: FunctionSpace R
UTSF: UnivariateTaylorSeriesCategory F
SUP ==> SparseUnivariatePolynomialExpressions
UTSSUPF: UnivariateTaylorSeriesCategory SUP F
OP ==> BasicOperator
SY ==> Symbol
NNI ==> NonNegativeInteger
MKF ==> MakeBinaryCompiledFunction(F, UTSSUPF, UTSSUPF, UTSSUPF)
Exports == with
seriesSolve: (F, OP, SY, List F) -> UTSF
Implementation == add
opelt := operator("elt"::Symbol)$OP
opdiff := operator("D"::Symbol)$OP
opcoerce := operator("coerce"::Symbol)$OP
replaceDiffs: (F, OP, Symbol) -> F
replaceDiffs (expr, op, sy) ==
lk := kernels expr
for k in lk repeat
if freeOf?(coerce k, sy) then
expr := subst(expr, [k], [opcoerce [coerce k]])
if is?(k, op) then
arg := first argument k
if arg = sy::F
then expr := subst(expr, [k], [(name op)::F])
else expr := subst(expr, [k], [opelt [(name op)::F,
replaceDiffs(arg, op,
sy)]])
-- => "iterate"
if is?(k, %diff) then
args := argument k
differentiand := replaceDiffs(subst(args.1, args.2 = args.3), op, sy)
expr := subst(expr, [k], [opdiff differentiand])
-- => "iterate"
expr
seriesSolve(expr, op, sy, l) ==
ex := replaceDiffs(expr, op, sy)
f := compiledFunction(ex, name op, sy)$MKF
seriesSolve(f(#1, monomial(1,1)$UTSSUPF), l)$TaylorSolve(F, UTSF, UTSSUPF)
spad Compiling FriCAS source code from file
/var/zope2/var/LatexWiki/2554171598177853288-25px001.spad using
old system compiler.
SUPEXPR abbreviates domain SparseUnivariatePolynomialExpressions
------------------------------------------------------------------------
initializing NRLIB SUPEXPR for SparseUnivariatePolynomialExpressions
compiling into NRLIB SUPEXPR
****** Domain: R already in scope
augmenting R: (TranscendentalFunctionCategory)
compiling exported exp : $ -> $
Time: 0.30 SEC.
compiling exported sin : $ -> $
Time: 0 SEC.
compiling exported asin : $ -> $
Time: 0 SEC.
compiling exported cos : $ -> $
Time: 0.02 SEC.
compiling exported acos : $ -> $
Time: 0.01 SEC.
****** Domain: $ already in scope
augmenting $: (CharacteristicNonZero)
****** Domain: R already in scope
augmenting R: (PolynomialFactorizationExplicit)
****** Domain: R already in scope
augmenting R: (ConvertibleTo (InputForm))
augmenting (SingletonAsOrderedSet): (ConvertibleTo (InputForm))
****** Domain: R already in scope
augmenting R: (ConvertibleTo (Pattern (Float)))
augmenting (SingletonAsOrderedSet): (ConvertibleTo (Pattern (Float)))
****** Domain: R already in scope
augmenting R: (ConvertibleTo (Pattern (Integer)))
augmenting (SingletonAsOrderedSet): (ConvertibleTo (Pattern (Integer)))
****** Domain: R already in scope
augmenting R: (PatternMatchable (Float))
augmenting (SingletonAsOrderedSet): (PatternMatchable (Float))
****** Domain: R already in scope
augmenting R: (PatternMatchable (Integer))
augmenting (SingletonAsOrderedSet): (PatternMatchable (Integer))
****** Domain: R already in scope
augmenting R: (Algebra (Fraction (Integer)))
****** Domain: R already in scope
augmenting R: (CommutativeRing)
****** Domain: R already in scope
augmenting R: (Comparable)
****** Domain: R already in scope
augmenting R: (Field)
****** Domain: R already in scope
augmenting R: (GcdDomain)
****** Domain: R already in scope
augmenting R: (IntegralDomain)
****** Domain: R already in scope
augmenting R: (LinearlyExplicitRingOver (Integer))
****** Domain: R already in scope
augmenting R: (PartialDifferentialRing (Symbol))
****** Domain: R already in scope
augmenting R: (PolynomialFactorizationExplicit)
****** Domain: R already in scope
augmenting R: (RetractableTo (Fraction (Integer)))
****** Domain: R already in scope
augmenting R: (RetractableTo (Integer))
****** Domain: R already in scope
augmenting R: (StepThrough)
****** Domain: R already in scope
augmenting R: (TranscendentalFunctionCategory)
(time taken in buildFunctor: 580)
;;; *** |SparseUnivariatePolynomialExpressions| REDEFINED
;;; *** |SparseUnivariatePolynomialExpressions| REDEFINED
Time: 0.77 SEC.
Cumulative Statistics for Constructor SparseUnivariatePolynomialExpressions
Time: 1.10 seconds
--------------non extending category----------------------
.. SparseUnivariatePolynomialExpressions(#1) of cat
(|Join| (|UnivariatePolynomialCategory| |#1|)
(CATEGORY |package|
(IF (|has| |#1| (|TranscendentalFunctionCategory|))
(ATTRIBUTE (|TranscendentalFunctionCategory|))
|noBranch|))) has no outputForm : (%,OutputForm) -> OutputForm
finalizing NRLIB SUPEXPR
Processing SparseUnivariatePolynomialExpressions for Browser database:
--->/usr/local/lib/fricas/target/x86_64-unknown-linux/../../src/algebra/SUPEXPR.spad-->SparseUnivariatePolynomialExpressions(): Missing Description
; compiling file "/var/zope2/var/LatexWiki/SUPEXPR.NRLIB/SUPEXPR.lsp" (written 07 AUG 2010 10:40:36 AM):
; compiling (/VERSIONCHECK 2)
; compiling (DEFUN |SUPEXPR;exp;2$;1| ...)
; compiling (DEFUN |SUPEXPR;sin;2$;2| ...)
; compiling (DEFUN |SUPEXPR;asin;2$;3| ...)
; compiling (DEFUN |SUPEXPR;cos;2$;4| ...)
; compiling (DEFUN |SUPEXPR;acos;2$;5| ...)
; compiling (DEFUN |SparseUnivariatePolynomialExpressions| ...)
; compiling (DEFUN |SparseUnivariatePolynomialExpressions;| ...)
; compiling (MAKEPROP (QUOTE |SparseUnivariatePolynomialExpressions|) ...)
; /var/zope2/var/LatexWiki/SUPEXPR.NRLIB/SUPEXPR.fasl written
; compilation finished in 0:00:00.792
------------------------------------------------------------------------
SparseUnivariatePolynomialExpressions is now explicitly exposed in
frame initial
SparseUnivariatePolynomialExpressions will be automatically loaded
when needed from /var/zope2/var/LatexWiki/SUPEXPR.NRLIB/SUPEXPR
UTSSOL abbreviates package TaylorSolve
processing macro definition SUP ==> SparseUnivariatePolynomialExpressions
processing macro definition NNI ==> NonNegativeInteger
------------------------------------------------------------------------
initializing NRLIB UTSSOL for TaylorSolve
compiling into NRLIB UTSSOL
compiling exported seriesSolve : (UTSSUPF -> UTSSUPF,List F) -> UTSF
Time: 0.35 SEC.
(time taken in buildFunctor: 0)
;;; *** |TaylorSolve| REDEFINED
;;; *** |TaylorSolve| REDEFINED
Time: 0 SEC.
Warnings:
[1] seriesSolve: res has no value
Cumulative Statistics for Constructor TaylorSolve
Time: 0.35 seconds
finalizing NRLIB UTSSOL
Processing TaylorSolve for Browser database:
--->/usr/local/lib/fricas/target/x86_64-unknown-linux/../../src/algebra/UTSSOL.spad-->TaylorSolve((seriesSolve (UTSF (Mapping UTSSUPF UTSSUPF) (List F)))): Not documented!!!!
--->/usr/local/lib/fricas/target/x86_64-unknown-linux/../../src/algebra/UTSSOL.spad-->TaylorSolve(constructor): Not documented!!!!
--->/usr/local/lib/fricas/target/x86_64-unknown-linux/../../src/algebra/UTSSOL.spad-->TaylorSolve(): Missing Description
; compiling file "/var/zope2/var/LatexWiki/UTSSOL.NRLIB/UTSSOL.lsp" (written 07 AUG 2010 10:40:37 AM):
; compiling (/VERSIONCHECK 2)
; compiling (DEFUN |UTSSOL;seriesSolve;MLUTSF;1| ...)
; compiling (DEFUN |UTSSOL;seriesSolve;MLUTSF;1!1| ...)
; compiling (DEFUN |UTSSOL;seriesSolve;MLUTSF;1!0| ...)
; compiling (DEFUN |TaylorSolve| ...)
; compiling (DEFUN |TaylorSolve;| ...)
; compiling (MAKEPROP (QUOTE |TaylorSolve|) ...)
; /var/zope2/var/LatexWiki/UTSSOL.NRLIB/UTSSOL.fasl written
; compilation finished in 0:00:00.324
------------------------------------------------------------------------
TaylorSolve is now explicitly exposed in frame initial
TaylorSolve will be automatically loaded when needed from
/var/zope2/var/LatexWiki/UTSSOL.NRLIB/UTSSOL
EXPRSOL abbreviates package ExpressionSolve
processing macro definition SUP ==> SparseUnivariatePolynomialExpressions
processing macro definition OP ==> BasicOperator
processing macro definition SY ==> Symbol
processing macro definition NNI ==> NonNegativeInteger
processing macro definition MKF ==> MakeBinaryCompiledFunction(F,UTSSUPF,UTSSUPF,UTSSUPF)
------------------------------------------------------------------------
initializing NRLIB EXPRSOL for ExpressionSolve
compiling into NRLIB EXPRSOL
****** Domain: R already in scope
****** Domain: R already in scope
compiling local replaceDiffs : (F,BasicOperator,Symbol) -> F
Time: 0.17 SEC.
compiling exported seriesSolve : (F,BasicOperator,Symbol,List F) -> UTSF
Time: 0.02 SEC.
(time taken in buildFunctor: 0)
;;; *** |ExpressionSolve| REDEFINED
;;; *** |ExpressionSolve| REDEFINED
Time: 0.01 SEC.
Warnings:
[1] replaceDiffs: not known that (Comparable) is of mode (CATEGORY package (SIGNATURE seriesSolve (UTSF F (BasicOperator) (Symbol) (List F))))
[2] replaceDiffs: %diff has no value
Cumulative Statistics for Constructor ExpressionSolve
Time: 0.20 seconds
finalizing NRLIB EXPRSOL
Processing ExpressionSolve for Browser database:
--->/usr/local/lib/fricas/target/x86_64-unknown-linux/../../src/algebra/EXPRSOL.spad-->ExpressionSolve((seriesSolve (UTSF F OP SY (List F)))): Not documented!!!!
--->/usr/local/lib/fricas/target/x86_64-unknown-linux/../../src/algebra/EXPRSOL.spad-->ExpressionSolve(constructor): Not documented!!!!
--->/usr/local/lib/fricas/target/x86_64-unknown-linux/../../src/algebra/EXPRSOL.spad-->ExpressionSolve(): Missing Description
; compiling file "/var/zope2/var/LatexWiki/EXPRSOL.NRLIB/EXPRSOL.lsp" (written 07 AUG 2010 10:40:38 AM):
; compiling (/VERSIONCHECK 2)
; compiling (DEFUN |EXPRSOL;replaceDiffs| ...)
; compiling (DEFUN |EXPRSOL;seriesSolve;FBoSLUTSF;2| ...)
; compiling (DEFUN |EXPRSOL;seriesSolve;FBoSLUTSF;2!0| ...)
; compiling (DEFUN |ExpressionSolve| ...)
; compiling (DEFUN |ExpressionSolve;| ...)
; compiling (MAKEPROP (QUOTE |ExpressionSolve|) ...)
; /var/zope2/var/LatexWiki/EXPRSOL.NRLIB/EXPRSOL.fasl written
; compilation finished in 0:00:00.354
------------------------------------------------------------------------
ExpressionSolve is now explicitly exposed in frame initial
ExpressionSolve will be automatically loaded when needed from
/var/zope2/var/LatexWiki/EXPRSOL.NRLIB/EXPRSOL
|