Base Algebra

Summary
Base Algebra
ProjectionProject on variables or expressions in a polynomial system.
TrigonometricBasisComputes a Gröbner basis of a trigonometric system.
EliminationEliminates variables in a polynomial system.
IntersectionIntersects two ideals.
DivisionDivision of an ideal by another.
NormalFormReduces polynomials w.r.t a Groebner basis.
InRadicalTest the membership to the radical of an ideal.
DimensionComputes the dimension of a system.
SaturationIdealSaturate an ideal by another ideal.
SaturationTestSaturate an ideal by another ideal (new method).
Saturation5Saturate an ideal by another ideal (new method).
SaturationDirectSaturate an ideal by another ideal (direct method).
Singularity Manipulation
IteratedJacobianComputes the nth iterated jacobian.
RealSolveSolve polynomial and trigonometric systems.

Projection

Projection := proc (sys ::list(algebraic),  
vars1 ::list({name,name=algebraic}),  
vars2 ::list(name) := [op(indets(sys,name) minus {op(vars1)} minus indets(sys,constant))],
char ::integer := 0,
{   
output ::identical(list,listlist) := 'list',
allvariables ::truefalse := false,
keeporder ::truefalse := false,
nofactor ::truefalse := false
}   )

Project on variables or expressions in a polynomial system.

Parameters

syslist of polynomials with rational coefficients and trigonometric functions: the system
vars1list of names or equation of the shape name=algebraic: variables to project on.
vars2 (optional)list of names: variables to eliminate
char (optional)integer: characteristic of the base field default value: 0
output=fmt (optional)fmt is the keyword list or listlist; if list, the output is a list of polynomials, otherwise, it is a list of list of polynomials.
verbose (optional)”verb”=true or “verb”=false: verbose support default value: “verb”=false

Returns

With output=list, a list of polynomials: the generators of the elimination ideal.  With output=listlist, a list of components of the elimination ideal (multiplicities may have been lost); each component is represented by a list of polynomials.

Example

> Projection ( [x+y^2,y-x], [z=x+y] );
< [z^2+2*z]

TrigonometricBasis

TrigonometricBasis := proc(sys ::list(algebraic),  
vars1 ::list(name),  
vars2 ::list(name) := [op(indets(sys,name) minus {op(vars1)})],
char ::integer := 0)

Computes a Gröbner basis of a trigonometric system.

Parameters

syslist of polynomials with rational coefficients and trigonometric functions: the system
vars1list of names: variables to eliminate
vars2 (optional)list of names: remaining variables
char (optional)integer: characteristic of the base field default value: 0
verbose (optional)”verb”=true or “verb”=false: verbose support default value: “verb”=false Returns: A list of polynomials: the reduced Gröbner basis where the trigonometric expressions are considered as algebraic variables.

Example

> Elimination ( [x+y^2,y], [y], [x] );
< [x]

Elimination

Elimination := proc (sys ::list(algebraic),  
vars1 ::list(name),  
vars2 ::list(name) := [op(indets(sys,name) minus {op(vars1)})],
char ::integer := 0,
{   
allvariables ::truefalse := false,
keeporder ::truefalse := false,
direct ::truefalse := false
}   
   )

Eliminates variables in a polynomial system.

Parameters

syslist of polynomials with rational coefficients and trigonometric functions: the system
vars1list of names: variables to eliminate
vars2 (optional)list of names: remaining variables
char (optional)integer: characteristic of the base field default value: 0
allvariables=b (optional)b is a boolean: when true, the output is the full Groebner bases with vars2>>vars1 default value: false
verbose (optional)”verb”=true or “verb”=false: verbose support default value: “verb”=false

Returns

A list of polynomials: the generators of the elimination ideal.

Example

> Elimination ( [x+y^2,y], [y], [x] );
< [x]

Intersection

Intersection := proc (sys1 ::list(algebraic),  
sys2 ::list(algebraic),  
vars ::list(name) := [op (indets ([sys1,sys2],name))],
char ::integer := 0)

Intersects two ideals.

Parameters

