Calcul formel
et
Mathématiques
avec
Xcas

Renée De Graeve
Maître de Conférence à Grenoble I

Remerciements




Je remercie:

© 2002, 2006 Renée De Graeve, renee.degraeve@wanadoo.fr
La copie, la traduction et la redistribution de ce document sur support électronique ou papier sont autorisés pour un usage non commercial uniquement. L’utilisation de ce document à des fins commerciales est interdite sans l’accord écrit du détenteur du copyright. Cette documentation est fournie en l’état, sans garantie d’aucune sorte. En aucun cas le détenteur du copyright ne pourra être tenu pour responsable de dommages résultant de l’utilisation de ce document.

Ce document est disponible à l’adresse Internet suivante :
http://www-fourier.ujf-grenoble.fr/~parisse/cascmd_fr.pdf

Préface




Bernard Parisse
Maître de Conférences à l’Université de Grenoble I
Développeur du logiciel de calcul formel giac et de son interface Xcas. La version à jour se récupère sur ;
http://www-fourier.ujf-grenoble.fr/~parisse/giac.html

Table des matières

Index

Pour commencer

0.1  Style de l’index et notations

0.2  La librairie giac et de ses interfaces sous Unix

giac est la bibliothèque C++ de fonctions de calcul formel.
Sous Unix, on peut utiliser cette bibliothèque de calcul formel avec plusieurs interfaces :

Chapitre 1  L’interface Xcas

1.1  Mise en route de l’interface Xcas

1.2  Les différents niveaux d’entrée

Cette interface va vous permettre d’ouvrir plusieurs sessions de calculs : ces sessions ont plusieurs niveaux d’entrée, sont indépendantes les unes des autres et peuvent être pliée ou dépliée.
Chaque session peut contenir des niveaux d’entrée numérotés qui contiendront :

Au sein d’une même session, les différents niveaux d’entrée ne sont pas indépendants, par exemple, une variable définie dans une ligne de commandes pourra être utilisée en géométrie ou dans le tableur.
L’ensemble de toutes ces sessions constitue votre espace de travail.
Le niveau actif est celui où se trouve le curseur et le niveau selectionné est obtenu quand on clique sur son numéro, numéro qui sécrit alors sur fond noir.
On peut déplacer un niveau ou un groupe de niveau dans une session, ou le recopier dans une autre session.
Vous pouvez , à tout moment insérer un nouveau niveau ou encore changer l’entrée d’un niveau : Enter valide le changement de ce niveau et sélectionne l’entrée suivante, mais attention les niveaux suivants ne seront pas recalculés. Il est toutefois possible après une modification de réexécuter, soit tous les niveaux, soit les niveaux situés après la modification (menu Edit puis Executer session ou Executer en-dessous).
Il faut savoir qu’il suffit de faire :

1.3  Que voit-on au démarrage ?

Vous obtenez au démarrage l’ouverture d’une session avec de haut en bas :

  1. La barre du menu général Fich Edit Cfg... contenant les fonctions de Xcas et ce qu’il faut pour les configurer et pour sauver ou charger une session de travail.
  2. Une ligne des noms de sessions qui contiendra les noms (ou Unnamed si elles n’ont pas de noms) de vos différentes sessions. Au démarrage il n’y a qu’une session qui n’a pas de nom donc sur cette ligne il y a Unnamed,
  3. Un bandeau général avec de gauche à droite :
  4. Un premier niveau ou les deux premiers niveaux, selon le démarrage choisi.

1.4  Les menus

1.5  Comment bien gérer son espace de travail

1.6  Les différentes configurations

Les différentes configurations se font :

1.7  Les différentes configurations avec les commandes

1.8  L’aide

On peut avoir de l’aide sur les différentes fonctions de calcul formel de plusieurs façons. On peut cocher la case Aide HTML automatique de la configuration générale pour avoir l’ouverture de l’aide detailléeà chaque appel d’une fonction se trouvant dans les menus ou ne pas cocher cette case pour avoir de l’aide seulement lorqu’on le désire, toutefois une aide succincte apparait dans la ligne des messages à chaque appel d’une fonction se trouvant dans les menus. On peut avoir accès à l’aide générale ou à l’aide par fonction tout le temps (voir ci-dessous).

1.9  Sauver et imprimer

Il est préférable de mettre les suffixe suivants :
.cxx (ou .map ou .mu ou .ti selon le mode) pour un script et par exemple,
.xws pour la session de travail,
.cxx pour une fonction,
.tab pour le tableur,
.tex pour le graphique en latex,
.eps pour le graphique et pouvoir ensuite inclure le fichier dans un texte en latex ou en postscipt,
.png pour le graphique et pouvoir ensuite inclure le fichier dans un texte en html.

1.10  Traduction Latex

1.11  Traduction Mathml

1.12  Traduction de fichiers Maple en fichier Xcas ou Mupad

1.13  Traduction d’un fichier Mupad en un fichier Xcas ou Maple

Chapitre 2  Saisie

2.1  Pour écrire un commentaire : Alt+c

On peut à tout moment faire apparaitre une ligne pour écrire un commentaire avec Alt+c. Le commentaire s’écrit sans utiliser de guillemets et apparait en vert. Le commentaire ne génère pas de réponse.
Le commentaire sert à commenter votre session.
Depuis un commentaire on peut ouvrir le navigateur à une adresse donnée On tape dans une ligne de commentaire :

Exercice 1

On obtient :

aucune réponse

Dans une ligne de commentaire, on peut ouvrir le navigateur à une adresse donnée : On tape dans une ligne de commentaire :

Pour plus d’info cf :
@www-fourier.ujf-grenoble.fr/ parisse/giac/doc/fr/casrouge/index.html

On obtient :

l’ouverture dans le navigateur de l’index du document sur l’algorithmique

Attention
Pour faire un commentaire dans un programme il faut utiliser la commande comment qui a comme argument une chaîne de caractères ou bien utiliser // qui doit etre suivi du commentaire et d’un retour à la ligne. Quand il y a un commentaire dans un programme, tout se qui se trouve entre // et le retour à la ligne n’est pas pris en compte par le programme.
On tape :

bs():={comment("bonjour"); return "Salut";}

On tape :

bs():={//"bonjour"
return "Salut";}

On obtient :

un programme ayant comme commentaire "bonjour"

2.2  L’éditeur d’expressions

Dans l’éditeur d’expressions, l’affichage ne se fait pas linéairement mais se fait en dimension 2d.
Quand on a mis une expression dans l’éditeur d’expressions, on peut facilement sélectionner des sous-expressions et appeler les fonctions des menus sur ces sous-expressions puis appuyer sur enter pour avoir la réponse en dessous de l’éditeur d’expressions ou encore évaluer la sélection dans l’éditeur d’expressions avec le bouton eval.
Dans l’éditeur d’expressions, on peut utiliser les raccourcis suivants sur la sélection de sous-expressions :
Ctrl+s pour la commande simplify
Ctrl+r pour la commande integrate

2.3  Les éditeurs de matrices et les tableurs

