Ejercicios Matlab

Fundamentos de Informática, curso 2007-2008 Ingeniería Técnica Industrial (Química) – ESCET – URJC Ejercicios de Matla

Views 359 Downloads 4 File size 361KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

Ejercicios de Matlab. Entrega 1. Etapa 1 – Familiarización 1. Identificadores ¿Cuáles de estos identificadores son válidos y cuáles no? En el caso de no serlo, ¿por qué? total total acumulado resultado-1 resultado_1 resultado 1 Resultado resultaDo 1resultado el_valor_total_de_la_suma_de_los_operandos_es el_valor_total_de_la_suma_es el_valor_total_de la_suma_es resul*1 int8 double integer1 válido

2. Expresiones Escribe las siguientes expresiones aritméticas en Matlab. Compruébalas con los valores de prueba de la columna derecha. A. Área de un triángulo

area =

base⋅altura 2

B. Energía relativista

E=mc

2

donde la velocidad de la luz c = 300 000 C. Ecuación de segundo grado

x=

−b± b 2 −4 a c 2a

D. Polinomio

base 1 6,2

altura 3 1,5

e

m

1,8x105 5,58x105

2 6,2

x

a

b

c

1 0,22 ? ? ? ? ? ? ?

1 13,95 1 1 1 1 1 1 2

0 6,2 -3 0 -2 -10 1 0 1

-1 1,5 2 -1 1 25 1 0 2

y=x 5 5x4 −4x 32x 2 −9x15

E. ¿Y qué nombre pongo a ésta?

José Luis Esteban

área 2,5 4,65

z=

5x −4y 3x 2 −28 − 3x 2 6y4 123− y

Ejercicios de Matlab – V1.169

Pág. 1

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

3. Manipulación de matrices A) Almacena en memoria principal la siguiente matriz, en una variable que se llame M1:



1 2 3 −3 −4 4 3 7 2



B) Calcula la traspuesta de M1 y guárdala en M2 C) Calcula el producto elemento a elemento de M1 y M2 D) Calcula la suma de M1 y M2 E) Calcula la división elemento a elemento de M1 y M2 F) Calcula el producto matricial de M1 y M2 y guárdalo en prodM1M2 G) Calcula el producto matricial de M2 y M1 y guárdalo en prodM2M1 H) Calcula la división matricial de M1 y M2 I) Cambia el valor del elemento central de M1 a 9 J) Guarda en una matriz llamada esquinasM1 de tamaño 2x2 los elementos de las esquinas de M1 K) Guarda en un vector fila v los elementos de la diagonal principal de M1 L) Guarda en un vector columna w los elementos de la diagonal secundaria de M2 M) Calcula el producto escalar de v y w N) Calcula el producto vectorial de v y w O) Guarda en fila1 los elementos de la primera fila de la matriz M1 P) Guarda en columna1 los elementos de la primera columna de la matriz M1 Q) convierte fila1 en un vector columna y columna1 e un vector fila. R) Genera un vector llamado angulos que tenga los ángulos mútiplos de 30 entre 30 y 360 S) Añade el elemento 0 en la primera posición a angulos T) Extrae de ese vector los elementos con índice par (es decir, el segundo, el cuarto, el sexto, etc) y guárdalos en angulosPar U) Extrae de ese vector los elementos con índice impar (es decir, el primero, el tercero, el quinto, etc) y guárdalos en angulosPar V) Concatena a angulosPar el vector angulosImpar

4. Matrices multidimensionales En una urbanización hay 4 bloques de pisos, de 6 plantas cada uno. En cada una de las plantas hay 5 pisos, con un número diferentes de habitaciones cada uno. Todas las puertas número 1 y 2 son pisos de dos habitaciones, las puertas 3 y 4 son pisos de tres habitaciones y las puertas 5, tiene cuatro habitaciones. Se pide: •

Almacenar el número de habitaciones de cada piso en una matriz de forma adecuada



Imprimir bloque por bloque el número de habitaciones de cada piso.



Imprimir el número de habitaciones de todos los pisos de la planta 4 del bloque 2.



Imprimir el número de habitaciones del piso 3 de la planta 2 del bloque 3.



Calcular e imprimir el número total de habitaciones de cada bloque.



Calcular e imprimir el número total de habitaciones de la urbanización.

5. Distancia Define dos vectores de tres elementos (x, y, z), que representan las coordenadas 3D de dos puntos en el espacio. Calcula la distancia que hay entre ambos puntos. José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 2

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

6. Diferencias Crea el vector V con los valores 3, 4, 9, 5, 2, 1, 5, 3, 9, 8, 4, 6, 2, 1, 6, 5. Calcula un nuevo vector D con las diferencias entre los elementos consecutivos, de forma que

D i =V i1−V i El resultado ha de ser 1, 5, -4, -3, -1, 4, -2, 6, -1, -4, 2, -4, -1, 5, -1.

7. Operaciones en Matlab A) Sean los vectores a=[2 4 3 3] y b=[5 2 3 4]. Calcula todas las relaciones entre sus elementos (igualdad, mayor o igual, mayor,...). B) Con dos de los vectores cualesquiera que te dieron como resultado alguna de las operaciones anteriores, aplica los operadores AND, OR y NOT. C) Genera un vector entre 0 y 2*pi con un salto de pi/8. Calcula e imprime todas las magnitudes trigonométricas disponibles en Matlab. D) Calcula el máximo y la posición que ocupa dicho elemento del vector b del apartado A. E) Sea x=5.678. Calcula todos los posibles redondeos de x disponibles en Matlab. F) Sea el vector c=[5 3 2 7 4 11 25 -4 1]. Calcual el menor y el mayor de los elementos del vector. Guarda en COrden el vector ordenado de c. G) Genera una matriz de ceros de tamaño 50x50. Coloca unos en la posición (3,4), (32,25) y (49,49). Busca a continuación en esta matriz todos los elementos distintos de cero. Convierte esta matriz en una matriz dispersa. H) Almacena en memoria principal la siguiente matriz, en una variable que se llame M1:





1 2 3 −3 −4 4 3 7 2

I) Calcua el determinante de la matriz y calcula la matriz inversa guardándola en M1inv. J) A continuación, guarda en el fichero result.txt la matriz M1inv en formato ascii. K) Lee este fichero y guarda el contenido en la matriz M1inv2. L) Haz diferentes pruebas de lectura y escritura de matrices en ficheros binarios.

8. Tabla de conversión de temperaturas La relación de diversas escalas de temperatura con la escala Celsius (C) es la siguiente:

Kelvin:

9 C−32 5 K = C273,15

Reamur:

R =

F =

Fahrenheit:

8 C 10

Construye una tabla de cuatro columnas. La primera contendrá temperaturas Celsius desde 0 hasta 100, de medio en medio grado, a segunda contendrá la temperatura Fahrenheit, la siguiente será Kelvin y, por ultimo, Reamur. La tabla tendrá el siguiente aspecto: 0.0000

32.0000

0.0000

273.1500

0.5000

32.9000

0.4000

273.6500

1.0000

33.8000

0.8000

274.1500

1.5000

34.7000

1.2000

274.6500

2.0000

35.6000

1.6000

275.1500

...

...

...

...

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 3

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

9. Ecuación de una recta en el plano Escribe dos vectores que representan dos puntos en el plano, x1, y1  , x 2, y 2  y calcula el vector de coeficientes (a, b, c) de la ecuación general de la recta a xb yc=0 que los une. El cálculo de los coeficientes se realiza mediante las expresiones: a=y − y b=x −x c=y x − y x 2

