UNIVERSIDAD DE VALLADOLID Departamento de Ingeniería de Sistemas y Automática Facultad de Ciencias. Paseo del Prado de la Magdalena s/n. 47005 Valladolid Tlf.: (983) 423162 Fax: (983) 423161 Técnicas de Calculo aplicadas a la Ingeniería Química. 1º de Ingeniería Química. Ejercicios 4. Algoritmos y programación en MATLAB ALGORITMO DE BÚSQUEDA LINEAL. Realizar un programa en MATLAB que cree un vector de 10 enteros cuyos valores son introducidos por el usuario. También debe pedir un valor que se deberá buscar en el vector. El algoritmo debe decirnos en qué posición del vector se encuentra el valor que queríamos buscar. 1.- Si existen varios valores iguales al buscado en el vector, nos debe indicar aquel que aparezca primero. Por ejemplo, si se introduce el vector 29 3 10 81 13 6 81 74 90 3 y el valor buscado es el 81, el programa nos indicará que se ha encontrado en la posición 4. 2.- . Si existen varios valores iguales al buscado en el vector, nos debe indicar aquel que aparezca último. Por ejemplo, si se introduce el vector 29 3 10 81 13 6 81 74 90 3 y el valor buscado es el 81, el programa nos indicará que se ha encontrado en la posición 7. 3.- Dados 3 números, determinar si la suma de dos de ellos es igual al tercero. Si se cumple, escribir “iguales”, si no, escribir “distintos”. Dibujar el organigrama. 4.- Diseñar un algoritmo que, dados 10 números naturales, indique cuántos de ellos son números pares, nos muestre estos y calcule la media aritmética de los impares. 5. Determinar el precio de un billete de ida y vuelta por avión, conociendo la distancia a recorrer, el número de días de estancia y sabiendo que si la distancia es superior a 1000 Km, y el número de días de estancia es superior a 7, la línea aérea le hace un descuento del 30% (precio por kilómetro 8,5 pts). 6. La constante juega un papel muy importante en matemáticas, por lo que no debe sorprender que existan muchos métodos capaces de proporcionar aproximaciones numéricas de . Muchos de estos métodos implican operaciones con una serie infinita. Uno de ellos es el siguiente: 2 4 4 6 6 8 4 3 3 5 5 7 7 Durante los cálculos prácticos, las series infinitas deben limitarse a un número finito de términos, sacrificando con ello la precisión del resultado. Diseñar el algoritmo en forma de organigrama y escribir el programa en MATLAB para calcular el valor de con el método propuesto. El algoritmo debe recibir, por parte del usuario, el valor de N que indica el número de términos que van a tomar parte en los cálculos. 7. Diseñar un algoritmo y escribir el programa en MATLAB que integre numéricamente la función x3 en un rango especificado por el usuario. En otras palabras, dado un par de números reales, encontrar el área bajo la gráfica de x3 entre estos dos números. Para ello, se calculará una aproximación a este área. Si se divide el área bajo la curva en tiras rectangulares delgadas, la suma de las áreas de estos rectángulos (divisiones) será aproximadamente igual al área existente bajo la curva. Cuanto más estrechos se hagan los rectángulos, más precisa será la aproximación. El usuario debe introducir los valores inferior y superior de la función, así como el número de rectángulos en los cuales ha de subdividirse el área. 8. Recientemente se ha iniciado un experimento destinado a determinar la aceleración de la gravedad en Linares. Se ha dejado caer una esfera a partir del reposo desde lo alto de algunos edificios, en caída libre hasta el suelo. Se anota el tiempo que requiere la caída en cada caso, haciéndose un total de cinco intentos, con los siguientes resultados: Altura del edificio (en pies) 227 375 710 423 158 Tiempo de la caída (en segundos) 3,74 4,84 6,64 5,13 3,11 Diseñar un algoritmo capaz de calcular la aceleración de gravedad g a partir de los datos anteriores y mediante la fórmula: y 21 gt 2 donde y denota la altura de la caída y t el tiempo que requiere. Cada uno de los casos presentados proporcionará un valor para g; la “mejor aproximación” para g obtenida a partir de los experimentos anteriores para Linares, será el promedio de los cinco intentos anteriores. El algoritmo deberá, por tanto, leer los datos suministrados e imprimir esta “mejor aproximación”. 9. Realizar un programa en lenguaje Matlab que calcule la media y la desviación típica de un conjunto de datos. Para ello, el programa debe pedir al usuario el número de valores a leer (n)y dichos valores (xi , i=1..n). A partir de estos datos, el programa calcula y muestra la media y desviación típica aplicando las siguientes fórmulas: n m edia xi i 1 n n desviación_ típica (x i 1 i m edia) 2 n 10. Realizar un programa que pida los coeficientes de un polinomio de grado n (que también debe pedir) y evalúe dicho polinomio en diversos puntos. El programa debe continuar pidiendo puntos para evaluar hasta que el usuario introduzca el valor –999. Ejemplo (sólo es un ejemplo, el programa debe funcionar para cualquier polinomio y cualquier número de puntos). Si el usuario quiere evaluar el polinomio p(x)=3x3+x-1 en los puntos –1 y 2, la interacción programa-usuario sería: [PROGRAMA]: [USUARIO]: [PROGRAMA]: [USUARIO]: [PROGRAMA]: [USUARIO]: [PROGRAMA]: [USUARIO]: [PROGRAMA]: [USUARIO]: [PROGRAMA]: ¿Grado del polinomio? 3 ¿Coeficiente de x^3? 3 ¿Coeficiente de x^2? 0 ¿Coeficiente de x^1? 1 ¿Coeficiente de x^0? -1 ¿Punto a evaluar? [USUARIO]: [PROGRAMA]: [PROGRAMA]: [USUARIO]: [PROGRAMA]: [PROGRAMA]: [USUARIO]: [PROGRAMA]: -1 p(-1) = -5 ¿Punto a evaluar? 2 p(2) = 25 ¿Punto a evaluar? -999 FIN 11. Realizar un programa en Matlab que lea una matriz de 5 por 5 y escriba la fila que cumpla que la suma de los valores absolutos de sus elementos sea mayor. 3 1 2 8 0 2 Por ejemplo, si la matriz que se introduce es 1 1 3 0 0 0 3 3 10 4 5 7 3 4 0 , nos debe indicar 0 1 1 1 que la fila pedida es 0 2 8 7 3 que corresponde a la fila 2ª. 12.- Realizar el algoritmo en pseudocódigo y el programa en MATLAB que obtenga el valor de /4 a través de la suma infinita 1-1/3+1/5-1/7+1/9-.... con una precisión introducida por el usuario. 13. Considerar un vector A de n números reales. Formular un algoritmo en pseudocódigo y en MATLAB que determine el primero y el segundo de los elementos más grandes del vector. Se supone que todos los elementos son diferentes. 14.- La distancia del punto de caída de un proyectil que es lanzado con un ángulo (en radianes) con una velocidad inicial v (en m/s), ignorando la resistencia del aire, viene dada por la fórmula: v 2 sin(2 ) d g siendo g la aceleración de la gravedad (9.8 m/s2). Escribir un programa que realice un juego en el que el usuario introduce primero la distancia a una diana. Luego el usuario introduce el ángulo y la velocidad de lanzamiento de un proyectil. Si el proyectil cae dentro de un diez por ciento de la distancia a la diana, el usuario gana el juego. Si el proyectil no se acerca lo suficiente, se le dice al usuario cuánto se ha alejado el proyectil y se le permite intentarlo de nuevo. Sólo se le permiten 5 intentos, pasados los cuales, el usuario pierde el juego. Para simplificar la entrada del usuario, se debe permitir que el ángulo se dé en grados. v d DIANA 15.- Realizar un algoritmo en pseudocódigo y su traducción a Matlab que calcule la solución de la ecuación: f(x)=x3+exp(-x)-1.5 en el intervalo [a,b] por el método de bisección. Donde a, y b estarán dados por el usuario, por ejemplo –1,1. El método de bisección busca la solución de una ecuación en el intervalo [a,b] asumiendo que el signo de f(a) es distinto que el signo de f(b), es decir, f(a)*f(b)<0. En tal caso, es evidente que la función cortará al eje X en 1 punto o en un número impar de puntos, por lo que habrá 1 o un número impar de soluciones. Si f(a)*f(b)>0 no se debe aplicar el algoritmo. En caso de aplicar el algoritmo, este consiste en obtener el punto medio del intervalo m ab y hacer que uno 2 de los extremos del intervalo sea este nuevo punto calculado: si f(a)*f(m)<0, entonces hacemos b=m, y en caso contrario, a=m; de tal manera que siempre los dos extremos del intervalo cumplan que el signo de f(a) sea distinto que el de f(b). El procedimiento se repite obteniendo sucesivamente los nuevos puntos medios y parará si el número de iteraciones es mayor que un número prefijado (dado por el usuario, por ejemplo 40) o si el valor absoluto de la función en el punto medio calculado es menor que un valor dado por el usuario (por ejemplo 1.e-6) Inicio del algoritmo de bisección f(x) f=0 pasa a ser b en la próxima iteración m a b x 16.- Se desea realizar un programa que realice la conversión de decimal a binario natural para números naturales no mayores de 2147483647 = 231-1. Para ello, el programa debe leer el número en decimal y aplicar el procedimiento conocido para pasar de decimal a binario, almacenando cada uno de los valores (0 o 1) en la posición correspondiente de un vector b: n = 25 vector b 1 1 0 0 1 posición 4 3 2 1 0 Escribir el algoritmo en pseudocódigo y el programa en MATLAB que realice la operación descrita. 17.- Supóngase que estamos interesados en obtener el número entero n más pequeño que satisface la siguiente desigualdad: 1 1 1 1 M 2 3 n donde M es una variable. Escribir el algoritmo y el programa en Matlab que lea el valor de M y nos devuelva el n más pequeño que satisface la desigualdad. 18.- Realizar el algoritmo y el programa en Matlab que lea 10 números y determine cuáles y cuántos de ellos son múltiplos de 7. El programa, primero pedirá los 10 números, y a continuación mostrará sólo aquellos que son múltiplos de 7 así como cuántos son. 19.- Realizar el algoritmo y el programa en Matlab que lea un número entero positivo, si el número es par se divide por 2 y si es impar lo multiplica por 3 y a continuación le suma 1. Repetir el proceso hasta que se obtenga 1. El programa presentará por pantalla el número de elementos de la sucesión numérica generada 20.- Realizar el algoritmo y el programa que calcule la solución de la ecuación f(x)=sin(x)+x 2-1 mediante el método de Newton-Raphson. Este método trata de encontrar un punto x tal que la función en ese punto f(x)=0, y se basa en el desarrollo en serie de Taylor de la función en torno a un punto xi. Dado un punto inicial xi, la ecuación de la tangente a f(x) en el punto x=xi puede expresarse como: y(x)=f(xi)+f‘(xi)(x-xi). La intersección de esta recta con el eje x nos da el punto xi+1, resolviendo la ecuación: 0=f(xi) + f’(xi)(xi+1 –xi) en dicho punto: x i 1 x i f(xi ) f ' (xi ) Aplicando esta fórmula iterativa la solución a la ecuación f(x)=0 se obtiene cuando la distancia entre dos puntos consecutivos xi+1 y xi es menor que una determinada cota e dada por el usuario, o cuando se supera un número determinado de iteraciones N dado por el usuario. y=f(x) y X x X 2 X1 X0 21.- Realizar un algoritmo y el programa en Matlab que convierta un número N decimal introducido por el usuario a base octal. El número N será real. Pista: para calcular la parte entera de un número real utilizar el comando floor, es decir, si hacemos floor(23.45)=23.