nom, date

ne pas oublier de sauvegarder régulièrement

utiliser preview avant d'imprimer

> with(linalg):

> ma:= matrix(3, 3, [53,61,23,37,-31,34,42,-88,76]);

ma := matrix([[53, 61, 23], [37, -31, 34], [42, -88...

> charpoly(ma, x); fso:= fsolve(%);

x^3-98*x^2-202*x+95658

fso := -28.32866003, 38.40527260, 87.92338743

>

Valeur propre dominante

> v0:= [1.,1.,1.];

v0 := [1., 1., 1.]

> evalm(ma &* v0): v1:= evalm(%/norm(%) );

v1 := vector([1.000000000, .2919708029, .2189781022...

> evalm(ma &* v1): v2:= evalm(%/norm(%) );

v2 := vector([.9999999996, .4666538348, .4344143969...

> iter:= proc(v1); evalm(ma &* v1): evalm(%/norm(%) ); end;

iter := proc (v1) evalm(`&*`(ma,v1)); evalm(%/norm(...

> (iter@@30)(v0); iter(%); vp1:= norm(evalm(ma &* %));

vector([.9999999996, .4238499340, .3942844099])

vector([.9999999998, .4238499344, .3942844102])

vp1 := 87.92338742

>

Valeur propre proche de 0

> mb:= evalm(1./ma); iterb:= subs(ma=mb, eval(iter));

mb := matrix([[-.6648685944e-2, .6962303205e-1, -.2...

iterb := proc (v1) evalm(`&*`(mb,v1)); evalm(%/norm...

> (iterb@@50)(v0); iterb(%); vp3:= 1/ norm(evalm(mb &* %));

vector([-.8630636303, .7736362470, 1.000000000])

vector([.8630636457, -.7736361965, -1.000000000])

vp3 := 28.32866124

>

Valeur propre quelconque

> mc:= evalm(1/(ma-38.)); iterc:= subs(ma=mc, eval(iter));

mc := matrix([[-.2757078987, 3.235469449, -2.728017...

iterc := proc (v1) evalm(`&*`(mc,v1)); evalm(%/norm...

> (iterc@@5)(v0); iterc(%); vp2:= norm(evalm(mc &* %));

vector([1.000000000, .9666163886e-1, -.8909168409])...

vector([1.000000000, .9666163870e-1, -.8909168418])...

vp2 := 2.467474958

> 38+1/vp2; fso;

38.40527260

-28.32866003, 38.40527260, 87.92338743

>