Práctica 0-2

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 18

U NIVERSIDAD DE V IGO

Práctica 0: Introducción a Matlab

Diseño de máquinas - II
Grado en Ingeniería Mecánica

1. I NTRODUCCIÓN

MATLAB es un software para la resolución de problemas matemáticos, aunque incluye tam-


bién herramientas orientadas al cálculo simbólico, está especialmente indicado para cálculo pu-
ramente numérico.

A continuación, se presenta una selección de los comandos básicos que más importantes serán
en el desarrollo de la asignatura. Todos los comandos que se detallan a continuación, se pueden
escribir en la ventana de comandos de MATLAB o bien se puede generar un script con extensión
“*.m”.

La diferencia fundamental es que los comandos que se escriben en la ventana de comandos


tienen respuesta inmediata y se ejecutan a medida que el usuario introduce dichos comandos.
En el caso de generar un script, éste se ejecuta completamente, todas las sentencias se ejecutan
secuencialmente y se obtiene al final el resultado. Dado que se pueden agrupar comandos, esta
opción es preferible para trabajar con problemas relativamente complejos. A continuación, se
muestra una imagen del entorno de MATLAB.

1
En esta imagen se aprecia la ventana de comandos que responderá inmediatamente a cualquier
sentencia escrita por el usuario. En el Workspace se nos muestran todas las variables definidas
en la sesión de trabajo. Por su parte, la carpeta de trabajo (Current folder) será la carpeta por
defecto donde se generarán todos los archivos “*.m” y, en caso de interactuar el código con
archivos de otro tipo “*.txt”, “*.csv”, “*.xls” y otras extensiones externas, esta será la ubicación
por defecto donde se generarán/consultarán estos archivos; a menos que se indique lo contrario.

1.1. D EFINICIÓN DE VARIABLES

Una variable es simplemente un espacio en la memoria asignado y asociado con un identi-


ficador concreto (nombre de la variable) y a la que se le pueden asignar diferentes valores y
actualizarlos a lo largo de la ejecución del programa. Para crear una nueva variable es suficiente
con indicar el nombre (identificador) seguido del signo “=” y el valor que se le asigna:

a = 3
b = 5
c = a + b
c =
8

Notar que el signo “=” en este caso no expresa una igualdad tal como se suele conocer. En el
caso de programación en Matlab, este signo expresa asignación, es decir, a la variable con nom-
bre a, se le asigna el valor de 3. Evidentemente, el valor de cada variable puede sobrescribirse a
medida que se avanzan las sentencias del programa. Si no se finaliza la sentencia con “;” el resul-
tado de la asignación se muestra por pantalla (y se muestra una advertencia). Es recomendable
terminar siempre las sentencias con “;” y mostrar el resultado usando la función adecuada.

a = 30
b = 50

2
c = a + b
fprintf(”El resultado (c) es:”)
disp(c)

Si en algún momento se desea dejar libre el nombre de una variable, se puede borrar su valor
con el comando:

clear %Nombre de variable %

1.2. D EFINICIÓN Y USO DE VECTORES

Un vector es un tipo de variable que permite almacenar conjuntos de valores bajo un mismo
nombre de variable. Es posible acceder a cada uno de los valores individuales utilizando índices.
Para crear un vector se indican sus componentes entre corchetes separados por comas o por
espacios.

u = [2, 4, 6, 8];
v = [1, 3, 5, 7];

Para acceder a un elemento concreto del vector se indica el nombre del vector seguido del
índice (comenzando en 1) que nos interesa entre paréntesis.

u(3)

La sentencia anterior devolverá el valor que se corresponde con el tercer lugar del vector, es
decir, 6. Se puede modificar el valor de un índice concreto de un vector usando una sentencia
similar a la siguiente.

v(2)=30

Es habitual crear vectores que sean una sucesión de números enteros, para ello existe una
sintaxis especial.

w= %primer_valor %: %incremento %: %valor_fin %

Por ejemplo, la siguiente expresión generará un vector de números que empieza en el 1 y


acabará en el 10 con incrementos de 2 en 2.

n = 1:2:10

Sería por tanto equivalente a lo siguiente:

n = [1, 3, 5, 7, 9];

También es habitual crear vectores que sean una partición regular de un intervalo, es decir,
dividir un intervalo (a,b) en N partes iguales.

p = linspace( %valor_inicio %, %valor_fin %, %N_divisiones %)

3
p = linspace(1,3,11)

El uso de vectores tiene amplias ventajas en la programación, por ejemplo, el almacenamiento