1

1

2

1 2

2 1

10. Sumatorio Escribe una expresión que calcule la suma de todos los números naturales hasta n.

11. Factorial Escribe una expresión que calcule el factorial de n.

12. Detección de palíndromos Una secuencia es palindrómica o capicúa si leerla de principio a final es equivalente a leerla de final a principio. Escribe una expresión que calcula si una cadena c es una secuencia palindrómica.

13. DNI La letra del DNI se obtiene de la siguiente manera: se calcula el resto de dividir el valor numérico del DNI entre 23. La letra correspondiente a dicho resto en esta tabla es la que corresponde al DNI. Resto

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

Letra

T R W A G M Y F P D X

B

N

J

Z

S

Q

V

H

L

C

K

E

Elabórese una expresión que calcula la letra a partir de un número de DNI.

14. Área y perímetro de polígonos arbitrarios El área de un polígono cualquiera formado por n puntos

Pi = xi , yi  puede calcularse mediante:

n

A=

1 ∑ x y −x y  2 i=1 i i−1 i−1 i

Para simplificar la anterior expresión, y el correspondiente algoritmo de cálculo, hemos asumido que el primer punto del perímetro es el mismo que el último, es decir, P0 =P n Elabórese un programa que solicita una lista de puntos (pares de coordenadas) y calcula el área y el perímetro del polígono correspondiente. Compruébese el resultado con figuras conocidas.

15. Chargaff La ley de Chargaff dice que en el ADN de un organismo la cantidad de Adenina es la misma que la de Timina, y la de Citosina es la misma que la de Guanina. Dada una secuencia de nucleótidos del estilo de ATTACCAGTACA... podemos comprobar si cumple dicha ley de la siguiente forma: Contamos la cantidad de A, T, C y G presentes en la cadena y calculamos los coeficientes

a=

N A −N T N A N T

donde

y

c=

N C −N G N C N G

N X indica la cantidad de nucleótidos del tipo X presentes en la secuencia.

Partiremos de una cadena que contiene una cantidad indeterminada de caracteres, que solo pueden ser A, T, G o C. Calcula a partir de dicha cadena los coeficientes a y c.

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 4

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

16. Derivación de polinomios cn xn c n−1 xn −1...c 2 x2 c1 xc0 mediante un vector que contiene los coeficientes de éste, de mayor a menor orden: c n , cn −1 , ... , c 2 , c1 , c0  . Es posible representar un polinomio

La derivada del monomio y la del polinomio es

n −1

ncn x

ci x i es ic i xi−1 ,

n

n −1

cn x c n−1 x n −2

 n−1 cn −1 x

2

...c 2 x c1 xc0

2 ...3 c3 x 2c2 xc1 ,

o en forma de vector de coeficientes

nc n , n−1 cn −1 , ... , 2c2 , c1  .

Escribiremos una expresión en la que partiremos de un vector de coeficientes que representa a un polinomio, y calcularemos el vector de coeficientes de la derivada de dicho polinomio.

17. Solución de sistemas de ecuaciones lineales Un sistema de ecuaciones lineales puede representarse mediante una expresión matricial:

a11 x1a12 x 2 a13 x 3 =b1 a21 x1 a22 x 2 a 23 x3 =b2 a31 x1 a32 x 2 a 33 x3 =b3





a11 a12 a13 a21 a 22 a 23 a31 a 32 a 33

    x1 b1 x2 = b2 x3 b3



AX =B

Multiplicando la inversa de A por la izquierda: A−1 AX =A−1 B resulta X =A−1 B , por lo que es posible relolver sistemas de ecuaciones lineales mediante la última expresión. Define la matriz A y el vector B que representan el sistema lineal, y calcula la solución X. Hazlo con un sistema que puedas resolver a mano para corroborar que los resultados son correctos.

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 5

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

Ejercicios de Matlab. Entrega 2. Etapa 2 – Ficheros y Gráficos 18. Gráfica del coseno Representa gráficamente el coseno de un ángulo α de 0 a 2π con un salto de π/8. Titula adecuadamente cada uno de los ejes así como la gráfica resultante. A continuación añade a esa gráfica la del seno de α. Coloca leyendas para distinguir ambas gráficas. Añade un mallado. Edita interactivamente las propiedades de las líneas para cambiar los colores, grosores y estilos de punto de las gráficas que has generado.

19. Superficie 3D: Representa la superficie 3D

z=

sin   x 2 y 2 

 x 2 y 2

entre -10 y 10 para los valores x e y. Para ello deberás

generar los vectores x e y con la precisión que necesites (puedes probar para un salto de 0.5 y de 0.1). A continuación generar la malla en el plano xy utilizando meshgrid. Posteriormente representa la gráfica con ayuda de mesh y luego con surf. Prueba también con plot3d. Además, prueba a girar la gráfica y editar sus propiedades.

20. Movimiento browniano El botánico Robert Brown, durante sus observaciones microscópicas, encontró que las partículas pequeñas se encontraban en continuo movimiento de tipo aleatorio. Cada pequeño salto de una partícula pueden tener lugar en cualquier dirección con la misma probabilidad, mientras que la magnitud del salto sigue una distribución normal. Si representamos cada salto de una partícula en coordenadas polares planas (ángulo θ y magnitud ρ), el ángulo θ tiene una distribución uniforme en el intervalo [0, 2π), mientras que la magnitud ρ tiene una dristribución normal de media μ y de desviación típica σ. Crearemos un vector theta de ángulos de salto y un vector rho de magnitudes de cada salto utilizando los correspondientes generadores de números aleatorios. Supondremos que la partícula se encuentra inicialmente en las coordenadas (0,0) y calcularemos su secuencia de posiciones tras cada salto. Representaremos gráficamente el camino de la partícula. Comprobaremos el resultado obtenido con distintos valores de μ y de σ. Una vez conseguido que funcione con una partícula, realizaremos el cálculo con n partículas simultaneamente.

21. Tratamiento de errores Dada una variable T de la que se obtienen n medidas experimentales, se define la estimación del error de la medida como

T=

3s n

Partiendo de un conjunto de medidas de una variable que se encuentra almacenado en un fichero de texto, calcular la media de las medidas y la estimación de su error.

22. Los últimos serán los primeros Escribe un programa que lee una lista de números reales a partir de un fichero. El programa los almacena en un vector, y presenta la lista en pantalla en orden inverso al que tienen en el fichero. Define el formato que tendrá el fichero y pon un ejemplo de cuál sería su aspecto al abrirlo con un editor.

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 6

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

23. Tratamiento de errores derivados Dada una variable z que depende de otras variables q1, q2, ..., qn , la estimación del error ∆z a partir de los errores medidos ∆q1, ∆q2, ..., ∆qn se calcula mediante

∣ ∣ ∣ ∣

 z =∑ i

∣ ∣

∂z  qi , es decir ∂qi

∣ ∣

∂z ∂z ∂z  q1   q2 ...  qn ∂q1 ∂q2 ∂qn

 z=

Un fabricante de depósitos cilíndricos desea estimar el error en su volumen V, pero medir éste en cada depósito es una operación costosa, por lo que únicamente mide su radio r y su altura h. Así, el cálculo será

∣ ∣ ∣ ∣

V=

