Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las...

39
1 Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA del Álgebra Lineal Hernán Darío Toro Agudelo 2019-02-06 Justificación Parte importante de un curso moderno de Álgebra Lineal son los métodos de solución de sistemas de ecuaciones lineales por medio de operaciones fila sobre matrices que los representan. Al abordarse este tema en clase, se ha generado una censura autoimpuesta por docentes quienes, por agilizar las ilustraciones en clase y no perder tiempo en operatividad, favorecen problemas de dimensión trivialmente baja, lo que aleja al estudiante de las aplicaciones cotidianas de la ingeniería que involucran centenares o miles de ecuaciones en un número comparable de variables. El uso del lenguaje Matlab y su clon Octave presenta una sintaxis muy intuitiva y ágil que permite al estudiante efectuar operaciones fila sobre matrices para reducir y eliminar de forma “manual” a la matriz que represente al sistema de ecuaciones. Al enseñar estos procesos, esta estrategia de utilizar un sistema de cómputo de forma “manual” tiene la ventaja de que permite al estudiante concentrarse en la asimilación de los conceptos y procesos y lo ejercita en el uso de matrices de dimensiones más realistas respecto a las aplicaciones frecuentes de ingeniería. Este enfoque es más pertinente que los dos extremos viciosos, a saber, uno: usar matrices minúsculas que alejan de las aplicaciones de la ingeniería, y dos: usar comandos automáticos para reducción de matrices, que ocultan el proceso de solución al estudiante. Dadas las diferencias en competencias computacionales entre estudiantes y docentes de diferentes generaciones, en esta breve introducción se partirá por completo desde cero, y sólo se enseñarán los elementos necesarios de la sintaxis para reducir matrices manualmente ayudados por el computador. Como esta funcionalidad se encuentra de sobra en el servidor gratuito octave- online.net en la opción sin cuenta inscrita, se dejará para entregas posteriores los aspectos de descarga e instalación de tales lenguajes en el computador local. Por último, este tutorial estará completamente intercalado de sugerencias simples para ejercitarse sobre lo visto, casi que sobre la misma marcha. A pesar de que la mayoría de las sugerencias de ejercicio puedan ser vistas como algo casi trivial, se recomienda encarecidamente al lector para que las lleve a cabo. Matlab/Octave es un lenguaje, y cualquier experto en didáctica de los lenguajes sabe que, a diferencia de otras funciones humanas, el obtener fluidez en un lenguaje REQUIERE IRREMISIBLEMENTE LA REPETICIÓN CONTINUA. De lo contrario, se olvida. Reciba usted una cordial bienvenida a este camino de aprendizaje.

Transcript of Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las...

Page 1: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

1

Una introducción básica

a Matlab/Octave PARA

LA DIDÁCTICA del

Álgebra Lineal

Hernán Darío Toro Agudelo

2019-02-06

Justificación

Parte importante de un curso moderno de Álgebra Lineal son los métodos de solución de sistemas

de ecuaciones lineales por medio de operaciones fila sobre matrices que los representan. Al

abordarse este tema en clase, se ha generado una censura autoimpuesta por docentes quienes, por

agilizar las ilustraciones en clase y no perder tiempo en operatividad, favorecen problemas de

dimensión trivialmente baja, lo que aleja al estudiante de las aplicaciones cotidianas de la

ingeniería que involucran centenares o miles de ecuaciones en un número comparable de

variables.

El uso del lenguaje Matlab y su clon Octave presenta una sintaxis muy intuitiva y ágil que permite

al estudiante efectuar operaciones fila sobre matrices para reducir y eliminar de forma “manual”

a la matriz que represente al sistema de ecuaciones. Al enseñar estos procesos, esta estrategia de

utilizar un sistema de cómputo de forma “manual” tiene la ventaja de que permite al estudiante

concentrarse en la asimilación de los conceptos y procesos y lo ejercita en el uso de matrices de

dimensiones más realistas respecto a las aplicaciones frecuentes de ingeniería. Este enfoque es

más pertinente que los dos extremos viciosos, a saber, uno: usar matrices minúsculas que alejan

de las aplicaciones de la ingeniería, y dos: usar comandos automáticos para reducción de matrices,

que ocultan el proceso de solución al estudiante.

Dadas las diferencias en competencias computacionales entre estudiantes y docentes de diferentes

generaciones, en esta breve introducción se partirá por completo desde cero, y sólo se enseñarán

los elementos necesarios de la sintaxis para reducir matrices manualmente ayudados por el

computador. Como esta funcionalidad se encuentra de sobra en el servidor gratuito octave-

online.net en la opción sin cuenta inscrita, se dejará para entregas posteriores los aspectos de

descarga e instalación de tales lenguajes en el computador local.

Por último, este tutorial estará completamente intercalado de sugerencias simples para ejercitarse

sobre lo visto, casi que sobre la misma marcha. A pesar de que la mayoría de las sugerencias de

ejercicio puedan ser vistas como algo casi trivial, se recomienda encarecidamente al lector para

que las lleve a cabo. Matlab/Octave es un lenguaje, y cualquier experto en didáctica de los

lenguajes sabe que, a diferencia de otras funciones humanas, el obtener fluidez en un lenguaje

REQUIERE IRREMISIBLEMENTE LA REPETICIÓN CONTINUA. De lo contrario, se olvida.

Reciba usted una cordial bienvenida a este camino de aprendizaje.

Page 2: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

2

Contenido

0. Entrada a Octave Online.

1. Octave como calculadora.

2. Entrada de variables.

3. Creación de vectores y matrices.

4. Matrices fundamentales.

5. Indexación elemental de matrices.

6. Operaciones por fila en matrices.

7. Reducción manual de matrices con fines didácticos.

8. Redución automática de matrices con el comando rref.

9. Creación de matrices por bloques.

10. Álgebra básica de matrices.

0. Entrada a Octave Online

Octave es un lenguaje de programación interpretado de alto nivel que surgió como alternativa

gratuita a Matlab. Aunque se puede descargar un instalador en la dirección

https://www.gnu.org/software/octave/ , el objetivo para este documento es tan básico que no es

necesario instalarlo. Los comandos que se usarán para explicar Álgebra Lineal con Octave se

