Práctica 0-2
Práctica 0-2
Práctica 0-2
Diseño de máquinas - II
Grado en Ingeniería Mecánica
1. I NTRODUCCIÓN
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”.
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.
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:
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.
n = 1:2:10
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.
3
p = linspace(1,3,11)
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)
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 “;”.
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.
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
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.
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:
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;
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.
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.
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.
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:
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 [suma,resta]=suma_resta(a,b)
suma=a+b;
resta=a-b;
end
12
E JERCICIO 1: C ÁLCULO NÚMERO π
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.
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?
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).
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.
Generar un vector de 100 elementos con los números del 1 al 100 en un orden aleatorio.
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.
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