∂V ∂V  r h ∂r ∂h

Como el volumen de un cilindro se calcula mediante

∂V = 2  hr y ∂r

2 V =  r h las derivadas parciales serán

∂V =  r2 ∂h

Las medidas experimentales se almacenan en un fichero de texto con dos columnas, la primera registra el radio y la segunda la altura. A partir de los datos de este fichero se desea estimar el error en el radio r, en la altura h y en el volumen V. Elabora la secuencia de instrucciones que realizan esta tarea.

24. Distancia Tenemos un fichero llamado PUNTOS.DAT con la siguiente estructura: 10 2.1 5 5

3 4 1.7 3

Cada una de las líneas contiene las coordenadas de un punto en el plano. En el ejemplo hay 4 coordenadas, pero el fichero podría contener cualquier cantidad de ellas. Elabórese un script que lee los datos del fichero y presenta en pantalla la distancia entre cada punto y el siguiente. Finalmente presenta la distancia total. Con los datos del ejemplo, el resultado sería: Distancias entre puntos consecutivos: 7.96 3.70 1.30 Distancia total: 12.96

Para complicarlo un poco más: presentar también la distancia máxima y mínima entre puntos consecutivos.

25. Análisis de cromatogramas La cromatografía es una poderosa técnica analítica utilizada para detectar, cuantificar y separar distintos compuestos químicos en función de algunas de sus propiedades físico-químicas. Los gráficos resultantes (cromatogramas) expresan en el eje x la movilidad del compuesto químico (medida en tiempo o distancia), y en el eje y la cantidad detectada en cada instante o posición. El análisis habitual de los cromatogramas consiste en detectar sus picos, cuya movilidad se asocia a un compuesto determinado, y calcular el área bajo cada pico, que indica la concentración del compuesto. En este ejercicio realizaremos un análisis muy simplificado de algunos cromatogramas: •

Detectaremos los picos del cromatograma. Cada máximo en el gráfico será considerado un pico.



Detectaremos los compuestos asociados a los picos. Dispondremos de una tabla de movilidades conocidas de distintos compuestos. Para cada pico, buscaremos el compuesto con movilidad más parecida y asumiremos que el pico corresponde a dicho compuesto.

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 7

Fundamentos de Informática, curso 2007-2008



Ingeniería Técnica Industrial (Química) – ESCET – URJC

Calcularemos la concentración del compuesto. En lugar de calcular el área bajo el pico, supondremos que la concentración viene dada por la altura del pico en el máximo. Ofreceremos las concentraciones en unidades arbitrarias.

Elabora un script que: • • •



Lee un fichero que contiene la lista de movilidades de los compuestos. Almacena esta información en un vector. Lee un fichero que contiene la lista de nombres de los compuestos. Almacena esta información en un vector. Lee un fichero que contiene los datos de un cromatograma (lista de números reales que representan la concentración a lo largo del tiempo). Suponemos que la movilidad es el número de orden de cada dato. Almacena el cromatograma en un vector. Busca los picos del cromatograma. Para cada pico detectado calcula y presenta lo siguiente: • Movilidad del pico • Identificación del compuesto • Concentración del compuesto

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 8

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

Ejercicios de Matlab. Entrega 3. Etapa 3 – Programación secuencial 26. Número de monedas Disponiendo de las monedas fraccionarias del euro (50, 20, 10, 5, 2 y 1 cent), calcular el mínimo número de monedas que se han de entregar para pagar cualquier importe entre 1 céntimo y 99 céntimos. El programa solicita el importe y presenta la cantidad a entregar de cada tipo de moneda.

27. Unidades de tiempo Partiendo de una cantidad de tiempo medida en segundos, calcular el número de semanas, días, horas, minutos y segundos a los que corresponde.

28. Frases El programa pide una frase. Se imprimirá una frase en la que el primer carácter de la frase original cambia de sitio, apareciendo al final. Se imprimirá otra frase en la que el último carácter de la frase original cambiará de lugar, apareciendo en la primera posición.

29. Comparaciones Escribe un programa que lea dos números y devuelva como resultado si los números son iguales. Si no lo son, devolverá como resultado el mayor de los dos. Escribe dos versiones, una utilizará la función max y la otra no.

30. Ley de Ohm La ley de Ohm establece una relación entre la intensidad de corriente (I) que circula por un circuito, la diferencia de potencial (V) y la resistencia del mismo (R):

I=

V R

Escribe un programa que ofrezca al usuario la opción de calcular I, V o R. El programa solicitará los otros dos datos necesarios y claculará la magnitud elegida.

31. Ecuación de segundo grado. Versión 2 Se procede como en la versión 1 del problema, pero en este caso se estudia previamente el número de soluciones, y si son reales o complejas, calculándolas y presentándolas. Considérese que si a = 0, la ecuación no es de segundo grado, por lo que se resolverá como una ecuación lineal. Si, además, b = 0, la ecuación no depende de la variable x. Entonces, si c = 0, se trata de una ecuación degenerada, mientras que si c ≠ 0, la ecuación es contradictoria. Descartados los anteriores casos, es necesario calcular el discriminante número de soluciones, y si son reales o complejas.

2 b −4ac , el cual determina el

32. Conversor de temperatura. Versión 2 El programa solicita: • Escala de origen: C para Celsius, F para Fahrenheit , R para Reamur, K para Kelvin. • Escala de destino: como antes • Temperatura en la escala de origen El programa presenta la temperatura en la escala de destino y termina. José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 9

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

33. Tiro parabólico Construir una función que calcula los resultados más relevantes en el tiro parabólico. Para ello, la función necesita como parámetros de entrada la velocidad inicial y el ángulo de salida. Se pide: •

Calcular la altura máxima alcanzada por el proyectil



Calcular el alcance máximo



Representar gráficamente la trayectoria descrita por el proyectil. Se supondrá que el punto de partida es el origen de coordenadas.

Indicaciones para la práctica: Supongamos un lanzamiento de un proyectil con velocidad de salida es las componentes de la velocidad inicial son:

v 0x=v 0 cos 

v 0 y ángulo α. Tendremos que

v 0y=v 0 sin 

y las propiedades cinemáticas del cuerpo en cualquier instante (t) de su movimiento son: Magnitud

Componente x

Componente y

Aceleración

a x =0

a y =−g

Velocidad

v x =v 0x

v y =v 0y−g t

Posición

x=v0x t

1 y=v 0y t− g t 2 2

La aceleración es constante, pero la velocidad y la posición del móvil sí que dependen del tiempo. La altura máxima se alcanza cuando la componente vertical v y de la velocidad se hace cero. Como

v y =v0y− g t , se alcanzará la altura máxima cuando t= y max =

v 0y . Por lo tanto, la altura máxima es g

v 20y v2 = 0 sin2  2g 2g

El móvil avanzará horizontalmente a la velocidad constante v 0x durante el tiempo de vuelo, que será 2t (siendo t el tiempo en alcanzar la altura máxima) ya que el móvil tarda lo mismo en subir que en bajar, por lo tanto el alcance es

x max =v 0x 2 t

es decir,

v 20 alcance = x max = sin 2  g

34. Calendario gregoriano El calendario actual obedece a la reforma que ordenó el Papa Gregorio XIII en el año 1582. Se decidió que, en lo sucesivo, fuesen bisiestos los años múltiplos de cuatro, con la excepción de que los años seculares (los acabados en dos ceros) sólo fueran bisiestos los múltiplos de cuatrocientos. Escriba un programa que pida al usuario una fecha (día, mes y año como números), y que diga si es o no válida (si el mes está comprendido entre 1 y 12, si el número del día es compatible con el mes, y si el año es mayor que 1582.)

