Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
| Download
Project: Public Code
Views: 82

Fonctions mathématiques et équations différentielles

︠c2a533de-7958-44d6-9b30-8fe8e4fe1cd3is︠ %html <h3> Les fonctions Sages </h3> <p> Sage permet de définir simplement des fonctions mathématiques à l'aide d'expressions symboliques comme suit : </p>

Les fonctions Sages

Sage permet de définir simplement des fonctions mathématiques à l'aide d'expressions symboliques comme suit :

f(x) = x^2 plot(f) ︠64c94f7a-c68a-4229-92b3-b56456ffa870i︠ %html <p> Ces fonctions possède un certain nombre de méthodes (comme <code>integrate</code>, <code>derivative</code>, etc...) listées en utilisant la tapant f. et tabulation </p>

Ces fonctions possède un certain nombre de méthodes (comme integrate, derivative, etc...) listées en utilisant la tapant f. et tabulation

f.integrate(x) f.derivative(x)
x |--> 1/3*x^3 x |--> 2*x

En particulier, il est possible d'obtenir le développement de Taylor à l'ordre N d'une fonction à l'aide de la commande taylor.

Définissez une fonction non polynomial continue et dérivable en 0 (par exemple sin(x)). Affichez cette fonction ainsi que son développement limité à l'ordre 1,2 et 3 au voisinage de 0 (avec des couleurs différentes).

︠ddb8bc3d-9937-4ba9-b3e5-3d560bbcf8d7i︠ %html <h3> Résolution des équations </h3> <p> Sage permet notamment de résoudre de manière exacte de nombreuses équations. Dans l'exemple ci-après, on considère une fonction polynomial dont on cherche les racines. <strong>Executez cet exemple</strong>. </p>

Résolution des équations

Sage permet notamment de résoudre de manière exacte de nombreuses équations. Dans l'exemple ci-après, on considère une fonction polynomial dont on cherche les racines. Executez cet exemple.

f(x) = x**4-x**2-x-1 solve(f(x)==0,x) ︠77e761a7-08a0-46d8-8523-5091854c76aai︠ %html <p> La fonction <strong>solve</strong> renvoie la liste des solutions de notre équation. Il est également possible de résoudre des systèmes d'équations (même non linéaires) comme suit : </p>

La fonction solve renvoie la liste des solutions de notre équation. Il est également possible de résoudre des systèmes d'équations (même non linéaires) comme suit :

var('x1 x2 x3') solve([x1+x2-x3 == 0, x2-x3==-3*x1**2+x3, x3==6*x2-x1],x1,x2,x3) ︠37f4c599-d423-47e1-b68b-cf3d5870dfa0i︠ %html <p> <strong>Remarque :</strong> L'instruction initiale permet de définir symboliquement 'x1', 'x2' et 'x3' comme des inconnues. Elle est indispensable pour définir le système qu'on souhaite résoudre. </p> <p> <strong>Donner et résoudre un système permettant de trouver le (ou les) points d'intersections de 2 cercles définis par : <ol> <li> un cercle de centre (0,0) et de rayon 2 </li> <li> un cercle de centre (0.5,0.75) et de rayon 2.</li> </ol> Tracez ces deux cercles. </strong> </p>

Remarque : L'instruction initiale permet de définir symboliquement 'x1', 'x2' et 'x3' comme des inconnues. Elle est indispensable pour définir le système qu'on souhaite résoudre.

Donner et résoudre un système permettant de trouver le (ou les) points d'intersections de 2 cercles définis par :

  1. un cercle de centre (0,0) et de rayon 2
  2. un cercle de centre (0.5,0.75) et de rayon 2.
Tracez ces deux cercles.

︠50659547-8b12-40d5-ad95-6e0afd4261e5i︠ %html <p> <strong> Mêmes questions dans le cas où le 2ème cercle a pour centre (3,5) et le même rayon. Commentez la réponse donnée par Sage.</strong> </p>

Mêmes questions dans le cas où le 2ème cercle a pour centre (3,5) et le même rayon. Commentez la réponse donnée par Sage.

