Sunteți pe pagina 1din 14

Laboratorio 1: Introducción a Matlab®

Análisis de sistemas IM-0300


II-2019

Prof. Denis Abarca Quesada


14 de agosto de 2019

Descripción del laboratorio: En este laboratorio se introducirá algunas comandos básicos


de Matlab ası́ como la creación de scripts y funciones. Asimismo, se mostrará las diferentes
formas que ofrece Matlab para graficar datos. Sobra decir que la única manera de aprender
a programar es practicando.

1. Aspectos básicos de Matlab


Matlab® (Matrix Laboratory) es un ambiente de programación muy popular empleado en
computación cientı́fica. A diferencia de lenguajes de programación como C++, Matlab es un
lenguaje interpretado, lo que no requiere llevar a cabo el proceso de compilación. En la
Figura 1 se muestra el entorno de trabajo de Matlab.

1.1. Variables
Matlab es un lenguaje débilmente tipado, esto significa que no se requiere definir previamente
el tipo de variable que se utilizará en cálculos posteriores. Para mostrar esto, ejecute en el
Command Window (CW) la sigiuente sentencia
a = 15
observará que en el Workspace queda guardada la variable. Posteriormente al ingresar
a = ’Hola’
la variable a le cae encima al valor anterior cambiando por completo el tipo de variable.
En un lenguaje fuertemente tipado como C++, esto no hubiera sido posible. Esto es una
gran ventaja, ya que la elaboración de programas es mucho más rápido en comparación a
lenguajes fuertemente tipados.

1
Universidad de Costa Rica Escuela de Ingenierı́a Mecánica

Figura 1: Ventana principal de Matlab. En rojo se muestra el Command Window en donde se


ejecutan comandos, en morado se muestra el Workspace en el cual se registran las varibles que se
están utilizando y en verde se muestra el Editor

1.2. Variables II
Como pudo notar al ingresar los valores de a, estos se imprimen en pantalla una vez ingresa-
dos. Una manera de no imprimir por pantalla cada variable que se ingrese consiste en añadir
un punto y coma ’;’ al final de cada sentencia. Si ejecuta en el Command Window

A = 10;

podrá observar que ahora la variable no se imprimió en el Command Window pero sı́ aparece
en el Workspace. Por otro lado, habrá notado que Matlab hace distinción entre mayúsculas
y minúsculas por lo que debe poner atención a la hora de definir las variables en sus progra-
mas. Una buena práctica en programación consiste en asignarle nombres significativos a las
variables. Ejecute en el Command Window lo siguiente

velocidad = 50;
posicionAvion= 40;

Prof. Denis Abarca Quesada 2 IM-0300 Análisis de sistemas


Universidad de Costa Rica Escuela de Ingenierı́a Mecánica

esfuerzoBarra = 100e8;
En algunos casos, asignarle a las variables este tipo de nombres puede tornar algunas expre-
siones muy largas. Una forma de mitigar eso consiste en asignar nombres de variables que de
pocos carácteres que cuenten ya con Por último, podrá constatar que conforme va definiendo
variables, estas quedan almacenadas en el Workspace.

1.3. Variables III


Si desea eliminar una variable en particular del Workspace se puede hacer mediante la
expresión clear. Por ejemplo
clear velocidad
Al ejecutar esta sentencia podrá observar que en el Workspace la variable desaparece libe-
rando la memoria asociada a esta variable. Si lo que se quiere es liberar la memoria de todas
las variables, puede introducir
clear variables
Habrá notado que el Command Window guarda el historial de todo lo que se ha hecho
previamente, para limpiar esta pantalla puede digitar
clc
Esta sentencia no libera memoria de ninguna variable, pero sı́ limpia la pantalla del Command
Window facilitando el trabajo.

1.4. Operaciones matemáticas


Matlab realiza las operaciones matemáticas respetando un orden de prioridad. Primero lleva
a cabo las operaciones exponenciales si las hay, posteriormente realiza divisiones, multipli-
caciones y por último sumas o restas. Considere las siguientes expresiones

a = 10;
a = a + 15;
A muchas personas que inician en programación les parece muy confuso la sentencia anterior
ya que parece irrespetar las reglas más básicas del álgebra. Sin embargo, en lenguajes de
computación las asignaciones de cada variable debe leerse de derecha a izquierda. En este
caso, debe interpretarse que el valor de la variable a más 15 debe ser asignada a la variable
a.

Prof. Denis Abarca Quesada 3 IM-0300 Análisis de sistemas


Universidad de Costa Rica Escuela de Ingenierı́a Mecánica