35. Crédito Un banco, antes de conceder un préstamo a 20 años comprueba los ingresos del solicitante. Si los ingresos son superiores a 12000 € anuales el crédito se concede. Si los ingresos son inferiores a 12000 € anuales pero superiores a 8000 € y está soltero el crédito se concede. También se le concede si tiene ingresos entre 12000 € y 10000 € y esta casado sin hijos. Realizar un programa que pida los ingresos anuales, el estado civil del solicitante y si tiene hijos, y diga si se le da el crédito o no.

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 10

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

36. Tiro al blanco Tenemos un cañón que lanza proyectiles con una velocidad inicial de disparo v0, y que nuestro objetivo es acertar en un blanco que se encuentra localizado en las coordenadas (xB, yB). Para acertar, tendremos que ajustar el ángulo de tiro. Sabemos que las componentes de la velocidad inicial se calculan así:

v 0x=v 0 cos 

v 0y=v 0 sin 

Dado que en la coordenada x el movimiento es uniforme, en la coordenada y es uniformemente acelerado, y utilizando las ecuaciones correspondientes a esos movimientos, obtenemos el siguiente sistema de dos ecuaciones con dos incógnitas, t y a (xB e yB son las coordenadas conocidas del blanco):

x B=v 0 cos  t

1 2 y B = y 0v 0 sint  −g t 2

De aquí podemos eliminar t, obteniendo una única ecuación en tan(α), empleando la relación trigonométrica:

1 =1tan2  2 cos  resultando la ecuación de segundo grado en tan(α):

x2 1 y B = y 0x B tan  −g  B2 1tan 2  2 v0 Resolviendo esta ecuación para tan(α), encontramos dos ángulos de disparo que alcanzan el blanco. Se pide hacer un script en Matlab que pida al usuario las coordenadas del blanco y la velocidad de disparo del cañón y que calcule: •

Los dos ángulos que dan en el blanco.



El tiempo de vuelo del proyectil para cada ángulo hasta que impacta en el blanco.



Una gráfica en la que se muestren en diferente color las dos posibles trayectorias del proyectil desde que sale del cañón hasta que impacta en el blanco (ver Figura). Esta gráfica deberá estar formateada adecuadamente, con las leyendas y los títulos de los ejes correspondientes y contener una malla o grid.

Se supondrá que el cañón está situado en el origen de coordenadas. Tómese el valor g=9.81m/s2. Comprobar los resultados utilizando los siguientes datos de entrada: xB=492,4; yB=145,5; v0 =92,8 los cuales habrán de reproducir la gráfica siguiente:

Gráfica obtenida para los datos de entrada especificados en el enunciado del ejercicio José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 11

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

37. Ajuste por mínimos cuadrados El trabajo de laboratorio tiene como fruto una serie de datos experimentales representados, normalmente, por un conjunto discreto de pares de datos {xi, yi}, siendo i un índice natural que varía de 1 a N. La manipulación de los datos tiene normalmente uno de estos objetivos: •

Determinar una ley experimental



Comprobar una ley experimental previamente supuesta

Si los datos están relacionados entre sí, se puede encontrar una función que se ajuste a los datos a través del método de ajuste por mínimos cuadrados. El método se basa en minimizar la siguiente función objetivo: N

2=∑  y i− f  x i 2 i=1

donde {xi, yi} son datos experimentales, N es el número total de datos objtenidos y f(x) es la función incógnita. La función χ2 calcula la diferencia entre el valor experimental yi y el valor obtenido por la función f(xi) para un xi dado. Normalmente no se cumple que yi = f(xi), por lo que χ2 nunca es cero. La forma de determinar f es hacer que χ2 sea lo más próximo a cero posible, lo que se consigue minimizando su valor. Al hacer esto, se obtiene una función que describe, sólo de forma aproximada, el comportamiento global de los puntos experimentales. Por lo tanto, el problema de encontrar f es el problema de minimizar la función objetivo χ2. No existe una expresión general de esta minimización, aunque para casos particulares sencillos sí puede obtenerse una solución analítica. Uno de los casos más sencillos para aplicar el método de los mínimos cuadrados es el de una distribución de pares ordenados {xi, yi} que se pretende ajustar a una línea recta. Es decir la función incógnita tiene la forma: f(x)=a + bx. En tal caso existe solución analítica. Consideremos que: N

 a ,b=∑  y i−ab xi 2 2

i =1

Desarrollando el cuadrado se obtiene: N

N

N

N

N

N

i =1

i=1

i=1

i=1

i =1

i=1

2 a ,b=∑ yi ∑ Na 2b 2 ∑ xi2−2 a ∑ y i−2 b ∑ x i y i 2 a b ∑ x i Los valores más eficaces para a y b se obtienen cuando se minimiza la función objetivo. El mínimo de una función se caracteriza por que su primera derivada es cero, es decir:

∂2 =0 y ∂a

∂2 =0 ∂b

De donde se obtienen las soluciones para a y b: N

N

N

N ∑ xi y i−∑ x i ∑ y i b=

i=1

N

2 i

i =1 N

i =1

2

N ∑ x −∑ x i  i =1

N

N

∑ y i−b ∑ x i

a= i=1

i =1

N

i =1

Se pide hacer un programa que dados un conjunto de datos experimentales {xi, yi}: •

Calcule la recta que mejor se ajusta a ese conjunto de datos utilizando las expresiones para a y b de este enunciado.



Represente gráficamente los datos junto con una gráfica de la recta calculada (ver figura)

Comprobar los resultados utilizando los siguientes datos de entrada: x=[1 1.2 1.5 1.7 2]; y=[5 5.8 6.5 7.5 8.4]; los cuales han de reproducir la siguiente gráfica.

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 12

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

Gráfica de ajuste lineal obtenida para los datos de entrada especificados en el enunciado

Etapa 4 – Bucles 38. Cuadrados Hacer un script que imprima los 20 primeros numeros y sus cuadrados. Hacer otro script que imprima los numeros impares y sus cuadrados que hay entre 1 y 20.

39. Mayor y menor Realizar un script que pida n números e imprima el número mayor y el número menor.

40. Vocales Escribe un script en Matlab que pida al usuario una cadena de caracteres y que imprima la misma cadena, pero sustituyendo las vocales por asteriscos.

41. Triángulo Escribir un script que lea un entero y un carácter. La salida debe ser un triángulo dibujado con el carácter dado y de anchura máxima dada por el entero leido. Por ejemplo su el entero es 7 y el carácter es ‘O’, el triángulo debe ser: O OOO OOOOO OOOOOOO

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 13

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

42. Rombo Escribir un script que amplíe el programa anterior para dibujar un rombo: O OOO OOOOO OOOOOOO OOOOO OOO O

43. Más sumatorio Escribe un programa que solicite un número n y calcule la suma de todos los números naturales hasta n. Haz la prueba con valores grandes de n. Cuando Gauss tenía 10 años, su profesor quiso un rato de tranquilidad, y pidió a sus alumnos que sumaran todos los números naturales del 1 al 100. En unos instantes, Gaus obtuvo la solución. Se dio cuenta de que haciendo parejas de números (primero con último, segundo con penúltimo,...) se obtiene siempre la misma suma, 101, y como son 50 parejas, el resultado es 101 x 50 = 5050. En efecto,

