ALGORITMO DE BÚSQUEDA LINEAL - Departamento de Ingeniería

Anuncio
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 
ab
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.
Descargar