JavaScript promise rejection: Loading CSS chunk katex failed. (error: https://grond.iut-fbleau.fr/assets/css/katex.41d5cba5.css). Open browser console to see more details.
2025-04-29 15:05:58 +02:00
..
2025-04-01 09:48:48 +02:00
2025-04-01 09:48:48 +02:00
2025-04-29 15:05:58 +02:00

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.

Lisez d'abord l'aide sur scilab.

Si vous avez des problèmes d'affichages, lancez scilab depuis la console avec

LIBGL_ALWAYS_SOFTWARE=1 /usr/bin/scilab

Exécuter sous Scilab.

Les commandes Scilab peuvent être tapées directement en ligne. Par exemple,

--> x = 1
--> A = ones(3,2);
--> x + A

Le caractère ; à la fin de la ligne indique si scilab affiche le résultat de la commande. Les commandes peuvent écrites dans un fichier *.sce.

  1. Enregistrez les instructions suivantes dans un fichier test.sce.
clc;clear;
A = rand(3,4)

Exécutez "le fichier" avec exec("test.sce").

  1. On peut définir des fonctions, et les placer dans un fichier :
// (commentaires en Scilab) Fonction carre.sci
function [res] = carre(x)
	res = x.*x
endfunction
  1. Faites exec("carre.sci"). La fonction carre est maintenant définie sous Scilab
--> x = carre ([0,1,2,3,4])
--> y = carre(x)
--> plot2d(x,y)

Calcul approché

Récupérez le fichier myF.sci qui définit la fonction suivante :

function [ y ] = myF( x )
	y = x;
	for i=1:50
	  y = sqrt(y);
	end
	for i=1:50
	  y = y.*y;
	end
endfunction
  1. Charger myF dans scilab, et calculer la fonction pour quelques valeurs.
  2. Que vaut en théorie la fonction myF ? Tracez-là sur [0,100].
  3. Tracez l'erreur en valeur absolue entre la fonction, et sa valeur théorique.

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 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.

  1. Récupérez le fichier 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.

  1. Tracez l'évolution de l'erreur :
erreur = pointFixeErreur(0.1)
plot2d(erreur)
  1. Récupérez le fichier pointFixeVitesseConvergence.sci qui définit la fonction
function [ ratio ] = pointFixeVitesseConvergence(x0)
	err = pointFixeErreur(x0);
	for i = 1:49
	 ratio(i) = ...
	end
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 if while for

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
    
  3. Tester avec

  x-\sin x - \frac{1}{4} = 0, \;\;x\in[\frac{1}{4},\frac{5}{4}]