1.5. Arreglos I
Un arreglo es una colección de datos ubicados en memoria de manera continua. Existen varias
formas de definir un arreglo. Digite en el Command Window las siguientes expresiones.

a = [4 3 5 1];

b = (0:1:3);

c = linspace(0,10,4);

d = [9 7 6 5]’;

Lo primero que debe observar es que al inicializar cada uno de los arreglos, estos aparecerán
en el Workspace, indicando el nombre de la variable y el valor asociado. La primera forma
de definir un arreglo se hace mediante paréntesis cuadrados y se debe especificar cada una
de las entradas. El segundo tipo genera un arreglo que comienza en 0 y termina en 3 con
incrementos de 1. Posteriormente, la función linspace genera un arreglo de 4 elementos que
va desde 0 hasta 10. Por último, el vector d se asemeja al primer caso con la diferencia que
tiene un ’ al final. Esto devuelve la transpuesta del vector. Los arreglos a, b y c corresponden
a arreglos 1 x 4 (1 fila y 4 columnas), mientras que el arreglo d corresponde a uno 4 x 1 (4
filas y 1 columna).

1.6. Arreglos II
Para poder sumar arreglos estos deben tener las mismas dimensiones. Al definir las siguientes
variables

a = (0:1:10);

b = linspace(1,20,5);

Se puede observar en el Workspace que los arreglos a y b tiene dimensiones diferentes.


Al tratar hacer

c = a + b

Aparecerá el error Matrix dimensions must agree indicando que los arreglos no tienen las
mismas dimensiones. Al redefinir b como

b = linspace(1,20,10)

Prof. Denis Abarca Quesada 4 IM-0300 Análisis de sistemas


Universidad de Costa Rica Escuela de Ingenierı́a Mecánica

y repetir la operación c = a+b, se observará que no hay error en la operación. Si lo que se


quiere es multiplicar una constante por un arreglo se puede hacer de la siguiente manera.

a = 10;
b = [1 2 3 4 5];
c = a*b;

En este caso, la constante multiplicará cada uno de los elementos que compone el arreglo.

1.7. Arreglos III


Matlab manipula todas las variables como si fueran matrices (de ahı́ que Matlab signifique
Matrix Laboratory). De tal manera que la suma de dos variables numéricas las trata como si
fuera suma de matrices. Del mismo modo, la multiplicación de dos arreglos los tratará como
la multiplicación dos dos matrices y ud. recordará de su curso de álgebra lineal, que existen
ciertas reglas a la hora de llevar a cabo multiplicaciones de matrices. Al definir

arregloUno = [2 3 4 5];
arregloDos = [6 7 8 9];

y posteriormente tratar de hacer la siguiente multiplicación

arregloTres = arregloUno * arregloDos;

Aparecerá un error en el Command Window indicando que las dimensiones de las matrices
no concuerdan. Esto porque está tratando de multiplicar dos vectores cuyas dimensiones son
1 x 4. Por otro lado, si se ejecuta lo siguiente

arregloTres = arregloUno*arregloDos’;

el resultado es válido porque está multiplicando arregloUno por la traspuesta del arregloDos.
Si lo que se quiere es multiplicar elemento por elemento de cada arreglo entonces lo que se
debe hacer es ejecutar lo siguiente

arregloTres = arregloUno.*arregloDos;

Observe que la diferencia es que en lugar de un ’*’ se emplea ’.*’. De forma semejante
ocurre al tratar de elevar a la segunda potencia cada elemento del arreglo

resultado = arregloUno.^2 ;

Prof. Denis Abarca Quesada 5 IM-0300 Análisis de sistemas


Universidad de Costa Rica Escuela de Ingenierı́a Mecánica

1.8. Arreglos IV
Una vez definido un arreglo es posible querer un valor en particular de él. Considere por
ejemplo

theta = (0:1:180);

Si se quiere obtener el valor de una posición particular, se puede realizar de la siguiente


manera

theta(5)

Al hacer esto, retornará el valor asociado a la quinta posición que corresponde a 4. También
es posible obtener diferentes valores de distintas maneras.

theta(:)

theta(end)

theta(5:end)

En el primer caso, el operador : hace referencia a todos los elementos del arreglo. En el
segundo caso, end hace referencia al último elemento del arreglo y por último la expresión
5:end hace referencia a todos los elementos desde la posición 5 hasta el final.

1.9. Matrices I
Las matrices en Matlab se definen de la siguiente manera

matrizUno = [1 4 5; 3 4 5; 1 2 0];

