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;