sys1list of polynomials: generating the first ideal
sys2list of polynomials: generating the second ideal
vars (optional)list of names: the variables in sys1 and sys2
char (optional)integer: characteristic of the base field default value: 0
verbose (optional)”verb”=true or “verb”=false: verbose support default value: “verb”=false

Returns

A list of polynomials: the generators of the intersection ideal.

Example

> Intersection ( [x,z], [y] );
< [x*y,z*y]

Division

Division := proc (sys1 ::list(algebraic),  
sys2 ::list(algebraic),  
vars ::list(name) := [op (indets ([sys1,sys2],name))],
char ::integer := 0)

Division of an ideal by another.

Parameters

sys1list of polynomials: generating the first ideal
sys2list of polynomials: generating the second ideal
vars (optional)list of names: the variables in sys1 and sys2
char (optional)integer: characteristic of the base field default value: 0
verbose (optional)”verb”=true or “verb”=false: verbose support default value: “verb”=false

Returns

A list of polynomials: the generators of the division ideal.

Example

> Division ( [x^3,z], [x] );
< [x^2,z]

NormalForm

NormalForm := proc (polys ::list(algebraic),  
sys ::list(algebraic),  
vars1 ::list(name) := NULL,
vars2 ::list(name) := [],
char ::integer := 0)

Reduces polynomials w.r.t a Groebner basis.

Parameters

polyslist of polynomials: the polynomials to reduce
syslist of polynomials: a Groebner basis with lexdeg(vars1, vars2) ordering
vars1list of names: the first block of the grevlex ordering
vars2 (optional)list of names: the second block of the grevlex ordering default value: []
char (optional)integer: characteristic of the base field default value: 0

Returns

A list of polynomials: the normal forms of the polynomials in polys up to a scalar factor.

Example

> NormalForm ( [x^2+1,x+y], [x^2,y], [x,y] );
< [1,x]

InRadical

InRadical := proc (p ::algebraic,  
sys ::list(algebraic),  
vars ::list(name) := [op (indets ([sys,p],name))],
char ::integer := 0)

Test the membership to the radical of an ideal.

Parameters

ppolynomial with rational coefficients
syslist of polynomials: the generators of the ideal
vars (optional)list of names: the variables in sys and p
char (optional)integer: characteristic of the base field default value: 0
verbose (optional)”verb”=true or “verb”=false: verbose support default value: “verb”=false

Returns

A boolean: true if p is in the radical of sys, false otherwise.

Example

> InRadical ( x, [x^2,y] );
< true

Dimension

Dimension := proc (sys ::list(algebraic),  
vars ::list(name) := [op (indets (sys,name))],
char ::integer := 0)

Computes the dimension of a system.

Parameters

syslist of polynomials or trigonometric expressions: the system
vars (optional)list of names: the variables in sys
char (optional)integer: characteristic of the base field default value: 0

Returns

An integer: the dimension of the system.

Example

> Dimension ( [x^2,cos(y)-0.5] );
< 0

SaturationIdeal

SaturationIdeal := proc (sys1 ::list(algebraic),  
sys2 ::list(algebraic),  
vars ::list(name) := [op (indets ([sys1,sys2],name))],
char ::integer := 0,
{   
alternative ::truefalse := false
}   
   )

Saturate an ideal by another ideal.

Parameters

sys1list of polynomials: the generators of the saturated ideal
sys2list of polynomials: the generators of the saturating ideal
vars (optional)list of names: the variables in sys1 and sys2
char (optional)integer: characteristic of the base field default value: 0
verbose (optional)”verb”=true or “verb”=false: verbose support default value: “verb”=false
alternative = b (optional)b is a boolean; if true a different algorithm is used for the saturation default value: false

Returns

A list of polynomials: the generators of sys1 saturated by sys2.

Example

> SaturationIdeal ( [x*y*z], [z*x,z*y] )
< [x*y]

SaturationTest

SaturationTest := proc (sys1 ::list(algebraic),  
sys2 ::list(algebraic),  
vars ::list(name) := [op (indets ([sys1,sys2],name))],
char ::integer := 0)