Il faut tout d’abord ouvrir un tableur avec Alt+t.
À chaque tableur est attaché un écran de géométrie, une barre de menu (Fich Edit Statistiques), des boutons (reeval,val,Save), deux cases (l’une donne le nom du fichier de sauvegarde et l’autre le nom de la cellule sélectionnée) et deux lignes (l’une contient une case de sélection et une ligne dite ligne de commandes qui sert soit à remplir la cellule sélectionnée, soit à afficher ce que l’on a mis dans la cellule sélectionnée, et l’autre est la ligne d’état qui rappelle la configuration du tableur et sert de bouton pour ouvrir un écran de configuration du tableur).

2.4  Les commandes d’effacement

2.5  Les variables

2.6  Les répertoires

Chapitre 3  Le graphique

3.1  Généralités

Si le graphe dépend d’une fonction utilisateur, il faut que la fonction soit définie lorsque le(s) paramètre(s) a (ont) une valeur formelle, ce qui peut se faire en testant le type du paramètre, comme dans l’exemple suivant : Je définis f avec le test du type du paramètre et g sans le test par :

f(x):= {
  if (type(x)!=DOM_FLOAT) return 'f'(x); 
  while(x>0){ x--; } 
  return x; 
}:;
g(x):= {
  while(x>0){ x--; } 
  return x; 
}:;

