MATLAB. Curso Agosto de 2008.

Post on 25-Jun-2015

1.753 views 11 download

description

TLAB. Curso Agosto de 2008.

Transcript of MATLAB. Curso Agosto de 2008.

Universidad Técnica de LojaEscuela de Ingeniería Química

MATLAB

Temario

1. Generalidades.2. Manipulación de matrices.3. Gráficas en 2D y 3D.4. Programación.5. Métodos numéricos.6. Matemáticas simbólicas.7. Creación de GUIs8. Simulink.

1. Generalidades

Desarrollado a finales de los setenta (Universidades deNew Mexico y Stanford)

En la actualidad ampliamente difundido en la Universidad yla Industria.

Núcleo básico del programa: Cálculo numérico basado enmatrices. Matlab = Matrix Laboratory.

Módulos adicionales. Simulink, MatLab SymbolicToolbox (núcleo del programa Maple), etc.

2. Manipulación de Matrices

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

La respuesta del programa es la siguiente:A =

1 2 3

4 5 6

7 8 9

Una sencilla operación con A es hallar su matriz traspuesta.En MATLAB el apóstrofo (') es el símbolo de trasposiciónmatricial. Para calcular A' (traspuesta de A) basta teclear losiguiente

>> A'

ans =

1 4 7

2 5 8

3 6 9

La variable ans puede ser utilizada como operando en la siguienteexpresión que se introduzca. También podría haberse asignado elresultado a otra matriz llamada B:

>> B=A'

B =

1 4 7

2 5 8

3 6 9

Ahora ya están definidas las matrices A y B, y es posible seguiroperando con ellas. Por ejemplo, se puede hacer el producto B*A(deberá resultar una matriz simétrica):

>> B*A

ans =

66 78 90

78 93 108

90 108 126

En MATLAB se accede a los elementos de un vector poniendo elíndice entre paréntesis (por ejemplo x(3) ó x(i)). Los elementos de lasmatrices se acceden poniendo los dos índices entre paréntesis,separados por una coma (por ejemplo A(1,2) ó A(i,j)). Las matrices sealmacenan por columnas (aunque se introduzcan por filas, comose ha dicho antes), y teniendo en cuenta esto puede accederse acualquier elemento de una matriz con un sólo subíndice. Por ejemplo,si A es una matriz (3x3) se obtiene el mismo valor escribiendo A(1,2)Que escribiendo A(4).

Invertir una matriz es tan fácil como trasponerla. A continuación seva a definir una nueva matriz A -no singular- en la forma:

>> A=[1 4 -3; 2 1 5; -2 5 3]

A =

1 4 -3

2 1 5

-2 5 3

Ahora se va a calcular la inversa de A y el resultado se asignará a B.Para ello basta hacer uso de la función inv( )

>>B=inv(A)

B =

0.1803 0.2213 -0.1885

0.1311 0.0246 0.0902

-0.0984 0.1066 0.0574

Para comprobar que este resultado es correcto basta con multiplicar Apor B

>> B*A

ans =

1.0000 0.0000 0.0000

0.0000 1.0000 0.0000

0.0000 0.0000 1.0000

De forma análoga a las matrices, es posible definir un vector fila x enla forma siguiente (si los tres números están separados por blancos ocomas, el resultado será un vector fila):

>> x=[10 20 30] % vector fila

x =

10 20 30

MATLAB considera comentarios todo lo que va desde el caráctertanto por ciento (%) hasta el final de la línea.

Si los números están separados por intros o puntos y coma (;)se obtendrá un vector columna:

>> y=[11; 12; 13] % vector columna

y =

11

12

13

MATLAB tiene en cuenta la diferencia entre vectores fila y vectorescolumna. Por ejemplo, si se intenta sumar los vectores x e y seobtendrá el siguiente mensaje de error:

>> x+y

??? Error using ==> +

Matrix dimensions must agree.

Estas dificultades desaparecen si se suma x con el vector traspuestode y:

>> x+y'

ans =

21 32 43

Operadores

Tipos de datos: MATLAB es un programa preparado para trabajar convectores y matrices. Como caso particular también trabaja convariables escalares (matrices de dimensión 1). MATLAB trabajasiempre en doble precisión, es decir guardando cada dato en 8 bytes,con unas 15 cifras decimales exactas. Ya se verá más adelante quetambién puede trabajar con cadenas de caracteres (strings) y, desde laversión 5.0, también con otros tipos de datos: Matrices de más dosdimensiones, matrices dispersas, vectores y matrices de celdas,estructuras y clases y objetos.

Otras formas de definir matrices: Existen en MATLAB variasfunciones orientadas a definir con gran facilidad matrices de tiposparticulares. Algunas de estas funciones son las siguientes:

eye(4) forma la matriz unidad de tamaño (4x4)zeros(3,5) forma una matriz de ceros de tamaño (3x5)zeros(4) ídem de tamaño (4x4)ones(3) forma una matriz de unos de tamaño (3x3)ones(2,4) idem de tamaño (2x4)

linspace(x1,x2,n) genera un vector con n valores igualmenteespaciados entre x1 y x2

logspace(d1,d2,n) genera un vector con n valores espaciadoslogarítmicamente entre 10^d1 y 10^d2. Si d2 es pi6, los puntos se generan entre 10^d1 y pi

rand(3) forma una matriz de números aleatorios entre 0 y 1, con distribución uniforme, de tamaño (3x3)

rand(2,5) idem de tamaño (2x5)

randn(4) forma una matriz de números aleatorios de tamaño (4x4), con distribución normal, de valor medio 0 y varianza

magic(4) crea una matriz (4x4) con los números 1, 2, ... 4*4, con la propiedad de que todas las filas y columnas suman lo mismo

hilb(5) crea una matriz de Hilbert de tamaño (5x5). La matriz de Hilbert es una matriz cuyos elementos (i,j) responden a la expresión (1/(i+j-1)). Esta esuna matriz especialmente difícil de manejar por los grandes errores numéricos a los que conduce

Formación de una matriz a partir de otras

A continuación se describen algunas de las funciones quecrean una nueva matriz a partir de otra o de otras,comenzando por dos funciones auxiliares:

[m,n]=size(A) devuelve el número de filas y de columnas de la matriz A. Si la matriz es cuadrada basta recoger el primer valor de retorno

N=length(x) calcula el número de elementos de un vector x

zeros(size(A)) forma una matriz de ceros del mismo tamañoque una matriz A previamente creada

ones(size(A)) ídem con unosA=diag(x) forma una matriz diagonal A cuyos elementos

diagonales son los elementos de un vector ya existente x

x=diag(A) forma un vector x a partir de los elementos de la diagonal de una matriz ya existente A

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

blkdiag(A,B) crea una matriz diagonal de submatrices a partir de las matrices que se le pasan como argumentos

triu(A) forma una matriz triangular superior a partir de una matriz A (no tiene por qué ser cuadrada).

tril(A) ídem con una matriz triangular inferior

OPERADOR DOS PUNTOS (:)

Defínase un vector x con el siguiente comando:

>> x=1:10

x =

1 2 3 4 5 6 7 8 9 10

En cierta forma se podría decir que el operador (:) representaun rango: en este caso, los números enteros entre el 1 y el 10.

Por defecto el incremento es 1, pero este operador puede tambiénutilizarse con otros valores enteros y reales, positivos o negativos. Eneste caso el incremento va entre el valor inferior y el superior.

>> x=1:2:10x =1 3 5 7 9>> x=10:-1:1x =10 9 8 7 6 5 4 3 2 1

Operadores relacionales

Operador Descripción

< Menor que

> Mayor que

<= Menor o igual que

>= Mayor o igual que

= = Igual que

~ = Distinto que

Operadores lógicos

Operador Descripción

& and

| or

~ negación lógica

Funciones matemáticas elementales que operan de modo escalar

Función Descripción

sin(x) Seno

cos(x) Coseno

tan(x) Tangente

asin(x) Arco seno

acos(x) Arco coseno

atan(x) Arco Tangente

sinh(x) Seno hiperbólico

Función Descripción

cosh(x) Coseno hiperbólico

tanh(x) Tangente hiperbólico

asinh(x) Arco seno hip.

acosh(x) Arco coseno hip.

atanh(x) Arco tangente hip.

log(x) Logaritmo natural

log10(x) Logaritmo decimal

Función Descripción

exp(x) función exponencial

sqrt(x) raíz cuadrada

sign(x) devuelve -1 si <0, 0 si =0 y 1 si >0.

rem(x,y) resto de la división

mod(x,y) similar a rem

round(x) redondeo hacia el entero más próximo

fix(x) redondea hacia el entero más próximo a 0

Función Descripción

floor(x) valor entero más próximo hacia -∞

ceil(x) valor entero más próximo hacia +∞

real(x) partes reales

imag(x) partes imaginarias

abs(x) valores absolutos

angle(x) ángulos de fase

Funciones que actúan sobre vectores

Función Descripción

[xm,im]=max(x) máximo elemento de un vector. Devuelve el valor máximo xm y la

posición que ocupa immin(x) mínimo elemento de un vector.

Devuelve el valor mínimo y la posiciónque ocupa

sum(x) suma de los elementos de un vector

Función Descripción

cumsum(x) devuelve el vector suma acumulativa de los elementos de un vector

mean(x) valor medio de los elementos de un vector

std(x) desviación típica

prod(x) producto de los elementos de un vector

Función Descripción

cumprod(x) devuelve el vector producto acumulativo de los elementos de un vector

[y,i]=sort(x) ordenación de menor a mayor de los elementos de un vector x. Devuelve el vector ordenado y, y un vector i con las posiciones iniciales en x de los elementos en el vector

ordenado y.

Funciones que actúan sobre matrices

Función Descripción

B = A' calcula la traspuesta (conjugada) de lamatriz A

B = A.' calcula la traspuesta (sin conjugar) de la matriz A

v = poly(A) devuelve un vector v con los coeficientes del polinomio característico de la matriz cuadrada

A

Función Descripción

t = trace(A) devuelve la traza t (suma de los elementos de la diagonal) de una matriz cuadrada A

[m,n] = size(A) devuelve el número de filas m y de columnas n de una matriz rectangular A

n = size(A) devuelve el tamaño de una matriz cuadrada A

nf = size(A,1) devuelve el número de filas de A

nc = size(A,2) devuelve el número de columnas de A

4. PROGRAMACIÓN DE MATLAB

Funciones M - Files

SENTENCIA IF

Existe también la bifurcación múltiple,

En una sola línea

SENTENCIA SWITCH

SENTENCIA FOR

Ejemplo

factorial.m

SENTENCIA WHILE

En una sola línea

SENTENCIA BREAK

La sentencia break hace que se termine la ejecución del buclemás interno de los que comprenden a dicha sentencia.

SENTENCIA CONTINUE

La sentencia continue hace que se pase inmediatamente a lasiguiente iteración del bucle for o while, saltando todas las sentenciasque hay entre el continue y el fin del bucle en la iteración actual.

SENTENCIA TRY...CATCH...END

La construcción try...catch...end permite gestionar los errores.

En el caso de que durante la ejecución del bloque sentencias1se produzca un error, el control de la ejecución setransfiere al bloque sentencias2. Si la ejecución transcurrieranormalmente, sentencias2 no se ejecutaría nunca.

FUNCIÓN INPUT

La función input permite imprimir un mensaje en la línea decomandos de MATLAB y recuperar como valor de retorno unvalor numérico o el resultado de una expresión tecleada por elusuario.

>> n = input(‘ Teclee el número de ecuaciones ')

FUNCIÓN DISP

La función disp permite imprimir en pantalla un mensaje detexto o el valor de una matriz, pero sin imprimir su nombre.

>> disp('El programa ha terminado')

>> A=rand(4,4)

>> disp(A)

FUNCION FPRINTF

La cadena de control contiene los formatos de escritura. Porejemplo:

» vol = 2.0393938;» fprintf('El volumen de la esfera es: %12.5f \ n',vol);El volumen de la esfera es: 2.03939

3. GRÁFICOS EN 2D y 3D

Funciones gráficas 2D elementales

Función Descripción

plot() crea un gráfico a partir de vectores y/o columnas de matrices, con escalas lineales sobre ambos

ejesloglog() ídem con escala logarítmica en ambos ejes

semilogx() ídem con escala lineal en el eje de ordenadas y logarítmica en el eje de abscisas

semilogy() ídem con escala lineal en el eje de abscisas y logarítmica en el eje de ordenadas

Función Descripción

title('título') añade un título al dibujo

xlabel('tal') añade una etiqueta al eje de abscisas. Con xlabel off desaparece

ylabel('cual') añade una etiqueta al eje de ordenadas. Con ylabel off desaparece

Función Descripción

text(x,y,'texto') introduce 'texto' en el lugar especificado por las coordenadas x e y. Si x e y son vectores, el texto se repite por cada par de elementos. Si texto es

también un vector de cadenas de texto de la misma dimensión, cada elemento se escribe en

las coordenadas correspondientes

Función Descripción

gtext('texto') introduce texto con ayuda del ratón: el cursor cambia de forma y se espera un clic para

introducir el texto en esa posicióngrid activa la inclusión de una cuadrícula en el dibujo.

Con grid off desaparece la cuadrícula

Añadir líneas a un gráfico ya existente

Se utilizan para ello los comandos hold on y hold off. El primero deellos hace que los gráficos sucesivos respeten los que ya se handibujado en la figura (es posible que haya que modificar la escala delos ejes); el comando hold off deshace el efecto de hold on.

COMANDO subplot()

Una ventana gráfica se puede dividir en m particiones horizontales y nverticales, con objeto de representar múltiples gráficos en ella. Cadauna de estas subventanas tiene sus propios ejes, aunque otraspropiedades son comunes a toda la figura. La forma general de estecomando es:

subplot(m,n,i)

donde m y n son el número de subdivisiones en filas y columnas, e i esla subdivisión que se convierte en activa.

Control de los ejes

axis([xmin, xmax, ymin, ymax])

axis('ij') utiliza ejes de pantalla, con el origen en la esquina superiorizda. y el eje j en dirección vertical descendenteaxis('xy') utiliza ejes cartesianos normales, con el origen en la esquinainferior izda. y el eje y vertical ascendenteaxis(‘equal') el escalado es igual en ambos ejesaxis(‘square') la ventana será cuadradaaxis(‘image') la ventana tendrá las proporciones de la imagen que sedesea representar en ella (por ejemplo la de una imagen bitmap quese desee importar) y el escalado de los ejes será coherente con dichaimagenaxis(‘normal') elimina las restricciones introducidas por 'equal' y'square'axis('off') elimina las etiquetas, los números y los ejesaxis(‘on') restituye las etiquetas, los números y los ejes

FUNCIÓN line()

La función line() permite dibujar una o más líneas que unen los puntoscuyas coordenadas se pasan como argumentos.Para dibujar un segmento de color verde entre dos puntos, estafunción se llamaría de la siguiente manera:

line([xini, xend], [yini, yend],[zini, zend],’color’,’g’)

2xe )xsin(y −=Ejemplo:

⎪⎩

⎪⎨

=

=

=

x

x

e)xsin(3ye2y

)xsin(1y

Ejemplo:

Ejemplo:⎩⎨⎧

>≤

=0sin(x) si ),xsin(0in(x)s si ,0

)x(f

DIBUJO DE LÍNEAS: FUNCIÓN plot3()

La función plot3 es análoga a su homóloga bidimensional plot. Suforma más sencilla es la siguiente:

>> plot3(x,y,z)

que dibuja una línea que une los puntos (x(1), y(1), z(1)),(x(2), y(2), z(2)), etc. y la proyecta sobre un plano para poderlarepresentar en la pantalla.

Ejemplo

⎪⎩

⎪⎨

===

tz)tsin(y)tcos(x

DIBUJO DE MALLADOS: FUNCIONES meshgrid(), mesh(), surf()

meshgrid Ejemplo

)yx(22 22

e)yxsin(z +−+=Ejemplo:

DIBUJO DE CURVAS DE NIVEL: FUNCIONES contour, contour3, surf.

Siguiendo con el ejemplo anterior

5. Creación de GUIs (Interfaces gráficas de usuario)

Se puede compartir datos entre “callbacks” almacenandolos datos en la estructura handles.Ejemplo. Para almacenar los datos contenidos en el vector X en laestructura handles:1. Seleccionar un nombre para el campo de la estructura,

handles.nombre2. Asignar X a handles.nombre

handles.nombre = X;3. Guardar la estructura handles con guidata

guidata(hobject,handles)

5. Métodos Numéricos

5.1 Ecuaciones

fzero(@f,a)Encuentra el cero más cercano al valor a de la función f.

roots(c)Encuentra todos los ceros de un polinomio cuyoscoeficientes son almacenados en el vector c.

Ejemplo. Encontrar los ceros de f(x),

3x

24

xex10f(x) .b3x5x3x)x(f .a

+−+−=

+−+=

Solución:

Sistemas de ecuaciones no lineales. Comando fsolve()

Ejemplo

mifuncion.m

En la ventana de comandos:

5.2 Integración

quad(@f, a, b)Integra por cuadraturas la función f, desde a hasta b.

Ejemplo

5.3 Diferenciación numérica

diff(x)Si x = [x(1) x(2) … x(n)] entonces diff(x) = [x(2)-x(1) x(3)-x(2) … x(n)-x(n-1)]

5.4 EDOs de primer orden

[ t , Y ] = ode45( @odefun , tspan , y0 )

Tiempo Intervalo de tiempo

Variables desalida

Condicionesiniciales

EjemploResolver el sistema de Lorentz desde t=0 hasta t=10

1z(0) z38xy

dtdz

0y(0) ,yx28xzdtdy

1 x(0) ,)xy(10dtdx

=−=

=−+−=

=−=

Lorentz.m

En la ventana de comandos:

6. Matemáticas simbólicas

6.1 Álgebra simbólica

collect(S)

collect(S,v)

expand(S)

Agrupa términos semejantes de s.

Agrupa términos semejantes de s respecto a la variable independiente v

Realiza una expansión de s

factor(S) Intenta factorizar s.

simple(S) Simplifica la forma de S a una forma más corta, si es posible.

simplify(S) Simplifica S usando las reglas de simplificación de de Maple

Ejemplos

6.2 Límites

Ejemplo

( )35x )4x(

5xlim Calcular 1.+−

6.3 Derivación e integración

Ejemplos

⎟⎟⎠

⎞⎜⎜⎝

⎛−

++4x5

3/13

e5)x(sen3x

dxd Calcular 1.

⎟⎠⎞

⎜⎝⎛

− x2

2

e1)x(sen

dxd Calcular 2.

⎟⎟⎠

⎞⎜⎜⎝

⎛⎟⎟⎠

⎞⎜⎜⎝

⎛+

++

∂∂

∂∂ xz4

y5yx

yx Calcular 3.

( )∫ ++ dxe3ax5 Calcular 4. ax

( )∫ +b

a

5x43 dxex3 Calcular 5.

( ) dz dy dx e z y x 3 Calcular 6.1

0

z

0

zy

0

zx5y4∫ ∫ ∫+

+++

6.4 Series de Taylor

6.5 Ecuaciones diferenciales ordinarias

Ejemplos

0xy5dxdy Resolver 1. =+

2)0(dxdy 1,y(0) , 3x4x3y5

dxdy3

dxyd Resolver 2. 22

2

==−+=−+

)t·cos(mFoy

dtyd

o2

o2

2

ω=ω+Ejemplo:

6.6 Transformadas Integrales

Transformada de Laplace

Sintaxis:

laplace(F) laplace(F,t)

laplace(F,w,z)

Descripción

L = laplace(F) es la transformada de Laplace de la función F, cuyavariable por omisión es t. La transformada de Laplace es una funciónde t, y retorna como respuesta una función de s.

Por definición:

( ) ( )sLLtFF =⇒=

( ) ( )∫∞

−=0

stdtetFsL

L=laplace(F,w,z) obtiene L como una función de z, dado F en funciónde w, en lugar de las variables por omisión s y t, respectivamente.

( ) ∫∞

−=0

zwdwe)w(FzL

Ejemplo:

as1dtee)f(L

e)t(f

0

stat

at

+==

=

∫∞

−−

En MATLAB:

7. Simulink

Simulación de un reactor no isotérmico

Subsistema: Ecuación 1

Subsistema: Ecuación 2

Subsistema: Ecuación 3

Subsistema: Ecuación 4

Puesta en marcha de un reactor no isotérmico