Saturate an ideal by another ideal (new method).

Parameters

sys1list of polynomials: the generators of the saturated ideal
sys2list of polynomials: the generators of the saturating ideal
vars (optional)list of names: the variables in sys1 and sys2
char (optional)integer: characteristic of the base field default value: 0
verbose (optional)”verb”=true or “verb”=false: verbose support default value: “verb”=false

Returns

A list of polynomials: the generators of sys1 saturated by sys2.

Example

> SaturationTest ( [x*y*z], [z*x,z*y] )
< [x*y]

Algorithm

1Initialize sat, satsys2 and cover
2While the satsys2 is not contained in the radical of sys1 do
3- Take p in satsys2
4- Compute partsat, the saturation of sys1 by p
5- If p is not in the radical of sys1 then
6- - Update sat with the intersection sat with partsat
7- - Update satsys2 with the intersection satsys2 with partsat
8- Else
9- - Take a new polynomial p in satsys2 and go back to 4.
10Returns sat

Saturation5

Saturation5 := proc (sys1 ::list(algebraic),  
sys2 ::list(algebraic),  
vars ::list(name) := [op (indets ([sys1,sys2],name))],
char ::integer := 0,
outpol ::algebraic := 1)

Saturate an ideal by another ideal (new method).

Parameters

sys1list of polynomials: the generators of the saturated ideal
sys2list of polynomials: the generators of the saturating ideal
vars (optional)list of names: the variables in sys1 and sys2
char (optional)integer: characteristic of the base field default value: 0
verbose (optional)”verb”=true or “verb”=false: verbose support default value: “verb”=false

Returns

A list of polynomials: the generators of sys1 saturated by sys2.

Example

> SaturationTest2 ( [x*y*z], [z*x,z*y] )
< [x*y]

SaturationDirect

SaturationDirect := proc (sys1 ::list(algebraic),  
sys2 ::list(algebraic),  
vars ::list(name) := [op (indets ([sys1,sys2],name))],
char ::integer := 0)

Saturate an ideal by another ideal (direct method).

Parameters

sys1list of polynomials: the generators of the saturated ideal
sys2list of polynomials: the generators of the saturating ideal
vars (optional)list of names: the variables in sys1 and sys2
char (optional)integer: characteristic of the base field default value: 0
verbose (optional)”verb”=true or “verb”=false: verbose support default value: “verb”=false

Returns

A list of polynomials: the generators of sys1 saturated by sys2.

Example

> SaturationDirect ( [x*y*z], [z*x,z*y] )
< [x*y]

Singularity Manipulation

IteratedJacobian

IteratedJacobian := proc (sys ::list(algebraic),  
vars ::list(name) := [op(indets(sys,name))],
n ::integer := 1,
{   
rank ::integer := min (nops(sys),nops(vars)),
maxminors ::integer := infinity
}   
   )

Computes the nth iterated jacobian.

Parameters

syslist of polynomials: the initial system
vars (optional)list of names: the variables; default values: the variables appearing in sys
n (optional)integer: the number of iterations; default value: 1
rank = r (optional)r is an integer: the codimension of the system; default value: minimum of number of polynomials in sys and number of variables
maxminors = m (optional)m is an integer: a bound on the number of minors computed at each iteration; default value: infinity

Returns

A list of polynomials generating the nth element of the sequence (J_n) s.t.:

  • J_0 = sys
  • J_{n+1} = r x r minors of the Jacobian matrix of J_n w.r.t the variables vars

Example

> IteratedJacobian ([x^3,y^3], [x,y], 2);
                       3   3     2  2      4         4
                     [x , y , 9 x  y , 54 x  y, -54 y  x]

RealSolve

RealSolve := proc (sys ::{algebraic,list({algebraic,algebraic<algebraic})},  
vars ::list(name) := [op(indets([sys,spec],name))],
spec ::seq(name=algebraic) := NULL,
{   
noerror ::truefalse := false,
precision ::integer := Digits
}   
   )

Solve polynomial and trigonometric systems.

Parameters

