Você está na página 1de 32

07. PROGRAMACION CON MATLAB Lic.

Amado Malca Villalobos


1

PROGRAMACION CON MatLab

Un programa en MatLab, es una secuencia de instrucciones
lgicamente 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 lgicos
Sentencias condicionales
Sentencias de iteracin
Ficheros de funcin
Programa principal
Subprogramas

OPERADORES RELACIONALES
Operador
relacional:
Descripcin Tecla rpida
<
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 comparacin 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
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
07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos
3
1 1 1
Z = 0 1 1
1 0 1
1 0 0

OPERADORES LGICOS
Operador
Lgico
Nombre Descripcin
Tecla rpida
& y
La conjuncin Alt 38
| o
La disyuncin
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 LGICAS PREDEFINIDAS
Funcin Lgica Equivalencia Descripcin
and(a,b)
a b
La conjuncin
or(a,b)
a b .
La disyuncin
inclusiva
.not(a)
~ a
La negacion
xor(a,b)
a b
La disyuncin
exclusiva
all(A)
A \
Cuantificador
universal
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 aplicacin:
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 centgrados, 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.

Solucin

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

07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos
6
PROGRAMACION EN MatLab

Para la estructura de programacin 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 condicin, y de acuerdo
a si se cumple o no realiza la accin que se desee.

WHILE: Realiza una parte del programa mientras se
cumpla alguna condicin.

FOR: Muy parecido al While, pero utiliza un contador,
es til si se quiere repetir una parte del programa un
nmero 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 grficos 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.





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 lgica



Pr
......
ograma
en MatLab

exp. Si condicional
......
......
......
Instrucciones
MatLab
'
1
1
1
1
!
1
1
1
1+

End
Pr
......
ograma
en MatLab


Ejemplo: Un trabajador tiene una remuneracin bsica como
vendedor de 1 200 nuevos soles, pero si las ventas en el mes son
mayores a 50 000, tiene una bonificacin 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
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);
Ejecucin 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 lgica


Pr
......
ograma
en MatLab

exp. Si condicional
....
.... 01
Instrucciones
MatLab
'
1
1
!
1
1+

Else
....
.... 02
Instrucciones
MatLab
'
1
1
!
1
1+

End
Pr
......
ograma
en MatLab




Falso
Sentencia
if
Grupo 2 de
Instrucciones
Verdadero
End
Diagrama de flujo

Grupo 1 de
Instrucciones
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 remuneracin bsica como vendedor de 1
200 nuevos soles, pero si las ventas en el mes son mayores a 50 000,
tiene una bonificacin 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 4000
47 29 45
3 4 3
h h
V h
h
h

'
_ _
1
1
1
1
=
! 1

1
< _

1

1 ( )
1+

volumen.m
% programa que calcula el volumen de agua
% de un deposito cilndrico-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);
Ejecucin en MatLab
16 m
29 m
20 Diametro m
44 Diametro m
h
h
r
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 x
x
x x
'
_
1
1
=
!
1
<
1+

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
Ejecucin en MatLab
>> valorabs(88)
ans = 88
>> valorabs(-45)
ans = 45
>> valorabs(0)
ans = 0
>>








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 lgico


Estructura lgica

......Pr ograma en MatLab
exp. if condicional

......
...... 01
Instrucciones
MatLab
'
1
1
!
1
1+

exp. elseif condicional

......
...... 02
Instrucciones
MatLab
'
1
1
!
1
1+

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
07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos
12

......
...... 03
Instrucciones
MatLab
'
1
1
!
1
1+

end
......Pr ograma 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 lgica

......Pr ograma en MatLab
exp switch resion
1 case valor

......
1
......
Grupo de instrucciones
'
1
1
!
1
1+

2 case valor

......
2
......
Grupo de instrucciones
'
1
1
!
1
1+

3 case valor

......
3
......
Grupo de instrucciones
'
1
1
!
1
1+

otherwise

......
4
......
Grupo de instrucciones
'
1
1
!
1
1+

end
......Pr ograma en MatLab

Cmo funciona la sentencia switch-case?
El valor de la expresin del switch se compara con los valores de
cada comando case. Si se encuentra una coincidencia, entonces se
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 ms 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 instruccin o grupo de
instrucciones.
Una sentencia case puede tener ms de un valor con el que establecer
coincidencias. Para declararlos solo es necesario ponerlos a
continuacin, uno detrs del otro, entre llaves y separados por comas,
de la forma: {valor1, valor2, valor3, . . . }. En este caso al tener ms
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 aplicacin:
Escribir un programa para convertir una expresin de longitud, que
puede estar en m, dm, cm, mm, dam, hm, km, pulgada, pie, yarda. En
otro nmero 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'
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
Ejecucin 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
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 ejecucin de uno o varios comandos se
repite varias veces consecutivamente. Cada una de estas repeticiones
se denomina paso o iteracin.
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 condicin.

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 lgica Estructura lgica
: : for k f s t =

....
....
Comandos
en MatLab
'
1
1
!
1
1+