Si je tape :
F:=plotfunc(f(x)) ou G:=plotfunc(g(x)) j’obtiens le même graphe. Le problème apparait lorsque x n’a pas de valeur et que l’on réutilise G.
Mais si on fait :
G:=plotfunc(g(x)) puis symetrie(droite(y=x),G) ou même simplement G on a l’erreur :
"Unable to eval test in loop : x>0.0 Error: Bad Argument Value"
parce que l’évaluation de g(x) ne peut pas se faire si x est formel.
Par contre, F:=plotfunc(f(x)) puis symetrie(droite(y=x),F) renvoie bien le symétrique du graphe par rapport à la première bissectrice grâce au test de la ligne :
if (type(x)!=DOM_FLOAT) return ’f’(x);. D’ou l’intérêt de rajouter le test.
Par contre on peut taper directement sans provoquer d’erreurs :
symetrie(droite(y=x),plotfunc(g(x))).
Explications
Il faut savoir que dans les réponses de certaines commandes (par exemple G:=plotfunc(g(x))) il va figurer l’expression formelle de g(x) (par exemple G contient expr("curve(group[pnt[x+(i)*g(x),x,x,-5.0,5.0125,0]...]))). Lors de l’évaluation de G il y aura une erreur car x+(i)*g(x) ne pourra pas être évalué puisque l’évaluation de g(x) provoque l’évaluation du test x>0 qui ne peut pas être évalué car x n’a pas de valeur ....d’où une erreur mais si dans la fonction figure le test : if (type(x)!=DOM_FLOAT) return ’g’(x); cela supprime l’évaluation de g(x) et donc l’erreur due au test x>0.
En effet, F:=plotfunc(f(x)) puis symetrie(droite(y=x),F) renvoie bien le symétrique du graphe par rapport à la première bissectrice grâce au test de la ligne :
if (type(x)!=DOM_FLOAT) return ’f’(x);.
Par contre on peut taper directement sans provoquer d’erreurs :
symetrie(droite(y=x),plotfunc(g(x)))

3.2  L’écran graphique et ses boutons

Un écran graphique 2-d ou 3-d s’ouvre automatiquement en réponse d’une commande graphique 2-d ou 3-d. À un écran graphique 2-d ou 3-d est attaché des boutons situés en haut et à droite de cet écran.
Un écran de géométrie plane s’ouvre avec les touches Alt+g : c’est un écran graphique 2-d interactif muni de lignes d’entrée, d’une barre de menus contenant les menus Fich Edit et d’un bouton Save. Cet écran graphique est interactif : on peut définir des points et des segments en cliquant avec la souris.
Un écran de géométrie 3-d s’ouvre avec les touches Alt+h : c’est un écran graphique 3-d muni de lignes d’entrée, d’une barre de menus contenant les menus Fich Edit et d’un bouton Save. Les boutons d’un écran graphique 2-d et 3-d sont les mêmes en apparence mais leurs contenus sont quelquefois différents :

3.3  La configuration de l’écran graphique

Avant de faire un tracé, il faut régler les différents paramètres de la configuration de l’écran graphique :
le menu CfgConfiguration graphique (cf section 1.6.2) règle les paramètres de tous les graphiques qui se feront lors de la session. On peut changer ensuite ses paramètres au coup par coup avec le bouton cfg attaché à chaque écran graphique (cf3.4).
Les commandes du cas qui ont comme réponses un graphique 2-d ou 3-d seront tapées dans une ligne d’entrée. Toutefois les commandes du cas qui ont comme réponses un graphique 2-d peuvent aussi être tapées soit dans une ligne d’entrée d’un écran de géométrie. Attention! Un écran de géométrie est un écran graphique interactif.
Les commandes graphiques se trouvent dans le sous-menu Graphe du menu Maths.
Les commandes de géométrie se trouvent dans le menu Geo.

3.4  Configuration graphique avec cfg

Le bouton cfg permet de régler la fenêtre graphique.

3.5  Pour transformer un graphique en un fichier Latex

Voir aussi : 1.10.3 et 1.10.5 Il faut employer la commande graph2tex("nom.tex") (ou pour un graphique 3-d graph3d2tex("nom.tex")) pour transformer tous les graphiques réalisés en le fichier Latex nom.tex.
Ce fichier pourra être visualisé seul ou bien inséré dans un autre fichier Latex en otant l’en tête \documentclass{article}...\begin{document}, et le \end{document} de la fin et de rajouter \usepackage{pstricks} dans l’en-tête du fichier dans lequel on l’insère.
Attention Dans ce fichier tous les graphiques seront superposés : pour n’avoir qu’un seul graphique, il faut supprimer les niveaux contenant les autres graphiques avant de faire graph2tex("nom.tex").

3.6  Menu Maths, sous-menu Graphe : Dessiner sélection

Dans le menu Maths, sous-menu Graphe, on trouve le nom des principales commandes graphiques et la possibilitè de faire le graphe d’une sous expression avec Dessiner sélection.
Il faut tout d’abord sélectionner une sous-expression se trouvant dans la ligne de commandes : lorsqu’on clique sur Dessiner sélection on obtient la représentation de l’expression sélectionnée : Dessiner sélection exécute la commande plotfunc sur la sélection.

3.7  Graphe d’une fonction : plotfunc funcplot DrawFunc Graph

3.8  Graphe 2-d pour compatibilité Maple : plot graphe

plot(f(x),x) trace la représentation graphique de y=f(x).
On tape :

plot(x^2-2,x)

On obtient :

la représentation graphique de y=x^2-2

On peut rajouter un paramètre pour indiquer le saut d’échantillonnage en x c’est à dire le pas en x que l’on veut utiliser pour faire le graphe. On tape :

plot(x^2-2,xstep=1)

ou encore

plot(x^2-2,x,xstep=1)

On obtient :

une ligne polygonale qui est la représentation grossière de y=x^2-2

On peut aussi spécifier le nombre de points d’échantillonage de la fonction à représenter en utilisant nstep à la place de xstep. Par exemple, on tape :

plot(x^2-2,x=-2..3,nstep=30)

3.9  Surface 3-d pour compatibilité Maple plot3d graphe3d

plot3d a trois arguments une fonction de deux variables (ou une expression de deux variables ou une liste de trois fonctions de deux variables ou encore une liste de trois expressions de deux variables) et les noms de ces deux variables.
plot3d trace la surface définie par le premier argument (soit z=f(x,y), soit x=f(u,v),y=g(u,v),z=h(u,v)).
On peut faire tourner ce graphique selon l’axe des x, l’axe des y ou l’axe des z. Pour cela, il faut cliquer avec la souris dans la fenêtre graphique en dehors du parallélépipéde servant à la représentation, puis faire bouger la souris (sans relacher son bouton) ou utiliser les touches x, X, y, Y, z et Z.
On tape :

plot3d(x*y,x,y)

On obtient :

La surface z=x*y

On tape :

plot3d([v*cos(u),v*sin(u),v],u,v)

On obtient :

Le cône x=v*cos(u),y=v*sin(u),z=v

Pour n’avoir qu’une portion de surface on peut indiquer l’intervalle de variation dans le deuxième et le troisème argument.
On tape :

plot3d([v*cos(u),v*sin(u),v],u=0..pi,v=0..3)

On obtient :

Une portion du cône x=v*cos(u),y=v*sin(u),z=v

3.10  Graphe d’une droite et les tangentes à un graphe

3.11  Représentation graphique d’inéquations à 2 variables : plotinequation inequationplot

plotinequation([f1(x,y)<a1,..,fk(x,y)<ak],[x=x1..x2,y=y1..y2]) trace la surface du plan définie par les inéquations à 2 variables :

f1(x,y)<a1
...
fk(x,y)<ak
x1<x<x2
y1<y<y2

On tape :

plotinequation(x^2-y^2<3, [x=-2..2,y=-2..2],xstep=0.1,ystep=0.1)

On obtient :

la partie contenant l’origine et délimitée par l’hyperbole x^2-y^2=3 est remplie

On tape :

plotinequation([x+y>3,x^2<y], [x-2..2,y=-1..10],xstep=0.2,ystep=0.2)

On obtient :

le morceau du plan définit par -2<x<2,y<10,x+y>3,y>x^2 est rempli

Attention
Si on ne met pas les bornes pour x et y ce sont les valeurs de X-,X+,Y-,Y+ mises dans la configuration générale du graphique (CfgConfiguration graphique) qui seront prises en compte.

3.12  Représentation graphique de l’aire sous une courbe : tracer_aire graphe_aire aire_graphe plotarea areaplot

Remarque 1 On peut aussi taper, pour n’avoir que la valeur de l’aire :

plotarea(x^2,x=0..1,5,trapeze)[0,3];

On obtient :

0.34

Remarque 2 Si on utilise plotarea avec le menu Graphic->Courbes->plotarea une boite de dialogue s’ouvre : vous entrez, l’expression de la fonction, le nom de la variable, les bornes de l’intervalle xmin,xmax, le pas xstep (on a alors n=(xmax-xmin)/xstep), la méthode d’intégration et aussi la couleur du dessin (on retrouve en effet le bouton Attribut en haut et à gauche de la boite de dialogue).

3.13  Lignes de niveaux : plotcontour contourplot
DrwCtour

plotcontour(f(x,y),[x,y]) (ou DrwCtour(f(x,y),[x,y]) ou
encore contourplot(f(x,y),[x,y])) trace les 6 lignes de niveaux z=−10, z=−8,.., z=0, z=2,.., z=10 de la surface définie par z=f(x,y).
On tape :

plotcontour(x^2+y^2,[x=-3..3,y=-3..3],[1,2,3], affichage=[vert,rouge,noir]+[rempli$3])

On obtient :

le graphe des trois ellipses x^2-y^2=n pour n=1,2,3; les zones comprises entre ces ellipses sont remplies avec la couleur verte,rouge ou noire

On tape :

plotcontour(x^2-y^2,[x,y])

On obtient :

le graphe des six hyperboles x^2-y^2=n pour n=-10,-8,..10

Pour visualiser la surface, on tape (plotfunc(f(x,y),[x,y]) trace la représentation graphique de z=f(x,y), voir 3.7.2):

plotfunc( x^2-y^2,[x,y])

On obtient :

Un graphique en 3-d représentant z=x^2+y^2

On peut faire tourner ce graphique selon l’axe des x, l’axe des y ou l’axe des z. Pour cela, il faut cliquer avec la souris dans la fenêtre graphique en dehors du parallélépipéde servant à la représentation, puis faire bouger la souris (sans relacher son bouton) ou utiliser aux touches x, X, y, Y, z et Z.

3.14  Graphe d’une fonction par niveaux de couleurs : plotdensity densityplot

plotdensity(f(x,y),[x,y]) ou encore densityplot(f(x,y),[x,y]) trace le graphe de z=f(x,y) dans le plan en représentant z par une des couleurs de l’arc en ciel.
On tape :

plotdensity(x^2-y^2,[x=-2..2,y=-2..2],xstep=0.1,ystep=0.1)

On obtient :

Un graphique en 2-d représentant pour chaque z, l’hyperbole définie par x^2-y^2=z par une couleur de l’arc en ciel

On remarquera que l’on a l’echelle des couleurs en dessous du graphe.

3.15  Courbe en implicite : plotimplicit implicitplot

plotimplicit ou implicitplot permet de tracer des courbes ou des surfaces définies de façon implicite par une expression. Pour que Xcas ne cherche pas à factoriser l’expression, la commande plotimplicit ou implicitplot peut être utilisée avec l’option unfactored ou sans_factoriser mise comme dernier paramètre, :

3.16  Courbe et surface en paramétrique : plotparam paramplot DrawParm courbe_parametrique

3.17  Courbe en polaire : plotpolar polarplot DrawPol courbe_polaire

plotpolar(f(t),t) trace la représentation polaire de la courbe définie par : ρ=f(t).
On tape si dans la configuration du graphique t va de 0 à 10 :

plotpolar(t,t)

On obtient :

La spirale ρ=t est dessinée

On peut rajouter un paramètre (tstep=) pour indiquer le saut d’échantillonnage en t c’est à dire le pas en t que l’on veut utiliser pour faire le graphe. On tape si dans la configuration du graphique t va de 0 à 10 :

plotpolar(t,t,tstep=1)

ou :

plotpolar(t,t=0..10,tstep=1)

On obtient :

La spirale ρ=t est dessinée grossièrement

3.18  Tracé d’une suite récurrente : plotseq seqplot graphe_suite

plotseq(f(x),a,n) ou plotseq(f(t),t=a,n) permet de visualiser les n premiers termes d’une suite récurrente définie par :
u0=a, un=f(un−1)
On tape :

plotseq(sqrt(1+x),3,5)

On obtient :

Le dessin de y=sqrt(1+x), de y=x et des 5 premiers termes de la suite u_0=3 et u_n=sqrt(1+u_(n-1))

3.19  Le champ des tangentes : plotfield fieldplot

On tape :

plotfield(4*sin(t*y),[t=0..2,y=-3..7])

On obtient :

Des segments de pente 4*sin(t*y) sont tracés en différents points. Ces segments représentent les vecteurs tangents dirigés selon les t croissants et dont l’origine est le point de contact

On tape :

plotfield(4*sin(t*y),[t=0..2,y=-3..7],normalize, xstep=0.7,ystep=0.7))

On obtient :

Des segments de longueur 1 et de pente 4*sin(t*y) qui représentent les tangentes au point situé en leur milieu. Ces points espacés de 0.7

On tape :

plotfield(5*[-y,x],[x=-1..1,y=-1..1])

On obtient :

Des vecteurs [-y,x] sont tracés aux points (x,y). Ces vecteurs représentent des vecteurs tangents en leur origine aux courbes solutions du système x(t)′=-y,y(t)′=x. Ils sont dirigés selon les t croissants.

On tape :

plotfield(5*[-y,x],[x=-1..1,y=-1..1],normalize)

On obtient :

Des segments de longueur 1 et de pente -y/x qui représentent les tangentes au point situé en leur milieu aux courbes solutions du système x(t)′=-y,y(t)′=x.

3.20  Tracé de solutions d’équation différentielle : plotode odeplot

On tape :

plotode(sin(t*y),[t,y],[0,1])

On obtient :

Le graphe de la solution de y’=sin(t,y) passant par le point (0,1) est tracé

On tape :

S:=odeplot([h-0.3*h*p, 0.3*h*p-p], [t,h,p],[0,0.3,0.7])

On obtient le graphe dans l’espace de la solution de

[h,p]′=[h−0.3 h p, 0.3 h pp]    [h,p](0)=[0.3,0.7] 

Pour avoir le graphe dans le plan, on ajoute l’option plan ou plane

S:=odeplot([h-0.3*h*p, 0.3*h*p-p], [t,h,p],[0,0.3,0.7],plan)

Pour visualiser les valeurs de la solution, se reporter à la section 4.3.5

3.21  Tracé interactif des solutions d’équation différentielle : interactive_plotode interactive_odeplot

interactive_plotode(f(t,y),[t,y]) trace le champ des tangentes de l’équation différentielle y′=f(t,y) dans l’écran DispG et
interactive_plotode(f(t,y),[t=a...b,y]) trace le champ des tangentes pour t allant de a à b de l’équation différentielle y′=f(t,y) dans l’écran DispG.
Lorsqu’on clique sur un point, on obtient le tracé de la solution de y′=f(t,y) passant par ce point.
On peut faire autant de tracés que l’on veut (un tracé se fait chaque fois que l’on clique sur un point avec la souris). On termine les tracés en tapant sur la touche Esc ou Echap.
On peut aussi spécifier, comme dans plotfield, que le champ des tangentes soit de norme 1 avec l’option normalize. Attention Si on ne veut pas de superposition avec les dessins faits auparavant, il ne faut pas oublier de taper ClrGraph, avant d’utiliser interactive_plotode, pour effacer l’écran DispG. On tape :

interactive_plotode(-y+x+1,[x=-4..4,y])

On obtient :

Le champ des tangentes est tracé ainsi que la solution de y’=sin(t,y) passant par le point qui a été cliqué avec la souris

IL se trouve que l’on sait résoudre cette équation : les solutions sont y(x)=C*exp(-x)+x et on peut donc vérifier...
On tape :

interactive_plotode(sin(t*y),[t=-4..4,y])

On obtient :

Le champ des tangentes est tracé ainsi que la solution de y’=sin(t,y) passant par le point qui a été cliqué avec la souris

On tape :

interactive_plotode(sin(t*y),[t=-4..4,y],normalize)

On obtient :

Le tracé du champ des tangentes avec une norme égale à 1 et le graphe de la solution de y’=sin(t,y) passant par le point qui a été cliqué avec la souris

3.22  Tracé interactif des solutions d’équation différentielle dans un niveau de géométrie : plotfield fieldplot et plotode odeplot

Dans un niveau de géométrie, le menu Graphe->Slopefield/Ode(2d) ouvre une boite de dialogues qui demande :

Lorsqu’on appuie sur OK, l’écran de géométrie est en mode plotode et si l’on a coché Field, le champ des tangentes apparait et la commande correspondante s’inscrit au niveau suivant de l’écran de géométrie, par exemple :

plotfield(sin(t*y),[t=-5.7..5.7,y=-5.7..5.7],normalize, xstep=0.7,ystep=0.7)

Si on a coché Field et ||=1, et que y′=sin(t*y).
Ensuite, il suffit de cliquer en différents points de lécran de géométrie pour avoir les tracés des solutions passant par ces points et les commandes correspondantes stockées dans une variable, par exemple :

A:=plotode(sin(t*y),[t,y],point(-2.863,1.327),plan)

Pour terminer, il suffit de changer de mode, par exemple passer en mode Repere. Il faut noter que le mode plotode n’est pas accessible directement : on doit réouvrir la boite de dialogue avec le menu Graphe->Slopefield/Ode(2d).
Si on trouve que le champ des tangentes est génant, on peut le supprimer facilement en supprimant le niveau correspondant à sa commande.

3.23  Faire une animation en 2-d, 3-d ou "4D"

Xcas permet d’animer des graphes en 2-d, 3-d ou "4D" en calculant une fois pour toute une suite d’objets graphiques et en affichant chaque objet de la sequence en boucle.

Chapitre 4  Calcul numérique

4.1  Codage des réels et des décimaux

Voici comment sont codées les nombres réels lorsque le nombre de chiffres significatifs demandés est inférieur ou égal à 16 (par exemple Digits:=15).
On écrit d, un nombre réel ou décimal, sous la forme :
d=2α(1+m) avec 0<m<1 et −210<α≥ 210.
On utilse 64 bits pour représenter ce nombre :

Codage de 2α :
α=0 est codé 011 1111 1111
α=1 est codé 100 0000 0000
α=4 est codé 100 0000 0011
α=5 est codé 100 0000 0100
α=−1 est codé 011 1111 1110
α=−4 est codé 011 1111 1011
α=−5 est codé 011 1111 1010
α=210 est codé 111 1111 1111
α=2−10−1 est codé 000 0000 0000.

Remarque
2−52=0.2220446049250313e−15

4.2  Évaluation des réels : evalf approx et Digits

On peut évaluer une expression numérique grâce à la commande evalf ou approx.
Avec un deuxième argument n, on peut spécifier le nombre de chiffres après la virgule (si n<Min(13,Digits)) ou le nombre de chiffres significatifs (si n>14)en mettant ce nombre comme deuxième argument ce qui a l’avantage de ne pas modifier la case Chiffres de la configuration du CAS.
Attention !

On tape :

evalf(sqrt(2))

On obtient, si dans la configuration du cas (menu Cfg) on a choisit Chiffres=7 (ou si on a tapé Digits:=7) :

1.414214

On tape :

evalf(sqrt(2),3)

On obtient :

1.414

On tape :

evalf(sqrt(2),10)

On obtient :

1.414214

On obtient toujours, si dans la configuration du cas (menu Cfg) on a choisit Chiffres=7 (ou si on a tapé Digits:=7) :

1.414214

On tape :

evalf(sqrt(2))-1.414214

On obtient toujours, si dans la configuration du cas (menu Cfg) on a choisit Chiffres=7 (ou si on a tapé Digits:=7) :

-4.376269e-07

ce qui montre que Xcas fait les calculs avec 14 chiffres significatifs.
Par contre si on tape :

evalf(sqrt(2),3)-1.414214

On obtient :

-0.000214

ce qui montre que evalf(sqrt(2),3) est le nombre 1.414 et Xcas fait les calculs avec 14 chiffres significatifs.
On tape :

evalf(sqrt(2),20)

On obtient, si dans Configuration du CAS (menu Cfg) on a choisit chiffres=7 (7 représente le nombre de chiffres significatifs) :

1.41421356237309504880

et cela n’a pas modifié la configuration du CAS.
On peut changer le nombre de chiffres significatifs avec la variable DIGITS ou Digits.
On tape :

DIGITS:=20

Cela a pour effet de changer Configuration du CAS et de mettre 20 dans la case Chiffres.

evalf(sqrt(2))

On obtient 20 chiffres après la virgule :

1.41421356237309504880

Notation : Le nombre réel 10−4 est un nombre exact alors que 1e−4 est un nombre approché.
On tape :

evalf(10^-5)

On obtient :

1e-05

On tape :

evalf(10^15)

On obtient :

1e+15

On tape :

evalf(sqrt(2))*10^-5

On obtient :

1.41421356237e-05

Remarques On tape :

DIGITS:=20
a:=evalf(sqrt(2))

On obtient :

1.41421356237309504880

On tape :

evalf(a,10)

On obtient :

1.4142135624

On tape :

evalf(sqrt(2),10)

On obtient :

1.414213562373

On tape :

DIGITS:=10
b:=evalf(sqrt(2))

On obtient :

1.414213562

On tape :

evalf(b,10)

On obtient :

1.414213562

On tape :

evalf(sqrt(2),10)

On obtient :

1.414213562

4.3  Quelques fonctions

4.4  Résolution d’équations avec nSolve

nSolve permet de résoudre numériquement des équations non polynomiales : f(x)=0 pour x ∈ ]a,b[ (nSolve est une commande compatible ti).
Les paramètres de nSsolve sont f(x)=0, x, ou x=x0x0 est un point de ]a,b[.
On tape :

nSolve((cos(x))=x,x)

On obtient soit :

0.739085133215

soit une solution complexe :

-9.10998745394-2.95017086176*i

En effet, si on ne précise pas la valeur qui démarre l’itération, Xcas démarre l’itération avec une valeur aléatoire réelle ou complexe.
On vérifie :
cos(-9.10998745394-2.95017086176*i)=-9.10998745394-2.95017086176*i
On tape :

nSolve((cos(x))=x,x=0)

On obtient :

0.739085133215

4.5  Résolution d’équations avec fsolve

fsolve permet de résoudre numériquement des équations non polynomiales : f(x)=0 pour x ∈ ]a,b[.
On peut utiliser différents algorithmes pour résoudre numériquement f(x)=0 pour x ∈ ]a,b[.
Les paramètres de fsolve sont f(x)=0, x, a..b ou selon les méthodes un point x0 de ]a,b[ et le nom de la méthode utilisée.
Les différentes méthodes sont détaillées ci dessous.

4.6  Résolution des systèmes d’équations avec fsolve

On propose six méthodes pour résoudre numériquement des systèmes d’équations de la forme f(x)=0.
Trois méthodes utilisent la matrice jacobienne f′(x) et leurs noms se terminent par j_solver.
Les trois autres méthodes utilisent des méthodes d’approximation de f′(x) et utilisent uniquement f.
Les six méthodes utilisent une itération de type Newton :
xn+1=xnf′(xn)−1*f(xn).
Les quatre méthodes hybrid*_solver utilisent aussi une méthode de descente de gradient lorsque l’itération Newtonienne donne un pas trop grand.
La longueur du pas est calculé sans facteur d’échelle pour hybrid_solver et hybridj_solver ou avec facteur d’echelle (calculé à partir de f′(xn)) pour hybrids_solver et hybridsj_solver

4.7  Racines numériques d’un polynôme : proot

proot a comme argument un polynôme ou le vecteur de composantes les coefficients d’un polynôme (par ordre décroissant).
proot renvoie un vecteur dont les composantes sont les racines numériques non multiples du polynôme.
Pour chercher les racines numériques de P(x)=x3+1, on tape :

proot([1,0,0,1])

ou on tape :

proot(x^3+1)

On obtient :

[0.5+0.866025403784*i,0.5-0.866025403784*i,-1.0]

On tape pour avoir les racines numériques de x2−3 :

proot([1,0,-3])

ou :

proot(x^2-3)

On obtient :

[1.73205080757,-1.73205080757]

4.8  Factorisation numérique d’une matrice : cholesky qr lu svd

Pour avoir les factorisations numériques de :

d’une matrice, on se repotera à la section 6.49.

Chapitre 5  Les unités et les constantes physiques

Les constantes physiques (sous-menu Constante), les fonctions de conversion (sous-menu Unit_convert), les préfixes (sous-menu Unit_prefix) et les unités classées par thème, se trouvent dans le menu Phys.

5.1  Les unités

5.2  Les constantes physiques

Chapitre 6  Les fonctions de calcul formel

6.1  Les constantes symboliques : e pi infinity i euler_gamma

e ou %e désigne le nombre exp(1);
pi ou %pi désigne le nombre π.
infinity désigne ∞.
+infinity ou inf désigne +∞.
-infinity ou -inf désigne −∞.
i ou %i désigne le nombre complexe i.
euler_gamma désigne la constante d’Euler. On a :
euler_gamma=limit(sum(1/k,k,1,n)-ln(n),n,+infinity)=γ.

6.2  Les booléens

6.3  Évaluation des booléens : evalb

On peut évaluer une expression booléenne grâce à la commande evalb cette commande sert surtout pour la compatibilité Maple car en Xcas, les booléens sont toujours évalués.
On tape :

evalb(sqrt(2)>1.41)

Ou on tape :

sqrt(2)>1.41

On obtient :

1

On tape :

evalb(sqrt(2)>1.42)

Ou on tape :

sqrt(2)>1.42

On obtient :

0

6.4  Les opérateurs bit à bit

6.5  Les chaînes de caractères

6.6  Écriture en base b d’un entier

6.7  Les entiers (et les entiers de Gauss)

Dans tout ce paragraphe, on peut utiliser des entiers de Gauss (nombres complexes de la forme a+i*b avec a et b dans ℤ), à la place des entiers dans les différentes fonctions.

6.8  Analyse combinatoire

6.9  Les rationnels

6.10  Les réels

6.11  Les permutations

Une permutation p de longueur n est une bijection de [0..n−1] sur [0..n−1] et est représentée par la liste : [p(0),p(1),p(2)...p(n−1)].
Par exemple, la permutation p représentée par [1,3,2,0] est l’application de [0,1,2,3] sur [0,1,2,3] définie par : p(0)=1, p(1)=3, p(2)=2, p(3)=0.
Un cycle c d’ordre p est représenté par la liste [(a0,...,ap−1] (0≤ pn−1); c’est une permutation telle que :
c(ai)=ai+1 pour (i=0..p−2), c(ap−1)=a0 et c(ai)=ai (i=p+1..n).
Un cycle c est représenté par la liste et une décomposition en cycles par une liste de listes.
Par exemple, le cycle c représenté par la liste [3,2,1] est la permutation c définie par c(3)=2, c(2)=1, c(1)=3, c(0)=0 (qui est représenté en tant que permutation par la liste [0,3,1,2]).

6.12  Les complexes

Vous trouverez dans le menu Math (Cmplx) les fonctions ayant comme paramètre une expression à valeur complexe.
Remarque
Les nombres complexes sont utilisés pour représenter un point sur l’écran graphique : par exemple, le graphe de y=f(x) est l’ensemble des points x+i*f(x) pour x variant entre WX- et WX+ (WX- et WX+ sont initialisés avec le menu CfgConfiguration graphique).

6.13  Les expressions algébriques

6.14  Valeurs de un

6.15  Les fonctions infixées ou opérateur

Un opérateur est une fonction infixée.

6.16  Les fonctions et les expressions de variables symboliques

6.17  Les fonctions

6.18  Dérivation et variation

6.19  Intégration

6.20  Limites

6.21  Réécrire des expressions transcendantes et trigonométriques

6.22  Les expressions trigonométriques

6.23  Transformée de Fourier

6.24  Les Exponentielles et les Logarithmes

6.25  Les polynômes

6.26  Arithmétique des polynômes

Les polynômes sont représentés par des expressions ou par la liste de leurs coefficients par ordre de puissances décroissantes. Dans le premier cas la variable utilisée par défaut est x. Pour les polynômes à coefficients dans ℤ/nℤ, appliquez % n à l’expression ou à chaque coefficient de la liste.

6.27  Polynômes orthogonaux

6.28  Base et réduction de Gröbner

6.29  Les fractions rationnelles

6.30  Racines exactes d’un polynôme

6.31  Fraction rationnelle, ses racines et ses pôles exacts

6.32  Le calcul modulaire dans ℤ/pℤ ou dans ℤ/pℤ[x]

On peut faire des calculs modulo p c’est à dire dans ℤ/pℤ ou dans ℤ/pℤ[x] et la façon de s’y prendre dépends de la syntaxe choisie :

Remarque

6.33  Le calcul modulaire comme Maple dans ℤ/pℤ[x]

6.34  Développements limités et asymptotiques

6.35  Les intervalles

6.36  Les séquences

6.37  Les ensembles

6.38  La liste ou les coordonnées d’un vecteur

6.39  Fonctions utiles pour les vecteurs et les composantes d’un vecteur

6.40  Fonctions utiles pour les statistiques : mean moyenne, variance, stddev ecart_type, stddevp, stdDev, ecart_type_population, median, quantile, quartiles, boxwhisker, moustache

Voir aussi 6.43.32 and 7.
Fonctions utiles pour les statistiques dont les donn’ees sont des listes :

Soit A la liste [0,1,2,3,4,5,6,7,8,9,10,11].
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
On obtient :
11/2 pour mean(A)
sqrt(143/12) pour stddev(A)
0 pour min(A)
[1.0] pour quantile(A,0.1)
[2.0] pour quantile(A,0.25)
[5.0] pour median(A) ou pour quantile(A,0.5)
[8.0] pour quantile(A,0.75)
[9.0] pour quantile(A,0.9)
11 pour max(A)
[[0.0],[2.0],[5.0],[8.0],[11.0]] pour quartiles(A)
Voir aussi ces fonctions pour les matrices à la section 6.43.32 et pour les listes pondérées au chapitre 7.

6.41  Les tableaux indicés par des chaînes : table

Une table est une liste indicée par quelque chose de plus général que des entiers.
Une table peut être utilisée, par exemple, pour stocker des numèros de téléphone indicés par des noms.
Dans Xcas, les indices d’une table peuvent être n’importe quels objets de Xcas. L’accés se fait par un algorithme qui trie par type puis utilise l’ordre de chaque type (par exemple < pour le type numérique, l’ordre lexicographique pour les chaines etc...).
table a comme argument une liste ou une séquence d’égalité de la forme nom_de_l’index=valeur_de_l’élément.
table renvoie cette table.
On tape :

T:=table(3=-10,"a"=10,"b"=20,"c"=30,"d"=40)

On tape :

T["b"]

On obtient :

20

On tape :

T[3]

On obtient :

-10

Exemple On veut coder les lettres "a","b",.."z" par 1,2,....26.
On tape :
alphab:="abcdefghijklmnopqrstuvwxyz";
puis :
code:=table(seq(alphab[j]=j+1,j=0..25));
On tape code["c"]
On obtient 3
ou bien on écrit une fonction :

Code(a):={
local code,alphab,j;
alphab:="abcdefghijklmnopqrstuvwxyz";
code:=table(seq(alphab[j]=j+1,j=0..25));
return code(a);
};

On tape Code("c")
On obtient 3
Remarque
Si on fait une affectation du type T[n]:= ...T est le nom d’une variable et n un entier

6.42  Les matrices particulières

Une matrice est representée par une liste de listes de même lonqueur. Dans les réponses de Xcas, les matrices sont parenthésées avec []. Par exemple, [1,2,3] désigne la matrice [[1,2,3]] qui a une seule ligne, alors que [1,2,3] désigne la liste [1,2,3].
Dans ce document, on utilise la notation habituelle ( [[1,2,3]]) pour les matrices renvoyées comme réponses.

6.43  Création et arithmétique des matrices

6.44  Algèbre linéaire

6.45  Programmation linéaire

6.46  Les différentes norme d’une matrice

6.47  Réduction des matrices

6.48  Les isométries

6.49  Factorisation des matrices

La factorisation des matrices renvoie en général des matrices numériques et quelquefois des matrices symboliques.

6.50  Les formes quadratiques

6.51  Les expressions de plusieurs variables

6.52  Équations

6.53  Les systèmes linéaires

Dans tout ce paragraphe, on appelle "matrice augmentée" du système A*X=B la matrice formée par la matrice A bordée à droite par le vecteur colonne B ("matrice augmentée" du système A*X=B=border(A,tran(B))).

6.54  Les équations différentielles

Pour le calcul numérique de solutions déquations différentielles on se reportera à odesolve et pour la représentation graphique de solutions déquations différentielles on se reportera à plotfield, plotode, interactive_plotode.

6.55  Transformée en z et transformée en z inverse

6.56  Autres fonctions

Chapitre 7  Les fonctions de statistique

7.1  Les fonctions de Xcas de statistique à 1 variable

On va décrire les différentes fonctions statistiques sur un exemple :
avec la liste A:=[0,1,2,3,4,5,6,7,8,9,10,11]
- en prenant comme série statistique d’effectif 1 la liste A, ou
- en prenant comme série statistique la liste A avec comme effectifs encore la liste A.
On tape :
A:=[0,1,2,3,4,5,6,7,8,9,10,11]
On pourra se reporter aussi à 6.40 lorsque les arguments sont des listes et à 6.43.32 lorsque les arguments sont des matrices.

7.2  Les fonctions statistiques à 2 variables

On continue à utiliser la liste A dans les exemples.
On tape :

A:=[0,1,2,3,4,5,6,7,8,9,10,11]

7.3  Les fonctions aléatoires de Xcas

7.4  Les fonctions de répartition et leurs inverses

Chapitre 8  Les fonctions de programmation

8.1  La forme d’une fonction, d’un programme et d’un script

8.2  Exécuter une fonction pas à pas

On peut exécuter une fonction pas à pas, en utilisant le debuggeur :
on se sert de l’instruction debug qui permet d’exécuter la fonction pas à pas. On a alors la possibilité de voir l’évolution des variables de son choix (on se reportera pour plus de détails à la section 8.7).

8.3  La séquence d’instructions

Un bloc d’instructions ou une séquence d’instructions doit être parenthésé soit par {}, soit par begin et end.
Entre ces accolades (ou entre begin et end) on met les instructions en les terminant par un point-virgule ;

8.4  Les instructions de base

8.5  Les autres instructions

8.6  D’autres instructions utiles

8.7  Le debuggeur

Chapitre 9  Les fonctions de géométrie 2-d

9.1  Généralités

Toutes les commandes graphiques faites dans une ligne d’entrée auront en réponse l’ouverture d’un écran graphique.
Les dessins de la géométrie 2-d se font en général dans un écran de géométrie 2-d qui est un écran graphique interactif muni d’un éditeur de commandes et d’une barre de menus (on ouvre un écran de géométrie 2-d avec Alt+g).
Les dessins faits dans un écran de géométrie 2-d sont interactifs : on peut définir des points et des segments avec la souris et modifier une figure en faisant bouger un de ses points avec la souris.

9.2  Les fonctions de base

9.3  Les attributs des objets graphiques

9.4  Comment définir un objet géométrique sans le tracer : nodisp

nodisp appliqué à une commande permet de ne pas afficher la réponse, même quand il s’agit d’une commande graphique.
On peut aussi terminer la commande par :; pour ne pas générer de réponse.
On tape :

C:=point(1+i)
cercle(C,sqrt(2))

On obtient :

Le point C d’affixe 1+i et le cercle de centre C et de rayon sqrt(2) sont tracés

On tape :

nodisp(C:=point(1+i))

Ou on tape :

C:=point(1+i):;

puis

cercle(C,sqrt(2))

On obtient :

Seul le cercle de centre 1+i et de rayon sqrt(2) est tracé

9.5  Comment définir et tracer sans nom, un objet géométrique

nodisp permet de définir un objet géométrique sans le tracer. On peut ensuite tracer l’objet en mettant comme commande son nom, mais alors, son nom n’apparaitra pas sur la figure.
On peut aussi définir un objet géométrique et utiliser eval. On tape :

nodisp(C:=point(1+i))

Ou on tape :

C:=point(1+i):;

puis on tape :

C

Ou on tape :

eval(C:=point(1+i))

On obtient :

Le point 1+i est marqué d’une croix mais il n’a pas de nom

9.6  Comment définir et tracer un objet géométrique avec son nom

L’affectation d’un objet géométrique dans une variable permet de définir cet objet géométrique et de le tracer avec une légende ayant comme nom, le nom de la variable.
Si on veut donner à cet objet géométrique un nom différent de celui de la variable, on peut définir l’objet géométrique avec une affectation qui se termine par :; et utiliser legende. Voici des exemples : On tape :

nodisp(B:=point(1+i))

Ou on tape :

B:=point(1+i):;

Le point B est défini mais n’est pas tracé.
puis on tape :

legende(B,"Bien")

Ou on tape :

point(affixe(B),legende="Bien")

On obtient :

Le point 1+i est marqué d’une croix et a comme nom "Bien"

Remarque
Si on veut définir l’objet géométrique sans le tracer, puis le faire apparaitre avec son nom, on peut aussi utiliser eval (voir la commande eval6.13.1).
On tape :

nodisp(B:=point(1+i))

Ou on tape :

B:=point(1+i):;

Le point B est défini mais n’est pas tracé.
puis on tape :

B:=eval(B,1))

Ou on tape :

B:=B

Ou on tape :

legende(B,"B")

Ou on tape :

point(affixe(B),legende="B")

On obtient :

Le point 1+i est marqué d’une croix et a comme nom "B"

Si on tape :

B:=eval(B,2))

