TP07-sol.cas
3.44 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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
/* astuces, a retenir: sous xcas on utilise unapply qui est en general plus sur£que la methode suivante avec subs. */
f:=x^2+1; g:=unapply(f,x);expand(g(x+2));
g:=t->subs(x=t,f);g(x+2);
f:=x->x^2-2;
df:=x->eval(diff(f(x),x));
df(x);u:=x^2;df(u);
/* ca ne marche pas toujours, mieux vaut utiliser unapply, Ou mieux,£ deriver une fonction*/
df:=unapply(diff(f(x),x),x);df(x);df(u);
D(g);fonction_diff(g);D(g)(5);
/* pour changer la valeur par defaut, soit dans le menu, soit avec la variable£ Digits, mais c'est pris en compte a partir de l'evaluation suivante.£ Ex: Digits:=100;sqrt(2.0); sur une meme ligne ne marche pas.*/
Digits:=1;
13*2.;evalf(13*2,3);
Digits:=2;
13.26*2;
Digits:=10000;
U:=1.:
/* On fait 14 iterations de la methode de Newton, et on affiche la difference£ avec racine de 2. La majoration du reste montre qu'asymptotiquement le nombre£ de decimales exactes est multiplie par 2 a chaque iteration. Ce qui correspond£ bien a une majoration du type: |u_{n+1}-l|<C|u_n-l|^2£*/
normal(x-f(x)/df(x));#On trouve x/2 +1/x c'est donc Heron.
r:=evalf(sqrt(2));#on ne le calcule qu'une fois.
for i from 1 to 14 do U:=U/2+1/U:a:=U-r:print(evalf(a,15)) od:
Digits:=10;
/* -------------------------------------------Jordan, Dunford--------------------------------------*/
/* La decomposition d'une matrice reelle est reelle: par conjugaison et unicite£ de la decomp de Dunford*/
C1:=companion((X^3-8)^2,X);
C2:=companion((X^2-4)^3,X);
A:=diag(C1,C2);
cas_setup(0,0,1,1,0,1e-10,10,[1,50,0,25],0,1,0); #mode complexe est racines carrees.
rat_jordan(A);
rat_jordan(companion((x^3-2)^2,x));
J:=jordan(A,'Q');Q;
f:=(i,j)->if i=j then J[i,j] else 0 fi;
dia:=matrix(op(dim(J)),f);
S:=normal(Q*dia*Q^(-1));N:=A-S; #on remarque que les coeff sont dans le meme corps que ceux de A
normal(S*N-N*S); # verification:
u:=x^2;p:=x^2+1;
f:=x->eval(diff(p,x));
f(x);
f(u); #ca ne convient donc pas. mieux vaut faire unapply.
f:=unapply(diff(p,x),x);
f(x);f(u);
d:=gcdex(x^2+2,x,'s','t');normal((x^2+2)*s+t*x); # attention on trouve d et non 1
/* n_u est dans l'ideal N car c'est la somme des u_n-u_{n+1} qui sont tous dans N, donc n_u est nilpotent. £ Pour tout polynome r, r(u) est somme de r(s_u) et d'un element de N, donc r(s_u)=0 implique£ que r(u) est dans N et donc que p divise r par definition de p. donc p est le pol min de s */
/* Pour que l'algorithme fasse au moins 2 iterations, on met un facteur a la£puissance 5 dans le polynome minimal. Pour etre sur du resultat on prend une£matrice diagonale par blocs de type compagnon*/
A:=diag([companion((x^3-2)^5,x),companion(x^5-2*x^2,x)]);
Dunford:=proc(A)
m:=pcar(A,x,lagrange);
p:=unapply(normal(m/(gcd(m,diff(m,x)))),x);
dp:=unapply(normal(diff(p(x),x)),x);
u:=x;
#on itere
while rem(p(u),m,x) <> 0 do
d:=gcdex(m,dp(u),x,'s','t');
invdp:=t/d;
u:=rem(u-p(u)*invdp,m,x);
od;
horner(u,A);
end proc;
/* Pour avoir au moins deux it\'erations, il faut un facteur de degre au moins 4£ dans le polynome minimal, ce que l'on obtient par exemple avec£companion((x^3-2)^5,x)*/
S:=Dunford(A);
N:=A-S;
N*S-S*N; # S et N commutent bien
mu:=pmin(S,x); gcd(mu,diff(mu,x)); #S est bien diagonalisable
/* p = m/D ou D est le pgcd de m et m'£ NB:en caract q K=F_q(T), m=X^q-T, alors m'=0, mais p n'est pas 1 car£ l'algebre n'a pas de nilpotents.*/
/* 1/(e(1+n/e)) se developpe en somme finie, et c'est l'inverse de e+n*/