MN Et MATLAB - 2
MN Et MATLAB - 2
MN Et MATLAB - 2
1 MATLAB
Matrices
*entrée
>> A = [ 1 2 3; 4 5 6]
A=
123
456
Fonctions réelles
*définir une fonction réelle ?
On peut définir la fonction f(x) = 1/(1 + x2) de plusieurs manières:
Si la variable x est un tableau, les opérations /, * et ˆ agissant sur elle doivent être remplacées par les
opérations point correspondantes ./, .* et .ˆ qui opèrent composante par composante.
Par exemple, l’instruction fun=@(x)[1/(1+xˆ2)] est remplacée par fun=@(x)[1./(1+x.ˆ2)].
>> x=linspace(-2,3,100);
>> y=exp(x).*(sin(x).^2)-0.4;
>> plot(x,y, 'c', 'Linewidth',2); grid on % voir figure en expérimentation c-cyan couleur
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page 3
Pour évaluer
la fonction fun au point x, ou sur un ensemble de points stockés dans le vecteur x,
on peut utiliser les commandes eval, ou feval.
Pour les zeros
>> fun=@(x)[x^2 - 1 + exp(x)];
>> fzero(fun,-1) % au voisinage de -1
ans =
-0.7146
>> fzero(fun,1)
ans =
5.4422e-18
A l’aide de la fonction plot, on
remarque qu’il y a un zéro dans
l’intervalle [−1,−0.2] et un autre dans
[−0.2, 1]. On peut alors écrire
alternativement :
>> fzero(fun,[-1 -0.2])
ans =
-0.7146
>> fzero(fun,[-0.2 1]) ans = -5.2609e-
17
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page 4
Dans le cas où fun est définie dans un M-file, on a le choix entre l’une de ces
deux commandes :
>> fzero(’fun’, 1)
ou
>> fzero(@fun,1)
Par exemple, on peut calculer les zéros de p(x) = x3 −6x2 +11x− 6 en écrivant :
>> p = [1 -6 11 -6]; format long;
>> roots(p)
ans =
3.00000000000000
2.00000000000000
1.00000000000000
Considérons par exemple le produit et le quotient de deux polynômes p1(x) =
x4 − 1 et p2(x) = x3 − 1 :
>> p1 = [1 0 0 0 -1];
>> p2 = [1 0 0 -1];
>> p=conv(p1,p2)
p=
1 0 0 -1 -1 0 0 1
>> [q,r]=deconv(p1,p2)
q=
10
r=
0 0 0 1 -1
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
5
On trouve ainsi les polynômes p(x) = p1(x)p2(x) = x7 − x4 − x3 + 1,
q(x) = x et r(x) = x − 1 tels que p1(x) = q(x)p2(x) + r(x).
>> f = ’(x^2+2*x+2)/(x^2-1)’;
>> syms x % calcul symbolique
>> diff(f)
(2*x+2)/(x^2-1)-2*(x^2+2*x+2)/(x^2-1)^2*x
>> int(f)
x+5/2*log(x-1)-1/2*log(1+x)
>> taylor(f,x,6) % polynôme de Taylor de degré n en x0 = 0.
-2-2*x-3*x^2-2*x^3-3*x^4-2*x^5
La commande funtool aide à la manipulation symbolique de fonctions à l’aide de l’interface
graphique représentée sur la Figure. Notons que la commande simple permet de réduire les
expressions générées par diff, int et taylor afin de les rendre aussi simples que possible.
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
6
2 Systèmes linéaires
Considérons le réseau hydraulique composé de 10 conduites, représenté sur la
Figure,
où R est la résistance hydraulique par unité de longueur (en (bar s)/m4) et L est
la longueur (en m) de la conduite. On suppose que l’eau s’écoule par les sorties
(indiquées par un point noir) où règne la pression atmosphérique, fixée à 0 bar
(conformément à notre convention).
Le problème consiste à déterminer les valeurs de la pression en chaque noeud
intérieur 1, 2, 3, 4. Pour cela, on complète les relations pour j = 1, 2, 3, 4 en
écrivant que la somme des débits algébriques en un nœud j doit être nulle (une
valeur négative indiquerait la présence d’une fuite).
En notant p = (p1, p2, p3, p4)T le vecteur des pressions aux nœuds intérieurs,
on obtient un système 4 × 4 de la forme Ap = b.
On indique dans le tableau suivant les caractéristiques des différentes
conduites
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
7
>> A=[-0.37 0.05 0.05 0.07; 0.05 -0.116 0 0.05; 0.05 0 -0.116 0.05; 0.07 0.05 0.05 -
0.202];
>> b=[-2;0;0;0];
>> x=A\b
x=
8.1172e+000
5.9893e+000
5.9893e+000
5.7779e+000
C’est la plus simple et il existe bien entendu des alternatives que ce soit en
méthodes directes ou alternatives.
*Bissection ou dochotomie
6000 ,1000)
zero = 0.0614024115361826
res = 6.03904481977224e-009
niter =36
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
9
*Méthode de Newton
>> FUN=@(x)[x^2+2*x-3];
DFUN=@(x)[2*x+2];
ZERO=NEWTON(FUN ,DFUN,0.5,1.e-12 ,500)
ZERO = 1
>> FUN=@(x)[x^2+2*x-3];
DFUN=@(x)[2*x+2];
ZERO=NEWTON(FUN ,DFUN,0.5,1.e-12 ,3)
La méthode de Newton est arrêtée sans converger avec la tolérance souhaitée
car
le nombre maximal d'itérations a été atteint
ZERO =1.00000069386622
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
10
*Méthode de Newton pour des systèmes d’équations
x=
0.476095822533811
-0.87939340898975
F=
2.23542090700278e-011
niter =
8
Si on part de -1; -1 on trouve la deuxième solution
x=
-0.476095822533811
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
11
0.87939340898975
F=
2.23542090700278e-011
niter =
8
x=
1
2
3
niter =
8
8
2
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
12
*Approximation par polynômes de Taylor
On sait qu’on peut approcher une fonction f par son polynôme de Taylor dans
un intervalle donné. Cette technique est très coûteuse car elle nécessite la
connaissance de f et de ses dérivées jusqu’à l’ordre n (le degré du polynôme)
en un point x0. De plus, il se peut que le polynôme de Taylor approche très mal
f quand on s’éloigne de x0.
l’interface graphique de la fonction MATLAB taylortool qui permet le calcul d’un
polynôme de Taylor de degré arbitraire pour toute fonction f.
A expérimenter
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
13
*Interpolation
c=
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
14
Différence avec les valeurs de la table
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
15
Approximation par fonctions splines
>> x = [ -55:10:65];
y = [ -3.25 -3.37 -3.35 -3.2 -3.12 -3.02 -3.02 ...
-3.07 -3.17 -3.32 -3.3 -3.22 -3.1];
zi = [ -55:1:65];
s = spline(x,y,zi)
s=
Columns 1 through 7
-3.2500e+000 -3.2664e+000 -3.2820e+000 -3.2967e+000 -3.3105e+000 -3.3233e+000 -3.3351e+000
Columns 8 through 14
-3.3457e+000 -3.3551e+000 -3.3632e+000 -3.3700e+000 -3.3754e+000 -3.3793e+000 -3.3817e+000
Columns 15 through 21
-3.3825e+000 -3.3817e+000 -3.3791e+000 -3.3747e+000 -3.3684e+000 -3.3602e+000 -3.3500e+000
Columns 22 through 28
-3.3378e+000 -3.3239e+000 -3.3088e+000 -3.2928e+000 -3.2762e+000 -3.2596e+000 -3.2433e+000
Columns 29 through 35
-3.2277e+000 -3.2131e+000 -3.2000e+000 -3.1887e+000 -3.1789e+000 -3.1704e+000 -3.1628e+000
Columns 36 through 42
-3.1558e+000 -3.1492e+000 -3.1427e+000 -3.1358e+000 -3.1283e+000 -3.1200e+000 -3.1106e+000
Columns 43 through 49
-3.1002e+000 -3.0892e+000 -3.0779e+000 -3.0666e+000 -3.0556e+000 -3.0451e+000 -3.0355e+000
Columns 50 through 56
-3.0270e+000 -3.0200e+000 -3.0147e+000 -3.0109e+000 -3.0086e+000 -3.0076e+000 -3.0077e+000
Columns 57 through 63
-3.0088e+000 -3.0107e+000 -3.0133e+000 -3.0165e+000 -3.0200e+000 -3.0238e+000 -3.0278e+000
Columns 64 through 70
-3.0321e+000 -3.0366e+000 -3.0414e+000 -3.0465e+000 -3.0519e+000 -3.0576e+000 -3.0636e+000
Columns 71 through 77
-3.0700e+000 -3.0767e+000 -3.0839e+000 -3.0916e+000 -3.1000e+000 -3.1092e+000 -3.1192e+000
Columns 78 through 84
-3.1302e+000 -3.1423e+000 -3.1555e+000 -3.1700e+000 -3.1858e+000 -3.2026e+000 -3.2199e+000
Columns 85 through 91
-3.2373e+000 -3.2543e+000 -3.2707e+000 -3.2858e+000 -3.2994e+000 -3.3109e+000 -3.3200e+000
Columns 92 through 98
-3.3263e+000 -3.3301e+000 -3.3315e+000 -3.3309e+000 -3.3285e+000 -3.3246e+000 -3.3196e+000
Columns 99 through 105
-3.3136e+000 -3.3070e+000 -3.3000e+000 -3.2929e+000 -3.2857e+000 -3.2783e+000 -3.2708e+000
Columns 106 through 112
-3.2630e+000 -3.2550e+000 -3.2467e+000 -3.2382e+000 -3.2293e+000 -3.2200e+000 -3.2103e+000
Columns 113 through 119
-3.2002e+000 -3.1897e+000 -3.1786e+000 -3.1670e+000 -3.1548e+000 -3.1421e+000 -3.1287e+000
Columns 120 through 121
-3.1147e+000 -3.1000e+000
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
16
Comparaison entre la spline cubique (trait plein) et le polynôme d’interpolation
de Lagrange (trait discontinu)
La méthode des moindres carrés
Nous avons déjà indiqué qu’augmenter le degré d’un polynôme
d’interpolation de Lagrange n’améliore pas toujours l’approximation d’une
fonction donnée.
Ce problème peut être résolu avec l’interpolation composite (avec des
fonctions linéaires par morceau ou des splines). Néanmoins, aucune des
deux méthodes n’est adaptée à l’extrapolation d’informations à partir des
données disponibles, c’est-à-dire, à la génération de nouvelles valeurs en
des points situés à l’extérieur de l’intervalle contenant les nœuds
d’interpolation.
derivation
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
17
On veut calculer une approximation de la vitesse de vidange q_(t) et la
comparer à celle prédite par la loi de Torricelli où
g est la norme de l’accélération de la gravité et γ = 0.6 est un coefficient de
correction.
Integration numérique
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
18
formule de quadrature composite du point milieu
function Imp= midpointc(a,b,M,fun ,varargin )
Pour calculer le nombre d’individus dont la taille est comprise entre 1.8 et 1.9
m, on doit évaluer l’intégrale pour h = 1.8 et Δh = 0.1. On se propose pour cela
d’utiliser la formule composite de Simpson avec 100 sous-intervalles :
>> N = inline(['M/(sigma*sqrt(2*pi))*exp(-(h-hbar).^2'...
'./(2*sigma ^2))'], 'h', 'M', 'hbar', 'sigma')
M = 200; hbar = 1.7; sigma = 0.1;
int = simpsonc (1.8 , 1.9, 100, N, M, hbar, sigma)
N=
Inline function:
N(h,M,hbar,sigma) = M/(sigma*sqrt(2*pi))*exp(-(h-hbar).^2./(2*sigma ^2))
int =
2.7181e+001
JSf =
1.8286e+001
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
19
On peut calculer une intégrale dans MATLAB avec une formule de Gauss-
Lobatto-Legendre en utilisant l’instruction quadl(fun,a,b)
>> fun=inline('1./x','x');
>> quadl(fun,1,2)
ans =
6.9315e-001
D=
3.9396e+001
1.7821e+001
-9.5022e+000
2.8541e-001
>> A=[-30 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1];
>> D=qrbasic(A ,1.e-14 ,100)
D=
-3.0647e+001
2.9740e+001
-1.1681e+001
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
20
5.8778e-001
7 Equations différentielles ordinaires
>> syms x y z
z=dsolve('Dy= -x*y','y(0)=1','x')
z=
1/exp(x^2/2)
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
21
Runge-Kutta Method
y’=f(x,y)
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page
22
Pour une équation du second ordre
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page 23
d2y=[y(2);2*y(1)^3]; % Output must be a column
Puis
>> tspan=[0 1]; % Interval over which we want to evaluate y=f(x)
y0=[1;-1]; % Given initial conditions
[x,y]=ode23('fex9_4', tspan, y0); % Use 2nd and 3rd Order Runge-Kutta
% Plot numeric values with the statements below
plot(x, y(:,1), '+r-', x, y(:,2), 'Ob--')
title('Numerical Solution for Differential Equation of Example 9.4'),...
xlabel('x'), ylabel('y (upper curve), yprime (lower curve)'), grid
Symboliquement
>> syms x y
y=dsolve('x^2*D2y-x*Dy-3*y=x^2*log(x), Dy(1)=0, y(1)=-1', 'x')
y=
**********************************************************************************
Pratique simple des Méthodes Numériques /1A Master /Pr. M.N Bouaziz UYFM Page 25