1 @c English version 2011-09-03
3 * Introducción a las matrices y el álgebra lineal::
4 * Funciones y variables para las matrices y el álgebra lineal::
7 @node Introducción a las matrices y el álgebra lineal, Funciones y variables para las matrices y el álgebra lineal, Matrices y Álgebra Lineal, Matrices y Álgebra Lineal
8 @section Introducción a las matrices y el álgebra lineal
16 @node Operador punto, Vectores, Introducción a las matrices y el álgebra lineal, Introducción a las matrices y el álgebra lineal
17 @subsection Operador punto
18 El operador @code{.} realiza la multiplicación matricial y el producto escalar.
19 Cuando los operandos son dos matrices columna o matrices fila @code{a} y @code{b},
20 la expresión @code{a.b} es equivalente a @code{sum (a[i]*b[i], i, 1, length(a))}.
21 Si @code{a} y @code{b} no son complejos, estamos en el caso del producto escalar.
22 En caso de ser @code{a} y @code{b} vectores en el campo complejo, el producto
23 escalar se define como @code{conjugate(a).b}; la función @code{innerproduct} del
24 paquete @code{eigen} realiza el producto escalar complejo.
26 Cuando los operandos son matrices de índole más general,
27 el resultado que se obtiene es el producto matricial de @code{a} por @code{b}.
28 El número de filas de @code{b} debe ser igual al número de columnas de @code{a},
29 y el resultado tiene un número de filas igual al de @code{a} y un número de
30 columnas igual al de @code{b}.
32 Al objeto de distinguir @code{.} como operador aritmético del punto decimal
33 de la notación en coma flotante, puede ser necesario dejar espacios a ambos lados.
34 Por ejemplo, @code{5.e3} es @code{5000.0} pero @code{5 . e3} es @code{5} por @code{e3}.
36 Hay algunas variables globales que controlan la simplificación de expresiones que
37 contengan al operador @code{.}, a saber,
38 @code{dot}, @code{dot0nscsimp}, @code{dot0simp}, @code{dot1simp}, @code{dotassoc},
39 @code{dotconstrules}, @code{dotdistrib}, @code{dotexptsimp}, @code{dotident},
42 @node Vectores, Paquete eigen, Operador punto, Introducción a las matrices y el álgebra lineal
44 El paquete @code{vect} define funciones para análisis vectorial. Para cargar el paquete en memoria se debe hacer
45 @code{load ("vect")} y con @code{demo ("vect")} se presenta una demostración sobre las funciones del paquete.
46 @c find maxima -name \*orth\* YIELDS NOTHING; ARE THESE FUNCTIONS IN ANOTHER FILE NOW ??
47 @c and SHARE;VECT ORTH contains definitions of various orthogonal curvilinear coordinate systems.
49 El paquete de análisis vectorial puede combinar y simplificar expresiones
50 simbólicas que incluyan productos escalares y vectoriales, junto con los operadores
51 de gradiente, divergencia, rotacional y laplaciano. La distribución de estos operadores
52 sobre sumas o productos se gobierna por ciertas variables, al igual que otras transformaciones,
53 incluida la expansión en componentes en cualquier sistema de coordenadas especificado.
54 También hay funciones para obtener el potencial escalar o vectorial de un campo.
56 El paquete @code{vect} contiene las siguientes funciones:
57 @code{vectorsimp}, @code{scalefactors},
58 @code{express}, @code{potential} y @code{vectorpotential}.
59 @c REVIEW vect.usg TO ENSURE THAT TEXINFO HAS WHATEVER IS THERE
60 @c PRINTFILE(VECT,USAGE,SHARE); for details.
62 Por defecto, el paquete @code{vect} no declara el operador @code{.} como conmutativo.
63 Para transformarlo en conmutativo, se debe ejecutar previamente la instrucción
64 @code{declare(".", commutative)}.
66 @node Paquete eigen, , Vectores, Introducción a las matrices y el álgebra lineal
67 @subsection Paquete eigen
69 El paquete @code{eigen} contiene funciones para el cálculo
70 simbólico de valores y vectores propios. Maxima carga el paquete
71 automáticamente si se hace una llamada a cualquiera de las dos funciones
72 @code{eigenvalues} o @code{eigenvectors}. El paquete se puede cargar de
73 forma explícita mediante @code{load ("eigen")}.
75 La instrucción @code{demo ("eigen")} hace una demostración de las funciones de este paquete;
76 @code{batch ("eigen")} realiza la misma demostración pero sin pausas entre los
79 Las funciones del paquete @code{eigen} son
80 @code{innerproduct}, @code{unitvector}, @code{columnvector},
81 @code{gramschmidt}, @code{eigenvalues}, @code{eigenvectors}, @code{uniteigenvectors}
82 y @code{similaritytransform}.
84 @c end concepts Matrices and Linear Algebra
85 @node Funciones y variables para las matrices y el álgebra lineal, , Introducción a las matrices y el álgebra lineal, Matrices y Álgebra Lineal
86 @section Funciones y variables para las matrices y el álgebra lineal
88 @deffn {Función} addcol (@var{M}, @var{lista_1}, ..., @var{lista_n})
89 Añade la/s columna/s dada/s por la/s lista/s (o matrices) a la matriz @var{M}.
93 @deffn {Función} addrow (@var{M}, @var{lista_1}, ..., @var{lista_n})
94 Añade la/s fila/s dada/s por la/s lista/s (o matrices) a la matriz @var{M}.
98 @deffn {Función} adjoint (@var{M})
99 Devuelve el adjunto de la matriz @var{M}.
100 La matriz adjunta es la transpuesta de la matriz de cofactores de @var{M}.
104 @deffn {Función} augcoefmatrix ([@var{eqn_1}, ..., @var{eqn_m}], [@var{x_1}, ..., @var{x_n}])
105 Devuelve la matriz aumentada de coeficientes del sistema de ecuaciones lineales
106 @var{eqn_1}, ..., @var{eqn_m} de variables @var{x_1}, ..., @var{x_n}. Se trata de la
107 matriz de coeficientes con una columna adicional para los términos constantes de cada
108 ecuación, es decir, aquellos términos que no dependen de las variables
109 @var{x_1}, ..., @var{x_n}.
112 (%i1) m: [2*x - (a - 1)*y = 5*b, c + b*y + a*x = 0]$
113 (%i2) augcoefmatrix (m, [x, y]);
123 @deffn {Función} cauchy_matrix ([@var{x_1},@var{x_2}, ..., @var{x_m}], [@var{y_1},@var{y_2}, ..., @var{y_n}])
124 @deffnx {Función} cauchy_matrix ([@var{x_1},@var{x_2}, ..., @var{x_n}])
126 Devuelve una matriz de Cauchy @var{n} by @var{m} de elementos
127 @var{a[i,j]} = 1/(@var{x_i}+@var{y_i}).
128 El segundo elemento de @code{cauchy_matrix} es opcional, y en caso
129 de no estar presente, los elementos serán de la forma
130 @var{a[i,j]} = 1/(@var{x_i}+@var{x_j}).
132 Observación: en la literatura, la matriz de Cauchy se define a veces
133 con sus elementos de la forma @var{a[i,j]} = 1/(@var{x_i}-@var{y_i}).
138 @c cauchy_matrix([x1,x2],[y1,y2]);
139 @c cauchy_matrix([x1,x2]);
142 (%i1) cauchy_matrix([x1,x2],[y1,y2]);
151 (%i2) cauchy_matrix([x1,x2]);
164 @deffn {Función} charpoly (@var{M}, @var{x})
165 Calcula el polinomio característico de la matriz @var{M}
166 respecto de la variable @var{x}. Esto es,
167 @code{determinant (@var{M} - diagmatrix (length (@var{M}), @var{x}))}.
170 (%i1) a: matrix ([3, 1], [2, 4]);
174 (%i2) expand (charpoly (a, lambda));
176 (%o2) lambda - 7 lambda + 10
177 (%i3) (programmode: true, solve (%));
178 (%o3) [lambda = 5, lambda = 2]
179 (%i4) matrix ([x1], [x2]);
183 (%i5) ev (a . % - lambda*%, %th(2)[1]);
189 (%i7) x2^2 + x1^2 = 1;
192 (%i8) solve ([%th(2), %], [x1, x2]);
194 (%o8) [[x1 = - -------, x2 = - -------],
198 [x1 = -------, x2 = -------]]
204 @deffn {Función} coefmatrix ([@var{eqn_1}, ..., @var{eqn_m}], [@var{x_1}, ..., @var{x_n}])
205 Devuelve la matriz de coeficientes para las variables @var{x_1}, ..., @var{x_n}
206 del sistema de ecuaciones lineales @var{eqn_1}, ..., @var{eqn_m}.
209 (%i1) coefmatrix([2*x-(a-1)*y+5*b = 0, b*y+a*x = 3], [x,y]);
217 @deffn {Función} col (@var{M}, @var{i})
218 Devuelve la @var{i}-ésima columna de la matriz @var{M}.
219 El resultado es una matriz de una sola columna.
224 @deffn {Función} columnvector (@var{L})
225 @deffnx {Función} covect (@var{L})
226 Devuelve una matriz con una columna y @code{length (@var{L})} filas,
227 conteniendo los elementos de la lista @var{L}.
229 La llamada @code{covect} es un sinónimo de @code{columnvector}.
231 Es necesario cargar la función haciendo @code{load ("eigen")}.
236 @c HMM, SPURIOUS "redefining the Macsyma function".
237 @c LEAVE IT HERE SINCE THAT'S WHAT A USER ACTUALLY SEES.
239 (%i1) load ("eigen")$
240 Warning - you are redefining the Macsyma function eigenvalues
241 Warning - you are redefining the Macsyma function eigenvectors
242 (%i2) columnvector ([aa, bb, cc, dd]);
255 @deffn {Función} copymatrix (@var{M})
256 Devuelve una copia de la matriz @var{M}. Esta es la única
257 manera de obtener una réplica de @var{M} además de la de
258 copiar elemento a elemento.
260 Nótese que una asignación de una matriz a otra, como en @code{m2: m1},
261 no hace una copia de @code{m1}. Asignaciones del tipo @code{m2 [i,j]: x} o
262 @code{setelmx (x, i, j, m2} también modifica @code{m1 [i,j]}. Si se crea una copia
263 con @code{copymatrix} y luego se hacen asignaciones se tendrá una copia separada y
269 @deffn {Función} determinant (@var{M})
270 Calcula el determinante de @var{M} por un método similar al
271 de eliminación de Gauss
273 @c JUST HOW DOES ratmx AFFECT THE RESULT ??
274 La forma del resultado depende del valor asignado
277 @c IS A SPARSE DETERMINANT SOMETHING OTHER THAN THE DETERMINANT OF A SPARSE MATRIX ??
278 Existe una rutina especial para calcular determinantes de matrices con elementos dispersas, la cual
279 será invocada cuando las variables @code{ratmx} y @code{sparse} valgan ambas
282 @c EXAMPLES NEEDED HERE
285 @defvr {Variable opcional} detout
286 Valor por defecto: @code{false}
288 Cuando @code{detout} vale @code{true}, el determinante de la matriz
289 cuya inversa se calcula aparece como un factor fuera de la matriz.
291 Para que esta variable surta efecto, @code{doallmxops} y @code{doscmxops} deberían tener
292 el valor @code{false} (véanse sus descripciones). Alternativamente, esta
293 variable puede ser suministrada a @code{ev}.
298 (%i1) m: matrix ([a, b], [c, d]);
303 (%i3) doallmxops: false$
304 (%i4) doscmxops: false$
312 @c THERE'S MORE TO THIS STORY: detout: false$ invert (m); RETURNS THE SAME THING.
313 @c IT APPEARS THAT doallmxops IS CRUCIAL HERE.
317 @deffn {Función} diagmatrix (@var{n}, @var{x})
318 Devuelve una matriz diagonal de orden @var{n}
319 con los elementos de la diagonal todos ellos iguales a @var{x}. La llamada
320 @code{diagmatrix (@var{n}, 1)} devuelve una matriz identidad
321 (igual que @code{ident (@var{n})}).
323 La variable @var{n} debe ser un número entero, en caso contrario @code{diagmatrix} envía un mensaje de error.
325 @var{x} puede ser cualquier tipo de expresión, incluso otra matriz.
326 Si @var{x} es una matriz, no se copia; todos los elementos de la diagonal son iguales a @var{x}.
331 @defvr {Variable opcional} doallmxops
332 Valor por defecto: @code{true}
334 Cuando @code{doallmxops} vale @code{true},
335 todas las operaciones relacionadas con matrices son
336 llevadas a cabo. Cuando es @code{false}, entonces las
337 selecciones para @code{dot} controlan las operaciones a ejecutar.
339 @c NEED EXAMPLES HERE
342 @defvr {Variable opcional} domxexpt
343 Valor por defecto: @code{true}
345 Cuando @code{domxexpt} vale @code{true},
346 un exponente matricial, como @code{exp (@var{M})} donde @var{M} es
347 una matriz, se interpreta como una matriz cuyo elemento @code{[i,j} es
348 igual a @code{exp (m[i,j])}. En otro caso, @code{exp (@var{M})} se
349 evalúa como @code{exp (ev(@var{M}))}.
351 La variable @code{domxexpt} afecta a todas las expresiones de la forma @code{@var{base}^@var{exponente}}
352 donde @var{base} es una expresión escalar o constante y @var{exponente} es una
358 (%i1) m: matrix ([1, %i], [a+b, %pi]);
362 (%i2) domxexpt: false$
368 (%i4) domxexpt: true$
379 @defvr {Variable opcional} domxmxops
380 Valor por defecto: @code{true}
382 Cuando @code{domxmxops} vale @code{true}, se realizan todas las operaciones entre
383 matrices o entre matrices y listas (pero no las operaciones
384 entre matrices y escalares); si esta variable es @code{false} tales
385 operaciones no se realizan.
386 @c IS THIS AN EVALUATION OR A SIMPLIFICATION FLAG ??
391 @defvr {Variable opcional} domxnctimes
392 Valor por defecto: @code{false}
394 Cuando @code{domxnctimes} vale @code{true}, se calculan los productos
395 no conmutativos entre matrices.
396 @c IS THIS AN EVALUATION OR A SIMPLIFICATION FLAG ??
401 @defvr {Variable opcional} dontfactor
402 Valor por defecto: @code{[]}
404 En @code{dontfactor} puede guardarse una lista de variables respecto de
405 las cuales no se realizarán factorizaciones. Inicialmente, la lista
410 @defvr {Variable opcional} doscmxops
411 Valor por defecto: @code{false}
413 Cuando @code{doscmxops} vale @code{true}, se realizan las operaciones entre escalares y
415 @c IS THIS AN EVALUATION OR A SIMPLIFICATION FLAG ??
420 @defvr {Variable opcional} doscmxplus
421 Valor por defecto: @code{false}
423 Cuando @code{doscmxplus} vale @code{true}, las operaciones entre
424 escalares y matrices dan como resultado una matriz.
425 @c IS THIS AN EVALUATION OR A SIMPLIFICATION FLAG ??
430 @defvr {Variable opcional} dot0nscsimp
431 Valor por defecto: @code{true}
433 @c WHAT DOES THIS MEAN EXACTLY ??
434 (Esta descripción no está clara en la versión inglesa original.)
440 @c AQUI FALTA DEFINICION DE dot0simp
442 @c AQUI FALTA DEFINICION DE dot1simp
444 @defvr {Variable opcional} dotassoc
445 Valor por defecto: @code{true}
447 Cuando @code{dotassoc} vale @code{true}, una expresión como @code{(A.B).C} se transforma en
449 @c "." MEANS NONCOMMUTATIVE MULTIPLICATION RIGHT ??
454 @defvr {Variable opcional} dotconstrules
455 Valor por defecto: @code{true}
457 Cuando @code{dotconstrules} vale @code{true}, un producto no conmutativo de una
458 constante con otro término se transforma en un producto conmutativo.
463 @defvr {Variable opcional} dotdistrib
464 Valor por defecto: @code{false}
466 Cuando @code{dotdistrib} vale @code{true}, una expresión como @code{A.(B + C)} se transforma en @code{A.B + A.C}.
471 @defvr {Variable opcional} dotexptsimp
472 Valor por defecto: @code{true}
474 Cuando @code{dotexptsimp} vale @code{true}, una expresión como @code{A.A} se transforma en @code{A^^2}.
479 @defvr {Variable opcional} dotident
482 El valor de la variable @code{dotident} es el resultado devuelto por @code{X^^0}.
483 @c "RETURNED" ?? IS THIS A SIMPLIFICATION OR AN EVALUATION ??
488 @defvr {Variable opcional} dotscrules
489 Valor por defecto: @code{false}
491 Cuando @code{dotscrules} vale @code{true}, una expresión como @code{A.SC} o @code{SC.A} se transforma
492 en @code{SC*A} y @code{A.(SC*B)} en @code{SC*(A.B)}.
493 @c HMM, DOES "SC" MEAN "SCALAR" HERE ?? CLARIFY
498 @deffn {Función} echelon (@var{M})
499 Devuelve la forma escalonada de la matriz @var{M}, obtenida por eliminación gaussiana.
500 La forma escalonada se calcula a partir de @var{M} mediante operaciones elementales con sus filas,
501 de tal manera que el primer elemento no nulo de cada fila en la matriz
502 resultado es la unidad y que cada elemento de la columna por debajo del primer uno de cada
503 fila sean todos ceros.
505 La función @code{triangularize} también lleva a cabo la eliminación gaussiana, pero no
506 normaliza el primer elemento no nulo de cada fila.
508 Otras funciones, como @code{lu_factor} y @code{cholesky}, también dan como resultados
509 matrices triangularizadas.
512 @c M: matrix ([3, 7, aa, bb], [-1, 8, 5, 2], [9, 2, 11, 4]);
516 (%i1) M: matrix ([3, 7, aa, bb], [-1, 8, 5, 2], [9, 2, 11, 4]);
530 [ 0 0 1 ----------- ]
536 @deffn {Función} eigenvalues (@var{M})
537 @deffnx {Función} eivals (@var{M})
538 @c eigen.mac IS AUTOLOADED IF eigenvalues OR eigenvectors IS REFERENCED; EXTEND THAT TO ALL FUNCTIONS ??
539 @c EACH FUNCTION INTENDED FOR EXTERNAL USE SHOULD HAVE ITS OWN DOCUMENTATION ITEM
540 Devuelve una lista con dos sublistas. La primera sublista la forman los
541 valores propios de la matriz @var{M} y la segunda sus multiplicidades correspondientes.
543 El nombre @code{eivals} es un sinónimo de @code{eigenvalues}.
545 La función @code{eigenvalues} llama a la función @code{solve} para calcular las raíces
546 del polinomio característico de la matriz. En ocasiones, @code{solve} no
547 podrá encontrar dichas raíces, en cuyo caso otras funciones de este paquete
548 no trabajarán correctamente, a excepción de @code{innerproduct},
549 @code{unitvector}, @code{columnvector} y @code{gramschmidt}.
550 @c WHICH ONES ARE THE FUNCTIONS WHICH DON'T WORK ??
551 @c ACTUALLY IT'S MORE IMPORTANT TO LIST THE ONES WHICH DON'T WORK HERE
552 @c WHAT DOES "will not work" MEAN, ANYWAY ??
554 En algunos casos los valores propios encontrados por @code{solve} serán
555 expresiones complicadas, las cuales se podrán simplificar haciendo uso
557 @c WHAT ARE THOSE OTHER FUNCTIONS ??
559 El paquete @code{eigen.mac} se carga en memoria de forma automática cuando
560 se invocan @code{eigenvalues} o @code{eigenvectors}. Si @code{eigen.mac} no
561 está ya cargado, @code{load ("eigen")} lo carga. Tras la carga, todas las
562 funciones y variables del paquete estarán activas.
563 @c REFER TO OVERVIEW OF PACKAGE (INCLUDING LIST OF FUNCTIONS) HERE
565 @c NEED EXAMPLES HERE
568 @deffn {Función} eigenvectors (@var{M})
569 @deffnx {Función} eivects (@var{M})
571 Calcula los vectores propios de la matriz @var{M}.
572 El resultado devuelto es una lista con dos elementos;
573 el primero está formado por dos listas, la primera con los valores propios
574 de @var{M} y la segunda con sus respectivas multiplicidades, el segundo
575 elemento es una lista de listas de vectores propios, una por
576 cada valor propio, pudiendo haber uno o más vectores propios en cada lista.
578 Tomando la matriz @var{M} como argumento, devuelve una lista de listas,
579 la primera de las cuales es la salida de @code{eigenvalues} y las
580 siguientes son los vectorios propios de la matriz asociados a los
581 valores propios correspondientes. Los vectores propios calculados son los
582 vectores propios por la derecha.
584 El nombre @code{eivects} es un sinónimo de @code{eigenvectors}.
586 El paquete @code{eigen.mac} se carga en memoria de forma automática cuando
587 se invocan @code{eigenvalues} o @code{eigenvectors}. Si @code{eigen.mac} no
588 está ya cargado, @code{load ("eigen")} lo carga. Tras la carga, todas las
589 funciones y variables del paquete estarán activas.
591 Las variables que afectan a esta función son:
593 @code{nondiagonalizable} toma el valor @code{true} o @code{false} dependiendo
594 de si la matriz no es diagonalizable o diagonalizable tras la ejecución de
597 @code{hermitianmatrix}, si vale @code{true}, entonces los vectores propios
598 degenerados de la matriz hermítica son ortogonalizados mediante el
599 algoritmo de Gram-Schmidt.
601 @code{knowneigvals}, si vale @code{true}, entonces el paquete @code{eigen} da por
602 sentado que los valores propios de la matriz son conocidos por el usuario y
603 almacenados en la variable global @code{listeigvals}. @code{listeigvals} debería
604 ser similar a la salida de @code{eigenvalues}.
606 La función @code{algsys} se utiliza aquí para calcular los vectores propios. A
607 veces, @code{algsys} no podrá calcular una solución. En algunos casos, será posible
608 simplificar los valores propios calculándolos en primer lugar con @code{eigenvalues} y
609 luego utilizando otras funciones para simplificarlos. Tras la simplificación,
610 @code{eigenvectors} podrá ser llamada otra vez con la variable @code{knowneigvals}
611 ajustada al valor @code{true}.
613 Véase también @code{eigenvalues}.
617 Una matriz con un único vector propio por cada valor propio.
620 @c M1 : matrix ([11, -1], [1, 7]);
621 @c [vals, vecs] : eigenvectors (M1);
622 @c for i thru length (vals[1]) do disp (val[i] = vals[1][i],
623 @c mult[i] = vals[2][i], vec[i] = vecs[i]);
626 (%i1) M1 : matrix ([11, -1], [1, 7]);
630 (%i2) [vals, vecs] : eigenvectors (M1);
631 (%o2) [[[9 - sqrt(3), sqrt(3) + 9], [1, 1]],
632 [[[1, sqrt(3) + 2]], [[1, 2 - sqrt(3)]]]]
633 (%i3) for i thru length (vals[1]) do disp (val[i] = vals[1][i],
634 mult[i] = vals[2][i], vec[i] = vecs[i]);
641 vec = [[1, sqrt(3) + 2]]
650 vec = [[1, 2 - sqrt(3)]]
656 Una matriz con dos vectores propios para uno de los valores propios.
659 @c M1 : matrix ([0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 2, 0], [0, 0, 0, 2]);
660 @c [vals, vecs] : eigenvectors (M1);
661 @c for i thru length (vals[1]) do disp (val[i] = vals[1][i],
662 @c mult[i] = vals[2][i], vec[i] = vecs[i]);
665 (%i1) M1 : matrix ([0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 2, 0], [0, 0, 0, 2]);
673 (%i2) [vals, vecs] : eigenvectors (M1);
674 (%o2) [[[0, 2], [2, 2]], [[[1, 0, 0, 0]],
675 [[0, 0, 1, 0], [0, 0, 0, 1]]]]
676 (%i3) for i thru length (vals[1]) do disp (val[i] = vals[1][i],
677 mult[i] = vals[2][i], vec[i] = vecs[i]);
693 vec = [[0, 0, 1, 0], [0, 0, 0, 1]]
703 @deffn {Función} ematrix (@var{m}, @var{n}, @var{x}, @var{i}, @var{j})
704 Devuelve una matriz de orden @var{m} por @var{n}, con todos sus elementos
705 nulos, excepto el que ocupa la posición @code{[@var{i}, @var{j}]}, que
710 @deffn {Función} entermatrix (@var{m}, @var{n})
711 Devuelve una matriz de orden @var{m} por @var{n}, cuyos elementos
712 son leidos de forma interactiva.
714 Si @var{n} es igual a @var{m}, Maxima pregunta por el tipo de
715 matriz (diagonal, simétrica, antisimétrica o general) y luego por
716 cada elemento. Cada respuesta introducida por el usuario debe terminar
717 con un punto y coma @code{;} o con un signo de dólar @code{$}.
719 Si @var{n} y @var{m} no son iguales, Maxima pregunta
720 por el valor de cada elemento.
722 Los elementos de la matriz pueden ser cualquier tipo de
723 expresión, que en todo caso será evaluada.
724 @code{entermatrix} evalúa sus argumentos.
728 (%i2) m: entermatrix (n, n)$
730 Is the matrix 1. Diagonal 2. Symmetric 3. Antisymmetric
732 Answer 1, 2, 3 or 4 :
756 @deffn {Función} genmatrix (@var{a}, @var{i_2}, @var{j_2}, @var{i_1}, @var{j_1})
757 @deffnx {Función} genmatrix (@var{a}, @var{i_2}, @var{j_2}, @var{i_1})
758 @deffnx {Función} genmatrix (@var{a}, @var{i_2}, @var{j_2})
759 Devuelve una matriz generada a partir de @var{a}, siendo @code{@var{a}[@var{i_1},@var{j_1}]} el elemento superior izquierdo y @code{@var{a}[@var{i_2},@var{j_2}]} el inferior derecho de la matriz.
760 Aquí @var{a} se declara como una arreglo (creado por @code{array},
761 pero no por @code{make_array}), o un array no declarado, o una función array, o una
762 expresión lambda de dos argumentos.
763 (An array function is created like other functions with @code{:=} or @code{define},
764 but arguments are enclosed in square brackets instead of parentheses.)
766 Si se omite @var{j_1}, entonces se le asigna el valor @var{i_1}. Si tanto @var{j_1} como @var{i_1} se omiten, a las dos variables se le asigna el valor 1.
768 Si un elemento @code{i,j} del arreglo no está definido, se le asignará el elemento simbólico @code{@var{a}[i,j]}.
771 @c h [i, j] := 1 / (i + j - 1);
772 @c genmatrix (h, 3, 3);
773 @c array (a, fixnum, 2, 2);
776 @c genmatrix (a, 2, 2);
777 @c genmatrix (lambda ([i, j], j - i), 3, 3);
778 @c genmatrix (B, 2, 2);
781 (%i1) h [i, j] := 1 / (i + j - 1);
785 (%i2) genmatrix (h, 3, 3);
797 (%i3) array (a, fixnum, 2, 2);
801 (%i5) a [2, 2] : %pi;
803 (%i6) genmatrix (a, 2, 2);
807 (%i7) genmatrix (lambda ([i, j], j - i), 3, 3);
813 (%i8) genmatrix (B, 2, 2);
823 @deffn {Función} gramschmidt (@var{x})
824 @deffnx {Función} gramschmidt (@var{x}, @var{F})
826 Ejecuta el algoritmo de ortogonalización de Gram-Schmidt sobre @var{x},
827 que puede ser una matriz o una lista de listas. La función
828 @code{gramschmidt} no altera el valor de @var{x}.
829 El producto interno por defecto empleado en @code{gramschmidt} es
830 @code{innerproduct}, o @var{F}, si se ha hecho uso de esta opción.
832 Si @var{x} es una matriz, el algoritmo se aplica a las filas de @var{x}. Si
833 @var{x} es una lista de listas, el algoritmo se aplica a las sublistas,
834 las cuales deben tener el mismo número de miembros. En cualquier caso,
835 el valor devuelto es una lista de listas, cuyas sublistas son ortogonales.
836 @c Falta completar este p'arrafo
838 La función @code{factor} es invocada en cada paso del algoritmo para
839 simplificar resultados intermedios. Como consecuencia, el valor retornado
840 puede contener enteros factorizados.
842 El nombre @code{gschmit} es sinónimo de @code{gramschmidt}.
844 Es necesario cargar la función haciendo @code{load ("eigen")}.
848 Algoritmo de Gram-Schmidt utilizando el producto interno por defecto.
852 @c x: matrix ([1, 2, 3], [9, 18, 30], [12, 48, 60]);
853 @c y: gramschmidt (x);
854 @c map (innerproduct, [y[1], y[2], y[3]], [y[2], y[3], y[1]]);
857 (%i1) load ("eigen")$
858 (%i2) x: matrix ([1, 2, 3], [9, 18, 30], [12, 48, 60]);
864 (%i3) y: gramschmidt (x);
867 (%o3) [[1, 2, 3], [- ---, - --, ---], [- ----, ----, 0]]
869 (%i4) map (innerproduct, [y[1], y[2], y[3]], [y[2], y[3], y[1]]);
873 Algoritmo de Gram-Schmidt utilizando un producto interno especificado
878 @c ip (f, g) := integrate (f * g, u, a, b);
879 @c y : gramschmidt ([1, sin(u), cos(u)], ip), a= -%pi/2, b=%pi/2;
880 @c map (ip, [y[1], y[2], y[3]], [y[2], y[3], y[1]]), a= -%pi/2, b=%pi/2;
883 (%i1) load ("eigen")$
884 (%i2) ip (f, g) := integrate (f * g, u, a, b);
885 (%o2) ip(f, g) := integrate(f g, u, a, b)
886 (%i3) y : gramschmidt ([1, sin(u), cos(u)], ip), a= -%pi/2, b=%pi/2;
888 (%o3) [1, sin(u), --------------]
890 (%i4) map (ip, [y[1], y[2], y[3]], [y[2], y[3], y[1]]), a= -%pi/2, b=%pi/2;
897 @deffn {Función} ident (@var{n})
898 Devuelve la matriz identidad de orden @var{n}.
902 @deffn {Función} innerproduct (@var{x}, @var{y})
903 @deffnx {Función} inprod (@var{x}, @var{y})
904 Devuelve el producto interior o escalar de @var{x} por @var{y}, que deben ser listas de igual longitud, o ambas matrices columa o fila de igual longitud. El valor devuelto es @code{conjugate (x) . y}, donde @code{.} es el operador de multiplicación no conmutativa.
906 Es necesario cargar la función haciendo @code{load ("eigen")}.
908 El nombre @code{inprod} es sinónimo de @code{innerproduct}.
913 @c THIS DESCRIPTION NEEDS WORK
914 @deffn {Función} invert (@var{M})
915 Devuelve la inversa de la matriz @var{M}, calculada por el método del adjunto.
917 La implementación actual no es eficiente para matrices de orden grande.
919 Cuando @code{detout} vale @code{true}, el determinante se deja
920 fuera de la inversa a modo de factor escalar.
922 Los elementos de la matriz inversa no se expanden. Si @var{M} tiene elementos
923 polinómicos, se puede mejorar el aspecto del resultado haciendo
924 @code{expand (invert (m)), detout}.
926 Véase la descripción de @code{^^} (exponente no conmutativo) para
927 información sobre otro método para invertir matrices.
932 @deffn {Función} list_matrix_entries (@var{M})
933 Devuelve una lista con todos los elementos de la matriz @var{M}.
938 @c list_matrix_entries(matrix([a,b],[c,d]));
941 (%i1) list_matrix_entries(matrix([a,b],[c,d]));
948 @defvr {Variable opcional} lmxchar
949 Valor por defecto: @code{[}
951 La variable @code{lmxchar} guarda el carácter a mostrar como delimitador izquierdo de la matriz.
952 Véase también @code{rmxchar}.
958 (%i2) matrix ([a, b, c], [d, e, f], [g, h, i]);
968 @deffn {Función} matrix (@var{fila_1}, ..., @var{fila_n})
969 Devuelve una matriz rectangular con las filas @var{fila_1}, ..., @var{fila_n}. Cada fila es una lista de expresiones. Todas las filas deben tener el mismo número de miembros.
971 Las operaciones @code{+} (suma), @code{-} (resta), @code{*} (multiplicación) y @code{/} (división), se llevan a cabo elemento a elemento cuando los operandos son dos matrices, un escalar y una matriz o una matriz con un escalar. La operación @code{^} (exponenciación, equivalente a @code{**}) se lleva cabo también elemento a elemento si los operandos son un escalr y una matriz o uma matriz y un escalar, pero no si los operandos son dos matrices.
973 El producto matricial se representa con el operador de multiplicación no conmutativa @code{.}. El correspondiente operador de exponenciación no conmutativa es @code{^^}. Dada la matriz @code{@var{A}}, @code{@var{A}.@var{A} = @var{A}^^2} y @code{@var{A}^^-1} es la inversa de @var{A}, si existe.
975 Algunas variables controlan la simplificación de expresiones que incluyan estas operaciones: @code{doallmxops}, @code{domxexpt}, @code{domxmxops}, @code{doscmxops} y @code{doscmxplus}.
976 @c CHECK -- WE PROBABLY WANT EXHAUSTIVE LIST HERE
978 Hay otras opciones adicionales relacionadas con matrices:
979 @code{lmxchar}, @code{rmxchar}, @code{ratmx}, @code{listarith}, @code{detout},
980 @code{scalarmatrix} y @code{sparse}.
981 @c CHECK -- WE PROBABLY WANT EXHAUSTIVE LIST HERE
983 Hay también algunas funciones que admiten matrices como argumentos o que devuelven resultados matriciales: @code{eigenvalues}, @code{eigenvectors},
985 @code{charpoly}, @code{genmatrix}, @code{addcol}, @code{addrow},
986 @code{copymatrix}, @code{transpose}, @code{echelon} y @code{rank}.
987 @c CHECK -- WE PROBABLY WANT EXHAUSTIVE LIST HERE
993 Construcción de matrices a partir de listas.
996 (%i1) x: matrix ([17, 3], [-8, 11]);
1000 (%i2) y: matrix ([%pi, %e], [a, b]);
1007 Suma elemento a elemento.
1017 Resta elemento a elemento.
1027 Multiplicación elemento a elemento.
1037 División elemento a elemento.
1051 Matriz elevada a un exponente escalar, operación elemento a elemento.
1061 Base escalar y exponente matricial, operación elemento a elemento.
1073 Base y exponente matriciales. Esta operación no se realiza elemento a elemento.
1087 Multiplicación matricial no conmutativa.
1091 [ 3 a + 17 %pi 3 b + 17 %e ]
1093 [ 11 a - 8 %pi 11 b - 8 %e ]
1095 [ 17 %pi - 8 %e 3 %pi + 11 %e ]
1097 [ 17 a - 8 b 11 b + 3 a ]
1101 Exponenciación matricial no conmutativa. Una base escalar @var{b} elevada a un exponente matricial @var{M} se lleva a cabo elemento a elemento y por lo tanto @code{b^^m} equivale a @code{b^m}.
1117 Una matriz elevada al exponente -1 con el operador de exponenciación no conmutativa equivale a la matriz inversa, si existe.
1128 (%i15) x . (x ^^ -1);
1136 @deffn {Función} matrixmap (@var{f}, @var{M})
1137 Devuelve una matriz con el elemento @code{i,j} igual a @code{@var{f}(@var{M}[i,j])}.
1139 Véanse también @code{map}, @code{fullmap}, @code{fullmapl} y @code{apply}.
1141 @c NEED EXAMPLE HERE
1144 @deffn {Función} matrixp (@var{expr})
1145 Devuelve @code{true} si @var{expr} es una matriz, en caso contrario @code{false}.
1149 @defvr {Variable opcional} matrix_element_add
1150 Valor por defecto: @code{+}
1152 La variable @code{matrix_element_add} guarda el símbolo del operador a ejecutar en lugar de la suma en el producto matricial; a @code{matrix_element_add} se le puede asignar cualquier operador n-ario (esto es, una función que admite cualquier número de argumentos). El valor asignado puede ser el nombre de un operador encerrado entre apóstrofos, el nombre de una función o una expresión lambda.
1154 Véanse también @code{matrix_element_mult} y @code{matrix_element_transpose}.
1159 (%i1) matrix_element_add: "*"$
1160 (%i2) matrix_element_mult: "^"$
1161 (%i3) aa: matrix ([a, b, c], [d, e, f]);
1165 (%i4) bb: matrix ([u, v, w], [x, y, z]);
1169 (%i5) aa . transpose (bb);
1180 @defvr {Variable opcional} matrix_element_mult
1181 Valor por defecto: @code{*}
1183 La variable @code{matrix_element_mult} guarda el símbolo del operador a ejecutar en lugar de la multiplicación en el producto matricial; a @code{matrix_element_mult} se le puede asignar cualquier operador binario. El valor asignado puede ser el nombre de un operador encerrado entre apóstrofos, el nombre de una función o una expresión lambda.
1185 El operador @code{.} puede ser una opción útil en determinados contextos.
1187 Véanse también @code{matrix_element_add} y @code{matrix_element_transpose}.
1192 (%i1) matrix_element_add: lambda ([[x]], sqrt (apply ("+", x)))$
1193 (%i2) matrix_element_mult: lambda ([x, y], (x - y)^2)$
1194 (%i3) [a, b, c] . [x, y, z];
1196 (%o3) sqrt((c - z) + (b - y) + (a - x) )
1197 (%i4) aa: matrix ([a, b, c], [d, e, f]);
1201 (%i5) bb: matrix ([u, v, w], [x, y, z]);
1205 (%i6) aa . transpose (bb);
1207 [ sqrt((c - w) + (b - v) + (a - u) ) ]
1210 [ sqrt((f - w) + (e - v) + (d - u) ) ]
1213 [ sqrt((c - z) + (b - y) + (a - x) ) ]
1216 [ sqrt((f - z) + (e - y) + (d - x) ) ]
1221 @defvr {Variable opcional} matrix_element_transpose
1222 Valor por defecto: @code{false}
1224 La variable @code{matrix_element_transpose} es una operación que se aplica a cada elemento de una matriz a la que se le calcula la transpuesta. A @code{matrix_element_mult} se le puede asignar cualquier operador unitario. El valor asignado puede ser el nombre de un operador encerrador entre apóstrofos, el nombre de una función o una expresión lambda.
1226 Cuando @code{matrix_element_transpose} es igual a @code{transpose}, la función @code{transpose} se aplica a cada elemento. Cuando @code{matrix_element_transpose} es igual a @code{nonscalars}, la función @code{transpose} se aplica a todos los elementos no escalares. Si alguno de los elementos es un átomo, la opción @code{nonscalars} se aplica
1227 @code{transpose} sólo si el átomo se declara no escalar, mientras que la opción @code{transpose} siempre aplica @code{transpose}.
1229 La opción por defecto, @code{false}, significa que no se aplica ninguna operación.
1231 Véanse también @code{matrix_element_add} y @code{matrix_element_mult}.
1236 (%i1) declare (a, nonscalar)$
1237 (%i2) transpose ([a, b]);
1241 (%i3) matrix_element_transpose: nonscalars$
1242 (%i4) transpose ([a, b]);
1246 (%i5) matrix_element_transpose: transpose$
1247 (%i6) transpose ([a, b]);
1251 (%i7) matrix_element_transpose:
1252 lambda ([x], realpart(x) - %i*imagpart(x))$
1253 (%i8) m: matrix ([1 + 5*%i, 3 - 2*%i], [7*%i, 11]);
1254 [ 5 %i + 1 3 - 2 %i ]
1257 (%i9) transpose (m);
1266 @c IS THIS THE ONLY MATRIX TRACE FUNCTION ??
1267 @deffn {Función} mattrace (@var{M})
1268 Devuelve la traza (esto es, la suma de los elementos de la diagonal principal) de la matriz cuadrada @var{M}.
1270 Para disponer de esta función es necesario cargar el paquete haciendo @code{load ("nchrpl")}.
1274 @deffn {Función} minor (@var{M}, @var{i}, @var{j})
1275 Devuelve el menor @code{(@var{i}, @var{j})} de la matriz @var{M}. Esto es, la propia matriz @var{M}, una vez extraídas la fila @var{i} y la columna @var{j}.
1281 @deffn {Función} ncharpoly (@var{M}, @var{x})
1282 Devuelve el polinomio característico de la matriz @var{M} respecto de la variable @var{x}. Es una alternativa a la función @code{charpoly} de Maxima.
1284 La función @code{ncharpoly} opera calculando trazas de las potencias de la matriz dada, que son iguales a las sumas de las potencias de las raíces del polinomio característico. A partir de estas cantidades se pueden calcular las funciones simétricas de las raíces, que no son otra cosa sino los coeficientes del polinomio característico. La función @code{charpoly} opera calculando el determinante de by @code{@var{x} * ident [n] - a}. La función @code{ncharpoly} es m'as eficiente en el caso de matrices grandes y densas.
1286 Para disponer de esta función es necesario cargar el paquete haciendo @code{load ("nchrpl")}.
1290 @deffn {Función} newdet (@var{M})
1291 Calcula el determinante de la matriz @var{M} por el algoritmo del árbol menor
1292 de Johnson-Gentleman. El resultado devuelto por @code{newdet} tiene formato CRE.
1297 @deffn {Función} permanent (@var{M})
1298 Calcula la permanente de la matriz @var{M} por el algoritmo del árbol menor de
1299 Johnson-Gentleman. La permanente es como un determinante pero sin cambios de signo.
1300 El resultado devuelto por @code{permanent} tiene formato CRE.
1302 Véase también @code{newdet}.
1306 @deffn {Función} rank (@var{M})
1307 Calcula el rango de la matriz @var{M}. Esto es, el orden del mayor subdeterminante no singular de @var{M}.
1309 @c STATEMENT NEEDS CLARIFICATION
1310 La función @var{rango} puede retornar una respuesta errónea si no detecta que un elemento de la matriz equivalente a cero lo es.
1314 @defvr {Variable opcional} ratmx
1315 Valor por defecto: @code{false}
1317 Si @code{ratmx} vale @code{false}, el determinante y la suma, resta y producto matriciales se calculan cuando las matrices se expresan en términos de sus elementos, pero no se calcula la inversión matricial en su representación general.
1319 Si @code{ratmx} vale @code{true}, las cuatro operaciones citadas más arriba se calculan en el formato CRE y el resultado de la matriz inversa también se da en formato CRE. Esto puede hacer que se expandan los elementos de la matriz, dependiendo del valor de @code{ratfac}, lo que quizás no sea siempre deseable.
1323 @deffn {Función} row (@var{M}, @var{i})
1324 Devuelve la @var{i}-ésima fila de la matriz @var{M}. El valor que devuelve tiene formato de matriz.
1330 @defvr {Variable opcional} rmxchar
1331 Valor por defecto: @code{]}
1333 La variable @code{rmxchar} es el carácter que se dibuja al lado derecho de una matriz.
1335 Véase también @code{lmxchar}.
1341 @defvr {Variable opcional} scalarmatrixp
1342 Valor por defecto: @code{true}
1344 Si @code{scalarmatrixp} vale @code{true}, entonces siempre que una matriz 1 x 1 se produce como resultado del cálculo del producto no conmutativo de matrices se cambia al formato escalar.
1346 Si @code{scalarmatrixp} vale @code{all}, entonces todas las matrices 1 x 1 se simplifican a escalares.
1348 Si @code{scalarmatrixp} vale @code{false}, las matrices 1 x 1 no se convierten en escalares.
1352 @c FALTA AQUI DEFINICION DE scalefactors.
1354 @deffn {Función} setelmx (@var{x}, @var{i}, @var{j}, @var{M})
1355 Asigna el valor @var{x} al (@var{i}, @var{j})-ésimo elemento de la matriz @var{M} y devuelve la matriz actualizada.
1357 La llamada @code{@var{M} [@var{i}, @var{j}]: @var{x}} hace lo mismo, pero devuelve @var{x} en lugar de @var{M}.
1361 @deffn {Función} similaritytransform (@var{M})
1362 @deffnx {Función} simtran (@var{M})
1363 La función @code{similaritytransform} calcula la transformada de similitud de la matriz @code{M}. Devuelve una lista que es la salida de la instrucción @code{uniteigenvectors}. Además, si la variable @code{nondiagonalizable} vale @code{false} entonces se calculan dos matrices globales @code{leftmatrix} y @code{rightmatrix}. Estas matrices tienen la propiedad de que @code{leftmatrix . @var{M} . rightmatrix} es una matriz diagonal con los valores propios de @var{M} en su diagonal. Si @code{nondiagonalizable} vale @code{true} entonces no se calculan estas matrices.
1365 Si la variable @code{hermitianmatrix} vale @code{true} entonces @code{leftmatrix} es el conjugado complejo de la transpuesta de @code{rightmatrix}. En otro caso @code{leftmatrix} es la inversa de @code{rightmatrix}.
1367 Las columnas de la matriz @code{rightmatrix} son los vectores propios de @var{M}. Las otras variables (véanse @code{eigenvalues} y @code{eigenvectors}) tienen el mismo efecto, puesto que @code{similaritytransform} llama a las otras funciones del paquete para poder formar @code{rightmatrix}.
1369 Estas funciones se cargan con @code{load ("eigen")}.
1371 El nombre @code{simtran} es sinónimo de @code{similaritytransform}.
1375 @defvr {Variable opcional} sparse
1376 Valor por defecto: @code{false}
1378 Si @code{sparse} vale @code{true} y si @code{ratmx} vale @code{true}, entonces @code{determinant}
1379 utilizará rutinas especiales para calcular determinantes dispersos.
1383 @deffn {Función} submatrix (@var{i_1}, ..., @var{i_m}, @var{M}, @var{j_1}, ..., @var{j_n})
1384 @deffnx {Función} submatrix (@var{i_1}, ..., @var{i_m}, @var{M})
1385 @deffnx {Función} submatrix (@var{M}, @var{j_1}, ..., @var{j_n})
1386 Devuelve una nueva matriz formada a partir de la matriz @var{M} pero cuyas filas @var{i_1}, ..., @var{i_m} y columnas @var{j_1}, ..., @var{j_n} han sido eliminadas.
1390 @deffn {Función} transpose (@var{M})
1391 Calcula la transpuesta de @var{M}.
1393 Si @var{M} es una matriz, el valor devuelto es otra matriz @var{N} tal que @code{N[i,j] = M[j,i]}.
1395 Si @var{M} es una lista, el valor devuelto es una matriz @var{N} de @code{length (m)} filas y 1 columna, tal que @code{N[i,1] = M[i]}.
1397 En caso de no ser @var{M} ni matriz ni lista, se devuelve la
1398 expresión nominal @code{'transpose (@var{M})}.
1401 @deffn {Función} triangularize (@var{M})
1402 Devuelve la forma triangular superior de la matriz @code{M}, obtenida por eliminación gaussiana.
1403 El resultado es el mismo que el devuelto por @code{echelon}, con la salvedad de que el primer elemento no nulo de cada fila no se normaliza a 1.
1405 Las funciones @code{lu_factor} y @code{cholesky} también triangularizan matrices.
1408 @c M: matrix ([3, 7, aa, bb], [-1, 8, 5, 2], [9, 2, 11, 4]);
1409 @c triangularize (M);
1412 (%i1) M: matrix ([3, 7, aa, bb], [-1, 8, 5, 2], [9, 2, 11, 4]);
1418 (%i2) triangularize (M);
1421 (%o2) [ 0 - 74 - 56 - 22 ]
1423 [ 0 0 626 - 74 aa 238 - 74 bb ]
1428 @deffn {Función} uniteigenvectors (@var{M})
1429 @deffnx {Función} ueivects (@var{M})
1430 Calcula los vectores propios unitarios de la matriz @var{M}. El valor que devuelve es una lista de listas, la primera de las cuales es la salida de la función @code{eigenvalues} y el resto de sublistas son los vectores propios unitarios de la matriz correspondiente a esos valores propios, respectivamente.
1432 Las variables citadas en la descripción de la función @code{eigenvectors} tienen los mismos efectos en @code{uniteigenvectors}.
1434 Si @code{knowneigvects} vale @code{true}, el paquete @code{eigen} da por supuesto que el usuario conoce los vectores propios de la matriz y que están guardados en la variable global @code{listeigvects}, en tal caso el contenido de @code{listeigvects} debe ser una lista de estructura similar a la que devuelve la función @code{eigenvectors}.
1436 @c FOLLOWING PARAGRAPH IS IN NEED OF SERIOUS CLARIFICATION
1437 Si @code{knowneigvects} vale @code{true} y la lista de vectores propios está en la variable @code{listeigvects}, el valor de la variable @code{nondiagonalizable} puede que no sea el correcto. Si tal es el caso, debe asignarsele el valor correcto. @c FALTA TERMINAR ESTE PARRAFO
1439 Para utilizar esta fucnión es necesario cargarla haciendo @code{load ("eigen")}.
1441 El nombre @code{ueivects} es sinónimo de @code{uniteigenvectors}.
1445 @deffn {Función} unitvector (@var{x})
1446 @deffnx {Función} uvect (@var{x})
1447 Devuelve @math{@var{x}/norm(@var{x})}, esto es, el vector unitario de igual dirección y sentido que @var{x}.
1449 @code{load ("eigen")} loads this function.
1451 Para utilizar esta fucnión es necesario cargarla haciendo @code{load ("eigen")}.
1453 El nombre @code{uvect} es sinónimo de @code{unitvector}.
1460 @deffn {Función} vectorpotential (@var{givencurl})
1461 Devuelve el vector potencial de un vector rotacional en el sistema
1462 de coordenadas actual.
1463 @code{potentialzeroloc} tiene un rol similar al de @code{potential},
1464 pero el orden del miembro izquierdo de las ecuaciones debe ser una
1465 permutación cíclica de las coordenadas.
1472 @c NEEDS A LOT OF WORK: MAKE SURE THAT ALL VECTOR SIMPLIFICATION FLAGS HAVE A DESCRIPTION HERE
1473 @deffn {Función} vectorsimp (@var{expr})
1474 Realiza simplificaciones y expansiones de acuerdo con los valores de las siguientes variables globales:
1476 @code{expandall}, @code{expanddot}, @code{expanddotplus}, @code{expandcross}, @code{expandcrossplus},
1477 @code{expandcrosscross}, @code{expandgrad}, @code{expandgradplus}, @code{expandgradprod},
1478 @code{expanddiv}, @code{expanddivplus}, @code{expanddivprod}, @code{expandcurl}, @code{expandcurlplus},
1479 @code{expandcurlcurl}, @code{expandlaplacian}, @code{expandlaplacianplus} y @code{expandlaplacianprod}.
1481 Todas estas variables tienen por defecto el valor @code{false}. El sufijo @code{plus} se refiere al uso de la suma o la distributividad. El sufijo @code{prod} se refiere a la expansión de operadores que realizan cualquier tipo de producto.
1484 @item expandcrosscross
1485 Simplifica @math{p ~ (q ~ r)} en @math{(p . r)*q - (p . q)*r}.
1486 @item expandcurlcurl
1487 Simplifica @math{curl curl p} en @math{grad div p + div grad p}.
1488 @item expandlaplaciantodivgrad
1489 Simplifica @math{laplacian p} en @math{div grad p}.
1491 Activa @code{expandcrossplus} y @code{expandcrosscross}.
1493 Activa @code{expanddotplus}, @code{expandcrossplus}, @code{expandgradplus},
1494 @code{expanddivplus}, @code{expandcurlplus} y @code{expandlaplacianplus}.
1496 Activa @code{expandgradprod}, @code{expanddivprod} y @code{expandlaplacianprod}.
1499 @c EXPLAIN THE IMPORT OF THIS STATEMENT
1500 Estas variables están declaradas como @code{evflag}.
1502 @c SEEMS SOME TEXT HAS GONE MISSING HERE; COMMENT OUT FRAGMENT PENDING
1503 @c RECOVERY AND/OR RECONSTRUCTION OF THIS PARAGRAPH
1504 @c For orthogonal curvilinear coordinates, the global variables
1505 @c COORDINATES[[X,Y,Z]], DIMENSION[3], SF[[1,1,1]], and SFPROD[1] are set
1506 @c by the function invocation
1511 @c AQUI FALTA LA DEFINICION DE LA VARIABLE vect_cross
1514 @deffn {Función} zeromatrix (@var{m}, @var{n})
1515 Devuelve una matriz rectangular @var{m} por @var{n} con todos sus elementos iguales a cero.
1519 @defvr {Símbolo especial} [
1520 @defvrx {Símbolo especial} [
1522 @fnindex Delimitadores de listas
1523 @fnindex Operador de subíndice
1525 Los símbolos @code{[} y @code{]} marcan el comienzo y final, respectivamente, de una lista.
1527 Los símbolos @code{[} y @code{]} también se utilizan para indicar los subíndices de los elementos de una lista, arreglo o función arreglo.
1536 (%i3) array (y, fixnum, 3);
1542 (%i6) z['foo]: 'bar;
1546 (%i8) g[k] := 1/(k^2+1);