Introducción a MATLAB Introducción El paquete MATLAB es un sistema interactivo basado en matrices para cálculos cientı́ficos y de ingenierı́a. El nombre proviene de MATrix LABoratory. Este apunte está basado en la versión 7.1 de MATLAB y su propósito es ofrecer una guı́a simple para el uso de MATLAB. Cada uno de los ejemplos ilustran lo que muestra el espacio de trabajo de MATLAB en una sesión determinada. Por ejemplo: >> (2+3*pi)/2 ans = 5.7124 Las respuestas se muestran con 5 cifras significativas, mediante la instrucción format puede cambiarse esta cantidad. Por ejemplo: >>format long >>(2+3*pi)/2 ans = 5.71238898038469 Esta instrucción permite obtener hasta 15 cifras decimales significativas. Operaciones aritméticas + suma − resta ∗ multiplicación \ división ∧ potencia Instrucciones de asignación Mediante el uso de la igualdad se puede asignar un nombre al resultado de la evaluación de una expresión. Por ejemplo: >> a=pi*2 a = 6.2832 1 Cuando se escribe un punto y coma al final de una expresión, el computador realiza las operaciones correspondientes y almacena el resultado bajo el nombre que se le haya asignado a dicha expresión, pero no se muestra el resultado en la pantalla. Por ejemplo: >> a=pi*2; >> Matrices MATLAB trabaja esencialmente con un solo tipo de objetos: una matriz numérica rectangular con entradas posiblemente complejas, es decir, que todas las variables representan matrices. Existen distintas formas de introducir una matriz en MATLAB: • Ingresando una lista explı́cita con sus elementos. • Generándola mediante declaraciones y funciones. • Cargándola desde un archivo externo. • Creándola en un archivo .m Ejemplos: >> b=[1 2 3 4 ] b = 1 2 3 4 >> b=1:1:4 b = 1 2 3 4 >> A=[1 2 3; 4 5 6; 7 8 9] A = 1 4 7 2 5 8 3 6 9 Los puntos y comas separan las filas de una matriz, mientras que los elementos de la misma fila deben separarse por un espacio en blanco o por una coma. Se puede trabajar con los elementos de una matriz de las siguientes formas (para el ejemplo anterior): • seleccionando una entrada especı́fica de A: 2 >> A(2,3) ans = 6 • seleccionando una submatriz de A: >> A(1:2,2:3) ans = 2 3 5 6 • asignando un valor a una entrada especı́fica de A: >> A(2,2)=1 Operaciones con matrices + suma − resta ∗ multiplicación \ división izquierda / división derecha ∧ potencia 0 transpuesta Si A es una matriz inversible y b es una columna, entonces: x = A\b es la solución de Ax = b. x = b/A es la solución de xA = b. En la división izquierda, si la matriz es cuadrada, se factoriza usando eliminación gaussiana, con los factores se resuelve Ax = b. Si la matriz no es cuadrada, se factoriza usando la ortogonalización de Householder con pivoteo de columnas, con los factores se resuelve el sistema indeterminado o sobredeterminado en el sentido de los mı́nimos cuadrados. La división derecha se define a partir de la izquierda por b/A = (A0 \b0 )0 . Operaciones que se realizan elemento a elemento Las operaciones matriciales de suma, resta y producto por un escalar se realizan elemento a elemento, lo cual no ocurre en las operaciones matriciales de multiplicación, división y potenciación. Estas operaciones pueden realizarse elemento a elemento si se antepone un punto al sı́mbolo correspondiente, es decir: .∗, ./, .∧, por ejemplo: 3 • para calcular el producto AA: >> A=[1 2; 3 4];A^2 ans = 7 10 15 22 • para elevar al cuadrado cada elemento de A: >> A.^2 ans = 1 9 4 16 Funciones escalares Algunas de ellas son: abs, cos, sin, exp, log, log10, tan, sqrt, sign, floor, round, ceil. Por ejemplo: >> 3*cos(sqrt(4)) ans = -1.2484 Funciones vectoriales Algunas de ellas son: max: elemento máximo de un vector min: elemento mı́nimo de un vector sort: permite ordenar un vector en forma ascendente o descendente sum: permite realizar la suma de los elementos de un vector prod: permite realizar el producto de los elementos de un vector mean: permite realizar el promedio de los elementos de un vector Funciones matriciales Las funciones matriciales más útiles son las siguientes: eye: matriz identidad 4 zeros: matriz de ceros ones: matriz de unos triu: parte triangular superior de una matriz tril: parte triangular inferior de una matriz rand: matriz generada aleatoriamente hilb: matriz de Hilbert chol: factorización de Cholesky cond: número de condición en la norma 2 det: determinante eig: autovalores y autovectores inv: inversa lu: factorización LU norm: norma 1, norma 2, norma de Frobenius, norma ∞ poly: polinomio caracterı́stico qr: factorización QR rank: rango size: tamaño svd: descomposición en valores singulares Gráficos MATLAB puede generar dibujos bidimensionales y tridimensionales de curvas y superficies. La instrucción plot permite generar gráficos de curvas planas. Por ejemplo: >> >> >> >> >> >> >> x=-pi:0.1:pi; y=cos(x); z=sin(x); plot(x, y, x, z); title(’Seno vs Coseno’); xlabel(’x’); ylabel(’f(x)’); En la primera lı́nea se especifica el dominio de las funciones, teniendo en cuenta el tamaño 5 de paso 0.1. En las dos lı́neas siguientes se definen las funciones. La cuarta lı́nea contiene la instrucción para graficar la función. Para obtener dibujos tridimensionales de superficies hay que especificar un rectángulo del dominio de la función, mediante la instrucción meshgrid y luego la instrucción mesh para obtener el gráfico. Por ejemplo: >> >> >> >> x=-pi:0.1:pi; y=x;[x,y]=meshgrid(x,y); z=cos(x+y); mesh(z) Operadores relacionales == igual que ∼= no igual que < menor que > mayor que <= menor o igual que >= mayor o igual que Operadores lógicos < menor que ∼ no & y | o Cuando se aplican a escalares, el resultado es 1 o 0 de acuerdo a que la relación sea verdadera o falsa respectivamente. Cuando se aplican a matrices del mismo orden, el resultado es una matriz de ceros y unos, que corresponden al valor de la relación entre los coeficientes correspondientes. >> >> >> >> a=rand(3); b=tril(a); a==b; ans= 1 0 1 1 1 1 0 0 1 6 Estructuras de control Las instrucciones for, if y while de MATLAB operan como en la mayor parte de los lenguajes usuales. Finalizan con end. Archivos .m Existen dos tipos de archivos .m: • Archivos de instrucciones • Archivos de funciones Un archivo de instrucciones está formado por una sucesión de instrucciones de MATLAB, las variables son globales y por lo tanto, cambiarán los valores del espacio de trabajo. Un archivo de funciones está formado por una sucesión de instrucciones de MATLAB que conforman funciones especı́ficas, las variables son locales. Una función admite argumentos de salida simples o múltiples. Por ejemplo, y = eig(A) genera un vector columna conteniendo los autovalores de A mientras que [U, D] = eig(A) genera una matriz U cuyas columnas son los autovectores de A y una matriz diagonal D con los autovalores de A en su diagonal. La siguiente función permite calcular el producto de a y b mediante sumas sucesivas: function c=CalcularProducto(a, b) c=0; for i=1:b c=c+a; end La siguiente función permite determinar los valores mı́nimo y máximo de un vector: function [vMin vMax]=CalcularExtremos(v) vMin=min(v); vMax=max(v); Tratamiento de matrices mediante archivos de texto El siguiente archivo de instrucciones permite generar un archivo de texto a partir de datos de MATLAB y generar una matriz a partir de un archivo de texto. 7 %Generacion del archivo de texto x=-pi:0.5:pi; AInput=[]; AOutput=[]; %Primera columna de la matriz, : indica todas las filas de la primera columna AOutput(:, 1)=x’; %Segunda columna de la matriz, : indica todas las filas de la segunda columna AOutput(:, 2)=cos(x); save ’miArchivo.txt’ AOutput -ASCII %Generacion de una matriz a partir de un archivo de texto, en este ejemplo, %el mismo generado en el paso anterior AInput=load(’miArchivo.txt’) 8