Вы находитесь на странице: 1из 72

MT94 - Cahier dintegration

Kevin Lef`evre
Universite Technologique de Compi`egne - Printemps 2011
Sommaire
1 Fractales 3
1.1 Ensemble de Mandelbrot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Ensemble de Julia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Flocon de Neige de Von Koch . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Tapis de Sierpinski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5 Triangle de Sierpinski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.6 Foug`ere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.7 Ensemble de Cantor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2 Probl`emes non lineaires 12
2.1 Entree en mati`ere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.1 Resolution dune equation `a une inconnue . . . . . . . . . . . . . . . 12
2.1.2 La fractale de Newton . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.1 Points de Lagrange du Syst`eme Terre-Lune . . . . . . . . . . . . . . 18
2.2.2 GPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.3 Cinematique Inverse . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3 Syst`emes dequations dierentielles 21
3.1 Resolution numerique dune equation dierentielle . . . . . . . . . . . . . . 21
3.1.1 Cas simple : y

(t) = y(t) . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1.2 Cas de lexercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2 Lattracteur de Lorentz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3 Lequation de Van der Pol . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4 Interpolation, approximation 32
4.1 Interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.1.1 Le phenom`ene de Runge . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.1.2 Downsampling et upsampling audio . . . . . . . . . . . . . . . . . . 34
4.2 Probl`emes de moindres carres . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.2.1 Regression polynomiale . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.2.2 Autre probl`eme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5 Schemas aux dierences nies 39
5.1 Exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.2 Exercice 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.3 Equation de la chaleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1
6 Valeurs propres 45
6.1 Resonance dans les syst`emes mecaniques discrets . . . . . . . . . . . . . . . 45
6.1.1 Premi`ere partie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.1.2 Deuxi`eme partie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.2 Resonance dans les syst`emes mecaniques continus . . . . . . . . . . . . . . . 55
6.2.1 Equation des ondes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.2.2 Oscillations forcees dun pont . . . . . . . . . . . . . . . . . . . . . . 56
7 Series de Fourier 61
7.1 Exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7.2 Exercice 2 : Phenom`ene de Gibbs . . . . . . . . . . . . . . . . . . . . . . . . 66
7.3 Exercice 3 : Corde pincee . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
2
TD 1
Fractales
1.1 Ensemble de Mandelbrot
On a :

z
0
= 0
z
n+1
= z
2
n
+ c
z
0
xe
Lensemble de Mandelbrot est lensemble des c pour lesquels la suite converge.
Sil existe n pour lequel |z
n
| > 2 alors la suite diverge. Il est donc necessaire que |c| < 2
pour 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" davant sous forme dun 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 :

z
0
= 0
z
n+1
= z
2
n
+ c
c xe
Pour lensemble de Julia, cest lensemble des z
0
pour lesquels la suite converge.
Sil existe n pour lequel |z
n
| > 2 alors la suite diverge. Le principe de lalgorithme est le
meme que pour Mandelbrot.
Le cas o` u c = 0 est ininteressant car cest le centre de la cardiode de lensemble de
Mandelbrot, la suite z
n
partant de 0 est constante. Ainsi, lensemble de Julia est le cercle
de 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 lIFS (Iterated Function System) suivant : {[0, 1]; w1, w2, w3, w4}
avec :

w1

x
y

x
3
0

w2

x
y

=
1
3

cos/3 sin/3
sin/3 cos/3

x
y

1
3
0

w3

x
y

=
1
3

cos/3 sin/3
sin/3 cos/3

x
y

1
3
0

w4

x
y

x
3
0

2
3
0

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 lIFS suivant : {[0, 1]; w1, w2, w3}
avec :

w1

x
y

1
2
0
0
1
2

x
y

w2

x
y

1
2
0
0
1
2

x
y

1
4
1
2

w3

x
y

1
2
0
0
1
2

x
y

1
2
0

6
La dimension fractale d du tapis est calculee ainsi :

1
1
3

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 Foug`ere
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 fa con suivante : on prend lintervalle [0, 1] que lon decoupe en
3 segments de taille egale et on lui retire le segment du milieu. Il reste alors 2 segments.
10
Pour chaque segment, on reit`ere le meme procede. On rep`ete ainsi lalgorithme un nombre
inni de fois.
La dimension fractale d de lensemble de Cantor est calculee ainsi :

