Introducedilhaão a linearalgebra
================================

linearalgebra é uma colecedilhaão de funcedilhaões para álgebra linear.

Exemplo:

     (%i1) M : matrix ([1, 2], [1, 2]);
                                 [ 1  2 ]
     (%o1)                       [      ]
                                 [ 1  2 ]
     (%i2) nullspace (M);
                                    [  1  ]
                                    [     ]
     (%o2)                     span([   1 ])
                                    [ - - ]
                                    [   2 ]
     (%i3) columnspace (M);
                                     [ 1 ]
     (%o3)                      span([   ])
                                     [ 1 ]
     (%i4) ptriangularize (M - z*ident(2), z);
                              [ 1   2 - z   ]
     (%o4)                    [             ]
                              [           2 ]
                              [ 0  3 z - z  ]
     (%i5) M : matrix ([1, 2, 3], [4, 5, 6], [7, 8, 9]) - z*ident(3);
                          [ 1 - z    2      3   ]
                          [                     ]
     (%o5)                [   4    5 - z    6   ]
                          [                     ]
                          [   7      8    9 - z ]
     (%i6) MM : ptriangularize (M, z);
                   [ 4  5 - z            6            ]
                   [                                  ]
                   [                2                 ]
                   [     66        z    102 z   132   ]
                   [ 0   --      - -- + ----- + ---   ]
     (%o6)         [     49        7     49     49    ]
                   [                                  ]
                   [               3        2         ]
                   [           49 z    245 z    147 z ]
                   [ 0    0    ----- - ------ - ----- ]
                   [            264      88      44   ]
     (%i7) algebraic : true;
     (%o7)                         true
     (%i8) tellrat (MM [3, 3]);
                              3       2
     (%o8)                  [z  - 15 z  - 18 z]
     (%i9) MM : ratsimp (MM);
                    [ 4  5 - z           6           ]
                    [                                ]
                    [                2               ]
     (%o9)         [     66      7 z  - 102 z - 132 ]
                    [ 0   --    - ------------------ ]
                    [     49              49         ]
                    [                                ]
                    [ 0    0             0           ]
     (%i10) nullspace (MM);
                             [        1         ]
                             [                  ]
                             [   2              ]
                             [  z  - 14 z - 16  ]
                             [  --------------  ]
     (%o10)             span([        8         ])
                             [                  ]
                             [    2             ]
                             [   z  - 18 z - 12 ]
                             [ - -------------- ]
                             [         12       ]
     (%i11) M : matrix ([1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]);
                            [ 1   2   3   4  ]
                            [                ]
                            [ 5   6   7   8  ]
     (%o11)                 [                ]
                            [ 9   10  11  12 ]
                            [                ]
                            [ 13  14  15  16 ]
     (%i12) columnspace (M);
                                [ 1  ]  [ 2  ]
                                [    ]  [    ]
                                [ 5  ]  [ 6  ]
     (%o12)                span([    ], [    ])
                                [ 9  ]  [ 10 ]
                                [    ]  [    ]
                                [ 13 ]  [ 14 ]
     (%i13) apply ('orthogonal_complement, args (nullspace (transpose (M))));
                                [ 0 ]  [  1  ]
                                [   ]  [     ]
                                [ 1 ]  [  0  ]
     (%o13)                span([   ], [     ])
                                [ 2 ]  [ - 1 ]
                                [   ]  [     ]
                                [ 3 ]  [ - 2 ]

Funcedilhaões e Variáveis Definidas para linearalgebra
======================================================

 -- Funcedilhaão: addmatrices (F, M_1, ..., M_N)

     Usando a funcedilhaão F como a funcedilhaão de adicedilhaão, retorne a adicedilhaão das matrizes M_1, ..., M_N. A funcedilhaão F deve aceitar qualquer número de argumentos (uma funcedilhaão enária do Maxima).

     Exemplos:

          (%i1) m1 : matrix([1,2],[3,4])$
          (%i2) m2 : matrix([7,8],[9,10])$
          (%i3) addmatrices('max,m1,m2);
          (%o3) matrix([7,8],[9,10])
          (%i4) addmatrices('max,m1,m2,5*m1);
          (%o4) matrix([7,10],[15,20])

 -- Funcedilhaão: blockmatrixp (M)

     Retorna true se e somente se M for uma matriz e toda entrada de M também for uma matriz.

 -- Funcedilhaão: columnop (M, I, J, THETA)

     Se M for uma matriz, retorna a matriz que resulta de fazer a operacedilhaão de coluna C_i <- C_i - THETA * C_j. Se M não tiver uma linha I ou J, emite uma mensagem de erro.

 -- Funcedilhaão: columnswap (M, I, J)

     Se M for uma matriz, troca as colunas I e J.  Se M não tiver uma coluna I ou J, emite uma mensagem de erro.

 -- Funcedilhaão: columnspace (M)

     Se M for uma matriz, retorna span (v_1, ..., v_n), onde o conjunto {v_1, ..., v_n} é uma base para o espacedilhao coluna de M.  A diferencedilhaa entre o maior elemento e o menor elemento do conjunto vazio é {0}. Dessa forma, quando o espacedilhao coluna tiver somente um membro, retorna span ().

 -- Funcedilhaão: copy (E)

     Retorna uma cópia da expressão E do Maxima. Embora E possa ser qualquer expressão do Maxima, A funcedilhaão copy é mais útil quando E for ou uma lista ou uma matriz; considere:

          (%i1) m : [1,[2,3]]$
          (%i2) mm : m$
          (%i3) mm[2][1] : x$
          (%i4) m;
          (%o4)                      [1,[x,3]]
          (%i5) mm;
          (%o5)                      [1,[x,3]]

     Vamos tentar a mesma experiência, mas dessa vez tomemos MM como sendo uma cópia de M

          (%i6) m : [1,[2,3]]$
          (%i7) mm : copy(m)$
          (%i8) mm[2][1] : x$
          (%i9) m;
          (%o9)                     [1,[2,3]]
          (%i10) mm;
          (%o10)                    [1,[x,3]]

     Dessa vez, a atribuicedilhaão a MM não muda o valor de M.

 -- Funcedilhaão: cholesky (M)
 -- Funcedilhaão: cholesky (M, CAMPO)

     Retorna fatorizacedilhaão de Cholesky da matriz hermitiana (or autoadjunta) M. O valor padrão para o segundo argumento é generalring. Para uma descricedilhaão dos possíveis valores para CAMPO, veja lu_factor.

 -- Funcedilhaão: ctranspose (M)

     Retorna a matriz transposta conjugada complexa da matriz M. A funcedilhaão ctranspose usa matrix_element_transpose para transpor cada elemento da matriz.

 -- Funcedilhaão: diag_matrix (D_1, D_2,...,D_N)

     Retorna uma matriz diagonal matriz com entradas de diagonal D_1, D_2,...,D_N. Quando as entradas de diagonal forem matrizes, as entradas zero da matriz retornada serão todas matrizes de tamanho apropriado; por exemplo:

          (%i1) diag_matrix(diag_matrix(1,2),diag_matrix(3,4));

                                      [ [ 1  0 ]  [ 0  0 ] ]
                                      [ [      ]  [      ] ]
                                      [ [ 0  2 ]  [ 0  0 ] ]
          (%o1)                       [                    ]
                                      [ [ 0  0 ]  [ 3  0 ] ]
                                      [ [      ]  [      ] ]
                                      [ [ 0  0 ]  [ 0  4 ] ]
          (%i2) diag_matrix(p,q);

                                             [ p  0 ]
          (%o2)                              [      ]
                                             [ 0  q ]

 -- Funcedilhaão: dotproduct (U, V)

     Retorna o produto do ponto (produto escalar) dos vetores U e V.  Isso é o mesmo que conjugate (transpose (U)) . V.  Os argumentos U e V devem ser vetores coluna.

 -- Funcedilhaão: eigens_by_jacobi (A)
 -- Funcedilhaão: eigens_by_jacobi (A, TIPO_CORPO)

     Calculam os autovalores e autovetores de A pelo método de rotacedilhaões de Jacobi. A deve ser uma matriz simétrica (mas essa matriz simétrica precisa não ser nem definida positiva e nem semidefinida positiva). TIPO_CORPO indica o corpo computacional, pode ser ou floatfield ou bigfloatfield. Se TIPO_CORPO não for especificado, o padrão é floatfield.

     Os elementos de A devem ser números ou expressões que avaliam para números via float ou bfloat (dependendo do valor de TIPO_CORPO).

     Exemplos:

          (%i1) S : matrix ([1/sqrt(2), 1/sqrt(2)], [- 1/sqrt(2), 1/sqrt(2)]);                     [     1         1    ]
                               [     1         1    ]
                               [  -------   ------- ]
                               [  sqrt(2)   sqrt(2) ]
          (%o1)                [                    ]
                               [      1        1    ]
                               [ - -------  ------- ]
                               [   sqrt(2)  sqrt(2) ]
          (%i2) L : matrix ([sqrt(3), 0], [0, sqrt(5)]);
                                [ sqrt(3)     0    ]
          (%o2)                 [                  ]
                                [    0     sqrt(5) ]
          (%i3) M : S . L . transpose (S);
                      [ sqrt(5)   sqrt(3)  sqrt(5)   sqrt(3) ]
                      [ ------- + -------  ------- - ------- ]
                      [    2         2        2         2    ]
          (%o3)       [                                      ]
                      [ sqrt(5)   sqrt(3)  sqrt(5)   sqrt(3) ]
                      [ ------- - -------  ------- + ------- ]
                      [    2         2        2         2    ]
          (%i4) eigens_by_jacobi (M);
          The largest percent change was 0.1454972243679
          The largest percent change was 0.0
          number of sweeps: 2
          number of rotations: 1
          (%o4) [[1.732050807568877, 2.23606797749979],
                                  [  0.70710678118655   0.70710678118655 ]
                                  [                                      ]]
                                  [ - 0.70710678118655  0.70710678118655 ]
          (%i5) float ([[sqrt(3), sqrt(5)], S]);
          (%o5) [[1.732050807568877, 2.23606797749979],
                                  [  0.70710678118655   0.70710678118655 ]
                                  [                                      ]]
                                  [ - 0.70710678118655  0.70710678118655 ]
          (%i6) eigens_by_jacobi (M, bigfloatfield);
          The largest percent change was 1.454972243679028b-1
          The largest percent change was 0.0b0
          number of sweeps: 2
          number of rotations: 1
          (%o6) [[1.732050807568877b0, 2.23606797749979b0],
                          [  7.071067811865475b-1   7.071067811865475b-1 ]
                          [                                              ]]
                          [ - 7.071067811865475b-1  7.071067811865475b-1 ]

 -- Funcedilhaão: get_lu_factors (X)

     Quando X = lu_factor (A), então get_lu_factors retorna uma lista da forma [P, L, U], onde P é uma matriz de permutacedilhaão, L é triangular baixa com a diagonal preenchida com a unidade, e U é triangular alta, e A = P L U.

 -- Funcedilhaão: hankel (COL)
 -- Funcedilhaão: hankel (COL, LIN)

     Retorna uma matriz de Hankel H. A primeira coluna de H é COL; exceto para a primeira entrada, a última linha de H é LIN. O valor padrão para LIN é o vetor nulo com o mesmo comprimento que COL.

 -- Funcedilhaão: hessian (F,VARS)

     Retorna a matriz hessiana de F com relacedilhaão às variáveis na lista VARS.  As entradas I,J da matriz hessiana são DIFF(F VARS[I],1,VARS[J],1).

 -- Funcedilhaão: hilbert_matrix (N)

     Retorna the N by N matriz de Hilbert. Quando N não for um inteiro positivo, emite uma mensagem de erro.

 -- Funcedilhaão: identfor (M)
 -- Funcedilhaão: identfor (M, CORPO)

     Retorna uma matriz identidade que tem o mesmo tamanho que a matriz M.  As entradas de diagonal da matriz identidade são a identidade multiplicativa do corpo CORPO; o padrão para CORPO é GENERALRING.

     O primeiro argumento M pode ser uma  matriz quadrada ou um não matriz. Quando M for uma matriz, cada entrada de M pode ser uma matriz quadrada -- dessa forma M pode ser uma matriz de bloco do Maxima. A matriz pode ser de bloco para qualquer (finita) quantidade de níveis.

     Veja também zerofor

 -- Funcedilhaão: invert_by_lu (M, (RNG GENERALRING))

     Inverte a matriz M através de fatorizacedilhaão linear alta (LU).  A fatorizacedilhaão LU é concluída usando o anel RNG.

 -- Funcedilhaão: kronecker_product (A, B)

     Retorna o produto de Kronecker das matrizes A e B.

 -- Funcedilhaão: listp (E, P)
 -- Funcedilhaão: listp (E)

     Recebendo um argumento opcional P, retorna true se E for uma lista do Maxima e P avalia para true para elemento da lista. Quando listp não recebe o argumento opcional, retorna true se E for uma lista do Maxima.  em todos os outros casos, retorna false.

 -- Funcedilhaão: locate_matrix_entry (M, R_1, C_1, R_2, C_2, F, REL)

     O primeiro argumento deve ser uma matriz; os argumentos que vão de R_1 até C_2 determinam um sub-matriz de M que consiste de linhas que vão de R_1 até R_2 e colunas que vão de C_1 até C_2.

     Encontra uma entrada na sub-matriz M que satisfaz alguma propriedade. Existem três casos:

     (1) REL = 'bool e F um predicado:

     Examina a sub-matriz da esquerda para a direita e de cima para baixo, e retorna o índice da primeria entrada que satisfizer o predicado F. Se nenhuma entrada da matriz satisfizer o predicado F, retorna false.

     (2) REL = 'max e F avaliar para um número real:

     Examina a sub-matriz procurando por uma entrada que maximize F. Retorna retorna o índice da entrada maximizada.

     (3) REL = 'min e F avaliar para um número real:

     Examina a sub-matriz procurando por uma entrada que minimize F. Retorna o índice de uma entrada minimizada.

 -- Funcedilhaão: lu_backsub (M, B)

     Quando M = lu_factor (A, CORPO), então lu_backsub (M, B) resolve o sistema linear A X = B.

 -- Funcedilhaão: lu_factor (M, CORPO)

     Retorna uma lista da forma [LU, PERM, CORPO], ou da forma [LU, PERM, CMP, BAIXO-CND ALTO-CND], onde

     (1) A matriz LU contéa fatorizacedilhaão de M na forma enpacotada. Forma empacotada significa três coisas: Primeiro, as linhas de LU são permutadas confirme a lista PERM.  Se, por exemplo, PERM for a lista list [3,2,1], a primeira linha atual da fatorizacedilhaão LU será a terceira linha da matriz LU. Segundo, o fator triangular baixo de m é a parte triangular baixa de LU com as entradas de diagonal todas substituídas pela unidade. Terceiro, o fator triangular alto de M é a parte triangular alta de LU.

     (2) Quando o corpo for ou floatfield ou complexfield, os números BAIXO-CND e ALTO-CND serão associados baixo e alto para o número condicional de norma infinita de M.  Para todos os corpos (fields), o número condicional de norma infinita não pode ser estimado; para tais corpos, lu_factor retorna uma lista com dois itens. Ambos o baixo e o alto associado  podem diferir de seus verdadeiros valores de fatores arbitráriamente grandes. (Veja também mat_cond.)

     O argumento M deve ser a matriz quadrada.

     O argumento opcional CMP deve ser um símbolo que determine um anel ou corpo. Os corpos e anéis predefinidos são:

     (a) generalring -- o anel de expressões do Maxima, (b) floatfield --  o corpo dos números em ponto flutuante do tipo de precisão dupla, (c) complexfield --  o corpo dos números complexos em ponto flutuante do tipo de precisão dupla, (d) crering  -- o anel das expressões racionais canônicas (CRE) do Maxima, (e) rationalfield -- o corpo dos números racionais, (f) runningerror -- rastro de todos os erros de arredondamento de números em ponto flutuante, (g) noncommutingring -- o anel de expressões do Maxima onde multiplicacedilhaão for o operador ponto não comutativo.

     Quando o corpo for floatfield, complexfield, ou runningerror, o algorítmo usa pivotagem parcial; para todos os outros corpos, linhas são comutadas somente quando necessário para evitar um pivô nulo.

     A adicedilhaão aritmética em ponto flutuante não é associativa, então o significado de 'corpo' difere da definicedilhaão matemática.

     Um membro do corpo runningerror é uma lista do Máxima de dois membros da forma [x,n],onde X é um número em onto flutuante e n é um inteiro. A diferencedilhaa relativa entre o valor de 'verdadeiro' de x e x é aproximadamente associado pelo épsilon da máquina vezes n. O erro de execucedilhaão associado arrasta alguns termos da ordem do quadrado do épsilon da máquina.

     Não existe interface de usuário definida um novo anel. Um usuário que estiver familiazrizado com o Lisp Comum está apto para definir um novo corpo.  Para fazer isso, um usuário deve definir funcedilhaões para as operacedilhaões aritméticas e funcedilhaões para conversão para a representacedilhaão de corpo do Máxima e vice-versa. Adicionalmente, para corpos ordenados (onde a pivotagem parcial será usada), um uduário deve definir funcedilhaões para módulo e para comparar membros do corpo.  Após isso tudo que resta é definir uma estrutura de Lisp Comum mring.  O arquivo mring tem muitos exemplos.

     Para calcular a fatorizacedilhaão, a primeira tarefa é converter cada entrada de matriz para um elemento do corpo indicado. Quando a cnversão não for possível, a fatorizacedilhaão encerra com uma mensagem de erro. Elementos do corpo não precisam ser expressões do Maxima.  Elementos do complexfield, por exemplo, são números complexos do Lisp Comum. Dessa forma após calcular a fatorizacedilhaão, como entradas da matriz devem ser convertidas para expressões do Maxima.

     Veja também  get_lu_factors.

     Exemplos:

          (%i1) w[i,j] := random (1.0) + %i * random (1.0);
          (%o1)          w     := random(1.) + %i random(1.)
                          i, j
          (%i2) showtime : true$
          Evaluation took 0.00 seconds (0.00 elapsed)
          (%i3) M : genmatrix (w, 100, 100)$
          Evaluation took 7.40 seconds (8.23 elapsed)
          (%i4) lu_factor (M, complexfield)$
          Evaluation took 28.71 seconds (35.00 elapsed)
          (%i5) lu_factor (M, generalring)$
          Evaluation took 109.24 seconds (152.10 elapsed)
          (%i6) showtime : false$

          (%i7) M : matrix ([1 - z, 3], [3, 8 - z]);
                                  [ 1 - z    3   ]
          (%o7)                   [              ]
                                  [   3    8 - z ]
          (%i8) lu_factor (M, generalring);
                    [ 1 - z         3        ]
                    [                        ]
          (%o8)    [[   3            9       ], [1, 2], generalring]
                    [ -----  - z - ----- + 8 ]
                    [ 1 - z        1 - z     ]
          (%i9) get_lu_factors (%);
                            [   1    0 ]  [ 1 - z         3        ]
                  [ 1  0 ]  [          ]  [                        ]
          (%o9) [[      ], [   3      ], [                9       ]]
                  [ 0  1 ]  [ -----  1 ]  [   0    - z - ----- + 8 ]
                            [ 1 - z    ]  [              1 - z     ]
          (%i10) %[1] . %[2] . %[3];
                                  [ 1 - z    3   ]
          (%o10)                  [              ]
                                  [   3    8 - z ]

 -- Funcedilhaão: mat_cond (M, 1)
 -- Funcedilhaão: mat_cond (M, inf)

     Retorna o número condiciona da norma de ordem P da matriz M. Os valores permitidos para P são 1 e INF.  Essa funcedilhaão utiliza a fatorizacedilhaão linear alta para inverter a matriz M. Dessa forma o tempode execucedilhaão para mat_cond é proporcional ao cubo do tamanho da matriz; lu_factor determina as associacedilhaãoes baixa e alta para o número de condicedilhaão de norma infinita em tempo proporcional ao quadrado do tamanho da matriz.

 -- Funcedilhaão: mat_norm (M, 1)
 -- Funcedilhaão: mat_norm (M, inf)
 -- Funcedilhaão: mat_norm (M, frobenius)

     Retorna a matriz de norma P da matriz M.  Os valores permitidos para P são 1, inf, e frobenius (a norma da matriz de Frobenius). A matriz M pode ser uma matriz não de bloco.

 -- Funcedilhaão: matrixp (E, P)
 -- Funcedilhaão: matrixp (E)

     Fornecendo um argumento opcional P, matrixp retorna true se E for uma matriz e P avaliar para true para todo elemento da matriz. Quando a matrixp não for fornecido umargumento opcional, retorna true se e for uma matriz.  em todos os outros casos, retorna false.

     Veja também blockmatrixp

 -- Funcedilhaão: matrix_size (M)

     Retorna uma lista com dois elementos que fornecem o número de linhas e colunas, respectivamente da matriz M.

 -- Funcedilhaão: mat_fullunblocker (M)

     Se M for uma matriz de bloco, expande todos os blocos da matriz em todos os níveis. Se M for uma matriz, retorna M; de outra forma, emite uma mensagem de erro.

 -- Funcedilhaão: mat_trace (M)

     Retorna o tracedilhao da matriz M. Se M não for uma matriz, retorna uma forma substantiva. Quando M for uma matriz de bloco, mat_trace(M) retorna o mesmo valor retornado por mat_trace(mat_unblocker(m)).

 -- Funcedilhaão: mat_unblocker (M)

     Se M for uma matriz de bloco, mat_unbloker desfaz o bloco de M um nível. Se M for uma matriz, mat_unblocker (M) retorna M; de outra forma, emite uma mensagem de erro.

     Dessa forma se cada entrada de M for matriz, mat_unblocker (M) retorna uma matriz "desblocada", mas se cada entrada de M for uma matriz de bloco, mat_unblocker (M) retorna uma matriz de bloco com um nível de bloco a menos.

     Se você usa matrizes de bloco, muito provavelmente você irá querer escolher matrix_element_mult para "." e matrix_element_transpose para 'transpose. Veja também mat_fullunblocker.

     Exemplo:

          (%i1) A : matrix ([1, 2], [3, 4]);
                                      [ 1  2 ]
          (%o1)                       [      ]
                                      [ 3  4 ]
          (%i2) B : matrix ([7, 8], [9, 10]);
                                      [ 7  8  ]
          (%o2)                       [       ]
                                      [ 9  10 ]
          (%i3) matrix ([A, B]);
                               [ [ 1  2 ]  [ 7  8  ] ]
          (%o3)                [ [      ]  [       ] ]
                               [ [ 3  4 ]  [ 9  10 ] ]
          (%i4) mat_unblocker (%);
                                   [ 1  2  7  8  ]
          (%o4)                    [             ]
                                   [ 3  4  9  10 ]

 -- Funcedilhaão: nonnegintegerp (N)

     Retorna true se e somente se N >= 0 e N for um inteiro.

 -- Funcedilhaão: nullspace (M)

     Se M for uma matriz, retorna span (v_1, ..., v_n), onde o conjunto {v_1, ..., v_n} é uma base para o espacedilhao nulo de M.  A diferencedilhaa entre o maior elemento e o menor elemento do conjunto vazio é  {0}. Dessa forma, quando o espacedilhao nulo tiver somente um membro, retorna span ().

 -- Funcedilhaão: nullity (M)

     Se M for uma matriz, retorna a dimensão do espacedilhao nulo de M.

 -- Funcedilhaão: orthogonal_complement (V_1, ..., V_N)

     Retorna span (u_1, ..., u_m), onde o conjunto {u_1, ..., u_m} é uma base para o complemento ortogonal do conjunto (v_1, ..., v_n).

     Cada vetor no intervalo de V_1 até V_N deve ser um vetor coluna.

 -- Funcedilhaão: polynomialp (P, L, COEFFP, EXPONP)
 -- Funcedilhaão: polynomialp (P, L, COEFFP)
 -- Funcedilhaão: polynomialp (P, L)

     Retorna true se P for um polinômio nas variáveis da lista L, O predicado COEFFP deve avaliar para true para cada coeficiente, e o predicado EXPONP deve avaliar para true para todos os expoentes das variáveis na lista L. Se você quiser usar um valor personalizado para EXPONP, você deve fornecer COEFFP com um valor mesmo se você quiser o valor padrão para COEFFP.

     polynomialp (P, L, COEFFP) é equivalente a polynomialp (P, L, COEFFP, 'nonnegintegerp).

     polynomialp (P, L) é equivalente a polynomialp (P, L, 'constantp, 'nonnegintegerp).

     O polinômio não precisa ser expandido:

          (%i1) polynomialp ((x + 1)*(x + 2), [x]);
          (%o1)                         true
          (%i2) polynomialp ((x + 1)*(x + 2)^a, [x]);
          (%o2)                         false

     Um exemplo usando um valor personalizado para coeffp e para exponp:

          (%i1) polynomialp ((x + 1)*(x + 2)^(3/2), [x], numberp, numberp);
          (%o1)                         true
          (%i2) polynomialp ((x^(1/2) + 1)*(x + 2)^(3/2), [x], numberp, numberp);
          (%o2)                         true

     Polinômios com duas variáveis:

          (%i1) polynomialp (x^2 + 5*x*y + y^2, [x]);
          (%o1)                         false
          (%i2) polynomialp (x^2 + 5*x*y + y^2, [x, y]);
          (%o2)                         true

 -- Funcedilhaão: polytocompanion (P, X)

     Se P for um polinômio em X, retorna a atriz companheira de P. Para um polinômio mônico P de grau N, temos P = (-1)^N charpoly (polytocompanion (P, X)).

     Quando P não for um polinômio em X, emite uma mensagem de erro.

 -- Funcedilhaão: ptriangularize (M, V)

     Se M for uma matriz onde cada entrada dessa matriz for um polinômio em V, retorna a matriz M2 tal que

     (1) M2 é triangular alta,

     (2) M2 = E_N ... E_1 M, onde os elemetnos de E_1 a E_N são matrizes elementares cujas entrada são polinômios em V,

     (3) |det (M)| = |det (M2)|,

     Nota: Essa funcedilhaão não verifica se toda entrada é um polinômio em V.

 -- Funcedilhaão: rowop (M, I, J, THETA)

     Se M for uma matriz, retorna a matriz que resulta de se fazer a operacedilhaão de linha R_i <- R_i - theta * R_j. Se M não tiver uma linha I ou J, emite uma mensagem de erro.

 -- Funcedilhaão: rank (M)

     Retorna o ranque daquela matriz M. O rank é a dimensão do espacedilhao coluna. Exemplo:

          (%i1) rank(matrix([1,2],[2,4]));
          (%o1)                                  1
          (%i2) rank(matrix([1,b],[c,d]));
           Proviso:  {d - b c # 0}
          (%o2)                                  2

 -- Funcedilhaão: rowswap (M, I, J)

     Se M for uma matriz, permuta as linha I e J. Se M não tiver uma linha I ou J, emite uma mensagem de erro.

 -- Funcedilhaão: toeplitz (COL)
 -- Funcedilhaão: toeplitz (COL, LIN)

     Retorna uma matriz de Toeplitz T. a primeira coluna de T é COL; exceto para a primeira entrada, a primeira linha de T é LIN. O padrão para LIN é o conjugado complexo de COL. Exemplo:

          (%i1)  toeplitz([1,2,3],[x,y,z]);

                                            [ 1  y  z ]
                                            [         ]
          (%o1)                             [ 2  1  y ]
                                            [         ]
                                            [ 3  2  1 ]
          (%i2)  toeplitz([1,1+%i]);

                                        [   1     1 - %I ]
          (%o2)                         [                ]
                                        [ %I + 1    1    ]

 -- Funcedilhaão: vandermonde_matrix ([X_1, ..., X_N])

     Retorna uma matriz N por N cuja I-ésima linha é [1, X_I, X_I^2, ... X_I^(N-1)].

 -- Funcedilhaão: zerofor (M)
 -- Funcedilhaão: zerofor (M, FLD)

     Retorna uma matriz zero que tem o mesmo tamanho da matriz M.  Toda entrada da matriz zero é a identidade aditiva do anel FLD; o valor padrão para FLD é GENERALRING.

     O primeiro argumento M pode ser uma matriz quadrada ou uma não matriz. Quando M for uma matriz, cada entrada de M pode ser uma matriz quadrada -- dessa forma M pode ser uma matriz de bloco do Maxima. A matriz pode ser de bloco para qualquer nível (finito).

     Veja também identfor

 -- Funcedilhaão: zeromatrixp (M)

     Se M não for uma matriz de bloco, retorna true se is (equal (E, 0)) for verdadeiro para cada elemento E da matriz M.  Se M for uma matriz de bloco, retorna true se zeromatrixp avaliar para true para cada elemento de E.