Intro 01 Guia de Matlab
Intro 01 Guia de Matlab
Intro 01 Guia de Matlab
2
1. Introducción – Matlab : Matrix Laboratory
Como su nombre lo indica, Matlab es un software que se especializa en el
trabajo con matrices. Es un lenguaje de programación que permite realizar
operaciones matriciales en forma simple y práctica, cosa que en otros
lenguajes (como JAVA) resulta bastante engorroso.
El objetivo de esta guía es explicar los comandos básicos para comenzar
a programar en Matlab.
2. Directorios
Antes de comenzar, debemos indicarle al programa en qué directorio
vamos a trabajar. Para esto vamos a File > Set Path y hacemos clic sobre el
botón ‘Add Folder’. Una vez que hayamos seleccionado la carpeta de trabajo,
cerramos la ventana haciendo clic en ‘Close’.
3
3. Definición de Variables y Operatoria Básica
Al contrario de lo que sucede en JAVA, para definir una variable en Matlab
simplemente la declaramos de la siguiente forma:
x =15
A lo que el programa responderá desplegando el valor de x en pantalla:
>> x=15
x=
15
Ejemplos:
1 2 3 B = [1 2 3] 1
A = 4 5 6 C = 4
7 8 9 9
4
También se pueden crear vectores en forma rápida utilizando
V=inicio:paso:fin
A’ : Matriz Transpuesta de A
eye(n) : Crea una matriz identidad de n x n.
eye(m,n) : Crea una matriz de ceros de m x n con unos en si ‘diagonal’.
5
diag(V): Crea una matriz diagonal con los elementos del vector V.
diag(V,n): Crea una matriz ‘diagonal desplazada’ en n con los elementos del
vector V. Si n>0 la diagonal se desplaza hacia la derecha, si n<0 a
la izquierda.
diag(A): Crea un vector con la diagonal de la matriz A.
ones(m,n): Crea una matriz de unos de m x n.
zeros(m,n): Crea una matriz de ceros de m x n.
rand(m,n): Crea una matriz de m x n de valores aleatorios.
Existen muchas más formas para definir matrices, y las que antes fueron
mencionadas poseen más funciones. Para conocer más acerca de éstas
utilicen la ayuda de Matlab, que es MUY buena.
A* B : Multiplicación matricial de A y B
A .* B : Multiplicación de los términos de A por los de B (conmutativa)
A/B: Multiplicación matricial de A por la inversa de B.
A\B: Multiplicación matricial de B por la inversa de A.
A./B: División de los términos de A por los de B.
A+B: Suma de los términos de A con los de B
A-B: Resta de los términos de A con los de B
4. M-Files
En Matlab se programa en M-Files, que son archivos de texto con una
secuencia de instrucciones que luego se ejecutan en el programa. Para crear
uno nuevo vamos a File > New > M-File.
6
4.1 Creación de Funciones
Al igual que en JAVA, en Matlab podemos crear funciones que ejecuten
determinadas secuencias, las cuales pueden ser llamadas desde otro M-File.
Para crear una nueva función debemos declararla como tal:
Donde a y b son las variables de salida (lo que entrega) y c y d son las
variables de entrada (lo que recibe para poder ser ejecutada).
Ejemplo:
>> [a,b]=sumaResta(3,23)
a=
26
b=
-20
7
Siguiendo con el ejemplo anterior:
En Command Window:
b) If
La secuencia de instrucciones bajo el If se ejecutará sólo si se cumple la
condición especificada, por ejemplo:
for i=1:10
a(i)=2*i;
if a(i)>=10
b(i)=-a(i);
end
end
8
Crea los vectores a = [2 4 6 L 20] y b = [− 10 − 12 − 14 L − 20]
También existen los condicionales elseIf y else, que se tienen la misma
función que en JAVA.
4.3 Gráficos
Matlab permite graficar los resultados obtenidos. Para esto utilizamos el
comando plot. Además, existen una serie de funciones que aportan
información adicional al gráfico:
9
Ejemplos:
i) Graficaremos el movimiento oscilatorio amortiguado que tiene una
estructura de un grado de libertad (Esto es una versión muy simplificada de
cómo oscila un edificio), cuya ecuación es:
x(t ) = A ⋅ exp(− β ⋅ ω ⋅ t ) ⋅ sen(ω ⋅ t )
donde
A [m] : Amplitud
β : Coeficiente de amortiguamiento
ω [1/s]: Frecuencia natural de oscilación de la estructura
t [s] : Tiempo
%Graficamos:
plot(t,y)
title('Decaimiento Libre')
xlabel('tiempo [s]')
ylabel('Amplitud [cm]')
legend('Ampliad')
grid on
10
Guardamos y corremos el programa, resultando el siguiente gráfico:
Decaimiento Libre
3
Ampliud
1
Amplitud [cm]
-1
-2
-3
0 1 2 3 4 5 6 7 8 9 10
tiempo [s]
11
ii) Grafiquemos ahora dos movimientos con distinta amplitud, en un mismo
gráfico:
%Graficamos:
plot(t,y1)
title('Decaimiento Libre')
xlabel('tiempo [s]')
ylabel('Amplitud [cm]')
grid on
12
hold on
plot(t,y2,'Red')
legend('Amplitud=3','Amplitud=1.5');
Resultando:
Decaimiento Libre
3
Amplitud=3
Amplitud=1.5
2
1
Amplitud [cm]
-1
-2
-3
0 1 2 3 4 5 6 7 8 9 10
tiempo [s]
%Graficamos:
subplot(2,1,1)
plot(t,y1)
title('Decaimiento Libre')
xlabel('tiempo [s]')
ylabel('Amplitud [cm]')
legend('Amplitud=3')
grid on
subplot(2,1,2)
13
plot(t,y2,'Red')
title('Decaimiento Libre')
xlabel('tiempo [s]')
ylabel('Amplitud [cm]')
legend('Amplitud=1.5')
grid on
Tenemos:
Decaimiento Libre
4
Amplitud=3
2
Amplitud [cm]
-2
-4
0 1 2 3 4 5 6 7 8 9 10
tiempo [s]
Decaimiento Libre
2
Amplitud=1.5
1
Amplitud [cm]
-1
-2
0 1 2 3 4 5 6 7 8 9 10
tiempo [s]
14
5. Integración de Ecuaciones Diferenciales
Para poder resolver una ecuación de movimiento de Newton es necesario
un método de integración numérica. Existen muchas formas de integrar una
ecuación de movimiento; los métodos de Verlet y de Runge Kutta son ejemplos
de métodos de integración. Para más detalles sobre los métodos matemáticos
consulten la unidad uno de la guía del curso.
Utilizaremos el método runge kutta1 de segundo orden (RK2) para resolver esta
ecuación. El método dice que si se tiene una ecuación diferencial de la forma
y ' = f (t , y )
Entonces se puede resolver numéricamente definiendo las variables auxiliares:
k1 = h ⋅ f (tn , yn )
h 1
k2 = h ⋅ f (tn + , yn + k1 )
2 2
Y que la solución iterativa será:
yn +1 = yn + k 2
1
P. Cordero, Suplementos de Mecánica
15
No ahondaremos en los fundamentos matemáticos del método ya que no es el
tema de la guía.
Aplicando el método a nuestro problema tenemos:
c 2 c 2
v& = g − v (t ) ⇒ f (t , v) = g − v (t )
M M
c
k1 = ∆t ⋅ g − v 2 n
M
c 1 c 2
2
k 2 = ∆t ⋅ g − ⋅ v n + ⋅ ∆t ⋅ g − v n
M 2 M
c 1 c 2
2
v n +1 = v n + ∆t ⋅ g − ⋅ v n + ⋅ ∆t ⋅ g − v n
M 2 M
con v0 = 0
Finalmente
x n = ∆t ⋅ v n
16
Como verán, los comentarios iniciales definen la función y sus parámetros de
entrada, de modo que sea simple y fácil entender cómo utilizarla.
%Parametros base
g=9.8;
Con esto ya tenemos una función que resuelve la ecuación diferencial. Ahora
debemos crear un programa que la utilice de forma interactiva con el usuario.
Para esto guardamos caidaTurbulenta y creamos un nuevo M-File.
17
%Limpiamos la pantalla:
close all
clc
Luego le pedimos al usuario que ingrese los datos del problema y calculamos
la solución con la función que creamos anteriormente:
%INICIO CALCULOS:
disp('Calculando...')
disp(' ')
[x,v,t] = caidaTurbulenta(m,c,v0,x0,dt,tf);
Con esto ya tenemos los resultados para los datos del usuario, a continuación
graficaremos estos resultados y compararemos la caída con roce a una caída
sin roce con el aire (es decir c=0).
18
%Calculamos la caida sin roce:
[xs,vs,ts] = caidaTurbulenta(m,0,v0,x0,dt,tf);
%Calculamos h(t):altura
h=h0-x;
hs=h0-xs;
figure
%Graficamos velocidades por separado, misma ventana:
subplot(2,1,1)
plot(t,v,'blue')
title('Velocidad vs Tiempo')
xlabel('Tiempo [s]')
ylabel('Velocidad [m/s]')
legend('Velocidad con roce')
grid on
subplot(2,1,2)
plot(t,vs,'red')
title('Velocidad vs Tiempo')
xlabel('Tiempo [s]')
ylabel('Velocidad [m/s]')
legend('Velocidad sin roce')
grid on
19
figure
%Graficamos Velocidades Juntas
plot(t,v,'blue')
title('Velocidad vs Tiempo')
xlabel('Tiempo [s]')
ylabel('Velocidad [m/s]')
grid on
hold on
plot(t,vs,'red')
legend('Caida con roce','Caida sin roce')
figure
%Graficamos caidas juntas
plot(t,h,'blue')
title('Altura vs Tiempo')
xlabel('Tiempo [s]')
ylabel('Altura [m]')
grid on
hold on
plot(t,hs,'red')
legend('Caida con roce','Caida sin roce')
%Terminamos
disp('Listo')
20
Velocidad vs Tiempo
0.4
Velocidad con roce
Velocidad [m/s]
0.3
0.2
0.1
0
0 1 2 3 4 5 6 7 8 9 10
Tiempo [s]
Velocidad vs Tiempo
100
Velocidad sin roce
Velocidad [m/s]
50
0
0 1 2 3 4 5 6 7 8 9 10
Tiempo [s]
Velocidad vs Tiempo
100
Caida con roce
90 Caida sin roce
80
70
Velocidad [m/s]
60
50
40
30
20
10
0
0 1 2 3 4 5 6 7 8 9 10
Tiempo [s]
21
Altura vs Tiempo
1
Caida con roce
0.9 Caida sin roce
0.8
0.7
0.6
Altura [m]
0.5
0.4
0.3
0.2
0.1
0
0 1 2 3 4 5 6 7 8 9 10
Tiempo [s]
22
A continuación hay una lista de funciones que les pueden ser útiles en
su vida estudiantil, busquen para qué sirven en la ayuda.
cla
clc
cumsum
cumtrapz
disp
eig
fft
getframe
guide
input
length
max
min
movie2avi
nargin
nargout
plot
plot3
roots
size
sort
sparse
sum
23