On obtient :

Le point 1+i est marqué d’une croix et n’a pas de nom

9.7  Comment lire et créer une image

9.8  Comment faire une démonstration : assume

Pour pouvoir faire une démonstration en géométrie, il suffit de demander au calcul formel de faire les calculs, en choisisant bien les paramètres du problème et ces paramètres doivent être formels....En géométrie les points peuvent avoir des coordonnèes exactes ou numériques ou formelles. Mais pour faire une figure, il faut affecter les paramètres formels. On peut le faire de différentes façons :

9.9  Les points en géométrie plane

9.10  Les droites en géométrie plane

9.11  Les triangles

Pour les dessins dans l’espace voir la section 10.7

9.12  Les quadrilatères

Voir aussi : 10.7.1 pour la géométrie 3-d.
Pour les dessins dans l’espace voir la section 10.8

9.13  Les polygones

Voir aussi : 10.9 pour la géométrie 3-d.

9.14  Les cercles

9.15  Les coniques

9.16  Les mesures

9.17  Les mesures

9.18  Les transformations

9.19  Les propriétés

9.20  La division harmonique, pôles et polaires

9.21  Les lieux et les enveloppes

Chapitre 10  Les fonctions de géométrie 3-d

10.1  Généralités

Les graphes ou les dessins de la géométrie 3-d se font dans un écran graphique 3-d qui s’ouvre automatiquement en réponse d’une commande graphique 3-d.
Les dessins de la géométrie 3-d se font en général dans un écran de géométrie 3-d qui est un écran graphique muni d’un éditeur de commandes et d’une barre de menus at que l’on ouvre avec Alt+h.
Si on clique dans la fenêtre graphique avec la souris, en dehors du parallélépipéde servant à la représentation, on peut faire tourner les axes x, y ou z, soit avec les touches x, X, y, Y, z, Z, soit en bougeant la souris sans relacher son bouton. Cela modifie l’axe de vision (axe passant par l’observateur et de vecteur directeur la direction de la visée de l’objet) et le plan de vision (plan perpendiculaire à l’axe de vision dont l’équation est inscrite en haut de l’écran). Le plan de vision est matérialisé par son intersection avec le parallélépipéde servant à la représentation, ces droites d’intersection sont dessinée en pointillé.
On peut aussi translater le plan de vision, le long de l’axe de vision grâce à la molette de la souris : les plans successifs sont obtenus par une translation de vecteur parallèle à l’axe de vision.
On peut se servir d’attributs pour faire une représentation graphique 3-d comme la couleur, l’épaisseur, les lignes en pointillé pour cela voir 9.3. Mais, les points ont toujours la forme d’un carré et il faut mettre une epaisseur d’au moins 3 si on veut le voir (point_width=3).
On peut faire des dessins en perspective ou en repère orthonormé (en cochant Proj_ortho dans la configuration graphique (bouton cfg), les surfaces sont transparentes ou non et peuvent être éclairées par 8 spots que l’on peut placer en diffèrents endroits repérés par leur coordonnées homogènes (on configure ses spots avec les boutons l0,l1..l7 situés dans la configuration graphique).
Ces dessins sont interactifs : on peut faire bouger, avec la souris, les points situés dans le plan de vision, et aussi déplacer ces points, avec la molette de la souris, sur une parallèle à l’axe de vision .

À noter que l’on peut aussi faire un zoom-in ou un zoom-out à l’aide des boutons in et out (voir 3.4).

Si dans la configuration du graphique, on coche hidden3d, la surface sera tracée sans dessiner les lignes qui sont cachées et si on veut voir les lignes cachées on décoche hiden3d (voir aussi 1.6.2).
Pour la traduction Latex de l’écran 3-d on se reportera à la section 1.10.5.

10.2  Les angles d’Euler

Les angles d’Euler sont utilisés pour modifier le repère de visualisation. Rappel Soient deux repères : l’ancien (Oxyz) et le nouveau (OXYZ).
Soit Ou l’intersection du plan (OY,OZ) avec le plan (Ox,Oz) que l’on oriente arbitrairement.
Soient :

On définit complètement la mise en place de (OXYZ) par rapport à (Oxyz) en donnant les angles a,b,c de (OXYZ) par rapport à (Oxyz) et en effectuant la composition de ces trois rotations : Rc@Rb@Ra.
Les angles d’Euler sont :
a=(Oz,Ou),
b=(Ov,OX),
c=(Ou,OZ).

Les dessins de la géométrie 3-d se font en choissisant comme repère Oxyz, Ox horizontal dirigé vers la droite, Oy vertical dirigé vers le haut et l’axe des z qui pointe vers vous.
Les mesures en degré de a,b,c sont mises dans ry,rz,rx.
Selon l’orientation de Ou, les valeurs de a,b,c ne sont pas uniques :
a,b,c et a+180,180−b,c+180 mettent en place le même repère OXYZ,
Lorsque b est un angle droit, c’est à dire que l’axe OX et l’axe Oy ont le même support on n’a pas non plus unicité:
a,90,c et a+c,90,0 mettent en place le même repère OXYZ et
a,−90,c et ac,−90,0 mettent en place le même repère OXYZ.
On peut donc choisir, l’angle b dans ]−90,90[ et les angles a et c dans ]−180,180] ou bien b dans −90,90 c=0 et a dans ]−180,180].