se hace más sencillo ya que hay vectores con miles y millones de componentes y se pueden
manejar haciendo referencia a una única variable. Se pueden realizar operaciones a todos los
elementos de un vector a la vez, por ejemplo, multiplicar o dividir vectores por un escalar.

p2 = p*2
p10 = p/10

Aunque el término vector en programación es mucho más amplio que el concepto que
se acostumbra a manejar en el marco de la física o el cálculo, Matlab consta de herramientas
para realizar operaciones entre vectores que se emplean en estos campos. El producto escalar y
vectorial se obtienen empleando los siguientes comandos.

a = dot(u,v)
w = cross(u,v)

1.3. D EFINICIÓN Y USO DE MATRICES

Una matriz es muy similar a un vector pero en este caso, las matrices almacenan valores en
una variable y para acceder a cada posición son necesarios dos o más índices. Para crear una
matriz se introducen los valores por filas, separando una fila de la siguiente con “;”.

m = [2, 4, 6; 1, 3, 5; 10, 20, 30]

Para acceder a un elemento concreto de una matriz se introducen los índices correspondientes
a la fila y columna separados por coma. Estas sentencias devolverán los valores 4 y 30 respec-
tivamente.

m_1_2 = m(1,2) m_3_3 = m(3,3)

También se pueden modificar componentes de manera similar a como se trabajaba con vecto-
res, pero en este caso es necesario más de un índice para acceder a cada elemento.

m(2,2) = 999

Además de la creación de matrices mediante la definición de cada uno de sus términos, se


pueden generar matrices/vectores concretos empleando los comandos zeros, ones o eye.

zeros(1,3) ones(3,5)

El primer comando, genera un vector de 3 componentes cuyos términos son ceros, mientras
que el segundo, genera una matriz 3 x 5 formada completamente por unos. Por su parte, el
comando eye únicamente genera matrices cuadradas y se utiliza para generar la matriz identidad
del orden especificado, por ejemplo, la matriz identidad de orden cuatro se escribirá:

4
eye(4)

Visto esto, un vector se puede entender como un caso particular de matriz en que solo hay
una fila y por tanto se sobreentiende que el índice que se refiere a filas, siempre será 1.
Se pueden generar por lo tanto matrices empleando vectores concatenados, siempre que sus
dimensiones lo permitan. Por ejemplo, a continuación, la matriz A está formada por dos filas
que serán los vectores u y v.

u = [4, 5, 8, 9]; v = [10, 20, 30, 40]; A = [u; v]

Al igual que en el caso de vectores, aunque la definición de matriz es más amplia que la em-
pleada en el cálculo, MATLAB consta de una serie de operaciones que se pueden realizar sobre
las matrices, o bien entre matrices si las dimensiones de las matrices lo permiten. Empezando
por la trasposición y la inversión:

A_traspuesta=A’ A_inversa = inv(A)

Si se tienen definidas dos matrices, A y B, es posible realizar operaciones típicas del álgebra
definidas sobre matrices tales como la suma, resta y multiplicación, siempre que las dimensiones
de las dos matrices cumplan con las reglas que se deben cumplir respecto a los operadores
mencionados.

C = A + B; D = A - B; E = A*B;

Se pueden obtener también los autovalores y autovectores de una matriz A empleando el


comando eig(A). En los siguientes ejemplos se muestra, como en el primero se obtienen los
autovalores de una matriz (obviamente cuadrada) y se asignan a la variable E. Mientras, en el
segundo ejemplo, se obtienen los autovectores, almacenados en V y los autovalores, almacenados
en E.

E = eig(A); [V, E] = eig(A);

1.4. F UNCIONES MATEMÁTICAS

MATLAB incluye la implementación de una gran cantidad de funciones relacionadas con el


cálculo algebraico. Funciones ampliamente utilizadas tales como el seno o el coseno de un án-
gulo, logaritmos, raíces cuadradas y otras operaciones altamente recurrentes. A continuación, se
presenta una tabla con las funciones más elementales y más empleadas, sin embargo, MATLAB
dispone de una amplísima biblioteca de funciones predefinidas y que pueden ser de gran ayuda
para la programación.

5
sin(x) Seno de x (en radianes) log(x) Logaritmo natural de x
cos(x) Coseno de x (en radianes) log10(x) Logaritmo en base 10 de x
tan(x) Tangente de x (en radianes) exp(x) Número e elevado a x
asin(x) Ángulo cuyo seno es x x∧y x elevado a y
acos(x) Ángulo cuyo coseno es x ceil(x) Redondeo al entero mayor
atan(x) Ángulo cuya tangente es x floor(x) Redondeo al entero menor
deg2rad(x) Conversión de grados a rad round(x) Redondeo
rad2deg(x) Conversión de rad a grados abs(x) Valor absoluto
mod(x,y) Resto de la división x/y sign(x) 1 si positivo, 0 si negativo

