Matlab tp6 - analyse numérique avec matlab - télécharger pdf

Ce document, intitulé "MATLAB - TP n°6", constitue une ressource pédagogique essentielle destinée aux étudiants du Département de Mathématiques et Informatique de l'Université d'Alger 1.

Il propose une série d'exercices pratiques conçus pour développer les compétences en programmation et en résolution numérique de problèmes à l'aide de l'environnement MATLAB. Ce Travail Pratique aborde les concepts fondamentaux suivants :

  • La résolution d'équations et de systèmes d'équations (linéaires et non linéaires).
  • L'optimisation de fonctions sous diverses contraintes (linéaires, quadratiques, booléennes).
  • L'ajustement polynomial et la modélisation de données.

Chaque exercice est accompagné de son corrigé, favorisant ainsi l'autonomie et la compréhension.

Matlab tp6 - analyse numérique avec matlab - télécharger pdf

Travaux Pratiques MATLAB n°6

Ce document présente une série d'exercices pratiques en MATLAB, axés sur la résolution d'équations, l'optimisation et l'analyse de données, couvrant des fonctions clés comme fzero, fsolve, solve, fmincon, quadprog et polyfit.

Exercice 1

Soit à résoudre l'équation quadratique : x² + 2x = 1.

  1. Utiliser la fonction fzero pour trouver la première solution au voisinage de x = 1. Puis utiliser fzero une nouvelle fois pour trouver la deuxième racine au voisinage de x = -3.
  2. Utiliser la fonction fsolve pour trouver simultanément les deux racines sur l'intervalle [-3, 1].
  3. Utiliser la fonction solve pour trouver les racines de cette équation de manière symbolique.

Exercice 2

Trouver les racines des équations suivantes :

  1. x² - cos(x) = 0
  2. x² / (1 + x) = 0
  3. 10x (1 - e^x) = 0
  4. x⁴ - 8x³ + 18x² - 16x + 5 = 0

Exercice 3

Trouver le vecteur x qui minimise la fonction f(x) = -x1 * x2 * x3, en démarrant au point x = [10; 10; 10], et sujet aux contraintes : 0 ≤ x1 + 2x2 + 2x3 ≤ 72. Ce problème relève de l'optimisation sous contraintes.

Exercice 4

Soit le système d’équations non linéaires suivant :

x² + 2y = 10

x + y = 4

  1. Résoudre ce système à l'aide de la fonction fsolve en démarrant :
    1. à partir du point (1, 3)
    2. à partir du point (-1, 3)
  2. Après avoir déclaré des variables symboliques x et y, résoudre ce système en faisant appel à la fonction solve. Comparer les solutions obtenues en 1) et 2). Cette comparaison permet d'observer la différence entre la résolution numérique et symbolique.

Exercice 5

Résoudre le système d'équations non linéaires suivant :

exp(-exp(-(x1+x2))) - x2*(1+x1²) = 0

x1 * cos(x2) + x2 * sin(x1) - 0.5 = 0

Exercice 6

Reprendre le programme d'optimisation non linéaire du cours :

Minimiser f(x) = -2x1 * x2 - 5x3²

Avec les contraintes :

  • 3x1 + x2 + 4x3 ≤ 30
  • 5x1 + x3 ≤ 25

Puis invoquer cette fois-ci la fonction fmincon de la manière suivante :

>> [x, fx, ExitFlag, Output] = fmincon(func1, x0, A, b)

La fonction fmincon est utilisée pour l'optimisation non linéaire avec contraintes.

Exercice 7

Résoudre le programme quadratique suivant :

Minimiser g(x) = x1² + x1 * x2 + 2x2² + 2x3² + 2x2 * x3 + 4x1 + 6x2 + 12x3

Avec les contraintes :

  • x1 + x2 + x3 ≥ 6
  • -x1 - x2 + 2x3 ≥ 2
  • x1, x2, x3 ≥ 0

