Vous êtes sur la page 1sur 10

Institut d'Optique Graduate School – Palaiseau Cursus Ingénieur, 1ère année – Année 2019-2020

[6N-076-SCI]
Initiation au Calcul Scientifique (avec Matlab)
EXAMEN
12 mars 2020
Durée: 1h30
Documents interdits (excepté un dictionnaire papier pour les élèves non nativement francophones)
Calculette interdite
Ordinateur, tablette, téléphone, montre et tout dispositif connecté interdits

L'examen est constitué d'une partie Questionnaire à Choix Multiple (QCM) et d'une partie de questions à ‘réponses
libres’.
Vos réponses au QCM doivent être reportées sur la feuille de réponse séparée en suivant bien les indications
données sur celle-ci. (Indiquez bien vos nom et prénom sur cette feuille de réponse).
Les réponses en ‘format libre’ doivent être écrites sur une copie d'examen standard.

Barème indicatif : 12 questions du QCM sur ~12 points ; Questions à réponses libres sur ~8 points

Le texte de l'énoncé utilise le point décimal, comme dans le code Matlab. (Par exemple « 1.2 » représente 1+2/10).

⨳⨳⨳⨳⨳⨳⨳
QCM
⨳⨳⨳⨳⨳⨳⨳

Pour chaque sous-proposition d'une question Qx, déterminez si celle-ci est Vraie ou Fausse et reportez
votre réponse par V☒ F☐ ou V☐ F☒ sur la feuille de réponses prévue à cet effet.
Pour chaque sous-proposition, une réponse juste est comptée +1, une réponse inexacte est comptée –1, une
abstention ou absence de réponse est comptée 0. La note totale attribuée à une question Qx à 𝑚 sous-propositions
est (1/𝑚) × somme des points attribués aux sous-questions.

Q1: L'expression Matlab v=linspace(3,7,9) engendre un vecteur v de nombres réels. Indiquez par Vrai ou
Faux si ce vecteur v est identique au vecteur w des propositions suivantes:

1.Ⓕ w=3:7:(4/8)

2.Ⓥ w=3:(4/8):7

3.Ⓕ w=3:7:(4/9)

4.Ⓕ w=3:(4/9):7
linspace(a,b,N) ⇔ a:(b-a)/(N-1):b où la syntaxe associée à l'opérateur « : » est début:pas:fin
Q2: Soit x=[2.3 0 -1.5 7.2] . Indiquez Vrai ou Faux pour chacune des 4 assertions suivantes :

1.Ⓕ x(3) vaut 7.2 . (Les indices commencent à 1 en Matlab)

2.Ⓕ 1./x provoque une erreur «division par 0». (1/0 donne Inf sans provoquer d'erreur)

3.Ⓕ x./x retourne le vecteur [1 1 1 1] . (Le vecteur retourné est [1 NaN 1 1] car 0/0 donne NaN)

4.Ⓥ exp(x) donne un vecteur ligne de 4 éléments.

1/7
Q3: Pour chacune des propositions ci-dessous, on lance dans Matlab les commandes
x=linspace(-3,5,1601);
y1=cos(pi*x+3);
y2=exp(-x-3);
figure
puis la ou les commandes des propositions 1. ou 2. ou 3. ou 4. .
Indiquez si les propositions sont vraies ou fausses :

1.Ⓥ plot(x,y1,x,y2) trace sur un même graphique deux courbes en trait continu dans deux couleurs
différentes.

2.Ⓕ plot(x,y1,'r-',x,y2,'g:') provoque une erreur. (Cette syntaxe est valide et trace 2 courbes sur un
même graphique)

3.Ⓕ semilogy(x,y2) trace une courbe sur un graphique ayant son échelle horizontale logarithmique. (C'est
l'échelle verticale qui est logarithmique)

4.Ⓥ subplot(2,1,2)
plot(x,y2)
subplot(2,1,1)
plot(x,y1) trace deux graphiques l'un en dessous de l'autre contenant la courbe de cos(𝜋 𝑥 + 3) dans le
graphique du haut et la courbe de exp(−𝑥 − 3) dans le graphique du bas. (même si on trace d'abord le
graphique du bas puis ensuite le graphique du haut)

Q4: Un calcul numérique d'un flux lumineux énergétique (s'exprimant en watt) a donné la valeur de
𝐹calculé = 1.998 W ± 0.004 W alors que la valeur théorique est 𝐹théorique = 2.000 W.
Indiquez si les propositions ci-dessous sont vraies ou fausses:

1.Ⓥ L'erreur absolue est de −0.002 W . (C'est 1.998 W − 2.000 W, soit donc bien −0.002 W)