S=

a 1a n n donde a1 es el primer término y an es el enésimo término a sumar. Utiliza esta 2

expresión para comprobar el resultado del programa.

44. Factorial Escribe un programa que lea un número n y calcule su factorial (n!). Elaborar dos versiones. Una de ellas utilizando la instrucción FOR y la otra utilizando la instrucción WHILE.

45. Enteros al cuadrado Escribe un programa que lea números enteros procedentes del teclado y que cada vez que el número sea par lo eleve al cuadrado. El programa terminará cuando el usuario introduzca 0.

46. Primera vocal Realizar un script que solicite al usuario una cadena, en la cual busca y escribe la primera vocal que aparezca.

47. Más monedas Disponiendo de todos los billetes y monedas fraccionarias del euro, calcular el mínimo número de billetes y monedas que se han de entregar para pagar cualquier importe.

48. Conversor de temperatura. Versión 3 Igual que el “Conversor de temperatura 2”, pero, en este caso, el programa repite la operación hasta que el usuario indica una escala inexistente. Entonces termina.

49. Serie i

El programa solicita x y n, y calcula la suma de la serie

x hasta el término n, es decir i!

n

i

∑ xi! i=0

¿Hasta qué valor de n es factible hacer el cálculo? Pista para optimizar el cálculo: evita realizar el cálculo de José Luis Esteban

x i y de i! en cada iteración.

Ejercicios de Matlab – V1.169

Pág. 14

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

50. ¿Soy un primo? El programa solicita un número entero, comprueba si es primo y lo indica. Para comprobar la divisibilidad de un número por otro se utilizará la función mod.

51. Más serie: exponencial Dado que la serie del anterior ejercicio es convergente, escribe un programa que solicite el valor de x, y un grado de precisión (por ejemplo, 0.0001 para indicar precisión de una diezmilésima). El programa sumará tantos términos de la serie como necesite, hasta que el término a añadir sea menor que la precisión establecida. No es ningún secreto que esa serie sirve para calcular la función exponencial biblioteca exp para comparar su resultado con el de la suma de la serie.

e x . Utilícese la función de

52. Estadígrafos básicos El programa solicita un número n que indicará la cantidad de datos que se leerán a continuación. Solicitará cada uno de los datos xi, y con ellos calculará: La suma de todos ellos:

n

S=∑ x i i =1

La suma de los cuadrados:

n

S c = ∑ xi 2 i=1

La media: La varianza:

M= V=

S n

Sc −M 2 n

La desviación típica:

s= V

El mayor de los datos

max  x i i =1...n

El menor de los datos

min  x i i =1...n

53. Estadígrafos flotantes Como en el anterior problema, pero se imprimirá el resultado después de introducir cada dato, utilizando todos los disponibles hasta el momento.

54. Criba de Eratóstenes Este conspicuo señor griego se dio cuenta de que si en una lista de números tachaba todos los múltiplos de cada primo, en la lista sólo le quedaban primos. Utilizaremos este método para calcular los primos existentes hasta 1000 sin hacer una sola división. Comenzaremos creando una matriz que contenga los número del 1 al 1000. Aprovechando que sabemos que el 2 es primo, nos ubicamos en el 2 y saltamos por la matriz de 2 en 2, poniendo un cero en cada casilla donde aterricemos. Con esto hemos eliminado los múltiplos de 2. Desde el 2, avanzamos por la matriz hasta encontrar el siguiente número no cero. En este caso será el 3, así que saltaremos por la matriz de 3 en 3, poniendo un cero en cada lugar donde aterricemos. Repetimos el proceso hasta que terminamos con la tabla. Entonces quedarán en ella únicamente los primos, junto con todos los ceros que han sustituido a los no primos. Imprimiremos exclusivamente los números primos.

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 15

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

55. Fibonacci La sucesión de Fibonacci es la siguiente: 1, 1, 2, 3, 5, 8, 13, 21, 34,...

f 2=1 , y cada uno de los siguientes términos de la sucesión se calculan sumando los dos anteriores: f i = f i−1 f i −2 Es decir,

f 1=1 ,

Escribe un programa que genera dicha sucesión, presentando en pantalla cada uno de los términos. El programa terminará después de presentar un término mayor que un cierto límite (1000000, por ejemplo).

56. Raíz cuadrada El cálculo de

x

puede realizarse de forma aproximada mediante un método iterativo. Se estima

x lo cual sólo es cierto en el caso de x = 4. Seguidamente calculamos 2 2 s −x una nueva aproximación si 1=s i− i . Si la diferencia en valor absoluto entre las dos aproximaciones 2 si es inferior a un cierto umbral e , ∣si 1 −s i∣e , damos por buena la última aproximación. Si no, inicialmente la solución como

si =

realizamos una nueva aproximación. Elabora un programa que solicita al usuario el umbral e y el valor de x. Calcula iterativamente la raíz cuadrada de x y la presenta junto con el valor proporcionado por la función sqrt.

57. Contador de palabras El programa solicita una línea de texto y calcula el número de palabras presentes en ella (separadas mediante espacios).

58. Contador de palabras en múltiples líneas Igual que antes, pero en este caso, después de dar el resultado se vuelve a solicitar una nueva línea. El proceso se repite hasta que el usuario teclea “fin”. Entonces el programa presenta el número de líneas y la suma de palabras en todas ellas.

59. Espacios El programa solicita una frase. La frase podrá contener palabras que estén separadas por más de un espacio. El programa normaliza la frase dejando un único espacio entre las palabras, y presenta el resultado.

60. Búsqueda y contaje de subcadenas Dado un fichero de texto, se trata de contar el número de veces que aparece una cadena de caracteres. El programa solicitará el nombre de un fichero de texto y una cadena de caracteres. Seguidamente, abrirá el fichero y buscará todas las apariciones de la cadena. Finalmente, presentará el número de apariciones de ésta y terminará.

61. Sensores En una planta química disponemos de un sensor de temperatura y otro de presión. Una biblioteca nos proporciona dos funciones, temperatura() y presion(). Llamando a esas funciones desde un programa, podemos obtener respectivamente la temperatura y la presión existentes en la planta en ese instante. Haz un programa que utilice ambas funciones para realizar las siguientes operaciones en un bucle sin fin: • • •

Presenta en pantalla la temperatura y presión actuales Calcula el récord de temperatura y presión alcanzadas hasta el momento actual Cuando la temperatura o la presión superan su respectivo récord, presenta un mensaje de alarma en pantalla

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 16

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

62. Cálculo de combinaciones, permutaciones y variaciones El programa solicita el tipo de cálculo a realizar, combinaciones, permutaciones o variaciones, tanto con repetición como sin repetición. También solicita los parámetros necesarios para el cálculo. El programa aplica la fórmula pertinente y presenta el resultado. Permutaciones de m elementos:

m!

Variaciones con repetición de m elementos tomados de n en n:

mn

Variaciones sin repetición de m elementos tomados de n en n:

m! n!

Combinaciones de m elementos tomados de n en n:

m! n!m−n !

Combinaciones con repetición de m elementos tomados de n en n:

mn−1! n! m−1!

Es interesante observar los límites prácticos para los cálculos producidos por el desbordamiento. Estúdiense distintas posibilidades para evitarlo.

