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 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.
Rendez-vous sur 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 »
Cliquez sur le terminal entouré en rouge.
Vous êtes dans la console :
La flèche indique la zone de saisie. C'est là que vous allez pouvoir ajouter des commandes.
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$
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.
Essayez :
T := 4 omega := 2pi/T
L'affectation utilise:=, faites-y attention ;omegasera automatiquement compris comme le symbole $\omega$ ; l'expression pourra s'afficher différemment selon si fait une affectation ou non.
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.
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.
Il est possible de faire mieux en définissant la fonction $f$.
f(t):=piecewise(t<1,t,1)
Détaillons :
t<1, alors ce sera t,1Maintenant on peut calculer :
simplifier(integrer(f(t)*cos(n*omega*t),t,0,2))
Le résultat est satisfaisant.
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)
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)
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 dea(n)pournallant de1à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à !