2.Ⓕ La précision du calcul est de 10−3 . La précision est une notion qualitative (bonne (ou éventuellement grande),
mauvaise, …) et pas quantitative…

3.Ⓕ L'incertitude absolue est de 4 × 10−3 . L'incertitude absolue d'une grandeur a la même unité que la grandeur elle-
même. Donc ici cela aurait dû être une grandeur en watt et non pas une grandeur sans unité.

4.Ⓥ L'incertitude relative est de 2 × 10−3 . (C'est 0.004 W/2.000 W, soit donc bien 0.002 = 2 × 10−3 )

2/7
Q5: Depuis la réforme du système SI entrée en vigueur le 20 mai 2019, la constante de Boltzman 𝑘𝐵 vaut
exactement, en unité SI de base, 𝑘𝐵 = 1.380649 × 10−23 J/K (incertitude nulle). On vous indique que
log2(1.380649E-23) vaut environ -75.9390 et que donc 2−76 ≤ 1.380649 × 10−23 < 2−75.
Lorsque l'on code le nombre 1.380649 × 10−23 en virgule flottante en arrondissant donc celui-ci au plus
proche nombre codable, quelle est l'incertitude absolue de cette représentation due à l'erreur d'arrondi ? :

1.Ⓕ 𝛆 × 𝟐−𝟕𝟖

2.Ⓥ 𝛆 × 𝟐−𝟕𝟕 (1.380649 × 10−23 est codé en virgule flottante sous la forme +𝟐−𝟕𝟔 × 𝑚 avec 1 ≤ 𝑚 < 2. L'écart
absolu entre les nombres codables sur cette plage est donc de 2−76 × 𝛆 , mais l'arrondi au plus proche nombre codable
conduit à une |erreur absolue| maximale moitié de cet écart, soit donc 2−76 × 𝛆⁄𝟐 = 2−77 × 𝛆. CQFD!)

3.Ⓕ 𝛆 × 𝟐−𝟕𝟔

4.Ⓕ 𝛆 × 𝟐−𝟕𝟓

3/7
Q6: On définit la function Matlab suivante (fichier SomDiff.m dans le répertoire courant de travail)
function [s,d]=SomDiff(a,b)
% SomDiff - Calcule la somme et la différence de deux nombres
% a,b: scalaires numériques, les nombres à introduire
% s,d: scalaires numériques, retournant respectivement a+b et b-a
s=a+b;
d=b-a;
end
On utilise ensuite cette function par des appels dans la Command Window. Indiquez si les propositions ci-
dessous sont vraies ou fausses :

1.Ⓕ SomDiff(2,3) retourne le vecteur [5 1] dans la variable prédéfinie ans . (Ne retourne que le scalaire 5 dans ans)