1
1
3

d
= 2 d =
ln2
ln3
(0 < d < 1)
11
TD 2
Probl`emes non lineaires
2.1 Entree en mati`ere
2.1.1 Resolution dune equation `a une inconnue
1. Choix de lintervalle [a,b]
Lequation x
2
= 2 admet deux solutions.
On choisit lune des deux que lon note : x =

2 1, 4142135623 `a 10
10
pr`es.
On prend lintervalle [1, 2] et on a donc x
0
= 3/2.
2. Comparaison de diverses methodes pour trouver x
On a :
f(x) = x
2
2 et g(x) =
x + 2
x + 1
Pour chaque methode, on cherche `a retrouver lordre de convergence 1. Pour cela, le
trace des points obtenu doit montrer une convergence vers une valeur nie dierente de 0
pour 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 dune condition darr^et
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 lordre 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 xe
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 lordre 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 lordre 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 lordre 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 :
z
3
1 = 0 (x + iy)
3
1 = 0
16
do` u :
f

x
y

(x + iy)
3
1
(x + iy)
3

x
3
3xy
2
1
y
3
+ 3x
2
y

on obtient :
f

x
y

3x
2
3y
2
6xy
6xy 3x
2
3y
2

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 diterations
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 Syst`eme Terre-Lune
Programme Scilab correspondant :
//Points de Lagrange du Syst`eme 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 dune 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 dun vecteur x0
pos=fsolve(x0,gps);
disp(pos);
Resultats obtenus (en km) pour la position du recepteur R :
x
R
= 2047, 4638
y
R
= 9458, 9647
z
R
= 1804, 2933
La distance entre le centre de la Terre et le recepteur est donc de :

x
R
2
+ y
R
2
+ z
R
2
= 9844, 775037 km, cest-`a-dire `a un peu plus de 3 km daltitude de la
surface Terrestre. Les resultats sont coherents.
2.2.3 Cinematique Inverse
Macro Scilab permettant de determiner tel que M() = A o` u A est un point du
plan :
// Probl`eme 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, 19et
2
=
90, 28.
20
TD 3
Syst`emes dequations dierentielles
3.1 Resolution numerique dune equation dierentielle
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) = e
t
. Si on la compare avec celle obtenue grace `a lalgo-
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 lexercice 1
On a, pour t [0, 1] :

(t) + 4
2
y(t) = 0
y