︠409dde01-d27b-42b6-86a4-c5c5ffa3120ei︠ %html <p> <strong> Mêmes questions dans le cas où le 2ème cercle devient une ellipse (trouvez l'équation sur internet). Tracez les deux courbes (le cercle et l'ellipse)</strong> </p>

Mêmes questions dans le cas où le 2ème cercle devient une ellipse (trouvez l'équation sur internet). Tracez les deux courbes (le cercle et l'ellipse)

︠cb475179-14bf-4710-b5a4-a9240e95daaci︠ %html <p> Par ailleurs, lorsque l'on cherche les solutions d'une équation de type $f(x,y)=0$, on peut utiliser <code>implicit_plot</code> et voir sa solution de façon graphique. </p>

Par ailleurs, lorsque l'on cherche les solutions d'une équation de type f(x,y)=0f(x,y)=0, on peut utiliser implicit_plot et voir sa solution de façon graphique.

var('y') f(x,y) = x^2 - y^2 implicit_plot(f,(x,-2,2),(y,-2,2)) ︠a3e643a8-24a1-4897-a789-dd5609ae499ci︠ %html <p> <strong>Utilisez <code>implicit_plot</code> pour afficher un cercle de rayon 1.</strong> </p>

Utilisez implicit_plot pour afficher un cercle de rayon 1.

︠78dd0027-4942-4df6-915b-dd6f7273f29bi︠ %html <p> Le logiciel sage permet également de résoudre des <strong>équations différentielles</strong>. <strong>Executez l'exemple ci-dessous</strong>. </p>

Le logiciel sage permet également de résoudre des équations différentielles. Executez l'exemple ci-dessous.

var('t') x = function('x',t) equation_differentielle = diff(x,t) == x sol = desolve(equation_differentielle,x,ics=[0,1]) print sol ︠5ec54e43-6726-4f6f-8c38-f743e6446caei︠ %html <p> Expliquons un peu cet exemple. Ici, on commence par déclarer une variable 't' et une fonction x dépendant de t. La fonction x(t) est ainsi définie symboliquement et on peut l'utiliser pour écrire notre équation différentielle. La fonction diff(x,t) permet de dériver x par rapport à t. Pour obtenir une dérivée d'ordre supérieur, il suffit d'écrire diff(x,t,2) pour l'ordre 2 par exemple. De plus, le terme <code>ics</code> correspond à la définition des conditions initiales (Initial ConditionS). La première valeur de la liste est la valeur initiale de $t$ et la seconde celle de $x(t)$. </p> <p> <strong>Résoudre l'équation différentielle $x^{''}(t) = 3x(t)-4$ avec comme condition initial $x(t=0)=1$ et $x'(t=0)=0$. </p>

Expliquons un peu cet exemple. Ici, on commence par déclarer une variable 't' et une fonction x dépendant de t. La fonction x(t) est ainsi définie symboliquement et on peut l'utiliser pour écrire notre équation différentielle. La fonction diff(x,t) permet de dériver x par rapport à t. Pour obtenir une dérivée d'ordre supérieur, il suffit d'écrire diff(x,t,2) pour l'ordre 2 par exemple. De plus, le terme ics correspond à la définition des conditions initiales (Initial ConditionS). La première valeur de la liste est la valeur initiale de tt et la seconde celle de x(t)x(t).

Résoudre l'équation différentielle x(t)=3x(t)4x^{''}(t) = 3x(t)-4 avec comme condition initial x(t=0)=1x(t=0)=1 et x(t=0)=0x'(t=0)=0.

︠03349ddf-8dfc-4246-9bec-532ebd08ef2dis︠ %html <p> Nous propopns dans ce petit exercice de résoudre le problème suivant : une masse est accrochée à un ressort selon le schéma suivant </p> <p> |Mur|--/\/\/\/\/\--($M$) </p> <p> On note x(t) la possition de la masse à l'instant t. Le ressort a les caractéristiques suivantes : <ul> <li> il est au repos lorsque la masse est à une distance $d>0$ du bord</li> <li> et il possède une raideur $k>0$ </li> </ul> L'équation modèle vérifiée par $x(t)$, en supposant que la masse glisse parfaitement, est : $x^{''}(t) = -k(x(t)-d)$ </p> <p> <strong>Résoudre cette équation et afficher la solution. À l'aide de la commande <code>animate</code>, affichez une animation simple permettant de voir la masse (dessinée par exemple par un cercle) bouger au cours du temps. Pour les paramètres, prendre $d=1$ et $k=1$.</strong> </p>

