mt94 cahier integration kevin lefevre
TRANSCRIPT
MT94 - Cahier d’integration
Kevin Lefevre
Universite Technologique de Compiegne - Printemps 2011
Sommaire
1 Fractales 31.1 Ensemble de Mandelbrot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Ensemble de Julia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3 Flocon de Neige de Von Koch . . . . . . . . . . . . . . . . . . . . . . . . . . 51.4 Tapis de Sierpinski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.5 Triangle de Sierpinski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.6 Fougere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.7 Ensemble de Cantor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2 Problemes non lineaires 122.1 Entree en matiere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.1 Resolution d’une equation a une inconnue . . . . . . . . . . . . . . . 122.1.2 La fractale de Newton . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.2.1 Points de Lagrange du Systeme Terre-Lune . . . . . . . . . . . . . . 182.2.2 GPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.2.3 Cinematique Inverse . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3 Systemes d’equations differentielles 213.1 Resolution numerique d’une equation differentielle . . . . . . . . . . . . . . 21
3.1.1 Cas simple : y′(t) = y(t) . . . . . . . . . . . . . . . . . . . . . . . . . 213.1.2 Cas de l’exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2 L’attracteur de Lorentz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.3 L’equation de Van der Pol . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4 Interpolation, approximation 324.1 Interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.1.1 Le phenomene de Runge . . . . . . . . . . . . . . . . . . . . . . . . . 324.1.2 Downsampling et upsampling audio . . . . . . . . . . . . . . . . . . 34
4.2 Problemes de moindres carres . . . . . . . . . . . . . . . . . . . . . . . . . . 364.2.1 Regression polynomiale . . . . . . . . . . . . . . . . . . . . . . . . . 364.2.2 Autre probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5 Schemas aux differences finies 395.1 Exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395.2 Exercice 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395.3 Equation de la chaleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1
6 Valeurs propres 456.1 Resonance dans les systemes mecaniques discrets . . . . . . . . . . . . . . . 45
6.1.1 Premiere partie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456.1.2 Deuxieme partie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.2 Resonance dans les systemes mecaniques continus . . . . . . . . . . . . . . . 556.2.1 Equation des ondes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556.2.2 Oscillations forcees d’un pont . . . . . . . . . . . . . . . . . . . . . . 56
7 Series de Fourier 617.1 Exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617.2 Exercice 2 : Phenomene de Gibbs . . . . . . . . . . . . . . . . . . . . . . . . 667.3 Exercice 3 : Corde pincee . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
2
TD 1
Fractales
1.1 Ensemble de Mandelbrot
On a :
z0 = 0zn+1 = z2n + cz0 fixe
L’ensemble de Mandelbrot est l’ensemble des c pour lesquels la suite converge.S’il existe n pour lequel |zn| > 2 alors la suite diverge. Il est donc necessaire que |c| < 2pour que la suite converge.
Programme Scilab correspondant :
function [B]=Mandelbrot(iter,x,y)
N=length(x);
M=length(y);
[Re,Im] = meshgrid(x,y);
C = Re + %i * Im;
B = zeros(M,N);
Cn=B;
for l=1:iter
Cn=Cn.^2+C;
mask=abs(Cn)<2; // pour verifier la convergence ou non
B(mask)=B(mask)+1; // donne tous les elements qui verifient le
"mask" d’avant sous forme d’un vecteur
end
endfunction
stacksize max
N=400;
M=N*3/4;
iter=256;
x=linspace(-2.5,1.5,N);
y=linspace(-1.5,1.5,M);
[B]=Mandelbrot(iter,x,y);
colormap(jetcolormap(iter));
drawlater
h=imagesc(x,y,B);
axis equal;
3
axis tight;
drawnow;
1.2 Ensemble de Julia
On a :
z0 = 0zn+1 = z2n + cc fixe
Pour l’ensemble de Julia, c’est l’ensemble des z0 pour lesquels la suite converge.S’il existe n pour lequel |zn| > 2 alors la suite diverge. Le principe de l’algorithme est lememe que pour Mandelbrot.
Le cas ou c = 0 est ininteressant car c’est le centre de la cardioıde de l’ensemble deMandelbrot, la suite zn partant de 0 est constante. Ainsi, l’ensemble de Julia est le cerclede centre 0 et de rayon 1.
Programme Scilab correspondant :
function [X]=Julia(p)
x0 = -1.5;
x1 = 1.5;
y0 = -1.5;
y1 = 1.5;
pasx = (x1-x0)/p;
pasy = (y1-y0)/p;
c = -0.11 + 0.6557*%i;
X(1:p,1:p) = 0;
for i = 1:p
for j = 1:p
4
x = x0 + (i-1)*pasx + (y0 + (j-1)*pasy)*%i;
n = 0;
y = x;
while ((abs(y) < 2)&(n < 256))
y = y^2+c;
n = n+5;
end
X(p+1-j,i) = n;
end
end
X = uint8(X);
endfunction
X=Julia(1000);
imshow(X);
1.3 Flocon de Neige de Von Koch
On a l’IFS (Iterated Function System) suivant : {[0, 1];w1, w2, w3, w4}
avec :
w1
(xy
)=
(x30
)w2
(xy
)= 1
3
(cosπ/3 −sinπ/3sinπ/3 cosπ/3
)(xy
)+
(130
)w3
(xy
)= 1
3
(cosπ/3 sinπ/3−sinπ/3 cosπ/3
)(xy
)+
(130
)w4
(xy
)=
(x30
)+
(230
)
Programme Scilab correspondant :
function [b,c,d]=koch(a,e)
global Sx Sy
//commencer avec 0.9 ensuite 0.2 ensuite 0.1 ensuite la total avec 0.01
et 0.001
if norm(a-e)<=0.001;
Sx=[Sx;a(1) e(1)];
Sy=[Sy;a(2) e(2)];
return;
end
b=a+(e-a)/3;
d=e-(e-a)/3;
c=d+R*(e-d);
koch(a,b);
5
koch(b,c);
koch(c,d);
koch(d,e);
endfunction
global Sx Sy
alpha=2*%pi/3;
R=[cos(alpha) -sin(alpha)
sin(alpha) cos(alpha)];
Sx=[];
Sy=[];
koch([0;0],[1;0]);
hold on;
plot(Sx,Sy,’b’);
hold off;
axis([0 1 -0.1 0.5]);
axis equal
1.4 Tapis de Sierpinski
On a l’IFS suivant : {[0, 1];w1, w2, w3}
avec :
w1
(xy
)=
(12 00 1
2
)(xy
)w2
(xy
)=
(12 00 1
2
)(xy
)+
(1412
)w3
(xy
)=
(12 00 1
2
)(xy
)+
(120
)
6
La dimension fractale d du tapis est calculee ainsi :
(113
)d= 8⇒ d =
ln8
ln3(1 < d < 2)
Programme Scilab correspondant :
N=100000;
%n=4;
p=8;
A=zeros(2,2,4);
b=zeros(2,1,4);
m=floor(p/4);
rn=0.5;
x = zeros(2,N);
x(:,1) = [1/2;sqrt(3)/6];
%p = [0.01 0.01 0.01 0.01];
A(:,:,1)=[1/3 0;0 1/3];
b(:,:,1)=[0;0];
A(:,:,2)=[1/3 0;0 1/3];
b(:,:,2)=[1/3;0];
A(:,:,3)=[1/3 0;0 1/3];
b(:,:,3)=[2/3;0];
A(:,:,4)=[1/3 0;0 1/3];
b(:,:,4)=[0;1/3];
A(:,:,5)=[1/3 0;0 1/3];
b(:,:,5)=[2/3;1/3];
A(:,:,6)=[1/3 0;0 1/3];
b(:,:,6)=[0;2/3];
A(:,:,7)=[1/3 0;0 1/3];
b(:,:,7)=[1/3;2/3];
A(:,:,8)=[1/3 0;0 1/3];
b(:,:,8)=[2/3;2/3];
xg=zeros(2,N);
for i=1:N-1
u=floor(1+p*rand(1,1,’def’));
xg(:,i+1)=A(:,:,u)*xg(:,i)+b(:,:,u);
end
hold on
plot(xg(1,:),xg(2,:),’.1k’);
hold off
axis equal
axis off
7
1.5 Triangle de Sierpinski
Programme Scilab correspondant :
N=10000;
%n=4;
p=3;
A=zeros(2,2,4);
b=zeros(2,1,4);
m=floor(p/4);
rn=0.5;
x = zeros(2,N);
x(:,1) = [1/2;sqrt(3)/6];
%p = [0.01 0.01 0.01 0.01];
A(:,:,1) = [1/2 0; 0 1/2];
b(:,:,1)= [0;0];
A(:,:,2) = [1/2 0; 0 1/2];
b(:,:,2) = [1/4;1/2];
A(:,:,3) = [1/2 0; 0 1/2];
b(:,:,3) = [1/2;0];
xg=zeros(2,N);
for i=1:N-1
u=floor(1+p*rand(1,1,’def’));
xg(:,i+1)=A(:,:,u)*xg(:,i)+b(:,:,u);
8
end
hold on
plot(xg(1,:),xg(2,:),’.1k’);
hold off
axis equal
axis off
1.6 Fougere
Programme Scilab correspondant :
N = 100000;
x=zeros(2,1,N);
A(:,:,1)=[0.85 0.04 ; -0.04 0.85];
b(:,1)=[0 ; 1.6];
A(:,:,2)=[0.2 -0.26 ; 0.23 0.22];
b(:,2)=[0 ; 1.6];
A(:,:,3)=[-0.15 0.28 ; 0.26 0.24];
b(:,3)=[0 ; 0.44]
A(:,:,4)=[0 0 ; 0 0.16];
b(:,4)=[0 ; 0];
p1=0.85;
p2=0.07;
p3=p2;
p4=0.01;
p=[p1 ; p2 ; p3 ; p4]
for i=1:N-1
U=rand(1,1, ’def’);
9
if(U<=0.01) then x(:,i+1)=A(:,:,4)*x(:,i)+b(:,4);
elseif (U<=0.07) then
if(rand(1,1, ’def’)<0.5) then x(:,i+1)=A(:,:,3)*x(:,i)+b(:,3);
else x(:,i+1)=A(:,:,2)*x(:,i)+b(:,2);
end
else x(:,i+1)=A(:,:,1)*x(:,i)+b(:,1);
end;
end;
plot(x(1,:), x(2,:), ’.g’,’markersize’,1, ’markerEdgeColor’,
[0,118/255,1/255]);
Dans le meme style, on peut egalement obtenir un arbre :
1.7 Ensemble de Cantor
Il est construit de la facon suivante : on prend l’intervalle [0, 1] que l’on decoupe en3 segments de taille egale et on lui retire le segment du milieu. Il reste alors 2 segments.
10
Pour chaque segment, on reitere le meme procede. On repete ainsi l’algorithme un nombreinfini de fois.
La dimension fractale d de l’ensemble de Cantor est calculee ainsi :
(113
)d= 2⇒ d =
ln2
ln3(0 < d < 1)
11
TD 2
Problemes non lineaires
2.1 Entree en matiere
2.1.1 Resolution d’une equation a une inconnue
1. Choix de l’intervalle [a,b]
L’equation x2 = 2 admet deux solutions.On choisit l’une des deux que l’on note : x =
√2 ' 1, 4142135623 a 10−10 pres.
On prend l’intervalle [1, 2] et on a donc x0 = 3/2.
2. Comparaison de diverses methodes pour trouver x
On a :
f(x) = x2 − 2 et g(x) =x+ 2
x+ 1
Pour chaque methode, on cherche a retrouver l’ordre de convergence α ≥ 1. Pour cela, letrace des points obtenu doit montrer une convergence vers une valeur finie differente de 0pour α donne.
Methode de la dichotomie
Programme Scilab correspondant :
// methode de la dichotomie
function y=f(x) // definition de la fonction f
y=x^2-2;
endfunction
itmax=100; // definition d’une condition d’arret
eps=1e-10; // definition de la precision souhaitee
k=1;
a=zeros(1,itmax);
b=zeros(1,itmax);
X=zeros(1,itmax);
a(1)=1;
b(1)=2;
X(1)=(a(1)+b(1))/2;
while (abs(f(X(k)))>eps & k<itmax)
k=k+1;
if (f(a(k-1))*f(X(k-1))<0)
12
b(k)=X(k-1);
a(k)=a(k-1);
else a(k)=X(k-1);
b(k)=b(k-1);
end;
X(k)=(a(k)+b(k))/2;
disp(X(k));
end;
// recherche de l’ordre alpha
alpha=1;
xchap=sqrt(2);
C=abs((X(2:k)-xchap))./abs((X(1:k-1)-xchap)).^alpha;
plot(C);
Graphique obtenu :
On constate bien que cette methode a un ordre de convergence α = 1.
Methode de point fixe
Programme Scilab correspondant :
// methode de "point fixe"
function y=f(x)
y=x^2-2;
endfunction
function z=g(x)
z=(x+2)/(x+1);
endfunction
13
itmax=100;
eps=1e-10;
k=1;
X=zeros(1,itmax);
a(1)=1;
b(1)=2;
X(1)=(a(1)+b(1))/2;
while (abs(f(X(k)))>eps & k<itmax)
k=k+1;
X(k)=g(X(k-1));
disp(g(X(k)));
end;
// recherche de l’ordre alpha
alpha=1;
xchap=sqrt(2);
C=abs((X(2:k)-xchap))./abs((X(1:k-1)-xchap)).^alpha;
plot(C);
Graphique obtenu :
On constate bien que cette methode a un ordre de convergence α = 1.
Methode de Newton
Programme Scilab correspondant :
// methode de Newton
function y=f(x)
y=x^2-2;
endfunction
14
function d=fprime(x)
d=2*x;
endfunction
itmax=100;
eps=1e-10;
k=1;
X=zeros(1,itmax);
a(1)=1;
b(1)=2;
X(1)=(a(1)+b(1))/2;
while (abs(f(X(k)))>eps & k<itmax)
k=k+1;
X(k)=X(k-1)-(f(X(k-1)))/(fprime(X(k-1)));
disp(X(k));
end;
// recherche de l’ordre alpha
alpha=2;
xchap=sqrt(2);
C=abs((X(2:k)-xchap))./abs((X(1:k-1)-xchap)).^alpha;
plot(C);
Graphique obtenu :
On constate bien que cette methode a un ordre de convergence α = 2.
Methode de la secante
Programme Scilab correspondant :
// methode de la secante
15
function y=f(x)
y=x^2-2;
endfunction
itmax=100;
eps=1e-10;
k=2;
X=zeros(1,itmax);
X(1)=1;
X(2)=2;
while (abs(f(X(k)))>eps & k<itmax)
k=k+1;
X(k)=X(k-1)-((f(X(k-1)))/((f(X(k-1)))-f(X(k-2))))*(X(k-1)-X(k-2));
disp(X(k));
end;
// recherche de l’ordre alpha
alpha=(1+sqrt(5))/2;
xchap=sqrt(2);
C=abs((X(2:k)-xchap))./abs((X(1:k-1)-xchap)).^alpha;
plot(C);
Graphique obtenu :
On constate bien que cette methode a un ordre de convergence α =1 +√
5
2.
2.1.2 La fractale de Newton
On a dans C :
z3 − 1 = 0⇔ (x+ iy)3 − 1 = 0
16
d’ou :
f
(xy
)=
(<(x+ iy)3 − 1=(x+ iy)3
)=
(x3 − 3xy2 − 1−y3 + 3x2y
)on obtient :
f ′(xy
)=
(3x2 − 3y2 −6xy
6xy 3x2 − 3y2
)Programme Scilab associe a la methode de Newton :
function [f,fprime]=ffprime(X) // X vecteur a 2 composantes [x;y]
x=X(1);
y=X(2);
f=zeros(2,1);
f(1,1)=x^3-3*x*y^2-1;
f(2,1)=3*x^2*y-y^3;
fprime=zeros(2,2);
fprime(1,1)=3*x^2-3*y^2;
fprime(2,1)=6*x*y;
fprime(1,2)=-6*x*y;
fprime(2,2)=3*x^2-3*y^2;
endfunction
// verification numerique du calcul de f’
X=[0.1;0.2];
alpha=1e-6; // precision souhaitee
d=[1;0];
[f,fprime]=ffprime(X);
[fplus]=ffprime(X+alpha*d);
terme1=(fplus-f)/alpha;
terme2=fprime*d;
disp("Verification (doit tendre vers 0) :");
disp(abs(terme1-terme2)); //affichage de la difference
// utilisation de la methode de Newton
itmax=100; // nombre maximal d’iterations
eps=1e-6; // precision souhaitee
X0=[-0.4;-0.9];
k=1;
X=zeros(2,itmax);
X(:,k)=X0;
f=ffprime(X0);
disp("Methode de Newton :");
while (norm(f)>eps & k<itmax)
[f,fprime]=ffprime(X(:,k));
d=-fprime\f;
X(:,k+1)=X(:,k)+d;
disp(X(:,k));
k=k+1;
end;
17
La fractale de Newton a cette allure 1 :
2.2 Applications
2.2.1 Points de Lagrange du Systeme Terre-Lune
Programme Scilab correspondant :
//Points de Lagrange du Systeme Terre-Lune
dTL=3.84402*10e8; // en m
MT=5.975*10e24; // en kg
ML=7.35*10e22;
Tr=27.55*24*60*60; // en s
omega=2*%pi/Tr;
g=6.67*10e-11;
xT=-(ML/MT)*dTL;
yT=0;
xL=dTL+xT;
yL=0;
T=[xT;yT];
L=[xL;yL];
function a=acceleration(X)
a=zeros(2,1);
x=X(1);
y=X(2);
a(1,1)=omega^2*x-g*MT*((x-xT)/(((x-xT)^2+y^2)^(3/2)))-g*ML*((x-xL)/
(((x-xL)^2+y^2)^(3/2)));
a(2,1)=omega^2*y-g*MT*(y/(((x-xT)^2+y^2)^(3/2)))-g*ML*(y/
(((x-xL)^2+y^2)^(3/2)));
endfunction
1. http ://www.ann.jussieu.fr/ yakoubi/downloads/tp6cor.pdf
18
M(:,1)=[2*10^8 ; 3*10^8];
M(:,2)=[2*10^8 ; -3*10^8];
M(:,3)=[3*10^8 ; 0];
M(:,4)=[-4*10^8 ; 0];
M(:,5)=[4*10^8 ; 0];
S=zeros(5, 2);
for i=1:5
a=fsolve(M(:,i), acceleration);
S(i,1)=a(1);
S(i,2)=a(2);
end;
hold on;
plot(S(:,1), S(:,2), ’or’);
plot(T(1), T(2), ’*g’);
plot(L(1), L(2), ’*b’);
hold off;
Graphique obtenu :
2.2.2 GPS
Programme Scilab correspondant :
// Programme de Geopositionnement Par Satellite
function g=distance(A,B) // calcul d’une distance entre deux points
g=sqrt((A(1)-B(1))^2+(A(2)-B(2))^2+(A(3)-B(3))^2);
endfunction
function f=gps(R) // fonction de gps
f=[distance(R,S(:,1))-D(1);distance(X,S(:,2))-D(2);distance(X,S(:,3))-
D(3)];
endfunction
19
S1=[-11716.227778, -10118.754628, 21741.083973];
S2=[-12082.643974, -20428.242179, 11741.374154];
S3=[14373.286650, -10448.439349, 19596.404858];
S=[S1;S2;S3]; // initialisation de S
S=S’;
D1=22163.847742;
D2=21492.777482;
D3=21492.469326;
D=[D1,D2,D3]; // initialisation de D
x0=[0;0;0]; // initialisation d’un vecteur x0
pos=fsolve(x0,gps);
disp(pos);
Resultats obtenus (en km) pour la position du recepteur R :xR = −2047, 4638yR = −9458, 9647zR = 1804, 2933
La distance entre le centre de la Terre et le recepteur est donc de :√xR2 + yR2 + zR2 = 9844, 775037 km, c’est-a-dire a un peu plus de 3 km d’altitude de la
surface Terrestre. Les resultats sont coherents.
2.2.3 Cinematique Inverse
Macro Scilab permettant de determiner θ tel que M(θ) = A ou A est un point duplan :
// Probleme de cinematique inverse
function M=f(theta,A)
X=l1*cos(theta(1))+l2*cos(theta(1)+theta(2))-A(1);
Y=l1*sin(theta(1))+l2*sin(theta(1)+theta(2))-A(2);
M=[X;Y];
endfunction
l1=1;
l2=1;
x=0; // coordonnee x du point du plan voulu
y=0; // coordonnee y du point du plan voulu
A=[x;y];
theta=zeros(1,2); // initialisation du vecteur theta
theta=fsolve(theta,f); // determination de theta tel que M(theta)=A
Par exemple, pour atteindre le point A(0.4, 0.7), on obtient θ1 = 46, 19˚et θ2 =−90, 28˚.
20
TD 3
Systemes d’equations differentielles
3.1 Resolution numerique d’une equation differentielle
3.1.1 Cas simple : y′(t) = y(t)
On a le programme Scilab suivant :
// y’=y
function z=f(t,y)
z=y;
endfunction
a=0;
b=1;
N=100;
h=(b-a)/N;
t=zeros(1,N);
y=zeros(1,N);
y(1)=(1);
t(1)=a+((b-a)/N);
for k=1:N
t(k+1)=a+(k+1)*((b-a)/N);
y(k+1)=y(k)+h*f(t(k),y(k));
end
plot(t,y);
hold on;
plot(t,exp(t),’r’);
La solution connue est y(t) = et. Si on la compare avec celle obtenue grace a l’algo-rithme, on obtient le graphique suivant :
21
On constate bien la forte correlation entre les deux courbes. Plus N choisi sera grand,plus elles seront confondues.
3.1.2 Cas de l’exercice 1
On a, pour t ∈ [0, 1] :
y′′(t) + 4π2y(t) = 0y′(0) = 1y(0) = 0
La solution connue est y(t) = cos 2πt.
Schema d’Euler simple
On a le programme Scilab suivant :
// methode d’Euler simple
function Z=f(t,y)
Z=zeros(2,1);
Z(1)=y(2);
Z(2)=-4*%pi^2*y(1);
endfunction
a=0;
b=1;
N=400;
h=(b-a)/N;
t=zeros(1,N);
y=zeros(2,N);
y(:,1)=[1;0];
t(1)=a+((b-a)/N);
for k=1:N
t(k+1)=a+(k+1)*((b-a)/N);
y(:,k+1)=y(:,k)+h*f(t(k),y(:,k));
end
22
plot(t,y(1,:));
hold on;
plot(t,cos(2*%pi*t),’r’);
On obtient le graphique suivant (pour N = 400) :
Schema d’Euler-Cauchy
On a le programme Scilab suivant :
// methode d’Euler-Cauchy
function Z=f(t,y)
Z=zeros(2,1);
Z(1)=y(2);
Z(2)=-4*%pi^2*y(1);
endfunction
a=0;
b=1;
N=100;
h=(b-a)/N;
t=zeros(1,N);
y=zeros(2,N);
y(:,1)=[1;0];
t(1)=a+((b-a)/N);
for k=1:N
t(k+1)=a+(k+1)*((b-a)/N);
y(:,k+1)=y(:,k)+(h/2)*(f(t(k),y(:,k))+f(t(k+1),y(:,k)+h*f(t(k),
y(:,k))));
end
plot(t,y(1,:));
hold on;
23
plot(t,cos(2*%pi*t),’r’);
On obtient le graphique suivant (pour N = 100) :
Schema de Runge Kutta d’ordre 4
On a le programme Scilab suivant :
// methode de Runge Kutta d’ordre 4
function Z=f(t,y)
Z=zeros(2,1);
Z(1)=y(2);
Z(2)=-4*%pi^2*y(1);
endfunction
a=0;
b=1;
N=100;
h=(b-a)/N;
t=zeros(1,N);
y=zeros(2,N);
y(:,1)=[1;0];
t(1)=a+((b-a)/N);
for k=1:N
K1=f(t(k),y(:,k));
K2=f(t(k)+h/2,y(:,k)+h/2*K1);
K3=f(t(k)+h/2,y(:,k)+h/2*K2);
K4=f(t(k)+h,y(:,k)+h*K3);
t(k+1)=a+(k+1)*((b-a)/N);
y(:,k+1)=y(:,k)+(h/6)*(K1+2*K2+2*K3+K4);
end
plot(t,y(1,:));
24
hold on;
plot(t,cos(2*%pi*t),’r’);
On obtient le graphique suivant (pour N = 100) :
Comparaison des 3 schemas
Si on compare les 3 schemas evoques precedemment, et que l’on trace la fonction d’er-reur, pour N = 200, on obtient le graphique suivant :
Le programme Scilab correspondant est :
// Comparaison des 3 methodes avec fonction d’erreur
function Z=f(t,y)
Z=zeros(2,1);
Z(1)=y(2);
Z(2)=-4*%pi^2*y(1);
endfunction
25
a=0;
b=1;
N=200;
h=(b-a)/N;
t=zeros(1,N);
t(1)=a+((b-a)/N);
y1=zeros(2,N);
y2=y1;
y3=y1;
y1(:,1)=[1;0];
y2(:,1)=[1;0];
y3(:,1)=[1;0];
for k=1:N
t(k+1)=a+(k+1)*((b-a)/N);
// Euler normal (y1)
y1(:,k+1)=y1(:,k)+h*f(t(k),y1(:,k));
//Euleur-Cauchy (y2)
y2(:,k+1)=y2(:,k)+(h/2)*(f(t(k),y2(:,k))+f(t(k+1),y2(:,k)+h*f(t(k),
y2(:,k))));
// Runge-Kutta (y3)
K1=f(t(k),y3(:,k));
K2=f(t(k)+h/2,y3(:,k)+h/2*K1);
K3=f(t(k)+h/2,y3(:,k)+h/2*K2);
K4=f(t(k)+h,y3(:,k)+h*K3);
y3(:,k+1)=y3(:,k)+(h/6)*(K1+2*K2+2*K3+K4);
end
// definition de la fonction d’erreur
E1=zeros(1,N);
E2=E1;
E3=E1;
for k=1:N
E1(k)=abs(cos(2*%pi*k)-(y1(1,k)));
E2(k)=abs(cos(2*%pi*k)-(y2(1,k)));
E3(k)=abs(cos(2*%pi*k)-(y3(1,k)));
hold on;
plot(k,E1(k),’or’);
plot(k,E2(k),’og’);
plot(k,E3(k),’ob’);
end
hold off;
err1=max(E1);
err2=max(E2);
err3=max(E3);
disp(err1);
disp(err2);
26
disp(err3);
On obtient les resultats d’erreurs maximales suivants :err1 = 2, 0505939 (Euler simple)err2 = 2, 000012 (Euler-Cauchy)err3 = 2 (Runge-Kutta d’ordre 4)
Le schema de Runge-Kutta semble converger plus rapidement vers la solution exacteque les autres schemas.
3.2 L’attracteur de Lorentz
On a le code Scilab suivant :
// attracteur de Lorentz
function M=f(t,N)
M=zeros(3,1);
M(1)=-10*N(1)+10*N(2);
M(2)=28*N(1)-N(2)-N(1)*N(3);
M(3)=(8/3)*N(3)+N(1)*N(2);
endfunction
a=0;
b=1; // b = T dans l’enonce
N=1000; // pour avoir un pas de calcul egal a 0.001
h=(b-a)/N;
t=zeros(1,N);
y=zeros(3,N);
y(:,1)=[0.01;0.01;0.01];
t(1)=a+((b-a)/N);
for k=1:N
t(k+1)=a+(k+1)*((b-a)/N);
y(:,k+1)=y(:,k)+h*f(t(k),y(:,k));
end
plot(t,y(1,:),’b’); // x en fonction de t
hold on;
plot(t,y(2,:),’g’); // y en fonction de t
plot(t,y(3,:),’r’); // z en fonction de t
legend x=f(t) y=f(t) z=f(t)
//plot(y(2,:),y(1,:),’b’); // y en fonction de x
//plot(y(3,:),y(2,:),’g’); // z en fonction de y
//plot(y(3,:),y(1,:),’r’); // z en fonction de x
hold off;
//surf(y,’facecolor’,’interp’,’edgecolor’,’none’);
On obtient les graphiques suivants :
27
28
Lorsqu’on fait varier legerement les conditions initiales (un point 1,1,1 par exemple),la convergence vers l’attracteur est beaucoup plus rapide :
La trajectoire dans l’espace donne le resultat suivant :
On a donc une convergence rapide vers l’attracteur pour presque toutes les conditionsinitiales, sauf celle tres proche de l’origine.
29
3.3 L’equation de Van der Pol
On a le programme Scilab suivant :
// Equation de Van der Pol
function Y=f(t, X)
Y(1)=X(2);
Y(2)=e*(1-X(1).^2)*X(2)-X(1);
endfunction
function y=euler(X)
y=zeros(2,N);
y(:,1)=X;
for k=1:N-1
y(:,k+1)=y(:,k)+(h/2)*(f(t(k),y(:,k))+f(t(k+1),y(:,k)+h*f(t(k),
y(:,k))));
end
endfunction;
h=0.001; // definition du pas
t=0:h:30; // definition de l’intervalle d’etude
e=1;
N=length(t);
y0=[0.1;0];
S=euler(y0);
plot(t,S(1,:));
Pour e = 1, on obtient le graphe suivant :
30
Pour e = 10, on obtient le graphe suivant :
Le coefficient e joue donc un role important. S’il est nul, on obtient le cas d’un oscil-lateur sinusoıdal et les oscillations ont une amplitude qui depend des conditions initiales.Plus e augmente, plus on constate que les oscillations, malgre des conditions initiales trespetites, se deforment. Les conditions initiales n’ont, en fait, pas d’influence sur le regimeetabli.
31
TD 4
Interpolation, approximation
4.1 Interpolation
4.1.1 Le phenomene de Runge
On a :
f(x) =1
1 + 25x2
1. Calcul du polynome d’interpolation et absence de convergence
On souhaite calculer et representer le polynome d’interpolation p tel que p(xi) = f(xi).Programme Scilab correspondant, ici pour 10 couples (xi, yi) donnes :
// Phenomene de Runge
function y=f(x)
y=(1)./(1+25*x.^2); // utilisation du point pour une division element
par element
endfunction
n=10; // definition du nombre de couples souhaites
i=0:n;
x=-1+2*i/n;
x=x’;
y=f(x);
X=zeros(n+1,n+1);
for i=0:n do
X(:,i+1)=x.^i;
end
a=X\y; // pour resoudre Ax=y sous Scilab on ecrit x=A\y;
X=-1:0.01:1; // a faire varier pour modifier la precision
function Y=poly_interp(X,x,y)
p=poly(a,"x","coeff");
Y=horner(p,X);
endfunction
plot(X,f(X),X,poly_interp(X,x,y),’r’); // superposition des 2 courbes
32
On obtient le graphique suivant pour 10 couples donnes :
La courbe bleue est celle de reference. Quand le nombre de couples n augmente, onobserve une absence de convergence de p vers f . On a pris ici des valeurs de n successivesegales a 6, 8 et 10 (la courbe bleue est celle de reference) :
2. Spline cubique naturelle
Programme Scilab correspondant :
// Spline cubique
function y=f(x)
y=(1)./(1+25*x.^2); // division element par element
endfunction
n=10; // definition du nombre de couples n
33
i=0:n;
x=-1+2*i/n;
x=x’;
y=f(x);
d=splin(x,y); // calcul des derivees aux points xi
X=-1:0.01:1; // faire varier pour precision
Y=interp(X,x,y,d); // valeurs de s(x)
plot(X,f(X),X,Y); // superposition des 2 courbes
On observe la convergence a partir de n = 10 (courbe verte), comme le montre legraphe ci-dessous :
4.1.2 Downsampling et upsampling audio
Code source Scilab correspondant :
// downsampling et upsampling audio
s=loadwave("/Users/Kevin/Documents/Autres/Etudes/UTC/TC 04/MT94/TD4/
116348_atonia_53.wav");
n=size(s,2)-1;
h=1/44100;
t=0:h:n*h;
plot(t,s);
playsnd(s,44100,8,"play");
d=splin(t,s); // calcul des derivees
for k=0:12 do
X=0:(2^(k/12)*h):n*h;
Y=interp(X,t,s,d); // valeurs de s(x)
playsnd(Y,44100,8,"play"); // on joue chaque note obtenue
end
34
// effet avec fonction theta
function f=theta(t)
alpha=10^-3;
freq=20;
T=n*h;
f=t+alpha*sin(2*%pi*freq*t/T);
endfunction
d=splin(theta(t),s);
X=0:(2^(k/12)*h):n*h;
Y=interp(X,theta(t),s,d);
playsnd(Y,44100,8,"play"); // on joue la note avec effet de vibrato obtenue
On obtient le graphique suivant pour l’echantillon etudie :
On a pu ecouter les differentes notes obtenues pour differents degres k.
Un effet de vibrato est realisable comme decrit dans l’enonce avec f = 20 et α = 10−3.Le code Scilab correspondant est disponible ci-dessus avec celui du programme principal.
Il est aussi possible, par exemple, de lire de facon inversee le signal de base.
Code Scilab :
// downsampling et upsampling audio inverse
s=loadwave("/Users/Kevin/Documents/Autres/Etudes/UTC/TC 04/MT94/TD4/
116348_atonia_53.wav");
n=size(s,2)-1;
h=1/44100;
T=n*h;
35
t=0:h:T;
plot(T-t,s); // affichage du signal de base inverse
d=splin(t,s); // calcul des derivees
for k=0:12 do
X=0:(2^(k/12)*h):T;
u=T-X;
Y=interp(u,t,s,d); // valeurs de s(x) inversees
playsnd(Y,44100,8,"play"); // on joue la note obtenue
end
On obtient le graphe suivant :
4.2 Problemes de moindres carres
4.2.1 Regression polynomiale
On a le code source Scilab suivant :
// Probleme de moindres carres, regression polynomiale
// chargement des vecteurs t et y
load /Users/Kevin/Documents/Autres/Etudes/UTC/TC04/MT94/TD4/data1.dat ;
m=length(t);
// construction de la matrice A
A=[ones(m,1) t.^1 t.^2 t.^3]; // point pour elever chaque element a une
puissance voulue
// calcul des coefficients (a,b,c,d)
xchap=A\y;
disp(xchap); // affichage des coefficients
36
// representation des points et de la courbe du polynome
p=poly(xchap, "t", "coeff");
X=-0.5:0.01:0.5; // intervalle de 0.01 (1000 valeurs au lieu de 100 pour lisser)
pX=horner(p,X);
plot(t,y,’o’);
hold on;
plot(X,pX,’r’);
hold off;
On obtient la representation graphique suivante :
Le polynome p(t) = at3 + bt2 + ct+ d a donc pour coefficients :
a = 0, 0495990b = −0, 2354221c = −0, 5096432d = 0, 9643966
4.2.2 Autre probleme
On a ici le code Scilab suivant :
// Probleme de moindres carres, autre
// chargement des vecteurs x, y, t et de la periode T
load /Users/Kevin/Documents/Autres/Etudes/UTC/TC04/MT94/TD4/data2.dat ;
m=length(t); // nombre de valeurs de t
// construction de la matrice A (vecteurs de zeros et de uns)
A=[ones(m,1) zeros(m,1) cos(2*%pi*t/T); zeros(m,1) ones(m,1) sin(2*%pi*t/T)];
z=[x;y];
// calcul des coefficients du cercle (a,b,R)
xchap=A\z;
disp(xchap); // affichage des coefficients
37
// representation des points et de la courbe du cercle
t=0:0.01:T;
M=[xchap(1)+xchap(3)*cos(2*%pi*t/T); xchap(2)+xchap(3)*sin(2*%pi*t/T)];
plot(x,y,’x’);
hold on;
plot(M(1,:),M(2,:),’r’);
axis equal;
hold off;
La representation graphique du probleme donne :
Les coefficients du cercle sont :
a = 0, 5116445b = 0, 4968468R = 1.0210487
Ce probleme admet une solution unique si A est inversible, c’est-a-dire s’il existe i 6= jtel que cos 2πti 6= cos 2πtj.
On peut deduire les equations normales par : ATAx = AT z.
38
TD 5
Schemas aux differences finies
5.1 Exercice 1
On pose B = A − λI. La matrice B n’est pas inversible, donc il existe un vecteurX = (x1, ..., xN )T non nul tel que Bx = 0. Notons i0 l’indice de la composante telle que|xi0 | = maxi=1,...,N |xi| 6= 0. Notons α ce maximum. On considere la ligne i0 de l’equationBx = 0. On a alors :
bxi0−1 + (λ− a)xi0 + bxi0+1 = 0⇒ (λ− a)xi0 = −bxi0−1 − bxi0+1
⇒ |λ− a||xi0 | ≤ |b||xi0−1|+ |b||xi0+1|⇒ |λ− a||xi0 | ≤ |b||xi0 |+ |b||xi0 |⇒ |λ− a| ≤ |b|+ |b|⇒ |λ− a| ≤ 2|b|
De plus, le schema explicite est conditionnellement stable. On a la condition de CFL :
∆t
(∆x)2≤ 1
2
En effet, on a A symetrique donc ||A||2 = maxi|λi(A)| ou λ(A) designe une valeur propre
de A. On applique le critere de Gershgorin et on a, avec ρ =∆t
(∆x)2:
|λ(A)− (1− 2ρ)| ≤ 2ρ⇒ −2ρ ≤ λ(A)− 1 + 2ρ ≤ 2ρ⇒ 1− 4ρ ≤ λ(A) ≤ 1
d’ou :
λ(A) ≤ 1⇔ 1− 4ρ ≥ −1⇔ ρ ≤ 1
2
Pour le schema implicite, aucune condition n’est imposee sur ce rapport : il est incon-ditionnellement stable.
5.2 Exercice 2
On a, pour x ∈]0, 1[ :{−u′′(x) = f(x)u(0) = u(1) = 0
39
Question 1
On a :
f(x) ≥ 0⇒ u′′(x) < 0⇒ u est concave⇒ u(x) = u(x.u(1) + (1− x).u(0))⇒ u(x) ≥ 0
D’apres la propriete de la concavite : ∀θ ∈ (0, 1), u(θa+(1−θ)b) ≥ θu(a)+(1−θ)u(b).
Question 2
On discretise l’intervalle ]0, 1[= ∪(xi, xi+1) ou x0 = 0, xN = 1 et h = 1/N .
On approche u′′(xi) =u(xi + h)− 2u(xi) + u(xi − h)
h2+O(h2).
Negligeant en O(h2), on note : ui l’approximation de u(xi). On obtient :{−ui+1 + 2ui− ui− 1 = h2f(xi)u0 = uN = 0
Question 3
On a le systeme lineaire Au = b suivant :
2 −1 0
−1. . .
. . .. . .
. . .. . .
. . .. . . −1
0 −1 2
u1...ui...
uN−1
=
h2f(x1)
...h2f(xi)
...h2f(xN−1)
Sous Scilab, on peut realiser une matrice tridiagonale grace au script suivant :
//faire varier nx (3,4,5) pour la taille de la matrice
nx=5;
A=zeros(nx,nx);
sousdiag=ones(nx-1,1);
A=diag(sousdiag,-1)+diag(sousdiag,1)+(-2)*diag(ones(nx,1),0);
disp(A);
Question 4
La matrice A tridiagonale avec des 2 sur la diagonale et -1 sur les deux diagonalesinferieure et superieure est definie positive. En effet, si x = (xi)1,...,N on a alors :
40
≺ Ax, x � = (2x1 − x2)x1 +N−1∑i=2
xi(2xi − xi−1 − xi+1) + xN (−xN−1 + 2xN )
= (2x1 − x2)x1 +N−1∑i=2
xi((xi − xi−1)− (xi+1 − xi)) + xN (−xN−1 + 2xN )
= x21 + (x2 − x1)2 + x2N + (xN − xN−1)2 +N−2∑i=3
(xi − xi−1)2
≥ 0
Soit x ∈ RN tel que ≺ Ax, x �= 0. On a alors une somme de carres egale a 0,donc chaque terme de la somme est nul. Cela implique que xi = 0, i = 1, ..., N . Ainsi,≺ Ax, x �= 0⇒ x = 0.
Donc A est bien definie positive, et elle est donc inversible.
Solution avec commentaires de l’exercice
// definition de l’intervalle d’etude
xmin=0;
xmax=1;
npt=input("Nombre total de points :");
// choix du nombre de points souhaites : discretisation
nint=npt-1;
nx=npt-2;
M=zeros(nx,nx);
h=(xmax-xmin)/nint; // h represente le pas
sousdiag=ones(nx-1,1);
// construction de la matrice M "creuse" a l’aide de fonctions preexistantes
M=diag(sousdiag,-1)+diag(sousdiag,1)+(-2)*diag(ones(nx,1),0);
x=linspace(xmin+h,xmax-h,nx)’;
// le vecteur c represente la solution avec second membre
c=zeros(nx,1);
for i=1:nx
c(i)=-h*h*1; // remplacer 1 par x(i) pour avoir bonne solution
end
// resolution du systeme
y=M\c;
yy=[0;y;0];
xx=[xmin;x;xmax];
//xsegs([xmin,xmax],[0,0]);
// trace de la solution approchee (valeurs discretes)
plot2d(xx,yy,-4);
hold on;
t=[0:1/nx:1];
// trace de la solution exacte (valeurs continues)
plot2d(t,t.*(1-t.^2)/6);
hold off;
41
On obtient le graphe suivant pour 50 points :
5.3 Equation de la chaleur
On a le programme Scilab suivant :
// equation de la chaleur
// fonction
function y=f(x)
y=sin(%pi.*x); // base : y=x.*(x-1);
endfunction
// definition de l’intervalle d’etude et des constantes
L=1;
T=1;
xmin=0;
xmax=L;
tmin=0;
tmax=T;
kappa=1;
dx=0.1; // discretisation en espace (h)
rho=0.4; // condition CFL (choisie arbitrairement)
dt=rho*dx^2; // discretisation en temps, obtenue a partir de rho (k)
tInterieur=[tmin+dt:dt:tmax-dt];
xInterieur=[xmin+dx:dx:xmax-dx];
nbtInterieur=length(tInterieur);
nbxInterieur=length(xInterieur);
// construction de la matrice A "creuse" a l’aide de fonctions preexistantes
A=zeros(nbxInterieur,nbtInterieur);
42
sousdiag=ones(nbxInterieur-1,1);
A=rho*diag(sousdiag,-1)+rho*diag(sousdiag,1)+(1-2*rho)*
diag(ones(nbxInterieur,1),0);
//construction du vecteur U
U=zeros(nbxInterieur,1);
U=f(xInterieur);
U=U’;
xComplet=[xmin xInterieur xmax];
tComplet=[tmin tInterieur tmax];
for j=1:nbtInterieur
U=A*U;
//if modulo(j,10)==0 then // pour afficher 1 sur 10
plot2d(xComplet,[0;U;0]);
//end
hold on;
end
//comparaison de u(x,T) avec u(:,N-1)
plot(xComplet,exp(-%pi^2*T)*sin(%pi*x),’r’);
plot2d(xComplet,[0;U;0]); // il y a bien convergence
hold off;
On obtient le graphique suivant :
On peut egalement choisir une representation en 3 dimensions, grace au programmesuivant :
// equation de la chaleur en 3D
// fonction
function y=f(x)
y=sin(%pi.*x); // base : y=sin(%pi.*x)
endfunction
43
// definition de l’intervalle d’etude et des constantes
L=1;
T=1;
xmin=0;
xmax=L;
tmin=0;
tmax=T;
kappa=1;
dx=0.1; // discretisation en espace (h)
rho=0.4; // condition CFL (choisie arbitrairement)
dt=rho*dx^2; // discretisation en temps, obtenue a partir de rho (k)
tInterieur=[tmin+dt:dt:tmax-dt];
xInterieur=[xmin+dx:dx:xmax-dx];
nbtInterieur=length(tInterieur);
nbxInterieur=length(xInterieur);
// construction de la matrice A "creuse" a l’aide de fonctions preexistantes
A=zeros(nbxInterieur,nbtInterieur);
sousdiag=ones(nbxInterieur-1,1);
A=rho*diag(sousdiag,-1)+rho*diag(sousdiag,1)+(1-2*rho)*
diag(ones(nbxInterieur,1),0);
//construction du vecteur U
U=zeros(nbxInterieur,nbtInterieur);
U(:,1)=f(nbxInterieur);
for j=2:nbtInterieur
U(:,j)=A*U(:,j-1);
end
surf(U); // affichage de la repartition de la chaleur
On obtient alors l’illustration suivante :
44
TD 6
Valeurs propres
6.1 Resonance dans les systemes mecaniques discrets
6.1.1 Premiere partie
Dans cette partie, on considere le programme Scilab suivant :
// 1- Determination des valeurs propres
k1=5;
k2=10;
m=0.1;
m1=m;
m2=m;
A=[(k1+k2)/m1,-k2/m1;-k2/m2,k2/m2]; // initialisation de la matrice A
// methode d’iteration sur un sous-espace
n=2;
p=2;
X=rand(n,p);
for i=1:100
X=orth(A*X); // la plus grande valeur propre sera en position (1,1)
et la plus petite en position (n,p)
end
D=X’*A*X;
lambda1=D(1,1);
y1=X(:,1);
disp(lambda1);
disp(y1);
lambda2=D(n,p);
y2=X(:,2);
disp(lambda2);
disp(y2);
// verification des resultats avec la macro spec
[lambdas,Vp]=spec(A);
disp(lambdas); // valeurs propres sur la diagonale
disp(Vp); // vecteurs propres
// -------------------------------------------------------------------
// 2- Simulation
function anime_os(t,v,m1,m2,L1,L2)
v1=v(1,:);
45
v2=v(2,:);
xr=[ 0 .5 1.5 2.5 3.5 4 4 4];
xr=xr/4;
yr=[ 0 1 -1 1 -1 0 1 -1];
ym=[1 -1 -1 1 1];
xm=[0 0 1 1 0];
lm1=2;
lm2=2*m2/m1;
drawlater
r1=plot(xr*(L1+v1(1)),yr);
hold on
r2=plot((L1+v1(1))+lm1+xr*(L2+v1(1)-v2(1)),yr);
ma1=plot(xm*lm1+L1+v1(1),ym);
ma2=plot(xm*lm2+L1+L2+v2(1)+lm1,ym);
axis(’equal’)
axis(axis());
hold off
drawnow
for i=1:length(t)
drawlater
set(r1,’xdata’,xr*(L1+v1(i)));
set(r2,’xdata’,L1+v1(i)+lm1+xr*(L2-v1(i)+v2(i)));
set(ma1,’xdata’,xm*lm1+L1+v1(i));
set(ma2,’xdata’,xm*lm2+L1+L2+v2(i)+lm1);
drawnow
end
endfunction
function dXdt=rhs(t,X)
u=X(1:2);
upoint=X(3:4);
//f=sin(omega1*t); // cas 1 : on utilise la fonction sinus avec omega1
ou omega2
if (sin(omega1*t)>0) then f=1; // cas 2 : on utilise une fonction
creneau (utilisation du signe du sinus : negatif donne 0 et positif donne 1)
else f=0;
end;
dXdt=[upoint;-A*u+B*f];
endfunction
omega1=sqrt(lambda1);
omega2=sqrt(lambda2);
46
h=0.05;
t=0:h:10;
X=zeros(4,length(t));
X0=zeros(4,1);
B=[0;1/m2];
X=ode(X0,0,t,rhs); // ode resoud systemes du type : Xpoint(t)=f(t,X(t))
L1=5; // longueur au repos du ressort 1
L2=5; // longueur au repos du ressort 2
plot(t,X(1:2,:)); // affichage
xclick();
anime_os(t,X,m1,m2,L1,L2);
Determination des valeurs propres
Comme montre dans la partie 1 du programme Scilab ci-dessus, on obtient a l’aide dela methode de la puissance iteree (et iteree inverse) :
λ1 = 228, 07764
y1 =
(−0, 78820540, 6154122
)λ2 = 21, 922359
y2 =
(0, 61541220, 7882054
)
La macro � spec � de Scilab renvoie les memes resultats.
47
Simulation
Les details de la simulation sont disponibles dans la partie 2 du programme Scilabci-dessus.
Question 1
Pour f(t) = sin(ω1t), on a :
On peut visualiser l’animation des ressorts. Voici la photo obtenue a la fin de l’anima-tion :
48
Pour f(t) = sin(ω2t), on a :
De meme, on peut visualiser l’animation des ressorts. Voici la photo obtenue a la finde l’animation :
Question 2
On a :f(t) = 1, t ∈ [0,
π
ωi[
f(t) = 0, t ∈ [π
ωi,2π
ωi[
49
Pour i = 1, on a :
On peut visualiser l’animation des ressorts. Voici la photo obtenue a la fin de l’anima-tion :
50
Pour i = 2, on a :
De meme, on peut visualiser l’animation des ressorts. Voici la photo obtenue a la finde l’animation :
6.1.2 Deuxieme partie
Question 1
On a :
X =
u1u2u1u2
=
X1
X2
X3
X4
et
{m1u1 = −(k1 + k2)u1 + k2u2 − αu1m2u2 = k2u1 − k2u2 + f(t)
51
d’ou :
X =
X3
X4−k1+k2m1
X1 + k2m1X2 − α
m1X3
k2m2X1 − k2
m2X2 + 1
m2f(t)
=
0 0 1 00 0 0 1
−k1+k2m1
k2m1
− αm1
0k2m2
− k2m2
0 0
X1
X2
X3
X4
+
0001m2
f(t)
Ainsi :
B =
0 0 1 00 0 0 1
−k1+k2m1
k2m1
− αm1
0k2m2
− k2m2
0 0
et C =
0001m2
Question 2
On peut ecrire le programme Scilab suivant :
// 1- Determination des valeurs propres
k1=5;
k2=10;
m=0.1;
m1=m;
m2=m;
alpha=1;
A=[-(k1+k2)/m1,k2/m1;k2/m2,-k2/m2]; // initialisation de la matrice A
B=zeros(4,4); // initialisation de la matrice bloc B
B(1:2,3:4)=zeros(2,2);
B(3:4,1:2)=A;
B(1:2,3:4)=eye(2,2);
B(3,3)=-alpha/m1;
C=[0;0;0;1/m2]; // initialisation de la matrice C
// calcul des valeurs propres avec la macro spec
val_propres=spec(B);
lambda1=val_propres(1);
lambda2=val_propres(3);
// -------------------------------------------------------------------
// 2- Simulation
function anime_os(t,v,m1,m2,L1,L2)
v1=v(1,:);
v2=v(2,:);
xr=[ 0 .5 1.5 2.5 3.5 4 4 4];
xr=xr/4;
yr=[ 0 1 -1 1 -1 0 1 -1];
52
ym=[1 -1 -1 1 1];
xm=[0 0 1 1 0];
lm1=2;
lm2=2*m2/m1;
drawlater
r1=plot(xr*(L1+v1(1)),yr);
hold on
r2=plot((L1+v1(1))+lm1+xr*(L2+v1(1)-v2(1)),yr);
ma1=plot(xm*lm1+L1+v1(1),ym);
ma2=plot(xm*lm2+L1+L2+v2(1)+lm1,ym);
axis(’equal’)
axis(axis());
hold off
drawnow
for i=1:length(t)
drawlater
set(r1,’xdata’,xr*(L1+v1(i)));
set(r2,’xdata’,L1+v1(i)+lm1+xr*(L2-v1(i)+v2(i)));
set(ma1,’xdata’,xm*lm1+L1+v1(i));
set(ma2,’xdata’,xm*lm2+L1+L2+v2(i)+lm1);
drawnow
end
endfunction
function dXdt=rhs(t,X,omega)
f=sin(omega*t);
dXdt=B*X+C*f;
endfunction
omega1=sqrt(abs(imag(lambda1))); // on prend la racine de la valeur absolue
de la partie imaginaire
omega2=sqrt(abs(imag(lambda2)));
h=0.05;
t=0:h:10;
X=zeros(4,length(t));
X0=zeros(4,1);
X=ode(X0,0,t,list(rhs,omega1)); // ode resolve systemes du type :
Xpoint(t)=f(t,X(t)) ou on introduit en parametre omega1 ou omega2
plot(t,X(1:2,:)); // affichage
xclick();
L1=5; // longueur au repos du ressort 1
L2=5; // longueur au repos du ressort 2
anime_os(t,X,m1,m2,L1,L2);
53
On obtient deux couples de valeurs propres conjuguees :−2, 8632762 + 13, 871001i−2, 8632762− 13, 871001i−2, 1367238 + 4, 5121236i−2, 1367238− 4, 5121236i
Question 3
Pour obtenir les deux nouvelles pulsations, on prend la racine de la valeur absoluede la partie imaginaire des valeurs propres obtenues precedemment. On a ainsi :{
ω1 = 3, 7243793ω2 = 2, 124176
Si on simule le systeme avec ω1, on obtient le graphique et la fin d’animation suivants :
54
Si on simule le systeme avec ω2, on obtient le graphique et la fin d’animation suivants :
6.2 Resonance dans les systemes mecaniques continus
6.2.1 Equation des ondes
On a la matrice A qui est symetrique. Donc ses vecteurs propres sont orthogonaux.La methode d’iteration sur un sous-espace consiste a considerer p vecteurs de Rn et oneffectue les operations suivantes :
Y ik+1 =
AXik
||AXik||
avec k ≥ 0 et i = 1, ..., p
ou {Xik+1} est obtenu par orthogonalisation de la famille {Y i
k+1}.
On a le theoreme suivant :
55
limk→+∞
Xpk = αY p
ou Y p est le vecteur propre associe a λp, la valeur propre p de A.
On obtient :λ1 = 0, 0978870λ2 = 0, 3819660λ3 = 0, 8244295
6.2.2 Oscillations forcees d’un pont
On a le programme Scilab suivant :
// Resonance dans les systemes mecaniques continus
// Initialisation des donnees
c=1;
L=1; // longueur de la corde
N=50;
h=L/N;
// construction de la matrice A "creuse" a l’aide de fonctions
preexistantes
sousdiag=ones(N-2,1);
A=(-1)*diag(sousdiag,-1)+(-1)*diag(sousdiag,1)+2*diag(ones(N-1,1),0);
// methode d’iteration sur un sous-espace pour determiner les valeurs
propres de A
n=N-1;
p=N-1;
X=rand(n,p);
for i=1:100
X=orth(A*X); // la plus grande valeur propre sera en position (1,1)
et la plus petite en position (n,p)
end
D=X’*A*X;
lambda1=D(N-1,N-1); // on garde les 3 plus petites valeurs propres
lambda2=D(N-2,N-2);
lambda3=D(N-3,N-3);
function anime_ondes(t,X,L)
ampl=max(abs(X));
N=1+size(X,1)/2;
nt=size(X,2);
x=linspace(0,L,N+1)’;
v=X(1:N-1,:);
v=[zeros(1,nt);v;zeros(1,nt)];
56
drawlater
h=plot(x,v(:,1));
axis([0 L -ampl ampl]);
drawnow
for i=2:nt
set(h,’ydata’,v(:,i));
end
endfunction
function dXdt=rhs(t,X,omega,a,b)
v=X(1:N-1);
dvdt=X(N:2*N-2);
x=(h:h:L-h)’;
g=(x>=a & x<b)*sin(omega*t);
dXdt=[dvdt;-c^2*(A*v+g)];
endfunction
omega1=sqrt(lambda1);
omega2=sqrt(lambda2);
omega3=sqrt(lambda3);
t=0:h:40;
X=zeros(2*N-2,length(t));
X0=zeros(2*N-2,1);
X=ode(X0,0,t,list(rhs,omega1,0,1));
plot(t,X(1:8,:)); // affichage
xclick();
anime_ondes(t,X,L);
57
On obtient les graphiques ci-apres (le second est une capture d’ecran de l’animation).
Pour ω1 :
58
Pour ω2 :
59
Pour ω3 :
60
TD 7
Series de Fourier
7.1 Exercice 1
Question 1
On a :
f(x) ∼ Sf(x) =a02
+∞∑1an cosnωx+
∞∑1bn sinnωx
ou :
an = 2
T
∫[T ] f(x) cosnωxdx
bn = 2T
∫[T ] f(x) sinnωxdx
ω =2π
T[T ] intervalle de longueur T
Question 2
On a :
Sf(x0) =f(x+0 ) + f(x−0 )
2
Question 3
Pour f1 :
La fonction est impaire donc an = 0 et on obtient : bn = 2(−1)n+1
n
Donc : Sf1(x) = 2∑ (−1)n+1 sinnx
n
Pour f2 :
La fonction est paire donc bn = 0 et on obtient :
an =
0 si n est pair (n = 2p)−4
(2p− 1)2πsi n est impair (n = 2p− 1)
avec a0 = π
Donc : Sf2(x) =π
2− 4
π
∑ cosx(2p− 1)
(2p− 1)2
61
Pour f3 :
an =
0 si n est pair (n = 2p)−2
(2p− 1)2πsi n est impair (n = 2p− 1)
avec a0 =π
2
bn =(−1)n+1
n
Donc : Sf3(x) =π
4− 2
π
∑ cosx(2p− 1)
(2p− 1)2+∑ (−1)n+1
nsinnx
Question 4
On a :
Sf3(x) =f3(x
+) + f3(x−)
2et f3(0) =
π
4− 2
π
∑ 1
(2p− 1)2= 0
D’ou : ∑ 1
(2p− 1)2=π2
8
Ainsi : ∑ 1
n2=∑ 1
(2p)2+∑ 1
(2p− 1)2=π2
8+
1
4
∑ 1
p2
Or :
3
4
∑ 1
n2=π2
8
Donc : ∑ 1
n2=π2
6
Question 5
On a :1
2π
∫ π−π |f3(x)|2 dx =
π2
16+
1
2(
4
π2∑ 1
(2p− 1)4+∑ 1
n2)
⇒ 1
2π
∫ π0 x
2 dx =π2
16+
2
π2∑ 1
(2p− 1)4+π2
12
⇒ π2
6=
π2
16+
2
π2∑ 1
(2p− 1)4+π2
12
⇒∑ 1
(2p− 1)4=
π4
96
On note :
S =∑ 1
n4=∑ 1
(2p)4+∑ 1
(2p− 1)4
62
D’ou :
S =π4
96+
1
16S
Donc : ∑ 1
n4=π4
90
Question 6
On a la procedure Scilab suivante :
// Calcul d’une approximation de la serie de Fourier
function z=f1(x,T)
z=x-T*round(x/T); // fonction impaire (f1)
endfunction
function z=f2(x,T)
z=abs(x-T*round(x/T)); // fonction paire (f2)
endfunction
//y=x-T*round(x/t); // pour periodiser une fonction
omega=1;
T=2*%pi/omega;
a=-T/2;
b=T/2;
N=50;
h=(b-a)/N; // definition du pas
t=a:h:b;
nb_harmoniques=20;
A=zeros(nb_harmoniques,1);
B=A;
for n=1:nb_harmoniques
c=0;
d=0;
for i=1:N+1
c=c+(2/T)*h*f1(t(i),T)*cos(n*omega*t(i)); // simulation de la somme
d=d+(2/T)*h*f1(t(i),T)*sin(n*omega*t(i));
end;
A(n)=2/T*c;
B(n)=2/T*d;
end
S=zeros(N+1,1);
TEMP=zeros(length(t),1);
A0=0;
for i=1:N+1
A0=A0+(1/T)*h*f1(t(i),T);
63
end;
S=A0;
for n=1:nb_harmoniques
S=S+A(n)*cos(n*omega*t)+B(n)*sin(n*omega*t);
TEMP(:,n)=S’;
end
racine=sqrt(A^2+B^2);
n=1:nb_harmoniques;
//plot(t,f1(t));
//plot(t,f2(t));
//plot2d3(n,racine);
plot(t’, TEMP(:,3));
hold on;
plot(t’, TEMP(:,5));
plot(t’, TEMP(:,7));
plot(t, f1(t), ’r’);
//plot(t, f2(t), ’r’);
64
On obtient, pour f1 (fonction impaire) :
65
On obtient, pour f2 (fonction paire) :
7.2 Exercice 2 : Phenomene de Gibbs
Question 1
Comme f est impaire, an = 0 et on obtient : bn =
0 si n est pair (n = 2k)4
(2k − 1)πsi n est impair (n = 2k − 1)
Donc : Sf(x) =4
π
∑ sin (2k − 1)x
2k − 1
66
Question 2
On a le programme Scilab suivant :
// Calcul d’une approximation de la serie de Fourier
function z=f(x)
if (x<=%pi & x>=0)
z=1; // fonction impaire (f)
else z=0;
end;
endfunction
//y=x-T*round(x/t); // pour periodiser une fonction
omega=1;
T=2*%pi/omega;
a=-T/2;
b=T/2;
N=50;
h=(b-a)/N; // definition du pas
t=a:h:b;
nb_harmoniques=60;
A=zeros(nb_harmoniques,1);
B=A;
for n=1:nb_harmoniques
c=0;
d=0;
for i=1:N+1
c=c+(2/T)*h*f(t(i))*cos(n*omega*t(i)); // simulation de la somme
d=d+(2/T)*h*f(t(i))*sin(n*omega*t(i));
end;
A(n)=2/T*c;
B(n)=2/T*d;
end
S=zeros(N+1,1);
TEMP=zeros(length(t),1);
A0=0;
for i=1:N+1
A0=A0+(1/T)*h*f(t(i));
end;
S=A0;
for n=1:nb_harmoniques
S=S+A(n)*cos(n*omega*t)+B(n)*sin(n*omega*t);
TEMP(:,n)=S’;
end
racine=sqrt(A^2+B^2);
n=1:nb_harmoniques;
67
//plot2d3(n,racine);
fonction=zeros(N+1);
for i=1:N
fonction(i)=f(t(i)); // on remplit une matrice pour representer f
(car f(t) ne fonctionne pas directement avec un test dans la fonction)
end
fonction(N+1)=1;
plot(t,fonction’,’r’);
hold on;
plot(t’, TEMP(:,2));
plot(t’, TEMP(:,5));
plot(t’, TEMP(:,10));
plot(t’, TEMP(:,20));
plot(t’, TEMP(:,60),’g’);
On a le spectrogramme suivant :
68
On obtient egalement les graphiques suivants (le premier pour de faibles valeurs de n,et le second pour n allant jusque 60) :
69
7.3 Exercice 3 : Corde pincee
La situation initiale de la corde est la suivante :
Je n’ai pas reussi a obtenir la solution souhaitee dans l’exercice. Je met quand memele debut de mon programme Scilab :
function y=f(x)
y=(x<=a).*h.*x/a+(x>a).*h.*(L-x)/(L-a);
endfunction
a=2;
L=10;
T=10;
c=1;
h=1; // definition de la hauteur
pas=0.1; // definition du pas
x=0:pas:L;
t=0:pas:T;
plot(x,f(x));
nb_harmoniques=20;
d=zeros(L/pas,1);
for n=1:nb_harmoniques
for i=1:length(t)
d=f(t)*sin(n*%pi*i/L);
end;
U(n)=2/L*pas*sum(d);
end;
S=zeros(length(t),1);
TEMP=zeros(length(t),1);
U0=0;
for i=1:length(t)
U0=U0+(2/L)*pas*f(i);
70
end;
S=U0;
for i=1:L/pas
for j=1:T/pas
for n=1:nb_harmoniques
S=S+U(n)*cos(n*%pi*c*j/L)*sin(n*%pi*i/L);
TEMP(:,n)=S’;
end
end
end
//plot(t, TEMP(:,6)’);
hold on;
//plot(t, f(t), ’r’);
71