pi Número pi i o j Número imaginario −1
Estas funciones en su mayoría necesitan especificar uno/varios argumentos, como se puede
ver en la tabla. Dichos argumentos se especifican entre paréntesis separados por comas tras el
nombre de la función. El orden de estos argumentos es crucial ya que determina como responderá
la función. En caso de no tener claro cómo funciona o cuál es el orden de los argumentos, se
puede usar el comando help.

help mod

Es importante manejar de forma adecuada la ayuda del programa, ya que es imposible recor-
dar todas las funciones y sus argumentos. Se recomienda buscar en la guía de Matlab (disponible
en internet) las funciones que se necesiten, suelen venir acompañadas de buenas explicaciones
y ejemplos útiles.

1.5. E NTRADA / SALIDA ESTÁNDAR EN MATLAB

En ocasiones puede ser interesante que el usuario pueda interactuar con el programa a lo largo
de su ejecución, por ejemplo, introduciendo el valor de una variable. Para introducir parámetros
una vez se está ejecutando el programa se puede usar la función input. Esta función tiene como
argumento de entrada una string (cadena de caracteres) para solicitar el dato. La respuesta
dada por el usuario se almacenará en la variable.

entrada_usuario = input( ”Introduzca un numero: ”)

Por otra parte, también se pueden introducir datos en el programa como argumento, al igual
que en una función propia de MATLAB, sen(x) por ejemplo. Para ello, en la primera línea del
programa se debe escribir una sintaxis similar a esta.

function [area] = area_circulo(R)

Esta función calcularía el área de un círculo, al llamarla, será necesario especificar un valor
para el argumento, en este caso el radio, por ejemplo:

area_circulo(5)

Así, la variable R adquirirá el valor 5 en toda la función. Esta sentencia devolverá (si la

6
función está correctamente escrita) el área de un círculo de radio 5. Es posible utilizar más de
un argumento al definir la función, simplemente separando los argumentos con comas (,).
Para mostrar una variable, basta con usar el comando disp() se puede mostrar una variable o
cadena de caracteres:

disp ( ’El valor del área es: ’)


disp(area)

1.6. C ONTROLES DE FLUJO

En general, el código que se introduce en un script de MATLAB se ejecuta de manera se-


cuencial, es decir, cada línea se ejecuta después de la anterior hasta llegar al final del script. Sin
embargo, pudiera ser de interés el repetir una serie de instrucciones durante un número de veces
determinado o bien seleccionar un conjunto de instrucciones u otro en base a un criterio lógico.
Estas operaciones se denominan controles de flujo ya que el flujo estándar del programa varía
con estos comandos.
El primer control básico consiste en la realización de una operación repetitiva un número de
veces N determinado. Para esto se emplea el bucle for, cuya sitaxis es como sigue:

for %variable_contador % = %valor_inicio %: %incremento %: %valor_fin %


%sentencias %
end

for a = 1:1:10
disp(a)
end

En ocasiones, también podría ser interesante repetir instrucciones en base a una condición
establecida, para ello, se utiliza el bucle while que repite instrucciones mientras que una con-
dición sea cierta.

while %condition %
%sentencias %
end

a=0;
while a<10
a=a+1;
disp(a);
end

Otro tipo de control de flujo en la programación consiste en decidir qué conjunto de sentecias
se ejecutan en base a una serie de condiciones. Para esto, se utiliza la sentencia if.

if %condition1 %

7
%sentencias1 %
elseif %condition2 %
%sentencias2 %
elseif %condition3 %
%sentencias3 %
else %condition4 %
end

En esta construcción, sólo se ejecutan las sentencias cuya condición sea verificada. En caso
de que ninguna condición sea verificada, se ejecuta el código bajo la sentencia else. Ni las
sentencias elseif ni la sentencia else son obligatorias, únicamente la sentencia if.

if 10 < 4
disp(”10 es menor que 4”)
else
disp(”10 no es menor que 4”)
end

Todas estas estructuras se pueden anidar unas en otras, es decir, se pueden utilizar unas es-
tructuras dentro de otras. Esto permite generar estructuras lógicas más complejas y programar
algoritmos con una complejidad muy elevada.
Por ejemplo, si en el caso anterior solo queremos mostrar por pantalla los múltiplos de dos.

for a=1:10
if mod(a,2) == 0
disp(a)
end
end