syslist of algebraic expressions: the system to solve
vars (optional)list of variables: the variables of the system
spec (optional)sequence of element of the form name=constant: allow to specify variables in sys; in this case, some intermediate values are remembered to optimize other resolutions with different values.

Returns

A sequence of lists of the form v=n where v is a name and n is a numerical constant.

Projection := proc (sys ::list(algebraic),  
vars1 ::list({name,name=algebraic}),  
vars2 ::list(name) := [op(indets(sys,name) minus {op(vars1)} minus indets(sys,constant))],
char ::integer := 0,
{   
output ::identical(list,listlist) := 'list',
allvariables ::truefalse := false,
keeporder ::truefalse := false,
nofactor ::truefalse := false
}   )
Project on variables or expressions in a polynomial system.
TrigonometricBasis := proc(sys ::list(algebraic),  
vars1 ::list(name),  
vars2 ::list(name) := [op(indets(sys,name) minus {op(vars1)})],
char ::integer := 0)
Computes a Gröbner basis of a trigonometric system.
Elimination := proc (sys ::list(algebraic),  
vars1 ::list(name),  
vars2 ::list(name) := [op(indets(sys,name) minus {op(vars1)})],
char ::integer := 0,
{   
allvariables ::truefalse := false,
keeporder ::truefalse := false,
direct ::truefalse := false
}   
   )
Eliminates variables in a polynomial system.
Intersection := proc (sys1 ::list(algebraic),  
sys2 ::list(algebraic),  
vars ::list(name) := [op (indets ([sys1,sys2],name))],
char ::integer := 0)
Intersects two ideals.
Division := proc (sys1 ::list(algebraic),  
sys2 ::list(algebraic),  
vars ::list(name) := [op (indets ([sys1,sys2],name))],
char ::integer := 0)
Division of an ideal by another.
NormalForm := proc (polys ::list(algebraic),  
sys ::list(algebraic),  
vars1 ::list(name) := NULL,
vars2 ::list(name) := [],
char ::integer := 0)
Reduces polynomials w.r.t a Groebner basis.
InRadical := proc (p ::algebraic,  
sys ::list(algebraic),  
vars ::list(name) := [op (indets ([sys,p],name))],
char ::integer := 0)
Test the membership to the radical of an ideal.
Dimension := proc (sys ::list(algebraic),  
vars ::list(name) := [op (indets (sys,name))],
char ::integer := 0)
Computes the dimension of a system.
SaturationIdeal := proc (sys1 ::list(algebraic),  
sys2 ::list(algebraic),  
vars ::list(name) := [op (indets ([sys1,sys2],name))],
char ::integer := 0,
{   
alternative ::truefalse := false
}   
   )
Saturate an ideal by another ideal.
SaturationTest := proc (sys1 ::list(algebraic),  
sys2 ::list(algebraic),  
vars ::list(name) := [op (indets ([sys1,sys2],name))],
char ::integer := 0)
Saturate an ideal by another ideal (new method).
Saturation5 := proc (sys1 ::list(algebraic),  
sys2 ::list(algebraic),  
vars ::list(name) := [op (indets ([sys1,sys2],name))],
char ::integer := 0,
outpol ::algebraic := 1)
Saturate an ideal by another ideal (new method).
SaturationDirect := proc (sys1 ::list(algebraic),  
sys2 ::list(algebraic),  
vars ::list(name) := [op (indets ([sys1,sys2],name))],
char ::integer := 0)
Saturate an ideal by another ideal (direct method).
IteratedJacobian := proc (sys ::list(algebraic),  
vars ::list(name) := [op(indets(sys,name))],
n ::integer := 1,
{   
rank ::integer := min (nops(sys),nops(vars)),
maxminors ::integer := infinity
}   
   )
Computes the nth iterated jacobian.
RealSolve := proc (sys ::{algebraic,list({algebraic,algebraic<algebraic})},  
vars ::list(name) := [op(indets([sys,spec],name))],
spec ::seq(name=algebraic) := NULL,
{   
noerror ::truefalse := false,
precision ::integer := Digits
}   
   )
Solve polynomial and trigonometric systems.
Close