07 programacion matlab

32
07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos 1 PROGRAMACION CON MatLab Un programa en MatLab, es una secuencia de instrucciones lógicamente ordenadas, que le indica al programa en forma detallada lo que debe hacer. 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 Operador relacional: Descripción Tecla rápida < Menor que Alt 60 > Mayor que Alt 62 <= Menor o igual que Alt 60, alt 61 >= Mayor o igual que Alt 62, alt 61 == Igual a Alt 61, alt 61 ~= Diferente de Alt 126, alt 61 Notas: 01) El signo “=”, solo asigna un valor, pero no compara. 02) El resultado de la comparación será 1, cuando sea verdadero, y 0 cuando sea falso. >> (4>9)+(6==8-2)+(8+5~=13)+(6<=16) ans = 2 >> (4>9)+(6==8-2)+(8+5~=14)+(6<=16) ans = 3

Upload: davicho-joaquin-bernal-malca

Post on 11-Aug-2015

94 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

1

PROGRAMACION CON MatLab

Un programa en MatLab, es una secuencia de instrucciones

lógicamente ordenadas, que le indica al programa en forma detallada

lo que debe hacer.

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

Operador

relacional:

Descripción Tecla rápida

< Menor que Alt 60

> Mayor que Alt 62

<= Menor o igual que Alt 60, alt 61

>= Mayor o igual que Alt 62, alt 61

== Igual a Alt 61, alt 61

~= Diferente de Alt 126, alt 61

Notas:

01) El signo “=”, solo asigna un valor, pero no compara.

02) El resultado de la comparación será 1, cuando sea verdadero, y 0

cuando sea falso.

>> (4>9)+(6==8-2)+(8+5~=13)+(6<=16)

ans = 2

>> (4>9)+(6==8-2)+(8+5~=14)+(6<=16)

ans = 3

Page 2: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

2

>> >> (4>9)+(6==8-2)+(8+5~=13)+(6<=16)

ans = 2

>> [1 5 8 9 80]>[2 6 7 28 6]

ans = 0 0 1 0 1

>> A=[1 2 4;5 6 7;9 8 4]

A = 1 2 4

5 6 7

9 8 4

>> A>=2

ans = 0 1 1

1 1 1

1 1 1

>> B=A>=5

B = 0 0 0

1 1 1

1 1 0

>> C=[11 12 44;51 61 71;93 86 44]

C = 11 12 44

51 61 71

93 86 44

>> D=C+5

D = 16 17 49

56 66 76

98 91 49

>> C=[21 -12 44;55 71 71;83 96 54]

C = 21 -12 44

55 71 71

83 96 54

>> B==C, D~=B

ans = 0 0 0

0 0 0

0 0 0

ans = 1 1 1

1 1 1

1 1 1

>> X=B==C, Y=D~=B, Z=C<=D

X = 0 0 0

0 0 0

0 0 0

Y = 1 1 1

1 1 1

Page 3: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

3

1 1 1

Z = 0 1 1

1 0 1

1 0 0

OPERADORES LÓGICOS

Operador

Lógico Nombre Descripción

Tecla rápida

& y La conjunción Alt 38

| o La disyunción

inclusiva

Alt 124

~ no La negacion Alt 126

>> 4|-8, 6&0, ~7

ans = 1

ans = 0

ans = 0

>> (4|-8)+(6&0)+(~7)

ans = 1

>> (4>8)|(5==-8)+(6<7)&(7>=0)+(~7)

ans = 1

>> ((4>8)|(5==-8))+((6<7)&(7>=0))+(~7)

ans = 1

>> ((4>8)|(5==-8))+((6<7)&(7>=0))+(~(5>-7))

ans = 1

>> ((4>8)|(5==-8))+((6<7)&(7>=0))+(~(5>7))

ans = 2

>>

FUNCIONES LÓGICAS PREDEFINIDAS

Función Lógica Equivalencia Descripción

and(a,b) a b La conjunción

or(a,b) a b La disyunción

inclusiva

