Está en la página 1de 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 área base altura


2,5 1 3
base⋅altura 4,65 6,2 1,5
area =
2

B. Energía relativista e m
E=mc 2 1,8x105 2
5,58x105 6,2
donde la velocidad de la luz c = 300 000

C. Ecuación de segundo grado x a b c


1 1 0 -1
−b± b 2 −4 a c
x= 0,22 13,95 6,2 1,5
2a ? 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 5x4 −4x 32x 2 −9x15


E. ¿Y qué nombre pongo a ésta? 5x −4y 3x 2 −28
z= −
3x 2 6y4 123− y

José Luis Esteban 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

3
2 3
−3 −4 4
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

3
2 3
−3 −4 4
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:
9
Fahrenheit: F = C−32
5
Kelvin: K = C273,15
8
Reamur: R = 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
1
A= ∑ 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
N A −N T N C −N G
a= y c=
N A N T N C N G
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


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 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  .

La derivada del monomio ci x i es ic i xi−1 ,


n n −1 2
y la del polinomio cn x c n−1 x ...c 2 x c1 xc0
n −1 n −2 2
es ncn x  n−1 cn −1 x ...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 a11 a12 a13 x1 b1
a21 x1 a22 x 2 a 23 x3 =b2  a21 a 22 a 23 x2 = b2  AX =B
a31 x1 a32 x 2 a 33 x3 =b3 a31 a 32 a 33 x3 b3
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:

sin   x 2 y 2 
Representa la superficie 3D z= entre -10 y 10 para los valores x e y. Para ello deberás
 x 2 y 2
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
3s
medida como T=
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
 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
2
Como el volumen de un cilindro se calcula mediante V =  r h las derivadas parciales serán
∂V ∂V
= 2  hr y =  r2
∂r ∂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 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.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
V
diferencia de potencial (V) y la resistencia del mismo (R): I=
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.
2
Descartados los anteriores casos, es necesario calcular el discriminante b −4ac , el cual determina el
número de soluciones, y si son reales o complejas.

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 v 0 y ángulo α. Tendremos que
las componentes de la velocidad inicial son:
v 0x=v 0 cos  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
1
Posición x=v0x t 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 0y
v y =v0y− g t , se alcanzará la altura máxima cuando t= . Por lo tanto, la altura máxima es
g
v 20y v2
y max = = 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
v 20
x max =v 0x 2 t es decir, 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):
1 2
x B=v 0 cos  t 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
2
=1tan2 
cos 
resultando la ecuación de segundo grado en tan(α):

1 x2
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
2 a ,b=∑ yi ∑ Na 2b 2 ∑ xi2−2 a ∑ y i−2 b ∑ x i y i 2 a b ∑ x i
i =1 i=1 i=1 i=1 i =1 i=1

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 ∂2
=0 y =0
∂a ∂b
De donde se obtienen las soluciones para a y b:
N N N
N ∑ xi y i−∑ x i ∑ y i N N

b= i=1 i =1 i =1 ∑ y i−b ∑ x i
N
2
N
2 a= i=1 i =1
N ∑ x −∑ x i  i N
i =1 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.
a 1a n
En efecto, S= 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 n i
El programa solicita x y n, y calcula la suma de la serie
x
i!
hasta el término n, es decir ∑ 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 x i y de i! en cada iteración.

José Luis Esteban 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 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á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: S
M=
n
La varianza: Sc
V= −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,...
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
x
inicialmente la solución como si = 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,
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! Combinaciones de m elementos m!


Variaciones con repetición de m tomados de n en n: n!m−n !
elementos tomados de n en n: mn
Combinaciones con repetición de m mn−1!
Variaciones sin repetición de m m!
elementos tomados de n en n: n! m−1!
elementos tomados de n en n: 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é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 N
intervalo en un número N de subdivisiones: ∫ f  x  dx ≃ ∑ ei
a i =1

donde el área de cada elemento ei vale


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

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 Codones
Alanina 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 UGG
Histidina 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: 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,...
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 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 Pot
2 2
3 2
5 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)
... % Aquí se calcula el estadígrafo
r = ... % 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) % x es un valor real


r = ... % 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.
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
f  xi 
aproximación x i1=x i − . Se repite el proceso,
f '  xi 
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
de x i , f  x i  y f '  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: 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)
e
Término derivativo: D= K d (la potencia aplicada es proporcional a la variación del error)
t
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á
e
W =W max  PI D , es decir, W =W max  K p eK i ∑ e  tK d 
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
m m'
La fuerza de atracción gravitatoria entre dos cuerpos de masas m y m' es F =G [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

También podría gustarte