pueden efectuar en la página http://octave-online.net , a la cual se puede acceder dando un clic

en el enlace, o ingresando esa página en el campo de dirección URL de su explorador de

internet. Por ejemplo, en Google Chrome se haría así:

Eso nos lleva a la ventana de bienvenida de Octave Online. Se puede comenzar a usar la interfaz

de usuario para hacer cálculos después de cerrar la imagen de bienvenida dando click en la ×

señalada en la imagen a continuación:

Page 3: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

3

1. Octave como calculadora

La interfaz de usuario de Octave permite efectuar cálculos interactivos usando la notación

estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran

efectuar en la casilla de entrada de comandos que se señala en la imagen siguiente, seguida de la

tecla intro (enter, o return) que en adelante representaremos con el signo ↵.

Se sugiere encarecidamente que, en adelante, el lector tenga una ventana de explorador abierta

con ese sitio web, para que vaya haciendo las operaciones sugeridas en la interfaz web de

Octave.

Por ejemplo, si se quiere sumar 𝜋 + 𝑒, bastaría teclear:

pi + e ↵

La salida que se obtiene es la siguiente:

ans = 5.8599

Octave siempre almacena el último cálculo realizado en una variable temporal llamada “ans”

(del inglés “answer”, respuesta). Al realizar cualquier otro cálculo directo el último resultado

será el que se almacene en esa variable. Por ejemplo, si se quiere obtener el seno de 𝜋/7, se

escribe en la casilla de comandos

sin(pi/7) ↵

se obtiene:

ans = 0.43388

Para recordar el valor del último cálculo realizado basta escribir:

Page 4: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

4

ans ↵

Octave le recordará cuál fue el último valor calculado, en nuestro caso,

ans = 0.43388

Otro aspecto importante de Matlab/Octave es que se puede acceder al historial de comandos

introducidos por el usuario presionando la flecha hacia arriba (para ir hacia los más antiguos) y

flecha hacia abajo (para devolverse hacia los más recientes). Se insta al lector a que verifique lo

anterior. Una vez localizado un comando previamente introducido que quiera volverse a

realizar, basta presionar ↵

Por ejemplo, si se quisiera repetir el primer comando que usamos en este documento, la suma de

𝜋 con 𝑒, el usuario sólo tendría que presionar la siguiente secuencia de teclas:

↑ ↑ ↑ ↵

Lo que arrojaría:

ans = 5.8599

Vale la pena mencionar que para borrar todas las variables almacenadas en memoria antes de

comenzar un nuevo trabajo, se puede usar la orden: clear all ↵ mientras que, para borrar

la pantalla de la consola, sin borrar ninguna variable almacenada, se usa el comando clc

↵ (del inglés, “clear console” ).

Recuerde también que ante cualquier duda en cualquier comando, puede usar la orden

help

seguida del nombre del comando del cual tenga duda. No olvide presionar la tecla “enter”, para

obtener una descripción detallada de cada comando y sus variantes en la sintaxis para usarlo.

(Espacio intencionalmente en blanco)

Calistenia:

Hacer la siguiente secuencia de cálculos:

La tangente de 𝜋/7, luego la suma de los siete primeros números primos, luego el volumen

de un paralelepípedo de lados 3, 7 y 9, luego el cuadrado de 27 ( usando el símbolo ^ para

expresar la potencia dos), luego la raíz cuadrada de 2 (usando el comando sqrt( ) del inglés

“SQuare RooT” que significa “Raíz Cuadrada”). Por último, haga la suma de los ocho

primeros números primos devolviéndose con flecha arriba ↑ hasta la suma de los siete

primeros primos, y editando ese comando para agregar el octavo número primo.

Page 5: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

5

2. Entrada de variables

Más poderoso que hacer cálculos directos en Octave/Matlab es utilizar variables para almacenar

datos y luego usarlas para calcular otros valores. Los nombres de variables en Octave pueden

mezclar letras, números y guiones bajos “_”, pero todo nombre de variable debe comenzar por

una letra (no puede iniciar con un número). Además, para Octave, una letra mayúscula y otra

minúscula representan dos variables diferentes.

Por ejemplo, todos estos son nombres válidos Y DIFERENTES de variables en Octave:

A, a, a1, pepito, Pepito, PEPITO, Indice03, ...

Son nombres inválidos, los siguientes:

1Z, 10juan, índice, variable?, niño, ...

Para asignar valores a variables se usa el símbolo “=” que en Octave/Matlab no significa

igualdad matemática, sino ASIGNACIÓN DE VALOR. Para usar el signo de “=” en Octave

con el fin de asignar un valor a una variable, en el lado izquierdo del signo “=” se escribe el

nombre de la variable que se quiera usar, y en el lado derecho, se pone el valor que se quiera

almacenar. Por ejemplo, si un paralelepípedo tiene ancho 3, largo 7 y altura 5, podríamos

asignar variables para esas medidas así:

a = 3 ↵

l = 7 ↵

h = 5 ↵

Después de cada presión de la tecla “Enter/Return/Intro” ↵ , irán apareciendo intercaladas las

respuestas, que se conocen como el “eco” y son la confirmación de que Octave entendió el

cálculo o asignación solicitada por el usuario. La pantalla debe mostrar algo así:

Con esos datos en memoria, se podría calcular fácilmente el volumen del paralelepípedo como:

V = a*l*h ↵

Se encontraría esta respuesta:

Page 6: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

6

Si no se quiere que Octave haga eco (o confirmación) después de cada asignación de variable o

cada cálculo, basta poner un punto y coma (;) después de cada comando, antes de presionar ↵ .

Por ejemplo, si un cilindro tiene radio 4 y altura 10, se pudo calcular su volumen, sin hacer eco

al definir sus propiedades, de esta manera:

R = 4 ;↵

H = 10 ;↵

Vol = H*pi*R^2 ↵

Los comandos previos hubieran arrojado la siguiente salida:

Nótese que en este caso no hubo eco después de los dos primeros comandos, pero sí hubo eco

en el último, porque a éste no se le puso el “;” al final.

El punto y coma “;” no sólo sirve para evitar el eco en la consola de Octave. También sirve para