63. Integración numérica El método de integración mediante la suma de trapecios consiste en aproximar el valor de la integral de una función en el intervalo [a,b] a la suma de las áreas de los rectángulos que resultan al subdividir dicho b

intervalo en un número N de subdivisiones:

∫ f  x  dx

N



∑ ei i =1

a

donde el área de cada elemento ei vale

f  xi  f  xi 1 f  x i  f  x i ancho = ancho⋅ 2 2 b−a siendo ancho = = x i1−x i N e i =  x i1−x i ⋅

f(x) (f(x)+f(x+ancho))/2 f(x+ancho) x a

x

x+ancho

b

Elabórese un programa que pida al usuario los límites de integración (a y b) y el número de subdivisiones (N), y que devuelva la aproximación mediante la suma de trapecios del valor de la integral de la función: b

∫  x senx x dx a

xe

Los límites de integración a y b serán introducidos por el usuario. Ejecútese el programa para a = 0º y b = 90º, comprobando que: •

para 10 subdivisiones (N = 10) el valor de la integral es: 0.264258, y



para 100 subdivisiones (N = 100) el valor de la integral es: 0.264766.

Nótese que esta variación en el número de subdivisiones sólo afecta a partir de la cuarta cifra decimal.

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 17

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

64. Traducción del código genético Dada una secuencia de ARN, representada por los caracteres A, G, C, U, obtendremos la secuencia de aminoácidos de la proteína resultante de la traducción. Sabemos que el código genético es el siguiente: Aminoácido

Codones

Aminoácido

Alanina Ala A Arginina Arg R Asparragina Asn N Aspartato Asp D Cisteína Cys C Glutamato Glu E Glutamina Gln Q Glicina Gly G Histidina His H Isoleucina Ile I Terminación de la síntesis

GC(A,C,G,U) CG(A,C,G,U) o AG(A,G) AA(C,U) GA(C,U) UG(C,U) GA(A,G) CA(A,G) GG(A,C,G,U) CA(C,U) AU(A,C,U) UA(A,G) o UGA

Leucina Lisina Metionina Fenilalanina Prolina Serina Treonina Triptófano Tirosina Valina

Codones Leu Lys Met Phe Pro Ser Thr Trp Tyr Val

L K M F P S T W Y V

CU(A,C,G,U) o UU(A,G) AA(A,G) AUG (inicio de la síntesis) UU(C,U) CC(A,C,G,U) UC(A,C,G,U) o AG(C,U) AC(A,C,G,U) UGG UA(C,U) GU(A,C,G,U)

Nota: A modo de ejemplo, GC(A,C,G,U), significa GCA, GCC, GCG o GCU Se leerá desde teclado (o desde fichero) una secuencia de ARN, formada por nucleótidos representados mendiante los caracteres A, G, C, U. Podrá existir también espacio blanco (espacios, tabulaciones y saltos de línea), pero no tendrá significado alguno para la secuencia. Se recorrerá la secuencia de nucleótidos hasta detectar el codón AUG, que inicia la traducción y, además, codifica el aminoácido metionina. Desde ese punto se recorrerán los codones sucesivos (grupos de 3 nucleótidos), traduciendo cada uno de ellos al correspondiente aminoácido. El proceso termina al encontrar cualquiera de los codones de terminación (UAA, UAG o UGA) o al terminar la secuencia. Por ejemplo, la secuencia de ARN:

UGUAAGAGGUAUGCACUCAAAAGACUGACACCUG

codifica el polipéptido:

Met-His-Ser-Lys-Asp

Etapa 5 – Funciones 65. Potencia Suponga que no existe el operador potencia en Matlab. Escriba una función denominada potencia que acepte dos valores enteros, llamados base y exponente y devuelva base elevado a la potencia exponente. Elaborar dos versiones. Una de ellas utilizando la instrucción FOR y la otra utilizando la instrucción WHILE.

66. Cantidad de cifras Realizar una función en Matlab que reciba un número entero y devuelva la cantidad de cifras que tiene el número (ejemplo: 123 tiene 3 cifras). Realiza otra función que devuelva la suma de las cifras del número (ejemplo: 123 -> 1+2+3 = 6).

67. Más Fibonacci La sucesión de Fibonacci es la siguiente: 1, 1, 2, 3, 5, 8, 13, 21, 34,...

f 2=1 , y cada uno de los siguientes términos de la sucesión se calculan sumando los dos anteriores: f i = f i−1 f i −2 Es decir,

f 1=1 ,

Escribe una función entera que recibe como argumento un número entero i, y devuelve el valor de

fi

Realiza una implementación iterativa y otra recursiva.

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 18

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

68. Más derivación de polinomios Utilizando el mismo planteamiento que en el ejercicio sobre “derivación de polinomios” elaboraremos dos funciones: derivapol

recibe un vector que representa el polinomio p, calcula su derivada p' y la devuelve en forma de otro vector.

evalpol

recibe un vector que representa un polinomio p, y un valor real x. Calcula el valor del polinomio en x, es decir, p(x).

Elaboraremos un programa que solicita un polinomio, llama a derivapol para obtener su derivada y pide dos valores de x al usuario, x1 y x2. Se evaluará el polinomio y su derivada en sun conjunto de valores entre x1 y x2 y se presentará el resultado gráficamente.

69. Más primos Escribe una función lógica que recibe un número entero e indica si el número es primo. Trata de optimizar la función, reduciendo el número total de cálculos aritméticos.

70. Factorización Elabora una función que recibe un número entero y que devuelve dos vectores: el primero contiene los números primos en los que se descompone, y el segundo contiene las potencias de dichos números. Elabora un programa que solicita al usuario un número entero y calcula su factorización en números primos. Seguidamente comprueba si es correcta, realizando el cálculo inverso. Finalmente presenta el resultado en pantalla. Por ejemplo, para el caso de 180 (22 * 32 * 51), el programa presentaría: Num 2 3 5

Pot 2 2 1

Será necesario utilizar la función desarrollada en el ejercicio “más primos”. Se comprobará si el número a factorizar es divisible por los sucesivos números primos, y cuántas veces es divisible por cada uno de ellos. Desafío entre compañeros: Busca dos números primos tan grandes como puedas encontrar, multiplícalos y proporciona el producto resultante a un compañero. Éste deberá utilizar su programa de factorización para encontrar los dos números primos originales. Este tipo de desafío es uno de los juegos favoritos entre los actuales expertos en matemática discreta, ya que los sistemas modernos de cifrado se basan en la utilización de pares de primos muy grandes y, por tanto, muy difíciles de factorizar.

71. Números perfectos Un número perfecto es el que es igual a la suma de sus divisores, excluido él mismo. Ejemplo de número perfecto: 6 = 1+2+3

Contraejemplo: 12 ≠ 1+2+3+4+6

Se pide: •

Escribir una función que reciba un número y devuelva si es o no perfecto.



Escribir un script que, utilizando la función anterior, muestre por pantalla los números perfectos que hay desde el 1 al 200.

72. Más combinatoria Elaboraremos cinco funciones, una por cada uno de los cálculos del ejercicio sobre Cálculo de combinaciones, permutaciones y variaciones. Obsérvese que alguna de las funciones del módulo puede hacer uso de otras funciones del mismo módulo.

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 19

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