En utilisant :

  1. D'abord la fonction fmincon ;
  2. Puis en utilisant la fonction quadprog conçue spécialement pour les programmes quadratiques (consulter l'aide de la fonction quadprog pour plus de détails).

Exercice 8

Soit le programme linéaire booléen (les valeurs possibles des xi sont 0 ou 1 uniquement) ci-dessous. Retrouver les valeurs des variables x1, x2, x3, x4 qui minimisent la fonction f(x) tel que x1, x2, x3, x4 vérifient les 4 contraintes suivantes :

Minimiser f(x) = -5x1 - 2x2 + 5x3 - 7x4

Avec les contraintes :

  • 2x1 + 7x2 + 3x3 + x4 ≤ 5
  • x2 + x4 ≤ 0
  • x1 - x3 ≤ 1
  • x1 + x2 - x4 ≤ 3
  • x1, x2, x3, x4 ∈ {0,1} (Variables booléennes)

Indication : Pour résoudre ce programme linéaire booléen, rédiger et exécuter le script MATLAB suivant :

f = [-5; -2; 5; -7];
A = [2 7 3 1; 0 1 0 1; 1 0 -1 0; 1 1 0 -1];
b = [5; 0; 1; 3];
[x, fx, ExitFlag, Output] = bintprog(f,A,b)

Exercice 9

Soit le nuage de points suivant :

data = [ -9 1; 11.6 5; 21.7 10; 32.4 20; 44.1 40; 51.7 60; 61.5 100; 75.9 200; 91.4 400; 108 760; ];

Retrouver le polynôme d'ordre 2 qui représente au mieux ce nuage de points à l'aide de la fonction polyfit. La fonction polyfit permet de réaliser une régression polynomiale.

Corrigés des Exercices

Corrigé Exercice 1

1. Utilisation de fzero pour trouver les racines une par une :

Définition de la fonction anonyme correspondant à x² + 2x - 1 = 0 et traçage pour visualiser les points où elle s'annule :

>> f = @(x) x.^2 + 2*x - 1;
>> t = -4:0.1:2;
>> plot(t,f(t)),grid

On observe que cette fonction s'annule à deux reprises. On utilise ensuite fzero avec des points de départ différents :

>> x1 = fzero(f,1)
x1 =
    0.4142
>> x2 = fzero(f,-3)
x2 =
   -2.4142

2. Utilisation de fsolve pour trouver toutes les racines simultanément :

>> fsolve(f,[-1,3])
ans =
    0.4142   -2.4142

3. Utilisation de solve pour la résolution symbolique :

>> syms x
>> f_sym = x^2 + 2*x - 1;
>> ezplot(f_sym,[-4,2])
>> X = solve(f_sym)
X =
  sym
  2^(1/2) - 1
  -2^(1/2) - 1
>> subs(X)
ans =
    0.4142
   -2.4142

Corrigé Exercice 3

Premièrement, écrire un fichier M-file qui renvoie un scalaire f qui est une évaluation de f(x) au point x :

function f = func2(x)
    f = -x(1) * x(2) * x(3);
end

Puis, réécrire les contraintes sous la forme standard pour fmincon, c'est-à-dire A*x ≤ b :

La contrainte 0 ≤ x1 + 2x2 + 2x3 ≤ 72 se décompose en deux contraintes linéaires :

  • x1 + 2x2 + 2x3 ≤ 72
  • -x1 - 2x2 - 2x3 ≤ 0

Ainsi, la formulation matricielle A*x ≤ b est :

A = [1  2  2;
    -1 -2 -2]
b = [72;
    0]

Ensuite, créer la matrice A et les vecteurs b et x0 (point de départ), et invoquer la routine d'optimisation avec contrainte fmincon :

>> A = [1 2 2; -1 -2 -2];
>> b = [72; 0];
>> x0 = [10; 10; 10];
>> [x, fx, ExitFlag, Output] = fmincon(@func2, x0, A, b)

Explication des valeurs de retour de fmincon :

  • x : la solution optimale trouvée (le vecteur x minimisant la fonction).
  • fx : la valeur de la fonction f au point optimal x.
  • ExitFlag : indique comment fmincon a terminé son exécution (par exemple, 1 signifie que la fonction a convergé vers une solution).
  • Output : fournit des détails supplémentaires sur l'exécution (nombre d'itérations, algorithme utilisé, etc.).

Après 12 itérations, le résultat renvoyé par MATLAB est :

x =
   24.0000
   12.0000
   12.0000
fx =
  -3.4560e+03
ExitFlag =
     5
Output =
  struct with fields:
    iterations: 12
     funcCount: 53
  lssteplength: 1
      stepsize: 4.6551e-05
     algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'
 firstorderopt: 4.7596e-04
 constrviolation: 0
         message: [1x772 char]

Corrigé Exercice 4

1. Résolution avec fsolve

Créer d'abord le fichier M-file func4.m suivant pour définir le système d'équations :

function f = func4(t)
    f(1) = t(1)^2 + 2*t(2) - 10;
    f(2) = t(1) + t(2) - 4;
end
a. Démarrage à partir du point (1, 3)

Saisir les commandes suivantes dans la fenêtre de commande MATLAB :

>> S01 = [1 3];
>> [S1,FS1, ExitFlag] = fsolve(@func4,S01)
S1 =
   -0.7321
    4.7321
FS1 =
   1.0e-11 *
    0.6699
   -0.0008
ExitFlag =
     1
b. Démarrage à partir du point (-1, 3)

Saisir les commandes suivantes dans la fenêtre de commande MATLAB :