separar comandos en una misma línea. Por ejemplo, se pudo calcular el área lateral del

paralelepípedo en una sola línea, así:

a = 3; l = 7; h = 5; AL = 2*(a*l + a*h + l*h) ↵

Lo que arroja:

Nótese en este caso, que Octave sólo dio el eco de la última cantidad calculada, porque no se le

puso el punto y coma. Si lo hubiéramos escrito con punto y coma al final después del comando

para AL, no hubiera presentado la respuesta. Para poderla ver, hubiéramos tenido que pedirle a

Octave que nos mostrara el valor de esa variable luego de calculada, justo como habíamos

pedido que nos recordara la última respuesta llamando a la variable “ans”.

Más calistenia:

Dado que hay tres tipos de lados en un paralelepípedo, y que esos lados aparecen por

duplicado (adelante-atrás, arriba-abajo, izquierda-derecha), asigne a una variable A el área

lateral total del paralelepípedo.

Si un tronco de cono circular recto tiene una altura 15 desde la base hasta el vértice, y un

radio de 10 de la base, adjudique esos dos valores a dos nombres de variables que usted

prefiera y, llamando a esas variables, calcular el área que encierra completamente al tronco

de cono, y su volumen total.

Page 7: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

7

En este caso, tendríamos que haber pedido recordar a la variable AL, tecleando:

AL ↵

Eso nos hubiera dado como respuesta el valor del área lateral calculado, como se muestra aquí:

(Espacio intencionalmente en blanco)

Page 8: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

8

3. Creación de vectores y matrices

Las variables que dan poder a Matlab/Octave son las matrices. De hecho, para estos lenguajes,

todas las variables numéricas son matrices:

Un escalar es una matriz 1 por 1

Un vector fila es una matriz 1 por n

Un vector columna es una matriz n por 1

Dado que ya tratamos la entrada de escalares (matrices 1 por 1) en la sección anterior,

procedamos con los que nos queda faltando.

3.1. Entrada de vectores fila Para ingresar directamente un vector fila, se utiliza el mismo signo “=” de asignación, sólo que

ahora, en miembro derecho de esa asignación, se usan corchetes para agrupar las componentes

del vector; dentro del corchete, los elementos se separan con comas. Por ejemplo, para ingresar

el vector �⃑� = (10,−5, 7), bastaría introducir el siguiente comando:

v = [10, -5, 7] ↵

La respuesta de la consola es la siguiente:

Cuando las componentes del vector son números o variables aisladas, basta usar espacios para

separar las componentes en una fila. Por ejemplo:

x=1; y=2; z=3; ↵

radar = [x y z] ↵

entrega la siguiente salida en la consola:

No obstante, cuando hay operaciones involucradas, se sugiere usar las comas. Por ejemplo, para

definir un vector que dependiera de las variables x, y, z , ya en memoria, se procede así:

F = [ x – y , y + x , z ] ↵

Ahí los espacios no tendrán función de separación de componentes; sólo de dar claridad al

lector del código. El resultado es el siguiente.

Page 9: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

9

3.2. Entrada de vectores columna Para ingresar directamente un vector columna, la única diferencia es que la separación entre

componentes se hace con punto y coma “;”. Por ejemplo, para ingresar el vector columna

𝑐 = (𝑥𝑦𝑧)

basta teclear lo siguiente:

c=[x;y;z] ↵

La salida de la consola muestra la diferencia.

Más ejercicios para fijar el lenguaje:

Asigne los valores 3.7189432, 7.23245 y 9.8765468 a tres variables. Luego, llamándolas,

cree un vector fila que en su primera componente contenga el promedio de los tres números,

en la segunda componente un promedio ponderado de los tres números, según su posición

(el primer número vale 1, el segundo vale 2, y el tercero vale 3). En la tercera componente

debe ir la suma total de los números.

Si el radio de una esfera, el radio de la base y la altura de un cono, y el radio de la base y la

altura de un cilindro, son todos iguales a 1, cree un vector fila con los volúmenes de dichos

sólidos en su orden.

Más ejercicios para fijar el lenguaje:

Asigne e los valores 3.7189432, 7.23245 y 9.8765468 a las variables x,y,z. Cree un vector

columna cuyas componentes incluyan, en ese orden: promedio de las variables, promedio de

las dos primeras, promedio de las dos últimas, promedio de la primera y la última, y

producto de las tres variables.

Page 10: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

10

3.3. Entrada de matrices

Entrar matrices es extremadamente simple. Los elementos se introducen manualmente en forma

de filas, separando cada elemento con coma (o espacios, si es pertinente). Al llegar al final de

cada fila, se salta al siguiente renglón, usando punto y coma. De cierta forma, es como si la

matriz se ingresara como una columna de filas:

𝐴 = (

𝑎11 𝑎12

𝑎21 𝑎22

𝑎31 𝑎32

) = (

(𝑎11 𝑎12)(𝑎21 𝑎22)(𝑎31 𝑎32)

) ,

Así, para entrar la matriz

𝐴 = (1 23 45 6

) = (

(1,2)(3,4)(5,6)

) ,

basta ingresar el siguiente comando, prestando atención a los signos de separación: la coma

separa componentes en una fila, y el punto y coma separa una fila de la siguiente:

A=[1,2;3,4;5,6] ↵

La consola devuelve el siguiente eco:

Una matriz también se puede entrar como una fila de columnas, pero esto implica agrupar cada

columna entre corchetes. Sería lo equivalente a hacer:

𝐴 = (

𝑎11 𝑎12

𝑎21 𝑎22

𝑎31 𝑎32

) = ((

𝑎11

𝑎21

𝑎31

) , (

𝑎12

𝑎22

𝑎32

)) .

Por ejemplo, para ingresar la misma matriz

𝐴 = (

𝑎11 𝑎12

𝑎21 𝑎22

𝑎31 𝑎32

) = ((135) , (

246)) ,

se usaría el comando que sigue:

A=[[1;3;5],[2;3;4]] ↵

Page 11: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

11

El resultado es exactamente el mismo que en el caso anterior. Nótese bien cómo se usaron las

comas y los punto y comas en cada caso.