La matriz anterior corresponde a una 3 x 3. Observe que cada fila se define luego de un ’;’.
Al igual que en los arreglos, hay diferentes maneras de leer valores de una matriz.

matrizUno(2,1)

matrizUno(:,1)

matrizUno(2,:)

Prof. Denis Abarca Quesada 6 IM-0300 Análisis de sistemas


Universidad de Costa Rica Escuela de Ingenierı́a Mecánica

1.10. Producto de matrices


La multiplicación de matrices en matlab se logra empleando el operador *. Ası́ por ejemplo,
en

matrizA = [3 2 1; 8 2 1; 9 7 6];

matrizB = [5 7 2; 9 0 6; 1 1 2];

matrizC = matrizA*matrizB;

En este caso, las matrices matrizA y matrizB son matrices 3x3 por lo que la matriz resultante
también es 3x3.

2. Uso de scripts
Hasta este punto todo se ha llevado a cabo en el Command Window. Una manera más
ordenada y apropiada de llevar a cabo cálculos (sobretodo si se necesitan ser repetidos con
frecuencia) es el uso de scripts. Estos son un conjunto de instrucciones que están guardados
en un archivo con terminación .m y que se pueden ejecutar en cualquier momento. Para crear
un script solo se necesita acceder al Editor de Matlab. Esto se puede hacer presionando ctrl
+ n y se creará un nuevo archivo .m. Los siguientes problemas realicelos en scripts separados.

2.1. Graficación
Una de los aspectos más importantes en la divulgación de resultados cientı́ficos es la apro-
piada elaboración de gráficos y figuras. En este aspecto, Matlab cuenta con un amplia gama
de opciones para realizar y editar gráficos. En los siguientes ejercicios se mostrará algunas
de las opciones que ofrece este entorno de programación.

2.1.1. Desplazamiento de una partı́cula


Considere una partı́cula cuyo vector posición es

r = (5t2 + 3t)î + (2t3 + 8t)ĵ (1)

Genere un arreglo llamado t que vaya de 0 hasta 10 segundos en incrementos de 0.01.

Genere arreglos para los desplazamientos en x y y.

Genere un arreglo que sea la magnitud del desplazamiento.

Prof. Denis Abarca Quesada 7 IM-0300 Análisis de sistemas


Universidad de Costa Rica Escuela de Ingenierı́a Mecánica

Empleando la función plot grafique la magnitud del desplazamiento en función del


tiempo.
Utilizando las funciones xlabel, ylabel y title coloque tı́tulos a los ejes x y y.
Guarde la imagen utilizando la siguiente sentencia saveas(gcf,’NombreFigura,’png’)
Notará que en la carpeta de trabajo aparecerá la figura guardada en el formato especificado.

Código Matlab

1 % Universidad de Costa Rica


2 % Escuela de Ingenieria Mecanica
3 % IM0300 Analisis de sistemas
4 % Laboratorio#1
5
6 t = (0:0.01:10); % Arreglo de tiempo. El incremento(0.01) debe ser ...
p e q u e o para que la solucion se vea suave.
7 posX = 5*t.ˆ2+3*t; % Posicion de particula en X
8 posY = 2*t.ˆ3+8*t; % Posicion de particula en Y
9 magPos = sqrt(posX.ˆ2 + posY.ˆ2); % Modulo del desplazamiento
10
11 plot(t,magPos,'b-','Linewidth',3) %Establece ancho de linea de 3
12 xlabel('Tiempo (s)','Fontsize',14) %Establece t a m a o letra en los ejes ...
de 14
13 ylabel('Magnitud de desplzamiento (m)','Fontsize',14)
14 title('Desplazamiento particula')
15 set(gca,'Fontsize',14) %Establece t a m a o de n m e r o s en los ejes de 14
16 grid on
17 saveas(gcf,'Ejercicio221','png') %Guarda la imagen en formato png
18 saveas(gcf,'Ejercicio221','epsc') %Guarda la imagen en formato epsc ...
(Ilustracion vectorial)

2.1.2. Esfuerzos en plano oblicuo


En la Figura 2 se muestra el esquema de una barra con una carga P actuando sobre un plano
oblicuo orientado a θ. Tome P = 1000 N, el área de sección transversal A es 0.01 m2 .
Las ecuaciones del esfuerzo cortante y normal sobre el plano oblicuo son.

σ = P
A
sin2 θ
(2)
P
τ = A
sin θ cos θ

Prof. Denis Abarca Quesada 8 IM-0300 Análisis de sistemas


Universidad de Costa Rica Escuela de Ingenierı́a Mecánica