10.3  Les axes

10.4  Les points

10.5  Les lignes

10.6  Les plans

10.7  Les triangles dans l’espace

Le principe est de rajouter, si necessaire, un paramètre pour définir le plan du triangle et définir aussi l’orientation de ce plan. Pour la géométrie plane voir 9.11.

10.8  Les quadrilatères dans l’espace

Voir aussi : 9.12 pour la géométrie plane.
Le principe est de rajouter si necessaire un paramètre pour définir le plan du quadrilatère et définir aussi l’orientation de ce plan.

10.9  Les polygones dans l’espace

Voir aussi : 9.13 pour la géométrie plane.
Le principe est de rajouter si necessaire un paramètre pour définir le plan du polygone et définir aussi l’orientation de ce plan.

10.10  Les cercles dans l’espace : circle cercle

Voir aussi : 9.14.1 pour la géométrie plane.
cercle, en géométrie 3-d, a comme argument :

À noter que dans les 2 cas, le premier et le troisième argument peuvent être les coordonnées du point.
On tape :

cercle(point(0,0,1),point(0,1,0),point(0,2,2))

Ou on tape :

cercle([0,0,1],point(0,1,0),point(0,2,2))

Ou on tape :

cercle([0,0,1],point(0,1,0),[0,2,2])

On obtient :

