afnix-mth(3)
mth - standard math module
Description
mth
NAME
mth - standard math module
STANDARD MATH MODULE
The Standard Mathematical module is an original implementation of various mathematical facilities. The module can be divided into several catgeories which include convenient functions, linear algebra and real analysis.
Random number

The numbers are generated with the help of the system random generator. Such generator is machine dependant and results can vary from one machine to another.
Primality testing

The fermat-p and miller-rabin-p predicates return true if the primality condition is verified. These predicate operate with a base number. The prime number to test is the second argument.
Fermat
primality testing
The fermat-p predicate is a simple primality test based on
the "little Fermat theorem". A base number greater
than 1 and less than the number to test must be given to run
the test.
afnix:mth:fermat-p 2 7
In the preceeding example, the number 7 is tested, and the fermat-p predicate returns true. If a number is prime, it is guaranted to pass the test. The oppositte is not true. For example, 561 is a composite number, but the Fermat test will succeed with the base 2. Numbers that successfully pass the Fermat test but which are composite are called Carmichael numbers. For those numbers, a better test needs to be employed, such like the Miller-Rabin test.
Miller-Rabin
primality testing
The miller-rabin-p predicate is a complex primality test
that is more efficient in detecting prime number at the cost
of a longer computation. A base number greater than 1 and
less than the number to test must be given to run the
test.
afnix:mth:miller-rabin-p 2 561
In the preceeding example, the number 561, which is a Carmichael number, is tested, and the miller-rabin-p predicate returns false. The probability that a number is prime depends on the number of times the test is ran. Numerous studies have been made to determine the optimal number of passes that are needed to declare that a number is prime with a good probability. The prime-probable-p predicate takes care to run the optimal number of passes.
General
primality testing
The prime-probable-p predicate is a complex primality test
that incorporates various primality tests. To make the story
short, the prime candidate is first tested with a series of
small prime numbers. Then a fast Fermat test is executed.
Finally, a series of Miller-Rabin tests are executed. Unlike
the other primality tests, this predicate operates with a
number only and optionally, the number of test passes. This
predicate is the recommended test for the folks who want to
test their numbers.
afnix:mth:prime-probable-p 17863
Linear
algebra
The math module provides an original and extensive support
for linear and non linear algebra. This includes vector,
matrix and solvers. Complex methods for non linear
operations are also integrated tightly in this module.
Real vector
|
The math module provides the Rvector object which implements the real vector interface Rvi. Such interface provides numerous operators and methods for manipulating vectors as traditionnaly found in linear algebra packages. |


Creating a
vector
A vector is always created by size. A null size is perfectly
valid. When a vector is created, it can be filled by setting
the components by index.
# create a
simple vector
const rv (afnix:mth:Rvector 3)
# set the components by index
rv:set 0 0.0
rv:set 1 3.0
rv:set 2 4.0
Real matrix
|
The math module provides the Rmatrix object which implements the real matrix interface Rmi. This interface is designed to operate with the vector interface and can handle sparse or full matrix. |


STANDARD MATH REFERENCE
Rvi
The Rvi class an abstract class that models the behavior of
a real based vector. The class defines the vector length as
well as the accessor and mutator methods.
Predicate
rvi-p
Inheritance
Serial
Operators
== ->
Boolean (Vector)
The == operator returns true if the calling object is equal
to the vector argument.
!= ->
Boolean (Vector)
The == operator returns true if the calling object is not
equal to the vector argument.
?= ->
Boolean (Vector)
The ?= operator returns true if the calling object is equal
to the vector argument upto a certain precision.
+= ->
Vector (Real|Vector)
The += operator returns the calling vector by adding the
argument object. In the first form, the real argument is
added to all vector components. In the second form, the
vector components are added one by one.
-= ->
Vector (Real|Vector)
The -= operator returns the calling vector by substracting
the argument object. In the first form, the real argument is
substracted to all vector components. In the second form,
the vector components are substracted one by one.
*= ->
Vector (Real|Vector)
The *= operator returns the calling vector by multiplying
the argument object. In the first form, the real argument is
multiplied to all vector components. In the second form, the
vector components are multiplied one by one.
/= ->
Vector (Real)
The /= operator returns the calling vector by dividing the
argument object. The vector components are divided by the
real argument.
Methods
set ->
None (Integer Real)
The set method sets a vector component by index.
get ->
Real (Integer)
The get method gets a vector component by index.
clear ->
None (None)
The clear method clears a vector. The dimension is not
changed.
reset ->
None (None)
The reset method resets a vector. The size is set to 0.
get-size
-> Real ( None)
The get-size method returns the vector dimension.
dot ->
Real (Vector)
The dot method computes the dot product with the vector
argument.
norm ->
Real (None)
The norm method computes the vector norm.
permutate
-> Vector (Cpi)
The permutate method permutates the vector components with
the help of a combinatoric permutation object.
reverse
-> Vector (Cpi)
The reverse method reverse (permutate) the vector components
with the help of a combinatoric permutation object.
Rvector
The Rvector class is the default implementation of the real
vector interface.
Predicate
r-vector-p
Inheritance
Rvi
Constructors
Rvector
(None)
The Rvector constructor creates a default null real
vector.
Rvector
(Integer)
The Rvector constructor creates a real vector those
dimension is given as the calling argument.
Functions
get-random-integer
-> Integer (none|Integer)
The get-random-integer function returns a random integer
number. Without argument, the integer range is machine
dependent. With one integer argument, the resulting integer
number is less than the specified maximum bound.
get-random-real
-> Real (none|Boolean)
The get-random-real function returns a random real number
between 0.0 and 1.0. In the first form, without argument,
the random number is between 0.0 and 1.0 with 1.0 included.
In the second form, the boolean flag controls whether or not
the 1.0 is included in the result. If the argument is false,
the 1.0 value is guaranted to be excluded from the result.
If the argument is true, the 1.0 is a possible random real
value. Calling this function with the argument set to true
is equivalent to the first form without argument.
get-random-relatif
-> Relatif (Integer|Integer Boolean)
The get-random-relatif function returns a n bits random
positive relatif number. In the first form, the argument is
the number of bits. In the second form, the first argument
is the number of bits and the second argument, when true
produce an odd number, or an even number when false.
get-random-prime
-> Relatif (Integer)
The get-random-prime function returns a n bits random
positive relatif probable prime number. The argument is the
number of bits. The prime number is generated by using the
Miller-Rabin primality test. As such, the returned number is
declared probable prime. The more bits needed, the longer it
takes to generate such number.
get-random-bitset
-> Bitset (Integer)
The get-random-bitset function returns a n bits random
bitset. The argument is the number of bits.
fermat-p
-> Boolean (Integer|Relatif Integer|Relatif)
The fermat-p predicate returns true if the little fermat
theorem is validated. The first argument is the base number
and the second argument is the prime number to validate.
miller-rabin-p
-> Boolean (Integer|Relatif Integer|Relatif)
The miller-rabin-p predicate returns true if the
Miller-Rabin test is validated. The first argument is the
base number and the second argument is the prime number to
validate.
prime-probable-p
-> Boolean (Integer|Relatif [Integer])
The prime-probable-p predicate returns true if the argument
is a probable prime. In the first form, only an integer or
relatif number is required. In the second form, the number
of iterations is specified as the second argument. By
default, the number of iterations is specified to 56.