diff --git a/num/tp1/README.md b/num/tp1/README.md index d4769c4..b37a56a 100644 --- a/num/tp1/README.md +++ b/num/tp1/README.md @@ -1,4 +1,4 @@ -# Fonctions et dérivées numériques +# TP1 : Fonctions et dérivées numériques > Lisez et testez les exemples du [guide pour débutant](../../scilab/Scilab_debutant_annot.pdf) de scilab diff --git a/num/tp2/README.md b/num/tp2/README.md new file mode 100644 index 0000000..78739ce --- /dev/null +++ b/num/tp2/README.md @@ -0,0 +1,142 @@ +# TP1 Calcul approché, résolution d'équation $f(x)=0$ +On s'interesse à la résolution numérique d'une équation $f(x)=0$, où de manière équivalente à +$g(x)=x$ avec $g(x)=f(x)+x$. + +## Méthode du point fixe +On cherche à résoudre l'équation +\[ + x - \cos x = 0, \,\, x\in [0,1] +\] + +Sous certaines hypothèses (cf TD), la suite définie par +\[ + \left\{\begin{array}{l} +x_0\in I \\ +x_{n+1} = g(x_n) +\end{array}\right. +\] +converge vers un point fixe de $g$. Ici, $g(x) = \cos x\,\, , \,x\in [0,1]$. + +1. Récupérez le fichier [pointFixe.sci](src/pointFixe.sci) définissant la fonction + ``` + function y = pointFixe(x0,n) + y = x0; + for i = 1:n + y = ... + end + endfunction + ``` + + Cette fonction prend en entrée `x0` une valeur initiale de la suite et `n` le nombre d'itérations. + La fonction doit retourner `y` valant $x_n$. + + Complétez le fichier, chargez la fonction, et vérifiez pour différentes valeurs + initiales de $[0,1]$ que la suite converge vers le même $l = \cos l$. Que vaut $l$ ? Normalement, + $l \approx 0.739085133215161$. + +2. Récupérez le fichier [pointFixeErreur.sci](src/pointFixeErreur.sci) définissant la fonction + +``` +function err = pointFixeErreur(x0) + for i=1:50 + y = pointFixe(x0,i) + err(i) = ... + end +endfunction +``` +Cette fonction prend en entrée `x0` une valeur initiale de la suite. Complétez la fonction pour que `err(i)` vale +$|e_i|$ l'erreur commise à l'étape $i$, en valeur absolue. + +3. Tracez l'évolution de l'erreur : +``` +erreur = pointFixeErreur(0.1) +plot2d(erreur) +``` + +3. Récupérez le fichier [pointFixeVitesseConvergence.sci](src/pointFixeVitesseConvergence.sci) qui définit la fonction +``` +function ratio = pointFixeVitesseConvergence(x0) + err = pointFixeErreur(x0); + ratio = // TODO +endfunction +``` + +Cette fonction prend en entrée `x0` une valeur initiale de la suite. Complétez le fichier pour que `ratio(i)` vale +$\frac{|e_{i+1}|}{|e_i|}$. + + +Chargez la fonction, et tracez le résultat. Vérifie-t'on que la méthode est d'ordre 1 ? + + +## Dichotomie +### Principe de la méthode +On se donne une fonction continue $f$ sur l'intervalle $[a,b]$ sur lequel $f$ +ne s'annule qu'une fois en changeant de signe. + +Pour trouver la solution, on divise l'intervalle $[a,b]$ en deux avec son milieu +\[ + m=\frac{a+b}{2} +\] + +Si $f(a)$ et $f(m)$ sont de même signe, la solution cherchée se trouve dans $[m,b]$, sinon +elle se trouve dans $[a,m]$. + +On itére alors la recherche dans le nouvel intervalle jusqu'à ce que sa longueur soit inférieur à une précision $\epsilon$ voulue. + +
+ +
+ +1. Écrire une fonction + ``` + function x = dichotomie(f,a,b,eps) + // f <-> fonction + // a,b <-> [a,b] intervalle de départ + // eps <-> valeur pour le test d'arret + // x <-> valeur approché de f(x)=0 + ``` +2. Tester avec + - la fonction de l'exercice précédent, + - $f(x)=x^2-2$ sur l'intervalle $[1,2]$. Comparer numériquement la solution approchée avec + la solution exacte, en faisant varier $\epsilon$. + - $g(x)=cos(x)-x^2$ sur l'intervalle $[0,1]$ +3. Modifier la fonction pour qu'elle renvoié le nombre d'itérations nécessaires. Tester avec +\[ + x-\sin x - \frac{1}{4} = 0, \;\;x\in[\frac{1}{4},\frac{5}{4}] +\] + +Aide Scilab +[function](https://help.scilab.org/docs/6.1.1/fr_FR/functions.html) +[if](https://help.scilab.org/docs/6.1.1/fr_FR/if.html) +[while](https://help.scilab.org/docs/6.1.1/fr_FR/while.html) +[for](https://help.scilab.org/docs/6.1.1/fr_FR/for.html) + + +## Méthode de la fausse position +### Principe de la méthode +On prend les même hypothèses que pour la dichotomie. La méthode consiste alors à diminuer l'intervalle +de recherche en considérant le point $c$ intersection de la corde aux extrémités de l'intervalle avec +l'axe des abscisses. + +
+ +
+ +1. Calculer $c$ en fonction de $f(a),f(b),a,b$ +2. Écrire une fonction + ``` + --> function [x,n]=fausse_position(f,a,b,eps) + // f <-> fonction + // a,b <-> [a,b] intervalle de départ + // eps <-> valeur pour le test d'arret + // x <-> valeur approché de f(x)=0 + // n <-> nombre d'itérations + ``` +4. Tester avec +\[ + x-\sin x - \frac{1}{4} = 0, \;\;x\in[\frac{1}{4},\frac{5}{4}] + \] + + + + diff --git a/num/tp2/img/Dichotomie.png b/num/tp2/img/Dichotomie.png new file mode 100644 index 0000000..b6c439c Binary files /dev/null and b/num/tp2/img/Dichotomie.png differ diff --git a/num/tp2/img/Regula_falsi_method.png b/num/tp2/img/Regula_falsi_method.png new file mode 100644 index 0000000..f9623a4 Binary files /dev/null and b/num/tp2/img/Regula_falsi_method.png differ diff --git a/num/tp2/img/pt_fixe.png b/num/tp2/img/pt_fixe.png new file mode 100644 index 0000000..33b58ca Binary files /dev/null and b/num/tp2/img/pt_fixe.png differ diff --git a/num/tp2/src/pointFixe.sci b/num/tp2/src/pointFixe.sci new file mode 100644 index 0000000..0cf4d05 --- /dev/null +++ b/num/tp2/src/pointFixe.sci @@ -0,0 +1,6 @@ +function y = pointFixe(x0,n) + y = x0; + for i = 1:n + y = // A completer + end +endfunction diff --git a/num/tp2/src/pointFixeErreur.sci b/num/tp2/src/pointFixeErreur.sci new file mode 100644 index 0000000..2138ffc --- /dev/null +++ b/num/tp2/src/pointFixeErreur.sci @@ -0,0 +1,6 @@ +function err = pointFixeErreur(x0) + for i=1:50 + y = pointFixe(x0,i) + err(i) = // A completer + end +endfunction diff --git a/num/tp2/src/pointFixeVitesseConvergence.sci b/num/tp2/src/pointFixeVitesseConvergence.sci new file mode 100644 index 0000000..c5ac212 --- /dev/null +++ b/num/tp2/src/pointFixeVitesseConvergence.sci @@ -0,0 +1,4 @@ +function ratio = pointFixeVitesseConvergence(x0) + err = pointFixeErreur(x0); + ratio = // TODO +endfunction