03 Practica Programacion Matlab

03. PROGRAMACION CON MATLAB Amado Malca Villalobos PROGRAMACION CON MatLab Un programa en MatLab, es una secuencia de

Views 105 Downloads 0 File size 885KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

03. PROGRAMACION CON MATLAB

Amado Malca Villalobos

PROGRAMACION CON 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 relacional:

Descripción

Tecla rápida

Ejemplo




Mayor que

Alt 62

=

Mayor o igual que

Alt 62, alt 61

==

Igual a

Alt 61, alt 61

~=

Diferente de

Alt 126, alt 61

>> x+y> z+y>w ans = 1 >> 2*x+3*y> x-z+y>=w ans = 1 >> 5*x-z==18+w ans = 1 >> 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. Ejemplos: Ejecute los siguientes comandos, y analize el resultado: >> (4>9)+(6==8-2)+(8+5~=13)+(6> (6=8-2)+(7-7+8~=17)+(6>=56) >> (56==78-21)-(16-45~=6*7+9)-(8^2+5==72/6)+3*(6> [1 5 8 9 80]>[2 6 7 28 6] >> A=[1 2 4;5 6 7;9 8 4] >> A>=5 >> B=A>=5 >> C=[11 12 44;51 61 71;93 86 44] >> D=C+5 >> C=[21 -12 44;55 71 71;83 96 54] >> B==C, D~=B >> X=B==C, Y=D~=B, Z=C> A=[2 3 6 -8 0 5 ] >> abs(A) A=[-1 2 0; 0 -1 -3; 1 -1 0] >> B=abs(A) any(B) Y la sentencia any(any(abs(A)> any(any(B)) Así pues, la sentencia any(any(abs(A)> all(A) En efecto, la _unica columna de A con todos sus elementos distintos de cero es la segunda. Pero como ninguna columna de A tiene todos sus elementos menores que eps: >> all(abs(A)> A=[1 2;0 3]; B=[4 2;1 5]; >> A==B >> A~=B >> A>2 Para saber si dos matrices son iguales, se puede usar la expresión isequal(A,B) >> isequal(A,B) ans = 0 La expresión isequal(A,B) es equivalente a all(all(A==B)). Por otra parte, isequal es una de las muchas funciones lógicas que empiezan por is. He aqui una selección de ellas. Para obtener un listado completo escribe doc is tras el prompt de MATLAB

2

03. PROGRAMACION CON MATLAB

ischar isempty isequal isfinite isfloat isinf isinteger isnan isnumeric isprime isreal isvector

Amado Malca Villalobos

verdadero si la entrada es un vector de caracteres verdadero si la entrada es un vector vacio verdadero si los vectores son iguales detecta los elementos finitos de un vector verdadero si el vector es de elementos en coma flotante detecta los elementos infinitos de un vector verdadero si el vector es de números enteros detecta los elementos que son NaN en un vector verdadero si el vector es de números (no de caracteres) detecta los números primos en un vector verdadero si todos los números del vector son reales verdadero si se trata de un vector

Algunos ejemplos adicionales con la matriz A de más arriba >> A >> isfinite(A) >> isnumeric(A) >> isreal(A) >> isvector(A) OPERADORES LÓGICOS Nom Operador Descripción bre La conjunción & y |

o

~

no

any all

La disyunción inclusiva La negacion

Tecla rápida Alt 38 Alt

124

Alt 126

Ejemplo >> (6=3 & 7~=8-1) ans = 1 >> (4|-8)+(6&0)+(~(7>9)|(5==-8)) ans = 2 >> ~0+~5+~(-7) ans = 1

Verdad si cualquiera de los elementos de un vector es no cero Verdad si todos los elementos de un 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> A=[ 4 2 16; 12 4 3], B=[12 3 1; 10 -1 7]

3

03. PROGRAMACION CON MATLAB

or(a,b) .not(a) xor(a,b) all(A) any(A) find(A) find(A>d)

a Úb ~a aVb

Amado Malca Villalobos

La disyunción inclusiva

>> or(4>8,33~=9+7)

La negacion La disyunción exclusiva

>> not(4>8 | 33~=9+7) >> xor(4>8,33~=9+7)

Cuantificador universal Si todos son no nulos el valor es 1. Cuantificador particular Si algún elemento es no nulo el $A valor es 1 Busca los elementos no nulos, y los enumera, indicando el lugar donde se hallan Busca los elementos mayores que el valor d, e indica el lugar donde se encuentran.

"A

>> all([4 5 7 9]) >> all([4 5 7 9 0]) >> any([4 5 7 9 0]) >> any([0 0 0 0 0 0 0]) >> any([0 0 0 0 0 0 6]) >> find([7 6 0 -4;5 -1 3 >> find([7 6 0 -4;5 -1 3 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. d) Hallar la temperatura promedio 𝑣 =

2 ∑𝑛 𝑖=1(𝑥𝑖 −𝑥̅ ) 𝑓𝑖

𝑛

e) Hallar la varianza, y desviación estándar de los datos, con: 𝑣 =

2 ∑𝑛 𝑖=1(𝑥𝑖 −𝑥̅ ) 𝑓𝑖

𝑛

PROGRAMACION EN MatLab Para la estructura de programación en MATLAB se requiere conocer por lo menos los siguientes comandos: END : Determina hasta cual orden llega el efecto de if, for, y while. (Para ejemplos de su uso ver if, while y for) IF: Verifica si se cumple cierta condición, y de acuerdo a si se cumple o no realiza la acción que se desee. WHILE: Realiza una parte del programa mientras se cumpla alguna condición. FOR: Muy parecido al While, pero utiliza un contador, es útil si se quiere repetir una parte del programa un número determinado de veces. CLEAR: Borra todas las variables de la memoria. Es recomendable usarlo al principio de todos los programas. (simplemente escriba clear; al comienzo del programa) PLOT: Sirve para obtener resultados gráficos en 2D. DISP: Sirve para escribir texto de salida o vectores. de resultados. INPUT: Se utiliza para que el programa pida valores de variables mientras se ejecuta.

SENTENCIAS CONDICIONALES Estructura para una sola alternativa Sentencia Condicional: if – end La forma más simple de una bifurcación del tipo if . . . end es la siguiente if condición Sentencias end Aquí se ejecuta un solo conjunto de instrucciones

4

03. PROGRAMACION CON MATLAB

Esquema lógico

Amado Malca Villalobos

Estructura lógica Pr ograma ...... en MatLab IF exp. condicional

......üï ïï 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. Estructura para dos alternativas Sentencia Condicional: if – else - end En este caso la opción que se realiza en el caso que la sentencia sea verdadera es la misma, pero en el caso de que sea falsa se realiza otra instrucción. Y luego el programa continua.

Esquema lógico

Estructura lógica Pr ograma ...... en MatLab IF exp. condicional Bloque verdadero ELSE Bloque falso END Pr ograma ...... en MatLab

Ejemplo 05: Determinar si un numero entero positivo es par o impar 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 ï 3 SOLUCION: El volumen es igual V (h) = ïïí 4 æ3h ö 4000p ïï p çç - 47÷ ÷ ÷ ïïî 3 çè 4 ø 3 Ejemplo 07: Hallando el valor absoluto de un numero.

0 £ h £ 29 29 < h £ 45

ìï x 0 £ x x = ïí ïïî - x x < 0

Estructura con multiples alternativas SENTENCIA CONDICIONAL: IF – ELSEIF – ELSEIF - …. .ELSE - END Aquí la ventaja es que se pueden ejecutar tres o más grupos de instrucciones en forma disyuntiva, es decir en forma independiente. if condicion1 bloque1 elseif condicion2 bloque2 elseif condicion3 bloque3 else % opción por defecto, cuando no se cumplan las condiciones 1,2,3 bloque4 end Donde la opción por defecto else puede ser omitida: si no está presente no se hace nada en caso de que no se cumpla ninguna de las condiciones que se han chequeado. Esquema lógico Estructura Lógica Diagrama de flujo ......Pr ograma en MatLab

if Falso

Falso

Sentencia if

elseif

Verdadero Sentencia elseif

exp. condicional ......ü ïï Instrucciones ý ......ïïþ 02 MatLab

Grupo 1 de Instrucciones

Verdadero Grupo 3 de Instrucciones

exp. condicional ......ïü ïý Instrucciones ......ïïþ 01 MatLab

else

......ü ïï Instrucciones ý ......ïïþ 03 MatLab

Grupo 2 de Instrucciones

end end

......Pr ograma en MatLab

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

Ejemplo09: Graficar la función 𝑥 2 + 6𝑥 − 8, −15 ≤ 𝑥 < 0 𝑓𝑝𝑎𝑟𝑡𝑒𝑠(𝑥) = { 2𝑥 + 6, 0≤𝑥j; a(i,j)=-2*i+3*j+1, si i1, 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: BUCLES DEL TIPO WHILE - END Este tipo de bucle se usa cuando hay necesidad de un proceso iterativo, pero se desconoce cuantos pasos deben hacerse, generalmente está sujeto a condiciones que se hallan al ejecutar la solución del `problema. En algún caso será necesario del uso de algún comando que pare el programa en caso de que no se halle la condición pedida.

Estructura lógica

while exp resion _ condicional

....ü ïï Instrucciones ý ....ïïþ de MatLab end 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: ¥

ex =

å n= 0

xn x 2 x3 x 4 x5 = 1+ x + + + + +L n! 2! 3! 4! 5! 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

LOS COMANDOS BREAK Y CONTINUE El comando break se usa principalmente para terminar un posible bucle infinito; si esta dentro de un bucle, pero si esta en un programa normal, termina el programa. El comando “continue” lo que hace es terminar la iteración de un bucle y pasar a la siguiente iteración. PROBLEMAS PROPUESTOS 1.Calcule las siguientes expresiones a mano, sin utilizar MATLAB . Utilice luego MATLAB para comprobar que el resultado es correcto. a) b)

5  8 3 y = 7  3  1 6  2

c) y = (7  3)  1  (6 2) d)

y  2 x 4  5 - 7

20 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  y  a   b   2  c) 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 a) y  a  b  b

b) y  a  b 

b 2

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) b) c)

5&-2 8  216  5& 2  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). 7.Represente la siguiente función de dos formas distintas:

 4e x  2  f ( x)   x2 ( x  6,5)1/3 

6  x  2 2  x  2,5 2,5  x  6

a)

Escribiendo un fichero script que utilice bucles y sentencias condicionales.

b)

Cuando una función

f ( x) para utilizarla posteriormente en un fichero script.

ax 2  bx  c  0 . Llame al fichero raicescuad . Cuando el fichero se ejecute, éste debe pedir al usuario que introduzca los valores de las constantes a, b y c . Para calcular las raíces de la ecuación , el programa calculará el discriminante D : D=b 2  4ac Si D 0, el programa visualizará un mensaje del tipo: “La ecuación tiene dos raíces”, y los valores de las raíces se visualizarán en la 8.Escriba un programa script que calcule las raíces reales de una función cuadrática

línea siguiente. Si D =0, el programa visualizará un mensaje del tipo: “La ecuación tiene una raíz”, y el valor de la raíz se visualizará en la línea siguiente. Si D 0, el programa visualizará un mensaje del tipo: “La ecuación no tiene raíces reales”. Ejecute el fichero script en la Ventana de Comandos tres veces para calcular las soluciones de las siguientes ecuaciones: 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

 (1) n 0

n

1 (n  0,1, 2,..., m) 2n  1

Esta serie se denomina se denomina serie de Leibniz, y converge a posteriormente estos resultados con el valor exacto 12.

Sea el vector

m primeros términos de la serie:

 / 4.

 / 4 . Ejecute el programa para m  10 y m  500 . Compare

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

rand

de MATLAB para generar el vector inicial.

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 MATLAB para generar la matriz inicial.

16.

rand

de

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

3,00€

3,00 € + 0,50 € adicionales por cada libra o fracción de libra, a partir de las 2 libras de peso.

10,20 € + 0,60 € adicionales por cada libra o fracción de libra, a partir de las 10 libras de peso.

Nocturno

18 €

18 € + 6 € adicionales por cada libra o fracción de libra, a partir de las 10 libras de peso-

No se realizarán entregas para paquetes que pesen más de 10 libras.

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