TP02-sol.cas
2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
restart;maple_mode(1);cas_setup(0,0,0,1,0,1e-10,10,[1,50,0,25],0,0,0);#radians,pas de cmplx, pas de Sqrt
n:=5;M:=matrix(n,n,(i,j)->rand(21)-10.0);#NB:rand(21) repond entre 0 et 20
maxnorm(M);colnorm(M);frobenius_norm(M);
Cond:=M->[frobenius_norm(evalf(M))*frobenius_norm(1/evalf(M)),M];
Cond(M);
n:=5:l:=[seq(Cond(matrix(n,n,(i,j)->rand(21)-10.0)),k=1..1000)]:
/* premiere methode: On prend la premiere ligne de la transpos\'ee. Seconde methode avec une suite indexee par la liste*/
listecondi:=transpose(l)[1];
listecondi:=[seq(k[1],k=l)];
histogram(classes(listecondi,0,10));
ml:=max(listecondi);# le max de la suite
ecart_type(listecondi);#ou bien: stddev donne l'ecart type
moyenne(listecondi);
classes(listecondi,[0..50,50..100,100..200,200..400,400..floor(ml+1)]);#l'infini ne marche pas, on prend donc une borne strictement superieure au max
bar_plot(classes(listecondi,[0..50,50..100,100..200,200..400,400..floor(ml+1)]));
/* L'ecart type est enorme par rapport a la moyenne. On constate£ souvent 80 pourcent des condtionnements en dessous de 50, alors que£ parfois ca peut depasser 1000*/
listetriee:=sort(l,(x,y)->x[1]>y[1]);
listetriee[1];M:=listetriee[1][2];
complex_mode:=1;det(M);eigenvalues(M);
jordan(M);#bon c'etait pas la peine!
/* Les cas anormaux on une valeur du determinant tout a fait normale,£ la matrice est donc bien inversible, en revanche, on constate une£ valeur propre (eventuellement complexe) proche de 0, elle n'est donc£ pas loin d'une matrice non inversible. £-----------------------------------------------------------------------------------------------------------------------------------*/
Digits:=4;
a:=1-(0.1)^10;
a-1;#il a travaille en fait avec plus de chiffres.
Digits:=14;
a:=1-(0.1)^15;
a-1;#il n'a toujours pas perdu le 0.1
Digits:=15;
a:=1-(0.1)^16;#la il a vraiment travaille en 15 chiffres.
a-1;
Digits:=15;
/* on s'assure d'avoir une precision exacte, car sous xcas en 32£bits, moins de 14 chiffres fait la meme chose que 14 chiffres.*/
v:=[seq(rand(-10.0,10.0),i=1..n)];
approx(M);
b:=approx(M)*v;
purge(x);
X:=[seq(x[i],i=1..n)];
l2norm(linsolve(M*X=b,X)-v)<1e-10;
P:=eigenvectors(M):;eigenvalues(M):;
v:=(transpose(P)[4]):;
b:=M*v:;
/* NB une erreur de 10^-11 alors que l'on travaille avec 15 chiffres donne tout de£meme un rapport 1000. */
l2norm(linsolve(M*X=b,X)-v)<1e-11;