Fi0708 ejercicios

24
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 área base altura 2,5 1 3 4,65 6,2 1,5 B. Energía relativista E=mc 2 donde la velocidad de la luz c = 300 000 e m 1,8x10 5 2 5,58x10 5 6,2 C. Ecuación de segundo grado x = b ± b 2 4 ac 2 a x a b c 1 1 0 -1 0,22 13,95 6,2 1,5 ? 1 -3 2 ? 1 0 -1 ? 1 -2 1 ? 1 -10 25 ? 1 1 1 ? 1 0 0 ? 2 1 2 D. Polinomio y =x 5 5x 4 4x 3 2x 2 9x 15 E. ¿Y qué nombre pongo a ésta? z = 5x 4y 3x 2 6y 4 3x 2 28 123 y José Luis Esteban Ejercicios de Matlab – V1.169 Pág. 1

Transcript of Fi0708 ejercicios

Page 1: Fi0708 ejercicios

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é?

totaltotal acumuladoresultado-1resultado_1resultado 1ResultadoresultaDo1resultadoel_valor_total_de_la_suma_de_los_operandos_esel_valor_total_de_la_suma_esel_valor_total_de la_suma_esresul*1int8doubleinteger1válido

2. ExpresionesEscribe 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⋅altura2

área base altura2,5 1 34,65 6,2 1,5

B. Energía relativista

E=mc2

donde la velocidad de la luz c = 300 000

e m1,8x105 25,58x105 6,2

C. Ecuación de segundo grado

x=−b±b2−4 ac2a

x a b c1 1 0 -10,22 13,95 6,2 1,5? 1 -3 2? 1 0 -1? 1 -2 1? 1 -10 25? 1 1 1? 1 0 0? 2 1 2

D. Polinomio y=x55x4−4x32x2−9x15

E. ¿Y qué nombre pongo a ésta? z= 5x−4y3x26y4−

3x2−28123− y

José Luis Esteban Ejercicios de Matlab – V1.169 Pág. 1

Page 2: Fi0708 ejercicios

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

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

1 2 3−3 −4 43 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 multidimensionalesEn 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. DistanciaDefine 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

Page 3: Fi0708 ejercicios

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

6. DiferenciasCrea 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

Di=V i1−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 MatlabA) 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 43 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 temperaturasLa relación de diversas escalas de temperatura con la escala Celsius (C) es la siguiente:

Fahrenheit: F =95C−32

Kelvin: K = C273,15

Reamur: R =810

C

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.15000.5000 32.9000 0.4000 273.65001.0000 33.8000 0.8000 274.15001.5000 34.7000 1.2000 274.65002.0000 35.6000 1.6000 275.1500

... ... ... ...

José Luis Esteban Ejercicios de Matlab – V1.169 Pág. 3

Page 4: Fi0708 ejercicios

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 , x2, y2 y calcula el vector de coeficientes (a, b, c) de la ecuación general de la recta axb yc=0 que los une. El cálculo de los coeficientes se realiza mediante las expresiones: a=y2− y1 b=x1−x2 c=y1 x2− y2 x1

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

11. FactorialEscribe una expresión que calcule el factorial de n.

12. Detección de palíndromosUna 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. DNILa 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 22Letra 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:

A=12∑i=1

n

x i y i−1−x i−1 yi

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=Pn

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. ChargaffLa 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−NT

N ANT y c=

N C−NG

N CNG

donde 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

Page 5: Fi0708 ejercicios

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

16. Derivación de polinomios

Es posible representar un polinomio cn xncn−1 x

n−1...c2x2c1 xc0 mediante un vector que

contiene los coeficientes de éste, de mayor a menor orden: cn , cn−1 , ... , c2 , c1 , c0 .

La derivada del monomio ci xi es ici x

i−1 ,

y la del polinomio cn xncn−1 x

n−1...c2 x2c1 xc0

es ncn xn−1n−1 cn−1 x

n−2...3 c3 x22c2 xc1 ,

o en forma de vector de coeficientes ncn , 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 linealesUn sistema de ecuaciones lineales puede representarse mediante una expresión matricial:

a11 x1a12 x2a13 x3=b1

a21 x1a22 x2a23 x3=b2

a31 x1a32 x2a33 x3=b3

a11 a12 a13

a21 a22 a23

a31 a32 a33x1

x2

x3= b1

b2

b3 AX=B

Multiplicando la inversa de A por la izquierda: A−1 AX=A−1B resulta X=A−1B , 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

Page 6: Fi0708 ejercicios

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 cosenoRepresenta 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 x2 y2

x2 y2entre -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 brownianoEl 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 erroresDada una variable T de la que se obtienen n medidas experimentales, se define la estimación del error de la

medida como T= 3sn

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 primerosEscribe 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

Page 7: Fi0708 ejercicios

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∣ qi , es decir

z=∣ ∂ z∂q1∣ q1∣ ∂ z∂q2∣ q2...∣ ∂ z∂qn∣ qn

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∂r ∣ r∣∂V∂h ∣ h