.not(a) ~ a La negacion

xor(a,b) a b La disyunción

exclusiva

all(A) A Cuantificador

universal

Page 4: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

4

any(A) A Cuantificador

particular

find(A) Busca los elementos no nulos

find(A>d) Busca los elementos mayores que

el valor d

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 numero de horas que la temperatura estuvo entre 25 y 35

grados.

c) El numero de horas que la temperatura no estuvo entre 20 y 30

grados.

Solución

a) Indicar cuantas veces la temperatura fue mayor de 30 grados.

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

T = Columns 1 through 14

25 38 30 33 34 35 36 38 39 39 40 39 37 35

Columns 15 through 24

35 35 34 33 32 32 31 30 28 24

>> T>30

ans = Columns 1 through 14

0 1 0 1 1 1 1 1 1 1 1 1 1 1

Columns 15 through 24

1 1 1 1 1 1 1 0 0 0

>> sum(T>30)

ans = 19

>> find(T>30)

ans = Columns 1 through 14

2 4 5 6 7 8 9 10 11 12 13 14 15 16

Columns 15 through 19

17 18 19 20 21

>>

Page 5: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

5

Rpta: 30 veces, en las horas: 2 4 5 6 7 8 9 10 11

12 13 14 15 16 17 18 19 20 21

b) El número de horas que la temperatura estuvo entre 25 y 35

grados.

>> T>25 & T<35

ans = Columns 1 through 14

0 0 1 1 1 0 0 0 0 0 0 0 0 0

Columns 15 through 24

0 0 1 1 1 1 1 1 1 0

>> sum(T>25 & T<35)

ans = 10

>> find(T>25 & T<35)

ans = 3 4 5 17 18 19 20 21 22 23

>>

Rpta: 10 veces, en las horas 3 4 5 17 18 19 20 21

22 23

c) El número de horas que la temperatura no estuvo entre 20 y 30

grados.

>> not(T>20 & T<30)

ans = Columns 1 through 14

0 1 1 1 1 1 1 1 1 1 1 1 1 1

Columns 15 through 24

1 1 1 1 1 1 1 1 0 0

>> find(not(T>20 & T<30))

ans = Columns 1 through 14

2 3 4 5 6 7 8 9 10 11 12 13 14 15

Columns 15 through 21

16 17 18 19 20 21 22

>> sum(not(T>20 & T<30))

ans = 21

>>

Rpta: 21 veces en las horas: 2 3 4 5 6 7 8 9 10

11 12 13 14 15 16 17 18 19 20 21 22

Page 6: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

6

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.

Page 7: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

7

SENTENCIAS CONDICIONALES Sentencia Condicional: if – end

Aquí se ejecuta un solo conjunto de instrucciones Esquema logico Estructura lógica

Pr......

ograma

en MatLab

exp.Si condicional

......

......

......

Instrucciones

MatLab

End

Pr......

ograma

en MatLab

Ejemplo: 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.

sueldo.m

% programa que calcula el sueldo de una

persona % en base al monto de las ventas % Si las ventas son menor o igual que un