Nous propopns dans ce petit exercice de résoudre le problème suivant : une masse est accrochée à un ressort selon le schéma suivant

|Mur|--/\/\/\/\/\--(MM)

On note x(t) la possition de la masse à l'instant t. Le ressort a les caractéristiques suivantes :

  • il est au repos lorsque la masse est à une distance d>0d>0 du bord
  • et il possède une raideur k>0k>0
L'équation modèle vérifiée par x(t)x(t), en supposant que la masse glisse parfaitement, est : x(t)=k(x(t)d)x^{''}(t) = -k(x(t)-d)

Résoudre cette équation et afficher la solution. À l'aide de la commande animate, affichez une animation simple permettant de voir la masse (dessinée par exemple par un cercle) bouger au cours du temps. Pour les paramètres, prendre d=1d=1 et k=1k=1.

︠ffc21f90-7263-4096-ac77-631cd1b8a67f︠ ︠4f92e2ac-4551-4baf-873a-836595c4a45ai︠ %html <h3> Simulation d'un système de $2$ masses oscillantes. </h3>

Simulation d'un système de 22 masses oscillantes.

Revenons à notre système Masse - Ressort et essayons d'aller plus loin. On se propose maintenant d'étudier le cas de 2 masses liées entres elles par deux ressorts comme représentée ci-dessous :

|Mur|--/\/\/\/\/\--(M_1)--/\/\/\/\/\--(M_2)

On note cette fois x1(t)x_1(t) et x2(t)x_2(t) les positions des masses M1M_1 et M2M_2. Les deux ressorts ont les caractéristiques suivantes :

  • le premier ressort à une raideur k1k_1 et est au repos lorsque sa longueur est égale à d1d_1,
  • le second ressort à une raideur k2k_2 et est au repos lorsque sa longueur est égale à d2d_2.
Les équations vérifiées par x1x_1 et x2x_2 sont alors : {x1(t)=k1(x1d1)+k2(x2x1d2)$8pt]x2(t)=k2(x2x1d2)\begin{cases} x^{''}_1(t) = -k_1 (x_1-d_1)+ k_2 (x_2 - x_1 -d_2)$8pt] x^{''}_2(t) = -k_2 (x_2 - x_1 -d_2) \end{cases}

Pour résoudre ce système d'équations, nous allons procéder en plusieurs étapes :

  1. Nous allons le réécrire sous la forme d'un système différentiel d'ordre 11 en introduisant deux variables v1=x1v_1 = x_1' et v2=x2v_2 = x_2'
  2. Ensuite, on va définir une fonction F(X), où X=[x1,x2,v1,v2]X = [ x_1,x_2,v_1,v_2] tel que X(t)=F(X(t)) X'(t) = F(X(t)). Cette fonction F renvoie un vecteur de 44 éléments.
Définir une fonction python F qui prend en paramètre une liste de quatre variables X=[x1,x2,v1,v2]X = [x_1, x_2, v_1, v_2] et qui retourne X(t)=[x1,x2,v1,v2]X'(t) = [x_1',x_2',v_1',v_2'] selon les relations de l'équation différentielle.