>> S02 = [-1 3];
>> [S2,FS2, ExitFlag] = fsolve(@func4,S02)
S2 =
   -0.7321
    4.7321
FS2 =
   1.0e-11 *
    0.6699
   -0.0008
ExitFlag =
     1

Il est à noter que fsolve peut converger vers la même solution même avec des points de départ différents, en fonction de la topologie de la fonction et des régions de convergence.

2. Résolution avec solve (symbolique)

Saisir les commandes suivantes dans la fenêtre de commande MATLAB :

>> syms x y
>> f1 = x^2 + 2*y - 10;
>> f2 = x + y - 4;
>> [X,Y] = solve(f1,f2)
X =
  sym
  3^(1/2) + 1
  1 - 3^(1/2)
Y =
  sym
  3 - 3^(1/2)
  3^(1/2) + 3
>> subs(X)
ans =
    2.7321
   -0.7321
>> subs(Y)
ans =
    1.2679
    4.7321

Comparaison des solutions : Les solutions symboliques (2.7321, 1.2679) et (-0.7321, 4.7321) sont trouvées par solve. La résolution numérique avec fsolve a trouvé la solution (-0.7321, 4.7321) dans les deux cas de points de départ. La fonction fsolve, étant un algorithme numérique, converge vers une des solutions en fonction du point de départ. La fonction solve, étant symbolique, trouve toutes les solutions exactes.

Corrigé Exercice 5

Créer d'abord le fichier M-file func.m correspondant au système d'équations non linéaires :

function F = func(x)
    F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);
    F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;
end

Puis, choisir une solution de départ x0, et appeler la fonction fsolve. Par exemple :

>> x0 = [0; 0]; % Un point de départ initial
>> [x, fval] = fsolve(@func, x0)

Le choix de x0 est crucial pour la convergence de fsolve vers une solution particulière.

Corrigé Exercice 9

Charger les données et extraire les vecteurs x et y :

>> data = [ -9 1; 11.6 5; 21.7 10; 32.4 20; 44.1 40; 51.7 60; 61.5 100; 75.9 200; 91.4 400; 108 760 ];
>> x = data(:,1);
>> y = data(:,2);

Calculer les coefficients du polynôme d'ordre 2 avec polyfit :

>> p = polyfit(x,y,2)

Évaluer le polynôme aux points x pour obtenir les valeurs ajustées yv :

>> yv = polyval(p,x)

Visualiser les points originaux et la courbe polynomiale ajustée :

>> clf % effacer la fenêtre graphique
>> plot(x,y,'r*') % Tracer les points originaux en rouge avec des étoiles
>> hold on % Maintenir le graphique actuel pour ajouter d'autres tracés
>> plot(x,yv,'b-') % Tracer la courbe ajustée en bleu avec une ligne continue
>> title('Ajustement polynomial d''ordre 2')
>> xlabel('x')
>> ylabel('y')
>> legend('Données originales', 'Polynôme ajusté')
>> grid on

Foire Aux Questions (FAQ)

Quelles sont les principales différences entre fzero, fsolve et solve en MATLAB ?

fzero est une fonction numérique utilisée pour trouver une seule racine d'une fonction d'une seule variable, nécessitant un point de départ ou un intervalle. fsolve est également numérique, mais elle est conçue pour résoudre des systèmes d'équations non linéaires à plusieurs variables ou trouver toutes les racines d'une seule équation dans un intervalle spécifié. solve est une fonction symbolique capable de trouver les solutions exactes (numériques ou symboliques) pour des équations ou des systèmes d'équations, sans nécessiter de point de départ.

Quand utiliser fmincon plutôt que quadprog pour l'optimisation ?

fmincon est une fonction d'optimisation générale pour les problèmes de minimisation non linéaires sous contraintes linéaires ou non linéaires. Elle est très flexible. quadprog est spécifiquement conçue pour les problèmes de programmation quadratique, c'est-à-dire la minimisation d'une fonction objectif quadratique sous contraintes linéaires. Si votre problème est strictement quadratique, quadprog est généralement plus efficace et robuste car elle est spécialisée pour cette classe de problèmes.

Quel est l'intérêt de la résolution symbolique par rapport à la résolution numérique ?

La résolution symbolique (avec solve par exemple) fournit des solutions exactes sous forme mathématique (fractions, racines, constantes comme π ou e), tandis que la résolution numérique (avec fsolve ou fzero) donne des approximations décimales. La résolution symbolique est utile pour l'analyse théorique et pour obtenir des résultats précis. La résolution numérique est indispensable lorsque les équations sont trop complexes pour être résolues symboliquement, ou lorsqu'une valeur approchée est suffisante ou requise pour des applications pratiques.

Cela peut vous intéresser :

Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne