Domains
evaldomains
evaluation of Maple-expressions in a Domains domain
Calling Sequence
Parameters
Description
Examples
evaldomains[D](expr)
expr
-
Maple-expression
D
Domains domain
evaldomains[D](expr) evaluates the Maple-expression expr in the Domains domain D and returns a Maple-expression. evaldomains provides a Maple-like user-interface, data-encapsulation and type-checking for the arguments of Domains-functions. It is intended to simplify interactive use of Domains and is not intended to be used as a coding tool for writing Domains programs.
domain-Input/Output functions are implicitly applied during evaluation of the expression, hiding the data-representation of domain-elements. The type of arguments passed to domain-operations is checked against the signatures of the operations. The signatures of the domain operations are accessible through the command show(D, operations).
All the operations within expr are assumed to be operations in the specified Domains-domain D.
The following example shows the difference at the user-interface level:
domain := DenseUnivariatePolynomial (Zmod(7), x):
Using Domains syntax:
domain[Output](domain[`*`](domain[Input](x^2-3*x+1),domain[Input](2*x^3-4)));
Using the more familiar Maple syntax:
evaldomains[domain]((x^2-3*x+1)*(2*x^3-4));
If evaluations of several expressions in one domain are to be performed, it is often preferable to create a domain-evaluator with the use of aliases:
alias (dup = evaldomains[domain]):
Since the expression passed to evaldomains is first processed by the Maple parser, the user has to be aware of the built-in simplifications, reordering of operands and evaluation of top-level functions. Hence, the following is always simplified to 0.
evaldomains[domain] (Random() - Random());
An example for evaluation of top-level functions within the call of evaldomains can be obtained by the following
galoisfield := GaloisField (13, 2):
evaldomains[galoisfield](order(Random()));
Error, invalid input: order expects its 1st argument, expr, to be of type series, but received Random()
which results in an error, since order is a builtin top-level function which will be evaluated before the expression is passed to evaldomains. In order to prevent such behavior, the user is advised to use forward quotes where necessary.
evaldomains[galoisfield]('order'(Random())); ...
Furthermore, if the domain has non-commutative multiplication or addition, the &-version of the operator has to be used in order to prevent reordering of the operands, e.g.
Sm := SquareMatrix (2, Z): alias (sm = evaldomains[Sm]):
A := sm (Random());
A≔−85,−55,−37,−35
sm (A &* (A + 1));
9175,6545,4403,3225
evaldomains is only available after performing the command with(Domains).
with⁡Domains:
---------------------- Domains version 1.0 --------------------- Initially defined domains are Z and Q the integers and rationals Abbreviations, e.g. DUP for DenseUnivariatePolynomial, also made
Dup≔DUP⁡Zmod⁡7,x:
Create a Dup-evaluator using the alias statement
alias⁡dup=evaldomainsDup:
dup⁡Rem⁡−x7+4⁢x3−2,x3+3⁢x⁢x3+x−6
x4+5⁢x3+x2+6⁢x+5
evaldomains outputs even compound data-structures and ...
dup⁡Factor⁡x7+3⁢x4+6⁢x3+6⁢x5+x2+x+2⁢x6+1
1,x+1,1,x4+5⁢x+3,1,x+2,1,x+6,1
call-by-name parameters nicely (ie. not in their internal representation)
dup⁡Gcdex⁡3⁢x2−x−3,2⁢x3+2⁢x2+3⁢x+5,u,v
5+x
u,v
5+2⁢x,4
Gi≔Gaussian⁡Zmod⁡5:
alias⁡gi=evaldomainsGi:
a≔gi⁡2+3⁢I;b≔gi⁡2−I
a≔2+3⁢_i
b≔2+4⁢_i
c≔gi⁡a+a⁢b;cc≔gi⁡Conj⁡a+a⁢b
c≔4+2⁢_i
cc≔4+3⁢_i
Re and Im are also top-level Maple functions which must be quoted in order to prevent evaluation by the Maple parser
gi⁡c⁢cc=Coerce⁡ℜ⁡c2+Coerce⁡ℑ⁡c2
true
See Also
Download Help Document