====== Calcul formel avec Xcas ======
===== Qu'est ce que Xcas =====
**giac** est une bibliothèque C++ de **calcul formel**. On peut l'utiliser de différentes façons.
**Xcas** est une interface pour utiliser giac. Nous allons par exemple utiliser la version [[https://www.xcasenligne.fr/giac_online/demoGiacPhp.php|Firefox de Xcas]] qui permet de travailler avec giac sans rien installer, juste avec le navigateur.
> Testé sur Firefox, Chrome, Chromium
On peut aussi installer Xcas comme application sur le téléphone. Par ailleurs, des calculatrices utilisent giac comme la TI-inspire ou la Numworks.
Je n'ai pas encore explicité ce qu'on entend par **calcul formel**. Cela va devenir évident dans la suite.
===== Lancer la console =====
Rendez-vous sur [[https://www.xcasenligne.fr/giac_online/demoGiacPhp.php|Xcas en ligne]].
Vous recevrez un popup demandant « //Restaurer la sauvegarde d'urgence ?// ». Cela permet de récupérer un travail antérieur. Pour l'instant nous n'avons rien fait donc cliquez « Annuler »
{{ :mm:xcas:accueil_xcas_en_ligne.png?direct&400 |}}
Cliquez sur le terminal entouré en rouge.
Vous êtes dans la console :
{{ :mm:xcas:console_xcas_en_ligne_1.png?direct&400 |}}
La flèche indique la zone de saisie. C'est là que vous allez pouvoir ajouter des commandes.
===== Exemple de calcul =====
Nous étudions une fonction $f$ paire, de période $T = 4$ et définie sur $[0\,;\,2]$ par $f(t) = \begin{cases}t\text{ si } 0 \leq t < 1\\1 \text{ si } 1 \leq t \leq 2\end{cases}$
On sait que $\omega = \dfrac{2\pi}{T}$
On voudrait calculer $a(n) = \displaystyle \int_0^2 f(t) \cos(n\omega t)\,dt,$ avec $n$ entier $>0$
* Dans ce qui suit, les commandes sont toujours écrites dans la console. Tapez //Entrée// pour exécuter la commande.
* Vous aurez parfois besoin de réécrire presque la même chose qu'une commande précédente. Vous pouvez utiliser la flèche ↑ pour rappeler cette commande.
* Si vous vous trompez, ce n'est pas grave. Pas besoin d'effacer l'erreur ou de recommencer dès le début. Réécrivez la commande corrigée dans une nouvelle ligne et continuez.
* S'il y a plusieurs commandes, entrez les l'une après l'autre en validant à chaque fois.
==== Calculs directs ====
Essayez :
2pi/4
> Dans ce cas, $\pi$ est reconnu et le symbole de multiplication est optionnel. Mais le résultat ne se simplifie pas.
simplifier(2pi/4)
> Le résultat est simplifié. Remarquez que les commandes sont traduites en français.
==== Affectation ====
Essayez :
T := 4
omega := 2pi/T
> L'affectation utilise '':='', faites-y attention ; ''omega'' sera automatiquement compris comme le symbole $\omega$ ; l'expression pourra s'afficher différemment selon si fait une affectation ou non.
==== Calcul d'intégrale ====
Commençons par le calcul de $\displaystyle \int_0^1 t\cdot \cos(n\omega t)dt$
integrer(t*cos(n*omega* t), t, 0, 1)
Détaillons les arguments de la fonction ''integrer'' :
* ''%%t*cos(n*omega* t)%%'' : c'est l'expression de ce qui est intégré, sans le $dt$.
* ''t'' : c'est la variable d'intégration. En gros, c'est le $dt$.
* ''0'' et ''1'' : ce sont les bornes d'intégration.
Maintenant vous devriez comprendre ce qu'est le calcul formel : on fait le calcul de façon exacte même s'il y a des symboles.
Le résultat précédent semble compliqué. On voudrait simplifier :
simplifier(integrer(t*cos(n*omega* t), t, 0, 1))
Mais le résultat n'est pas très satisfaisant. La simplification est automatique et elle ne prend pas toujours la forme que l'on préférerait.
==== Intégrale complète ====
Je vous rappelle que l'on voulait calculer $\displaystyle \int_0^2 f(t) \cos(n\omega t)\,dt$ avec $f(t) = \begin{cases}t\text{ si } 0 \leq t < 1\\1 \text{ si } 1 \leq t \leq 2\end{cases}$
Il faut donc calculer :
$$\displaystyle \int_0^1 t\cdot \cos(n\omega t)dt + \int_1^2 1\cdot \cos(n\omega t)dt$$
**Trouvez vous-même la bonne commande en vous inspirant de la précédente.**
> Pensez à simplifier, cette fois cela donne un bon résultat.
==== Définir la fonction ====
Il est possible de faire mieux en définissant la fonction $f$.
f(t):=piecewise(t<1,t,1)
Détaillons :
* si ''t<1'', alors ce sera ''t'',
* sinon ce sera ''1''
Maintenant on peut calculer :
simplifier(integrer(f(t)*cos(n*omega*t),t,0,2))
Le résultat est satisfaisant.
==== Simplification incomplète ====
giac simplifie une partie du calcul mais il ne voit pas certaines simplifications : on sait que $\sin(n\pi) = 0$. On pourrait donc simplifier ce terme.
Pourquoi giac ne le voit-il pas ?
giac ne sait pas que $n$ est un entier. $\sin(n\pi) = 0$ uniquement si $n$ est entier.
Il est possible d'indiquer que $n$ est un entier :
assume(n, integer)
==== Évaluer ====
On voulait calculer $a(n) = \displaystyle \int_0^2 f(t) \cos(n\omega t)\,dt$ et on aimerait calculer quelques valeurs et faire un tableau de valeur.
a(n) := integrer(f(t)*cos(n*omega*t),t,0,2)
On peut maintenant calculer, par exemple :
a(3)
Il s'agit d'une valeur **exacte !**
On peut évaluer :
evalf(a(3))
> f signifie **flottant**. C'est le terme informatique utilisé pour les nombres à virgules.
On peut préciser le nombre de chiffres significatifs désirés :
evalf(a(3), 4)
On peut aussi simplement arrondir, par exemple à 5 chiffres après la virgule :
round(a(3), 5)
==== Afficher une liste ====
On peut donc afficher la valeur de n'importe quel $a(n)$. On peut faire mieux : obtenir directement un tableau de valeurs :
seq(a(n), n, 1, 10)
> Calcul de ''a(n)'' pour ''n'' allant de ''1'' à ''10''
L'affichage n'est pas terrible. On voudrait un tableau avec la valeur de $n$ en face de $a(n)$ et de l'approximation de $a(n)$ à 5 chiffres.
seq([n, a(n), round(a(n), 5)], n, 1, 10)
Et voilà !