03 Practica Programacion Matlab
03 Practica Programacion Matlab
Un programa en MatLab, es una secuencia de instrucciones lógicamente ordenadas, que le indica al programa en forma
detallada todo lo que debe hacer. Si le indicamos algo que no es coherente matemáticamente, obviamente generara un
error.
En un programa por lo general hay que tomar algunas ‘decisiones’, que la asume el computador, para ello hay que darle la
orden adecuada. Así vamos a tener diferentes tipos de instrucciones:
Operadores relacionales
Operadores lógicos
Sentencias condicionales
Sentencias de iteración
Ficheros de función
Programa principal
Subprogramas
OPERADORES RELACIONALES
Estos son un conjunto de operadores básicos, con los cuales se construye cualquier expresión lógica, la cual arroja el valor
“1” si la expresión es verdadera, y genera el valor “0” si al expresión es falsa. Estas expresiones nos ayudan a tomar
decisiones.
Considere los siguientes valores de las variables:
>> x=4,y=5,z=8,w=-6
>>
Operador Descripción Tecla rápida Ejemplo
relacional:
Menor que Alt 60 >> x+y<8
< ans = 0
Mayor que Alt 62 >> z+y>w
> ans = 1
Menor o igual que Alt 60, alt 61 >> 2*x+3*y<=38+w
<= ans = 1
Mayor o igual que Alt 62, alt 61 >> x-z+y>=w
>= ans = 1
Igual a Alt 61, alt 61 >> 5*x-z==18+w
== ans = 1
Diferente de Alt 126, alt 61 >> x+y+z+w~=11
~= ans = 0
Notas:
01) El signo “=”, solo asigna un valor, a diferencia de el signo”==” que compara.
02) El resultado de la comparación será 1, cuando sea verdadero, y 0 cuando sea falso.
1
03. PROGRAMACION CON MATLAB Amado Malca Villalobos
Otro ejemplo, en el que vamos a comparar los elementos de una matriz con el numero más pequeño de las maquina: eps
= 2.2204e-16
>> A=[2 3 6 -8 0 5 ]
>> abs(A)<eps
En MATLAB los operadores relacionales pueden aplicarse a vectores y matrices, y eso hace que tengan un significado
especial. Por ejemplo, dada una matriz A la comparacion abs(A)<eps genera una matriz de 0's y 1's con el mismo
tamaño de A. El elemento (i; j) de dicha matriz es 1 si |Aij| < eps, siendo eps el epsilon de la maquina (=2.204e-16).
>> A=[-1 2 0; 0 -1 -3; 1 -1 0]
>> B=abs(A)<eps
Vemos en estos ejemplos que al igual que en otros lenguajes de programación, si una comparación se cumple
el resultado es 1 (true), mientras que si no se cumple es 0 (false). Recíprocamente, cualquier valor distinto de
cero es considerado como true y el cero equivale a false. Cuando los operadores relacionales de MATLAB se
aplican a dos matrices o vectores del mismo tamaño, la comparación se realiza elemento a elemento, y el
resultado es otra matriz de unos y ceros del mismo tamaño, que recoge el resultado de cada comparación
entre elementos. Por ejemplo:
2
03. PROGRAMACION CON MATLAB Amado Malca Villalobos
OPERADORES LÓGICOS
Nom Tecla Ejemplo
Operador Descripción
bre rápida
La conjunción Alt 38 >> (6<9 & 0==7-6)+~(5>=3 & 7~=8-1)
& y
ans = 1
La disyunción Alt 124 >> (4|-8)+(6&0)+(~(7>9)|(5==-8))
| o
inclusiva ans = 2
La negacion Alt 126 >> ~0+~5+~(-7)
~ no
ans = 1
Verdad si cualquiera de los
any
elementos de un vector es no cero
Verdad si todos los elementos de un
all
vector son no cero
Algunos ejemplos
>> x=[-1 1 1]; y=[ 1 2 -3];
>> x>0, y>0
>> x>0 & y>0
>> x>0 | y>0
>> xor(x>0,y>0)
>> any(x>0)
>> all(x>0)
Para terminar con los operadores lógicos estudiamos otro comando muy útil: find. Este comando devuelve los
indices (los lugares que ocupan) los elementos no nulos de un vector. Por ejemplo
>> x=[-3 1 0 -inf 0]
>> f=find(x)
Una primera aplicación es extraer de x los elementos no nulos:
>> x(f)
Podemos extraer los elementos finitos
> x(find(isfinite(x)))
o reemplazar las componentes negativas por cero:
>> x(find(x<0))=0
Cuando find se aplica a una matriz se hace mirandola como un vector; es decir al vector A(:) que se obtiene -
recordemos- poniendo las columnas de A una debajo de otra. Por ejemplo
>> A=[ 4 2 16; 12 4 3], B=[12 3 1; 10 -1 7]
3
03. PROGRAMACION CON MATLAB Amado Malca Villalobos
or(a,b) a Úb La disyunción inclusiva >> or(4>8,33~=9+7)
.not(a) ~a La negacion >> not(4>8 | 33~=9+7)
xor(a,b) aVb La disyunción exclusiva >> xor(4>8,33~=9+7)
Cuantificador universal >> all([4 5 7 9])
all(A) "A Si todos son no nulos el valor es 1. >> all([4 5 7 9 0])
Cuantificador particular >> any([4 5 7 9 0])
any(A) $A Si algún elemento es no nulo el >> any([0 0 0 0 0 0 0])
valor es 1 >> any([0 0 0 0 0 0 6])
Busca los elementos no nulos, y los enumera, >> find([7 6 0 -4;5 -1 3
find(A)
indicando el lugar donde se hallan
Busca los elementos mayores que el valor d, e >> find([7 6 0 -4;5 -1 3
find(A>d)
indica el lugar donde se encuentran. 0;0 2 9 0]>5)
Ejemplo de aplicación:
El vector:
T = [25 38 30 33 34 35 36 38 39 39 40 39 37 35 35 35 34 33 32 32 31 30 28 24]
Representa la temperatura en grados centígrados, por horas del dia 12 de Enero.
a) Indicar cuantas veces la temperatura fue mayor de 30 grados.
b) El número de horas que la temperatura estuvo entre 25 y 35 grados.
c) El número de horas que la temperatura no estuvo entre 20 y 30 grados.
∑𝑛 2
𝑖=1(𝑥𝑖 −𝑥̅ ) 𝑓𝑖
d) Hallar la temperatura promedio 𝑣 =
𝑛
∑𝑛 2
𝑖=1(𝑥𝑖 −𝑥̅ ) 𝑓𝑖
e) Hallar la varianza, y desviación estándar de los datos, con: 𝑣 =
𝑛
PROGRAMACION EN MatLab
SENTENCIAS CONDICIONALES
4
03. PROGRAMACION CON MATLAB Amado Malca Villalobos
......üï
ïï Instrucciones
......ý
ï MatLab
......ïïïþ
END
Pr ograma
......
en MatLab
Ejemplo01: Dados dos números a y b, supuestamente diferentes entre si. Indicar el mayor de ellos.
Ejercicio02: Crea una función que reciba cinco números naturales distintos entre sí y devuelva la media geométrica del
mayor y del menor. La media geométrica de a y b se define como √𝑎 ∙ 𝑏.
Ejemplo 03: Decidir si un numero entero positivo ingresado por la ventana de comandos es múltiplo de 3 o de 5.
Ejemplo04: Un trabajador tiene una remuneración básica como vendedor de 1 200 nuevos soles, pero si las ventas en el
mes son mayores a 50 000, tiene una bonificación adicional del 1% sobre la diferencia. Indicar el salario para diferentes
casos de ventas.
Ejemplo 06: Se necesita calcular el volumen de agua en un tanque, con la forma que se indica en el grafico
5
03. PROGRAMACION CON MATLAB Amado Malca Villalobos
Diametro 44 m
rh
16 m
h
29 m
Diametro 20 m
ìï 100p h 0 £ h £ 29
ï
SOLUCION: El volumen es igual V (h) = ïïí 4 æ3h 3
ö 4000p
ïï p çç - 47÷ ÷ - 29 < h £ 45
ïïî 3 çè 4 ÷
ø 3
ìï x 0 £ x
Ejemplo 07: Hallando el valor absoluto de un numero. x = ïí
ïïî - x x < 0
Ejemplo08: Determinar si un numero entero positivo es par o impar, con un enfoque: : if – elseif – else - end
6
03. PROGRAMACION CON MATLAB Amado Malca Villalobos
Es otra estructura para el control de flujo de un programa. Esta sentencia proporciona un mecanismo para escoger y
ejecutar un grupo de instrucciones de entre varios grupos posibles.
Estructura lógica
7
03. PROGRAMACION CON MATLAB Amado Malca Villalobos
d) Cuantas están entre 18 y 20 inclusive.
Ejemplo11: Escribir un programa para convertir una expresión de longitud, que puede estar en m, dm, cm, mm, dam, hm,
km, pulgada, pie, yarda. En otro número equivalente en otra unidad indicada por el usuario.
Ejemplo12: Elabore un programa que pida la edad de una persona, y visualice lo siguiente
Si 0 £ edad < 6 , mostrar: infante
Si 6 £ edad < 12 , mostrar: niño
Si 12 £ edad < 18 , mostrar: adolescente
Si 18 £ edad < 25 , mostrar: joven
Si 25 £ edad < 60 , mostrar: adulto
Si 60 £ edad , mostrar: anciano
BUCLES o ITERACIONES
Los bucles o iteraciones se usan para controlar el flujo de un programa. En un bucle, la ejecución de uno o varios
comandos se repite varias veces consecutivamente. Cada una de estas repeticiones se denomina paso o iteración.
En MatLab tenemos definido dos tipos de bucle:
Bucle while-end: El numero de iteraciones no se conoce al inicio del bucle, depende de que se cumpla o no alguna
condición.
En ambos casos se puede salir de estos bucles, antes de que acaben con el comando breack.
Ejemplo 15: Usando el bucle for - end, hallar la raíz cuadrada de los primeros 20 números, y presentarlos en una tabla de
20 por 2.
Ejemplo 16: En los meses de Enero a Diciembre del 2012, se registro un promedio de lluvia mensual :
286 253 254 305 274 203 165 190 161 228 224 280
Hallar el valor promedio en el año
El numero de meses en que la temperatura estuvo debajo de la media, y en qué meses se dio.
Ejemplo 17: Por ejemplo, para sumar los 25 primeros términos de la serie 1/n:
k
n
(- 1) k
Ejemplo18: Calcular la suma de términos de la siguiente serie: å
k= 1 2k
8
03. PROGRAMACION CON MATLAB Amado Malca Villalobos
k
(- 1) x 2 k + 1
¥
Ejemplo19: La función seno se puede aproximar usando la serie de Taylor. Como sigue: sen( x) = å
k = 1 (2k + 1)!
Ejemplo21: Crear una matriz de orden m por n, donde el elemento i j este dado por la expresión:
ai j = 3i - 4 j
Ejemplo22: Construya una matriz de orden mxn, donde se tenga que
a(i,j)=3*i+j, si i>j; a(i,j)=-2*i+3*j+1, si i<j ; a(i,i)=i^2, si i=j
Ejemplo23: Construya el triangulo de Pascal como una matriz de orden n por n. Donde el elemento a(1,j)=a(i,1)=1; a(i,j)=
a(i,j-1)+a(i-1,j) para todo i>1, j>1.
Ejemplo24: Hallar los términos de la sucesión de Fibonacci hasta el término n, teniendo en cuenta que: t(1)=1, t(2)=1,
t(i)=t(i-1)+t(i-2), en todo i=desde 3 hasta n
Solución:
Donde la expresión condicional puede ser una expresión vectorial o matricial. Las sentencias se siguen ejecutando mientras
haya elementos distintos de cero en condición; es decir, mientras haya algún o algunos elementos true. El bucle se termina
cuando todos los elementos de condición son false (es decir, cero).
Recomendaciones:
La expresión condicional del comando while debe incluir al menos una variable
Respecto a esta variable debe tener un valor asignado cuando se ejecute el comando while por primera vez
La o las variables de la expresión condicional deben cambiar entre la sentencia while y end, de otro modo se tendría un
bucle infinito
Para evitar un bucle infinito se puede usar el comando break
Un bucle infinito también se puede terminar con “Ctrl + C” o “Ctrl + break”
Ejemplo25: En el siguiente ejemplo se ejecutan una serie de operaciones sobre un cierto número n mientras este se
mantenga mayor que 1. Concretamente, si n es par se divide por 2 y si es impar se multiplica por 3 y se le suma 1:
¿Crees que este proceso tiene fin cualquiera que sea el valor de n? (Conjetura de Collatz, misterio de Siracusa, problema de
Kakutani, algoritmo de Hasse o problema de Ulam).
Ejemplo26: A una variable x se le incrementa su valor inicial en 7, mientras que esta sea menor de 200.
Ejemplo27: Elaborar un programa que divida en tres partes un intervalo, y tome la parte intermedia hasta que la longitud
sea menor que 0.001
9
03. PROGRAMACION CON MATLAB Amado Malca Villalobos
Ejemplo28: La función exponencial al ser expresada como una serie de Taylor, queda como sigue:
¥
xn x 2 x3 x 4 x5
ex = å
n= 0 n!
= 1+ x + + + +
2! 3! 4! 5!
+L
x
Hallar el valor de e , con los sumandos necesarios hasta que el ultimo sumando sea menor que 0.000001. Además la suma
no debe pasar de 30 términos, si fuese el caso hay que indicar que se necesitan más sumandos.
Hallar con este programa: e 2 , e- 4 , e10 y e 20
PROBLEMAS PROPUESTOS
1.Calcule las siguientes expresiones a mano, sin utilizar MATLAB . Utilice luego MATLAB para comprobar que el resultado es correcto.
a) 5 8 3
b) y = 7 3 1 6 2
c) y = (7 3) 1 (6 2)
20
d) y 2 x 4 5 - 7
4
2.Sean a = 10 y b = 6. Calcule las siguientes expresiones a mano, sin utilizar MATLAB. Utilice luego MATLAB para comprobar que
el resultado es correcto.
b
a) y a b b
b
b) y a b y a b
c) 2 2
3.Sean v 4 2 1 5 0 1 3 8 2 y w 0 2 1 -1 0 -2 4 3 2 . Calcule las siguientes expresiones a mano sin utilizar
MATLAB. Utilice luego MATLAB para comprobar que el resultado es correcto.
a) v w
b) w v
4.A partir de los vectores v y w del ejercicio anterior, utilice operadores relacionados para crear un vector compuesto por los
elementos de w que sean mayores que los elementos de v
5.Calcule las siguientes expresiones a mano, sin utilizar MATLAB .Utilice luego MATLAB para comprobar que le resultado es correcto
a) 5&-2
b) 8 216 5& 2
c) 4&0 8 410
6.La temperatura máxima diaria (en °F) en Nueva York y Anchorage, Alaska, durante el mes de enero de 2001 vienen dadas en los
siguientes vectores (datos tomados del Ministerio Nacional de Meteorología y Oceanografía de Estados Unidos).
TNY = 31 26 30 33 33 39 41 41 34 33 45 42 36 39 TANC = 37 24 28 25 21 28 46 37 36 20 24 31 34 40
37 45 43 36 41 37 32 32 35 42 38 33 40 37 36 51 50 43 36 34 41 42 35 38 36 35 33 42 42 37 26 20 25 31
Escriba un programa script que calcule:
a) La temperatura media en ese mes para cada ciudad.
b) El número de días que estuvo la temperatura de cada ciudad por debajo de la media.
c)El número de días, y a qué días del mes corresponden, en los cuales la temperatura de Anchorage fue mayor que la temperatura de
Nueva York.
d) El número de días, y a qué días del mes corresponden, en los cuales la temperatura fue igual en ambas ciudades.
10
03. PROGRAMACION CON MATLAB Amado Malca Villalobos
e) El número de días, y a qué días del mes corresponden, en los cuales la temperatura de ambas ciudades se mantuvo por
encima de 32°F (sin helar).
a) 2 x2 8x 3 0 b) 15 x 2 10 x 5 0 c) 18 x 2 12 x 2 0
9.Utilice bucles para crear una matriz A de dimensión 4 x 7, en la cual el valor de cada elemento sea la suma de sus índices (el número
de la fila y el número de la columna de cada elemento). Por ejemplo, el valor del elemento A (2,5) será 7.
10. Utilice bucles y sentencias condicionales para crear una matriz de dimensión 5 x 8, en la cual el valor de cada elemento sea
igual a la raíz cuadrada de la suma de los índices de cada elemento, siempre que el elemento no se encuentre en una columna o fila
par. El valor de un elemento que éste en una fila o columna par será igual a la suma del cuadrado de los índices. (Los índices de un
elemento de una matriz son el número de fila y el número de columna que le corresponden.)
11. Escriba un programa (utilizando un bucle) que calcule la suma de los m primeros términos de la serie:
m
1
(1)
n 0
n
2n 1
(n 0,1, 2,..., m)
Esta serie se denomina se denomina serie de Leibniz, y converge a / 4 . Ejecute el programa para m 10 y m 500 . Compare
posteriormente estos resultados con el valor exacto / 4.
12. Sea el vector x 15 -6 0 8 -2 5 4 -10 0,5 3 . Escriba un programa que utilice sentencias condicionales y bucles
para calcular la suma de los elementos positivos del vector x .
13. Escriba un programa script que encuentre el menor número entero impar que sea divisible por 3, y cuyo cubo sea mayor que
4000. Utilice un bucle que comience en 1 y se detenga cuando encuentre el número que cumpla las condiciones anteriores.
Finalmente el programa visualizará el mensaje: “El número pedido es: ” , y visualizará seguidamente el número calculado.
14. Escriba una función que ordene los elementos de un vector de cualquier longitud, de mayor a menor. Utilice la siguiente línea
de definición de función: y = ordenar (x) . La entrada de la función será un vector x de cualquier longitud, y la salida y será un
vector que contendrá los elementos de x en orden descendente. No se puede utilizar la función predefinida de MATLAB sort para
este ejercicio. Cree su propia función y pruébela con un vector de 14 elementos (enteros) generados aleatoriamente y distribuidos
entre -30 y 30. Utilice la función rand de MATLAB para generar el vector inicial.
15. Escriba una función que ordene los elementos de una matriz. Utilice la siguiente línea de definición de función:
B = ordenarmatriz (A) , donde A será una matriz de cualquier tamaño, y B será otra matriz del mismo tamaño con los
elementos de A ordenados de forma ascendente, fila por fila. De esta forma, los elementos B (1,1) y B ( m, n ) serán,
11
03. PROGRAMACION CON MATLAB Amado Malca Villalobos
respectivamente, los elementos menor y mayor de la matriz ordenada. Pruebe posteriormente está función en una matriz de
dimensión 4 x 7, con los números enteros generados aleatoriamente y distribuidos entre -30 y 30. Utilice la función rand de
MATLAB para generar la matriz inicial.
16. Escriba un programa (fichero script) que calcule el coste de enviar un paquete en función de la siguiente tabla de precios:
Tipo de Peso Peso (2 – 10 libras) Peso (10 – 50 libras)
servicio (0 – 2
libras)
Tierra 1,50 € 1,50 € + 0,50 € adicionales por 5,50 € + 0,30 € adicionales por
cada libra o fracción de libra, cada libra o fracción de libra,
a partir de las 2 libras de a partir de las 10 libras de
peso. peso.
El programa debe pedir al usuario que introduzca el peso y el tipo de servicio. Seguidamente, el programa visualizará el coste del
servicio. Si se introduce un paquete que pese más de 50 libras para un servicio de aire o tierra, el programa visualizará un mensaje
del tipo: “No se realiza reparto por aire o tierra para paquetes con peso superior a las 50 libras”. Si se introduce el peso de un paquete
que supera las 10 libras de peso para un servicio nocturno, el programa visualizará un mensaje del tipo: “No se realizan entregas
nocturnas para paquetes que pesen más de 10 libras”, Ejecute el programa e introduzca los valores 0,5 , 6,3 , 20 y 50,4 libras para
servicios de tierra y aire, así como 2, 8 , 1 y 13 libras para el servicio de reparto nocturno.
17. Sea el vector x 1: 50 . Escriba un programa en un fichero script que borre del vector x aquellos elementos que son
divisibles por 3, 4 ó 5. Al final el programa debe mostrar el vector resultante.
18. La velocidad en función del tiempo, de una partícula que se mueve a lo largo de una línea recta, se representa en el gráfico
adjunto y viene dada por las siguientes ecuaciones:
1, 4t 0 t 10 s
14 5sen( t 10 ) 10 t 25 s
10
v( x)
9 25 t 35 s
9
9 t 35 35 t 40 s
5
Escriba dos funciones MATLAB: una de ellas debe calcular la velocidad de la partícula en un instante t (utilice la siguiente definición de
función v = velocidad (t) , y la otra función deberá calcular la aceleración de la partícula también en el instante t (utilice para
ello la siguiente definición de función: a = aceleración (t)) . Escriba posteriormente un programa, en un fichero script, que
represente las gráficas de la velocidad y la aceleración, en función del tiempo, de una partícula en movimiento (las dos gráficas deben
aparecer en la misma ventana gráfica). Para ello, dentro del fichero script, cree primero un vector t , para 0 t 40 segundos, y
después utilice las funciones velocidad y aceleración para crear los vectores v y a , que se utilizarán para generar la
representación gráfica.
12