Un cercle de diamètre les points [0,0,1] et [0,1,0] situés dans le plan x=0

On tape :

cercle(point(0,0,1),[0,1,0],point(0,2,2))

Ou on tape :

cercle([0,0,1],[0,1,0],point(0,2,2))

Ou on tape :

cercle([0,0,1],[0,1,0],[0,2,2])

On obtient :

Un cercle de centre [0,0,1] et passant par le point [0,1,1] (donc de rayon 1) situés dans le plan x=0

10.11  Les coniques dans l’espace

10.12  Les mesures

10.13  Les propriétés

10.14  Les transformations

10.15  Les surfaces

10.16  Les solides

10.17  Les solides de Platon

Pour les construire, on donne le centre, un sommet et un 3ème point définissant un plan de symétrie.
Pour accélerer les calculs, il peut être utile faire seulement des calculs approchés en utilisant evalf dans l’argument : on tapera, par exemple :
cube_centre(evalf([0,0,0],[3,2,1],[1,1,0]))

10.18  Figures et preuves d”exercices avec Xcas

Chapitre 11  Utilisation de giac à l’intérieur d’un programme

11.1  Utilisation dans un programme C++

On peut utiliser giac à l’intérieur d’un programme C++ en mettant au début du programme par exemple essai.cc :
#include<giac/giac.h>
puis en compilant le compilant avec :
c++ -g essai.cc -lgiac -lgmp
et en l’exécutant en mettant :
./a.out
Exemple

