ejemplos de ciclos repetitivos del libro essential matlab

5
UNMSM-EAP INGENIERÍA QUÍMICA Computación Aplicada a la Ingeniería Prof. Heber Helfer 1 8.1.2 Procesos de Actualización Muchos problemas en ciencia e ingeniería involucran el modelamiento de un proceso donde la variable principal es repetidamente actualizada en un periodo de tiempo. Este es un ejemplo sobre tal proceso de actualización. Un lata de jugo de naranja a una temperatura de 25°C se coloca en un refrigerador, donde la temperatura F es 10°C. Queremos saber cómo cambia la temperatura del jugo de naranja en un periodo de tiempo. Una forma estándar de aproximarse a este tipo de problema es dividir el periodo de tiempo en un número de pequeños pasos, cada uno de longitud m. Si Ti es la temperatura en el inicio, con paso i, podemos usar el siguiente modelo para obtener Ti+1 a partir de Ti: (8.3) donde K es un parámetro constante que depende de la propiedades de aislamiento de la lata y las propiedades térmicas del jugo de naranja. Asuma que las unidades se escogen de modo tal que el tiempo se mida en minutos. El siguiente programa implementa este esquema. Para que la solución sea más general tome el tiempo inicial como a y el tiempo final como b. Si dt es muy pequeño sería inconveniente hacer que la presentación se haga en cada paso, de modo que el programa también le pregunta por el intervalo de salida opint. Éste es el tiempo (en minutos) entre las filas sucesivas de la salida. Chequea que este intervalo es un entero múltiplo de dt. Corra este programa con algunos valores de muestra, por ejemplo, dt = 0.2 minutos y opint = 5 minutos (estos son los valores usados para la salida de este programa). K = 0.05; F = 10; a = 0; % tiempo inicial b = 100; % tiempo final tiempo = a; % se inicializa el tiempo T = 25; % se inicializa la temperatura load train % se prepara para tocar el silbato dt = input( 'dt: ' ); opint = input( 'intervalo de salida (minutos): '); if opint/dt ~= fix(opint/dt) sound(y, Fs) % ¡suena el silbato! disp( '¡el intervalo de salida no es un múltiplo de dt!'); break end clc format bank disp( ' Tiempo Temperatura' ); disp( [tiempo T] ) % despliega los valores iniciales for tiempo = a+dt:dt:b T = T - K * dt * (T - F); if abs(rem(tiempo, opint)) < 1e-6 % ¡prácticamente cero! disp( [tiempo T] ) end end

Upload: brian-williams

Post on 29-Sep-2015

50 views

Category:

Documents


3 download

DESCRIPTION

Ejercicios de if, for, while

