Formes quadratiques et Maxima

Cf L3 Math : Algèbre et géométrie - feuille 7 ex 2 (copie) - 2007-08

Instructions exécutées avec Maxima 5.12.0 en ligne de commandes. Voir ici la version Maple.
Documentation pour Maxima, voir en particulier l'index

Définition de B2, matrice de B2 relativement à (1,X,X^2,X^3), forme quadratique sur R^4 correspondante

Starts dribbling to out (2007/12/13, 13:39:42).
(%i2) B2(f,g):=-f(0)*g(0)+integrate(diff(f(x),x,1)*diff(g(x),x,1),x,0,1);
(%o2) B2(f, g) := (- f(0)) g(0) + integrate(diff(f(x), x, 1) diff(g(x), x, 1), x, 0, 1)
(%i3) B2(lambda([x],x^3),lambda([x],x^3));
                                       9
(%o3)                                  -
                                       5

(%i4) f:makelist(buildq([i:i],lambda([x],x^i)),i,[1,2,3]);
                            1                2                3
(%o4)         [lambda([x], x ), lambda([x], x ), lambda([x], x )]
(%i5) f:cons(lambda([x],1),f);
                                    1                2                3
(%o5) [lambda([x], 1), lambda([x], x ), lambda([x], x ), lambda([x], x )]
(%i6) M:genmatrix(lambda([i,j],B2(f[i],f[j])),4,4);
                               [ - 1  0  0  0 ]
                               [              ]
                               [  0   1  1  1 ]
                               [              ]
                               [         4  3 ]
(%o6)                          [  0   1  -  - ]
                               [         3  2 ]
                               [              ]
                               [         3  9 ]
                               [  0   1  -  - ]
                               [         2  5 ]
(%i7) q:matrix([a,b,c,d]).M.transpose(matrix([a,b,c,d]));
             9 d   3 c           3 d   4 c                         2
(%o7)     d (--- + --- + b) + c (--- + --- + b) + b (d + c + b) - a
              5     2             2     3
(%i8) hessian(q/2,[a,b,c,d]);
                               [ - 1  0  0  0 ]
                               [              ]
                               [  0   1  1  1 ]
                               [              ]
                               [         4  3 ]
(%o8)                          [  0   1  -  - ]
                               [         3  2 ]
                               [              ]
                               [         3  9 ]
                               [  0   1  -  - ]
                               [         2  5 ]
(%i9) rank(M);
(%o9)                                  4
(%i10) var:[a,b,c,d];
(%o10)                           [a, b, c, d]
(%i11) Gauss(quad,variable):=block([q,var,liste,i,a,l],
q:quad,var:variable,liste:[],display(q,var,liste),
while var#[] do (
 a:diff(q,var[1],2)/2,l:subst(0,var[1],diff(q,var[1])),display(a,l),
 if a=0 and l=0 then var:rest(var)
 elseif a#0 then (
  liste:append(liste,[[a,var[1]+l/(2*a)]]),q:subst(0,var[1],q)-l^2/(4*a),var:rest(var))
 else (
  i:2,while subst(0,var[i],diff(l,var[i]))=0 do i:i+1,display(var[i]),
  a:diff(q,var[i],2)/2,display(a),
  if a#0 then (
   liste:append(liste,[[a,var[i]+l/(2*a)]]),q:subst(0,var[i],q)-l^2/(4*a),var:append(rest(var,i-1-length(var)),rest(var,i)))
  else (
   a:diff(q,var[1],1,var[i],1),display(a),
   l1:subst([var[1]=0,var[i]=0],diff(q,var[1])),li:subst([var[1]=0,var[i]=0],diff(q,var[i])),display(l1,li),
   liste:append(liste,[[a/4,var[1]+var[i]+(l1+li)/a],[-a/4,var[1]-var[i]+(li-l1)/a]]),
   q:subst([var[1]=0,var[i]=0],q)-l1*li/a,
   var:append(rest(rest(var,i-1-length(var))),rest(var,i)))),
 display(q,var,liste)),
q:sum(liste[i][1]*liste[i][2]^2,i,1,length(liste)),
[liste,q])$

(%i12) q1:Gauss(q,var)[2];
               9 d   3 c           3 d   4 c                         2
        q = d (--- + --- + b) + c (--- + --- + b) + b (d + c + b) - a
                5     2             2     3

                              var = [a, b, c, d]

                                  liste = []

                                    a = - 1

                                     l = 0

                  9 d   3 c           3 d   4 c
           q = d (--- + --- + b) + c (--- + --- + b) + b (d + c + b)
                   5     2             2     3

                                var = [b, c, d]

                              liste = [[- 1, a]]

                                     a = 1

                                 l = 2 d + 2 c

                               2
                    (2 d + 2 c)       9 d   3 c       3 d   4 c
              q = - ------------ + d (--- + ---) + c (--- + ---)
                         4             5     2         2     3

                                 var = [c, d]

                                           2 d + 2 c
                    liste = [[- 1, a], [1, --------- + b]]
                                               2

                                         1
                                     a = -
                                         3

                                     l = d

                                         2
                                        d
                                    q = --
                                        20

                                   var = [d]

                                    2 d + 2 c        1  3 d
             liste = [[- 1, a], [1, --------- + b], [-, --- + c]]
                                        2            3   2

                                        1
                                    a = --
                                        20

                                     l = 0

                                     q = 0

                                   var = []

                                2 d + 2 c        1  3 d        1
         liste = [[- 1, a], [1, --------- + b], [-, --- + c], [--, d]]
                                    2            3   2         20

                                        3 d     2
                                       (--- + c)     2
                     2 d + 2 c     2     2          d     2
(%o12)              (--------- + b)  + ---------- + -- - a
                         2                 3        20
(%i13) expand(q1);
                    2                      2
                 9 d                    4 c             2    2
(%o13)           ---- + 3 c d + 2 b d + ---- + 2 b c + b  - a
                  5                      3
(%i14) expand(q);
                    2                      2
                 9 d                    4 c             2    2
(%o14)           ---- + 3 c d + 2 b d + ---- + 2 b c + b  - a
                  5                      3

(%i15) r:Gauss(x*y+y*z+x*z,[x,y,z]);
                              q = y z + x z + x y

                                var = [x, y, z]

                                  liste = []

                                     a = 0

                                   l = z + y

                                   var  = y
                                      2

                                     a = 0

                                     a = 1

                                    l1 = z

                                    li = z

                                          2
                                   q = - z

                                   var = [z]

                             1                   1
                   liste = [[-, 2 z + y + x], [- -, x - y]]
                             4                   4

                                    a = - 1

                                     l = 0

                                     q = 0

                                   var = []

                        1                   1
              liste = [[-, 2 z + y + x], [- -, x - y], [- 1, z]]
                        4                   4

          1                   1
(%o15) [[[-, 2 z + y + x], [- -, x - y], [- 1, z]],
          4                   4
                                                             2               2
                                                (2 z + y + x)     2   (x - y)
                                                -------------- - z  - --------]
                                                      4                  4
(%i16) display(r[1],r[2]);
                       1                   1
                r  = [[-, 2 z + y + x], [- -, x - y], [- 1, z]]
                 1     4                   4

                                        2               2
                           (2 z + y + x)     2   (x - y)
                      r  = -------------- - z  - --------
                       2         4                  4

(%o16)                               done
(%i17) is(r[2]=x*y+y*z+x*z);
(%o17)                               false
(%i18) is(expand(r[2])=x*y+y*z+x*z);
(%o18)                               true
(%i20)