Existe la posibilidad de que sea deseable finalizar la ejecución de un bucle cuando se verifique
una condición, esto es la función del comando break. Cuando se ejecuta, el código finaliza la
ejecución del bucle correspondiente. En el siguiente código, el bucle finaliza cuando a = 5.

for a=1:10
if mod(a,2) == 0
disp(a)
end
if a == 5
break
end
end

8
1.7. G ENERACIÓN DE GRÁFICOS 2D

Uno de los mayores atractivos de MATLAB como software para computación técnica y que
lo hacen muy adecuado para labores de ingeniería es su facilidad para mostrar los resultados
de forma gráfica. El comando básico para mostrar resultados es el comando plot(x,y) que
muestra los valores dos vectores de igual longitud el vector x en el eje de abscisas y el vector y
en el de ordenadas.

t=[0:0.01:5];
x=5*exp(-0.1*t).*cos(5*t);
plot(t,x)

Se pueden mostrar varias curvas en la misma gráfica utilizando el comando hold on para
indicar que se quiere que las curvas ya existentes se deben mantener.

y=5*exp(-0.5*t).*cos(10*t);
hold on
plot(t,y)

9
Como se puede ver, en las versiones más recientes de MATLAB, las curvas se muestran en
diferente color para distinguirlas. Los colores se seleccionan de manera automática, sin embargo,
se pueden controlar los colores y estilo de la línea mediante una string que se añadirá en el
propio comando plot(x,y,string) con una coma.

hold off
plot(t,y, ’- - k’)

10
En este caso se indicó una línea punteada de color negro, pero hay una gran cantidad de
estilos disponibles para distinguir una línea de datos de otra. A continuación, se muestra una
tabla resumen con las distintas posibilidades para establecer el estilo de línea.

11
1.8. A RGUMENTOS EN FUNCIONES DE MATLAB

En un gran número de situaciones, será deseable que un determinado script actúe como una
función. La principal distinción para poder decir que el código actúa como una función estriba
en que, una función admite una serie de argumentos y devuelve otros después de actuar sobre
los argumentos de entrada.
Para especificar estos argumentos en la función, se debe cumplir la sintaxis que se detalla a
continuación, se pueden escribir todos los argumentos de entrada y de salida que se deseen,
siempre separados entre sí por comas.

function [ %argumentos_salida %]=nombre_funcion( %argumentos_entrada %)


...
...
%codigo a ejecutar %
...
...
...
...
end

function [suma,resta]=suma_resta(a,b)
suma=a+b;
resta=a-b;
end

12
E JERCICIO 1: C ÁLCULO NÚMERO π

Conocida la relación entre el radio y el área de una circunferencia:

A = π · r2 , (1)

podremos calcular el valor del número π si conocemos los valores del área y del radio.
Como el objetivo es encontrar el valor de la constante π, tendremos que calcular el área para una
circunferencia de radio dado empleando un método numérico.

El objetivo de esta práctica es implementar el cálculo de un área (una integral) mediante un


método de Montecarlo, un método estadístico (no determinista). Para este problema, si tomamos
una circunferencia de radio 1 inscrita en un cuadrado, podremos calcular el área del círculo
estudiando la probabilidad de que un punto interior al cuadrado esté dentro del círculo o no.
Dado que el área del cuadrado es 4, si esta probabilidad resulta ser del 25 %, el área del círculo
será 0.25·4 = 1. Para el cálculo de esta probabilidad se empleará el citado método de Montecarlo.

Indicaciones sobre el procedimiento:

Generar de manera aleatoria N puntos dentro del cuadrado circunscrito a la circunferencia.

Comprobar el porcentaje de puntos que están dentro de la circunferencia.

Para un valor de N lo suficientemente grande este valor debería estabilizarse (converger).

Calcular el área del círculo y, a través de ella, el valor de π.

Se puede simplificar el problema trabajando con 1/4 del dominio.

Es aconsejable mostrar como la solución converge a un valor estable al incrementar el


valor de N.

13
E JERCICIO 2: E BRIO A LEATORIO

Una persona se toma unas copas en su bar de confianza (coordenadas (0,0)) y quiere llegar a
su casa (coordenadas (2,3)). Esa manzana está configurada en cuadrícula, y en cada cruce debe
decidir si sigue por la calle norte, sur, este u oeste. Por su estado de embriaguez, esta decisión es
completamente aleatoria. Si solamente puede tomar 7 decisiones antes de marearse y vomitar,
¿cuál es la probabilidad de que llegue a casa en condiciones?

14
E JERCICIO 3: C ÁLCULO DE TOLERANCIAS

Se diseña un conjunto de cilindro, pistón y junta de goma que debe ser estanco. Para lograr un
buen sellado, debe producirse una interferencia de entre 0.4 y 0.6 mm entre la junta tórica y el
cilindro, como se indica en la siguiente imagen.