(0) = 1
y(0) = 0
La solution connue est y(t) = cos 2t.
Schema dEuler simple
On a le programme Scilab suivant :
// methode dEuler 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 dEuler-Cauchy
On a le programme Scilab suivant :
// methode dEuler-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 dordre 4
On a le programme Scilab suivant :
// methode de Runge Kutta dordre 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 lon trace la fonction der-
reur, pour N = 200, on obtient le graphique suivant :
Le programme Scilab correspondant est :
// Comparaison des 3 methodes avec fonction derreur
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 derreur
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 derreurs maximales suivants :
err1 = 2, 0505939 (Euler simple)
err2 = 2, 000012 (Euler-Cauchy)
err3 = 2 (Runge-Kutta dordre 4)
Le schema de Runge-Kutta semble converger plus rapidement vers la solution exacte
que les autres schemas.
3.2 Lattracteur 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 lenonce
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
Lorsquon fait varier leg`erement les conditions initiales (un point 1,1,1 par exemple),
la convergence vers lattracteur est beaucoup plus rapide :
La trajectoire dans lespace donne le resultat suivant :
On a donc une convergence rapide vers lattracteur pour presque toutes les conditions
initiales, sauf celle tr`es proche de lorigine.
29
3.3 Lequation 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 lintervalle detude
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 coecient e joue donc un role important. Sil est nul, on obtient le cas dun oscil-
lateur sinusodal et les oscillations ont une amplitude qui depend des conditions initiales.
Plus e augmente, plus on constate que les oscillations, malgre des conditions initiales tr`es
petites, se deforment. Les conditions initiales nont, en fait, pas dinuence sur le regime
etabli.
31
TD 4
Interpolation, approximation
4.1 Interpolation
4.1.1 Le phenom`ene de Runge
On a :
f(x) =
1
1 + 25x
2
1. Calcul du polynome dinterpolation et absence de convergence
On souhaite calculer et representer le polynome dinterpolation p tel que p(x
i
) = f(x
i
).
Programme Scilab correspondant, ici pour 10 couples (x
i
, y
i
) donnes :
// Phenom`ene 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, on
observe une absence de convergence de p vers f. On a pris ici des valeurs de n successives
egales `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 d erivees 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 le
graphe 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 d erivees
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 lechantillon etudie :
On a pu ecouter les dierentes notes obtenues pour dierents degres k.
Un eet de vibrato est realisable comme decrit dans lenonce 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 fa con 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 d erivees
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 Probl`emes de moindres carres
4.2.1 Regression polynomiale
On a le code source Scilab suivant :
// Probl`eme de moindres carres, regression polyn^omiale
// 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 polyn^ome
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) = at
3
+ bt
2
+ ct + d a donc pour coecients :

