Elementos de Matemática Aplicada 2012 1 Laboratorio 1: Introducción a MatLab Matlab (www.mathworks.com) es un lenguaje de programación y una herramienta de cálculo. Está diseñado para hacer cuentas con matrices y vectores de manera eficiente, y para que la forma de escribir se parezca a la de álgebra linea. 1. Cuentas básicas Se pueda abrir el programa desde el ícono correspondiente, y se abre la ventana de comandos, donde se puede escribir después del símbolo >> Escriba algunas cuentas, por ejemplo: >> 3^2 >> 9*8 >> 9*(1-4/5) >> sin(pi/2)^2 A veces aparece otra ventana que se llama Workspace (y si no aparece y la quieren ver, puede abrirse desde el menú de ventanas). Ahí aparecen las variables que están almacenadas en memoria, en este momento debería estar vacío. Así que empecemos a ocuparlo. Vamos a crear un vector. Escriban >> a=[1 3 5 7] a = y el resultado será 1 3 5 7 y en la ventana Workspace aparecerá a, indicando que es un matriz de 1x4 y la cantidad de memoria que ocupa. Si escribimos un punto y coma ; al final de un comando, entonces MatLab hace la cuenta, guarda el resultado en memoria, pero no lo muestra en la pantalla (esto es útil cuando algún cálculo intermedio es una matriz muy grande). Escribiendo el nombre del vector, vemos su contenido. Pero también se puede acceder a las componentes individualmente. Por ejemplo
Elementos de Matemática Aplicada 2012 2 >> a(2) y la respuesta será 3 Una forma de ingresar vectores largos más facilmente es indicar el valor inicial, el incremento y el valor final >> a=2:3:17 da por resultado a = 2 5 8 11 14 17 Para ingresar vectores columna hay dos maneras: separar con punto y coma ; >> a = [1;2;3;4] o transponer un vector fila >> a = [1:4] en cualquiera de los dos casos obtenemos a = 1 2 3 4 Para crear una matriz, se cargan las filas separando los números por espacios (o por comas, también funciona) y separando una fila de la otra por punto y coma >> A=[1 2 3;4 5 6;7 8 9] A = 1 2 3 4 5 6 7 8 9 y pueden obtenerse elementos sueltos de una matriz ingresando primero la fila y después la columna >> A(2,3) 6
Elementos de Matemática Aplicada 2012 3 y también pedazos de la matriz (submatrices) >> A(3,2:3) 8 9 >> A(:,3) 3 6 9 Así como pueden sacarse submatrices, pueden construirse matrices grandes pegando submatrices >> B = [ A zeros(3,2); zeros(2,3) eye(2) ] B = 1 2 3 0 0 4 5 6 0 0 7 8 9 0 0 0 0 0 1 0 0 0 0 0 1 NOTA IMPORTANTE: Para MathLab no es lo mismo mayúscula que minúscula, en el Workspace ahora tenemos las variables a, A, B y ans. Muchas veces los programas no funcionan porque nos confundimos mayúsculas con minúsculas, ojo. Ahora, a hacer cuentas. Meta las siguientes cosas a MatLab, y fíjense si da lo mismo que ustedes esperan. >> v=[1 2 3] >> w=[2 4 6] >> w+v >> v-w >> 3*w+v-1 >> sin(v) >> w^2 La última falló no? Para entender qué pasó, pensemos en multiplicar matrices. Cargue estas matrices en MatLab ( ) ( ) 4 3 6 5 8 3 A = y B = 5 7 0 1 0 6 Multiplicar A*B está mal porque las dimensiones de las matrices no coinciden. Para multiplicar las matrices, hay que trasponer alguna de las dos. Puede ser
Elementos de Matemática Aplicada 2012 4 >> A*B o >> A *B También puede ser que lo que quiera hacer es multiplicar elemento a elemento (o multiplicar punto a punto se dice a veces). Esto puede hacerse así >> A.* B y el resultado será 20 24 18 5 0 0 Ahora podemos ver qué pasó con el w^2. No sé qué quería escribir el que escirbió w^2, pero puede ser alguna de las siguientes cosas: >> w *w >> w*w >> w.^2 >> norm(w)^2 Escríbalas todas en MatLab, y asegúrese de entender qué es cada una. Algunos comandos útiles Comando Descripción abs(a) valor absoluto de los elementos de a sin(a) seno de los elementos de a cos(a) coseno de los elementos de a exp(a) devuelve e a i para cada uno de los elementos de a log(a) logaritmo natural de los elementos de a length(a) cantidad de elementos en a sum(a) suma de todos los elementos de a prod(a) producto de todos los elementos de a size(a) dimensiones de A det(a) determinante de A rank(a) rango de A trace(a) traza de A eig(a) autovalores (y autovectores) de A inv(a) matriz inversa de A clear borra la memoria
Elementos de Matemática Aplicada 2012 5 2. Gráficos Para graficar en MatLab hay que hacer una tabla de valores (ya sé, va en contra de lo que enseñamos en Análisis I, pero las computadoras hacen cuentas sin pensar y por eso hacen tablas de valores; nosotros tenemos que pensar para decirle a las computadoras qué cuentas hacer) Entonces hay que tener dos vectores, uno con los valores de x y otro con los valores de y = f(x), y darle eso al comando plot para que la computadora grafique >> x=-3:0.1:7 >> y=2*x.^2-5*x -2 >> plot(x,y) y debería abrirse una ventanita con una línda parábola dibujada. También pueden graficarse varias funciones simultáneamente >> x= -pi:0.1:pi; y1= sin(x); y2=cos(x); >> plot(x,y1, --r,x,y2, -g ) Los puntos y comas en la primera línea están para que no se muestren los resultados parciales, en el comando plot fíjense que para cada curva hay que poner los dos vectores de las tablas de valores (aunque el de x esté repetido) y la cosa entre comillas indica el estilo de cada curva (rayitas, raya contínua, r de rojo, g de verde). Ahora vamos a graficar algo un poco más feo >> x=0:.1:3; >> y1=(x.^9-18*x.^8 + 144*x.^7-672*x.^6 + 2016*x.^5... - 4032*x.^4+ 5376*x.^3-4608*x.^2 + 2304*x - 512); >> plot(x,y1) un polinomio de grado nueve, nada del otro mundo. Ahora queremos mirar más cerca de la raiz, así que volvemos a hacer la cuenta >> x=1.95:.001:2.05; >> y1=(x.^9-18*x.^8 + 144*x.^7-672*x.^6 + 2016*x.^5... - 4032*x.^4+ 5376*x.^3-4608*x.^2 + 2304*x - 512); >> plot(x,y1) Bastante feo no? Será que este polinomio de grado 9 tiene más de 20 raices? O será culpa del error de redondeo? Ahora viene cuando nos acordamos de que nos explicaron que escribiendo los polinomios de manera anidada se reduce el número de operaciones y por lo tanto también el error por redondeo. Veamos entonces
Elementos de Matemática Aplicada 2012 6 >> y2=-512+(2304+(-4608+(5376+(-4032+(2016+(-672+(144+(-18+x)....*x).*x).*x).*x).*x).*x).*x).*x; >> plot(x,y1, --g,x,y2, r ) Mejoró un poco, no? Cuantas menos cuentas haya que hacer, menor será el error de redondeo. Podría ser que fueramos muy despiertos y nos dieramos cuentas de que, en realidad, ese polinomio es la expansión de (x 2) 9. Entonces el error se puede achicar muchísimo >> y3=(x-2).^9; >> plot(x,y1, --g,x,y2, r,x,y3, b )