73. Más estadígrafos Elaboraremos siete funciones, una por cada estadígrafo de los utilizados en el ejercicio sobre Estadígrafos básicos. Las funciones recibirán como argumento de entrada un vector con los datos a analizar, y devolverán como resultado un valor real. La declaración de cada una de ellas podrá seguir el siguiente esquema: function r = estadigrafo(v) ... r = ...

% Aquí se calcula el estadígrafo % y se asigna el resultado

Elaboraremos un programa que realiza exactamente las mismas operaciones que el ejercicio sobre Estadígrafos básicos, con la salvedad de que realizará los cálculos llamando a las funciones.

74. Química del carbono Realice un programa que pida al usuario una fórmula química en una cadena de caracteres. Esta fórmula podrá tener los siguientes caracteres: •

‘C’, ‘H’, ‘O’, ‘N’ como identificadores de los elementos básicos de la química del carbono



’2’, ’3’, ’4’, ‘5’ y ‘6’ como índices posibles de estos elementos

Se pide analizar esta fórmula para: •

Decidir si contiene algún carácter no válido, en cuyo caso se deberá volver a pedir una nueva fórmula al usuario



En el caso de que todos los caracteres sean válidos mostrar por pantalla el número de átomos de cada tipo que contiene la fórmula



Por último, mostrar por pantalla el peso molecular

Se recomienda dividir el problema en subproblemas más sencillos para que sea más fácil la resolución del problema final. Notar que el número de átomos de un elemento es función del carácter situado a continuación de él en la fórmula NOTA: Para que el programa considere que una fórmula es correcta es suficiente con comprobar que sólo coniene caracteres válidos. Es decir, no es necesario que el programa decida si la fórmula es químicamente correcta o no. Son ejemplos de fórmulas consideradas válidas: CH3CH3, H3CCH3, C2H6.

75. Solución de ecuaciones – Método de bipartición Según el teorema de Bolzano, si una función continua en el intervalo [a, b] toma valores de distinto signo en a y en b, entonces existe al menos un valor entre ambos extremos del intervalo en el que la función se hace nula. Esto nos permite diseñar un método para encontrar soluciones a una función continua en un intervalo. El usuario puede tantear hasta encontrar un valor a y otro b, tales que en uno la función es positiva, y en el otro negativa. Ahora, el programa puede calcular un punto intermedio c = (a +b)/2 y calcular el valor de la función. El programa sustituirá uno de los extremos del intervalo por c: concretamente aquel que tenga el mismo signo que c. Ahora tenemos el mismo caso que al principio, pero con un intervalo la mitad de amplio. Realizaremos el anterior proceso de bipartición tantas veces como sea necesario, hasta que la anchura del intervalo sea inferior a una tolerancia determinada también por el usuario. Elabórese un programa que realiza las siguientes operaciones: •

Solicita al usuario dos valores de la variable independiente x: a y b, y el programa calcula f(a) y f(b).



Si f(a) y f(b) son del mismo signo, indica que no es posible encontrar una solución entre ambos (aunque no estamos seguros de que no la haya, sino que el método no se puede aplicar).

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 20

Fundamentos de Informática, curso 2007-2008



Ingeniería Técnica Industrial (Química) – ESCET – URJC

Si son de distinto signo: •

Solicita al usuario una tolerancia para la solución (máximo error admisible).



Aplica el método de bipartición descrito y se presenta la solución.

La ecuación de la que se busca solución ha de estar escrita por separado. Para ello, escribiremos una función declarada de la siguiente manera: function r = f(x) r = ...

% x es un valor real % Aquí va la función que queremos resolver

De este modo, sólo es necesario cambiar el contenido de esta función para resolver distintos problemas.

76. Solución de ecuaciones – Método de Newton El método de Newton para resolver ecuaciones se basa en el conocimiento de la función y de su derivada.

xi de la solución se calcula en ese punto el valor de la función f  xi  y el de la derivada f '  x i  . Con esos datos se calcula una nueva f  xi  aproximación x i1=x i − . Se repite el proceso, f '  xi  Partiendo de una aproximación

refinando iterativamente la solución hasta que la diferencia entre dos valores sucesivos en el cálculo ∣x i1− xi∣ es inferior a un valor de tolerancia establecido por el usuario. Para no tener que codificar una función y su derivada, nos centraremos en un caso más simple, elaborando un programa que calcula soluciones de ecuaciones polinómicas. Aprovecharemos la función derivapol y la función evalpol que fueron desarrolladas en el ejercicio sobre más derivación de polinomios. El programa solicitará al usuario: •

El orden de la función polinómica a resolver (la máxima potencia de la variable x en el polinomio). Se ubicará un vector para contener el polinomio problema y otro para contener su derivada.



Los coeficientes del polinomio que define la función a resolver.



El valor de la tolerancia o precisión deseada en el cálculo de la solución.



Un valor inicial

x i de la variable x, que se utilizará como primera aproximación del resultado.

Se utilizará la función derivapol para calcular la derivada del polinomio problema introducido por el usuario. Después, utilizará la función evalpol para evaluar la función y su derivada en

x i y calculará la siguiente

aproximación x i1 según se ha descrito. Esto se repetirá tantas veces como sea necesario hasta que la solución sea tan precisa como establece la tolerancia. Será ilustrativo presentar en cada iteración los valores f  x i  y f '  x i . de x i ,

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 21

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

77. Ordenación – Método de la burbuja En muchas ocasiones es necesario ordenar los valores que contiene una matriz. Para ello es necesario intercambiar los contenidos de los elementos siguiendo algún método que los ordene. En este ejercicio vamos a utilizar el método de la burbuja: •

Compararemos el primer elemento de la matriz con el que le sigue. Si están ordenados, se dejan como están, y si no, se intercambian. Avanzaremos una posición y repetiremos la operación, y así sucesivamente hasta llegar al final de la matriz. A este recorrido por la matriz, denominaremos pasada.



Si durante la pasada no hemos realizado algún intercambio, entonces la matriz está ordenada.



Por eso, repetiremos la pasada descrita tantas veces como sea necesario, hasta que en una de ellas no hayamos realizado ningún intercambio. En ese momento, la matriz estará ordenada.

Escribiremos la función burbuja, que recibe un único argumento, el vector a ordenar, y devuelve un vector con los valores ordenados, tras emplear el método descrito. Elabora un script que solicite el nombre de un fichero que contiene una serie de datos numéricos. El programa abrirá el fichero y leerá los valores, cargándolos en un vector. Seguidamente, llamaremos a la función burbuja, que devolverá el vector ordenado, y presentaremos éste en pantalla. Fíjate en los detalles del procedimiento de ordenación y busca posibles formas de optimizarlo.

78. Ordenación – Método de selección Este método de ordenación consta de los siguientes pasos (suponiendo ordenación de menor a mayor): • • •

Buscamos el menor elemento del vector. Lo intercambiamos por el primero en la lista. Buscamos el menor elemento comenzando en el segundo. Lo intercambiamos por el segundo. Y así sucesivamente...

Escribiremos la función ordselec, que recibe un único argumento, el vector a ordenar, y devuelve el vector ordenado, tras emplear el método descrito. Elabora un script que solicite el nombre de un fichero que contiene una serie de datos numéricos. El programa abrirá el fichero y leerá los valores, cargándolos en un vector. Seguidamente, llamaremos a la función ordselec, que devolverá el vector ordenado, y presentaremos éste en pantalla.

79. Ordenación – Método de inserción Este método de ordenación consta de los siguientes pasos (suponiendo ordenación de menor a mayor): •