// -*- compile-command: "g++ -g pgcd.cc -lgiac -lgmp" -*-
#include <giac/giac.h>

using namespace std;
using namespace giac;

gen pgcd(gen a,gen b){
  gen q,r;
  for (;b!=0;){
    r=irem(a,b,q);
    a=b;
    b=r;
  }
  return a;
}

int main(){
  cout << "Entrer 2 entiers";
  gen a,b;
  cin >> a >> b;
  cout << pgcd(a,b) << endl;
  return 0;
} 

11.2  Pour définir de nouvelles fonctions de giac

On peut définir de nouvelles fonctions qui deviendront des fonctions de giac. Pour définir par exemple la fonction de nom pgcd ( et c’est l’instruction : const string _pgcd_s("pgcd"); qui définit le nom de la fonction), on tape :

 
// -*- mode:C++ ; compile-command: "g++ -I.. -fPIC -DPIC 
-g -c pgcd.cpp  -o pgcd.lo && ln -sf pgcd.lo pgcd.o && gcc 
-shared pgcd.lo -lc  -Wl,-soname -Wl,libpgcd.so.0 -o 
libpgcd.so.0.0.0 &&  ln -sf libpgcd.so.0.0.0 libpgcd.so.0 && 
 ln -sf libpgcd.so.0.0.0 libpgcd.so" -*-
