Apuntes

15
Elementos b´ asicos de Matlab Juan Pablo Contreras Santiago, 2012 Universidad de Santiago de Chile Facultad de Ciencia Departamento de Matem´aticas

description

apuntes analisis numerico

Transcript of Apuntes

Page 1: Apuntes

Elementos basicos de Matlab

Juan Pablo Contreras • Santiago, 2012

Universidad de Santiago de ChileFacultad de Ciencia

Departamento de Matematicas

Page 2: Apuntes

Indice

1. Introduccion 3

2. Elementos basicos 4

2.1. Interfaz de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.2. Operatoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3. Matrices y vectores 5

3.1. Construcciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3.2. Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3.3. Operatoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3.4. Funciones sobre matrices y vectores . . . . . . . . . . . . . . . . . . . . . . . . . 9

4. Funciones 12

4.1. Funciones elementales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

4.2. Funciones de tipo inline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

4.3. Funciones simbolicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

5. Graficos 15

2

Page 3: Apuntes

1. Introduccion

Este es un pequeno texto donde se tratan los elementos mas basicos de Matlab. El objetivo es ser-vir de apoyo a estudiantes interesados en utilizar el software para aplicaciones complementariasde su curso de metodos numericos, analisis numerico o bien solo por el hecho de familiarizarsecon el software. La idea central es entregar las herramientas basicas con las cuales, acompanadasde conocimientos en programacion, puedan construir herramientas mas especificas.El software Matlab es un lenguaje orientado a matrices, es decir, todas las representacionesbasicas hacen referencia estos elementos. Sin bien parece ser limitado el hecho de trabajar conmatrices, al poco andar y con un poco de imaginacion podemos notar la enorme cantidad decosas que podemos interpretar como matrices, desde un numero real (matriz de 1x1) hastaimagenes JGP (una imagen pequena, por ejemplo, puede interpretarse como una matriz de 128pixeles x 128 pixeles).

Ventajas

Manejo de matrices

Facil representacion de datos y funciones

Lenguaje simple para la implementacion de algoritmos

Gran cantidad de funciones pre-establecidas

Desventajas

Uso exagerado de recursos computacionales

Difıcilmente se puede controlar el uso de memoria

3

Page 4: Apuntes

2. Elementos basicos

2.1. Interfaz de usuario

El software nos presenta una gran cantidad de interfaces de usuario, todas con un proposito utily especifico. Entre las mas utilizadas tenemos 3 que son las que generalmente aparecen al iniciarel programa despues de su instalacion.

Command Window La ventana de comandos es la interfaz con la que interactua elusuario. En este cuadro tenemos la posibilidad de escribir las instrucciones, ejecutarlas yver los resultados.

Workspace Este cuadro designado como espacio de trabajo nos muestra las variables quevamos guardando durante nuestro trabajo. Desde ella podemos acceder a las variables ymodificarlas o hasta eliminarlas directamente.

Command History El historial de comandos guarda un registro completo de cada ins-truccion que ejecutamos en el Command Window. Es util como referencia y da la posibi-lidad de repetir una instruccion solo con con darle doble click a esta.

2.2. Operatoria

Una buena practica inicial es trabajar con operaciones elementales en la ventana de comandos.Para ello utilizamos la ventana de comandos como si esta fuese una calculadora, la sintaxis eneste caso es de las mas usuales +,−, ∗, /, ^ para suma, resta, multiplicacion, division y potenciasrespectivamente. Se utilizan parentesis normales para dar prioridad a las operaciones cuandosea necesario.

>> 9+6*5

ans =

39

Note en este punto que Matlab reconoce el orden de las operaciones y que cada vez que noasignamos un nombre de variable a alguna instruccion que entrega un valor, este valor se guardaen la variable ans que inmediatamente aparece en el Workspace.

Podemos asignar valores a variables, basta con ejecutar el comando a=5 para que nuestra va-riable ”a” tome el valor 5, esta ejecucion se refleja tambien en el Workspace. Observamos queMatlab diferencia entre mayusculas o minusculas, ademas las variables pueden tener numerosen su nombre pero no otro tipo de caracteres (como tildes o comas).

