Outils pour utilisateurs

Outils du site


bts:xcas:fourier_1

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
bts:xcas:fourier_1 [2023/10/04 13:46] – supprimée - modification externe (Date inconnue) 127.0.0.1bts:xcas:fourier_1 [2024/10/17 09:16] (Version actuelle) – [Simplification incomplète] goupillwiki
Ligne 1: Ligne 1:
 +====== 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.
 +
 +<WRAP tip>Je n'ai pas encore explicité ce qu'on entend par **calcul formel**. Cela va devenir évident dans la suite.</WRAP>
 +
 +===== Lancer la console =====
 +
 +Rendez-vous sur [[https://www.xcasenligne.fr/giac_online/demoGiacPhp.php|Xcas en ligne]].
 +
 +<WRAP tip>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 »</WRAP>
 +
 +{{ :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$
 +
 +<WRAP tip>
 +  * 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.
 +</WRAP>
 +
 +==== Calculs directs ====
 +
 +Essayez :
 +<code lang-none>
 +2pi/4
 +</code>
 +
 +> Dans ce cas, $\pi$ est reconnu et le symbole de multiplication est optionnel. Mais le résultat ne se simplifie pas.
 +
 +<code lang-none>
 +simplifier(2pi/4)
 +</code>
 +
 +> Le résultat est simplifié. Remarquez que les commandes sont traduites en français.
 +
 +==== Affectation ====
 +
 +Essayez :
 +<code lang-none>
 +T := 4
 +omega := 2pi/T
 +</code>
 +
 +> 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$
 +
 +<code lang-none>
 +integrer(t*cos(n*omega* t), t, 0, 1)
 +</code>
 +
 +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.
 +
 +<WRAP tip>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.</WRAP>
 +
 +Le résultat précédent semble compliqué. On voudrait simplifier :
 +
 +<code lang-none>
 +simplifier(integrer(t*cos(n*omega* t), t, 0, 1))
 +</code>
 +
 +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$.
 +
 +<code lang-none>
 +f(t):=piecewise(t<1,t,1)
 +</code>
 +
 +Détaillons :
 +  * si ''t<1'', alors ce sera ''t'',
 +  * sinon ce sera ''1''
 +
 +Maintenant on peut calculer :
 +
 +<code lang-none>
 +simplifier(integrer(f(t)*cos(n*omega*t),t,0,2))
 +</code>
 +
 +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 :
 +
 +<code>
 +assume(n, integer)
 +</code>
 +==== É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.
 +
 +<code lang-none>
 +a(n) := integrer(f(t)*cos(n*omega*t),t,0,2)
 +</code>
 +
 +On peut maintenant calculer, par exemple :
 +<code lang-none>
 +a(3)
 +</code>
 +
 +Il s'agit d'une valeur **exacte !**
 +
 +On peut évaluer :
 +<code lang-none>
 +evalf(a(3))
 +</code>
 +
 +> 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 :
 +<code lang-none>
 +evalf(a(3), 4)
 +</code>
 +
 +On peut aussi simplement arrondir, par exemple à 5 chiffres après la virgule :
 +<code lang-none>
 +round(a(3), 5)
 +</code>
 +
 +==== 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 :
 +<code lang-none>
 +seq(a(n), n, 1, 10)
 +</code>
 +
 +> 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.
 +
 +<code lang-none>
 +seq([n, a(n), round(a(n), 5)], n, 1, 10)
 +</code>
 +
 +Et voilà !
 +
 +
 +
 +
 +