using namespace std;
#include <stdexcept>
#include <cmath>
#include <cstdlib>
#include <giac/giac.h>
#include "pgcd.h"

#ifndef NO_NAMESPACE_GIAC
namespace giac {
#endif // ndef NO_NAMESPACE_GIAC

  gen pgcd(gen a,gen b){
    gen q,r;
    for (;b!=0;){
      r=irem(a,b,q);
      a=b;
      b=r;
    }
    return a;
  }
  gen _pgcd(const gen & args){
    if ((args.type!=_VECT)||(args._VECTptr->size()!=2))
      setsizeerr();
    vecteur &v=*args._VECTptr;
    return pgcd(v[0],v[1]);
  }
  const string _pgcd_s("pgcd");
  unary_function_unary __pgcd(&_pgcd,_pgcd_s);
  unary_function_ptr at_pgcd (&__pgcd,0,true);
  

#ifndef NO_NAMESPACE_GIAC
} // namespace giac
#endif // ndef NO_NAMESPACE_GIAC

On compile avec la commande située après compile-command de l’en-tête du programme. Puis, pour l’insérer dans une session Xcas, il faut taper la commande insmod suivi du chemin absolu complet de la librairie, par exemple :
insmod("/home/user/giac-0.4.0/doc/en/libpgcd.so").
Cela suppose que le source de giac a été désarchivé dans le répertoire /home/user).


Ce document a été traduit de LATEX par HEVEA