Podemos tambien limpiar las interfaces de usuario con algunos comandos, por ejemplo, si eje-cutamos clc limpiamos la ventana Command Windows, esto sirve para tener mayor claridad yno confundirse con calculos anteriores. El comando clear limpia el Workspace, es decir, eliminalas variables que hemos guardado, es util cuando quiere empezarse un trabajo desde cero.

4

Page 5: Apuntes

3. Matrices y vectores

Como se dijo en la introduccion Matlab es un software orientado a matrices, en esta seccionestudiaremos como declarar matrices, como operar con ellas, y veremos funciones que podemosaplicar directamente sobre estas.

3.1. Construcciones

Como vimos podemos asignar valores a variables ejecutando por ejemplo >> x = 6. En estecaso lo que hace Matlab es considerar el numero real 6 como una matriz de 1x1. Para obtenerdimensiones mayores, solo debemos asignar los valores de nuestro arreglo dentro de corchetes yseparados por espacios. Por ejemplo si queremos declarar el vector

V =(

1 2 3 4 5)

tendrıamos que hacerlo de la siguiente forma

>> V = [1 2 3 4 5]

V =

1 2 3 4 5

Este vector, o matriz de 1x5, queda inmediatamente asignado en el Workspace.

Para construir matrices el proceso es identico, se deben escribir las filas como si fuesen vectoresy separar cada una de estas por ”;”. Por ejemplo para escribir la matriz

A =

2 3 54 6 17 9 8

el comando a ejecutar sera el siguiente.

>> A = [2 3 5;4 6 1;7 9 8]

A =

2 3 5

4 6 1

7 9 8

5

Page 6: Apuntes

Matlab ofrece funciones para realizar construcciones rapidas de matrices, estas se usan cuandolas matrices son de dimensiones grandes y tienen formas especificas. A continuacion se muestranalgunas de estas funciones.(En lo que sigue suponemos que A,B,C son matrices, V es un vector y n,m son numerosenteros)

zeros(n,m) Devuelve una matriz de dimension n x m con cero en todas sus componentes.

ones(n,m) Devuelve una matriz de dimension n x m con uno en todas sus componentes.

eye(n,m) Devuelve una matriz de dimension n x m con unos en la diagonal principal yceros fuera.

rand(n,m) Devuelve una matriz de dimension n x m con componentes aleatorias.

diag(V) Devuelve una matriz diagonal donde la diagonal contiene los elementos de V.

blkdiag(A,B,C) Devuelve una matriz diagonal por bloques donde la diagonal contiene alas matrices A,B,C.

3.2. Referencias

Tal como en otros lenguajes de alto nivel, podemos hacer referencia a componentes especificasde matrices y vectores. Se debe tener cuidado con los indices a utilizar ya que a diferencia deC/C++ en Matlab los contadores inician desde 1 y no desde cero. Por ejemplo el primer ele-mento de una matriz A en C/C++ es el elemento A00, mientras que en Matlab nos tenemosque referir a este elemento como A11. La forma de hacer referencia a componentes es la siguiente.

A(i,j) Devuelve el elemento Aij que corresponde la fila i y columna j

A(i,:) Devuelve la fila i− esima como vector fila

A(:,j) Devuelve la columna j − esima como vector columna

A([i1 · · · in],[j1 · · · jm]) Devuelve una matriz con los elementos que pertenecen a la inter-seccion de las filas y columnas mencionadas

A(i,:)=[ ] Destruye la i− esima fila de la matriz A

A(:,j)=[ ] Destruye la j − esima columna de la matriz A

6

Page 7: Apuntes

>> A

A =

2 4 5

4 7 5

6 7 4

>> A(2,3)

ans =

5

>> A(2,:)

ans =

4 7 5

>> A([1 2],[2 3])

ans =

4 5

7 5

>> A(2,:)=[]

A =

2 4 5

6 7 4

>> A(:,1)=[]

A =

4 5

7 4

3.3. Operatoria

Una gran ventaja del software es el facil trabajo con matrices, la interfaz nos permite reali-zar operaciones sobre matrices sin necesidad de escribir algoritmos com debemos hacerlo enotros lenguajes. Las sumas, productos, potencias, etc. son todas funciones pre-establecidas y seconsiguen con la sintaxis intuitiva.

