Les opérations sur les entiers figurent dans le menu
Cmds->Entier
.
Les calculs modulo p se font en
utilisant % p
. Une fois défini un entier modulo p, disons
a:=3%5
, tous les calculs seront efffectués dans
ℤ/pℤ : a*2
renvoie 1%5
(6 modulo 5),
1/a
renvoie 2%5
, …
Pour calculer efficacement les puissances modulo p, on peut utiliser ce qui
précède, ou la fonction powermod
ou powmod
.
a:=3%5 a+12 a^4 powermod(3,4,5)
Nombres entiers | |
a%p | a modulo p |
powmod(a,n,p) | an modulo p |
irem | reste de la division euclidienne |
iquo | quotient de la division euclidienne |
iquorem | quotient et reste |
ifactor | décomposition en facteurs premiers |
ifactors | liste des facteurs premiers |
idivis | liste des diviseurs |
gcd | plus grand diviseur commun |
lcm | plus petit multiple commun |
iegcd | identité de Bezout |
iabcuv | renvoie [u,v] tels que au+bv=c |
is_prime | l’entier est-il premier |
nextprime | prochain entier premier |
previousprime | entier premier précédent |
Les fonctions de traitement des polynômes sont dans le menu
Cmds->Polyn\^omes
.
On utilise normal
ou expand
pour développer, ou plus généralement mettre une fraction
sous forme irréductible, et factor
pour
factoriser.
Le résultat dépend du corps de nombres dans lequel on
se place. Par défaut il s’agit des rationnels si les coefficients
sont exacts ou des réels sinon. Pour les complexes
(exacts ou approchées), il
faut activer l’option Complexe
à partir du bouton rappelant la configuration Config:...
. On peut aussi déclarer les
coefficients comme des
entiers modulo p pour travailler dans ℤ/pℤ (commande %
)
ou dans un corps
fini (défini par la commande GF
). Exécutez les
commandes suivantes avant et après avoir activé l’option
Complexe
.
P:=x^4-1 factor(P) gcd(P,x^3-1) divis(P) propfrac(x^4/P) partfrac(4/P) Q:=(x^4+1)%3 factor(Q) G:=GF(2,8,['a','G']) factor(G(a^3)*x^2+1) genpoly(5,3,x) genpoly(2,3,x) genpoly(2*y+5,3,x)
Polynômes | |
normal | forme normale (développée et réduite) |
expand | forme développée |
ptayl | forme de Taylor |
peval ou horner | évaluation en un point par l’algorithme de Horner |
genpoly | polynôme défini par sa valeur en un point |
canonical_form | trinôme sous forme canonique |
coeff | (liste des) coefficient(s) |
poly2symb | de l’expression algébrique à la forme symbolique |
symb2poly | de la forme symbolique à l’expression algébrique |
pcoeff | polynôme décrit par ses racines |
degree | degré |
lcoeff | coefficient du terme de plus haut degré |
valuation | degré du monôme de plus bas degré |
tcoeff | coefficient du terme de plus bas degré |
factor | décomposition en facteurs premiers |
factors | liste des facteurs premiers |
divis | liste des diviseurs |
collect | factorisation sur les entiers |
froot | racines avec leurs multiplicités |
proot | valeurs approchées des racines |
sturmab | nombre de racines dans un intervalle |
getNum | numérateur d’une fraction rationnelle |
getDenom | dénominateur d’une fraction rationnelle |
propfrac | isole partie entière et fraction propre |
partfrac | décomposition en éléments simples |
quo | quotient de la division euclidienne |
rem | reste de la division euclidienne |
gcd | plus grand diviseur commun |
lcm | plus petit multiple commun |
egcd | identité de Bezout |
divpc | division suivant les puissances croissantes |
randpoly | polynôme aléatoire |
cyclotomic | polynômes cyclotomiques |
lagrange | polynômes de Lagrange |
hermite | polynômes de Hermite |
laguerre | polynômes de Laguerre |
tchebyshev1 | polynômes de Tchebyshev |
tchebyshev2 | polynômes de Tchebyshev |
Le menu Cmds->R\'eel->Transcendental
contient
les fonctions circulaires et hyperboliques ainsi que leurs inverses.
Pour linéariser et
développer on utilise tlin
et texpand
. Beaucoup
d’autres réécritures sont accessibles à partir des menus
Expression->Trigo
: transformations en tan(x/2) (halftan), transformation des tangentes en sinus et
cosinus (tan2sincos), …Expression->Trigo exp
: transformation des fonctions
trigonométriques en exponentielles par les
formules d’Euler (trig2exp), transformation des exponentielles en fonctions trigonométriques (exp2trig), transformation des exponentielles en puissances (exp2pow)...,
Expression->Trigo inv
: transformation des fonctions inverses
exp2pow(exp(3*ln(x))) exp2trig(exp(i*x)) trig2exp(cos(x)) E:=sin(x)^4+sin(x)^3 El:=tlin(E) texpand(El) tsimplify(E) tsimplify(El) tsimplify(E-El) halftan(E) trig2exp(El) Et:=trigtan(E) tan2sincos(Et) tan2sincos2(Et) tan2cossin2(Et)
Trigonométrie | |
tlin | linéariser |
tcollect | linéariser et regrouper |
texpand | forme polynomiale |
trig2exp | trigonométrique vers exponentielle |
exp2trig | exponentielle vers trigonométrique |
hyp2exp | hyperbolique vers exponentielle |
Un vecteur est une liste de nombres, une matrice est la liste de ses
vecteurs lignes. Le produit matriciel est noté comme le produit
ordinaire *
. Les vecteurs sont a priori des vecteurs lignes,
mais le produit à droite par un vecteur ligne est effectué comme
si c’était une colonne. En particulier, si v
et w
sont deux vecteurs de même taille, v*w
retourne leur produit
scalaire.
A:=[[1,2,3],[4,5,6],[7,8,9]] v:=[1,1,1] v*v A*v v*A B:=[[1,1,1],[2,2,2]] A*B B*A A*tran(B)
A partir d’une fonction qui à deux indices (j,k) associe un réel
a(j,k), on peut constituer une matrice avec makemat
ou
matrix
. Pour makemat
les indices commencent à 0, pour
matrix
il commencent à 1.
makemat((j,k)->j+2*k,3,2) matrix(3,2,(j,k)->j+2*k)
On peut aussi créer des matrices par blocs avec la commande
blockmatrix
.
A:=makemat((j,k)->j+2*k,3,2) B:=idn(3) blockmatrix(1,2,[A,B]) blockmatrix(2,2,[A,B,B,A])
On accède à un élément d’une matrice grâce à deux indices
séparés par une virgule et mis entre
crochets. Le premier indice est l’indice de la ligne et le deuxième
celui de la colonne. Les indices commencent à 0.
Par exemple, si A:=[[0,2],[1,3],[2,4]]
alors
A[2,1]
renvoie 4
.
Pour extraire un bloc de la matrice, on utilise des intervalles
comme indices : A[1..2,0..1]
renvoie le bloc
constitué des lignes 1 à 2 et des colonnes 0 à 1.
Notez que les matrices de Xcas sont recopiées entièrement à chaque modification d’un coefficient. Ceci est pénalisant si on modifie successivement dans un programme beaucoup de coefficients d’une même (grande) matrice.
Vecteurs et matrices | |
v*w | produit scalaire |
cross(v,w) | produit vectoriel |
A*B | produit matriciel |
A.*B | produit terme à terme |
1/A | inverse |
tran | transposée |
rank | rang |
det | déterminant |
ker | base du noyau |
image | base de l’image |
idn | matrice identité |
ranm | matrice à coefficients aléatoires |
La fonction linsolve
résout une liste d’équations
linéaires, avec la même syntaxe que solve. On peut aussi utiliser
simult
pour résoudre plusieurs systèmes d’équations linéaires
qui ne diffèrent que par leur second membre, en mettant comme premier
argument la matrice du système et comme second argument la matrice dont la
(ou les) colonnes sont le (ou les) second membre(s) des systèmes, ou bien
rref
d’argument une matrice obtenue en bordant la matrice du système
avec lesecond membre (border(A,tran(b)) si b est une matrice
colonne). Quand le système est impossible, linsolve
retourne
la liste vide, simult
retourne un message d’erreur, rref
retourne une matrice dont une des lignes est nulle, sauf le dernier
coefficient. Quand le système est indéterminé, linsolve
retourne la solution fonction de certaines variables, simult
retourne seulement une solution, rref
retourne une matrice dont
une ou plusieurs lignes sont nulles. L’exemple ci-dessous concerne
le système
⎧ ⎪ ⎨ ⎪ ⎩ |
|
Il a une solution unique pour a≠ 1 et a≠ −2, il est impossible pour a=1 et il est indéterminé pour a=−2.
linsolve([x+y+a*z=1,x+a*y+z=1,x+a*y+z=-2],[x,y,z]) a:=1 linsolve([x+y+a*z=1,x+a*y+z=1,x+a*y+z=-2],[x,y,z]) a:=-2 linsolve([x+y+a*z=1,x+a*y+z=1,x+a*y+z=-2],[x,y,z]) purge(a) A:=[[1,1,a],[1,a,1],[a,1,1]] solve(det(A),a) A1:=subst(A,a=1) rank(A1) image(A1) ker(A1) A2:=subst(A,a=-2) rank(A2) image(A2) ker(A2) b:= [1,1,-2] B:=tran(b) simult(A,B) simult(A1,B) simult(A2,B) M:=blockmatrix(1,2,[A,B]) rref(M) rref(border(A,b)) rref(border(A1,b)) rref(border(A2,b))
Systèmes linéaires | |
linsolve | résolution d’un système |
simult | résolution simultanée de plusieurs systèmes |
rref | réduction de Gauss-Jordan |
rank | rang |
det | déterminant du système |
La fonction jordan
prend en entrée une matrice A et retourne en
sortie une matrice de passage P et une forme réduite de Jordan J telles
que P−1A P=J. Soit A est diagonalisable auquel cas J est
diagonale et contient les valeurs propres de A sur la diagonale,
soit A n’est pas diagonalisable et J comporte des "1" ou des "0"
au-dessus de la diagonale. Pour les matrices exactes et symboliques,
seules les valeurs propres calculables par
solve
sont accessibles. Pour des matrices de nombres approchés,
un algorithme numérique est utilisé, et il risque
d’échouer en cas de valeurs propres multiples ou très proches.
La matrice A de l’exemple qui suit a pour valeurs propres doubles 1
et 2. Elle est diagonalisable pour
a=0, non diagonalisable pour a≠ 0.
A:=[[1,1,-1,0],[0,1,0,a],[0,-1,2,0],[1,0,1,2] factor(poly2symb(simplify(pcar(A)))) jordan(A) eigenvals(A) eigenvects(A) jordan(subs(A,a=0)) eigenvects(subs(A,a=1)) jordan(evalf(subs(A,a=0))) jordan(evalf(subs(A,a=1)))
Certaines fonctions, définies par des séries entières, s’étendent aux matrices dès lors que l’on sait calculer leur forme de Jordan. La plus utile est l’exponentielle.
A:=[[0,1,0],[0,0,1],[-2,1,2]] jordan(A) exp(A) ln(A) sin(A)
Réduction des matrices | |
jordan | diagonalisation ou réduction de Jordan |
pcar | coefficients du polynôme caractéristique |
pmin | coefficients du polynôme minimal |
eigenvals | valeurs propres |
eigenvects | vecteurs propres |