37
Introducci on a Matlab Oscar Diego Calvo Orozco c Agosto de 2010

Manual Resumido Prof

Embed Size (px)

DESCRIPTION

biologia

Citation preview

Page 1: Manual Resumido Prof

Introduccion a Matlab

Oscar Diego Calvo Orozco

c⃝ Agosto de 2010

Page 2: Manual Resumido Prof

Indice general

Introduccion IV

I El entorno MatLab 1

1. Primeros pasos. 2

2. Calculos Simbolicos 4

3. Vectores y Matrices 7

4. Funciones en Matlab 13

5. Graficos en Matlab 15

6. Calculo Diferencial e Integral 20

7. Ejercicios de la primera parte 23

II Nociones de Programacion 25

8. Formas condicionales y ciclos 26

9. FUNCIONES Y SCRIPTS 28

ii

Page 3: Manual Resumido Prof

INDICE GENERAL iii

10.Ejercicios de la segunda parte 32

Page 4: Manual Resumido Prof

Introduccion

MatLab es un programa de computacion hecho para facilitar las laboresdiarias de cientıficos e ingenieros que tengan que ver con cualquier tipo deoperacion o actividad matematica. Su nombre es una abreviatura de MATrixLABoratory. Esta en la misma lınea de trabajo de otro tipo de software com-ercial como MATHEMATICA o MAPLE. Aunque basicamente todos estosprogramas hacen el mismo tipo de labor, MatLab esta orientado inicialmentea operaciones numericas y de manejo de matrices y listas, MATHEMATICAesta mas orientado a los calculos simbolicos y podrıamos decir que MAPLEes un termino medio de los anteriores dos. Estas notas estan hechas paralas versiones 7.0 o superiores de MatLab, aunque deberıan funcionar sinproblemas en la version 6.5. Todo esto bajo ambiente WINDOWS.

iv

Page 5: Manual Resumido Prof

Parte I

El entorno MatLab

1

Page 6: Manual Resumido Prof

CAPITULO 1

Primeros pasos.

Como podran suponer la manera de activar Matlab es dando doble-clicksobre el icono que figura en su escritorio de Windows. La pantalla de inicioesta dividida (generalmente) en tres ventanas: la primera a mano superiorizquierda nos habla del directorio actual de trabajo y de los archivos queallı se encuentran (por defecto, sera aca donde guardaremos la mayorıa denuestros trabajos); a mano inferior izquierda encontramos la ventana que noshabla del historial de ordenes que hemos trabajado y finalmente la ventanamas grande llamada COMMAND WINDOW que es donde trabajaremos.Si su configuracion actual no es similar a la que acabo de describir, sigaesta ruta desde los menus desplegables: DESKTOP/ DESKTOP LAYOUT/DEFAULT.

Sabemos que MatLab esta listo para recibir ordenes porque aparece elsımbolo

>>

En este punto podemos decirle que haga operaciones normales, usandolos sımbolos habituales de todos los programas de computo (+, -, *, /, ˆ,etc).

>>3ˆ2-(5+4)/2 +6*3

ans=

22.5000

Vemos que guarda la respuesta en la variable ANS, que es la que usa pordefecto el programa. Tambien vemos que el resultado esta ubicado justo de-

2

Page 7: Manual Resumido Prof

3

bajo del signo igual, esto nos indica que estamos trabajando con operacionesnumericas (no simbolicas).

En MatLab podemos asignar nombres a cualquier tipo de variables yusarlas en cualquier momento de nuestra sesion de trabajo. Para el siguienteejemplo, tenga en cuenta que en MatLab, los angulos para las funcionestrigonometricas se dan en radianes:

>> u=cos(10)u =

-0.8391>> v=sin(10)v =

-0.5440>> uˆ2+vˆ2ans =

1MatLab usa punto flotante de doble precision, que es exacto hasta 15

dıgitos, sin embargo MATLAB solo muestra 5 dıgitos por defecto, para vermas dıgitos, usar FORMAT LONG :

>>format longY repita las ordenes anteriores. No tiene que volver a escribirlas, simple-

mente use la flecha ↑ y una vez aparezca la orden deseada se pulsa ENTERsimplemente. Para volver al estado normal, usar FORMAT SHORT :

>> format shortSi desea borrar de la memoria del equipo todas las variables asignadas

use CLEAR ALL:>>clear allY si desea borrar la pantalla, use CLC :>>clc

Page 8: Manual Resumido Prof

CAPITULO 2

Calculos Simbolicos

Aunque Matlab no fue hecho originalmente para la realizacion de calculossimbolicos, estos pueden tambien realizarse en el entorno mismo del progra-ma. Versiones mas recientes del programa incluyen un “cerebro” propio paraeste tipo de operaciones llamado MuPad. (Si tiene una version de Matlab2008 o superior, trate con >>MUPAD)

Para empezar, debemos usar primero la orden SYMS seguida de lasvariables que van a ser usadas como simbolicas:

>>syms x y

y una vez hecho esto, podemos hacer cualquier tipo de operacion quedeseemos, por ejemplo el producto (x− y)(x− y)2:

>>(x-y)*(x-y)ˆ2

ans =

(x-y)ˆ3

Note que en resultados simbolicos la respuesta aparece exactamente bajola variable (ANS en este caso).

Si queremos desarrollar el anterior producto notable, usamos la ordenEXPAND

>>expand (ans)

ans =

xˆ3-3*xˆ2*y+3*x*yˆ2-yˆ3

Y si queremos factorizar el anterior resultado, usamos FACTOR

>>factor (ans)

4

Page 9: Manual Resumido Prof

5

ans =(x-y)ˆ3

