INTRODUCCIÓN*
MATLAB es un software versátil cuyo núcleo es el álgebra lineal. MATLAB quiere decir MATrix LABoratory (laboratorio de matrices). Contiene partes de proyectos pro-fesionales de alta calidad para cálculos de álgebra lineal. Aunque el código de MATLAB está escrito en C, muchas rutinas y funciones están en el lenguaje MATLABy son actua-lizadas con cada nueva versión del software. MATLABestá disponible para Microsoft Windows y para estaciones de trabajo Unix y VMS.
MATLABtiene una amplia gama de capacidades. En este libro sólo utilizaremos unas cuantas. Veremos que la estructura de los comandos de MATLABes muy parecida a la forma en que escribimos expresiones algebraicas y las operaciones del álgebra li-neal. Los nombres de muchos comandos son muy parecidos a los de las operaciones y los conceptos de esta disciplina. Aquí describiremos los comandos y las característi-cas de MATLABrelacionadas directamente con este curso. Un análisis más detallado aparece en la Guía del usuario de MATLAB que acompaña al software y en los libros Experiments in Computational Matrix Algebra, de David R. Hill (Nueva York, Ran-dom House, 1988) y Linear Algebra LABS with MATLAB, de David R. Hill y David E. Zitarelli (Upper Saddle River, N. J.: Prentice Hall, Inc., 2004). Además, el propio software de MATLABofrece descripciones en pantalla mediante el comando help. Al escribir
help
aparece una lista de subdirectorios de MATLABy directorios alternativos con los archi-vos correspondientes a los comandos y los conjuntos de datos. Al escribir help nombre, donde nombre es el nombre de un comando, se accede a la información relativa al co-mando indicado. En algunos casos, la descripción supera lo que se requiere para este curso. Por lo tanto, es probable que no comprenda todo lo que despliega help. En la sec-ción 12.9 daremos una lista de la mayor parte de los comandos de MATLABque emplea-mos en esta obra.
Una vez iniciado el software de MATLAB, verá aparecer el logotipo y el indicador de comandos , que muestra que MATLABespera un comando. En la sección 12.1
615
C A P Í T U L O
12
M
ATLAB PARA
ÁLGEBRA LINEAL
*Este material sobre MATLABse refiere a la versión de Microsoft Windows.
estudiaremos la forma de introducir matrices en MATLABy explicaremos varios coman-dos. Sin embargo, debe conocer ciertas características antes de pasar a esa sección.
䊏 Inicio de la ejecución de un comando.
Después de escribir el nombre de un comando y los argumentos o datos necesarios, debe oprimir ENTER para que se ejecute.
䊏 La pila de comandos.
Al introducir los comandos, MATLABguarda algunos de los más recientes en una pila. Los comandos de la pila se recuperan con la tecla de la flecha hacia arriba. El número de comandos guardados en la pila depende de su longitud y de otros fac-tores.
䊏 Edición de comandos.
Si comete un error o escribe mal un comando, puede utilizar las flecha hacia la iz-quierda o hacia la derecha para colocar el cursor en el punto correcto y realizar la corrección. La tecla home (inicio) mueve el cursor al principio del comando y la tecla end (fin) al final. Las teclas backspace (retroceso) y delete (suprimir) eli-minan los caracteres de una línea de comandos. La tecla insert (insertar) permite incorporar caracteres. Para salir del modo de inserción basta oprimir la tecla otra vez. Si MATLABreconoce un error después de oprimir ENTER, emite un sonido y un mensaje que ayuda a identificarlo. Puede regresar a corregir la línea de coman-dos con la tecla de la flecha hacia arriba.
䊏 Continuación de comandos.
Los comandos de MATLABque no caben en una línea pueden continuar hasta la si-guiente mediante tres puntos suspensivos seguidos de un ENTER.
䊏 Para detener un comando.
Para detener la ejecución de un comando, oprima Ctrl y C en forma simultánea y luego oprima ENTER. A veces hay que repetir el procedimiento.
䊏 Salida.
Para salir de MATLAB, escriba exit o quit.
12.1
ENTRADA Y SALIDA EN M
ATLAB
INTRODUCCIÓN DE MATRICES
Para introducir una matriz en MATLAB, sólo escriba las entradas encerradas entre corchetes […], separándolas con un espacio y las filas con un punto y coma. Así, la matriz se introduce al escribir y el resultado es ans = 9 −8 7 −6 5 −4 11 −12 0 [[[9 −8 7;−6 5 −4;11 −12 0]]] ⎡ ⎣−69 −85 −47 11 −12 0 ⎤ ⎦
www.Matematica1.com
Observe que no aparecen corchetes y que MATLABdenomina ans a esta matriz. En MATLAB, toda matriz debe tener un nombre. Si usted no asigna nombre a una ma-triz, MATLABla llama ans, nombre de variable por omisión. Para asignar el nombre a una matriz nos valemos del operador de asignación =. Por ejemplo,
aparece como
Advertencia 1. Todas las filas (renglones) deben tener el mismo número de entradas.
2. MATLABdistingue entre las mayúsculas y minúsculas. Por lo tanto, la matriz B no es igual a la matriz b.
3. El nombre de una matriz no se puede usar dos veces. En tal caso, el contenido “an-terior” se pierde.
Para asignar un nombre a una matriz sin desplegar sus entradas, colocamos un punto y coma (;) después del corchete derecho, ].
asigna a esta matriz el nombre A, pero sin desplegarla. Para asignar un nuevo nombre a una matriz ya definida, utilizamos el operador de asignación =. El comando Z = A asigna el contenido de A a Z. La matriz A continúa definida.
Para determinar los nombres de las matrices en uso, empleamos el comando who. Para eliminar una matriz, utilizamos el comando clear seguido de un espacio y el nom-bre de la matriz. Por ejemplo, el comando
clear A
elimina el nombre A y su contenido de MATLAB. El comando clear elimina todas las matrices definidas hasta ese momento.
Para determinar el número de filas y de columnas de una matriz, ejecutamos el co-mando size, como en
size(A)
que despliega lo siguiente, suponiendo que A no se ha eliminado:
lo cual significa que la matriz A tiene dos filas y tres columnas.
PARA VER UNA MATRIZ
Para ver todos los componentes de una matriz, escriba su nombre. Si la matriz es gran-de, el despliegue se puede descomponer en subconjuntos de columnas que aparecen de manera sucesiva. Por ejemplo, el comando
hilb(9)
despliega las primeras siete columnas, seguidas de las columnas 8 y 9 (para la informa-ción relativa al comando hilb, utilice help hilb). Si la matriz es grande, el despliegue será demasiado rápido para verla. Para poder ver una parte de ella, escriba el comando
ans = 2 3 A = [[[4 5 8;0 −1 6]]]; A = 4 5 8 0 −1 6 A = [[[4 5 8;0 −1 6]]]
Sec. 12.1 Entrada y salida en MATLAB 617
more on seguida de ENTER y luego el nombre de la matriz o un comando para generarla. Oprima la barra espaciadora para mostrar otras partes de ella. Continúe opri-miéndola hasta que ya no aparezca el aviso “--more--” en la parte inferior de la pantalla. Intente este procedimiento con hilb(20). Para desactivar esta característica de pagina-ción, escriba el comando more off. Si tiene una barra de desplazamiento, puede utilizar el ratón para moverla y mostrar otras partes de la matriz.
Se han adoptado las siguientes convenciones para ver una parte de una matriz en MATLAB. Con fines ilustrativos, suponga que se ha introducido en MATLABla matriz A de 5 × 5.
䊏 Para ver la entrada (2, 3) de A, escriba A(2, 3)
䊏 Para ver la cuarta fila de A, escriba A(4,:)
䊏 Para ver la primera columna de A, escriba A(:,1)
En los casos anteriores, el signo : se interpreta como “todos”. Los dos puntos también permiten representar un grupo de filas o columnas. Por ejemplo, al escribir
2:8 se obtiene
Así, podemos desplegar un subconjunto de filas o columnas de una matriz. Por ejem-plo, para desplegar las filas 3 a 5 de la matriz A, escriba
A(3:5,:)
De manera análoga, desplegamos las columnas 1 a 3 escribiendo A(:,1:3)
Para más información acerca del uso de operador dos puntos, escriba help colon. Este operador es muy versátil, pero no haremos uso de todas sus características.
FORMATOS DE DESPLIEGUE
MATLABguarda las matrices en forma decimal y realiza sus cálculos con aritmética de-cimal. Esta forma decimal conserva cerca de 16 dígitos, pero no los despliega todos. Entre lo que ocurre dentro de la máquina y lo que aparece en la pantalla están las ruti-nas que convierten o dan formatos de despliegue (para más información, vea la Guía del usuario de MATLABo escriba help format).
䊏 Si la matriz sólo contiene enteros, entonces se despliega con valores enteros, es de-cir, sin puntos decimales.
ans =
2 3 4 5 6 7 8
䊏 Si alguna entrada de la matriz no se representa exactamente como entero, toda la matriz se despliega en el formato breve (format short), con cuatro cifras decima-les después del punto (la última cifra puede haber sido redondeada). La excepción es el cero. Si una entrada es exactamente cero, entonces se le despliega como el en-tero cero. Introduzca la matriz
a MATLAB. El despliegue es
Advertencia Si un valor aparece como 0.0000, se entiende que no es exactamente cero. Deberá cam-biar al llamado formato largo (format long), que estudiaremos a continuación, para desplegar nuevamente la matriz.
䊏 Para ver más de cuatro cifras decimales, modifique el formato de despliegue. Una forma de hacerlo es mediante el comando
format long
la cual muestra 15 cifras decimales. La matriz Q anterior, pero con el formato largo, es
Otros formatos emplean un exponente de 10. Son los formatos format short e y format long e, que usan una potencia de 10. Los “formatos e” se emplean con fre-cuencia en análisis numérico. Utilice estos formatos con la matriz Q.
䊏 MATLABpuede desplegar los valores en forma racional mediante el comando for-mat rat, abreviatura de despliegue racional. Analice la salida de la siguiente serie de comandos de MATLAB. despliega y format rat V despliega
Por último, escriba format short para regresar a una forma de despliegue decimal. V = 1 1/2 1/6 1/12 V = 1.0000 0.5000 0.1667 0.0833 format short V = [[[1 1/2 1/6 1/12]]] Q = Columns 1 through 4 5.00000000000000 0 0.33333333333333 0.66666666666667 Column 5 7.12345600000000 Q = 5.0000 0 0.3333 0.6667 7.1235 Q = [[[5 0 1/3 2/3 7.123456]]]
Sec. 12.1 Entrada y salida en MATLAB 619
Advertencia La salida racional se despliega en forma de “cadena”. Las cadenas no son datos numé-ricos y, por lo tanto, no pueden utilizarse con operadores aritméticos. Por ello, la salida racional es sólo para “verla”.
Al iniciar MATLAB, el formato es format short. Si cambia de formato, éste quedará en efecto hasta realizar otro comando de formato. Algunas rutinas de MATLABcambian el formato dentro de ellas.
12.2
OPERACIONES MATRICIALES CON M
ATLAB
En MATLAB, las operaciones de suma, resta y multiplicación de matrices cumplen con las mismas definiciones de las secciones 1.2 y 1.3. Si A y B son matrices de m× n in-troducidas a MATLAB, su suma se calcula mediante el comando
A+B y su diferencia mediante el comando
A−B
(se puede utilizar espacios en cualquier lado de + o −). Si A es de m × n y C es de n× k, el producto de A y C en MATLABse escribe
A∗C
En MATLAB, * debe escribirse de manera explícita entre los nombres de las matrices por multiplicar. Si se escribe AC no se obtiene una multiplicación implícita, sino que MATLABconsidera a AC como un nuevo nombre de matriz y, si ésta no se ha definido antes, aparecerá un error. Si las matrices implicadas no son compatibles con la opera-ción dada, aparece un mensaje de error. La compatibilidad con la suma y la resta signi-fica que las matrices tiene el mismo tamaño. Las matrices son compatibles con la multiplicación si el número de columnas de la primera matriz es igual al número de fi-las de la segunda.
EJEMPLO 1 Introduzca en MATLABlas matrices
y calcule las siguientes expresiones. Desplegamos los resultados de MATLAB.
Solución (a) A+C despliega
(b) A∗C despliega ans = 13 −1 26 −2 ans = 4 −3 7 6 A= 1 2 2 4 , b = − 3 1 , y C = 3 −5 5 2
www.Matematica1.com
(c) b∗A despliega el mensaje de error siguiente:
■
En MATLAB, la multiplicación por un escalar requiere el uso del símbolo de multi-plicación *. Para la matriz A del ejemplo 1, 5A indica la multimulti-plicación por un escalar en el libro, pero en MATLABse necesita escribir 5∗A.
En MATLAB, el operador (o símbolo) de transposición es la comilla simple o após-trofo, . Con las matrices del ejemplo 1, en MATLAB
y
Por conveniencia, podemos introducir en MATLABlas matrices columna mediante . Para introducir la matriz
podemos hacerlo con
o con el comando
Supongamos que tenemos el sistema lineal Ax= b, donde la matriz de coeficien-tes A y el lado derecho b ya están dentro de MATLAB. La matriz aumentada se forma en MATLABescribiendo
o, si queremos llamarla aug, escribimos
No aparece una barra que divida al lado derecho de la matriz de coeficientes. Con las matrices A y b del ejemplo 1 formamos la matriz aumentada en MATLABdel sistema Ax = b.
En MATLAB, la formación de matrices aumentadas es un caso particular de cons-trucción de matrices. Esencialmente, podemos “pegar” las matrices siempre y cuando sus tamaños sean adecuados.
aug = [[[A b]]] [[[A b]]] A b x = [[[1 3 −5]]] x = [[[1;3;−5]]] x= ⎡ ⎣ 13 −5 ⎤ ⎦ , p=b despliega p = −3 1 Q = C despliega Q = 3 5 −5 2 ??? Error using ==> ∗
Inner matrix dimensions must agree.
Sec. 12.2 Operaciones matriciales con MATLAB 621
Con las matrices A, b y C del ejemplo 1, tenemos:
MATLABtiene un comando para construir matrices diagonales introduciendo sólo las entradas en la diagonal. El comando es diag y
El comando diag también funciona para “extraer” un conjunto de entradas diagonales. Si
está en MATLAB, entonces
Observe que
Para mayor información acerca de diag, utilice help. Los comandos tril y triu están re-lacionados con diag.
diag(diag(R)) despliega ans =
5 0 0
0 7 0
0 0 −8
diag(R) despliega ans = 5 7 −8 R = ⎡ ⎣−35 27 10 6 4 −8 ⎤ ⎦ D = diag([[[1 2 3]]]) despliega D = 1 0 0 0 2 0 0 0 3 [[[A C]]] despliega ans = 1 2 3 −5 2 4 5 2
[[[A;C]]] despliega ans =
1 2 2 4 3 −5 5 2 [[[A b C]]] despliega ans = 1 2 −3 3 −5 2 4 1 5 2
[[[C A;A C]]] despliega ans =
3 −5 1 2
5 2 2 4
1 2 3 −5
2 4 5 2
12.3
POTENCIAS DE MATRICES Y ALGUNAS MATRICES ESPECIALES
En MATLAB, para elevar una matriz a una potencia debemos hacer uso del operador de exponenciación ∧. Si A es cuadrada y k es un entero positivo, entonces Akse denota en MATLABcomoA∧k
lo cual corresponde a un producto matricial de A con ella misma k veces. Las reglas de los exponentes de la sección 1.4 se aplican en MATLAB. En particular,
A∧0
despliega una matriz identidad con el mismo tamaño de A. EJEMPLO 1 Introduzca las matrices
a MATLABy calcule las siguientes expresiones. Desplegamos los resultados de MATLAB.
■
En este libro, Indenota la matriz identidad de n× n. MATLABtiene un comando pa-ra genepa-rar Inen caso necesario. El comando es eye, que se comporta como sigue:
eye(2) despliega la matriz identidad de 2 × 2. eye(5) despliega la matriz identidad de 5 × 5. t = 10;eye(t) despliega la matriz identidad de 10 × 10.
eye(size(A)) despliega la matriz identidad con el mismo tamaño que A. Otros dos comandos de MATLAB, zeros y ones, se comportan de manera similar: zeros produce una matriz con ceros únicamente, mientras que el comando ones genera una matriz con sólo unos. Las matrices rectangulares de tamaño m× n se generan me-diante
zeros(m,n), ones(m,n)
donde m y n se han definido antes en MATLABcon valores enteros positivos. Con esta convención generamos una columna con cuatro ceros, mediante el comando
zeros(4,1) (a) A∧∧∧2 despliega ans =
0 −2
2 0
(b) (A∗B)∧∧∧2 despliega ans =
−8 6
−6 −8 (c) (B−A)∧∧∧3 despliega ans =
0 1
−1 0
A = 1 −11 1 y B = 1 −22 1
Sec. 12.3 Potencias de matrices y algunas matrices especiales 623
Del álgebra básica, el lector está familiarizado con polinomios en x, como los si-guientes:
4x3− 5x2+ x − 3 y x4− x − 6.
La evaluación de tales polinomios en un valor x es una tarea fácil con MATLAB, con el comando polyval. Defina los coeficientes de un polinomio como un vector (una matriz fila o una matriz columna), con el coeficiente de la máxima potencia en primer lugar, el coeficiente de la siguiente máxima potencia en segundo lugar, y así hasta llegar al tér-mino constante. Si cualquier potencia no aparece de manera explícita, su coeficiente de-be hacerse igual a cero en la posición correspondiente de su vector de coeficiente. En MATLAB, para los polinomios anteriores tenemos los vectores de coeficientes
respectivamente. El comando
polyval(v, 2)
evalúa el primer polinomio en x= 2 y despliega el valor 11. De manera análoga, el co-mando
t = −1;polyval(w, t)
evalúa el segundo polinomio en x= −1 y despliega el valor −4. Los polinomios en una matriz cuadrada A tienen la forma
5A3– A2+ 4A – 7I.
Observe que el término constante en un polinomio matricial es una matriz identidad del mismo tamaño que A. Esta convención es natural si recordamos que el término cons-tante de un polinomio común es el coeficiente de x0y que A0= I. Con frecuencia encontramos los polinomios matriciales al evaluar un polinomio común, como p(x) = x4– x – 6 en una matriz A de n × n. El polinomio matricial resultante es
p(A) = A4–A – 6In.
MATLABpuede evaluar los polinomios matriciales mediante el comando polyvalm. De-finimos la matriz cuadrada A y el vector de coeficientes
en MATLAB. Entonces el comando
polyvalm(w,A)
produce el valor de p(A), que será una matriz del mismo tamaño que A. EJEMPLO 2 Sean
Para calcular p(A) en MATLAB, empleamos los siguientes comandos. Después de los co-mandos aparece lo que despliega MATLAB.
■ A = [[[1 −1 2;−1 0 1;0 3 1]]]; v = [[[2 −6 2 3]]]; Q = polyvalm(v,A) Q = −13 −18 10 −6 −25 10 6 18 −17 ⎡ ⎣−11 −10 21 0 3 1 ⎤ ⎦ y p(x) =2x3−6x2+2x + 3. w = [[[1 0 0 −1 −6]]] v = [[[4 −5 1 −3]]] y w = [[[1 0 0 −1 −6]]]
www.Matematica1.com
A veces necesitará usar una matriz con entradas enteras para verificar cierta rela-ción matricial. Los comandos de MATLABpueden generar estas matrices con facilidad. Escriba
C = fix(10*rand(4))
y verá desplegada una matriz C de 4 × 4 con entradas enteras. Para investigar qué es lo que hace el comando, utilice help con los comandos fix y rand.
EJEMPLO 3 Mediante MATLABgenere varias matrices A de k× k para k = 3, 4, 5 y despliegue B = A + AT. Analice las matrices resultantes e intente determinar una propiedad comparti-da por ellas. A continuación mostramos varias de estas matrices. Es posible que sus re-sultados no sean los mismos debido al generador de números aleatorios rand.
El despliegue es
Con la tecla de la flecha hacia arriba se obtiene cada uno de los comandos anteriores, uno a la vez, si se oprime ENTER después de cada uno. Esta vez, la matriz desplegada es
■
Véase el ejercicio T.27 al final de la sección 1.4.
12.4
OPERACIONES ELEMENTALES POR FILA CON M
ATLAB
La solución de sistemas lineales que analizamos en la sección 1.6 se basa en las opera-ciones elementales por fila para obtener una serie de sistemas lineales cuyas matrices aumentadas son equivalentes por filas. Estos sistemas lineales equivalentes por filas tie-nen las mismas soluciones, por lo que elegimos operaciones elementales por fila que produzcan sistemas equivalentes fáciles de resolver. Así se demuestra que los sistemas lineales en forma escalonada reducida por filas se resuelven fácilmente mediante el procedimiento de Gauss-Jordan y los sistemas en forma escalonada por filas median-te la eliminación gaussiana con sustitución hacia atrás. Estos procedimientos requieren el uso de operaciones por fila que introduzcan ceros en la matriz aumentada del siste-ma lineal. Ahora explicaremos cómo hacerlo con MATLAB. El software de MATLABse encarga de la aritmética, por lo que nos concentraremos en la estrategia para producir la forma escalonada reducida por filas o la forma escalonada por filas.
Dado un sistema lineal Ax= b, introducimos la matriz de coeficientes A y el lado derecho b en MATLAB. Formamos la matriz aumentada (vea la sección 12.2) como
C = [A b] B = 0 5 10 5 6 6 10 6 10 B = 4 6 11 6 18 11 11 11 0 k = 3; A = fix(10∗rand(k)); B = A+A
Sec. 12.4 Operaciones elementales por fila con MATLAB 625
Ahora estamos preparados para aplicar las operaciones por fila a la matriz aumentada C. Cada operación por fila reemplaza una fila por otra nueva. Nuestra estrategia consiste en definir la operación por fila de modo que la fila resultante nos lleve más cerca de nuestro objetivo, la forma escalonada reducida por filas o la forma escalonada por filas. La serie de operaciones por fila que transforma en alguna de estas formas se puede elegir de varias maneras. Por supuesto que queremos hacer uso del menor núme-ro de operaciones por fila, penúme-ro muchas veces es conveniente evitar el uso de fraccio-nes (de ser posible), en particular si los cálculos se hacen a mano. Como MATLAB realizará la aritmética por nosotros, no tenemos que preocuparnos por las fracciones, pero sería bueno evitarlas, al menos por el aspecto visual.
Según lo descrito en la sección 1.6 hay tres operaciones por fila:
䊏 Intercambiar dos filas.
䊏 Multiplicar una fila por un número distinto de cero.
䊏 Sumar un múltiplo de una fila a otro.
Para realizar estas operaciones sobre una matriz aumentada , en MATLAB empleamos el operador dos puntos, que vimos en la sección 12.1. Ilustraremos esta téc-nica con el sistema lineal del ejemplo 8 de la sección 1.6. Al introducir la matriz au-mentada a MATLAB, tenemos
Para obtener la forma escalonada reducida por filas dada en la ecuación (2) de la sección 1.6, procedemos como sigue.
C = 1 2 3 9 2 −1 1 8 3 0 −1 3 C = A b A b
Descripción Comandos de MATLABy despliegue
sumar (−2) veces la fila 1 a la fila 2 [Explicación del comando de MATLAB: La fila 2 se reemplaza con (o se hace igual a) la suma de −2 veces la fila 1 y la fila 2.]
sumar(−3) veces la fila 1 a la fila 3
multiplicar la fila 2 por (−1/5) [Explicación del comando de MATLAB: La fila 2 reemplaza con (o se iguala a)
veces la fila 2.] −1 5 C(2,:) = −2 ∗ C(1,:) + C(2,:) C = 1 2 3 9 0 −5 −5 −10 3 0 −1 3 C(3,:) = −3 ∗ C(1,:) + C(3,:) C = 1 2 3 9 0 −5 −5 −10 0 −6 −10 −24 C(2,:) = ( − 1/5) ∗ C(2,:) C = 1 2 3 9 0 1 1 2 0 −6 −10 −24
www.Matematica1.com
Esta última matriz aumentada implica que la solución del sistema lineal es x = 2, y= −1, z = 3.
En la reducción anterior de la matriz aumentada a su forma escalonada reducida por filas no se necesitaron intercambios de filas. Suponga que en cierto momento nece-sitáramos intercambiar las filas 2 y 3 de la matriz aumentada C. Para ello hacemos uso de un área de almacenamiento temporal (que aquí llamamos temp). En MATLAB pro-cedemos como sigue.
Descripción Comandos de MATLAB
Asignar la fila 2 al almacenamiento temporal. temp = C(2,:); Asignar el contenido de la fila 3 a la fila 2. C(2,:) = C(3,:); Asignar el contenido de la fila 2 (que se encuentra C(3,:) = temp;
en el almacenamiento temporal) a la fila 3.
(Los puntos y comas después de cada comando sólo eliminan el despliegue del conte-nido.)
Al utilizar los operadores dos puntos y asignación (=) como arriba, podemos indi-car a MATLABque realice operaciones por fila para obtener la forma escalonada reduci-da por filas o la forma escalonareduci-da por filas de una matriz. MATLABrealiza la aritmética y nosotros buscamos las operaciones por fila para efectuar la reducción. También debemos
Sec. 12.4 Operaciones elementales por fila con MATLAB 627
sumar (−2) veces la fila 2 a la fila 1
sumar 6 veces la fila 2 a la fila 3
multiplicar la fila 3 por (−1/4)
sumar (−1) veces la fila 3 a la fila 2
sumar (−1) veces la fila 3 a la fila 1
C(1,:)= −2∗C(2,:)+C(1,:) C = 1 0 1 5 0 1 1 2 0 −6 −10 −24 C(3,:)=6∗C(3,:)+C(3,:) C = 1 0 1 5 0 1 1 2 0 0 −4 −12 C(3,:)=(−1/4)∗C(3,:) C = 1 0 1 5 0 1 1 2 0 0 1 3 C(2,:)= −1∗C(3,:)+C(2,:) C = 1 0 1 5 0 1 0 −1 0 0 1 3 C(1,:)= −1∗C(3,:)+C(1,:) C = 1 0 0 2 0 1 0 −1 0 0 1 3
www.Matematica1.com
introducir el comando correcto de MATLAB. Si nos equivocamos en un factor o en el nú-mero de fila, el error se puede corregir, pero es posible que requiera varios pasos. Para podernos concentrar en la elección de las operaciones por fila para el proceso de reduc-ción, contamos con una rutina de nombre reduce en el disco de rutinas auxiliares de MATLABdisponible para los usuarios de este libro.*Una vez incorporadas estas rutinas a MATLAB, puede escribir help reduce y ver la siguiente pantalla:
La rutina reduce ahorra la escritura de comandos e indica a MATLABque realice la aritmética asociada con la rutina. Para utilizar reduce, introduzca la matriz aumentada C de su sistema, según lo analizado anteriormente, y escriba
reduce(C)
Mostraremos los tres primeros pasos de reduce para el ejemplo 8 de la sección 1.6. Las matrices utilizadas serán las mismas que aparecen en los tres primeros pasos del proce-so de reducción anterior, donde utilizamos directamente el operador “dos puntos” para realizar las operaciones por fila con MATLAB. Las pantallas aparecen aquí entre renglo-nes de signos de suma (+), y las entradas aparecen en recuadros.
REDUCE Perform row reduction on matrix A by
explicitly choosing row operations to use. A row operation can be "undone," but this feature cannot be used in succession. This routine is for small matrices, real or complex.
Use in the form ===>reduce <=== to select a demo or enter your own matrix A
Use the form ===>reduce(A) <===.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ***** "REDUCE" a Matrix by Row Reduction ***** The current matrix is:
A = 1 2 3 9 2 −1 1 8 3 0 −1 3 OPTIONS <1> Row(i) <===> Row(j) <2> k∗ Row(i) (k not zero) <3> k∗ Row(i) + Row(j) ===> Row(j) <4> Turn on rational display. <5> Turn off rational display. <-1> "Undo" previous row operation.
<0> Quit reduce!
ENTER your choice ===> 3
*Algunos de los siguientes comandos de MATLABnecesitan las rutinas incluidas en el disco.
Sec. 12.4 Operaciones elementales por fila con MATLAB 629
Enter multiplier. -2
Enter first row number. 1
Enter number of row that changes. 2 ⎧ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎩
Comentario: La opción 3 en el menú anterior significa lo mismo que
sumar un múltiplo de una fila a otra fila
La entrada anterior realiza la operación en la forma multiplicador * (primera fila) + (segunda fila)
⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎬ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎭ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ***** Replacement by Linear Combination Complete ***** The current matrix is:
A = 1 2 3 9 0 −5 −5 −10 3 0 −1 3 OPTIONS <1> Row(i) <===> Row(j) <2> k∗ Row(i) (k not zero) <3> k∗ Row(i) + Row(j) ===> Row(j) <4> Turn on rational display. <5> Turn off rational display. <-1> "Undo" previous row operation.
<0> Quit reduce!
ENTER your choice ===> 3
Enter multiplier. -3
Enter first row number. 1
Enter number of row that changes. 3
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ***** Replacement by Linear Combination Complete ***** The current matrix is:
A =
1 2 3 9
0 −5 −5 −10
0 −6 −10 −24
En este momento deberá llevar esta matriz a su forma escalonada reducida por fi-las mediante reduce.
Comentarios 1. Aunque las operaciones 1 a 3 de reduce aparecen con símbolos, significan lo mis-mo que las frases que describieron las operaciones por fila casi al principio de esta sección. La opción <3> forma una combinación lineal de filas para reemplazar una fila. Posteriormente utilizaremos esta terminología en este curso, y aparecerá en cier-ta pancier-tallas de reduce. (Véanse las secciones 12.7 y 1.6.)
2. Dentro de la rutina reduce, la matriz sobre la cual se realizan las operaciones por fi-la se lfi-lama A, sin importar el nombre de su matriz de entrada.
EJEMPLO 1 Resuelva el siguiente sistema lineal mediante reduce.
1 3x + 14y = 136 1 7x + 19y = 5963 OPTIONS <1> Row(i) <===> Row(j) <2> k∗ Row(i) (k not zero) <3> k∗ Row(i) + Row(j) ===> Row(j) <4> Turn on rational display. <5> Turn off rational display. <-1> "Undo" previous row operation.
<0> Quit reduce!
ENTER your choice ===> 2
Enter multiplier. -1/5
Enter row number. 2
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ***** Multiplication Complete *****
The current matrix is: A = 1 2 3 9 0 1 1 2 0 −6 −10 −24 OPTIONS <1> Row(i) <===> Row(j) <2> k∗ Row(i) (k not zero) <3> k∗ Row(i) + Row(j) ===> Row(j) <4> Turn on rational display. <5> Turn off rational display. <-1> "Undo" previous row operation.
<0> Quit reduce!
ENTER your choice ===>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
www.Matematica1.com
Solución Introduzca la matriz aumentada en MATLABy llámela C.
Luego escriba
reduce(C)
A continuación presentamos los pasos de reduce. Los datos aparecen en forma decimal, a menos que elija la opción para el despliegue de fracciones <4>. Los corres-pondientes despliegues de fracciones aparecen entre llaves en los siguientes ejemplos, con fines ilustrativos. Por lo general, los despliegues en forma decimal y de fracción no aparecen en forma simultánea.
C= [1/3 1/4 13/6;1/7 1/9 59/63] C =
0.3333 0.2500 2.1667
0.1429 0.1111 0.9365
Sec. 12.4 Operaciones elementales por fila con MATLAB 631
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ***** "REDUCE" a Matrix by Row Reduction ***** The current matrix is:
A =
0.3333 0.2500 2.1667 {1/3 1/4 13/6 } 0.1429 0.1111 0.9365 {1/7 1/9 59/63}
OPTIONS <1> Row(i) <===> Row(j) <2> k∗ Row(i) (k not zero) <3> k∗ Row(i) + Row(j) ===> Row(j) <4> Turn on rational display. <5> Turn off rational display. <-1> "Undo" previous row operation.
<0> Quit reduce!
ENTER your choice ===> 2 Enter multiplier. 1/A(1,1) Enter row number. 1
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ***** Row Multiplication Complete *****
The current matrix is: A =
1.0000 0.7500 6.5000 {1 3/4 13/2 } 0.1429 0.1111 0.9365 {1/7 1/9 59/63}
OPTIONS <1> Row(i) <===> Row(j) <2> k∗ Row(i) (k not zero) <3> k∗ Row(i) + Row(j) ===> Row(j) <4> Turn on rational display. <5> Turn off rational display. <-1> "Undo" previous row operation.
<0> Quit reduce!
ENTER your choice ===> 3
Enter multiplier. -A(2,1)
Enter first row number. 1
Enter number of row that changes. 2
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ***** Replacement by Linear Combination Complete ***** The current matrix is:
A =
1.0000 0.7500 6.5000 {1 3/4 13/2 }
0 0.0040 0.0079 {0 1/252 1/126}
OPTIONS <1> Row(i) <===> Row(j) <2> k∗ Row(i) (k not zero) <3> k∗ Row(i) + Row(j) ===> Row(j) <4> Turn on rational display. <5> Turn off rational display. <-1> "Undo" previous row operation.
<0> Quit reduce!
ENTER your choice ===> 2 Enter multiplier. 1/A(2,2)
Enter row number. 2
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ***** Row Multiplication Complete *****
The current matrix is: A =
1.0000 0.7500 6.5000 {1 3/4 13/2}
0 1.0000 2.0000 {0 1 2 }
OPTIONS <1> Row(i) <===> Row(j) <2> k∗ Row(i) (k not zero) <3> k∗ Row(i) + Row(j) ===> Row(j) <4> Turn on rational display. <5> Turn off rational display. <-1> "Undo" previous row operation.
<0> Quit reduce!
ENTER your choice ===> 3 Enter multiplier. -A(1,2)
Enter first row number. 2
Enter number of row that changes. 1
En consecuencia, la solución del sistema es x= 5, y = 2. ■ La rutina reduce le obliga a concentrarse en la estrategia del proceso de reducción por filas. Una vez que haya utilizado reduce con un número suficiente de sistemas li-neales, el proceso de reducción se convertirá en un cálculo más bien sistemático. La for-ma escalonada reducida por filas de una for-matriz se utiliza en muchas partes del álgebra lineal para proporcionar la información relativa a varios conceptos (algunos de los cua-les ya hemos analizado). Como tal, la forma escalonada reducida por filas de una matriz se convierte en un paso de procesos más complejos. Debido a ello, MATLAB proporcio-na uproporcio-na manera automática de obtener la forma escaloproporcio-nada reducida por filas (reduced row echelon form), llamada rref. Una vez introducida la matriz A en cuestión, donde A representa una matriz aumentada, sólo escriba
rref(A)
y MATLABresponderá mediante el despliegue de la forma escalonada reducida por filas de A.
EJEMPLO 2 En el ejemplo 14 de la sección 1.6, se pedía la solución del sistema homogéneo
Forme la matriz aumentada C en MATLABpara obtener C = 1 1 1 1 0 1 0 0 1 0 1 2 1 0 0 x + y + z + w = 0 x + w = 0 x + 2y + z = 0.
Sec. 12.4 Operaciones elementales por fila con MATLAB 633
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ***** Replacement by Linear Combination Complete ***** The current matrix is:
A =
1.0000 0 5.0000 {1 0 5}
0 1.0000 2.0000 {0 1 2}
OPTIONS <1> Row(i) <===> Row(j) <2> k∗ Row(i) (k not zero) <3> k∗ Row(i) + Row(j) ===> Row(j) <4> Turn on rational display. <5> Turn off rational display. <-1> "Undo" previous row operation.
<0> Quit reduce!
ENTER your choice ===> 0
∗ ∗ ∗∗ ===> REDUCE is over. Your final matrix is: A =
1.0000 0 5.0000
0 1.0000 2.0000
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ahora escriba
rref(C) y MATLABdesplegará
Esto implica que la incógnita w se puede elegir de manera arbitraria; digamos, w = r, donde r es cualquier número real. Por lo tanto, la solución es
x= −r, y= r, z= −r, w = r. ■
12.5
INVERSAS DE MATRICES EN M
ATLAB
Como estudiamos en la sección 1.7, para que una matriz cuadrada A sea no singular, la forma escalonada reducida por filas de A debe ser la matriz identidad. Por lo tanto, con MATLABse puede determinar si A es singular o no calculando su forma escalonada reducida por filas mediante reduce o rref. Si el resultado es la matriz identidad, enton-ces A es no singular. Tal cálculo determina si existe o no la inversa, pero, si existe, no calcula la inversa de manera explícita. Para calcular la inversa de A, podemos pro-ceder como en la sección 1.7 y determinar la forma escalonada reducida por filas de . Si la matriz resultante es , entonces Q= A−1. Con MATLAB, una vez in-troducida una matriz no singular A, podemos calcular inmediatamente la inversa me-diante
reduce([A eye(size(A))]) o calcularla mediante
rref([A eye(size(A))])
Por ejemplo, si utilizamos la matriz A del ejemplo 5 de la sección 1.7, tenemos
Al introducir la matriz A a MATLABy escribir el comando rref([A eye(size))]) se obtiene
Para extraer la matriz inversa hacemos
Ainv = ans(:,4:6) ans = 1.0000 0 0 1.6250 −0.5000 −0.1250 0 1.0000 0 −1.8750 0.5000 0.3750 0 0 1.0000 1.2500 0 −0.2500 A= ⎡ ⎣10 12 13 5 5 1 ⎤ ⎦ . I Q A I ans = 1 0 0 1 0 0 1 0 −1 0 0 0 1 1 0
www.Matematica1.com
y obtenemos
Para ver el resultado en forma racional, utilizamos format rat Ainv lo cual da
Escribimos el comando
format short
Por ello, nuestros comandos anteriores en MATLABse pueden emplear como los cálcu-los a mano descritos en la sección 1.7.
Por conveniencia, existe una rutina que calcula las inversas de manera directa, cu-yo comando es invert. Para la matriz anterior A escribiríamos
invert(A)
y el resultado sería idéntico al obtenido en Ainv utilizando rref. Si la matriz no es cua-drada o es singular, aparecerá un mensaje de error.
12.6
VECTORES EN M
ATLAB
Un n-vector x (vea la sección 4.2) se puede representar en MATLABcomo una matriz columna con n elementos,
o como una matriz fila con n elementos,
En un problema o ejercicio particular, podemos elegir una forma de representar los n-vectores y no modificarla en lo sucesivo.
Las operaciones vectoriales de la sección 4.2 corresponden a operaciones sobre matrices de n× 1, o columnas. Si el n-vector se representa mediante matrices fila en MATLAB, entonces las operaciones vectoriales corresponden a operaciones sobre matri-ces 1 × n, las cuales son casos particulares de la suma, resta y multiplicación por una escalar de las matrices, ya analizados en la sección 12.2.
La norma o longitud de un vector x en MATLABse obtiene mediante el comando norm(x) x = x1 x2 · · · xn . x= ⎡ ⎢ ⎢ ⎢ ⎣ x1 x2 ... xn ⎤ ⎥ ⎥ ⎥ ⎦, Ainv = 13/8 −1/2 −1/8 −15/8 1/2 3/8 5/4 0 −1/4 Ainv = 1.6250 −0.5000 −0.1250 −1.8750 0.5000 0.3750 1.2500 0 −0.2500
Sec. 12.6 Vectores en MATLAB 635
Este comando calcula la raíz cuadrada de la suma de los cuadrados de los componen-tes de x, que es igual a x, según lo analizado en la sección 4.2.
La distancia entre los vectores x y y en Rnen MATLABestá dada por norm(x − y)
EJEMPLO 1 Sean
Introducimos estos vectores en R4a MATLABcomo columnas. Entonces norm(u) despliega mientras que norm(v) da como resultado y norm(u − v) produce ■
En MATLAB, el producto punto de un par de vectores u y v de Rn, se calcula me-diante el comando
dot(u,v)
Para los vectores del ejemplo 1, MATLABda el producto punto como
Según lo analizado en la sección 4.2, el concepto de producto punto es útil para de-finir el ángulo entre n-vectores. La ecuación (4) de la sección 4.2 nos dice que el cose-no del ángulo θ entre u y v es
En MATLAB, el coseno del ángulo entre u y v se calcula mediante el comando dot(u,v)/(norm(u) * norm(v))
El ángulo θ se puede calcular mediante el arco coseno del valor de la expresión ante-rior. En MATLAB, la función arco coseno se escribe como acos. El resultado será un án-gulo en radianes. cosθ = u·v u v . ans = 9 ans = 1.7321 ans = 3.7417 ans = 2.6458 u= ⎡ ⎢ ⎢ ⎣ 2 1 1 −1 ⎤ ⎥ ⎥ ⎦ y v = ⎡ ⎢ ⎢ ⎣ 3 1 2 0 ⎤ ⎥ ⎥ ⎦ .
www.Matematica1.com
EJEMPLO 2 Para los vectores u y v del ejemplo 1, el ángulo entre ellos se calcula como c = dot(u,v)/(norm(u) * norm(v));
angle = acos(c) lo cual despliega
que es de aproximadamente 24.61°. ■
12.7
APLICACIONES DE LAS COMBINACIONES LINEALES EN M
ATLAB
El concepto de combinación lineal, analizado en la sección 6.2, es fundamental para muchos temas de álgebra lineal. Las ideas de espacio generado, independencia lineal, dependencia lineal y base se fundamentan en la formación de combinaciones lineales de vectores. Además, las operaciones elementales por fila analizadas en las secciones 1.6 y 12.4 son esencialmente de la forma “reemplazar una fila por una combinación lineal de filas”. Es claro que esto ocurre cuando sumamos el múltiplo de una fila a otro. (Vea también la rutina reduce en la sección 12.4.) Desde este punto de vista, la forma esca-lonada reducida por filas y la forma escaesca-lonada por filas son procesos que implemen-tan las combinaciones lineales de las filas de una matriz. Por lo implemen-tanto, las rutinas reduce y rref de MATLABdeben ser útiles para resolver problemas relacionados con las com-binaciones lineales.
En esta sección analizamos la forma de utilizar MATLABpara resolver problemas relacionados con las combinaciones lineales, los espacios generados por ciertos vecto-res, la independencia lineal, la dependencia lineal y las bases. La estrategia básica con-siste en plantear un con-sistema lineal relacionado con el problema y hacerse preguntas como: “¿existe una solución?” o bien “¿la solución trivial es la única solución?”
EL PROBLEMA DE LA COMBINACIÓN LINEAL
Dado un espacio vectorial V y un conjunto de vectores S= {v1, v2, . . . , vk} en V, hay que determinar si v, perteneciente a V, se puede expresar como una combinación lineal de los elementos de S. Es decir, ¿podemos encontrar un conjunto de escalares c1, c2,...ck tales que
c1v1+ c2v2+ · · · +ckvk= v? Existen varias situaciones comunes.
Caso 1. Si los vectores en S son matrices fila, debemos construir (como en el ejemplo
11 de la sección 6.2) un sistema lineal cuya matriz de coeficientes A es
y cuyo lado derecho es vT. Es decir, las columnas de A son las matrices fila del conjun-to S¸ convertidas en columnas. Sean c= [c1 c2 · · · ck] y b= vT; transformamos el sistema lineal Ac = b mediante reduce o rref en MATLAB. Si el sistema es consisten-te, de modo que no aparezcan filas de la forma 0 0 · · · 0 q , q 0, entonces
A= ⎡ ⎢ ⎢ ⎢ ⎣ v1 v2 ... vk ⎤ ⎥ ⎥ ⎥ ⎦ T angle = 0.4296
Sec. 12.7 Aplicaciones de las combinaciones lineales en MATLAB 637
el vector v se puede escribir como una combinación lineal de los vectores en S. En ese caso, la solución del sistema proporciona los valores de los coeficientes. Advertencia: en muchas ocasiones, basta decidir si el sistema es consistente para determinar si v es una combinación lineal de los elementos de S. Lea la pregunta con cuidado.
EJEMPLO 1 Para aplicar MATLABal ejemplo 11 de la sección 6.2, procedemos como sigue. Definimos
Luego utilizamos el comando
rref([A b]) para obtener
Recuerde que este despliegue representa la forma escalonada reducida por filas de una matriz aumentada, lo cual indica que el sistema es consistente, con solución
c1= 1, c2= 2, c3= −1.
Por lo tanto, v es una combinación lineal de v1, v2y v3. ■
Caso 2. Si los vectores en S son matrices columna, entonces sólo juntamos las
colum-nas para formar la matriz de coeficientes
y hacemos b= v. Procedemos como en el caso 1.
Caso 3. Si los vectores en S son polinomios, debemos asociar cada polinomio a una
co-lumna de coeficientes. Asegúrese de que los términos faltantes en el polinomio tengan asociado un coeficiente nulo. Una forma de proceder consiste en tomar el coeficiente del término de mayor potencia como la primera entrada de la columna, el coeficiente del término de la siguiente mayor potencia como la segunda entrada, y así sucesivamente. Por ejemplo,
Luego resolvemos el problema de combinación lineal como en el caso 2.
Caso 4. Si los vectores en S son matrices de m × n, entonces a cada una de estas
ma-trices Ajle asociamos una columna vjjuntando las columnas, una debajo de la otra. En MATLAB, esta transformación se realiza mediante el comando reshape. Luego procede-mos como en el caso 2.
EJEMPLO 2 Dada la matriz
P= 1 2 3 4 5 6 . t2+ 2t + 1 −→ ⎡ ⎣12 1 ⎤ ⎦ , t2+ 2 −→ ⎡ ⎣10 2 ⎤ ⎦ , 3t− 2 −→ ⎡ ⎣ 03 −2 ⎤ ⎦ . A = v1 v2 · · · vk ans = 1 0 0 1 0 1 0 2 0 0 1 −1 A = 1 2 1;1 0 2; 1 1 0 b = 2 1 5 [ ] [ ]
www.Matematica1.com
Para asociarle una matriz columna según lo descrito, primero introducimos P a MATLAB y luego escribimos el comando
v = reshape(P,6,1) para obtener
Para mayor información, escriba help reshape. ■
EL PROBLEMA DEL ESPACIO GENERADO POR
UN CONJUNTO DE VECTORES
Hay dos clases comunes de problemas relacionados con este concepto. El primero es: Dado el conjunto de vectores S = {v1, v2, . . . , vk} y el
vector v en un espacio vectorial V, ¿está v en el espacio generado por S? Este problema es idéntico al de la combinación lineal ya analizado, pues queremos sa-ber si v es una combinación lineal de los elementos de S. Como hemos demostrado, en muchos casos podemos emplear MATLABpara resolver este problema.
La segunda clase de problemas relacionados con el concepto de espacio generado es: Dados los vectores S= {v1, v2, . . . , vk} en un espacio
vectorial V, ¿el espacio generado por S es igual a V?
Aquí nos preguntamos si todos los vectores en V se pueden escribir como una combi-nación lineal de los vectores en S. En este caso, el sistema lineal construido tiene un la-do derecho con valores arbitrarios, que corresponden a un vector arbitrario en V (véase el ejemplo 1 de la sección 6.3). Como MATLABsólo puede utilizar valores numéricos en rutinas como reduce y rref, no podemos aprovecharlo para responder a esta pregunta (de manera completa).
Con respecto a la segunda pregunta, hay un caso particular que aparece con cierta frecuencia y que puede ser resuelto por MATLAB. En la sección 6.4 analizamos el con-cepto de dimensión de un espacio vectorial. La dimensión de un espacio vectorial V es el número de vectores en una base (véase la sección 6.4) que es el menor número de vectores que pueden generar a V. Si sabemos que V tiene dimensión k y que el conjun-to S tiene k vecconjun-tores, enconjun-tonces podemos proceder como sigue para ver si el espacio ge-nerado por S es igual a V. Planteamos un sistema lineal Ac= b asociado con la pregunta del espacio generado por los vectores. Si la forma escalonada reducida por filas de la matriz de coeficientes A es
donde 0 es una submatriz con ceros, entonces cualquier vector en V se puede expresar mediante elementos de S. En realidad, S es una base V. En MATLABpodemos hacer re-duce o rref sobre la matriz A. Si A es cuadrada, también podemos utilizar det. Intente esta estrategia en el ejemplo 1 de la sección 6.3.
Otra pregunta relacionada con el espacio generado por un conjunto de vectores se refiere a la determinación de un conjunto que genere el conjunto de soluciones de un sistema homogéneo de ecuaciones, Ax= 0. La estrategia en MATLABconsiste en deter-minar la forma escalonada reducida por filas de mediante el comando
rref(A) A 0 Ik 0 , v = 1 4 2 5 3 6
Sec. 12.7 Aplicaciones de las combinaciones lineales en MATLAB 639
(No hay necesidad de incluir la matriz aumentada, pues sólo tiene ceros.) Damos for-ma a la solución general del sistefor-ma y la expresamos como una combinación lineal de las columnas. Éstas forman un conjunto generador del conjunto de soluciones del sis-tema. Véase el ejemplo 6 de la sección 6.3
EL PROBLEMA DE LA INDEPENDENCIA/DEPENDENCIA
LINEAL
La independencia o dependencia lineal de un conjunto de vectores S= {v1,v2, . . . , vk} es una cuestión de combinaciones lineales. El conjunto S es linealmente independiente si la única forma en que la combinación lineal c1v1+ c2v2+ · · · + ckvkproduce el vec-tor cero es cuando c1= c2= · · · ck= 0. Si podemos obtener el vector cero con alguno de los coeficientes cj 0, entonces S es linealmente dependiente. Si seguimos el aná-lisis del problema de combinación lineal, producimos el sistema lineal asociado
Ac = 0.
Observe que el sistema lineal es homogéneo. Tenemos el siguiente resultado: S es linealmente independiente si y sólo si Ac= 0
sólo tiene la solución trivial.
En caso contrario, S es linealmente dependiente. Véanse los ejemplos 8 y 9 de la sec-ción 6.3. En razón de que ya tenemos el sistema homogéneo Ac= 0, podemos aprove-char la rutina reduce o rref de MATLAB para analizar si el sistema tiene o no una solución no trivial.
Un caso particular se presenta cuando tenemos k vectores en un conjunto S de un espacio vectorial S de dimensión k (véase la sección 6.4) Sea Ac = 0 el sistema lineal asociado con el problema de combinación lineal. Se puede demostrar que
S es linealmente independiente si y sólo si la forma escalonada reducida por filas de A es
donde 0 es una submatriz con ceros. Podemos extender esta conclusión diciendo que S es una base de V (vea el teorema 6.9). En MATLAB, podemos utilizar reduce o rref sobre A como apoyo al analizar tal situación.
12.8
TRANSFORMACIONES LINEALES EN M
ATLAB
Consideremos el caso particular de las transformaciones lineales L: Rn→ Rm, que se pueden representar mediante una matriz A de m× n (véase la sección 4.3). Entonces, para x en Rn,
L(x) = Ax,
que está en Rm. Por ejemplo, supongamos que L: R4→ R3está dada por L(x) = Ax, donde A es la matriz La imagen de x= ⎡ ⎢ ⎢ ⎣ 1 2 −1 0 ⎤ ⎥ ⎥ ⎦ A= ⎡ ⎣12 −1 −2 −2−3 −5 −6 1 −2 −3 −4 ⎤ ⎦ . Ik 0 ,
www.Matematica1.com
bajo L es
La imagen de una transformación lineal L es el subespacio de Rmformado por las imágenes de todos los vectores de Rn. Se puede demostrar fácilmente que
la imagen de L= al espacio generado por las columnas de A.
(Véase el ejemplo 11 de la sección 10.2.) Esto implica que “conocemos la imagen de L” cuando tenemos una base para el espacio generado por las columnas de A. Hay dos formas sencillas de determinar una base para el espacio generado por las columnas de A.
1. Las transpuestas de las filas no nulas de rref(Aⴕ) forman una base para el espacio generado por las columnas (véase el ejemplo 4 de la sección 6.6).
2. Si las columnas que contienen los unos principales de rref(A) son k1< k2< · · · < kr, entonces las columnas k1, k2, . . . , krde A son una base para el espacio generado por las columnas de A (véase el ejemplo 4 de la sección 6.6).
Para la matriz A anterior, tenemos que
y, por lo tanto, es una base para la imagen de L. Con el segundo método,
Así, tenemos que las columnas 1 y 2 de A son una base para el espacio generado por las columnas de A y, por lo tanto, la imagen de L es una base. Además, se puede usar la rutina lisub. Utilice help para obtener los comandos correspondientes.
El núcleo de una transformación lineal es el subespacio de todos los vectores en Rncuya imagen es el vector cero en Rm, lo cual corresponde al conjunto de todos los vectores x que satisfacen
L (x) = Ax = 0.
Por lo tanto, tenemos que el núcleo de L es el conjunto de todas las soluciones del sis-tema homogéneo
Ax= 0,
que es el espacio nulo de A. Así, “conocemos el núcleo de L” si tenemos una base para el espacio nulo de A. Para determinar la base, formamos la solución general de Ax= 0 y “la separamos en una combinación lineal de columnas mediante las constan-tes arbitrarias presenconstan-tes”. Las columnas utilizadas forman una base para el espacio nulo de A. Este procedimiento utiliza rref(A). Para la matriz A anterior, tenemos
rref(A)= ⎡ ⎣10 01 −11 02 0 0 0 0 ⎤ ⎦ . rref(A)= ⎡ ⎣10 01 −11 02 0 0 0 0 ⎤ ⎦ . ⎧ ⎨ ⎩ ⎡ ⎣ 10 −1 ⎤ ⎦ , ⎡ ⎣01 1 ⎤ ⎦ ⎫ ⎬ ⎭ rref(A )= ⎡ ⎢ ⎢ ⎣ 1 0 −1 0 1 1 0 0 0 0 0 0 ⎤ ⎥ ⎥ ⎦ . L(x) = Ax = ⎡ ⎣12 −1 −2 −2−3 −5 −6 1 −2 −3 −4 ⎤ ⎦ ⎡ ⎢ ⎢ ⎣ 1 2 −1 0 ⎤ ⎥ ⎥ ⎦ = ⎡ ⎣11 0 ⎤ ⎦ .
Sec. 12.8 Transformaciones lineales en MATLAB 641
Si damos valores arbitrarios a las variables correspondientes a las columnas sin unos principales, tenemos que
x3= r y x4= t. Entonces, la solución general de Ax = 0 está dada por
En consecuencia, las columnas
forman una base para el núcleo de L. También la rutina homsoln mostrará la solución general de un sistema lineal homogéneo. Además, el comando null produce una base ortonormal para el espacio nulo de una matriz. Utilice help para mayor información acerca de estos comandos.
En resumen, el uso adecuado del comando rref en MATLABnos proporcionará las bases para el núcleo y la imagen de la transformación lineal L(x) = Ax.
⎡ ⎢ ⎢ ⎣ 1 −1 1 0 ⎤ ⎥ ⎥ ⎦ y ⎡ ⎢ ⎢ ⎣ 0 −2 0 1 ⎤ ⎥ ⎥ ⎦ x= ⎡ ⎢ ⎢ ⎣ x1 x2 x3 x4 ⎤ ⎥ ⎥ ⎦ = ⎡ ⎢ ⎢ ⎣ r −r − 2t r t ⎤ ⎥ ⎥ ⎦ = r ⎡ ⎢ ⎢ ⎣ 1 −1 1 0 ⎤ ⎥ ⎥ ⎦ + t ⎡ ⎢ ⎢ ⎣ 0 −2 0 1 ⎤ ⎥ ⎥ ⎦ .
www.Matematica1.com
12.9
RESUMEN DE COMANDOS DE M
ATLAB
En esta sección enumeramos los principales operadores y comandos de MATLAB utili-zados en este libro. La lista está dividida en dos partes: comandos que están incluidos en el software MATLAB, y las rutinas especiales que están disponibles para los usuarios de este libro. Ambas partes tienen una referencia cruzada con las secciones del capítu-lo 12 donde se analizan o bien con las secciones donde aparecen ejercicios de MATLAB que son la primera referencia. Para facilitar la referencia hemos incluido una breve des-cripción de cada rutina adicional, que está disponible para los usuarios de esta obra. Estas descripciones también están disponibles mediante help de MATLAB, una vez que se haya completado el procedimiento de instalación. La descripción de cualquier co-mando de MATLABse obtiene mediante help. (Véase la introducción del capítulo.)
Sec. 12.9 Resumen de comandos de MATLAB 643
Comandos incluidos en MATLAB
ans 12.1 inv 12.5 rref 12.4, 1.6
clear 12.1, 1.2 norm 12.6 size 12.1, 1.7
conj A.1 null 12.8 sqrt A.1
det 12.7, 3.1 ones 12.3, 1.3 sum 2.3
diag 12.2, 1.3 poly 8.1 tril 12.2, 1.4
dot 12.6, 1.3, 4.2 polyval 12.3 triu 12.2, 1.4
eig 8.3 polyvalm 12.3, 1.4 zeros 12.3
exit 12 quit 12 \ 1.6
eye 12.3, 1.6 rand 12.3, 1.4 ; 12.1
fix 12.3, 1.4 rank 6.6 : 12.1
format 12.1, 1.2 rat 12.1 (apóstrofo) 12.2, 1.2
help 12 real A.1 +, −, ∗, /,∧ 12.2, 12.3
hilb 12.1, 1.2 reshape 12.7
image A.1 roots 8.1
Comandos adicionales
adjoint 1.2 crossprd 4.5 lsqline 7.2
binadd 1.2 crossdemo 4.5 matrixtrans 1.5, 2.3
bingen 1.2 gschmidt 6.8 planelt 2.3, 5.1
binprod 1.3 homsoln 12.8, 6.5 project 2.3
binrand 1.4 invert 12.5 reduce 12.4, 1.6
binreduce 1.6 linprog 11.2 vec2demo 4.1
cofactor 3.2 lpstep 11.2 vec3demo 4.2
Notas:12 se refiere a la introducción del capítulo 12. Tanto rref como reduce se uti-lizan en muchas secciones. En el disco aparecen también varias utilerías necesarias para estos comandos que también están disponibles para los usuarios de este libro: arrowh, mat2strh y blkmat. Las siguientes descripciones aparecen también en res-puesta al comando help. En la descripción de varios comandos, la notación es un poco distinta a la del texto.
Descripción de los comandos
ADJOINT Calcula la adjunta clásica de una matriz cuadrada A. Si A no es cuadrada, regresa una matriz vacía.
*** Esta rutina sólo debe ser utilizada por los estudiantes para verificar los cálculos de la adjunta y no como parte de una rutina para calcular inversas. Véase invert o inv.
Utilice la forma ==> adjoint (A) <==
BINADD Utilería para sumar dos vectores binarios mediante aritmética binaria. Comprueba si los sumandos son del mismo tamaño y binarios.
Utilice la forma ==> sum = binadd(x,y) o binadd(x,y) <==
BINGEN Genera una matriz de códigos binarios para enteros desde start hasta fin en pasos de tamaño 1 como columnas de num bits.
Utilice la forma ==> bingen (start, fin, num) <== o
==> M = bingen(start, fin, num) <==
donde start es un entero no negativo, con el cual se inicia, y fin es un entero no negativo mayor o igual a start, con el cual se termina.
num es el número de bits para usar en la generación de la forma binaria de los enteros.
BINPROD Utilería para calcular el producto matricial A*B de dos matrices binarias. Verifica que A y B sean binarias.
Utilice la forma ==> C = binprod (A, b) o binprod (A, B) <== BINRAND Genera de manera aleatoria una matriz binaria de m por n bits.
Utilice la forma ==> binrand (m, n) o B = binrand (m, n) <==
BINREDUCE Realiza la reducción por filas sobre una matriz binaria A, pero se deben seleccionar de manera explícita las operaciones por filas que deben usarse. Una operación se puede “deshacer”, pero esta característica no puede usarse en sucesión. (Esta rutina sólo es para matrices binarias.) Utilice la forma ==> binreduce <==
o la forma ==> binreduce (A) <==
BKSUB Realiza la sustitución hacia atrás de un sistema triangular superior Ax=b. Si A no es cuadrada, triangular superior y no singular, aparece un mensaje de error. En caso de que se muestre un error, la solución que se regresa es de ceros.
Utilice la forma ==> bksub (A, b) <==
COFACTOR Calcula el cofactor (i, j) de la matriz A. Si A no es cuadrada aparece un mensaje de error.
*** Esta rutina sólo debe ser utilizada por los estudiantes para verificar los cálculos de cofactores.
Utilice la forma ==> cofactor (i, j, A) <==
CROSSDEMO Despliega una pareja de vectores tridimensionales y su producto cruz. Los vectores de entrada X y Y aparecen en una perspectiva tridimensional, junto con su producto cruz. Para ayudar a la visualización, aparece un conjunto de ejes de coordenadas tridimensionales.
Utilice la forma ==> crossdemo (X, Y) <==
CROSSPRD Calcula el producto cruz de los vectores x y y en el espacio
tridimensional. La salida es un vector ortogonal a los dos vectores originales x y y. La salida se regresa como una matriz fila con tres componentes [v1 v2 v3] que se interpreta como v1*i + v2*j + v3*k, donde i, j, k son los vectores unitarios en las direcciones x, y y z respectivamente.
Utilice la forma ==> v = crossprd (x, y) <==
FORSUB Realiza la sustitución hacia adelante en un sistema triangular inferior Ax = b. Si A no es cuadrada, triangular inferior y no singular aparece un mensaje de error. En caso de error, la solución que regresa sólo tiene ceros.
Utilice la forma ==> forsub (A, b) <==
GSCHMIDT Realiza el proceso de Gram-Schmidt sobre las columnas de x. La base ortonormal aparece en la columna de y, a menos que aparezca un segundo argumento, en cuyo caso y sólo contiene una base ortogonal. El segundo argumento puede tener cualquier valor.
Utilice la forma ==> y = gschmidt (x) <== o ==> y = gschmidt (x, v) <==
HOMSOLN Determina la solución general de un sistema homogéneo de ecuaciones. La rutina regresa un conjunto de vectores base para el espacio nulo de Ax=0.
Utilice la forma ==> ns = homsoln (A) <==
Si existe un segundo argumento, se despliega la solución general. Utilice la forma ==> homsoln (A,1) <==
Esta opción supone que la solución general tiene, como máximo, 10 constantes arbitrarias.
Sec. 12.9 Resumen de comandos de MATLAB 645