TRANSCRIPT

  • UNMSM-EAP INGENIERA QUMICA Computacin Aplicada a la Ingeniera

    Prof. Heber Helfer

    1

    8.1.2 Procesos de Actualizacin Muchos problemas en ciencia e ingeniera involucran el modelamiento de un proceso donde la variable principal es repetidamente actualizada en un periodo de tiempo. Este es un ejemplo sobre tal proceso de actualizacin.

    Un lata de jugo de naranja a una temperatura de 25C se coloca en un refrigerador, donde la temperatura F es 10C. Queremos saber cmo cambia la temperatura del jugo de naranja en un periodo de tiempo. Una forma estndar de aproximarse a este tipo de problema es dividir el periodo de tiempo en un nmero de pequeos pasos, cada uno de longitud m. Si Ti es la temperatura en el inicio, con paso i, podemos usar el siguiente modelo para obtener Ti+1 a partir de Ti:

    (8.3)

    donde K es un parmetro constante que depende de la propiedades de aislamiento de la lata y las propiedades trmicas del jugo de naranja. Asuma que las unidades se escogen de modo tal que el tiempo se mida en minutos.

    El siguiente programa implementa este esquema. Para que la solucin sea ms general tome el tiempo inicial como a y el tiempo final como b. Si dt es muy pequeo sera inconveniente hacer que la presentacin se haga en cada paso, de modo que el programa tambin le pregunta por el intervalo de salida opint. ste es el tiempo (en minutos) entre las filas sucesivas de la salida. Chequea que este intervalo es un entero mltiplo de dt. Corra este programa con algunos valores de muestra, por ejemplo, dt = 0.2 minutos y opint = 5 minutos (estos son los valores usados para la salida de este programa).

    K = 0.05; F = 10; a = 0; % tiempo inicial b = 100; % tiempo final tiempo = a; % se inicializa el tiempo T = 25; % se inicializa la temperatura load train % se prepara para tocar el silbato dt = input( 'dt: ' ); opint = input( 'intervalo de salida (minutos): '); if opint/dt ~= fix(opint/dt) sound(y, Fs) % suena el silbato! disp( 'el intervalo de salida no es un mltiplo de dt!'); break end clc format bank disp( ' Tiempo Temperatura' ); disp( [tiempo T] ) % despliega los valores iniciales for tiempo = a+dt:dt:b T = T - K * dt * (T - F); if abs(rem(tiempo, opint)) < 1e-6 % prcticamente cero! disp( [tiempo T] ) end end

  • UNMSM-EAP INGENIERA QUMICA Computacin Aplicada a la Ingeniera

    Prof. Heber Helfer

    2

    Salida: Tiempo Temperatura

    0 25.00 5.00 21.67 ...

    95.00 10.13 100.00 10.10 Nota: 1. La funcin rem es usada para desplegar los resultados cada opint minutos: cuando tiempo es un entero mltiplo de opint, su residuo, cuando es dividido por opint deber ser cero. Sin embargo, debido al error de redondeo, el residuo no siempre es exactamente cero. Por consiguiente, es mejor probar si el valor absoluto es menor que algun valor muy pequeo.

    2. Puesto que esta es, probablemente la forma ms obvia de escribir el programa, no podemos graficar fcilmente la temperatura contra el tiempo porque tiempo y T son escalares que son actualizados repetidamente. Para graficar, ambos deben ser vectores

    3. Note cmo se implementa el sonido (sound). Vea help audio por otros sonidos suministrados por MATLAB. 4. En el caso que usted quiera saber cmo coloqu los encabezados en el lugar correcto, les dir el secreto. Corra el programa sin encabezados pero con la salida numrica como la desea. Luego, simplemente pegue la sentencia disp con los encabezados en la ventana de comandos y edtela hasta que los encabezados queden en el lugar correcto. Pegue la versin final de la sentencia disp en el programa. 5. Note el uso de break para detener el programa prematuramente si el usuario escribe una entrada mala.

    Traducido del libro: ESSENTIAL MATLAB for Engineers and Scientists por Brian Hahn y Daniel T. Valentine Ed. Elsevier, 2007. Pgs. 206-208.

  • UNMSM-EAP INGENIERA QUMICA Computacin Aplicada a la Ingeniera

    Prof. Heber Helfer

    3

    clc clear all disp('Programa Adivina el Nmero Verdadero') disp('que es un valor entre 1 y 20') valor = round(rand()*19 + 1); rpta = 100; while rpta ~= valor rpta = input('Digite un nmero: '); if rpta == valor disp('Excelente! Adivinaste.') elseif rpta < valor disp('No. El valor es mayor.') else disp('No. El valor es menor.') end end

    while true clc clear all disp('Programa Adivina el Nmero Verdadero') disp('que es un valor entre 1 y 20') valor = round(rand()*19 + 1); rpta = 100; % Para poder entrar al ciclo while while rpta ~= valor rpta = input('Digite un nmero: '); if rpta == valor disp('Excelente! Adivinaste.') elseif rpta < valor disp('No. El valor es mayor.') else disp('No. El valor es menor.') end end salir = input('Desea terminar (si/no)? ','s'); if strcmpi(salir,'si')== 1 break else disp('Presione una tecla para continuar...') pause continue m end end

  • UNMSM-EAP INGENIERA QUMICA Computacin Aplicada a la Ingeniera

    Prof. Heber Helfer

    4

    while true % El ciclo repetitivo es infinito clc clear all disp('Estoy aburrido...') continuar = input('Desea continuar (si/no)? ','s'); if strcmpi(continuar,'no')== 1 disp('Terminamos el programa.') break elseif strcmpi(continuar,'si')== 1 disp('Continuamos el programa.') else disp('Responda si o no, por favor.') end disp('Presione una tecla...') pause continue end

    CRAPS

    El juego comienza con un lanzamiento denominado tiro de salida. Antes de realizarlo, el jugador que acta como tirador debe situar una apuesta en la lnea de pase o la de no pase. Estos dos lados se refieren directamente al resultado de cada ronda de lanzamiento (si se logra o no el objetivo). Cada ronda cuenta con dos fases: salida y punto. La salida se refiere al primer lanzamiento que se hace para dar inicio a la ronda y dependiendo del resultado de este lanzamiento es lo que seguir:

    1. Si el lanzamiento da como resultado 2, 3 o 12, esto se conoce como craps y todos los que apostaron sobre la lnea de pase perdern automticamente. Los que apostaron sobre la barra de no pase ganarn, a excepcin de si sale un nmero 12, ya que en ese caso las apuestas quedarn nulas.

    2. Si el lanzamiento da como resultado un 7 o un 11, eso es conocido como un natural y los que apostaron sobre la lnea de pase ganan (y por ende los de la barra de no pase pierden).

    3. Si el lanzamiento da como resultado 4,5,6,7,8 9 o 10, eso se conoce como punto y se debe realizar otro lanzamiento, con el fin de obtener el mismo nmero (en cualquier combinacin, no es necesario que sea la misma obtenida inicialmente). Si se logra repetir el nmero obtenido inicialmente antes de sacar un 7, entonces la ronda ser considerada como exitosa y los que hayan apostado sobre la lnea de pase ganarn (y los de la barra de no pase perdern). Si se obtiene un 7 antes de repetir el nmero, el resultado ser el opuesto.

  • UNMSM-EAP INGENIERA QUMICA Computacin Aplicada a la Ingeniera

    Prof. Heber Helfer

    5

    clc clear all disp('Programa: Juego de dados Crap') disp('Presiona cualquier tecla para lanzar los dados') pause dado1 = round(rand()*5+1); dado2 = round(rand()*5+1); s1 = dado1 + dado2; fprintf('Lanzaste los dados y obtuviste %d\n',s1) switch s1 case {7 11} fprintf('Sali %d Ganaste!!\n',s1) case {2 3 12} fprintf('Sali %d, lo siento, perdiste.\n',s1) case {4 5 6 8 9 10} s2 = 0; while true fprintf('Tu punto es %d lanza de nuevo.\n',s1) disp('Presiona una tecla para lanzar los dados de nuevo') pause dado3 = round(rand()*5+1); dado4 = round(rand()*5+1); s2 = dado3 + dado4; if s2 == 7 disp('Sali 7, perdiste, sorry.') pause break; elseif s2 == s1 fprintf('Sali %d Ganaste!!\n',s2) pause break; else fprintf('Sali %d\n',s2) end end end