Para expresar una formula en su forma mas simple se usa simplify. Por

ejemplo si queremos simplificar la fraccion x3−y3x−y , procedemos ası:

>>simplify((xˆ3-yˆ3)/(x-y))ans =xˆ2+y*x+yˆ2

Como ha podido observar, la presentacion de resultados de Matlab noes muy estetica que digamos, (deberıan tener en su equipo de desarrolloun Arquitecto o un Publicista), sin embargo, hay una manera de mejorarlevemente esta forma de presentacion y es por medio del comando PRETTY :

>> pretty(ans)

Para la simplificacion de expresiones hay un comando mas poderosollamado SIMPLE. Use ambos comandos (SIMPLIFY, SIMPLE) con la sigu-iente expresion sin(x) cos(y) + cos(x) sin(y). Como puede ver, el comandoSIMPLE logra hacer la simplificacion completa a la vez que muestra todaslas opciones que tuvo en consideracion.

Ahora, consideremos el siguiente ejemplo:>>cos(pi/2)ans =6.1232e-017

Que es un numero muy cercano a cero pero NO es cero, ahora ensaye:>>cos(sym(‘pi/2’))ans =0

Que es la respuesta correcta. Con esto vemos que SYM hace que lasvariables sean simbolicas en el momento mismo, mientras que SYMS lasdefine para toda la sesion. De igual manera:

>>sym(‘1/2’)+sym(‘1/3’) da como resultado el valor de 5/6

Finalmente, se puede hacer aritmetica de precision variable con la funcionVPA:

>>vpa(‘sqrt(2)’,50)Muestra el resultado de

√2 con 50 dıgitos de precision:

ans =1.4142135623730950488016887242096980785696718753769

Ahora, evalue las siguientes expresiones: 3ˆ45, vpa(3ˆ45) y vpa(’3ˆ45’)Como puede ver la primera da aproximacion de punto flotante a la ex-

presion, la segunda da respuesta valida solo en sus primeros 16 dıgitos y latercera da la respuesta exacta.

Page 10: Manual Resumido Prof

6 CAPITULO 2. CALCULOS SIMBOLICOS

Tambien se pueden resolver ecuaciones en forma exacta con Matlab.Para esto, hacemos uso del comando SOLVE. Por ejemplo, para resolver laecuacion x2 − 2x− 4 = 0, hacemos:

>>solve(‘xˆ2-2*x-4=0’)ans =5ˆ(1/2)+1-5ˆ(1/2)+1

Estas son las soluciones exactas. Si desea saber el valor numerico, sim-plemente haga double(ans) o vpa(ans)