monto M, el sueldo es S % si la ventas superan M, el sueldo es S mas % la diferencia de las ventas con M V=input('indique las ventas efectuadas en el

mes\n'); M=input('indique el monto base de las

ventas\n'); S=input('indique el salario base\n');

Falso Sentencia

if

Instrucciones

Verdadero

End

Diagrama de flujo

Page 8: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

8

if (V>M) S=S+0.01*(V-M); end fprintf('El sueldo de cada trabajador es de:

%6.2f nuevos soles\n',S);

Ejecución en MatLab >> sueldo

indique las ventas efectuadas en el mes 30000

indique el monto base de las ventas 25000

indique el salario base 1200

El sueldo de cada trabajador es de: 1250.00 nuevos soles

>> sueldo

indique las ventas efectuadas en el mes 50000

indique el monto base de las ventas 60000

indique el salario base 1200

El sueldo de cada trabajador es de: 1200.00 nuevos soles

>>

Sentencia Condicional: if – else - end Aquí se ejecutan dos grupos de instrucciones

Esquema logico Estructura lógica

Pr......

ograma

en MatLab

exp.Si condicional

....

.... 01

Instrucciones

MatLab

Else

....

.... 02

Instrucciones

MatLab

End

Pr......

ograma

en MatLab

Falso

Sentencia

if

Grupo 2 de

Instrucciones

Verdadero

End

Diagrama de flujo

Grupo 1 de

Instrucciones

Page 9: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

9

Ejemplo: Se necesita calculare el volumen de agua en un tanque, con

la forma que se indica en el grafico

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.

SOLUCION: El volumen es igual

3

100 0 29

4 3 400047 29 45

3 4 3

h h

V h hh

volumen.m

% programa que calcula el volumen de agua

% de un deposito cilíndrico-conico % la entrada es el nivel del agua en m. % La salida es el volumen de agua en m3. h=input('indique el nivel del agua del

tanque\n'); if (h<=29) V=100*pi*h; else V=((4/3)*(((3*h/4)-47)^3))-(4000*pi/3); end fprintf('El volumen de es: %6.2f metros

cubicos\n',V);

Ejecución en MatLab

16 m

29 m

20Diametro m

44Diametro m

h

hr

Page 10: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

10

>> volumen

indique el nivel del agua del tanque 20

El volumen de es: 6283.19 metros cubicos

>> volumen

indique el nivel del agua del tanque 25

El volumen de es: 7853.98 metros cubicos

>>

Ejemplo: Hallando el valor absoluto de un numero.

SOLUCION: Sabemos que 0

0

x xx

x x

volumen.m

function y=valorabs(x) % esta fumncion calcula el valor absoluto % de un numero real x % donde el resultado es x, si es no negativo % y es -x si es negativo if (x>=0) y=x; else y=-x; end

Ejecución en MatLab >> valorabs(88)

ans = 88

>> valorabs(-45)

ans = 45

>> valorabs(0)

ans = 0

>>

Page 11: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

11

Sentencia Condicional: if – elseif – else - end Aquí la ventaja es que se pueden ejecutar tres grupos de instrucciones

en forma disyuntiva

Esquema lógico

Estructura lógica

......Programa en MatLab

exp.if condicional

......

...... 01

Instrucciones

MatLab

exp.elseif condicional

......

...... 02

Instrucciones

MatLab

else

Falso Sentencia

if

Grupo 1 de

Instrucciones

Verdadero

end

Diagrama de flujo

Grupo 2 de

Instrucciones

Sentencia

elseif

Grupo 3 de

Instrucciones

Verdadero

Falso

Page 12: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

12

......

...... 03

Instrucciones

MatLab

end

......Programa en MatLab

Sentencia: switch-case 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

......Programa en MatLab

expswitch resion

1case valor

......

1......

Grupo de instrucciones

2case valor

......

2......

Grupo de instrucciones

3case valor

......

3......

Grupo de instrucciones

otherwise

......

4......

Grupo de instrucciones

end

......Programa en MatLab

¿Cómo funciona la sentencia switch-case? El valor de la expresión del switch se compara con los valores de

cada comando case. Si se encuentra una coincidencia, entonces se

Page 13: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

13

ejecutan las instrucciones que siguen a dicho comando case (solo un

grupo de instrucciones).

Si hay más de una coincidencia, solo se atenderá a la primera que se

encuentra.

Si no se encuentran coincidencias se ejecutan las instrucciones que

siguen al comando otherwise, si este ha sido declarado (es opcional).

Si no se encuentran coincidencias y no está declarado el comando

otherwise, entonces no se ejecutara ninguna instrucción o grupo de

instrucciones.

Una sentencia case puede tener más de un valor con el que establecer

coincidencias. Para declararlos solo es necesario ponerlos a

continuación, uno detrás del otro, entre llaves y separados por comas,

de la forma: {valor1, valor2, valor3, . . . }. En este caso al tener más

de un valor, el grupo de instrucciones correspondientes al case se

ejecutara siempre que al menos haya coincidencia con alguno de los

valores indicados.

Ejemplo de aplicación:

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.

SOLUCION:

cambiounidad.m Vent=input('Introduzca el valor de la distancia

que hay que convertir:\n');

UnitEnt=input('Introduzca la unidad actual de la

distancia (m, cm, dm, mm, dam, hm, km):\n','s');

UnitSal=input('Introduzca la nueva unidad para la

distancia (m, cm, dm, mm, dam, hm, km):\n','s');

error=0;

switch UnitEnt

case 'm'

Vi=Vent;

case 'cm'

Vi=Vent/100;

case 'dm'

Vi=Vent/10;

case 'mm'

Vi=Vent/1000;

case 'dam'

Vi=Vent*10;

case 'hm'

Vi=Vent*100;

case 'km'

Page 14: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

14

Vi=Vent*1000;

otherwise

error=1;

end

switch UnitSal

case 'm'

Vf=Vi;

case 'cm'

Vf=100*Vi;

case 'dm'

Vf=10*Vi;

case 'mm'

Vf=1000*Vi;

case 'dam'

Vf=Vi/10;

case 'hm'

Vf=Vi/100;

case 'km'

Vf=Vi/1000;

otherwise

error=1;

end

if error==1

disp('Horror, La unidad de entrada o la de

conversion se ha tecleado en forma incorrecta\n')

else

fprintf('V=%g%s\n',Vf,UnitSal)

end

Ejecución en MatLab >> cambiounidad

Introduzca el valor de la distancia que hay que convertir: 3777

Introduzca la unidad actual de la distancia (m, cm, dm, mm, dam,

hm, km): dm

Introduzca la nueva unidad para la distancia (m, cm, dm, mm, dam,

hm, km): km

V=0.3777km

>> cambiounidad

Introduzca el valor de la distancia que hay que convertir: 6799

Introduzca la unidad actual de la distancia (m, cm, dm, mm, dam,

hm, km): ham

Introduzca la nueva unidad para la distancia (m, cm, dm, mm, dam,

hm, km): m

Horror, La unidad de entrada o la de conversion se ha tecleado en

forma incorrecta\n

Page 15: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

15

>> cambiounidad

Introduzca el valor de la distancia que hay que convertir: 98888888

Introduzca la unidad actual de la distancia (m, cm, dm, mm, dam,

hm, km): mm

Introduzca la nueva unidad para la distancia (m, cm, dm, mm, dam,

hm, km): km

V=98.8889km

>>

BUCLES 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:

- for-end: el numero de iteraciones se define al comienzo del 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.

Bucles del tipo for-end

Aquí se ejecutan dos grupos de instrucciones Estructura lógica Estructura lógica

: :for k f s t

....

....

Comandos

en MatLab

end

k: variable índice del bucle

f: valor inicial de k

s: incremento del valor k, por defecto 1

t: valor límite de la variable k

Ejemplo: Sumar los 50 primeros números enteros positivos múltiplos

de 7.

Solución:

SOLUCION:

sumnat.m

function s=sumnat(n) % esta función suma de % los n primeros números naturales

Page 16: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

16

% el resultado es la suma de tales números s=0;

for k=1:1:n s=s+k end

Ejecución en MatLab >> sumnat(3)

ans = 6

>> sumnat(0)

ans = 0

>> sumnat(-6)

ans = 0

>> sumnat(6)

ans = 21

>> sumnat(16)

ans = 136

>>

Ejemplo: Calcular la suma de términos de la siguiente serie:

1

1

2

kn

kk

k

SOLUCION:

sumserie.m

% este programa calcula la suma de terminos % de la serie: % Sum(k=1:n)((-1)^k)*k/(2^k)) % a funcion suma % los n primeros numeros naturales % el resultado es la suma de tales numeros

n=input('ingrese el numero de terminos de la

serie: \n'); s=0; for k=1:1:n s=s+((-1)^k)*k)/(2^k); end fprintf('la suma de los terminos de la serie

es: %5.4f \n',s)

Page 17: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

17

Ejecución en MatLab >> sumserie

ingrese el numero de terminos de la serie: 5

la suma de los terminos de la serie es: -0.2813

>> sumserie

ingrese el numero de terminos de la serie: 99

la suma de los terminos de la serie es: -0.2222

>> sumserie

ingrese el numero de terminos de la serie: 5

la suma de los terminos de la serie es: 1.7813

>>

Ejemplo: La función seno se puede aproximar usando la serie de

Taylor. Como sigue:

2 1

1

1( )

2 1 !

k k

k

xsen x

k

Donde x esta en radianes

SOLUCION:

senserie.m % este programa calcula el seno de x, donde x esta

en radianes

% mediante la serie de taylor

% con n términos, en la serie

% las variables de entrada son x en grados

sexagesimales

% y n que es el numero de términos

% La salida es el valor aproximado del seno

x=input('ingrese el valor del ángulo en grados

sexagesimales: \n');

n=input('ingrese el numero de términos a

considerar: \n');

s=0;

xr=x*pi/180;

for k=0:1:n-1

s=s+((-1)^k)*(xr^(2*k+1))/factorial(2*k+1);

end

fprintf('El seno aproximado es: %5.4f \n',s)

Ejecución en MatLab >> senserie

ingrese el valor del ángulo en grados sexagesimales: 190

ingrese el numero de términos a considerar: 3

Page 18: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

18

El seno aproximado es: 0.5801

>> senserie

ingrese el valor del ángulo en grados sexagesimales: 150

ingrese el numero de términos a considerar: 7

El seno aproximado es: 0.5000

>>

Puede comprobar para x = 1, en sexagesimales seria 180/pi.

11 1 1 1(1) ..... ....

1! 3! 5! 7! 2 1 !

k

senk

Ejemplo: Ahora vamos a considerar el problema de cambiar los

elementos de un vector bajo ciertas condiciones.

El programa multiplica por tres los elementos del vector que sean

positivos, y múltiplos de 3 ó 5; y eleva al cuadrado los negativos

mayores que -10.

SOLUCION:

ANALISIS LOGICO

Falso

x(n) = 3*x(n)

Verdadero

end

Diagrama de flujo

x(n)= (x(n))^2

Verdadero

Falso

x(n)>0&(rem(x(n),3)==0

| rem(x(n),8)==0)

x(n)<0 & x(n)>-10

Page 19: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

19

cambiavector.m

% Este programa cambia los elementos de un

vector. % multiplica por tres los elementos

positivos, y múltiplos de 3 ó 5 % eleva al cuadrado los negativos mayores que

-10.

x=input('Ingrese un vector con elementos

enteros: \n'); n=length(x);

for k=1:1:n if x(k)>0 & ( rem(x(k),3)==0 | rem(x(k),8)==0

) x(k)=3*x(k); elseif x(k)<0 & x(k)>-10 x(k)=x(k)^2; end end x

Ejecución en MatLab

>> cambiavector

Ingrese un vector con elementos enteros:

[1 5 9 0 -5 -30 64]

x = 1 5 27 0 25 -30 192

>> cambiavector

Ingrese un vector con elementos enteros:

[1 5 7 16 15 -20 -7 9 0 -5 -30 64]

x = Columns 1 through 10

1 5 7 48 45 -20 49 27 0 25

Columns 11 through 12

-30 192

>>

Page 20: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

20

Bucles del tipo while - end

Este tipo de bucle se usa cuando hy necesidad de iun

proceso iterativo, pero se desconoce cuantos pasos deben

hacerse, generalmente está sujeto a condiciones que se

hallan al ejecutar la solución del `problema.

A veces aquí es 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

exp _while resion condicional

....

....

Instrucciones

de MatLab

end

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 varibles de la expresión condicional deben cambiar entre

la sentencia while y end, de otro modo se tendría un bicle infinito

Para evitar un bucle infinito se puede usar el comando break

Un bucle infinito también se puede terminar con Ctrl + C 0

Ctrl + break

Ejemplo: A una variable x se le incrementa su valor inicial en 7,

mientras que esta sea menor de 200.

SOLUCION:

incrementador.m

% Este programa incrementa un numero inicial

en 7, % mientras este sea menor que 200 x=input('Ingrese un numero: \n'); n=0; while x<200; x=x+7; n=n+1;

Page 21: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

21

end fprintf('El nuevo valor es: %-3.2i \n',x) fprintf('Se ha incrementado %-3i veces el

siete\n',n)

Ejecución en MatLab >> incrementador

Ingrese un numero: 45

El nuevo valor es: 206

Se ha incrementado 23 veces el siete

>> incrementador

Ingrese un numero: 234

El nuevo valor es: 234

Se ha incrementado 0 veces el siete

>> incrementador

Ingrese un numero: 200

El nuevo valor es: 200

Se ha incrementado 0 veces el siete

>> incrementador

Ingrese un numero: -200

El nuevo valor es: 206

Se ha incrementado 58 veces el siete

>> incrementador

Ingrese un numero: -20

El nuevo valor es: 204

Se ha incrementado 32 veces el siete

>>

Ejemplo: Elaborar un programa que divida en tres partes un

intervalo, y tome la parte intermedia hasta que la longitud sea menor

que 0.001

SOLUCION:

trisecaintervalo.m

% Este programa divide en tres partes un

intervalo % y toma la parte intermedia % hasta que la longitud sea menor que 0.001

a=input('Ingrese el lado izquierdo del

intervalo: \n'); b=input('Ingrese el lado derecho del

intervalo: \n');

Page 22: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

22

if b-a > 0.001 while b-a>0.001; a=(b+2*a)/3; b=(a+b)/2; end fprintf('El lado izquierdo del nuevo

intervalo es: %-3.5f \n',a) fprintf('El lado derecho del nuevo intervalo

es: %-3.5f\n',b) else fprintf('Los datos no generan un intervalo

valido. &$#### \n') end

Ejecución en MatLab >> trisecaintervalo

Ingrese el lado izquierdo del intervalo: 1

Ingrese el lado derecho del intervalo: 4

El lado izquierdo del nuevo intervalo es: 2.49977

El lado derecho del nuevo intervalo es: 2.50023

>> trisecaintervalo

Ingrese el lado izquierdo del intervalo: 5

Ingrese el lado derecho del intervalo: 2

Los datos no generan un intervalo valido. &$####

>>

Ejemplo: La función exponencial al ser expresada como una serie de

Taylor, queda como sigue: 2 3 4 5

0

1! 2! 3! 4! 5!

nx

n

x x x x xe x

n

Escribir un programa que calcule xe usando la serie de Taylor, 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: 2e ,

4e , 10e y

20e

SOLUCION:

seriexp.m % Este programa calcula el valor de e^x

% usando las erie de Taylor

% hasta que el ultimo termino sea menor que 0.00000l,

% o haya 30 terminos como maximo

Page 23: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

23

x=input('Ingrese el valor de x: \n');

n=1;sn=1;s=sn;

while sn>0.000001 & n<30

s=s+(x^n)/factorial(n);

n=n+1;

sn=abs((x^n)/factorial(n));

end

if n>=30

fprintf('Se necesitan mas de 30 terminos \n')

else

fprintf('El valor de exp(%f) es %-3.5f\n',x,s)

end

Ejecución en MatLab >> seriexp

Ingrese el valor de x: 2

El valor de exp(2.000000) es 7.38906

>> seriexp

Ingrese el valor de x: 21

Se necesitan mas de 30 terminos

>> seriexp

Ingrese el valor de x: 0

El valor de exp(0.000000) es 1.00000

>> seriexp

Ingrese el valor de x: 8

Se necesitan mas de 30 terminos

>> seriexp

Ingrese el valor de x: 5

El valor de exp(5.000000) es 148.41316

>>

Ejemplo: Crear una matriz de orden m por n, donde el elemento i j

este dado por la expresión:

3 4i ja i j

SOLUCION:

creamatriz.m

% Creacion de una matriz de orden mxn % Donde el elemento i j esta dado por % a(i,j)=3i-4j m=input('ingrese el numero de filas de la

matriz '); n=input('ingrese el numero de columnas de la

Page 24: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

24

matriz '); A=zeros(m,n); for k=1:1:m for l=1:1:n A(k,l)=3*k-4*l; end end A

Ejecución en MatLab >> creamatriz

ingrese el numero de filas de la matriz 4

ingrese el numero de columnas de la matriz 5

A =

-1 -5 -9 -13 -17

2 -2 -6 -10 -14

5 1 -3 -7 -11

8 4 0 -4 -8

>> creamatriz

ingrese el numero de filas de la matriz 5

ingrese el numero de columnas de la matriz 8

A =

-1 -5 -9 -13 -17 -21 -25 -29

2 -2 -6 -10 -14 -18 -22 -26

5 1 -3 -7 -11 -15 -19 -23

8 4 0 -4 -8 -12 -16 -20

11 7 3 -1 -5 -9 -13 -17

>> creamatriz

ingrese el numero de filas de la matriz 0

ingrese el numero de columnas de la matriz 0

A = []

>>

Ejemplo: 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.

Solución:

SOLUCION:

matrizpascal.m

% Programa que construya el triangulo de

Pascal % como una matriz de orden n por n.

Page 25: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

25

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

n=input('ingrese el orden de la matriz

'); A=ones(n,n); for k=2:1:n for l=2:1:n A(k,l)=A(k,l-1)+A(k-1,l); end end A

Ejecución en MatLab >> matrizpascal

ingrese el orden de la matriz 5

A =

1 1 1 1 1

1 2 3 4 5

1 3 6 10 15

1 4 10 20 35

1 5 15 35 70

>> matrizpascal

ingrese el orden de la matriz 6

A =

1 1 1 1 1 1

1 2 3 4 5 6

1 3 6 10 15 21

1 4 10 20 35 56

1 5 15 35 70 126

1 6 21 56 126 252

>>

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.

Page 26: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

26

EJEMPLOS ADICIONALES

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

% Calculo de la raiz cuadrada de los n

primeros enteros positivos % usando el comando for-end n=input('ingrese la cantidad de terminos:

'); u=[1:n]'; v=ones(n,1); for k=1:1:n; v(k)=sqrt(u(k)); end %R=[u v]; %disp(R) disp('') disp('numero raiz cuadrada') for k=1:n; fprintf('%5.0i %5.4f\n',u(k),v(k)) end

Ejemplo02: Hallar el factorial de un número entero no negativo

% Calculo de el factorial de un numero entero

no negativo

n=input('El valor de n, es: ') p=1;

if n<0 disp('Error, ingreso un valor inadecuado

') break elseif n==0 fact=p; else for k=1:n p=p*k; end fact=p; end

Page 27: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

27

fprintf('El factorial de %5i es

%5i\n',n,fact)

Ejemplo03:METODO DE BISECCION

Considérese la ecuación 0f x , Donde la función f cumple las

condiciones para aplicar el método de las tangentes en cierto

intervalo. La solución se da por un proceso iterativo:

1

1

( ), 1,2,3,

'( )

kk k

k

x

f xx x k

f x

Según ello resolver: 0, 1,0xe x x

% Solucion de una ecuacion f(x) = 0, por el

metodo de Newton % clear f=0; df=0; x(1)=input('ingrese el valor inicial'); tol=input('Ingrese la tolerancia'); miter=input('ingrese el nuemro maximo de

iteraciones'); k=1; d=1; while abs(d)>=tol & k<miter [f df]=fun(x(k)); x(k+1)=x(k)-(f/df); d=x(k+1)-x(k); k=k+1; end

if abs(d)>tol sol=[] disp('El numero de iteraciones no es

suficiente o el proceso diverge') else

Page 28: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

28

sol=x' disp('El numero de iteraciones es:') k end

Ejemplo04: Método del Punto Fijo

Considérese la ecuación x g x , Donde la función g cumple las

condiciones para aplicar el método del punto fijo. La solución se da

por un proceso iterativo:

1

1 ( ), 1,2,3,k k

x

x g x k

Según ello resolver: 2

0 2

14 4

2

x

x x x

% Solucion de una ecuacion por el metodo del

Punto Fijo % % Calculo de los terminos de la sucesion de

Fibonacci: % con la funcion recursiva: % F(1)=1 % F(2)=1 % F(n+2)=F(n+1)+F(n), para todo n entero

positivo

x1=input('Ingrese la aproximacion inicial:

'); tol=input('Ingrese la tolerancia de error:

'); miter=input('Ingrese el numero maximo de

iteraciones: ');

x(1)=x1; k=1; d=1; while d>=tol & k<miter

Page 29: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

29

x(k+1)=-exp(x(k)); d=abs(x(k+1)-x(k)); k=k+1; end disp(x') fprintf('El numero de iteraciones es:

%5.0f',k)

Ejemplo05: Elabore un programa que pida la edad de una persona, y

visualice lo siguiente

Si 0 6edad , mostrar: infante

Si 6 12edad , mostrar: niño

Si 12 18edad , mostrar: adolescente

Si 18 25edad , mostrar: joven

Si 25 60edad , mostrar: adulto

Si 60 edad , mostrar: anciano

%Etapas de un ser humano %Uso del comando menu Edad=menu('Indique su

edad:','0<=E<6','6<=E<12','12<=E<18','18<=E<25

','25<=E<60','60<=E'); switch Edad case 1 disp('Infante') case 2 disp('Niño') case 3 disp('Adolescente') case 4 disp('Joven') case 5 disp('Adulto') case 6 disp('Anciano') end

Ejemplo06: Elabore un programa que pida la edad de una persona, y

visualice lo siguiente

Page 30: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

30

Si 0 6edad , mostrar: infante

Si 6 12edad , mostrar: niño

Si 12 18edad , mostrar: adolescente

Si 18 25edad , mostrar: joven

Si 25 60edad , mostrar: adulto

Si 60 edad ,

Ejemplo07: Crear una matriz de orden m por n, donde el elemento i j

este dado por la expresión:

3 4i ja i j

% Creación de una matriz de orden mxn % Donde el elemento i j esta dado por % a(i,j)=3i-4j clear m=input('ingrese el numero de filas de la

matriz '); n=input('ingrese el numero de columnas de la

matriz '); MZ=zeros(m,n); for k=1:1:m for t=1:1:n MZ(k,t)=3*k-4*t; end end MZ

Ejemplo08: 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.

% Programa que 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.

Page 31: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

31

n=input('ingrese el orden de la matriz

'); A=ones(n,n); for k=2:1:n for l=2:1:n A(k,l)=A(k,l-1)+A(k-1,l); end end A

Ejemplo09: Hallar los términos de la sucesión de Fibonacci hasta el

término n

% Suceion de Fibonacci % % Calculo de los terminos de la sucesion de

Fibonacci: % con la funcion recursiva: % F(1)=1 % F(2)=1 % F(n+2)=F(n+1)+F(n), para todo n entero

positivo

n=input('Ingrese la cantidad de terminos a

mostrar: '); F=zeros(n,1);

F(1)=1; F(2)=1; if n==1 | n==2 disp(F) elseif n>2 for k=1:n-2 F(k+2)=F(k+1)+F(k); end disp(F) else disp('El valor de n, no es el adecuado') end

Page 32: 07 programacion matlab

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos

32

Ejemplo10: 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.

clear lluvia=[286 253 254 305 274 203

165 190 161 228 224 280];

n=length(lluvia); prom=sum(lluvia)/n; D=zeros(1,n); for k=1:n D(k)=lluvia(k)>prom; end D