1 @c /Matrices.texi/1.28/Fri Mar 2 00:44:39 2007/-ko/
3 * Introdução a Matrizes e Álgebra Linear::
4 * Definições para Matrizes e Álgebra Linear::
7 @node Introdução a Matrizes e Álgebra Linear, Definições para Matrizes e Álgebra Linear, Matrizes e Álgebra Linear, Matrizes e Álgebra Linear
8 @section Introdução a Matrizes e Álgebra Linear
16 @node Ponto, Vetores, Introdução a Matrizes e Álgebra Linear, Introdução a Matrizes e Álgebra Linear
18 O operador @code{.} representa multiplicação não comutativa e produto escalar.
19 Quando os operandos são matrizes 1-coluna ou 1-linha @code{a} e @code{b},
20 a expresão @code{a.b} é equivalente a @code{sum (a[i]*b[i], i, 1, length(a))}.
21 Se @code{a} e @code{b} não são complexos, isso é o produto escalar,
22 também chamado produto interno ou produto do ponto, de @code{a} e @code{b}.
23 O produto escalar é definido como @code{conjugate(a).b} quando @code{a} e @code{b} são complexos;
24 @code{innerproduct} no pacote @code{eigen} fornece o produto escalar complexo.
26 Quando os operandos são matrizes mais gerais,
27 o produto é a matriz produto @code{a} e @code{b}.
28 O número de linhas de @code{b} deve ser igual ao número de colunas de @code{a},
29 e o resultado tem número de linhas igual ao número de linhas de @code{a}
30 e número de colunas igual ao número de colunas de @code{b}.
32 Para distinguir @code{.} como um operador aritmético do
33 ponto decimal em um número em ponto flutuante,
34 pode ser necessário deixar espaços em cada lado.
35 Por exemplo, @code{5.e3} é @code{5000.0} mas @code{5 . e3} é @code{5} vezes @code{e3}.
37 Existem muitos sinalizadores que governam a simplificação de
38 expresões envolvendo @code{.}, a saber
39 @code{dot}, @code{dot0nscsimp}, @code{dot0simp}, @code{dot1simp}, @code{dotassoc},
40 @code{dotconstrules}, @code{dotdistrib}, @code{dotexptsimp}, @code{dotident},
43 @node Vetores, auto, Ponto, Introdução a Matrizes e Álgebra Linear
45 @code{vect} é um pacote de funções para análise vectorial.
46 @code{load ("vect")} chama esse pacote, e @code{demo ("vect")} permite visualizar uma demonstração.
47 @c find maxima -name \*orth\* YIELDS NOTHING; ARE THESE FUNCTIONS IN ANOTHER FILE NOW ??
48 @c and SHARE;VECT ORTH contains definitions of various orthogonal curvilinear coordinate systems.
50 O pacote de análise vectorial pode combinar e simplificar expresões
51 simbólicas incluindo produtos dos pontos e productos dos x, juntamente com
52 o gradiente, divergencia, torção, e operadores Laplacianos. A
53 distribuição desses operadores sobre adições ou produtos é governada
54 por muitos sinalizadores, como são várias outras expansões, incluindo expansão
55 dentro de componentes em qualquer sistema de coordenadas ortogonais.
56 Existem também funções para derivar o escalar ou vector potencial
59 O pacote @code{vect} contém essas funções:
60 @code{vectorsimp}, @code{scalefactors},
61 @code{express}, @code{potential}, e @code{vectorpotential}.
62 @c REVIEW vect.usg TO ENSURE THAT TEXINFO HAS WHATEVER IS THERE
63 @c PRINTFILE(VECT,USAGE,SHARE); for details.
65 Atenção: o pacote @code{vect} declara o operador ponto @code{.}
66 como sendo um operador comutativo.
68 @node auto, , Vetores, Introdução a Matrizes e Álgebra Linear
71 O pacote @code{eigen} contém muitas funções devotadas para a
72 computação simbólica de autovalores e autovectores.
73 Maxima chama o pacote automaticamente se uma das funções
74 @code{eigenvalues} ou @code{eigenvectors} é invocada.
75 O pacote pode ser chamado explicitamente com @code{load ("eigen")}.
77 @code{demo ("eigen")} mostra uma demonstração das compatibilidades
79 @code{batch ("eigen")} executa a mesma demonstração,
80 mas sem lembretes de utilizador entre sucessivas computações.
82 As funções no pacote @code{eigen} são
83 @code{innerproduct}, @code{unitvector}, @code{columnvector},
84 @code{gramschmidt}, @code{eigenvalues}, @code{eigenvectors}, @code{uniteigenvectors},
85 e @code{similaritytransform}.
87 @c end concepts Matrizes e Álgebra Linear
88 @node Definições para Matrizes e Álgebra Linear, , Introdução a Matrizes e Álgebra Linear, Matrizes e Álgebra Linear
89 @section Definições para Matrizes e Álgebra Linear
91 @deffn {Função} addcol (@var{M}, @var{list_1}, ..., @var{list_n})
92 Anexa a(s) coluna(s) dadas por uma
93 ou mais listas (ou matrizes) sobre a matriz @var{M}.
97 @deffn {Função} addrow (@var{M}, @var{list_1}, ..., @var{list_n})
98 Anexa a(s) linha(s) dadas por uma ou
99 mais listas (ou matrizes) sobre a matriz @var{M}.
103 @deffn {Função} adjoint (@var{M})
104 Retorna a matriz adjunta da matriz @var{M}.
105 A matriz adjunta é a transposta da matriz dos cofactores de @var{M}.
109 @deffn {Função} augcoefmatrix ([@var{eqn_1}, ..., @var{eqn_m}], [@var{x_1}, ..., @var{x_n}])
110 Retorna a matriz dos coeficientes
111 aumentada para as variáveis @var{x_1}, ..., @var{x_n} do sistema de equações lineares
112 @var{eqn_1}, ..., @var{eqn_m}. Essa é a matriz dos coeficientes com uma coluna anexada para
113 os termos independentes em cada equação (i.e., esses termos não dependem de
114 @var{x_1}, ..., @var{x_n}).
117 (%i1) m: [2*x - (a - 1)*y = 5*b, c + b*y + a*x = 0]$
118 (%i2) augcoefmatrix (m, [x, y]);
126 @deffn {Função} charpoly (@var{M}, @var{x})
127 Retorna um polinómio característico para a matriz @var{M}
128 em relação à variável @var{x}. Que é,
129 @code{determinant (@var{M} - diagmatrix (length (@var{M}), @var{x}))}.
132 (%i1) a: matrix ([3, 1], [2, 4]);
136 (%i2) expand (charpoly (a, lambda));
138 (%o2) lambda - 7 lambda + 10
139 (%i3) (programmode: true, solve (%));
140 (%o3) [lambda = 5, lambda = 2]
141 (%i4) matrix ([x1], [x2]);
145 (%i5) ev (a . % - lambda*%, %th(2)[1]);
151 (%i7) x2^2 + x1^2 = 1;
154 (%i8) solve ([%th(2), %], [x1, x2]);
156 (%o8) [[x1 = - -------, x2 = - -------],
160 [x1 = -------, x2 = -------]]
166 @deffn {Função} coefmatrix ([@var{eqn_1}, ..., @var{eqn_m}], [@var{x_1}, ..., @var{x_n}])
167 Retorna a matriz dos coeficientes para as
168 variáveis @var{x_1}, ..., @var{x_n} do sistema de equações lineares
169 @var{eqn_1}, ..., @var{eqn_m}.
172 (%i1) coefmatrix([2*x-(a-1)*y+5*b = 0, b*y+a*x = 3], [x,y]);
180 @deffn {Função} col (@var{M}, @var{i})
181 Reorna a @var{i}'ésima coluna da matriz @var{M}.
182 O valor de retorno é uma matriz.
187 @deffn {Função} columnvector (@var{L})
188 @deffnx {Função} covect (@var{L})
189 Retorna uma matriz de uma coluna e @code{length (@var{L})} linhas,
190 contendo os elementos da lista @var{L}.
192 @code{covect} é um sin@^onimo para @code{columnvector}.
194 @code{load ("eigen")} chama essa função.
196 @c FOLLOWING COMMENT PRESERVED. WHAT DOES THIS MEAN ??
197 Isso é útil se quiser usar partes das saídas das
198 funções nesse pacote em cálculos matriciais.
202 @c HMM, SPURIOUS "redefining the Macsyma function".
203 @c LEAVE IT HERE SINCE THAT'S WHAT A USER ACTUALLY SEES.
205 (%i1) load ("eigen")$
206 Warning - you are redefining the Macsyma function autovalores
207 Warning - you are redefining the Macsyma function autovectores
208 (%i2) columnvector ([aa, bb, cc, dd]);
220 @deffn {Função} conjugate (@var{x})
221 Retorna o conjugado complexo de @var{x}.
224 @c declare ([aa, bb], real, cc, complex, ii, imaginary);
225 @c conjugate (aa + bb*%i);
228 @c conjugate (xx + yy);
231 (%i1) declare ([aa, bb], real, cc, complex, ii, imaginary);
234 (%i2) conjugate (aa + bb*%i);
237 (%i3) conjugate (cc);
240 (%i4) conjugate (ii);
243 (%i5) conjugate (xx + yy);
245 (%o5) conjugate(yy) + conjugate(xx)
250 @deffn {Função} copymatrix (@var{M})
251 Retorna uma cópia da matriz @var{M}. Esse é o único
252 para fazer uma copia separada copiando @var{M} elemento a elemento.
254 Note que uma atribuição de uma matriz para outra, como em @code{m2: m1},
256 Uma atribuição @code{m2 [i,j]: x} ou @code{setelmx (x, i, j, m2} também modifica @code{m1 [i,j]}.
257 criando uma cópia com @code{copymatrix} e então usando atribução cria uma separada e modificada cópia.
262 @deffn {Função} determinant (@var{M})
263 Calcula o determinante de @var{M} por um método similar à
266 @c JUST HOW DOES ratmx AFFECT THE RESULT ??
267 A forma do resultado depende da escolha
268 do comutador @code{ratmx}.
270 @c IS A SPARSE DETERMINANT SOMETHING OTHER THAN THE DETERMINANT OF A SPARSE MATRIX ??
271 Existe uma rotina especial para calcular
272 determinantes esparsos que é chamada quando os comutadores
273 @code{ratmx} e @code{sparse} são ambos @code{true}.
275 @c EXAMPLES NEEDED HERE
278 @defvr {Variável} detout
279 Valor por omissão: @code{false}
281 Quando @code{detout} é @code{true}, o determinante de uma
282 matriz cuja inversa é calculada é factorado fora da inversa.
284 Para esse comutador ter efeito @code{doallmxops} e @code{doscmxops} deveram ambos serem
285 @code{false} (veja suas transcrições). Alternativamente esses comutadores podem ser
286 dados para @code{ev} o que faz com que os outros dois sejam escolhidos correctamente.
291 (%i1) m: matrix ([a, b], [c, d]);
296 (%i3) doallmxops: false$
297 (%i4) doscmxops: false$
305 @c THERE'S MORE TO THIS STORY: detout: false$ invert (m); RETURNS THE SAME THING.
306 @c IT APPEARS THAT doallmxops IS CRUCIAL HERE.
310 @deffn {Função} diagmatrix (@var{n}, @var{x})
311 Retorna uma matriz diagonal de tamanho @var{n} por @var{n} com os
312 elementos da diagonal todos iguais a @var{x}.
313 @code{diagmatrix (@var{n}, 1)} retorna uma matriz identidade (o mesmo que @code{ident (@var{n})}).
315 @var{n} deve avaliar para um inteiro, de outra forma @code{diagmatrix} reclama com uma mensagem de erro.
317 @var{x} pode ser qualquer tipo de expresão, incluindo outra matriz.
318 Se @var{x} é uma matriz, isso não é copiado; todos os elementos da diagonal referem-se à mesma instância, @var{x}.
323 @defvr {Variável} doallmxops
324 Valor por omissão: @code{true}
326 Quando @code{doallmxops} é @code{true},
327 @c UMM, WHAT DOES THIS MEAN EXACTLY ??
328 todas as operações relacionadas a matrizes são realizadas.
329 Quando isso é @code{false} então a escolha de
330 comutadores individuais @code{dot} governam quais operações são executadas.
332 @c NEED EXAMPLES HERE
335 @defvr {Variável} domxexpt
336 Valor por omissão: @code{true}
338 Quando @code{domxexpt} é @code{true},
339 uma matriz exponencial, @code{exp (@var{M})} onde @var{M} é a matriz,
340 é interpretada como uma matriz com elementos @code{[i,j} iguais a @code{exp (m[i,j])}.
341 de outra forma @code{exp (@var{M})} avalia para @code{exp (@var{ev(M)}}.
344 afecta todas as expresões da forma @code{@var{base}^@var{expoente}} onde @var{base} é uma
345 expresão assumida escalar ou constante, e @var{expoente} é uma lista ou
351 (%i1) m: matrix ([1, %i], [a+b, %pi]);
355 (%i2) domxexpt: false$
361 (%i4) domxexpt: true$
372 @defvr {Variável de opção} domxmxops
373 Valor por omissão: @code{true}
375 Quando @code{domxmxops} é @code{true}, todas as operações matriz-matriz ou
376 matriz-lista são realizadas (mas não operações
377 escalar-matriz); se esse comutador é @code{false} tais operações não são.
378 @c IS THIS AN EVALUATION OR A SIMPLIFICATION FLAG ??
383 @defvr {Variável de opção} domxnctimes
384 Valor por omissão: @code{false}
386 Quando @code{domxnctimes} é @code{true}, produtos não comutativos de
387 matrizes são realizados.
388 @c IS THIS AN EVALUATION OR A SIMPLIFICATION FLAG ??
393 @defvr {Variável de opção} dontfactor
394 Valor por omissão: @code{[]}
396 @code{dontfactor} pode ser escolhido para uma lista de variáveis em relação
397 a qual factoração não é para ocorrer. (A lista é inicialmente vazia.)
398 Factoração também não pegará lugares com relação a quaisquer variáveis que
399 são menos importantes, conforme a hierarquía de variável assumida para a forma expresão racional canónica (CRE),
400 que essas na lista @code{dontfactor}.
404 @defvr {Variável de opção} doscmxops
405 Valor por omissão: @code{false}
407 Quando @code{doscmxops} é @code{true}, operações escalar-matriz são
409 @c IS THIS AN EVALUATION OR A SIMPLIFICATION FLAG ??
414 @defvr {Variável de opção} doscmxplus
415 Valor por omissão: @code{false}
417 Quando @code{doscmxplus} é @code{true}, operações escalar-matriz retornam
418 uma matriz resultado. Esse comutador não é subsomado sob @code{doallmxops}.
419 @c IS THIS AN EVALUATION OR A SIMPLIFICATION FLAG ??
424 @defvr {Variável de opção} dot0nscsimp
425 Valor por omissão: @code{true}
427 @c WHAT DOES THIS MEAN EXACTLY ??
428 Quando @code{dot0nscsimp} é @code{true}, um produto não comutativo de zero
429 e um termo não escalar é simplificado para um produto comutativo.
434 @defvr {Variável de opção} dot0simp
435 Valor por omissão: @code{true}
437 @c WHAT DOES THIS MEAN EXACTLY ??
438 Quando @code{dot0simp} é @code{true},
439 um produto não comutativo de zero e
440 um termo escalar é simplificado para um produto não comutativo.
445 @defvr {Variável de opção} dot1simp
446 Valor por omissão: @code{true}
448 @c WHAT DOES THIS MEAN EXACTLY ??
449 Quando @code{dot1simp} é @code{true},
450 um produto não comutativo de um e
451 outro termo é simplificado para um produto comutativo.
456 @defvr {Variável de opção} dotassoc
457 Valor por omissão: @code{true}
459 Quando @code{dotassoc} é @code{true}, uma expresão @code{(A.B).C} simplifica para
461 @c "." MEANS NONCOMMUTATIVE MULTIPLICATION RIGHT ??
466 @defvr {Variável de opção} dotconstrules
467 Valor por omissão: @code{true}
469 Quando @code{dotconstrules} é @code{true}, um produto não comutativo de uma
470 constante e outro termo é simplificado para um produto comutativo.
471 @c TERMINOLOGY: (1) SWITCH/FLAG/SOME OTHER TERM ?? (2) ASSIGN/SET/TURN ON/SOME OTHER TERM ??
472 Ativando esse sinalizador efectivamente activamos @code{dot0simp}, @code{dot0nscsimp}, e
473 @code{dot1simp} também.
478 @defvr {Variável de opção} dotdistrib
479 Valor por omissão: @code{false}
481 Quando @code{dotdistrib} é @code{true}, uma expresão @code{A.(B + C)} simplifica para @code{A.B + A.C}.
486 @defvr {Variável de opção} dotexptsimp
487 Valor por omissão: @code{true}
489 Quando @code{dotexptsimp} é @code{true}, uma expresão @code{A.A} simplifica para @code{A^^2}.
494 @defvr {Variável de opção} dotident
497 @code{dotident} é o valor retornado por @code{X^^0}.
498 @c "RETURNED" ?? IS THIS A SIMPLIFICATION OR AN EVALUATION ??
503 @defvr {Variável de opção} dotscrules
504 Valor por omissão: @code{false}
506 Quando @code{dotscrules} é @code{true}, uma expresão @code{A.SC} ou @code{SC.A} simplifica
507 para @code{SC*A} e @code{A.(SC*B)} simplifica para @code{SC*(A.B)}.
508 @c HMM, DOES "SC" MEAN "SCALAR" HERE ?? CLARIFY
513 @deffn {Função} echelon (@var{M})
514 Retorna a forma escalonada da matriz @var{M},
515 como produzido através da eliminação de Gauss.
516 A forma escalonada é calculada de @var{M}
517 por operações elementares de linha tais que o primeiro
518 elemento não zero em cada linha na matriz resultante seja o número um e os
519 elementos da coluna abaixo do primeiro número um em cada linha sejam todos zero.
521 @code{triangularize} também realiza eliminação de Gaussian,
522 mas não normaliza o elemento líder não nulo em cada linha.
524 @code{lu_factor} e @code{cholesky} são outras funções que retornam matrizes triangularizadas.
527 @c M: matrix ([3, 7, aa, bb], [-1, 8, 5, 2], [9, 2, 11, 4]);
531 (%i1) M: matrix ([3, 7, aa, bb], [-1, 8, 5, 2], [9, 2, 11, 4]);
545 [ 0 0 1 ----------- ]
551 @deffn {Função} eigenvalues (@var{M})
552 @deffnx {Função} eivals (@var{M})
553 @c eigen.mac IS AUTOLOADED IF eigenvalues OR eigenvectors IS REFERENCED; EXTEND THAT TO ALL FUNCTIONS ??
554 @c EACH FUNCTION INTENDED FOR EXTERNAL USE SHOULD HAVE ITS OWN DOCUMENTATION ITEM
555 Retorna uma lista de duas listas contendo os autovalores da matriz @var{M}.
556 A primeira sublista do valor de retorno é a lista de autovalores da
557 matriz, e a segunda sublista é a lista de
558 multiplicidade dos autovalores na ordem correspondente.
560 @code{eivals} é um sin@^onimo de @code{eigenvalues}.
562 @code{eigenvalues} chama a função @code{solve} para achar as raízes do
563 polinómio característico da matriz.
564 Algumas vezes @code{solve} pode não estar habilitado a achar as raízes do polinómio;
565 nesse caso algumas outras funções nesse
566 pacote (except @code{innerproduct}, @code{unitvector}, @code{columnvector} e
567 @code{gramschmidt}) não irão trabalhar.
568 @c WHICH ONES ARE THE FUNCTIONS WHICH DON'T WORK ??
569 @c ACTUALLY IT'S MORE IMPORTANT TO LIST THE ONES WHICH DON'T WORK HERE
570 @c WHAT DOES "will not work" MEAN, ANYWAY ??
572 Em alguns casos os autovalores achados por @code{solve} podem ser expresões complicadas.
573 (Isso pode acontecer quando @code{solve} retorna uma expresão real não trivial
574 para um autovalor que é sabidamente real.)
575 Isso pode ser possível para simplificar os autovalores usando algumas outras funções.
576 @c WHAT ARE THOSE OTHER FUNCTIONS ??
578 O pacote @code{eigen.mac} é chamado automaticamente quando
579 @code{eigenvalues} ou @code{eigenvectors} é referenciado.
580 Se @code{eigen.mac} não tiver sido ainda chamado,
581 @code{load ("eigen")} chama-o.
582 Após ser chamado, todas as funções e variáveis no pacote estarão disponíveis.
583 @c REFER TO OVERVIEW OF PACKAGE (INCLUDING LIST OF FUNCTIONS) HERE
585 @c NEED EXAMPLES HERE
588 @deffn {Função} eigenvectors (@var{M})
589 @deffnx {Função} eivects (@var{M})
590 pegam uma matriz @var{M} como seu argumento e retorna uma lista
591 de listas cuja primeira sublista é a saída de @code{eigenvalues}
592 e as outras sublistas são os autovectores da
593 matriz correspondente para esses autovalores respectivamente.
595 @code{eivects} é um sin@^onimo para @code{eigenvectors}.
597 O pacote @code{eigen.mac} é chamado automaticamente quando
598 @code{eigenvalues} ou @code{eigenvectors} é referenciado.
599 Se @code{eigen.mac} não tiver sido ainda chamado,
600 @code{load ("eigen")} chama-o.
601 Após ser chamado, todas as funções e variáveis no pacote estarão disponíveis.
603 Os sinalizadores que afectam essa função são:
605 @code{nondiagonalizable} é escolhido para @code{true} ou @code{false} dependendo de
606 se a matriz é não diagonalizável ou diagonalizável após o
607 retorno de @code{eigenvectors}.
609 @code{hermitianmatrix} quando @code{true}, faz com que os autovectores
610 degenerados da matriz Hermitiana sejam ortogonalizados usando o
611 algoritmo de Gram-Schmidt.
613 @code{knowneigvals} quando @code{true} faz com que o pacote @code{eigen} assumir que os
614 autovalores da matriz são conhecidos para o utilizador e armazenados sob o
615 nome global @code{listeigvals}. @code{listeigvals} poderá ser escolhido para uma lista similar
616 à saída de @code{eigenvalues}.
618 A função @code{algsys} é usada aqui para resolver em relação aos autovectores. Algumas vezes se os
619 autovalores estão ausêntes, @code{algsys} pode não estar habilitado a achar uma solução.
620 Em alguns casos, isso pode ser possível para simplificar os autovalores por
621 primeiro achando e então usando o comando @code{eigenvalues} e então usando outras funções
622 para reduzir os autovalores a alguma coisa mais simples.
623 Continuando a simplificação, @code{eigenvectors} pode ser chamada novamente
624 com o sinalizador @code{knowneigvals} escolhido para @code{true}.
628 @deffn {Função} ematrix (@var{m}, @var{n}, @var{x}, @var{i}, @var{j})
629 Retorna uma matriz @var{m} por @var{n}, todos os elementos da qual
630 são zero excepto para o elemento @code{[@var{i}, @var{j}]} que é @var{x}.
631 @c WOW, THAT SEEMS PRETTY SPECIALIZED ...
635 @deffn {Função} entermatrix (@var{m}, @var{n})
636 Retorna uma matriz @var{m} por @var{n}, lendo os elementos interativamente.
638 Se @var{n} é igual a @var{m},
639 Maxima pergunta pelo tipo de matriz (diagonal, simétrica, antisimétrica, ou genérica)
641 Cada resposta é terminada por um ponto e vírgula @code{;} ou sinal de dólar @code{$}.
643 Se @var{n} não é igual a @var{m},
644 Maxima pergunta por cada elemento.
646 Os elementos podem ser quaisquer expressões, que são avaliadas.
647 @code{entermatrix} avalia seus argumentos.
651 (%i2) m: entermatrix (n, n)$
653 Is the matriz 1. Diagonal 2. Symmetric 3. Antisymmetric 4. General
654 Answer 1, 2, 3 or 4 :
677 @deffn {Função} genmatrix (@var{a}, @var{i_2}, @var{j_2}, @var{i_1}, @var{j_1})
678 @deffnx {Função} genmatrix (@var{a}, @var{i_2}, @var{j_2}, @var{i_1})
679 @deffnx {Função} genmatrix (@var{a}, @var{i_2}, @var{j_2})
680 Retorna uma matriz gerada de @var{a},
681 pegando o elemento @code{@var{a}[@var{i_1},@var{j_1}]}
682 como o elemento do canto superior esquerdo e @code{@var{a}[@var{i_2},@var{j_2}]}
683 como o elemento do canto inferior directo da matriz.
684 Aqui @var{a} é um array declarado (criado através de @code{array} mas não por meio de @code{make_array})
685 ou um array não declarado,
687 ou uma expressão lambda de dois argumentos.
688 (Uma funçãO array é criado como outras funções com @code{:=} ou @code{define},
689 mas os argumentos são colocados entre colchêtes em lugar de parêntesis.)
691 Se @var{j_1} é omitido, isso é assumido ser igual a @var{i_1}.
692 Se ambos @var{j_1} e @var{i_1} são omitidos, ambos são assumidos iguais a 1.
694 Se um elemento seleccionado @code{i,j} de um array for indefinido,
695 a matriz conterá um elemento simbólico @code{@var{a}[i,j]}.
700 @c h [i, j] := 1 / (i + j - 1);
701 @c genmatrix (h, 3, 3);
702 @c array (a, fixnum, 2, 2);
705 @c genmatrix (a, 2, 2);
706 @c genmatrix (lambda ([i, j], j - i), 3, 3);
707 @c genmatrix (B, 2, 2);
710 (%i1) h [i, j] := 1 / (i + j - 1);
714 (%i2) genmatrix (h, 3, 3);
726 (%i3) array (a, fixnum, 2, 2);
730 (%i5) a [2, 2] : %pi;
732 (%i6) genmatrix (a, 2, 2);
736 (%i7) genmatrix (lambda ([i, j], j - i), 3, 3);
742 (%i8) genmatrix (B, 2, 2);
752 @deffn {Função} gramschmidt (@var{x})
753 @deffnx {Função} gschmit (@var{x})
754 Realiza o algoritmo de ortonalização de Gram-Schmidt sobre @var{x},
755 seja ela uma matriz ou uma lista de listas.
756 @var{x} não é modificado por @code{gramschmidt}.
758 Se @var{x} é uma matriz, o algoritmo é aplicado para as linhas de @var{x}.
759 Se @var{x} é uma lista de listas, o algoritmo é aplicado às sublistas,
760 que devem ter igual números de elementos.
762 o valor de retorno é uma lista de listas, as sublistas das listas são ortogonais
763 e gera o mesmo spaço que @var{x}.
764 Se a dimensão do conjunto gerador de @var{x} é menor que o número de linhas ou sublistas,
765 algumas sublistas do valor de retorno são zero.
767 @code{factor} é chamada a cada estágio do algoritmo para simplificar resultados intermédios.
768 Como uma consequência, o valor de retorno pode conter inteiros factorados.
770 @code{gschmit} (nota ortográfica) é um sin@^onimo para @code{gramschmidt}.
772 @code{load ("eigen")} chama essa função.
777 (%i1) load ("eigen")$
778 Warning - you are redefining the Macsyma function autovalores
779 Warning - you are redefining the Macsyma function autovectores
780 (%i2) x: matrix ([1, 2, 3], [9, 18, 30], [12, 48, 60]);
786 (%i3) y: gramschmidt (x);
789 (%o3) [[1, 2, 3], [- ---, - --, ---], [- ----, ----, 0]]
791 (%i4) i: innerproduct$
792 (%i5) [i (y[1], y[2]), i (y[2], y[3]), i (y[3], y[1])];
798 @deffn {Função} ident (@var{n})
799 Retorna uma matriz identidade @var{n} por @var{n}.
803 @deffn {Função} innerproduct (@var{x}, @var{y})
804 @deffnx {Função} inprod (@var{x}, @var{y})
805 Retorna o produto interno (também chamado produto escalar ou produto do ponto) de @var{x} e @var{y},
806 que são listas de igual comprimento, ou ambas matrizes 1-coluna ou 1-linha de igual comprimento.
807 O valor de retorno é @code{conjugate (x) . y},
808 onde @code{.} é o operador de multiplicação não comutativa.
810 @code{load ("eigen")} chama essa função.
812 @code{inprod} é um sin@^onimo para @code{innerproduct}.
817 @c THIS DESCRIPTION NEEDS WORK
818 @deffn {Função} invert (@var{M})
819 Retorna a inversa da matriz @var{M}.
820 A inversa é calculada pelo método adjunto.
822 Isso permite a um utilizador calcular a inversa de uma matriz com
823 entradas bfloat ou polinómios com coeficientes em ponto flutuante sem
824 converter para a forma CRE.
826 Cofactores são calculados pela função @code{determinant},
827 então se @code{ratmx} é @code{false} a inversa é calculada
828 sem mudar a representação dos elementos.
831 corrente é ineficiente para matrizes de alta ordem.
833 Quando @code{detout} é @code{true}, o determinante é factorado fora da
836 Os elementos da inversa não são automaticamente expandidos.
837 Se @var{M} tem elementos polinomiais, melhor aparência de saída pode ser
838 gerada por @code{expand (invert (m)), detout}.
839 Se isso é desejável para ela
840 divisão até pelo determinante pode ser excelente por @code{xthru (%)}
841 ou alternativamente na unha por
844 expe (adjoint (m)) / expand (determinant (m))
845 invert (m) := adjoint (m) / determinant (m)
848 Veja @code{^^} (expoente não comutativo) para outro método de inverter uma matriz.
853 @defvr {Variável de opção} lmxchar
854 Valor por omissão: @code{[}
856 @code{lmxchar} é o caractere mostrado como o delimitador
857 esquerdo de uma matriz.
858 Veja também @code{rmxchar}.
864 (%i2) matrix ([a, b, c], [d, e, f], [g, h, i]);
874 @deffn {Função} matrix (@var{row_1}, ..., @var{row_n})
875 Retorna uma matriz retangular que tem as linhas @var{row_1}, ..., @var{row_n}.
876 Cada linha é uma lista de expressões.
877 Todas as linhas devem ter o mesmo comprimento.
879 As operações @code{+} (adição), @code{-} (subtração), @code{*} (multiplicação),
880 e @code{/} (divisão), são realizadas elemento por elemento
881 quando os operandos são duas matrizes, um escalar e uma matriz, ou uma matriz e um escalar.
882 A operação @code{^} (exponenciação, equivalentemente @code{**})
883 é realizada elemento por elemento
884 se os operandos são um escalar e uma matriz ou uma matriz e um escalar,
885 mas não se os operandos forem duas matrizes.
886 @c WHAT DOES THIS NEXT PHRASE MEAN EXACTLY ??
887 Todos as operações são normalmente realizadas de forma completa,
888 incluindo @code{.} (multiplicação não comutativa).
890 Multiplicação de matrizes é representada pelo operador de multiplicação não comutativa @code{.}.
891 O correspondente operador de exponenciação não comutativa é @code{^^}.
892 Para uma matriz @code{@var{A}}, @code{@var{A}.@var{A} = @var{A}^^2} e
893 @code{@var{A}^^-1} é a inversa de @var{A}, se existir.
895 Existem comutadores para controlar a simplificação de expresões
896 envolvendo operações escalar e matriz-lista.
898 @code{doallmxops}, @code{domxexpt}
899 @code{domxmxops}, @code{doscmxops}, e @code{doscmxplus}.
900 @c CHECK -- WE PROBABLY WANT EXHAUSTIVE LIST HERE
902 Existem opções adicionais que são relacionadas a matrizes. São elas:
903 @code{lmxchar}, @code{rmxchar}, @code{ratmx}, @code{listarith}, @code{detout},
906 @c CHECK -- WE PROBABLY WANT EXHAUSTIVE LIST HERE
909 funções que pegam matrizes como argumentos ou devolvem matrizes como valor de retorno.
910 Veja @code{eigenvalues}, @code{eigenvectors},
912 @code{charpoly}, @code{genmatrix}, @code{addcol}, @code{addrow},
913 @code{copymatrix}, @code{transpose}, @code{echelon},
915 @c CHECK -- WE PROBABLY WANT EXHAUSTIVE LIST HERE
921 Construção de matrizes de listas.
924 (%i1) x: matrix ([17, 3], [-8, 11]);
928 (%i2) y: matrix ([%pi, %e], [a, b]);
935 Adição, elemento por elemento.
945 Subtração, elemento por elemento.
955 Multiplicação, elemento por elemento.
965 Divisão, elemento por elemento.
979 Matriz para um expoente escalar, elemento por elemento.
989 Base escalar para um expoente matriz, elemento por elemento.
1001 Base matriz para um expoente matriz. Essa não é realizada elemento por elemento.
1015 Multiplicação não comutativa de matrizes.
1019 [ 3 a + 17 %pi 3 b + 17 %e ]
1021 [ 11 a - 8 %pi 11 b - 8 %e ]
1023 [ 17 %pi - 8 %e 3 %pi + 11 %e ]
1025 [ 17 a - 8 b 11 b + 3 a ]
1029 Exponenciação não comutativa de matrizes.
1030 Uma base escalar @var{b} para uma potência matriz @var{M}
1031 é realizada elemento por elemento e então @code{b^^m} é o mesmo que @code{b^m}.
1047 A matriz elevada a um expoente -1 com exponenciação não comutativa é a matriz inversa,
1059 (%i15) x . (x ^^ -1);
1067 @deffn {Função} matrixmap (@var{f}, @var{M})
1068 Retorna uma matriz com elemento @code{i,j} igual a @code{@var{f}(@var{M}[i,j])}.
1070 Veja também @code{map}, @code{fullmap}, @code{fullmapl}, e @code{apply}.
1072 @c NEED EXAMPLE HERE
1075 @deffn {Função} matrixp (@var{expr})
1076 Retorna @code{true} se @var{expr} é uma matriz, de outra forma retorna @code{false}.
1080 @defvr {Variável de opção} matrix_element_add
1081 Valor por omissão: @code{+}
1083 @code{matrix_element_add} é a operação
1084 invocada em lugar da adição em uma multiplicação de matrizes.
1085 A @code{matrix_element_add} pode ser atribuído qualquer operador n-ário
1086 (que é, uma função que manuseia qualquer número de argumentos).
1087 Os valores atribuídos podem ser o nome de um operador entre aspas duplas,
1089 ou uma expressão lambda.
1091 Veja também @code{matrix_element_mult} e @code{matrix_element_transpose}.
1096 (%i1) matrix_element_add: "*"$
1097 (%i2) matrix_element_mult: "^"$
1098 (%i3) aa: matrix ([a, b, c], [d, e, f]);
1102 (%i4) bb: matrix ([u, v, w], [x, y, z]);
1106 (%i5) aa . transpose (bb);
1116 @defvr {Variável de opção} matrix_element_mult
1117 Valor por omissão: @code{*}
1119 @code{matrix_element_mult} é a operação
1120 invocada em lugar da multiplicação em uma multiplicação de matrizes.
1121 A @code{matrix_element_mult} pode ser atribuído qualquer operador binário.
1122 O valor atribuído pode ser o nome de um operador entre aspas duplas,
1123 o nome de uma função,
1124 ou uma expressão lambda.
1126 O operador do ponto @code{.} é uma escolha útil em alguns contextos.
1128 Veja também @code{matrix_element_add} e @code{matrix_element_transpose}.
1133 (%i1) matrix_element_add: lambda ([[x]], sqrt (apply ("+", x)))$
1134 (%i2) matrix_element_mult: lambda ([x, y], (x - y)^2)$
1135 (%i3) [a, b, c] . [x, y, z];
1137 (%o3) sqrt((c - z) + (b - y) + (a - x) )
1138 (%i4) aa: matrix ([a, b, c], [d, e, f]);
1142 (%i5) bb: matrix ([u, v, w], [x, y, z]);
1146 (%i6) aa . transpose (bb);
1148 [ sqrt((c - w) + (b - v) + (a - u) ) ]
1151 [ sqrt((f - w) + (e - v) + (d - u) ) ]
1154 [ sqrt((c - z) + (b - y) + (a - x) ) ]
1157 [ sqrt((f - z) + (e - y) + (d - x) ) ]
1162 @defvr {Variável de opção} matrix_element_transpose
1163 Valor por omissão: @code{false}
1165 @code{matrix_element_transpose} é a operação
1166 aplicada a cada elemento de uma matriz quando for uma transposta.
1167 A @code{matrix_element_mult} pode ser atribuído qualquer operador unário.
1168 O valor atribuído pode ser nome de um operador entre aspas duplas,
1169 o nome de uma função,
1170 ou uma expressão lambda.
1172 Quando @code{matrix_element_transpose} for igual a @code{transpose},
1173 a função @code{transpose} é aplicada a todo elemento.
1174 Quando @code{matrix_element_transpose} for igual a @code{nonscalars},
1175 a função @code{transpose} é aplicada a todo elemento não escalar.
1176 Se algum elemento é um átomo, a opção @code{nonscalars} aplica
1177 @code{transpose} somente se o átomo for declarado não escalar,
1178 enquanto a opção @code{transpose} sempre aplica @code{transpose}.
1180 O valor padrão, @code{false}, significa nenhuma operação é aplicada.
1182 Veja também @code{matrix_element_add} e @code{matrix_element_mult}.
1187 (%i1) declare (a, nonscalar)$
1188 (%i2) transpose ([a, b]);
1192 (%i3) matrix_element_transpose: nonscalars$
1193 (%i4) transpose ([a, b]);
1197 (%i5) matrix_element_transpose: transpose$
1198 (%i6) transpose ([a, b]);
1202 (%i7) matrix_element_transpose: lambda ([x], realpart(x) - %i*imagpart(x))$
1203 (%i8) m: matrix ([1 + 5*%i, 3 - 2*%i], [7*%i, 11]);
1204 [ 5 %i + 1 3 - 2 %i ]
1207 (%i9) transpose (m);
1215 @c IS THIS THE ONLY MATRIX TRACE FUNCTION ??
1216 @deffn {Função} mattrace (@var{M})
1217 Retorna o traço (que é, a soma dos elementos sobre a diagonal principal) da
1218 matriz quadrada @var{M}.
1220 @code{mattrace} é chamada por @code{ncharpoly},
1221 uma alternativa para @code{charpoly} do Maxima.
1222 @c UMM, HOW IS THAT RELEVANT HERE ??
1224 @code{load ("nchrpl")} chama essa função.
1228 @deffn {Função} minor (@var{M}, @var{i}, @var{j})
1229 Retorna o @var{i}, @var{j} menor do elemento localizado na linha @var{i} coluna @var{j} da matriz @var{M}. Que é @var{M}
1230 com linha @var{i} e coluna @var{j} ambas removidas.
1234 @deffn {Função} ncexpt (@var{a}, @var{b})
1235 Se uma expressão exponencial não comutativa é muito
1236 alta para ser mostrada como @code{@var{a}^^@var{b}} aparecerá como @code{ncexpt (@var{a},@var{b})}.
1238 @code{ncexpt} não é o nome de uma função ou operador;
1239 o nome somente aparece em saídas, e não é reconhecido em entradas.
1243 @deffn {Função} ncharpoly (@var{M}, @var{x})
1244 Retorna o polinómio característico da matriz @var{M}
1245 com relação a @var{x}. Essa é uma alternativa para @code{charpoly} do Maxima.
1247 @code{ncharpoly} trabalha pelo cálculo dos traços das potências na dada matriz,
1248 que são sabidos serem iguais a somas de potências das raízes do
1249 polinómio característico. Para essas quantidade a função
1250 simétrica das raízes pode ser calculada, que nada mais são que
1251 os coeficientes do polinómio característico. @code{charpoly} trabalha
1252 @c SHOULD THAT BE "m" INSTEAD OF "a" IN THE NEXT LINE ??
1253 formatando o determinante de @code{@var{x} * ident [n] - a}. Dessa forma @code{ncharpoly} é vencedor,
1254 por exemplo, no caso de largas e densas matrizes preencidas com inteiros,
1255 desde que isso evite inteiramente a aritmética polinomial.
1257 @code{load ("nchrpl")} loads this file.
1261 @deffn {Função} newdet (@var{M}, @var{n})
1262 Calcula o determinante de uma matriz ou array @var{M} pelo
1263 algoritmo da árvore menor de Johnson-Gentleman.
1264 @c UGH -- ARRAYS ARE SUCH A MESS
1265 O argumento @var{n} é a ordem; isso é opcional se @var{M} for uma matriz.
1269 @c NEEDS CLARIFICATION AND EXAMPLES
1270 @defvr {Declaração} nonscalar
1271 Faz átomos ser comportarem da mesma forma que uma lista ou matriz em relação ao
1276 @deffn {Função} nonscalarp (@var{expr})
1277 Retorna @code{true} se @var{expr} é um não escalar, i.e., isso contém
1278 átomos declarados como não escalares, listas, ou matrizes.
1282 @deffn {Função} permanent (@var{M}, @var{n})
1283 Calcula o permanente da matriz @var{M}. Um permanente
1284 é como um determinante mas sem mudança de sinal.
1288 @deffn {Função} rank (@var{M})
1289 Calcula o posto da matriz @var{M}. Que é, a ordem do
1290 mais largo determinante não singular de @var{M}.
1292 @c STATEMENT NEEDS CLARIFICATION
1293 @var{rank} pode retornar uma
1294 resposta ruim se não puder determinar que um elemento da matriz que é
1295 equivalente a zero é realmente isso.
1299 @defvr {Variável de opção} ratmx
1300 Valor por omissão: @code{false}
1302 Quando @code{ratmx} é @code{false}, adição, subtração,
1303 e multiplicação para determinantes e matrizes são executados na
1304 representação dos elementos da matriz e fazem com que o resultado da
1305 inversão de matrizes seja esquerdo na representação geral.
1307 Quando @code{ratmx} é @code{true},
1308 as 4 operações mencionadas acima são executadas na forma CRE e o
1309 resultado da matriz inversa é dado na forma CRE. Note isso pode
1310 fazer com que os elementos sejam expandidos (dependendo da escolha de @code{ratfac})
1311 o que pode não ser desejado sempre.
1315 @deffn {Função} row (@var{M}, @var{i})
1316 retorna a @var{i}'ésima linha da matriz @var{M}.
1317 O valor de retorno é uma matriz.
1321 @defvr {Variável de opção} scalarmatrixp
1322 Valor por omissão: @code{true}
1324 Quando @code{scalarmatrixp} é @code{true}, então sempre que uma matriz 1 x 1
1325 é produzida como um resultado de cálculos o produto do ponto de matrizes
1326 é simplificado para um escalar, a saber o elemento solitário da matriz.
1328 Quando @code{scalarmatrixp} é @code{all},
1329 então todas as matrizes 1 x 1 serão simplificadas para escalares.
1331 Quando @code{scalarmatrixp} é @code{false}, matrizes 1 x 1 não são simplificadas para escalares.
1335 @c I WONDER WHAT THIS IS ABOUT
1336 @deffn {Função} scalefactors (@var{coordinatetransform})
1337 Aqui coordinatetransform
1338 avalia para a forma [[expresão1, expresão2, ...],
1339 indeterminação1, indeterminação2, ...], onde indeterminação1,
1340 indeterminação2, etc. são as variáveis de coordenadas curvilíneas e
1341 onde a escolha de componentes cartesianas retangulares é dada em termos das
1342 coordenadas curvilíneas por [expresão1, expresão2, ...].
1343 @code{coordinates} é escolhida para o vector [indeterminação1, indeterminação2,...],
1344 e @code{dimension} é escolhida para o comprimento desse vector. SF[1], SF[2],
1345 ..., SF[DIMENSION] são escohidos para factores de escala de coordenada, e @code{sfprod}
1346 é escohido para o produto desse factores de escala. Inicialmente, @code{coordinates}
1347 é [X, Y, Z], @code{dimension} é 3, e SF[1]=SF[2]=SF[3]=SFPROD=1,
1348 correspondendo a coordenadas Cartesianas retangulares 3-dimensional.
1349 Para expandir uma expresão dentro de componentes físicos no sistema de coordenadas
1350 corrente , existe uma função com uso da forma
1351 @c SOME TEXT HAS GONE MISSING HERE
1355 @deffn {Função} setelmx (@var{x}, @var{i}, @var{j}, @var{M})
1356 Atribue @var{x} para o (@var{i}, @var{j})'ésimo elemento da matriz @var{M},
1357 e retorna a matriz alterada.
1359 @code{@var{M} [@var{i}, @var{j}]: @var{x}} tem o mesmo efeito,
1360 mas retorna @var{x} em lugar de @var{M}.
1364 @deffn {Função} similaritytransform (@var{M})
1365 @deffnx {Função} simtran (@var{M})
1366 @code{similaritytransform} calcula uma transformação homotética da matriz @code{M}.
1367 Isso retorna uma lista que é a saída do
1368 comando @code{uniteigenvectors}. Em adição se o sinalizador @code{nondiagonalizable}
1369 é @code{false} duas matrizes globais @code{leftmatrix} e @code{rightmatrix} são calculadas.
1370 Essas matrizes possuem a propriedade de
1371 @code{leftmatrix . @var{M} . rightmatrix} é uma matriz diagonal com os autovalores
1372 de @var{M} sobre a diagonal. Se @code{nondiagonalizable} é @code{true} as matrizes esquerda e
1373 direita não são computadas.
1375 Se o sinalizador @code{hermitianmatrix} é @code{true}
1376 então @code{leftmatrix} é o conjugado complexo da transposta de
1377 @code{rightmatrix}. De outra forma @code{leftmatrix} é a inversa de @code{rightmatrix}.
1379 @code{rightmatrix} é a matriz cujas colunas são os autovectores
1380 unitários de @var{M}. Os outros sinalizadores (veja @code{eigenvalues} e
1381 @code{eigenvectors}) possuem o mesmo efeito desde que
1382 @code{similaritytransform} chama as outras funções no pacote com o objectivo de
1383 estar habilitado para a forma @code{rightmatrix}.
1385 @code{load ("eigen")} chama essa função.
1387 @code{simtran} é um sin@^onimo para @code{similaritytransform}.
1391 @defvr {Variável de opção} sparse
1392 Valor por omissão: @code{false}
1394 Quando @code{sparse} é @code{true}, e se @code{ratmx} é @code{true}, então @code{determinant}
1395 usará rotinas especiais para calcular determinantes esparsos.
1399 @deffn {Função} submatrix (@var{i_1}, ..., @var{i_m}, @var{M}, @var{j_1}, ..., @var{j_n})
1400 @deffnx {Função} submatrix (@var{i_1}, ..., @var{i_m}, @var{M})
1401 @deffnx {Função} submatrix (@var{M}, @var{j_1}, ..., @var{j_n})
1402 Retorna uma nova matriz formada pela
1403 matrix @var{M} com linhas @var{i_1}, ..., @var{i_m} excluídas, e colunas @var{j_1}, ..., @var{j_n} excluídas.
1407 @deffn {Função} transpose (@var{M})
1408 Retorna a transposta de @var{M}.
1410 Se @var{M} é uma matriz, o valor de retorno é outra matriz @var{N}
1411 tal que @code{N[i,j] = M[j,i]}.
1413 Se @var{M} for uma lista, o valor de retorno é uma matrix @var{N}
1414 de @code{length (m)} linhas e 1 coluna, tal que @code{N[i,1] = M[i]}.
1416 De outra forma @var{M} é um símbolo,
1417 e o valor de retorno é uma expressão substantiva @code{'transpose (@var{M})}.
1421 @deffn {Função} triangularize (@var{M})
1422 Retorna a maior forma triangular da matriz @code{M}, como produzido através da eliminação de Gauss.
1423 O valor de retorno é o mesmo que @code{echelon},
1424 excepto que o o coeficiente lider não nulo em cada linha não é normalizado para 1.
1426 @code{lu_factor} e @code{cholesky} são outras funções que retornam matrizes triangularizadas.
1429 @c M: matrix ([3, 7, aa, bb], [-1, 8, 5, 2], [9, 2, 11, 4]);
1430 @c triangularize (M);
1433 (%i1) M: matrix ([3, 7, aa, bb], [-1, 8, 5, 2], [9, 2, 11, 4]);
1439 (%i2) triangularize (M);
1442 (%o2) [ 0 - 74 - 56 - 22 ]
1444 [ 0 0 626 - 74 aa 238 - 74 bb ]
1449 @deffn {Função} uniteigenvectors (@var{M})
1450 @deffnx {Função} ueivects (@var{M})
1451 Calcula autovectores unitários da matriz @var{M}.
1452 O valor de retorno é uma lista de listas, a primeiro sublista é a
1453 saída do comando @code{eigenvalues}, e as outras sublistas são
1454 os autovectores unitários da matriz correspondente a esses autovalores
1457 @c COPY DESCRIPTIONS OF THOSE FLAGS HERE
1458 Os sinalizadores mencionados na descrição do
1459 comando @code{eigenvectors} possuem o mesmo efeito aqui também.
1461 Quando @code{knowneigvects} é @code{true}, o pacote @code{eigen} assume
1462 que os autovectores da matriz são conhecidos para o utilizador são
1463 armazenados sob o nome global @code{listeigvects}. @code{listeigvects} pode ser ecolhido
1464 para uma lista similar à saída do comando @code{eigenvectors}.
1466 @c FOLLOWING PARAGRAPH IS IN NEED OF SERIOUS CLARIFICATION
1467 Se @code{knowneigvects} é escolhido para @code{true} e a lista de autovectores é dada a
1468 escolha do sinalizador @code{nondiagonalizable} pode não estar correcta. Se esse é
1469 o caso por favor ecolha isso para o valor correcto. O autor assume que
1470 o utilizador sabe o que está fazendo e que não tentará diagonalizar uma
1471 matriz cujos autovectores não geram o mesmo espaço vectorial de
1472 dimensão apropriada.
1474 @code{load ("eigen")} chama essa função.
1476 @code{ueivects} é um sin@^onimo para @code{uniteigenvectors}.
1480 @deffn {Função} unitvector (@var{x})
1481 @deffnx {Função} uvect (@var{x})
1482 Retorna @math{@var{x}/norm(@var{x})};
1483 isso é um vector unitário na mesma direção que @var{x}.
1485 @code{load ("eigen")} chama essa função.
1487 @code{uvect} é um sin@^onimo para @code{unitvector}.
1491 @c NEEDS A LOT OF WORK: MAKE SURE THAT ALL VECTOR SIMPLIFICATION FLAGS HAVE A DESCRIPTION HERE
1492 @deffn {Função} vectorsimp (@var{expr})
1493 Aplica simplificações e expansões conforme
1494 os seguintes sinalizadores globais:
1496 @code{expandall}, @code{expanddot}, @code{expanddotplus}, @code{expandcross}, @code{expandcrossplus},
1497 @code{expandcrosscross}, @code{expandgrad}, @code{expandgradplus}, @code{expandgradprod},
1498 @code{expanddiv}, @code{expanddivplus}, @code{expanddivprod}, @code{expandcurl}, @code{expandcurlplus},
1499 @code{expandcurlcurl}, @code{expandlaplacian}, @code{expandlaplacianplus},
1500 e @code{expandlaplacianprod}.
1502 Todos esses sinalizadores possuem valor padrão @code{false}. O sufixo @code{plus} refere-se a
1503 utilização aditivamente ou distribuitivamente. O sufixo @code{prod} refere-se a
1504 expansão para um operando que é qualquer tipo de produto.
1507 @item expandcrosscross
1508 Simplifica @math{p ~ (q ~ r)} para @math{(p . r)*q - (p . q)*r}.
1509 @item expandcurlcurl
1510 Simplifica @math{curl curl p} para @math{grad div p + div grad p}.
1511 @item expandlaplaciantodivgrad
1512 Simplifica @math{laplacian p} para @math{div grad p}.
1514 Habilita @code{expandcrossplus} e @code{expandcrosscross}.
1516 Habilita @code{expanddotplus}, @code{expandcrossplus}, @code{expandgradplus},
1517 @code{expanddivplus}, @code{expandcurlplus}, e @code{expandlaplacianplus}.
1519 Habilita @code{expandgradprod}, @code{expanddivprod}, e @code{expandlaplacianprod}.
1522 @c EXPLAIN THE IMPORT OF THIS STATEMENT
1523 Esses sinalizadores foram todos declarados @code{evflag}.
1525 @c SEEMS SOME TEXT HAS GONE MISSING HERE; COMMENT OUT FRAGMENT PENDING
1526 @c RECOVERY AND/OR RECONSTRUCTION OF THIS PARAGRAPH
1527 @c For orthogonal curvilinear coordinates, the global variables
1528 @c COORDINATES[[X,Y,Z]], DIMENSION[3], SF[[1,1,1]], and SFPROD[1] são set
1529 @c by the function invocation
1533 @defvr {Variável de opção} vect_cross
1534 Valor por omissão: @code{false}
1536 @c WHAT DOES THIS MEAN EXACTLY ??
1537 Quando @code{vect_cross} é @code{true}, isso permite DIFF(X~Y,T) trabalhar onde
1538 ~ é definido em SHARE;VECT (onde VECT_CROSS é escolhido para @code{true}, de qualqeur modo.)
1542 @deffn {Função} zeromatrix (@var{m}, @var{n})
1543 Retorna um matriz @var{m} por @var{n}, com todos os elementos sendo zero.
1547 @defvr {Símbolo especial} [
1548 @defvrx {Símbolo especial} ]
1550 @fnindex Delimitador de Lista
1551 @fnindex Operador de Subscrito
1553 @code{[} e @code{]} marcam o omeço e o fim, respectivamente, de uma lista.
1555 @code{[} e @code{]} também envolvem os subscritos de
1556 uma lista, array, array desordenado, ou função array.
1565 (%i3) array (y, fixnum, 3);
1571 (%i6) z['foo]: 'bar;
1575 (%i8) g[k] := 1/(k^2+1);