En caso de que quede una duda del tamaño de una matriz, siempre está la opción del comando

“size” (del inglés, “tamaño”), que daría la dimensión de la matriz en número de filas y número

de columnas, almacenados en un vector fila de dos componentes. Así, si después de ingresar la

matriz anterior, se teclea

size(A) ↵

Ese comando entrega la dimensión de la matriz que definimos previamente, que es 3 por 2 (o

sea de 3 filas y 2 columnas):

4. Matrices fundamentales

Resultaría francamente absurdo y eterno ingresar manualmente una matriz como la siguiente:

𝐴 =

(

0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0)

Para eso existen comandos que pueden entregar una matriz de ceros del tamaño que se requiera.

Page 12: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

12

Por ejemplo, al ingresar

B=zeros(6,15) ↵

Octave definirá la matriz de ceros arriba mostrada, y la almacenará en una variable B para usarla

en lo que necesitemos. Octave muestra la matriz por bloques de columnas:

También podríamos crear otra matriz de ceros, del mismo tamaño de la matriz A previamente

definida, usando el comando

C=zeros(size(A)) ↵

Ese comando básicamente dice: “Almacene en la variable C una matriz de ceros del mismo

tamaño de la matriz A”. El resultado es obvio:

Si lo que se quiere es definir una matriz de unos del mismo tamaño de la enorme matriz B

repleta de ceros que definimos arriba, bastaría usar una orden análoga, pero apta para llenar de

unos cualquier matriz; la orden ones (del inglés, “unos”)

D=ones(size(B)) ↵

Page 13: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

13

El resultado es el esperado:

Otra matriz que sería tremendamente tediosa de llenar es una matriz diagonal. Sería una pérdida

innecesaria la entrada de ceros a los lados de la diagonal principal, si el tamaño de la matriz es

grande. En ese caso se usa la orden diag, para crear una matriz con elementos sólo en la

diagonal, los cuales se especifican de forma ordenada dentro de un vector en corchetes que va

dentro de los paréntesis del argumento de la función diag:

d=diag([1,2,3,4,5,6,7,8,9,10]) ↵

Resultado:

Note que conocer estas órdenes es fundamental. De tener que ingresar 100 componentes de una

matriz, pudimos definirla definiendo solamente las 10 componentes diagonales que nos

interesaban. El ahorro de tiempo es de 90%.

Si se quiere crear una matriz diagonal no cuadrada; con una dimensión rectangular dada, se

puede modificar la orden previa para generar la matriz, agregando después del vector con las

Page 14: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

14

componentes de la diagonal, una pareja de números que representan, respectivamente, el

número de filas y columnas que se desean en la matriz resultante.

Por ejemplo para crear una matriz diagonal de 10 por 20 cuyos primeros 5 componentes de la

diagonal principal fueran 2, 4, 6, 8 y 10, basta teclear:

E=diag([2,4,6,8,10], 10,20) ↵

El eco muestra nuestra matriz deseada:

Nótese que, manualmente, habríamos tenido que meter 200 números, mientras que sólo

terminamos definiendo manualmente 5 de las componentes y los dos números que definen la

dimensión de la matriz resultante. El ahorro en tiempo fue cercano al 96.5%, pues sólo se tardó

un 3.5% del tiempo que hubiera tomado definir manualmente esa matriz. Todos los elementos

que no determinamos en el comando, son rellenados automáticamente con ceros por la consola

de Octave.

Otra matriz importantísima en el álgebra de matrices es la matriz identidad (cuadrada) de orden

n (su dimensión es n por n). En este caso, el comando para crearla es “eye” (así se pronuncia en

inglés la letra “I” que es la que representa a esa matriz universalmente).

Así, si se quiere definir una matriz identidad de 20 por 20, basta escribir

I20=eye(20) ↵

Page 15: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

15

Ese comando almacenará esa matriz identidad de orden 20 en la variable I20. El resultado

esperado es:

El ahorro de tiempo es extraordinario. Si hubiéramos tenido que meter a mano esa matriz,

hubiéramos tardado más de 400 veces el tiempo para entrar el comando ilustrado.

Otro tipo de matrices fundamentales se pueden consultar en la documentación respectiva del

lenguaje.

(Espacio intencionalmente en blanco)

Más ejercicios para fijar el lenguaje:

Ilustre todas y cada una de las formas de definir matrices con ejemplos variados de las

dimensiones que se le antoje. Es crucial que practique.

Page 16: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

16

5. Indexación elemental de matrices

La indexación de matrices se refiere a la posibilidad de referirse a elementos específicos dentro

de la matriz, sean elementos, filas, o columnas, sin tener que manipular todas las componentes

de la matriz simultáneamente. Es el equivalente a llamar por su nombre a un individuo o un

grupo de individuos entre una multitud.

5.1. Indexación de componentes individuales de matrices

Aunque lo normal en la notación matemática universal es reservar letras mayúsculas para el

nombre de las matrices y las letras minúsculas respectivas para referirse a sus componentes, no

pasa lo mismo en Octave/Matlab.

Por ejemplo, en notación matemática, para referirse al elemento en la posición 𝑖, 𝑗 de la matriz

𝐴, se usa el símbolo 𝑎𝑖,𝑗 = 𝑎𝑖𝑗.

En Matlab y Octave NO SE SIGUE ESA CONVENCIÓN: en estos lenguajes, el símbolo que

representa a una matriz y el símbolo que representa a sus componentes debe ser el mismo, sólo

que se agrega un paréntesis con los índices fila y columna separados por una coma al referirse a

una componente.

Por ejemplo si la matriz que vamos a manipular se llama A (con mayúscula) entonces su

componente de la fila i y la columna j se llama A(i,j).

Note la diferencia con la notación matemática estándar: En Matlab HAY QUE USAR EL

MISMO SÍMBOLO DE LA MATRIZ PARA REFERIRSE A SUS COMPONENTES:

Objeto matemático Notación

matemática

Notación en

Matlab/Octave

Matriz “A” 𝐴 A

Componente 𝑖, 𝑗 de la matriz “A” 𝑎𝑖𝑗 A(i,j)

