 restart(1);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;
