mt94 cahier integration kevin lefevre

72
MT94 - Cahier d’int´ egration evin Lef` evre Universit´ e Technologique de Compi` egne - Printemps 2011

Upload: kevinlefevre6107

Post on 05-Jul-2015

809 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: MT94 Cahier Integration Kevin LEFEVRE

MT94 - Cahier d’integration

Kevin Lefevre

Universite Technologique de Compiegne - Printemps 2011

Page 2: MT94 Cahier Integration Kevin LEFEVRE

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

Page 3: MT94 Cahier Integration Kevin LEFEVRE

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

Page 4: MT94 Cahier Integration Kevin LEFEVRE

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

Page 5: MT94 Cahier Integration Kevin LEFEVRE

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

Page 6: MT94 Cahier Integration Kevin LEFEVRE

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

Page 7: MT94 Cahier Integration Kevin LEFEVRE

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

Page 8: MT94 Cahier Integration Kevin LEFEVRE

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

Page 9: MT94 Cahier Integration Kevin LEFEVRE

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

Page 10: MT94 Cahier Integration Kevin LEFEVRE

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

Page 11: MT94 Cahier Integration Kevin LEFEVRE

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

Page 12: MT94 Cahier Integration Kevin LEFEVRE

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

Page 13: MT94 Cahier Integration Kevin LEFEVRE

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

Page 14: MT94 Cahier Integration Kevin LEFEVRE

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

Page 15: MT94 Cahier Integration Kevin LEFEVRE

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

Page 16: MT94 Cahier Integration Kevin LEFEVRE

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

Page 17: MT94 Cahier Integration Kevin LEFEVRE

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

Page 18: MT94 Cahier Integration Kevin LEFEVRE

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

Page 19: MT94 Cahier Integration Kevin LEFEVRE

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

Page 20: MT94 Cahier Integration Kevin LEFEVRE

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

Page 21: MT94 Cahier Integration Kevin LEFEVRE

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

Page 22: MT94 Cahier Integration Kevin LEFEVRE

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

Page 23: MT94 Cahier Integration Kevin LEFEVRE

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

Page 24: MT94 Cahier Integration Kevin LEFEVRE

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

Page 25: MT94 Cahier Integration Kevin LEFEVRE

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

Page 26: MT94 Cahier Integration Kevin LEFEVRE

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

Page 27: MT94 Cahier Integration Kevin LEFEVRE

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

Page 28: MT94 Cahier Integration Kevin LEFEVRE

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

Page 29: MT94 Cahier Integration Kevin LEFEVRE

28

Page 30: MT94 Cahier Integration Kevin LEFEVRE

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

Page 31: MT94 Cahier Integration Kevin LEFEVRE

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

Page 32: MT94 Cahier Integration Kevin LEFEVRE

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

Page 33: MT94 Cahier Integration Kevin LEFEVRE

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

Page 34: MT94 Cahier Integration Kevin LEFEVRE

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

Page 35: MT94 Cahier Integration Kevin LEFEVRE

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

Page 36: MT94 Cahier Integration Kevin LEFEVRE

// 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

Page 37: MT94 Cahier Integration Kevin LEFEVRE

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

Page 38: MT94 Cahier Integration Kevin LEFEVRE

// 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

Page 39: MT94 Cahier Integration Kevin LEFEVRE

// 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

Page 40: MT94 Cahier Integration Kevin LEFEVRE

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

Page 41: MT94 Cahier Integration Kevin LEFEVRE

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

Page 42: MT94 Cahier Integration Kevin LEFEVRE

≺ 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

Page 43: MT94 Cahier Integration Kevin LEFEVRE

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

Page 44: MT94 Cahier Integration Kevin LEFEVRE

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

Page 45: MT94 Cahier Integration Kevin LEFEVRE

// 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

Page 46: MT94 Cahier Integration Kevin LEFEVRE

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

Page 47: MT94 Cahier Integration Kevin LEFEVRE

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

Page 48: MT94 Cahier Integration Kevin LEFEVRE

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

Page 49: MT94 Cahier Integration Kevin LEFEVRE

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

Page 50: MT94 Cahier Integration Kevin LEFEVRE

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

Page 51: MT94 Cahier Integration Kevin LEFEVRE

Pour i = 1, on a :

On peut visualiser l’animation des ressorts. Voici la photo obtenue a la fin de l’anima-tion :

50

Page 52: MT94 Cahier Integration Kevin LEFEVRE

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

Page 53: MT94 Cahier Integration Kevin LEFEVRE

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

Page 54: MT94 Cahier Integration Kevin LEFEVRE

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

Page 55: MT94 Cahier Integration Kevin LEFEVRE

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

Page 56: MT94 Cahier Integration Kevin LEFEVRE

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

Page 57: MT94 Cahier Integration Kevin LEFEVRE

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

Page 58: MT94 Cahier Integration Kevin LEFEVRE

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

Page 59: MT94 Cahier Integration Kevin LEFEVRE

On obtient les graphiques ci-apres (le second est une capture d’ecran de l’animation).

Pour ω1 :

58

Page 60: MT94 Cahier Integration Kevin LEFEVRE

Pour ω2 :

59

Page 61: MT94 Cahier Integration Kevin LEFEVRE

Pour ω3 :

60

Page 62: MT94 Cahier Integration Kevin LEFEVRE

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

Page 63: MT94 Cahier Integration Kevin LEFEVRE

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

∫ π−π |f3(x)|2 dx =

π2

16+

1

2(

4

π2∑ 1

(2p− 1)4+∑ 1

n2)

⇒ 1

∫ π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

Page 64: MT94 Cahier Integration Kevin LEFEVRE

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

Page 65: MT94 Cahier Integration Kevin LEFEVRE

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

Page 66: MT94 Cahier Integration Kevin LEFEVRE

On obtient, pour f1 (fonction impaire) :

65

Page 67: MT94 Cahier Integration Kevin LEFEVRE

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

Page 68: MT94 Cahier Integration Kevin LEFEVRE

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

Page 69: MT94 Cahier Integration Kevin LEFEVRE

//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

Page 70: MT94 Cahier Integration Kevin LEFEVRE

On obtient egalement les graphiques suivants (le premier pour de faibles valeurs de n,et le second pour n allant jusque 60) :

69

Page 71: MT94 Cahier Integration Kevin LEFEVRE

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

Page 72: MT94 Cahier Integration Kevin LEFEVRE

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