Como el volumen de un cilindro se calcula mediante V = r2h las derivadas parciales serán ∂V∂r

= 2 hr y ∂V∂h

= r2

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. DistanciaTenemos un fichero llamado PUNTOS.DAT con la siguiente estructura:

10 3 2.1 4 5 1.7 5 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.963.701.30Distancia 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 cromatogramasLa 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

Page 8: Fi0708 ejercicios

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

Page 9: Fi0708 ejercicios

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 monedasDisponiendo 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 tiempoPartiendo 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. FrasesEl 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. ComparacionesEscribe 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 OhmLa 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=VR

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 2Se 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 b2−4ac , el cual determina el número de soluciones, y si son reales o complejas.

32. Conversor de temperatura. Versión 2El 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 origenEl programa presenta la temperatura en la escala de destino y termina.

José Luis Esteban Ejercicios de Matlab – V1.169 Pág. 9

Page 10: Fi0708 ejercicios

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

33. Tiro parabólicoConstruir 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 v0 y ángulo α. Tendremos que las componentes de la velocidad inicial son:

v0x=v0 cos v0y=v0siny 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=v0x v y=v0y−g t

Posición x=v0x t y=v0y t−12g t2

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=v0y

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

ymax =v0y

2

2 g=

v02

2 gsin2

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

xmax=v0x 2 t es decir, alcance = xmax =v0

2

gsin 2

34. Calendario gregorianoEl 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éditoUn 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

Page 11: Fi0708 ejercicios

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

36. Tiro al blancoTenemos 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í:

v0x=v0cos v0y=v0 sinDado 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=v0 cos t yB= y0v0 sint 12−g t 2

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

1cos2

=1tan2

resultando la ecuación de segundo grado en tan(α):

yB= y0x B tan12−g

xB2

v02 1tan 2

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,8los 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

Page 12: Fi0708 ejercicios

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

37. Ajuste por mínimos cuadradosEl 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 supuestaSi 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:

2=∑i=1

N

y i− f x i2

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:

2a ,b=∑i=1

N

y i−ab xi2

Desarrollando el cuadrado se obtiene:

2a ,b=∑i=1

N

yi∑i=1

N

Na2b2∑i=1

N

xi2−2a∑

i=1

N

y i−2b∑i=1

N

x i y i2a b∑i=1

N

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

∂a=0 y ∂2

∂b=0

De donde se obtienen las soluciones para a y b:

b=N∑

i=1

N

xi y i−∑i=1

N

x i∑i=1

N

y i

N∑i=1

N

xi2−∑

i=1

N

x i2

a=

∑i=1

N

y i−b∑i=1

N

x i

N

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

Page 13: Fi0708 ejercicios

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. CuadradosHacer 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 menorRealizar un script que pida n números e imprima el número mayor y el número menor.

40. VocalesEscribe 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ánguloEscribir 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:

OOOO

OOOOOOOOOOOO

José Luis Esteban Ejercicios de Matlab – V1.169 Pág. 13

Page 14: Fi0708 ejercicios

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

42. RomboEscribir un script que amplíe el programa anterior para dibujar un rombo:

OOOO

OOOOOOOOOOOO

OOOOOOOO

O

43. Más sumatorioEscribe 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=a1an

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

expresión para comprobar el resultado del programa.

44. FactorialEscribe 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 cuadradoEscribe 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 vocalRealizar un script que solicite al usuario una cadena, en la cual busca y escribe la primera vocal que aparezca.

47. Más monedasDisponiendo 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 3Igual 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

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

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

i=0

n x i

i !¿Hasta qué valor de n es factible hacer el cálculo?

Pista para optimizar el cálculo: evita realizar el cálculo de x i y de i! en cada iteración.

José Luis Esteban Ejercicios de Matlab – V1.169 Pág. 14

Page 15: Fi0708 ejercicios

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: exponencialDado 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 e x. Utilícese la función de

biblioteca exp para comparar su resultado con el de la suma de la serie.

52. Estadígrafos básicosEl 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:S=∑

i=1

n

x i

La suma de los cuadrados:Sc=∑

i=1

n

xi2

La media:M=

Sn

La varianza:V=

Sc

n−M 2

La desviación típica: s=VEl mayor de los datos max x ii=1...n

El menor de los datos min x ii=1...n

53. Estadígrafos flotantesComo 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óstenesEste 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

Page 16: Fi0708 ejercicios

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

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

Es decir, f 1=1 , 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

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

inicialmente la solución como si=x2

lo cual sólo es cierto en el caso de x = 4. Seguidamente calculamos

una nueva aproximación si1=si−si

2−x2 si

. Si la diferencia en valor absoluto entre las dos aproximaciones

es inferior a un cierto umbral e , ∣si1−s i∣e , damos por buena la última aproximación. Si no, 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 palabrasEl 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íneasIgual 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. EspaciosEl 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 subcadenasDado 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. SensoresEn 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