Matriz “TablaDatos” ¿𝑇𝑎𝑏𝑙𝑎𝐷𝑎𝑡𝑜𝑠? TablaDatos

Componente 3,7 de la matriz “TablaDatos” ¿𝑇𝑎𝑏𝑙𝑎𝐷𝑎𝑡𝑜𝑠3 7? TablaDatos(3,7)

La indexación es medular a la hora de manipular componentes específicas de matrices. Por

ejemplo, resultaría francamente absurdo introducir a mano la siguiente matriz en Octave:

𝐵 =

(

0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 55 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 4.8 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 371)

Es claro que, con base en una matriz de ceros de dimensión 6 × 15, como la matriz 𝐴 que

habíamos definido en la sección 3.4, sólo habría que cambiar tres elementos. Eso sugeriría crear

primero la matriz de ceros, con la orden “zeros” ya vista, y luego modificar las tres entradas

necesarias como se explica a continuación. Pero ni siquiera es necesario el primer paso.

Basta definir de entrada la última componente de la matriz 𝐵.

Page 17: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

17

Para hacerlo, hay que crear una componente en la fila 6, columna 15, de la matriz B,

asignándole su valor de 371 así:

B(6,15)=371 ↵

Como respuesta, Octave automáticamente creará espacio suficiente en memoria para una matriz

que pueda albergar una componente de valor 371 en la posición (6, 15) y el resto de la matriz la

llenará de ceros:

Note que nos ahorramos crear primero la matriz de ceros. Ahora sólo basta modificar las

componentes restantes: la (2, 13) con su valor de 55, y la (4, 4) con su valor de 4.8, con la línea

siguiente:

B(2,13)=55; B(4,4)=4.8 ↵

(Recuerde que se pueden hacer varios comandos en una misma línea de texto, separados con

“;”)

Page 18: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

18

La salida de la consola muestra la matriz deseada:

Más ejercicio para asimilar el lenguaje:

Introduzca la siguientes matrices en Octave:

𝑀1 =

[ 1 1 1 1 1 1 1 1 1 1 1 121 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 −33 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 10𝜋1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 144 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ]

Sugerencia: cree una matriz de unos con la orden ones y luego modifique las 4

componentes necesarias como ya se vio.

𝐷𝑎𝑡𝑜𝑠 =

(

50 0 0 0 0 0 0 0 0 0 0 1880 40 0 0 0 0 0 0 0 0 0 00 0 30 0 0 0 0 0 0 0 0 00 0 0 20 0 0 0 0 0 0 0 00 0 0 0 10 0 0 0 0 0 0 00 99 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 −555)

Sugerencia: cree una matriz diagonal 7 por 11 cuya diagonal principal tenga los cinco

primeros múltiplos de 10 en orden descendente, y luego modifique las tres componentes

restantes.

Invéntese las matrices que quiera e introdúzcalas en Octave usando indexación.

Page 19: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

19

Hasta ahora, hemos aprendido a introducir matrices indexando. El proceso se puede hacer en

sentido inverso para leer las matrices. Por ejemplo, si queremos leer un valor específico de la

matriz 𝐵, por decir algo, el elemento (2, 13), bastaría ingresar a Octave la siguiente línea, que

básicamente le pide que nos “recuerde” el valor de esa componente.

También podemos usar la indexación para tomar algún valor de la matriz y asignarlo a otra

variable distinta. Por ejemplo, podríamos querer almacenar la posición (6, 15) de la matriz B en

la variable “ultima_comp” (escogemos ese nombre porque es la última componente de la matriz,

aunque la pudo llamar como hubiera preferido, incluso “pepito”). Eso se haría con la línea:

ultima_comp=B(6,15) ↵

La respuesta sería:

Puede usar indexación para leer y asignar valores en una misma expresión. Por ejemplo, si

quiero tomar los únicos valores atípicos en la matriz B, que son los de las posiciones (4, 4),

(13, 2) y (6,15), para asignarlos en un vector llamado “Atip”, entonces podría hacerlo con la

siguiente secuencia de órdenes (que también se podrían poner en una sola línea, separadas por

punto y coma):

Atip(1)=B(4,4) ↵

Atip(2)=B(2,13) ↵

Atip(3)=B(6,15) ↵

Esto crea un vector fila llamado “Atip” con dichos valores atípicos en cada una de sus

componentes.

Según lo anterior, note que la indexación de vectores requiere sólo un índice por componente, a

diferencia de la indexación de matrices, que requiere dos índices, uno fila y otro, columna.

Page 20: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

20

5.2. Indexación de filas y columnas de matrices

A veces es menester acceder a una matriz por filas o por columnas, leyendo o modificando todo

un renglón o una columna de datos a la vez. Por ejemplo, cuando se va a hacer un proceso de

reducción o eliminación. En ese caso, la forma como se le dice a Octave/Matlab, que se va a

usar toda una fila o una columna, es con el índice dos puntos “:”.

Para esta sección, supongamos que ingresamos a Matlab la matriz

𝐴 =

(

1 2 34 5 67 8 919 11 1213 14 15)

Si que queremos acceder a la fila 4 de la matriz 𝐴 , nos referiríamos a ella como A(4,:). Al

poner en el índice fila de A el número 4, indicamos que queremos seleccionar elementos de la

fila 4. Al poner el signo “:” en el índice columna de A, significa que tomaremos los elementos

de todas las columnas (que están en la fila 4 ya mencionada).

Si damos la orden A(4,:) ↵

La consola nos recordará cuánto vale la fila 4 de A :

Más ejercicio para asimilar el lenguaje

Almacene en un vector V (mayúscula) los elementos atípicos de la matriz M1, y en un

vector W (mayúscula) los de la matriz Datos, ambas definidas en el ejercicio previo.

Invéntese las matrices que quiera e introdúzcalas en Octave usando indexación.

Page 21: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

21

Obviamente, lo que se lea de esa matriz usando indexación por filas, se puede almacenar en

cualquier variable vectorial. Por ejemplo, podemos almacenar la quinta fila de 𝐴 en un vector

V5 con el siguiente comando:

V5=A(5,:) ↵

En este caso, todos los elementos de la fila 5 de 𝐴 quedarán almacenados en el vector V5:

Con ese tipo de indexación también se puede modificar por filas los componentes de la matriz.

Si, por ejemplo, se quiere cambiar la tercera fila de 𝐴 por la fila [10, 20, 30], bastaría asignar a

dicha fila de 𝐴 ese vector, así:

A(3,:)=[10,20,30] ↵

El resultado será:

Nótese que la fila 3 de 𝐴 ya incluye el vector que queríamos: [10, 20, 30].

El símbolo “:” también sirve para hacer indexación por columnas. Simplemente, en lugar de

ponerse en la posición del índice de columnas, se pone en la posición del índice de filas.

Por ejemplo, si se quiere asignar al vector columna 𝑏 la tercera columna de la matriz 𝐴, se

podría usar el siguiente comando de asignación:

b=A(:,3) ↵

En este caso, al poner el 3 en el índice de columnas, estamos indicando que estamos interesados

en los contenidos de la tercera columna de 𝐴. Por otro lado, al poner el símbolo “:” en el índice

fila, estamos indicando que queremos los contenidos de todas las filas (que estén en la columna

3).

Más ejercicio para automatizar el lenguaje

Almacene en los vectores a, b, c, d, g, las filas 5, 3, 1, 4, 2 de 𝐴, respectivamente, usando

indexación por filas sobre nuestra matriz de ejemplo.

Usando indexación por filas, cambie las filas 2, 5 y 1 de 𝐴, por los vectores [10, -10, 10],

[5,7,-9] y [1,0,0], RESPECTIVAMENTE, en el orden pedido (primero cambie la fila dos,

luego la cinco y por último la 1).

Page 22: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

22

La respuesta de la consola así lo confirma:

También se puede asignar cualquier vector a cualquier columna de 𝐴 usando indexación por

columnas. Si se quiere, por decir algo, llenar la columna 1 de 𝐴 con el vector columna

𝑐 =

(

54321)

,

previamente creado con la orden c=[5;4;3;2;1] ↵ bastaría con hacer el comando

A(:,1)=c ↵

Page 23: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

23

Nótese que buena parte de las operaciones elementales sobre una matriz se pueden realizar

usando indexación por filas.

Por ejemplo, suponga que se tiene la matriz inicial de nuestro ejemplo

𝐴 =

(

1 2 34 5 67 8 919 11 1213 14 15)

Suponga que se quiere sumar a la fila 2 de 𝐴, (-4) veces su fila 1.

El comando sería facilísimo:

A(2,:)=A(2,:)+(-4)*A(1,:) ↵

o, si lo prefiere,

A(2,:)=A(2,:)-4*A(1,:) ↵

Lo que está diciendo esa orden es que a la la fila 2 de 𝐴 se le restará 4 veces la fila 1 de 𝐴, y el

resultado se almacenará en la fila 2 de 𝐴.

Al ejecutar el comando se llega a:

Más ejercicio para automatizar el lenguaje

Almacene en los vectores columna a, b, c, las columnas 3, 2 y 1 de 𝐴, respectivamente,

usando indexación por columnas sobre nuestra matriz de ejemplo.

Usando indexación por columnas, cambie las columnas 2, 3 y 1 de 𝐴, por los vectores

[ 12345]

,

[ 1020304050]

,

[ 7711374315]

,

RESPECTIVAMENTE, en el orden pedido (primero cambie la columna dos, luego la tres y

por último la 1).

Page 24: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

24

Nótese que eso hace que, debajo del “1” de la primera fila, quede un “0” en la segunda fila. Eso

es un paso típico en la eliminación de matrices para llegar a la forma escalonada. Por ejemplo,

para lograr un “0” en la primera posición de la tercera fila (que empieza con un “7”) bastaría

restar a la fila tres, 7 veces la fila 1. Esto se lograría con una orden similar:

A(3,:)=A(3,:)-7*A(1,:) ↵

Las operaciones equivalentes por filas son similares. Si partimos de la matriz inicial 𝐴,

podríamos multiplicar por ejemplo, toda la columna 3 por (1/3). El resultado se lograría con la

orden:

A(:,3)=A(:,3)*(1/3) ↵

o, lo que es lo mismo,

A(:,3)=A(:,3)/3 ↵

Más alimento para el pensamiento:

¿Cómo haría para eliminar el “10” de la primera posición de la fila 4, y el “13” de la primera

posición de la fila 5, sumando o restando un múltiplo de la primera fila? Compruebe su

respuesta con Octave.

¿Por qué número multiplicaría la segunda fila de la matriz resultante para obtener un “1” en