Figura 2: Carga sobre plano oblicuo.

Genere un arreglo de θ que vaya desde 0° hasta 90° en incrementos de 1°.

Convierta los valores del arreglo t en radianes.

Genere arreglos para el esfuerzo cortante y esfuerzo normal en función de θ.

Grafique primero el esfuerzo normal empleando la función plot y posteriormente el


esfuerzo cortante. Para que ambas funciones queden graficadas en un mismo plot
deberá utilizar la sentencia hold on entre ambas sentencias de graficación.

Coloque descripciones en los ejes x y y y aumente su tamaño de letra. Para hacer esto
puede hacer ylabel(’Esfuerzo (Pa)’,’Fontsize’,13).

Genere un cuadro de leyenda para diferenciar ambas curvas empleando la función


legend.

Aumente el tamaño de letra de los números en los ejes empleando la sentencia


set(gca,’Fontsize’,14).

Guarde la imagen en formato eps de la siguiente manera


saveas(gcf,’NombreArchivo’,’epsc’).

Código Matlab

1 % Universidad de Costa Rica


2 % Escuela de Ingenier a M e c n i c a
3 % IM0300 A n l i s i s de sistemas

Prof. Denis Abarca Quesada 9 IM-0300 Análisis de sistemas


Universidad de Costa Rica Escuela de Ingenierı́a Mecánica

4
5
6 cita = (0:1:90); % Arreglo de ngulos en grados.
7 citaRad = cita*pi/180; % Convierte grados en radianes
8 P = 1000; % Fuerza aplicada a la barra
9 A = 0.01; % rea de s e c c i n transversal
10
11 sigma = P/A * (sin(citaRad)).ˆ2; % Esfuerzo normal
12 tau = P/A * sin(citaRad).*cos(citaRad); % Esfuerzo cortante
13
14 plot(cita, sigma,'r-','Linewidth',3)
15 xlabel(' ngulo ( )','Fontsize',14)
16 ylabel('Esfuerzo (Pa)','Fontsize',14)
17 hold on
18 plot(cita, tau, 'b-','Linewidth',3)
19 legend('\sigma','\tau')
20 set(gca,'Fontsize',14)
21 set(gca,'xLim',[0 90])
22 saveas(gcf,'Ejercicio222','png')
23 saveas(gcf,'Ejercicio222','epsc')

3. Funciones
A diferencia de los scripts, las funciones en Matlab reciben parámetros de entrada (aunque
también puede no recibir ninguno) y devuelve un resultado (aunque, nuevamente, puede no
devolver un resultado). El nombre del archivo que contiene la función debe llamarse
igual que la función. Además, se recomienda como buena práctica de programación que los
nombres de las funciones tengan la forma [verboInfinitivo]+[sustantivo]. Ası́, nombres
tı́picos de funciones son leerArchivo, calcularCoeficiente, etc.

3.1. Rotación de marcos de referencia


Un vector r definido en un marco XY se puede representar en un marco de referencia X’Y’
el cual está rotado un ángulo θ tal y como se muestra en la Figura 3.
Mediante una transformación, se puede expresar el vector r definido en el marco XY a un
nuevo marco rotado X’Y’ mediante

r’ = Rr (3)
Donde r es el vector definido con respecto al sistema XY, r’ es el vector representado en el
marco X’Y’ y R es la matriz de rotación, definida como

Prof. Denis Abarca Quesada 10 IM-0300 Análisis de sistemas


Universidad de Costa Rica Escuela de Ingenierı́a Mecánica

Figura 3: Vector r representado en dos sistemas de referencia.

 
cos θ − sin θ
R= (4)
sin θ cos θ
Desarrolle una función que permita determinar las componentes de un vector en un sistema
X’Y’ a partir de las componentes del vector en el marco XY y el ángulo de rotación θ. Como
prueba, utilice un vector r = 10î + 5ĵ y un ángulo θ = 20°.

Código Matlab

ejercicio31.m

1 % Universidad de Costa Rica


2 % Escuela de Ingenier a M e c n i c a
3 % IM0300 A n l i s i s de sistemas
4
5 clear variables
6 clc
7 vector = [10 5];
8 angulo = 20;
9 angulo = angulo*pi/180;
10
11 nuevosComponentes = calcularComponentesMarcoRotado(vector, angulo);
12
13 %La forma en que trabajan las funciones es
14 % (par metros de salida) = [NombreFuncion](par metros de entrada)

calcularComponentesMarcoRotado.m

1 function componentesVectorNuevoMarco = ...