Las dimensiones (en milímetros) de las partes que componen el conjunto son las siguientes:
diámetro del pistón en la ranura d p = 55+−0,05; diámetro del cilindro dc = 60+−0,1; diámetro
de la junta tórica d j = 3 + −0,08.

Sabiendo que las tolerancias dimensionales siguen una distribución normal y que sus valores se
dan en un intervalo de confianza del 99.7 % (3σ ), calcular la probabilidad de que el conjunto
fabricado esté fuera de los límites de interferencia establecidos.

En caso de que la producción se descontrole y las tolerancias dejen de seguir una distribución
normal (siguiendo ahora una distribución uniforme entre los rangos de la tolerancia), ¿cuál es la
nueva probabilidad de no cumplir los requisitos dimensionales?

Representar en ambos casos la distribución de interferencia y la convergencia hacia un valor al


aumentar el número de muestras.

15
E JERCICIO 4: P ROBLEMA DE LOS 100 PRISIONEROS

Para una explicación detallada del problema se recomienda ver el siguiente vídeo (en inglés):
https://youtu.be/iSNsgj1OCLA
El director de una prisión ofrece a un centenar de condenados a muerte (numerados del 1 al
100) una última oportunidad. En una sala hay un armario con 100 cajones. El director coloca
aleatoriamente en cada cajón uno de los números de 1 a 100. Los prisioneros entran en la sala,
uno tras otro. Cada uno de los prisioneros puede: abrir y comprobar sólo 50 cajones en cualquier
orden, y después cierra todos los cajones. Si en esta búsqueda todos los prisioneros han en-
contrado respectivamente su número, todos los prisioneros son perdonados; si un prisionero no
encontrara su número, todos los prisioneros serán ejecutados. Antes de que el primer prisionero
busque su número, los prisioneros pueden discutir la estrategia, pero no pueden comunicarse a
partir de este momento. ¿Cuál es la mejor estrategia de los prisioneros? La mejor solución a este
problema es la siguiente:

Cada prisionero, primero abre el cajón con su número (por ejemplo el 1).

Si este cajón contiene su número, el prisionero sale de la sala.

En caso contrario (la caja contiene el número 5), el prisionero abrirá la caja de ese número.

Se procede así hasta llegar a la caja que contenga de nuevo el número de comienzo (en
este caso era 1).

Por la definición del problema se asegura que en algún momento se llegará a una caja que
contiene el número por el que se comenzó. Siguendo el proceso descrito se habrá formado una
cadena de números hasta que se ha llegado al número por el que se comenzó, por ejemplo:
[1] -> 5, [5] -> 7, [7] -> 94, -> [94] -> 1. En el ejemplo anterior comenzamos por el número 1;
la caja 1 contenía el número 5, la caja 5 contenía el número 7, la caja 7 contenía el número 94 y
la caja 94 contenía el número 1; cerrando así el bucle. La longitud del bucle anterior es 4. Para
otro número de comienzo se obtendrá un bucle distinto.

La pregunta a responder es la siguiente. ¿Cuál es la probabilidad de que dada una distribución


aleatoria de los números en las cajas y siguiendo el procedimiento descrito anteriormente se
forme para algún número de comienzo un bucle de longitud mayor de 50? Se pide modelar este
problema y realizar distintas simulaciones empleando el método de Montecarlo hasta obtener la
probabilidad pedida. Indicaciones:

Generar un vector de 100 elementos con los números del 1 al 100 en un orden aleatorio.

Implementar el procedimiento de apertura de cajas descrito anteriormente.

Para cada uno de los 100 posibles números de arranque ver la lontitud del bucle obtenido.

En caso de que para alguno de esos 100 números de arranque se obtenga un bucle de
longitud mayor que 50 considerar el caso como fallido.

16
Calcular la probabilidad de que el caso no sea fallido.

Es aconsejable mostrar como la solución converge a un valor estable al incrementar el


valor de N.

17
E JERCICIO 5: C ÁLCULO e

Un juego con n participantes dura n rondas. En cada ronda, cada participante recibe un boleto,
pero solo uno de ellos está premiado (la probabilidad de ganar una ronda es 1/n). En caso de que
haya 20 participantes, ¿cuál es la probabilidad de que un participante pierda todas las rondas?
Mostrar la convergencia de la solución al incrementar el número de muestras.

Se sabe que cuando n → ∞ la probabilidad de perder todas las rondas tiende a 1/e. Mostrar esta
tendencia al incrementar el número total de participantes.

18

También podría gustarte