Page 17: Fi0708 ejercicios

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

62. Cálculo de combinaciones, permutaciones y variacionesEl 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! Combinaciones de m elementos tomados de n en n:

m!n!m−n !Variaciones con repetición de m

elementos tomados de n en n: mn

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

mn−1!n!m−1!Variaciones sin repetición de m

elementos tomados de n en n:m!n!

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éricaEl 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

intervalo en un número N de subdivisiones: ∫a

b

f x dx ≃ ∑i=1

N

ei

donde el área de cada elemento ei vale

e i = x i1−x i⋅f xi f xi1

2= ancho⋅

f xi f xiancho2

siendo ancho =b−aN

= x i1−x i

x a b x x+ancho

f(x)

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

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:

∫a

b x sen xxe x dx

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

Page 18: Fi0708 ejercicios

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

64. Traducción del código genéticoDada 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 CodonesAlanina Ala A GC(A,C,G,U) Leucina Leu L CU(A,C,G,U) o UU(A,G)Arginina Arg R CG(A,C,G,U) o AG(A,G) Lisina Lys K AA(A,G)Asparragina Asn N AA(C,U) Metionina Met M AUG (inicio de la síntesis)Aspartato Asp D GA(C,U) Fenilalanina Phe F UU(C,U)Cisteína Cys C UG(C,U) Prolina Pro P CC(A,C,G,U)Glutamato Glu E GA(A,G) Serina Ser S UC(A,C,G,U) o AG(C,U)Glutamina Gln Q CA(A,G) Treonina Thr T AC(A,C,G,U)Glicina Gly G GG(A,C,G,U) Triptófano Trp W UGGHistidina His H CA(C,U) Tirosina Tyr Y UA(C,U)Isoleucina Ile I AU(A,C,U) Valina Val V GU(A,C,G,U)Terminación de la síntesis UA(A,G) o UGA

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: UGUAAGAGGUAUGCACUCAAAAGACUGACACCUGcodifica el polipéptido: Met-His-Ser-Lys-Asp

Etapa 5 – Funciones

65. PotenciaSuponga 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 cifrasRealizar 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 FibonacciLa sucesión de Fibonacci es la siguiente: 1, 1, 2, 3, 5, 8, 13, 21, 34,...

Es decir, f 1=1 , 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

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

Realiza una implementación iterativa y otra recursiva.

José Luis Esteban Ejercicios de Matlab – V1.169 Pág. 18

Page 19: Fi0708 ejercicios

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

68. Más derivación de polinomiosUtilizando 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 primosEscribe 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ónElabora 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 Pot2 23 25 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 perfectosUn 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+6Se 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 combinatoriaElaboraremos cinco funciones, una por cada uno de los cálculos del ejercicio sobre Cálculo decombinaciones, 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

Page 20: Fi0708 ejercicios

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

73. Más estadígrafosElaboraremos siete funciones, una por cada estadígrafo de los utilizados en el ejercicio sobre Estadígrafosbá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)... % Aquí se calcula el estadígrafor = ... % 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 carbonoRealice 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 elementosSe 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 molecularSe 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órmulaNOTA: 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ónSegú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

Page 21: Fi0708 ejercicios

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) % x es un valor realr = ... % 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 NewtonEl método de Newton para resolver ecuaciones se basa en el conocimiento de la función y de su derivada.

Partiendo de una aproximación 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

aproximación x i1=xi−f xif ' x i

. Se repite el proceso,

refinando iterativamente la solución hasta que la diferencia entre dos valores sucesivos en el cálculo ∣x i1− 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 i1 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 de x i , f x i y f ' x i .

José Luis Esteban Ejercicios de Matlab – V1.169 Pág. 21

Page 22: Fi0708 ejercicios

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

77. Ordenación – Método de la burbujaEn 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ónEste 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ónEste 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. TermostatoLa 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

Page 23: Fi0708 ejercicios

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=−kT 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=−kT t [2]

en tanto que cuando el calefactor está conectado, gana

Q=W t−kT 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 PIDExisten 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: P=K p e (la potencia aplicada es proporcional al error)

Término integral: I=K i∑ e t (la potencia aplicada es proporcional al error acumulado)

Término derivativo: D=Kde 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=Wmax PID , es decir, W=Wmax K p eK i∑ e tK de 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

Page 24: Fi0708 ejercicios

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 mm'd 2 [1], donde

F es la fuerza en NewtonsG = 6,67259 * 10-11 N m2 Kg-2 (constante de gravitación universal)m y m' son las masas de los cuerpos en Kgd 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/?constantsDefiniremos un vector de posición del conjunto de las partículas en cada dimensión:x = vector de posiciones en xy = vector de posiciones en yz = vector de posiciones en zTambién definiremos los vectores de velocidad en cada dimensión:vx = vector de velocidades en xvy = vector de velocidades en yvz = vector de velocidades en zTendremos 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