A+B Devuelve la suma de las matrices.

c*A Devuelve el producto del escalar c con la matriz A.

A*B Devuelve el producto de matrices, siempre que este tenga sentido.

A^(-1) Devuelve la inversa de A siempre que exista.

A/B Devuelve el producto A ∗B−1

7

Page 8: Apuntes

Muchas veces necesitamos operar matrices componente a componente, para esto debemos ante-poner un punto a la operacion. Por ejemplo si queremos hacer la multiplicacion de las compo-nentes de matriz A con las de la matriz B debemos ejecutar A.*B

>> A=[2 4 5;4 7 5;6 7 4]

A =

2 4 5

4 7 5

6 7 4

>> B=[1 3 2;4 5 3;4 5 2]

B =

1 3 2

4 5 3

4 5 2

>> A*B

ans =

38 51 26

52 72 39

50 73 41

>> A.*B

ans =

2 12 10

16 35 15

24 35 8

8

Page 9: Apuntes

Es posible aplicar funciones elementales a matrices o vectores, en caso de hacerlo la funcion seaplica a cada coordenada de la matriz. Es cierto que matematicamente tiene sentido hablar dematriz exponencial, sin embargo si calculamos exp(A) obtendremos una matriz cuya coordena-das son las exponenciales de las coordenadas de la matriz A y no la matriz exponencial calculadacomo serie de potencias.

>> I = eye(3,3)

I =

1 0 0

0 1 0

0 0 1

>> exp(I)

ans =

2.7183 1.0000 1.0000

1.0000 2.7183 1.0000

1.0000 1.0000 2.7183

>> cos(pi*I)

ans =

-1 1 1

1 -1 1

1 1 -1

Observacion Aunque se necesite una sola linea de codigo para ejecutar un producto de matricesno cometa el error de pensar que es una operacion simple. Recuerde que Matlab esta programadoen Java y C/C++, por lo que una operacion de producto de matrices es costosa en cuanto arecursos computacionales y tiempo (del orden Θ(n3) con un algoritmo simple)

3.4. Funciones sobre matrices y vectores

Ademas de la operatoria elemental tenemos la posibilidad de recurrir a funciones pre-establecidasun poco mas especificas. En lo siguiente estudiaremos algunas de las funciones mas utiles paramanejar problemas numericos basicos.

trace(A) Devuelve el valor de la traza de A.

det(A) Devuelve el valor del determinate de A siempre que la matriz sea cuadrada.

inv(A) Devuelve la matriz inversa de A siempre que se pueda.

A′ Devuelve la matriz traspuesta de A.

size(A) Devuelve las dimensiones de la matriz A.

triu(A) Devuelve la matriz triangular superior de A.

9

Page 10: Apuntes

tril(A) Devuelve la matriz triangular inferior de A.

diag(A) Devuelve un vector fila cuyas componentes son los elementos de la diagonal de A.Tambien podemos obtener otras diagonales, por ejemplo diag(A,1) devuelve la diagonalsiguientes a la principal y diag(A,-1) devuelve la diagonal anterior a la principal

A=[2 4 5;4 7 5;6 7 4]

A =

2 4 5

4 7 5

6 7 4

>> diag(A)

ans =

2

7

4

>> diag(A,1)

ans =

4

5

>> diag(A,-1)

ans =

4

7

De igual forma funciona para el comando diag(V) visto anteriormente. En este casodiag(V,k) crea una matriz de ceros que contiene a V en su diagonal desplazada en kde la diagonal principal.

>> V=[1 2 3 4]

V =

1 2 3 4

>> diag(V,2)

ans =

0 0 1 0 0 0

0 0 0 2 0 0

0 0 0 0 3 0

0 0 0 0 0 4

0 0 0 0 0 0

0 0 0 0 0 0

10

Page 11: Apuntes

Algunas funciones especificas para vectores son las siguientes.

sum(V) Suma todas las componentes del vector.

prod(V) Multiplica todas las componentes del vector.