lugar del “-3” que se encuentra en su segunda columna? (Comentario: a esos “1” en las

primeras posiciones no nulas de cada fila, se les llama “pivotes”.

¿Después de obtener el pivote “1” en la posición (2,2) de la matriz, cómo haría para eliminar

el “-6”, y las demás componentes no nulas debajo de aquel?

Nótese que lo logrado al final de continuar este proceso, es llevar la matriz a la forma

escalonada por filas.

Page 25: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

25

El resultado sería:

Si, sobre esa matriz resultante, se le quisiera sumar 10 veces la columna 3 a la columna 2, la

orden sería similar, otra vez, intercambiando la posición del “:” con respecto a la que usábamos

por filas:

Más alimento para el pensamiento:

Invéntese una matriz de 7 por 11, y multiplique las filas y columnas que usted quiera por los

números que prefiera. Sume múltiplos de cualesquiera filas a cualquiera otras filas. Hágalo

también por columnas.

JUEGUE CON LA MATRIZ. PIÉRDALE EL MIEDO A OPERAR POR FILAS Y

COLUMNAS USANDO LA INDEXACIÓN Y EL SÍMBOLO DE “:” .

Page 26: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

26

5.3. Indexación vectorial de filas y columnas de matrices

Si mira detenidamente, verá que hasta el momento se ha explicado cómo hacer 2 de las tres

operaciones elementales fila que se usan para resolver sistemas de ecuaciones representados

matricialmente. Se nos escapa aún una operación: intercambiar de posición dos filas o dos

columnas. Para eso explicaremos la indexación vectorial de matrices.

Suponga que de la matriz

𝐴 =

(

1 2 34 5 67 8 919 11 1213 14 15)

,

quiere almacenar en una matriz 𝐵 las filas 3 y 5 de la Matriz 𝐴. Para esto, bastaría poner en

lugar del índice fila no sólo un número de fila por leer, sino un vector con los números de fila

por leer, en este caso, el vector [3,5]. En la posición del índice columna, bastaría poner el

símbolo “:” para indicar que se tomarán los elementos de todas las columnas de esas filas.

Entonces, para leer esas filas y asignarlas a la matriz 𝐵, bastaría escribir:

B=A([3,5],:) ↵

Examine bien esa orden. Se tomarán de las filas 3 y 5, los elementos de todas las columnas. El

resultado es el esperado:

Nótese que el orden de las componentes en el vector es de índices filas es fundamental. Si se

intercala el orden, las filas en la matriz 𝐵 quedarán trocadas:

Page 27: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

27

Ese tipo de indexación no sólo sirve para leer matrices, sino para modificarlas: suponga que

quiere llenar la cuarta fila de 𝐴 con el vector [9, 29, 39], y la primera fila con el vector [2, 4, 8].

La orden sería igual de sencilla:

A([4,1],:)=[9,29,39;2,4,8] ↵

Note que la fila 4 de 𝐴 quedó con la primera fila de la matriz que usamos para la asignación, y

la fila 1 quedó con la segunda fila. No olvide que esa no era una fila con seis componentes; era

una matriz con dos filas de tres componentes, lo que es evidenciado por el signo de punto y

coma entre el “39” y el “2”.

Como verá, este método de indexación vectorial por filas permite hacer la última operación

elemental que nos quedaba por hacer: el intercambio de filas.

Por ejemplo, si en la matriz resultante se quiere cambiar la fila 5 por la 3 y viceversa, basta

decir:

A([5,3],:)= A([3,5],:)↵

Básicamente lo que acabamos de decir es que la fila 5 de A se llenará con lo que se encuentre en

la fila 3, y la fila tres se llenará con los elementos de la fila 5. El resultado es el esperado:

Lo anterior puede generalizarse para operaciones columnas indexadas vectorialmente.

Page 28: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

28

Hasta aquí basta para la primera parte de un curso de Álgebra Lineal, dedicado a la reducción

solución de sistemas de ecuaciones lineales representados por matrices, usando operaciones

elementales fila, para efectuar eliminación gaussiana o reducción de Gauss-Jordan.

(Espacio en blanco intencional)

Más alimento para el pensamiento

Con la matriz que se inventó en el alimento previo, ilustre los mismos conceptos de

indexación vectorial por filas y por columnas. Juegue libremente con su matriz, leyéndola y

modificándola por filas y por columnas, con indexación vectorial.

Use la matriz inventada en el ejemplo previo para escalonarla y reducirla por filas, usando el

método de Gauss-Jordan que puede consultar en Wikipedia EN INGLÉS.

Más alimento para el pensamiento

Resuelva sistemas de ecuaciones lineales representados matricialmente llevándolos a la

forma escalonada reducida de Gauss Jordan. Puede sacar los problemas de su libro preferido

de Álgebra Lineal.

Page 29: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

29

6. Operaciones por fila en matrices. Desde el Álgebra Lineal, se sabe que hay tres tipos de operaciones “elementales” por fila que se

pueden efectuar sobre una matriz. La sintaxis de Octave/Matlab para esos tipos de operación se

explicó en la sección anterior y aquí se recapitula.

6.1. Multiplicación de una fila por un escalar. Si se quiere multiplicar la fila 𝑖 de la matriz 𝐴 por el escalar 𝑟, el comando correspondiente es:

A(i,:)=r*A(i,:) ↵

6.2. Suma de un múltiplo de una fila a otra fila. Si en la matriz 𝐴 se quiere sumar a la fila 𝑘 un número 𝑟 de veces la fila 𝑗 , el comando a

introducir es:

A(k,:)= A(k,:)+r*A(j,:) ↵

6.3. Intercambio de filas. Si se quiere intercambiar la fila 𝑗 y la fila 𝑘 de la matriz 𝐴 se usa indexación vectorial así:

A([j,k],:)= A([k,j],:) ↵

Lo anterior se ilustra por completo en la consola de Octave, en el ejercicio de hacer una

reducción por fila de una matriz de tamaño mediano, en la siguiente sección.

(Espacio en blanco intencional)

Page 30: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

30

7. Reducción manual de matrices con fines didácticos.

En el siguiente ejemplo se hace el proceso de reducción de Gauss-Jordan sobre una matriz

usando las operaciones elementales filas recapituladas en la sección anterior. El lector debe

tratar de entender el cómo y el por qué del comando ingresado a la consola en cada paso.

Recuerde que en el método estándard moderno de Gauss-Jordan se suelen intercambiar filas de

forma que los pivotes se saquen de los coeficientes que inicialmente tengan mayor módulo.

Ejemplo:

Reducir la matriz siguiente, almacenándola en una matriz auxiliar B para hacer el proceso de

Gauss-Jordan.

Este primer par de órdenes determinan la matriz a reducir, y establecen que el formato de la

respuesta, en lugar de ser decimal, sea en fraccionarios.

Ahora, se procede a reducir. La primera fase de la reducción consiste en intercambiar filas para

que el primer elemento no nulo de la primera fila, sea el mayor posible. Luego se divide entre

este elemento toda la fila para lograr un pivote (“1”) en la primera posición de la primera fila.

Después se usa este elemento para eliminar todos los otros elementos en la misma columna.

Page 31: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

31

La fase siguiente consiste en cambiar filas para que el pivote de la fila 2 sea el correspondiente

al mayor número posible. Luego se divide toda la segunda fila por ese valor, y se eliminan todos

los demás elementos de ella.

Después de que está reducida la segunda columna se procede igual con la tercera.

Page 32: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

32

En la siguiente fase no hay que intercambiar filas, porque el primer elemento no nulo de la

tercera fila es el más grande de la tercera columna. Se obtiene un pivote “1” en la posición (3,3)

y se usa para eliminar a los demás elementos de la misma columna:

La fase final, con la cuarta columna se hace de forma análoga a las tres anteriores.

Page 33: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

33

Con Esto se termina el proceso de reducción y escalonamiento de Gauss-Jordan.

Más alimento para el pensamiento:

Utilice el método de Gauss-Jordan de escalonamiento y reducción de matrices para resolver

algunos ejercicios de su libro favorito de álgebra lineal.

Page 34: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

34

8. Reducción automática de matrices con el comando rref

Octave/Matlab tiene un comando automático para llevar una matriz a la forma escalonada

reducida: es el comando “rref”.

Su sintaxis es elemental.

Si se quiere obtener la forma escalonada reducida de una matriz 𝑀, basta escribir en la consola

rref(M) ↵

Si se quiere almacenar la forma escalonada reducida de esa matriz en otra, por ejemplo 𝐸, la

sintaxis es:

E=rref(M) ↵

Por ejemplo, para hacer todo el proceso de Gauss-Jordan que se hizo manualmente en la sección

anterior, el comando equivalente sería:

R=rref(A) ↵

Si compara la matriz 𝐵 reducida manualmente, con la reducida automáticamente con

R=rref(A), notará que son exactamente iguales.

Es obvio que este comando sólo se debe usar en los últimos capítulos del curso. En los

primeros, cuando se están aprendiendo los algoritmos de eliminación y reducción, se deben

hacer manualmente, como en la sección previa.

Page 35: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

35

9. Creación de matrices por bloques

En muchas aplicaciones, la estructura de una matriz tiene formas reconocibles. Por ejemplo:

𝑀 =

[ 2 0 0 0 0 0 00 4 0 0 0 0 00 0 6 0 0 0 00 0 0 8 0 0 01 1 1 1 10 10 101 1 1 1 10 10 10]

Nótese que 𝑀 se puede ver de la siguiente forma:

𝑀 = [𝐴 𝐵𝐶 𝐷

],

de forma tal que 𝐴 es una matriz diagonal con elementos (2,4,6,8):

𝐴 = [

2 0 0 00 4 0 00 0 6 00 0 0 8

] ;

𝐵 es una matriz de ceros de dimensión 4 por 3:

𝐵 = [

0 0 00 0 00 0 00 0 0

] ;

𝐶 es una matriz de unos de dimensión 2 por 4:

𝐶 = [1 1 1 11 1 1 1

],

y por último, 𝐷 es una matriz de dieces, de dimensión 2 por 3:

𝐷 = [10 10 1010 10 10

].

Page 36: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

36

Cada una de esas matrices se puede crear fácilmente con las órdenes vistas previamente:

A=diag([2,4,6,8]) ↵

B=zeros(4,3) ↵

C=ones(2,4) ↵

D=10*ones(2,3) ↵

El resultado se muestra a continuación:

Page 37: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

37

Como en este caso las dimensiones coinciden para que se pueda armar la matriz por bloques, se

puede definir a 𝑀 exactamente igual que si fuera por componentes, sólo que en este caso las

componentes son matriciales: dos filas de matrices separadas por punto y coma, con los

elementos de cada fila separados por coma:

Mientras las matrices sean conformables por bloques, se puede hacer este proceso de definición

sin ningún problema.

(Espacio en blanco intencional)

Más alimento para el pensamiento:

Defina por bloques la siguiente matriz:

𝑅 =

[

3 3 3 0 0 0 0 1 0 03 3 3 0 0 0 0 0 1 03 3 3 0 0 0 0 0 0 150 0 0 1 1 1 1 2 0 00 70 0 1 1 1 1 0 2 06 0 0 8 8 8 8 0 0 00 6 0 8 8 8 8 0 0 00 0 6 8 8 8 8 0 0 0

100 200 300 −1 −2 −3 −4 1 1 1]

Pista: 𝑅 se puede ver como una matriz de bloques de 4 por 3, cada bloque con sus

respectivas dimensiones específicas.

Page 38: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

38

10. Álgebra básica de matrices

La mayor parte de las operaciones entre matrices tienen una simbología natural en Matlab.

Por ejemplo, para almacenar en la matriz 𝐶 la suma de dos matrices 𝐴 y 𝐵, la sintaxis es la

obvia:

C=A+B ↵

La resta es similar:

C=A-B ↵

La multiplicación de una matriz 𝐴 por un escalar 𝑘 usa el símbolo casi universal en informática

para la multiplicación; el asterisco (*) :

C=k*B ↵

Para la multiplicación de matrices conformables, se usa también el asterisco (*) ; el tipo de

operandos aclara a cuál de las dos se refiere:

C=A*B ↵

Las potencias de una matriz cuadrada se realizan con el símbolo casi universal informático para

la exponenciación; el acento circunflejo o “gorro” (^):

C=A^n ↵

La inversa matricial se simboliza de forma consecuente con la anterior ( 𝐴−1 ) :

C=A^-1 ↵

La transpuesta de una matriz se representa con un operador doble: el punto (.) seguido de un

apóstrofe o comilla simple (’):

C=A.’ ↵

Si se quiere calcular la transpuesta conjugada o “adjunta” de una matriz, el operador es el

apóstrofe (’):

C=A’

Cuando todas las componentes de la matriz son reales, la “adjunta” y la transpuesta son la

misma, por tanto, es común el malentendido de creer que la transpuesta se representa con

apóstrofe... el lector no se imagina los dolores de cabeza que eso da cuando se comienza a

trabajar con matrices complejas.

Octave y Matlab tienen literamente cientos de órdenes para trabajar con matrices, las cuales se

salen del alcance de esta breve introducción didáctica. Para una introducción propiamente dicha

al lenguaje de Octave, se recomienda este sitio web:

https://octaveintro.readthedocs.io/en/latest/index.html

Page 39: Una introducción básica a Matlab/Octave PARA LA DIDÁCTICA ...€¦ · estándar para las operaciones matemáticas básicas. Basta ingresar los comandos que se quieran efectuar

39

(Espacio en blanco intencional)

Último alimento para el pensamiento:

Ilustre todas las operaciones mencionadas en esta sección con las matrices que el lector

prefiera.

Estudie más sobre este apasionante y práctico lenguaje de Programación.