calcularComponentesMarcoRotado(componentesVector, angulo)
2
3 matrizRotacion = [cos(angulo) -sin(angulo); sin(angulo) cos(angulo)];
4

Prof. Denis Abarca Quesada 11 IM-0300 Análisis de sistemas


Universidad de Costa Rica Escuela de Ingenierı́a Mecánica

5 componentesVectorNuevoMarco = matrizRotacion*componentesVector';
6
7 end

3.2. Esfuerzos en cilindros presurizados


Los cilindros sujetos a una presión interna experimentan esfuerzos tangenciales y radiales de
acuerdo con la siguientes ecuaciones

 
ri2 pi ro2
σt = ro2 −ri2
1+ r2
ri2 pi

ro2
 (5)
σr = ro2 −ri2
1− r 2

Desarrolle una función que devuelva los esfuerzos en cilindro al recibir como parámetros de
entrada el radio interno ri , el radio externo ro , la presión interna p y la distancia radial r
donde se quiere evaluar los esfuerzos. Como prueba, tome ro = 0,3 m, ri = 0,15 m, p = 1000
Pa y r = 0,20 m.

Script ejercicio32.m

1 % Universidad de Costa Rica


2 % Escuela de Ingenier a M e c n i c a
3 % IM0300 Analisis de sistemas
4 % Laboratorio#1
5
6 ro = 0.3;
7 ri = 0.15;
8 p = 1000;
9 r = 0.2;
10
11 Esfuerzos = calcularEsfuerzosCilindros(ri,ro,p,r); % Llama a la ...
f u n c i n para calcular esfuerzos en cilindros.

Funcion calcularEsfuerzosCilindros.m

1 function Esfuerzos = calcularEsfuerzosCilindros(ri, ro, p, r)


2 % En esta funcion, el argumento de salida es 'Esfuerzos', mientras que
3 % los argumentos de entrada son 'ri', 'ro', 'p' y 'r'

Prof. Denis Abarca Quesada 12 IM-0300 Análisis de sistemas


Universidad de Costa Rica Escuela de Ingenierı́a Mecánica

4 Esfuerzos.tangencial = riˆ2*p/(roˆ2 -riˆ2)*(1+roˆ2/(rˆ2)); %El ...


formato 'Esfuerzos.tangencial' se conoce en Matlab como 'struc' ...
y permite crear una estructura jer rquica de datos.
5 Esfuerzos.radial = riˆ2*p/(roˆ2-riˆ2)*(1-roˆ2/(rˆ2));
6 % En este caso, los 'structs' se declaran con la primera letra en
7 % may scula
8 end

4. Todo junto
Se puede estudiar y graficar los esfuerzos a cierta distancia radial de un cilindro presurisado
empleando distintos radios externos, mediante el uso de scripts y funciones. Grafique los
esfuerzos tangenciales y radiales a lo largo de toda la distancia radial para un cilindro que
tiene un radio interno ri = 0,15 m, sujeto a una presión p = 50000 Pa y para diferentes
valores del radio externo ro = que va variando de 0.3 hasta 0.45 m, en incrementos de
0.05 m. Utilice subplots para graficar los esfuerzos tangenciales y radiales para cada radio
externo diferente.

Código Matlab

esfuerzosCilindro.m

1 % Universidad de Costa Rica


2 % Escuela de Ingenieria Mecanica
3
4
5 clear variables
6 close all
7 clc
8 ri = 0.15;
9 p = 50000;
10 ro = (0.3:0.05:0.45);
11
12
13 for i=1:numel(ro)
14
15 r = linspace(ri,ro(i),100);
16 esfuerzoTangencial= zeros(1,100);
17 esfuerzoRadial = zeros(1,100);
18
19 for j=1:numel(r)
20 Esfuerzos = calcularEsfuerzosCilindro(ro(i),ri,p,r(j));

Prof. Denis Abarca Quesada 13 IM-0300 Análisis de sistemas


Universidad de Costa Rica Escuela de Ingenierı́a Mecánica

21 esfuerzoTangencial(j) = Esfuerzos.tangencial;
22 esfuerzoRadial(j) = Esfuerzos.radial;
23 end
24
25 subplot(2,2,i)
26 plot(r,esfuerzoTangencial,'b-')
27 hold on
28 plot(r,esfuerzoRadial,'r-')
29 xlabel('Distancia radial (m)')
30 ylabel('Esfuerzo (Pa)')
31 set(gca,'xLim',[ri, ro(i)])
32

33 end

Prof. Denis Abarca Quesada 14 IM-0300 Análisis de sistemas

S-ar putea să vă placă și