Correction - Exercice MATLAB
Exercice 1 : (8 points)
1. Script MATLAB pour afficher le nombre de jours d'un mois en tenant compte de l'année :
------------------------------------------------------------------
mois = input('Entrez le numéro du mois (1 à 12) : ');
annee = input('Entrez l\'année : ');
if mois == 2
if mod(annee,4)==0 && (mod(annee,100)~=0 || mod(annee,400)==0)
jours = 29;
else
jours = 28;
end
elseif any(mois == [1,3,5,7,8,10,12])
jours = 31;
else
jours = 30;
end
fprintf('Nombre de jours : %d\n', jours);
2. Plus petite valeur de n telle que la somme dépasse une valeur donnée :
------------------------------------------------------------------
val = input('Entrez la valeur limite : ');
S = 0;
n = 0;
while S <= val
n = n + 1;
S = S + 1/n^2;
end
fprintf('n minimal : %d\n', n);
3. Vérifier si une matrice est symétrique :
------------------------------------------------------------------
A = input('Entrez une matrice carrée : ');
if isequal(A, A')
disp('La matrice est symétrique.');
else
disp('La matrice n\'est pas symétrique.');
end
4. Fonction récursive pour la suite de Fibonacci :
------------------------------------------------------------------
function f = fibonacci(n)
if n <= 1
f = n;
else
f = fibonacci(n-1) + fibonacci(n-2);
end
end
5. Intégration avec la méthode des trapèzes :
------------------------------------------------------------------
a = 0; b = 1;
n = 1000;
x = linspace(a, b, n);
y = exp(-x.^2);
h = (b - a) / (n - 1);
I = (h/2) * (y(1) + 2*sum(y(2:end-1)) + y(end));
fprintf('Valeur approchée de l\'intégrale : %.6f\n', I);
Exercice 2 : (12 points)
-----------------------------
Partie 1 :
1. x = linspace(-10, 10, 200);
2. f = sin(x)./x; f(x==0)=1; g = log(x.^2 + 1);
plot(x, f, 'b', x, g, 'r');
3. legend('f(x)', 'g(x)'); xlabel('x'); ylabel('y'); title('f(x) et g(x)');
4. df = gradient(f, x);
figure; plot(x, df); title('Dérivée numérique de f(x)');
Partie 2 :
1. R(x,y,z) = (a-x)^2 + b(y-x^2)^2 + c(z-y^2)^2, a=1, b=100, c=50
[x,y,z] = meshgrid(-2:0.1:2, -2:0.1:2, -1:0.1:3);
R = (1 - x).^2 + 100*(y - x.^2).^2 + 50*(z - y.^2).^2;
isosurface(x,y,z,R,20); title('Isosurface de R');
2. figure;
subplot(1,2,1);
z0 = 0;
Rz = (1 - x).^2 + 100*(y - x.^2).^2 + 50*(z0 - y.^2).^2;
contour(x(:,:,1), y(:,:,1), Rz(:,:,1));
title('Courbes de niveau à z=0');
subplot(1,2,2);
y0 = 1;
Ry = (1 - x).^2 + 100*(y0 - x.^2).^2 + 50*(z - y0.^2).^2;
imagesc(Ry(:,:,1)); colorbar;
title('Coupe en y=1');