end
k: variable ndice del bucle
f: valor inicial de k
s: incremento del valor k, por defecto 1
t: valor lmite de la variable k


Ejemplo: Sumar los 50 primeros nmeros enteros positivos mltiplos
de 7.
Solucin:
SOLUCION:
sumnat.m
function s=sumnat(n)
% esta funcin suma de
% los n primeros nmeros naturales
07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos
16
% el resultado es la suma de tales nmeros
s=0;

for k=1:1:n
s=s+k
end
Ejecucin 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 trminos de la siguiente serie:
( )
1
1
2
k
n
k
k
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)
07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos
17
Ejecucin 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 funcin seno se puede aproximar usando la serie de
Taylor. Como sigue:
( )
( )
2 1
1
1
( )
2 1 !
k
k
k
x
sen 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 trminos, en la serie
% las variables de entrada son x en grados
sexagesimales
% y n que es el numero de trminos
% 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 trminos 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)
Ejecucin en MatLab
>> senserie
ingrese el valor del ngulo en grados sexagesimales: 190
ingrese el numero de trminos a considerar: 3
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 trminos a considerar: 7
El seno aproximado es: 0.5000
>>
Puede comprobar para x = 1, en sexagesimales seria 180/pi.
( )
( )
1
1 1 1 1
(1) ..... ....
1! 3! 5! 7! 2 1 !
k
sen
k


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 mltiplos 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
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 mltiplos 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
Ejecucin 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
>>




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 solucin del `problema.
A veces aqu es necesario del uso de algn comando que
pare el programa en caso de que no se halle la condicin
pedida.

Estructura lgica
exp _ while resion condicional

....
....
Instrucciones
de MatLab
'
1
1
!
1
1+

end
Recomendaciones
La expresin 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 expresin condicional deben cambiar entre
la sentencia while y end, de otro modo se tendra un bicle infinito
Para evitar un bucle infinito se puede usar el comando break
Un bucle infinito tambin 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;
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)
Ejecucin 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');
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
Ejecucin 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 funcin exponencial al ser expresada como una serie de
Taylor, queda como sigue:
2 3 4 5
0
1
! 2! 3! 4! 5!
n
x
n
x x x x x
e x
n

=
= =
_

Escribir un programa que calcule
x
e usando la serie de Taylor, con
los sumandos necesarios hasta que el ultimo sumando sea menor que
0.000001. Adems la suma no debe pasar de 30 trminos, si fuese el
caso hay que indicar que se necesitan ms sumandos.
Hallar con este programa:
2
e ,
4
e

,
10
e y
20
e
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
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
Ejecucin 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 expresin:
3 4
i j
a 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
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
Ejecucin 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.
Solucin:
SOLUCION:
matrizpascal.m
% Programa que construya el triangulo de
Pascal
% como una matriz de orden n por n.
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
Ejecucin 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 iteracin de un bucle
y pasar a la siguiente iteracin.
07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos
26
EJEMPLOS ADICIONALES
Ejemplo01. Usando el bucle for - end, hallar la raz cuadrada de los
primeros 20 nmeros, 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 nmero 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
07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos
27

fprintf('El factorial de %5i es
%5i\n',n,fact)


Ejemplo03:METODO DE BISECCION
Considrese la ecuacin ( ) 0 f x = , Donde la funcin f cumple las
condiciones para aplicar el mtodo de las tangentes en cierto
intervalo. La solucin se da por un proceso iterativo:
1
1
( )
, 1, 2, 3,
'( )
k
k k
k
x
f x
x x k
f x

'
1
1
1
1
!
1 = =
1
1
1+


Segn ello resolver: [ [ 0, 1, 0
x
e 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
07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos
28
sol=x'
disp('El numero de iteraciones es:')
k
end


Ejemplo04: Mtodo del Punto Fijo
Considrese la ecuacin ( ) x g x = , Donde la funcin g cumple las
condiciones para aplicar el mtodo del punto fijo. La solucin se da
por un proceso iterativo:
1
1
( ), 1, 2, 3,
k k
x
x g x k

'
1
1
!
1
= =
1+


Segn ello resolver:
2
0 2
1
4 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
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 6 edad _ < , mostrar: infante
Si 6 12 edad _ < , mostrar: nio
Si 12 18 edad _ < , mostrar: adolescente
Si 18 25 edad _ < , mostrar: joven
Si 25 60 edad _ < , 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('Nio')
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
07. PROGRAMACION CON MATLAB Lic. Amado Malca Villalobos
30
Si 0 6 edad _ < , mostrar: infante
Si 6 12 edad _ < , mostrar: nio
Si 12 18 edad _ < , mostrar: adolescente
Si 18 25 edad _ < , mostrar: joven
Si 25 60 edad _ < , mostrar: adulto
Si 60 edad _ ,

Ejemplo07: Crear una matriz de orden m por n, donde el elemento i j
este dado por la expresin:
3 4
i j
a i j =


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

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 trminos de la sucesin de Fibonacci hasta el
trmino 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

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

Você também pode gostar