dot(U,V) Producto escalar de los vectores U y V.

cross(U,V) Producto cruz de los vectores U y V.

length(V) Entrega el largo del vector V.

cat(dimension,U,V) Este comando sirve para concatenar dos vectores. La dimensionindica la forma de concatenar, por ejemplo si dimension vale uno se concatena comocolumna, dimension 2 indica concatenar como fila y dimension 3 indica concatenar comodiagonal

>> U=[1 3 5]

U =

1 3 5

>> V=[2 4 6]

V =

2 4 6

>> cat(1,U,V)

ans =

1 3 5

2 4 6

>> cat(2,U,V)

ans =

1 3 5 2 4 6

11

Page 12: Apuntes

4. Funciones

4.1. Funciones elementales

Pensando nuevamente en la ventana de comandos como una calculadora cientıfica nos gustarıacalcular con funciones elementales. Esto es posible y la sintaxis es la siguiente.

valor absoluto abs()raız cuadrada aqrt()exponencial exp()logaritmo natural, logaritmo base 10 log(), log10()seno, coseno, tangente sin(), cos(), tan()arcseno, arccoseno, arctangente asin(), acos(), atan()seno, coseno, tangente (Hiperbolicos) sinh(), cosh(), tanh()arcseno, arccoseno, arctangente (Hiperbolicos) asinh(), acosh(), atanh()piso, techo, parte entera floor(), ceil(), fix()

4.2. Funciones de tipo inline

La mayorıa de la veces no trabajamos con funciones elementales directamente, si no que trabaja-mos con mezclas de ellas (productos, sumas, composiciones). En este caso Matlab nos ofrece unaforma comoda e intuitiva de representar estas funciones, la representacion se basa en funcionesde tipo inline.

Las funciones de tipo inline son utilizadas, generalmente, para obtener datos de salida numeri-cos, es decir, obtener evaluaciones de las funciones. Esto quiere decir que las funciones de tipoinline requieren de un argumento numerico a la hora de ser llamadas y devuelven el valor co-rrespondiente de la funcion.

Veremos como declarar funciones con un ejemplo. Supongamos que queremos trabajar con lafuncion

f(x) =sen(x)

x2

12

Page 13: Apuntes

La ejecucion en Matlab queda de la siguiente manera

>> f = inline (’sin(x)/(x^2)’)

f =

Inline function:

f(x) = sin(x)/(x^2)

>> f(pi)

ans =

0

>> f(pi/2)

ans =

0.4053

De igual forma se pueden declarar funciones de mas variables solo con agregar mas letras en laecuacion.

>> f = inline (’x+y+z^2’)

f =

Inline function:

f(x,y,z) = x+y+z^2

>> f(1,2,3)

ans =

12

>> f(1,2,0)

ans =

3

13

Page 14: Apuntes

4.3. Funciones simbolicas

Ahora veremos como trabajar con variables simbolicas, este tipo de variables sirve para repre-sentar funciones con un valor generico. Cuando se estudia matematica se trabaja con funcionesf(x) en ese caso x es un sımbolo que representa la presencia de un numero del dominio. Esjustamente eso lo que hace Matlab cuando se trabaja con variables simbolicas.

Para declarar variables simbolicas se usa el comando syms, luego podemos definir funciones conesta variable. Por ejemplo consideremos la instruccion

>> syms x

>> f = 5*x^3

f =

5*x^3

>> g = x^2

g =

x^2

Aquı hemos declarado x como variables simbolica y f como la funcion f(x) = 5x3 y g comog(x) = x2.No podemos evaluar en la funcion f, el comando f(3) no tiene sentido en este contexto (comovimos las funciones inline sirven para evaluar). La gracia de las funciones simbolicas es obtenerresultados tambien simbolicos como derivadas, primitivas u operaciones. Por ejemplo podemosobtener un resultado reducido del producto y division de funciones de funciones

>> f*g

ans =

5*x^5

>> f/g

ans =

5*x

Con los comandos diff e int podemos obtener la derivada e integral de las funciones

>> diff(f)

ans =

15*x^2

>> int(g)

ans =

x^3/3

14

Page 15: Apuntes

5. Graficos

15