Partimos de un vector con datos desordenados, y de otro que habrá de recibir los datos ordenados.



Copiamos el primer elemento del vector a ordenar en la primera posición del segundo vector.



Tomamos el segundo elemento del vector a ordenar y lo comparamos con el último elemento del segundo vector. Si el nuevo es menor, desplazamos el elemento una posición.



En general, por cada elemento que se inserta en el nuevo vector: • • •

Se compara con los elementos del vector ordenado empezando por el final. Si el elemento a insertar es menor que el ya existente, se desplaza el existente una posición. Si no, se inserta en la posición que dejó libre el anterior desplazamiento.

Escribiremos la función ordinsert, que recibe un único argumento, el vector a ordenar, y devuelve el vector ordenado, tras emplear el método descrito. Elabora un script que solicite el nombre de un fichero que contiene una serie de datos numéricos. El programa abrirá el fichero y leerá los valores, cargándolos en un vector. Seguidamente, llamaremos a la función ordinsert, que devolverá el vector ordenado, y presentaremos éste en pantalla.

80. Termostato La temperatura de un recinto varía según la energía térmica (calor) que gana o pierde, según la expresión

 T = Q /C [1] donde C es la capacidad calorífica del recinto, ΔQ es la variación de energía térmica del recinto y ΔT es la correspondiente variación de temperatura de éste. José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 22

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

El recinto pierde calor por sus paredes porque el exterior se encuentra más frío, según  Q=−k  T  t , donde ΔQ es la pérdida de energía, ΔT es la diferencia de temperatura entre el interior y el exterior del recinto, k es la conductividad térmica de las paredes de éste y Δt es el intervalo de tiempo considerado. Para calentar el recinto utilizamos un calefactor. Cuando éste se encuentra conectado, aporta energía al recinto según  Q=W  t , donde ΔQ es el calor aportado, W es la potencia del calefactor y Δt es el intevalo de tiempo en que ha estado funcionando. Para regular la temperatura utilizamos un termostato simple que conecta el calefactor cuando la temperatura del recinto es menor que la deseada, y lo desconecta cuando es mayor. Por lo tanto, mientras el calefactor está desconectado, en un intervalo de tiempo Δt el recinto pierde

 Q=−k  T  t [2] en tanto que cuando el calefactor está conectado, gana

 Q=W  t−k  T  t [3] Deseamos mantener un recinto a una temperatura constante Tobjetivo = 22 ºC, mientras que el exterior se encuentra a Te = 5ºC. El recinto también se encuentra inicialmente a Ti = 5ºC. Para ello utilizamos un sistema de calefacción con una potencia W = 300 kcal/s. El recinto tiene una capacidad calorífica C = 2000 kcal/ºC, y sus paredes tienen una conductividad térmica k = 10 kcal/(sºC) Calcularemos la ganancia o pérdida de calor, ΔQ, en cada intervalos discretos de tiempo Δt usando [2] y [3], tras lo cual calcularemos la correspondiente variación de temperatura usando [1]. en función de la temperatura resultante, conectaremos o desconectaremos el calefactor, y repetiremos el ciclo. Representaremos gráficamente la evolución de la temperatura a lo largo del tiempo (1000 s en intervalos de 5). Obsérvese la estabilidad de la temperatura una vez alcanzada la temperatura objetivo. Ensáyese con otros valores de potencia, temperatura exterior, etc.

81. Termostato PID Existen sistemas de control con mejor comportamiento que el termostato simple, como es el PID (Proporcional Integral Derivativo). En lugar de conectar y desconectar el calefactor, se aplican valores graduales de potencia según lo cerca o lejos que nos encontremos del objetivo, considerando el “error” e = Tobjetivo - T: Término proporcional: Término integral: Término derivativo:

P=K p e (la potencia aplicada es proporcional al error)

I =K i ∑ e  t (la potencia aplicada es proporcional al error acumulado) D= K d

e t

(la potencia aplicada es proporcional a la variación del error)

Repetiremos el ejercicio sobre el termostato utilizando este sistema de control. Para cada intervalo de tiempo se calculará el error, e, su integral discreta, Σ e Δt, y su derivada discreta Δe/Δt. La potencia aplicada será

W =W max  PI D , es decir, W =W max  K p eK i ∑ e  tK d

e  t

donde Wmax es la potencia del calefactor. Cuando W sea menor que cero, aplicaremos 0, porque un calefactor no refrigera. Del mismo modo, cuando W sea mayor que la potencia máxima del calefactor, se aplicará la potencia máxima. Ensáyese en las mismas condiciones que el ejercicio sobre el termostato, utilizando los valores: Kp = 0,1

Ki = 0

Kd = 0

Control proporcional (P) ¿Dónde se estabiliza al temperatura?

Kp = 0,1

Ki = 0,001

Kd = 0

Control PI. ¿Qué ocurre con la temperatura antes de estabilizarse?

Kp = 0,1

Ki = 0,001

Kd = 10

Control PID. ¿Cómo es ahora el comportamiento?

Kp = 0,1

Ki = 0,001

Kd = 100

¿Qué efecto tiene un Kd tan grande?

¿Cuál es la potencia aplicada cuando la temperatura se estabiliza? Ensaya el comportamiento del sistema con otros valores de los tres parámetros PID.

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 23

Fundamentos de Informática, curso 2007-2008

Ingeniería Técnica Industrial (Química) – ESCET – URJC

82. Gravitación La fuerza de atracción gravitatoria entre dos cuerpos de masas m y m' es

F =G

m m' [1], donde d2

F es la fuerza en Newtons G = 6,67259 * 10-11 N m2 Kg-2

(constante de gravitación universal)

m y m' son las masas de los cuerpos en Kg d es la distancia entre los centros de masas de los cuerpos en m. Simularemos el movimiento de cinco cuerpos somentidos a la atracción gravitatoria. Dichos cuerpos se denominan Sol, Mercurio, Venus, Tierra y Marte, cuyas coordenadas y velocidad del día 1 de enero de 2000 a las 0h pueden ser obtenidas en http://www.astro.gla.ac.uk/honours/labs/solar_system/JPL%20coordinates/ Podemos encontrar sus masas y otros parámetros necesarios en http://ssd.jpl.nasa.gov/?constants Definiremos un vector de posición del conjunto de las partículas en cada dimensión: x = vector de posiciones en x y = vector de posiciones en y z = vector de posiciones en z También definiremos los vectores de velocidad en cada dimensión: vx = vector de velocidades en x vy = vector de velocidades en y vz = vector de velocidades en z Tendremos un vector de masas m. A partir de sus coordenadas y masas, calcularemos vectorialmente la fuerza que actúa sobre cada cuerpo. Para ello podemos aplicar la fórmula [1] en cada dimensión del espacio entre cada par de cuerpos. Seguidamente, sumaremos vectorialmente las fuerzas que actúan sobre cada cuerpo. Calcularemos la aceleración del cuerpo teniendo en cuenta que F = m a, y aplicaremos el método de Euler para estimar la nueva velocidad y posición de cada partícula en un intervalo de de tiempo Δt. Δv = a Δt

[variación de la velocidad]

Δp = v Δt

[variación de la posición]

Cada vez que se calcule una nueva posición, ésta se reflejará en una gráfica que mostrará los planetas orbitando en torno al sol.

José Luis Esteban

Ejercicios de Matlab – V1.169

Pág. 24