a = 0, 0495990
b = 0, 2354221
c = 0, 5096432
d = 0, 9643966
4.2.2 Autre probl`eme
On a ici le code Scilab suivant :
// Probl`eme 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 probl`eme donne :
Les coecients du cercle sont :

a = 0, 5116445
b = 0, 4968468
R = 1.0210487
Ce probl`eme admet une solution unique si A est inversible, cest-`a-dire sil existe i = j
tel que cos 2ti = cos 2tj.
On peut deduire les equations normales par : A
T
A x = A
T
z.
38
TD 5
Schemas aux dierences nies
5.1 Exercice 1
On pose B = A I. La matrice B nest pas inversible, donc il existe un vecteur
X = (x
1
, ..., x
N
)
T
non nul tel que Bx = 0. Notons i
0
lindice de la composante telle que
|x
i
0
| = max
i=1,...,N
|x
i
| = 0. Notons ce maximum. On consid`ere la ligne i
0
de lequation
Bx = 0. On a alors :
bx
i
0
1
+ ( a)x
i
0
+ bx
i
0
+1
= 0
( a)x
i
0
= bx
i
0
1
bx
i
0
+1
| a||x
i
0
| |b||x
i
0
1
| +|b||x
i
0
+1
|
| a||x
i
0
| |b||x
i
0
| +|b||x
i
0
|
| 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 eet, on a A symetrique donc ||A||
2
= max
i
|
i
(A)| o` u (A) designe une valeur propre
de A. On applique le crit`ere de Gershgorin et on a, avec =
t
(x)
2
:
|(A) (1 2)| 2 2 (A) 1 + 2 2 1 4 (A) 1
do` u :
(A) 1 1 4 1
1
2
Pour le schema implicite, aucune condition nest imposee sur ce rapport : il est incon-
ditionnellement stable.
5.2 Exercice 2
On a, pour x ]0, 1[ :

(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
Dapr`es la propriete de la concavite : (0, 1), u(a+(1)b) u(a) +(1)u(b).
Question 2
On discretise lintervalle ]0, 1[= (x
i
, x
i+1
) o` u x
0
= 0, x
N
= 1 et h = 1/N.
On approche u

(x
i
) =
u(x
i
+ h) 2u(x
i
) + u(x
i
h)
h
2
+ O(h
2
).
Negligeant en O(h
2
), on note : u
i
lapproximation de u(x
i
). On obtient :

u
i+1
+ 2ui ui 1 = h
2
f(x
i
)
u
0
= u
N
= 0
Question 3
On a le syst`eme lineaire Au = b suivant :

2 1 0
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
0 1 2

u
1
.
.
.
u
i
.
.
.
u
N1

h
2
f(x
1
)
.
.
.
h
2
f(x
i
)
.
.
.
h
2
f(x
N1
)

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 diagonales
inferieure et superieure est denie positive. En eet, si x = (x
i
)
1,...,N
on a alors :
40
Ax, x = (2x
1
x
2
)x
1
+
N1

i=2
x
i
(2x
i
x
i1
x
i+1
) + x
N
(x
N1
+ 2x
N
)
= (2x
1
x
2
)x
1
+
N1

i=2
x
i
((x
i
x
i1
) (x
i+1
x
i
)) + x
N
(x
N1
+ 2x
N
)
= x
2
1
+ (x
2
x
1
)
2
+ x
2
N
+ (x
N
x
N1
)
2
+
N2

i=3
(x
i
x
i1
)
2
0
Soit x R
N
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 x
i
= 0, i = 1, ..., N. Ainsi,
Ax, x = 0 x = 0.
Donc A est bien denie positive, et elle est donc inversible.
Solution avec commentaires de lexercice
// definition de lintervalle detude
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 repr esente le pas
sousdiag=ones(nx-1,1);
// construction de la matrice M "creuse" `a laide 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 syst`eme
y=M\c;
yy=[0;y;0];
xx=[xmin;x;xmax];
//xsegs([xmin,xmax],[0,0]);
// trace de la solution approchee (valeurs discr`etes)
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 lintervalle detude 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 laide 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 programme
suivant :
// equation de la chaleur en 3D
// fonction
function y=f(x)
y=sin(%pi.*x); // base : y=sin(%pi.*x)
endfunction
43
// definition de lintervalle detude 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 laide 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 r epartition de la chaleur
On obtient alors lillustration suivante :
44
TD 6
Valeurs propres
6.1 Resonance dans les syst`emes mecaniques discrets
6.1.1 Premi`ere partie
Dans cette partie, on consid`ere 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 diteration 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 syst`emes 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 laide de
la methode de la puissance iteree (et iteree inverse) :

1
= 228, 07764
y
1
=

0, 7882054
0, 6154122

2
= 21, 922359
y
2
=

0, 6154122
0, 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 Scilab
ci-dessus.
Question 1
Pour f(t) = sin(
1
t), on a :
On peut visualiser lanimation des ressorts. Voici la photo obtenue `a la n de lanima-
tion :
48
Pour f(t) = sin(
2
t), on a :
De meme, on peut visualiser lanimation des ressorts. Voici la photo obtenue `a la n
de lanimation :
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 lanimation des ressorts. Voici la photo obtenue `a la n de lanima-
tion :
50
Pour i = 2, on a :
De meme, on peut visualiser lanimation des ressorts. Voici la photo obtenue `a la n
de lanimation :
6.1.2 Deuxi`eme partie
Question 1
On a :
X =

u
1
u
2
u
1
u
2

X
1
X
2
X
3
X
4

et

m
1
u
1
= (k
1
+ k
2
)u
1
+ k
2
u
2
u
1
m
2
u
2
= k
2
u
1
k
2
u
2
+ f(t)
51
do` u :

X =

X
3
X
4
k
1
+k
2
m
1
X
1
+
k
2
m
1
X
2


m
1
X
3
k
2
m
2
X
1

k
2
m
2
X
2
+
1
m
2
f(t)

0 0 1 0
0 0 0 1
k
1
+k
2
m
1
k
2
m
1


m
1
0
k
2
m
2

k
2
m
2
0 0

X
1
X
2
X
3
X
4

0
0
0
1
m
2

f(t)
Ainsi :
B =

0 0 1 0
0 0 0 1
k
1
+k
2
m
1
k
2
m
1


m
1
0
k
2
m
2

k
2
m
2
0 0

et C =

0
0
0
1
m
2

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 syst`emes du type :
Xpoint(t)=f(t,X(t)) o`u on introduit en param`etre 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 absolue
de la partie imaginaire des valeurs propres obtenues precedemment. On a ainsi :


1
= 3, 7243793

2
= 2, 124176
Si on simule le syst`eme avec
1
, on obtient le graphique et la n danimation suivants :
54
Si on simule le syst`eme avec
2
, on obtient le graphique et la n danimation suivants :
6.2 Resonance dans les syst`emes mecaniques continus
6.2.1 Equation des ondes
On a la matrice A qui est symetrique. Donc ses vecteurs propres sont orthogonaux.
La methode diteration sur un sous-espace consiste `a considerer p vecteurs de R
n
et on
eectue les operations suivantes :
Y
i
k+1
=
AX
i
k
||AX
i
k
||
avec k 0 et i = 1, ..., p
o` u {X
i
k+1
} est obtenu par orthogonalisation de la famille {Y
i
k+1
}.
On a le theor`eme suivant :
55
lim
k+
X
p
k
= Y
p
o` u 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 dun pont
On a le programme Scilab suivant :
// Resonance dans les syst`emes 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 laide 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 diteration 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-apr`es (le second est une capture decran de lanimation).
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) =
a
0
2
+