Tambien podemos resolver sistemas de ecuaciones lineales de forma ex-acta, por ejemplo, para resolver el sistema:{

x2 − y = 2

y − 2x = 5

Hacemos lo siguiente:>>[x y]=solve(‘xˆ2-y=2’,’y-2*x=5’) y la respuesta esx =1+2*2ˆ(1/2)1-2*2ˆ(1/2)

y =7+4*2ˆ(1/2)7-4*2ˆ(1/2)

La primera solucion de X va con la primera solucion de Y, y ası sucesi-vamente.

Page 11: Manual Resumido Prof

CAPITULO 3

Vectores y Matrices

Un vector en Matlab es una lista secuencial de numeros, se pueden ingre-sar tecleando los elementos de la misma separandolos por comas o espaciosencerrados entre parentesis cuadrados:

>>z=[2,4,6,8]

>>y=[4 -3 5 -2 8 1]

Si deseo crear vectores con valores de 1 a 9 uso el separador dos puntos(:)

>>x=1:9

Si necesito que los elementos del vector tengan algun incremento (puedenser decimales o valores negativos), estos los coloco en el medio de los ex-tremos de la lista:

>>x=0:2:10

Se pueden extraer elementos de la lista indicando el nombre del vectory entre parentesis la posicion del elemento, por ejemplo:

>> x(1)

>> x(3)

Para la traspuesta del vector (volverlo vector fila a vector columna) usoel sımbolo ’

>>x’

Se pueden hacer operaciones matematicas, teniendo en cuenta que sideseo aplicar una operacion matematica a todos los elementos de un vector,debo poner el signo punto (.) despues del nombre del vector:

7

Page 12: Manual Resumido Prof

8 CAPITULO 3. VECTORES Y MATRICES

>>x.ˆ2Y si quiero multiplicar los elementos de un vector elemento por elemento

uso tambien el sımbolo punto (.)>>x.*y

Una matriz para MatLab es un arreglo rectangular de numeros y seintroducen por medio del signo punto y coma (;) separando las filas:

>>A=[1,2,3,4;5,6,7,8;9,10,11,12]Tambien se puede introducir de forma “bonita” como si la estuvieramos

escribiendo normalmente:>> A=[1 2 3 45 6 7 89 10 11 12]A =

1 2 3 45 6 7 89 10 11 12

Al final de la entrada de cada lınea (es decir, despues de 4 y 8) se pulso latecla ENTER normalmente.

Esta matriz A la puedo multiplicar por el vector z de arriba (recuerdelas normas de multiplicacion entre matrices):

>>A*z’Cuando se definen vectores muy grandes se puede suprimir la aparicion

de todo el vector escribiendo el sımbolo punto y coma (;) al final:>>x=-1:0.1:2;En general, el uso de (;) se acostumbra para no llenar la pantalla de

resultados y mantener mas “limpio” el ambiente de trabajo en Matlab

Ahora, definamos la matriz:>>A=[1 2 3;4 5 6;7 8 9]A partir de este momento la matriz A esta disponible para cualquier

operacion:>>A’ calcula la traspuesta>>det[A] calcula el determinante de la matrizTambien puedo asignarse este valor a otra matriz>>B=A’Y ya puedo hacer operaciones>>B*A>>A*BEn MatLab se puede acceder a cada elemento por medio de las coorde-

nadas A(fila, columna)

Page 13: Manual Resumido Prof

9

>>A(1,2)Para invertir una matriz uso el comando INV :>>C=inv(A)Ojo al mensaje de error. . . .MATRIX IS CLOSE TO SINGULAR...Definamos otra:>>A=[1, 4, -3;2, 1, 5;-2, 5, 3]>>B=inv(A)Y ya puedo hacer operaciones:>>B*ASimilares ordenes aplican para trabajo con vectores:>>x=[10 20 30]Para vector columna, separo por el signo de punto y coma (;)>>y=[11;12;13]Si los intentamos sumar, da error, pero si lo hago con traspuesta del

vector Y, ahı si da correcto:>>x+y’Y se accede igual que en las matrices>>x(1)>>y(2)

Volviendo al tema de matrices, existen varias tipos de ellas en Matlab:>>eye(4) matriz identidad de 4x4>>zeros(3,5) matriz de ceros tamano 3x5>>zeros(4) igual que la anterior, solo que de tamano 4x4>>ones(3) matriz de unos de tamano 3x3>>ones(2,4) igual que la anterior, solo de que tamano 2*4>>linspace(1,10,6) crea vector con 6 valores igualmente espaciados

entre 1 y 10 en este punto, recuerde que es diferente de crear un vector dela siguiente forma (1:2:10) (puede ver porque?)

>>rand(3) crea una matriz de numeros aleatorios entre 0 y 1 y tamano3x3

>>randn(3) igual que la anterior, solo que la distribucion aleatoria estanormalizada

>>magic(4) matriz de 4*4 tal que todas las filas y columnas suman lomismo (este comando siempre debe ser para matrices cuadradas), note queel numero mas grande es 4*4

Para solucionar sistemas de ecuaciones simultaneas, tenemos los oper-adores DIVISION (/) y DIVISION DERECHA (∖). Veamos:

>>A=magic(3)Y digamos que nuestro vector solucion es

Page 14: Manual Resumido Prof

10 CAPITULO 3. VECTORES Y MATRICES

>>b=[1;2;3]

Para hallar el vector x de las soluciones tenemos dos opciones:

Primero, multiplicamos la inversa de la matriz A por el vector de solu-ciones:

>>x=inv(A)*b

O usamos el operador division derecha (∖):>>x=A∖bPara verificar la respuesta, multiplicamos:

>>A*x y vemos que da el vector respuesta b

Ahora, definamos la siguiente matriz, que es una matriz singular:

>>A=[0,1,6;0,5,7;0,9,2]

>>b=[1;7;7]

>>x=A∖bObserve que da un mensaje de error, pero aun ası invierte la matriz. En

este caso, el sistema intenta hallar la solucion por el metodo de los mınimoscuadrados.

>>A*x para verificar la respuesta, pero da como resultado NaN, esdecir, error.

Ensaye que pasarıa si usaramos el procedimiento habitual:

>>x=inv(a)*b

Existen otras formas de definir matrices, por ejemplo, definamos la ma-triz:

>>A=rand(3,4)

Y el vector

>>x=rand(1,3)

>>[m,n]=size(A) devuelve el numero de filas y columnas de A

>>n=length(x) devuelve el numero de elementos del vector x

>>zeros(size(A)) forma una matriz de ceros con el tamano de la matrizA previamente definida

>>ones(size(A)) igual al anterior, pero la matriz de unos

>>B=diag(x) forma una matriz diagonal con los elementos del vectorx en su diagonal

>>B=diag(A) forma un vector con los elementos de la diagonal de lamatriz A

>>diag(diag(A)) crea una matriz diagonal a partir de los elementosde la diagonal de A

>>triu(A) forma una matriz triangular superior a partir de una matrizA

Page 15: Manual Resumido Prof

11

>>tril(A) forma una matriz triangular inferior a partir de una matrizA

Tambien se puede crear una matriz a partir de varias previamente definidas

>>a=rand(3)

>>b=diag(diag(a))

>>c=[a,eye(3);zeros(3),b]

Haga Usted mismo este ultimo ejemplo y verifique que los tamanos delas matrices que utilizamos deben ser coherentes.

Matlab tambien nos permite hallar los valores y vectores propios de unamatriz, por ejemplo, definamos la siguiente matriz C:

>>C=[2,4,5;7,8,9;11,12,13]

Para calcular los valores y vectores propios, procedemos:

>>[V,E]=eig(C)

Vemos que Matlab nos da dos respuestas: nos genera una matriz diagonalE con los valores propios de C y una matriz V cuyas columnas son loscorrespondientes vectores propios (Ud. puede comprobar efectivamente queC*V=V*E )

Con esto ya podemos diagonalizar la matriz C.1 En nuestro caso:

>>D=inv(V)*C*V

Si definimos los siguientes vectores:

>>v=[1 3 4]

>>X=rand(1,6)

>>X(v) obtiene los elementos de x en las posiciones 1,3 y 4

Ahora, veremos el operador (:) que muy potente en la sintaxis de Mat-laba para manejo de matrices:

Definamos primero un vector x

>>x=1:10

Juegue con el y analice los resultados:

>>x=1:2:10

>> x=1:1.5:10

>>x=10:-1:1

Note que por defecto se producen vectores fila, si se desea vector columnasimplemente se transpone el resultado. Si por ejemplo queremos crear unatabla de senos y cosenos entre 0 y 2�, hacemos las siguientes ordenes (elsigno % indica un comentario y Matlab no tiene en cuenta lo que aparezcadespues de el):

1recuerde que diagonalizar una matriz A, equivale a hallar otra matriz P tal queP−1AP = D, donde D es una matriz diagonal.

Page 16: Manual Resumido Prof

12 CAPITULO 3. VECTORES Y MATRICES

>>x=[0.0:pi/10:2*pi]’; %vector columna de valores de PI/10

>>y=sin(x);z=cos(x); %almacenamos los valores Y y Z

>>[x y z] %escribimos los resultados

Note que en los primeros dos renglones de nuestro anterior ejemplo us-amos el operador (;) para evitar que apareciera el resultado en pantalla yası mantener mas limpio el area de trabajo.

Sigamos con nuestro operador (:)>>A=magic(6)>>A(2,3) extrae el elemento de la fila 2 columna 3>>A(6,1:4) extrae los 4 primeros elementos de la 6 fila>>A(3,:) extrae TODOS los elementos de la 3 fila>>A(3:5,:) extrae TODOS los elementos de las filas 3,4 y 5>>A([1 2 5],:) extrae completamente las filas 1,2 y 5Si quisieramos formar un vector fila compuesto por los elementos de las

dos primeras columnas de A, harıamos lo siguiente:>> v=[A(:,1)’ A(:,2)’]Esta facilidad de manejo de las matrices y vectores es lo que lo hace mu-

cho mas practico que el lenguaje C o C++ a la hora de hacer programacionde algoritmos matematicos.

Finalmente, los polinomios tambien se pueden manejar por medio dematrices:

Supongamos que queremos hallar las raices del polinomio x4−8x2+6x−10 = 0. Lo primero que hacemos es definir un vector con los coeficientes delpolinomio, usando el valor de cero para las potencias que no existan:

>>pol=[1 0 -8 6 -10] Aca definimos el vector y lo asignamos a lavariable pol

Para hallar las raices, entonces usamos el comando ROOTS> > roots(pol) Claro que esto lo pudimos haber hecho de otra forma,

¿podria decir cual?Si queremos saber cuanto vale el polinomio cuando x = 1, hacemos:> > polyval(pol,1)

Page 17: Manual Resumido Prof

CAPITULO 4

Funciones en Matlab

Matlab tiene incorporadas cientos de funciones para facilitar los calculosrutinarios, ejemplos basicos son el logaritmo natural (LOG), el logaritmo enbase diez (LOG10 ), las funciones trigonometricas, etc:

>>log(exp(3)) nos calcula el logaritmo natural de e3

>>log10(2) nos calcula el logaritmo en base diez del numero dos

>>sin(2*pi/3)

Y si se desea la respuesta exacta de este ultimo, entonces recuerde:

>>sin(sym(’2*pi/3’))

El usuario tambien puede definir sus propias funciones. Supongamos quenecesitamos la siguiente funcion f(x) = x2 + x+ 1 para una serie de opera-ciones, entonces:

>>f=inline(’xˆ2+x+1’,’x’)

Observe que el primer argumento es una cadena de caracteres definiendola funcion y el segundo argumento indica la variable independiente.

Si necesitamos evaluar esta funcion en un punto dado, por ejemplo cuan-do x = 4, hacemos:

>>f(4)

Si queremos que una funcion creada por nosotros actue sobre vectores,procedemos de la siguiente manera:

>>f1=inline(vectorize(’xˆ2+x+1’,’x’))

Observe en la respuesta de Matlab el punto despues de la primera x,indicando que esta listo para trabajar sobre vectores. Despues de esto, ya

13

Page 18: Manual Resumido Prof

14 CAPITULO 4. FUNCIONES EN MATLAB

podemos trabajar sobre vectores:>>f1(1:5)A partir de la version 7.0 de Matlab, se tiene el operador @, mucho mas

eficiente, para definir funciones propias del usuario:>>f1=@(x) xˆ2+x+1>>f1(4)Si la quiero aplicar sobre vectores:>>f1=@(x) x.ˆ2+x+1>>f1(3:8)Tambien puedo definir funciones en mas de una variable:>>g=@(u,v) uˆ2+vˆ2>>g(1,2)

Ahora veamos como podemos trabajar con funciones que estan definidascon variable simbolicas:

>>syms x y>>f=cos(x)+3*xˆ2Si por ejemplo queremos hallar el valor de la funcion f cuando x = �,

usamos el comando SUBS>>subs(f,pi)Definamos ahora otra funcion:>>g=exp(-yˆ2)Podemos hacer composicion de funciones:>>h=compose(g,f)Y podemos incluso multiplicarlas:>>k=f*gEl comando>>subs(k,[x,y],[0,1])Evalua la funcion k reemplazando los valores de x e y por los de 0 y 1

Page 19: Manual Resumido Prof

CAPITULO 5

Graficos en Matlab

En Matlab se disponen de dos funciones para crear graficos: EZPLOT yPLOT. EZPLOT es la forma mas simple de hacer graficos de funciones enuna variable, veamos:

>>ezplot(‘xˆ2+x+1’,[-2, 2]) grafica la funcion dada entre las abscisas-2 y 2. Observe que se abre una nueva ventana y se muestra la graficasolicitada.

Se puede modificar el aspecto de la grafica ası:

>>title (‘Una parabola’) cambia el titulo de la grafica

>>xlabel (‘valores de x’) cambia el titulo del eje X

>>ylabel (‘valores de y’) cambia el titulo del eje Y

Ahora, debe tener una grafica muy parecida a la siguiente:

15

Page 20: Manual Resumido Prof

16 CAPITULO 5. GRAFICOS EN MATLAB

Fig. 1 - Dibujo de una parabola con la orden EZPLOT

Tambien podemos cambiar el rango de los ejes:

>>axis([-2, 2, 1, 4])Aca introdujimos los numeros separados por espacios. Los dos primeros

son los limites en el eje X, mientras que los dos segundos los limites en el ejeY. Recordar que se deben especificar ambos ası solo cambie uno de los ejes

Para cerrar la ventana de graficos FILE:CLOSE en la ventana de lagrafica.

El otro comando para graficos es PLOT, que trabaja sobre vectores. Atıtulo de introduccion, hagamos lo siguiente:

>> x=[1 2 3];>>y=[4 6 5];>>plot(x,y)El comando dibuja por pares 1-4, 2-6, etc y los une por rectasAhora, intentemos dibujar la parabola anterior con el comando PLOT.

Como queremos dibujar la parabola en el intervalo (-2,2), creamos un vectorque contenga estos puntos:

>>X=-2:0.1:2;Observe que hicimos intervalos de 0.1 para que la grafica sea mas bonita.

Intente Ud. mismo otros intervalos y compare el resultado. Ahora, si pro-

Page 21: Manual Resumido Prof

17

cedemos con la grafica, observe en la siguiente orden que primero indicamosel vector que contiene las coordenas, y luego la funcion a dibujar (la parabolaen este caso). Note tambien que esta escrita en forma vectorizada.

>>plot(X,X.ˆ2+X+1)

Tambien podemos dibujar funciones definidas por partes. Por ejemplo,supongamos que deseamos dibujar la siguiente funcion:

f(x) =

⎧⎨⎩x2, si x < 0,

1, si 0 ≤ x < 1,

−x+ 2, si 1 ≤ x

Lo primero que hacemos es generar un vector con los valores sobre losque queremos evaluar la funcion, en nuestro caso, sera el intervalo [-2,3]:

>>x=-2:0.01:3;

Observe que usamos incrementos de 0.01 para que la grafica se vea mejor,Usted puede ensayar con otro tipo de incrementos para ver las diferencias.Ahora, definimos la funcion multiplicando cada trozo por el rango en cualqueremos sea dibujada. Observe el punto (.) despues de cada definicion yrecuerde que hace referencia a operaciones sobre vectores:

>> y=(x.ˆ2).*(x<0)+1.*((0<=x)&(x<1))+(-x+2).*(1<=x);

Ahora, ya podemos dibujar la funcion, en el comando PLOT a con-tinuacion le indicamos que la dibuje con puntos (‘.’) para que se observemejor. Usted puede intentar hacerlo sin puntos o con otra figura para queobserve las diferencias. Note tambien que hicimos todas las ordenes en unsolo renglon, pero separadas por comas.

>> plot(x,y,’.’), grid on, title(’Funcion definida a trozos’) Ytenemos la grafica, que debe ser muy parecida a la siguiente:

Page 22: Manual Resumido Prof

18 CAPITULO 5. GRAFICOS EN MATLAB

Fig. 2 - Funcion definida a trozos

Si quisieramos graficar dos funciones al mismo tiempo, por ejemplo e−x

y sin(x), hacemos lo siguiente:

>>ezplot(‘exp(-x)’,[0,10])

>>hold on

>>ezplot(‘sin(x)’,[0,10])

>>grid on

>>hold off

>>title (’eˆ{-x} y Sin (x)’)

En la anterior secuencia, el comando HOLD ON hace que la graficainicial (e−x) permanezca en pantalla cuando se dibuje la siguiente grafica(sin(x)), de no hacerlo, solo se mostrarıa la ultima grafica que se indique.El comando GRID ON hace que aparezca el entramado de la grilla. Laforma de escribir e−x entre llaves es para mostrar que Matlab tambien acep-ta comandos de LATEXen la presentacion de graficas. Si no conoce LATEX,simplemente ignore esta indicacion y escriba de la forma acostumbrada.

Ahora, hagamos el mismo ejemplo con el comando PLOT :

>>x=0:0.1:10;>>plot(x,exp(-x),x,sin(x)), grid on,title (’eˆ{-x}y Sin (x)’) Observe que para cada funcion a dibujar hay que especificarantes el vector x que contiene el rango de las abscisas

Page 23: Manual Resumido Prof

19

Con lo visto hasta ahora, ya estamos en condiciones de resolver unaecuacion del tipo e−x = sin(x). Si usamos el comando SOLVE de la formaacostumbrada:

>>solve(‘exp(-x)=sin(x)’,’x’)Vemos que Matlab nos arroja dos respuestas: una real y otra imaginaria.

Pero si repasamos la grafica de estas dos funciones (hecha en el apartadoinmediatamente anterior):

Grafica hecha en el apartado anterior con EZPLOT o PLOT

Observamos que hay varias intersecciones entre las dos curvas (lo queserian las raices reales de la ecuacion). Podemos entonces ayudarnos de es-ta grafica y de la funcion FZERO que evalua los ceros de una funcion enun intervalo dado.1 De la grafica vemos que hay una interseccion entre losvalores 0 y 1 :

>>fzero(@(x)(exp(-x)-sin(x)),0.5)Y el programa nos arroja la primera raiz, que en este caso es de 0.5885. El

valor de 0.5 que aparece despues de escribir la ecuacion en la orden FZEROes una guıa para que sepa donde empezar la iteracion. Puede hallar el restode las raices que aparecen en la grafica siguiendo el mismo metodo.

1Recuerde que resolver la ecuacion e−x = sin(x) es lo mismo que resolve la ecuacione−x − sin(x) = 0

Page 24: Manual Resumido Prof

CAPITULO 6

Calculo Diferencial e Integral

En Matlab podemos hacer todas las operaciones de calculo diferencial eintegral que necesitemos:

Para hacer derivadas usamos el comando DIFF :

>>syms x

>>diff(xˆ3) calcula la derivada de x3

Si necesitamos la segunda derivada por ejemplo, usamos:

>>diff(xˆ3,2) y ası sucesivamente.

Para la derivada de la funcion SENO:

>>diff(‘sin(x)’)

Para hacer derivadas parciales debemos indicar cual es la variable re-specto a la cual estamos derivando, por ejemplo ∂

∂y (x2y) escribimos:

>>diff(xˆ2*y,y)

En este ultimo caso debimos haber definido la variable y previamentecomo simbolica.

Si nos piden calcular ∂∂y ( ∂

∂x(sin(x ∗ yz ), debemos usar el comando DIFFvarias veces:

>>diff(diff(sin(x*y/z),x),y)

Recuerde que debimos haber definido las variables x,y,z como simbolicasantes del anterior calculo y recuerde tambien que si desea ver el resultadode una forma un poco mas decente puede usar el comando pretty(ans)

Si necesitamos resolver ecuaciones diferenciales, contamos con el coman-do DSOLVE. Por ejemplo, para resolver x ∗ y′ + 1 = y, hacemos:

20

Page 25: Manual Resumido Prof

21

>>dsolve(‘x*Dy+1=y’,’x’)

ans =

1+x*C1

La D antes de la variable Y indica que es derivada de primer orden yluego de la ecuacion, indicamos entre comillas la variable respecto a la cualse estan planteando las derivadas. La constante de integracion esta dada porC1.

Si tenemos una ecuacion diferencial de orden superior con valores en lafrontera, por ejemplo: resolver y′′ + 2y′ + 5y = 0, si y(0) = 1, y′(0) = 5,procedemos ası:

>> dsolve(’D2y+2*Dy+5*y=0’,’y(0)=1’,’Dy(0)=5’,’x’)

Observe que se indica el orden de la derivada con un numero despues dela letra D.

Y podemos graficar la respuesta:

>>ezplot(ans,[-2 ,2])

Tambien podemos hacer integrales, por ejemplo,∫x2dx:

>>int(‘xˆ2’,’x’)

O por ejemplo∫

11+ 1

sin(x)+cos(x)

:

>> int(’1/(1+(1/(sin(x)+cos(x))))’,’x’)

Como saben no todas las integrales se pueden expresar por medio defunciones, ensaye por ejemplo

∫ sin(x)x

>>int(‘sin(x)/x’,’x’).

En este caso, este tipo de funciones solo pueden integrarse de maneranumerica (donde Matlab es mas eficiente), po ejemplo

∫ 10

sin(x)x

En este caso, primero definimos variables simbolicas:

>>syms x

Y luego vectorizamos la funcion y nos ayudamos de la orden QUADL quesirve para calcular integrales numericas sobre un intervalo dado, en nuestroejemplo, el intervalo (0,1):

>>quadl(vectorize(sin(x)/x),0,1)

El comando QUADL no puede tener como limites +/- ∞ . En estoscasos, debe usarse una integracion entre rangos muy grandes. Por cierto, enMatLab, el infinito se denota con la palabra INF, si es menos infinito serıa-INF

Si necesitamos calcular una integral como∫ �0

∫ sin(x)0 (x2 + y2)dydx, hace-

mos:

>>int(int(xˆ2+yˆ2,y,0,sin(x)),0,pi)

Mire que debe indicarse en la primera el integrando (Y en este caso).

Page 26: Manual Resumido Prof

22 CAPITULO 6. CALCULO DIFERENCIAL E INTEGRAL

Tambien podemos calcular lımites con la orden LIMIT, por ejemplolımx→0

sin(x)x :

>>limit(sin(x)/x,x,0)Recuerde, que debio haber definido como simbolicas las variables que

intervienen en la expresion.Si se desea limites por la izquierda o por la derecha uso RIGHT o LEFT>>limit(abs(x)/x,x,0,’left’) calcula lımx→0−

∣x∣x . (Sera igual por la

derecha?).Tambien se pueden hacer sumas simbolicas, por ejemplo

∑n1 ( 1k −

1k+1)

(la suma telescopica), hacemos lo siguiente:>>syms k n>> symsum((1/k)-(1/(k+1)),1,n)ans =-1/(n+1)+1Tambien se pueden desarrollar series de Taylor. Si se desea calcular el

polinomio de Taylor para la funcion Sin(x) hasta orden 10:>>taylor(sin(x),x,10)ans =x-1/6*xˆ3+1/120*xˆ5-1/5040*xˆ7+1/362880*xˆ9

Recuerde que en cualquier momento puede tener mas ayuda e informa-cion acerca de cualquier comando en MatLab, mediante la orden HELP :

>>help taylorFinalmente, tambien se pueden calcular transformadas de Laplace, por

ejemplo, la transformada de Laplace de las funciones t5 y ea∗s

>>syms a s t x>>laplace(tˆ5)>>laplace(exp(a*s))Y tambien podemos obtener la transformada inversa:>>ilaplace(1/(s-1))>>ilaplace(exp(a)/(t-1))

Page 27: Manual Resumido Prof

CAPITULO 7

Ejercicios de la primera parte

A continuacion presento algunos ejercicios tomados de textos comercialesdedicados al MatLab. Recuerde que la mejor manera de aprendere es prac-ticando.

1. Cual de las siguientes fracciones 2709/1024, 10583/4000, 2024/765 esla mejor aproximacion de

√7 ?

2. Indique si el numero e�√163es un numero entero.

3. Resuelva, simbolicamente y numericamente, el siguiente sistema deecuaciones:

⎧⎨⎩3x+ 4y + 5z = 2

2x− 3y + 7z = −1

x− 6y + z = 3

Pruebe sus respuestas por medio de multiplicacion de matrices

4. Resuelva, simbolicamente y numericamente, el siguiente sistema deecuaciones: ⎧⎨⎩

3x− 9y + 8z = 2

2x− 3y + 7z = −1

x− 6y + z = 3

23

Page 28: Manual Resumido Prof

24 CAPITULO 7. EJERCICIOS DE LA PRIMERA PARTE

Que sucede?, puede explicar porque?. Una vez mas, pruebe sus respuestaspor medio de multiplicacion de matrices. Es “correcta” la respuesta?

5. Halle todas las raıces reales de la siguiente ecuacion: ex = 8x2 − 4

6. Cree un vector X con los siguientes elementos: xn = (−1)n+1

2n−1

y sume hasta 100 elementos de este vector. (Recuerde que para sumarlos elementos de un vector se usa la orden SUM y para multiplicarlos, laorden PROD)

Page 29: Manual Resumido Prof

Parte II

Nociones de Programacion

25

Page 30: Manual Resumido Prof

CAPITULO 8

Formas condicionales y ciclos

Matlab tiene los formatos IF –ELSE – IF normales de cualquier lenguajede programacion, por ejemplo, analice la siguiente lista de ordenes:

>> t=rand(1);

>> if(t>0.75)

s=1;

else

s=1-2*(t-0.25);

end

>> s

s =

1

>> t

t =

0.905791937075619

Lo que hicimos fue crear un numero aleatorio, luego le indicamos a Mat-Lab que si dicho numero es mayor a 0.75 la variable S seria igual a 1, en casocontrario (ELSE ) harıamos la operacion indicada. Tambien observe que elciclo completo es IF – ELSE – END.

Los operadores logicos en MatLab son: <, >, <=, >=, == (menor que,mayor que, menor o igual que, mayor o igual que e igual respectivamente),y ˜= (no igual). Tambien existe el operador AND (&&) y el operador OR(∣∣). Para explicacion mas detallada de estos dos ultimos comandos, use la

26

Page 31: Manual Resumido Prof

27

ayuda.Estos operadores por sı solos, son operadores binarios que retornan val-

ores de 0 (falso) o 1 (verdadero). Ensaye los siguientes ejemplos:>> 5>3ans =

1>> 5<3ans =

0>> 5==3ans =

0MatLab tambien tiene el ciclo FOR (similar al que se usa en los lenguajes

FORTRAN y C). Este ciclo a diferencia del visto anteriormente ejecuta unaoperacion un numero determinado de veces. Analice el siguiente ejemplo:

>> for i=1:4disp(iˆ2)end14916

Como puede ver, ejecuto la orden para los numeros 1 al 4 y los elevo alcuadrado. La orden siempre es FOR – accion a ejecutar - END . En elejemplo anterior, la orden DISP lo unico que hace es mostrar el resultado

El ciclo WHILE ejecuta una orden mientras se cumpla una condiciondada. El formato siempre es: WHILE – verifique condicion - END

>> x=1;>> while (1+x)>1x=x/2;end>> xx =1.1102e-016

Page 32: Manual Resumido Prof

CAPITULO 9

FUNCIONES Y SCRIPTS

Un SCRIPT es simplemente una coleccion de comandos de MatLab quese almacenan en un archivo de extension .M (puede crear estos archivossiguiendo esta ruta del menu: FILE/NEW/M-FILE ). La ventaja de estosarchivos es que almacenan ordenes que se deben repetir muchas veces du-rante una sesion de trabajo, ahorrandonos tiempo de trabajo.

Por ejemplo, creemos un SCRIPT que dibuje el seno de un angulocualquiera que ha sido multiplicado por un escalar cualquiera. Para esto,abrimos el editor de MatLab siguiendo la ruta indicada antes y tecleamoslos siguientes comandos:

x = 0:2*pi/N:2*pi;

y = sin(w*x);

plot(x,y)

Grabamos este archivo con el nombre plotsin.m y podemos cerrar eleditor. Observe que el nuevo archivo aparece en la ventana CURRENT DI-RECTORY. Ahora, usemos nuestro SCRIPT :

>> N=100;w=5;

>> plotsin

Y observe la grafica que se obtiene.

Como ve, para poder usar un SCRIPT debe referirse a las variable talcual las definio en el archive mismo (N y w en este caso) y tambien puedeque los comandos del SCRIPT se ejecutaron de la misma forma que si loshubieramos tecleado directamente en la ventana principal de MatLab.

28

Page 33: Manual Resumido Prof

29

Mucho mas poderoso que un SCRIPT es una funcion (FUNCTION ), yaque estas nos permiten crear nuevos comandos de MatLab. Una FUNCIONse define dentro de un archivo .M que empieza con una lınea de la siguienteforma:

function [salida1,salida2,...] = nombre orden(entrada1,entrada2,...)

El resto del archivo consiste en comandos de MatLab ejecutando lasordenes solicitadas.

Supongamos que deseamos crear una funcion que calcule la siguienteformula:

f(x) = sin(x2)

Almacene los siguientes comandos en un archivo llamado fcn.m :

function y = fcn(x)

%Calcula el seno del cuadrado de un angulo

y = sin(x.ˆ2);

(Observe que debido al punto en x.ˆ2 esta funcion trabaja tambien so-bre vectores). Ahora, podemos usar esta funcion como cualquier orden deMatLab (por diversion, teclee >>help fcn)

>> x = (-pi:2*pi/100:pi)’;

>> y = sin(x);

>> z = fcn(x);

>> plot(x,y,x,z)

>> grid

Y observe que se produce la grafica de Sen (X) y la de la funcion FCN.

Ahora, hagamos un ejemplo levemente mas complicado, tomado del libro“Numerical Methods for Civil Engineers”, del Profesor T. Young.

Supongamos que deseamos programar el metodo de Newton para hallarraıces de ecuaciones.

Recordemos primero que la base del metodo de Newton es la aproxi-macion de una funcion por medio de su linearizacion en un punto dado, esdecir:

f(x) ≈ f(x0) + f ′(x0)(x− x0)

Como lo que deseamos es encontrar un valor de x tal que f(x) = 0,hacemos el lado derecho de la anterior ecuacion igual a cero y resolvemos,para obtener:

x ≈ x0 −f(x0)

f ′(x0)(9.1)

Page 34: Manual Resumido Prof

30 CAPITULO 9. FUNCIONES Y SCRIPTS

Nosotros empezamos el metodo con un valor inicial estimado x0, queesperamos sea cercano a la raız buscada, digamos x∗, luego, definimos unasecuencia de puntos {x0, x1, . . .} de la formula:

xi+1 = xi −f(xi)

f ′(xi)

Que se obtiene de la ecuacion (9.1).Para programar este metodo, abramos un nuevo archivo .M en MatLab

y tecleemos lo siguiente:

function x=newton(f,f1,x0,n)

%resuelve f(x)=0 ejecutando n pasos del metodo de Newton empezando

% en x0.

%f debe ser una funcion y f1 debe su correspondiente derivada

x=x0; %hace que x sea igual al valor estimado x0

for i=1:n

x = x-f(x)/f1(x); %Esta es la formula de Newton

end

Grabe lo anterior y ensayemos la funcion para resolver la ecuacion x3 −5 = 0.

Primero, definimos la funcion f :

>> f = @(x) xˆ3-5f =

@(x)xˆ3-5Luego, definimos su derivada en la funcion f1 :

>> f1 = @(x) 3*xˆ2f1 =

@(x)3*xˆ2(Los anteriores pasos tambien los pudo hacer con la orden INLINE )

Como necesitamos saber un valor de inicio estimado, lo mejor es graficarla funcion:

>> ezplot(’xˆ3-5’);grid on;De la grafica vemos que hay una raız entre 0 y 2, ensayamos entonces

con 1 y ejecutamos la funcion con una iteracion de 10 veces:>> newton(f,f1,1,10)ans =

1.7100Observe que coincide con el resultado algebraico obvio que es 3

√5

Page 35: Manual Resumido Prof

31

Queda claro que para poder usar una funcion primero debemos definirlos parametros que vamos a utilizar y debemos utilizarlos con los mismosnombres que usamos dentro de la funcion.

Esta funcion tan simple trabaja bien, pero no nos indica si el valorobtenido esta muy cerca o no de la raız esperada (toda vez que lo unicoque hace es repetir el proceso un determinado numero de veces). Podemosmejorar este proceso, indicandole a la funcion la tolerancia de error quedeseamos.

Para modificar el archivo, simplemente de doble – click en el en la ven-tana de directorio de trabajo, y haga las modificaciones que se muestran acontinuacion:

function x=newton(f,f1,x0,tol)

%resuelve f(x)=0 ejecutando el metodo de Newton empezando

% en x0.

%f debe ser una funcion y f1 debe su correspondiente derivada

x = x0; %hace que x sea igual al valor estimado x0

y = f(x);

while abs(y) > tol %Esta es la formula de Newton, que se ejecuta

x = x-y/f1(x); %hasta que se alcanza la tolerancia indicada.

y = f(x);

end

Y ahora, corra nuevamente esta funcion, definiendo los valores tal comolo hicimos arriba, solo que la variable de tolerancia tol es nueva :

>> tol=.00001tol =1.0000e-005

Y ahora si, ejecute la funcion de nuevo:>> newton(f,f1,1,tol)ans =1.7100

Ensaye esta funcion con diferentes tipos de ecuaciones y verifique surespuesta con los valores obtenidos con MatLab

Page 36: Manual Resumido Prof

CAPITULO 10

Ejercicios de la segunda parte

A continuacion presento algunos ejercicios tomados de textos comercialesdedicados al MatLab. Recuerde que la mejor manera de aprendere es prac-ticando.

1. La serie de Fibonacci se calcula de acuerdo a la siguiente relacion:

fn = fn−1 − fn−2Con los valores de f0 = f1 = 1.Cree una funcion o un script (segun sea su gusto) que calcule los primeros

n numeros de Fibonacci (El usuario puede elegir cuantos numeros desea veren pantalla).

2. Como puede ver, la funcion NEWTON que definimos arriba, deja mu-cho que desear, principalmente si la funcion tiene una derivada difıcilde calcular. Modifique la funcion NEWTON, de tal forma que tomecomo entrada una funcion f en forma simbolica y los valores x0 y n(o tol segun sea su gusto). Haga que el programa calcule la derivadasimbolica y luego use la orden SUBS para proceder con el metodo deNewton.

3. Siguiendo con nuestra funcion NEWTON, tambien vimos que tenıamosque visualizarla primero para poder tener una idea del valor inicial a

32

Page 37: Manual Resumido Prof

33

usar. Haga una rutina que calcule el rango en el cual puede existiruna raız para una funcion dada. Recuerde del algebra elemental quesi multiplica el valor de una funcion en dos puntos 1 y 2, el signo delresultado de f(1)*f(2) indica que posiblemente hay una raız si este esnegativo