2.Ⓕ S=SomDiff(2,3) provoque une erreur «Too few output arguments». (Retourne le scalaire 5 dans S sans provoquer d'erreur)

3.Ⓥ [S,D]=SomDiff(2,3) retourne 5 dans la variable S et 1 dans la variable D .

4.Ⓕ [S,D]=SomDiff([2 3],[3 4]) provoque une erreur «Input arguments must be scalar». (Les calculs
réalisés sont parfaitement valables avec a et b vecteurs de même taille (même si l'en-tête étendu (commentaires) indique que l'on
attend des scalaires). On récupère le vecteur [5 7] dans S et le vecteur [1 1] dans D, sans qu'aucune erreur ne se produise)

Q7: On suppose qu'un vecteur v est préalablement défini dans l'espace de travail de Matlab. On souhaite réaliser
une boucle for manipulant les éléments v(k) de ce vecteur (où k est une variable permettant de réaliser
l'indexation de ce vecteur) dont le code serait de la forme :
for ¤¤¤¤¤¤¤¤¤¤¤¤
¤¤¤
¤¤¤ v(k) ¤¤¤;
¤¤¤
end
Indiquez Vrai ou Faux pour les propositions ci-dessous donnant la syntaxe adaptée pour le rectangle gris
¤¤¤¤¤¤¤¤¤¤¤¤ ci-dessus :

1.Ⓕ k=0:size(v)-1

2.Ⓕ k=0:length(v)-1

3.Ⓕ k=1:size(v)

4.Ⓥ k=1:length(v) (Les indices commencent à 1 en Matlab, et la longueur d'un vecteur est bien obtenue avec la
fonction Matlab native length . ⚠ La fonction size retourne un vecteur de deux éléments donnant le nombre de
lignes puis le nombre de colonnes du tableau. Ce ne serait pas adapté ici pour l'usage dans la boucle for ).

4/7
Q8: On veut calculer la TFD d'un signal temporel échantillonné sur 𝑁 points contenu dans le vecteur ligne s et
correspondant à un échantillonnage temporel régulier dont le premier échantillon est en 𝑡 = 0. On souhaite
que la TFD obtenue (vecteur stfd) soit donnée en “représentation centrée”, c'est-à-dire que la partie gauche
de celle-ci corresponde aux fréquences négatives et la partie droite aux fréquences positives. Indiquez par
Vrai ou Faux si les expressions suivantes donnent le résultat attendu :

1.Ⓕ stfd=fft(s);

2.Ⓕ stfd=fftshift(s);

3.Ⓥ stfd=fftshift(fft(s));

4.Ⓕ stfd= fft(fftshift(s));

Q9: On considère l'échantillonnage sur 𝑁 points d'un signal temporel 𝑠(𝑡) commençant en t = 0 et ayant un
pas = 𝜏 .
Indiquez Vrai ou Faux pour chacune des affirmations suivantes :
1.ⓋLa périodisation dans le domaine temporel implicitement induite par la TFD est de période 𝑃 = 𝑁 × 𝜏 .
2.Ⓕ La périodisation dans le domaine temporel implicitement induite par la TFD est de période 𝑃 = (𝑁 − 1) × 𝜏 .
3.ⓋLa périodisation dans le domaine fréquentiel implicitement induite par la TFD est de période 𝐹 = 1/𝜏 .
4.Ⓕ La périodisation dans le domaine fréquentiel implicitement induite par la TFD est de période
𝐹 = 𝑁/((𝑁 − 1) × 𝜏) .

Q10: On cherche un vecteur 𝐴 qui minimise l'expression 𝜒 2 = ‖M 𝐴 − 𝑌‖22 où M est une matrice réelle de
taille 𝑚 × 𝑛 (𝑚 > 𝑛), 𝐴 un vecteur colonne réel de longueur 𝑛, 𝑌 un vecteur colonne réel de longueur 𝑚.
Indiquez par Vrai ou Faux si les expressions Matlab proposées ci-dessous donnent (une bonne
approximation numérique de) la solution du problème :

1.Ⓕ A=M/Y

2.Ⓥ A=M\Y

3.Ⓕ A=Y/M

4.Ⓕ A=Y\M

5/7
⋮ ⋮ ⋮
𝑥𝑘2 𝑥𝑘 1
Q11: On considère une matrice rectangulaire, de taille 𝑚 × 3 (𝑚 entier > 3), M = [ ] et un vecteur
𝜎𝑘 𝜎𝑘 𝜎𝑘
⋮ ⋮ ⋮

𝑦𝑘
colonne, de longueur 𝑚, 𝑌 = [𝜎 ], où 𝑥𝑘 , 𝑦𝑘 , 𝜎𝑘 représentent les éléments de 3 vecteurs réels de
𝑘

longueur 𝑚 . (𝜎𝑘 > 0, ∀𝑘).
𝑎
On considère l'expression 𝜒 2 = ‖M 𝐴 − 𝑌‖22 (où ‖ ‖2 représente la norme euclidienne) avec 𝐴 = [𝑏 ].
𝑐
Indiquez Vrai ou Faux pour chacune des propositions suivantes :
𝑎.𝑥𝑘2 +𝑏.𝑥𝑘 +𝑐−𝑦𝑘
1.Ⓕ 𝜒 2 = ∑𝑚
𝑘=1 ( )
𝜎𝑘
2
2 𝑚 𝑎.𝑥𝑘2 +𝑏.𝑥𝑘 +𝑐−𝑦𝑘
2.Ⓥ 𝜒 = ∑𝑘=1 ( )
𝜎 𝑘
2 2
(𝑎.𝑥𝑘 +𝑏.𝑥𝑘 +𝑐−𝑦𝑘 )
3.Ⓥ 2
𝜒 = ∑𝑚
𝑘=1 𝜎2 𝑘
2 4 2 2 2 2
𝑚 𝑎 .𝑥𝑘 +𝑏 .𝑥𝑘 +𝑐 −𝑦𝑘
4.Ⓕ 𝜒2 = ∑ 𝑘=1 𝜎𝑘2

Q12: Indiquez si les propositions suivantes sont vraies ou fausses :

1.Ⓥ Le bon conditionnement d'un problème est relié à la faible sensibilité relative de sa solution aux variations
relatives des paramètres qui le régissent.

2.Ⓥ Le nombre de condition d'une matrice (carrée ou rectangulaire plus haute que large) et la connaissance des
incertitudes relatives de départ permettent de déterminer l'ordre de grandeur de l'incertitude relative sur la
solution d'un problème de moindre carré linéaire.

3.Ⓕ L'approximation polynomiale au sens des moindres carrées sur la base des fonctions {𝑥 𝑘 }𝑘∈{0,…,𝑁} est un
problème bien conditionné. (Non! On a vu en TD que les matrices de Vandermonde qui régissent le problème ont des
nombres de condition très (monstrueusement) élevés. Ce problème est particulièrement mal conditionné!)

4.Ⓕ L'expression exp(𝑥) + exp(−𝑥) pose des problèmes de calcul numérique pour |𝑥| ≪ 1 . (Non! On obtient
un nombre voisin de 2 qui est déterminé avec une très faible incertitude relative)

6/7
⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳
Questions ‘à réponse libre’
⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳⨳
[Barème indicatif : ~8pts]

Veuillez écrire très lisiblement les codes Matlab.


Il ne doit y avoir aucune ambiguïté entre ( ) , [ ] , { } , entre . et , , entre : et ; , ou encore entre
0(zéro) et O(o majuscule), ou encore 1(un), I(i majuscule) et l(L minuscule), entre ' et ", etc...

Exercice n°1 : [~2.5pts]


Donnez les lignes de commandes Matlab permettant de tracer sur un même graphique les courbes de
𝑓(𝑥) = cos(𝜋 𝑥 2 ) et 𝑔(𝑥) = sin(2 𝜋 𝑥 2 )/𝑥 sur l'intervalle [−4, 4], ainsi qu'afficher un titre et des labels pour
l'axe horizontal et l'axe vertical et une légende appropriée.

Exercice n°2 : [~2.5pts]


Écrivez une function qui attend en arguments d'entrée un vecteur réel 𝑥 et un entier positif 𝑛 et retourne la matrice
⋮ ⋮ ⋮ ⋮ ⋮
M = [1 cos(𝑥𝑘 ) cos(2 𝑥𝑘 ) ⋯ cos(𝑛 𝑥𝑘 )] de taille 𝑚 × (𝑛 + 1) où 𝑚 est la longueur du vecteur 𝑥.
⋮ ⋮ ⋮ ⋮ ⋮
Le programme réalisera une préallocation de la matrice à sa taille finale puis remplira celle-ci par colonne avec
une unique boucle for.
Cette fonction déclenchera une erreur si 𝑚 < 𝑛 + 1.
N'oubliez pas de bien rédiger l'en-tête étendu de cette function.
Donnez ensuite un exemple fonctionnel d'utilisation de cette fonction.

Exercice n°3 : [~3pts]


On considère le signal sinusoïdal 𝑠(𝑡) = sin(2 𝜋 𝑓0 𝑡) échantillonné avec 𝑁 points (𝑁 pair) à partir de 𝑡 = 0 avec
une fréquence d'échantillonnage donnée 𝑓𝑒 . On prendra pour les calculs pratiques 𝑁 = 128, 𝑓𝑒 = 50 Hz et
𝑓0 = 10 Hz.
Écrivez le code Matlab qui
• calcule l'échantillonnage temporel de 𝑠 (avec un programme ‘générique’ utilisant des variables N et fe et
f0 initialisées au tout début du code)
• affiche ce signal temporel dans une nouvelle figure avec l'indication de la grandeur et de l'unité des
abscisses
• calcule la TFD de ce signal temporel
• affiche le module de celle-ci dans une nouvelle figure, en représentation centrée (i.e. abscisse nulle au
centre du graphique), avec les abscisses correctement calculées et l'indication de leur grandeur et leur unité
sur le graphique.

Quelle ‘propriété’ reliée à 𝑓0 , 𝑓𝑒 et 𝑁 a une grande influence sur l'allure de la TFD de ce signal temporel
sinusoïdal ? Que vaut-elle pour les valeurs numériques indiquées en début d'exercice ? Indiquez dès lors l'allure
attendue de la TFD de 𝑠 que donnerait le dernier graphique.

⨳⨳⨳⨳⨳⨳⨳

7/7
Un corrigé des exercices, Examen IniCalcSci 12/3/2020

Un corrigé des exercices, Examen IniCalcSci 12/3/2020


----------------------------------------------------------------------------------------------------------------------------------------------

Exercice n°1:
x=linspace(-4,4,2001);
f=cos(pi*x.^2);
g=sin(2*pi*x.^2)./x;
figure
plot(x,f,x,g)
title('Exo 1')
xlabel('x')
ylabel('y')
legend('f','g')

----------------------------------------------------------------------------------------------------------------------------------------------

Exercice n°2:
### Voir function CalculeM tout à la fin de ce document ###

x=0:4

x = 1×5
0 1 2 3 4

M=CalculeM(x,3)

M = 5×4
1.0000 1.0000 1.0000 1.0000
1.0000 0.5403 -0.4161 -0.9900
1.0000 -0.4161 -0.6536 0.9602
1.0000 -0.9900 0.9602 -0.9111
1.0000 -0.6536 -0.1455 0.8439

M_Pb=CalculeM(x,6) % Cette opération provoque une erreur !!!

Error using Corrige_Exos_Examen_IniCalcSci_12_3_2020>CalculeM (line 49)


m=longueur(x) < n+1

1 sur 3 09/04/2020 à 17:48


Un corrigé des exercices, Examen IniCalcSci 12/3/2020

----------------------------------------------------------------------------------------------------------------------------------------------

Exercice n°3:
N=128; % PAIR !!!
fe=50; %Hz
f0=10; %Hz

tau=1/fe; % s
t=(0:N-1)*tau;
s=sin(2*pi*f0*t);

figure
plot(t,s)
title('signal temporel')
xlabel('temps t [seconde]') % grandeur et unité
ylabel('signal')

%---
stfd=fft(s); % Calcul de la TFD par FFT
df=fe/N;

figure
f=(-N/2:N/2-1)*df; % calcul du vecteur contenant l'échantillonnage des fréquences
% adapté à la TFD en représentation _centrée_ (pour N _pair_).
plot(f,fftshift(abs(stfd))) % affichage du module {abs(¤)} en représentation _centrée_ {fftshift(¤)}
title('TFD du signal')
xlabel('fréquence f [Hz]') % grandeur et unité
ylabel('TFD du signal')
grid on % facultatif

2 sur 3 09/04/2020 à 17:48


Un corrigé des exercices, Examen IniCalcSci 12/3/2020

f0/df

ans = 25.6000

On peut noter que =10Hz÷((50/128)Hz) N'est PAS entier ici.

Les deux pics de la TFD de ce signal , pourtant sinusoïdal, ne sont donc pas très “nets” (pieds larges) car la fenêtre

temporelle d'étude de celui-ci ne contient pas un nombre entier de périodes puisque n'est pas exactement entier…

=============================================================================================

NOTA: Matlab impose actuellement que les functions défines dans un LiveScript soient regroupées à la fin de ce LiveScript.

Function pour l'Exercice n°2:

function M=CalculeM(x,n)
% CalculeM - calcule la matrice des colonnes en cos(k.x)
% USAGE: M=CalculeM(x,n)
% x: vecteur réel (de longueur m)
% n: scalaire entier positif
% M: matrice m×(n+1) donnant la matrice demandée
m=length(x);
if m<n+1
error('m=longueur(x) < n+1')
end
M=ones(m,n+1); % PRÉALLOCATION avec une matrice m×(n+1) remplie de 1.
for j=1:n % La première colonne de M étant déjà remplie de 1 par la préallocation,
M(:,j+1)=cos(j*x); % on peut donc commencer à la colonne n°2 et faire
end % seulement n itérations.
end

3 sur 3 09/04/2020 à 17:48

Vous aimerez peut-être aussi