k1=1; k2=1; d1 =1; d2 = 1; ︠6f74537b-dff2-4286-baf7-70764ecf06e9︠ ︠f06dde4e-ea81-45e6-b730-f1ed6655e639i︠ %html <p> Dans le modèle à une seule masse, nous avions effectué une <em>résolution exacte</em> de l'équation différentielle. C'est-à-dire que nous avions obtenu une formule pour $x(t)$. Pour ce nouveau modèle, nous allons faire une <em>résolution numérique</em> : nous allons calucler des valeurs de $x_1(t)$ et $x_2(t)$ à différents temps $t$ mais nous n'aurons pas de formule. </p> <p> Pour cela, on utilise la fonction <code>desolve_system_rk4</code> qui prend en paramètre un système d'équation différentielle de type : $$\begin{cases} a^{'}_1(t) = \dots \\[8pt] a^{'}_2(t) = \dots \\[8pt] a^{'}_3(t) = \dots \\[8pt] \dots\end{cases}$$ (Dans notre cas, le système porte sur quatre équations sur $x_1,x_2,v_1,v_2$) </p> <p> La fonction <code>desolve_system_rk4</code> prend en premier paramètre une liste contenant la <stron>partie droite</stron> du sytème d'équation et en second paramètre la liste des variables $[a_1,a_2,a_3, \dots]$. Il faudra aussi lui spécifier <code>ivar</code> la variable de dérivation ainsi que les conditions initiales $ics = (0,1,3,0,0)$ (la première valeur est la condition initiale en $t$). </p> <p> <strong>Avec la commande <code>desolve_system_rk4</code>, résoudre l'équation différentielle $X^{'}(t) = F(X)$ en prenant comme condition initiale $\left(t, x_1(0),x_2(0),v_1(0),v_2(0)\right)=(0,1,3,0,0)$.</strong> </p>

Dans le modèle à une seule masse, nous avions effectué une résolution exacte de l'équation différentielle. C'est-à-dire que nous avions obtenu une formule pour x(t)x(t). Pour ce nouveau modèle, nous allons faire une résolution numérique : nous allons calucler des valeurs de x1(t)x_1(t) et x2(t)x_2(t) à différents temps tt mais nous n'aurons pas de formule.

Pour cela, on utilise la fonction desolve_system_rk4 qui prend en paramètre un système d'équation différentielle de type : {a1(t)=$8pt]a2(t)=$8pt]a3(t)=$8pt]\begin{cases} a^{'}_1(t) = \dots $8pt] a^{'}_2(t) = \dots $8pt] a^{'}_3(t) = \dots $8pt] \dots\end{cases} (Dans notre cas, le système porte sur quatre équations sur x1,x2,v1,v2x_1,x_2,v_1,v_2)

La fonction desolve_system_rk4 prend en premier paramètre une liste contenant la du sytème d'équation et en second paramètre la liste des variables [a1,a2,a3,][a_1,a_2,a_3, \dots]. Il faudra aussi lui spécifier ivar la variable de dérivation ainsi que les conditions initiales ics=(0,1,3,0,0)ics = (0,1,3,0,0) (la première valeur est la condition initiale en tt).

Avec la commande desolve_system_rk4, résoudre l'équation différentielle X(t)=F(X)X^{'}(t) = F(X) en prenant comme condition initiale (t,x1(0),x2(0),v1(0),v2(0))=(0,1,3,0,0)\left(t, x_1(0),x_2(0),v_1(0),v_2(0)\right)=(0,1,3,0,0).

︠489cf2a0-8dc4-4d49-96f7-e2efb2ca9f12︠ ︠c43cdc5b-fabd-4697-ab41-0330c967830bi︠ %html <p> La fonction <code>desolve_system_rk4</code> renvoie la solution de notre équation calculée numériquement en une série de temps $t=[t_0,t_1,\cdots,t_n]$. On obtient ainsi une liste dont chaque élément est un tableau composé de $[t_i, x_1(t_i), x_2(t_i), v_1(t_i),v_2(t_i)]$. </p> <p> <strong>Affichez les solutions $x_1(t)$ et $x_2(t)$ obtenues (utilisez pour cela la commande <code>line2d</code> avec comme argument la liste des points $[t_i,x_1(t_i)]$). Comme précemment, créez une animation pour montrer le mouvement des deux masses au cours du temps.</strong> </p>

La fonction desolve_system_rk4 renvoie la solution de notre équation calculée numériquement en une série de temps t=[t0,t1,,tn]t=[t_0,t_1,\cdots,t_n]. On obtient ainsi une liste dont chaque élément est un tableau composé de [ti,x1(ti),x2(ti),v1(ti),v2(ti)][t_i, x_1(t_i), x_2(t_i), v_1(t_i),v_2(t_i)].

Affichez les solutions x1(t)x_1(t) et x2(t)x_2(t) obtenues (utilisez pour cela la commande line2d avec comme argument la liste des points [ti,x1(ti)][t_i,x_1(t_i)]). Comme précemment, créez une animation pour montrer le mouvement des deux masses au cours du temps.