1
a
n
cos nx +

1
b
n
sin nx
o` u :

a
n
=
2
T

[T]
f(x) cos nxdx
b
n
=
2
T

[T]
f(x) sin nxdx
=
2
T
[T] intervalle de longueur T
Question 2
On a :
Sf(x
0
) =
f(x
+
0
) + f(x

0
)
2
Question 3
Pour f
1
:
La fonction est impaire donc a
n
= 0 et on obtient : b
n
= 2
(1)
n+1
n
Donc : Sf
1
(x) = 2
(1)
n+1
sin nx
n
Pour f
2
:
La fonction est paire donc b
n
= 0 et on obtient :
a
n
=

0 si n est pair (n = 2p)


4
(2p 1)
2

si n est impair (n = 2p 1)
avec a
0
=
Donc : Sf
2
(x) =

2

4

cos x(2p 1)
(2p 1)
2
61
Pour f
3
:
a
n
=

0 si n est pair (n = 2p)


2
(2p 1)
2

si n est impair (n = 2p 1)
avec a
0
=

2
b
n
=
(1)
n+1
n
Donc : Sf
3
(x) =

4

2

cos x(2p 1)
(2p 1)
2
+
(1)
n+1
n
sin nx
Question 4
On a :
Sf
3
(x) =
f
3
(x
+
) + f
3
(x

)
2
et f
3
(0) =

4

2

1
(2p 1)
2
= 0
Do` u :
1
(2p 1)
2
=

2
8
Ainsi :
1
n
2
=
1
(2p)
2
+
1
(2p 1)
2
=

2
8
+
1
4
1
p
2
Or :
3
4
1
n
2
=

2
8
Donc :
1
n
2
=

2
6
Question 5
On a :
1
2

|f
3
(x)|
2
dx =

2
16
+
1
2
(
4

2
1
(2p 1)
4
+
1
n
2
)

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
n
4
=
1
(2p)
4
+
1
(2p 1)
4
62
Do` u :
S =

4
96
+
1
16
S
Donc :
1
n
4
=

4
90
Question 6
On a la procedure Scilab suivante :
// Calcul dune 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 p eriodiser 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 : Phenom`ene de Gibbs
Question 1
Comme f est impaire, a
n
= 0 et on obtient : b
n
=

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 dune 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 p eriodiser 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 nai pas reussi `a obtenir la solution souhaitee dans lexercice. Je met quand meme
le 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

Вам также может понравиться