Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
11
12
13
21
22
23
31
32
33
el elemento
23
se escribira como (2,3)
Aplicando esto a la matriz m definida en el paso f) de esta seccin, la asignacin de variable:
12 = (1,2);
Es equivalente a definir una nueva variable escalar de nombre m12 cuyo valor es 2.
No slo escalares se pueden definir a partir de matrices, por ejemplo, la expresin
1 = [(1,1) (1,2) (1,3)]
Define un vector fila mf1 cuyo valor es igual a [1 2 3]. Esta expresin tambin puede abreviarse
utilizando el comando : de la siguiente manera:
1
4
: 2]
f := sin
y := [sin(0) sin(
4
) sin(
2
) sin
3
4
sin() sin
5
4
sin
3
2
sin
7
4
sin(2)]
Como se puede observar, la funcin sin corresponde a una funcin que admite como
dominio a un vector (e incluso una matriz) y su recorrido corresponde a un vector (o matriz)
de las mismas dimensiones de x, cuyos elementos corresponden a la aplicacin de la funcin
sinusoidal para cada uno de sus componentes.
4) El ejemplo d) muestra la aplicacin de la funcin power a una variable escalar n de valor
2.
5) El ejemplo e) muestra una situacin anloga al caso descrito en 4). Sin embargo, en este
caso, el dominio de la funcin corresponde al vector ang de tamao 1 9. Si se realiza la
operacin en MATLAB, se observar un error del tipo: ??? Error using ==> mpower,
Inputs must be a scalar and a square matrix.
Este informe de error indica que el dominio de la funcin power es incompatible con la
definicin de la variable ang, situacin esperable considerando que si el exponente de una
potencia es mayor que 1, la funcin power corresponde a una multiplicacin de la base. En la
generalizacin de las variables como matrices, una multiplicacin de una variable por si
misma, slo puede realizarse si esta es una matriz cuadrada a un escalar.
Sin embargo, existe una solucin si es que se desea elevar a una potencia determinada cada
uno de los elementos de un vector, la cual nos ayuda a entrar en el campo de las primeras
instrucciones a programar en MATLAB: como ya se sabe, para hacer referencia a un
elemento escalar dentro de un vector o una matriz, se debe indicar con parntesis su
10
ubicacin en coordenadas (fila, columna). Considerando lo anterior, si se desea elevar al
cuadrado el primer elemento del vector ang es necesario entonces definir la variable ang_2_1
e igualarla al cuadrado del primer elemento del vector ang, de la siguiente forma:
ang_2_1= ang(1,1)^2;
De esta forma se define la variable ang_2_1 := (1,1)
2
0
2
.
Anlogamente a la instruccin anterior, se podran definir las variables ang_2_2 hasta la
variable ang_2_9 como los cuadrados de cada uno de los elementos restantes del vector ang:
ang_2_2= ang(1,2)^2;
ang_2_3= ang(1,3)^2;
ang_2_4= ang(1,4)^2;
ang_2_5= ang(1,5)^2;
ang_2_6= ang(1,6)^2;
ang_2_7= ang(1,7)^2;
ang_2_8= ang(1,8)^2;
ang_2_9= ang(1,9)^2;
Y luego definir el vector ang_2 como la composicin de las variables previamente definidas:
ang_2= [ang_2_1 ang_2_2 ang_2_3 ang_2_4 ang_2_5 ang_2_6 ang_2_7 ang_2_8
ang_2_9];
Como reforzamiento a la definicin de las funciones, se trabajar con una de las funciones
ms utilizadas para visualizar resultados: la funcin plot, la cual permite graficar las
variables que se encuentran en el workspace. Para lo anterior, debemos conocer la estructura
de su sintaxis. Genricamente se llamar de la siguiente manera:
plot(x,y)
Siendo x e y, dos vectores donde se encuentra la informacin a representar en el eje de las
abscisas y de las ordenadas, respectivamente (horizontal y vertical). La nica condicin que
deben cumplir x e y es que deben ser de la misma dimensin (no importando si son vectores
filas o columnas).
Ejemplos de plot 1.3.2
a) a = [0:-1:-10];
11
b = abs(a);
plot(a,b);
b) ang = 0: pi/50 : 2*pi;
s_ang = sin(ang);
plot(ang, s_ang)
c) c_ang = cos(ang);
plot(s_ang, c_ang, r-o)
Analizamos a continuacin cada una de las instrucciones del ejemplo.
1) En el caso del ejemplo f), se define la variable a (que ser la variable independiente) como
un vector fila que va desde 0 hasta -10 con un espaciado igual a -1. A continuacin se define
el vector b como el valor absoluto de la variable a. Finalmente se realiza el grfico a vs. b.
tal como lo muestra la Figura 3.
FIGURA 3. GRFICA DE (A,ABS(A)).
2) El ejemplo g) tiene la misma estructura del a), solamente con la diferencia que el vector de
las variables independientes (ang) se ha definido desde 0 hasta 2, con un espaciado
uniforme de /50. El resultado de este ejemplo se presenta en la Figura 4.
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0
0
1
2
3
4
5
6
7
8
9
10
12
FIGURA 4. GRFICA DE (ANG, S_ANG).
3) Por ltimo, el ejemplo h) describe la definicin de la variable c_ang como el coseno de la
variable ang, seguida la instruccin para graficar c_ang vs. s_ang. Cabe destacar, que la
funcin plot en este caso tiene tres inputs: c_ang , s_ang y r-.o. El argumento que se
encuentra entre comillas simples, permite customizar la grfica: cambiar el color, definir el
estlo de lnea y los marcadores. Para este caso en particular se defini un color rojo
(expresado con la letra r), un tipo de lnea discontinua (representado con la instruccin --) y
un marcador circular (expresado con la letra o). La Figura 5 muestra la grfica obtenida en
el ejemplo.
FIGURA 5. GRFICA DE (C_ANG ,S_ANG).
Se recomienda encarecidamente al lector complementar esta parte de la gua con el Help de
MATLAB, buscando la funcin plot y replicando los ejemplos que ah aparecen.
0 1 2 3 4 5 6 7
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
13
2 Uso de una m-file y nociones bsicas para la
programacin en MATLAB.
Introduccin a las m-files 2.1
La extensin de los archivos creados en matlab es .m. Este tipo de archivo corresponde a un
fichero de texto plano, el cual puede contener las instrucciones que MATLAB ejecutar de manera
secuencial, lo que implica que para ejecutar un comando que se encuentra en una determinada
posicin del archivo, se deben haber ejecutado previamente los comandos en las lneas anteriores.
Para crear una m-file se debe ir a File New m-file. Una vez que se crea este archivo, se
abrir el editor de MATLAB, el cual tiene la forma de la Figura 6.
FIGURA 6. VISTA INICIAL DE UNA M-FILE EN EL EDITOR DE MATLAB.
La zona A de la Figura 6, corresponde a la zona editable de la m-file (o cuerpo del archivo),
donde se escribirn, de manera secuencial, los comandos que se ejecutarn por el programa. Una vez
que se terminen de escribir los comandos, se guardar el archivo (por defecto, lo har en el
directorio activo) y se ejecutar el programa mediante el botn run, representado por la letra B
en la Figura 6.
Escritura en una m-file 2.2
Tal como se mencion, los comandos que se escriben en el cuerpo del archivo se ejecutarn de
manera secuencial una vez que se presione el botn run. Estos siguen la misma lgica (y estructura)
14
de los que se explicaron en el trabajo sobre el workspace desde el punto de vista de la definicin de
variables y del llamado a las funciones (secciones 1.1 a 1.3).
Ejemplos 2.2.1
a) Crear una m-file llamada ejemplo_1_1 en el directorio activo de MATLAB, escribir en la
primera lnea del archivo el comando clear all, en la segunda el comando clc y desde la tercera en
adelante los comandos del ejemplo de la seccin 1.1 desde la instruccin a) hasta la f). Finalmente
ejecutar el programa a partir del botn run.
b) Crear una m-file llamada ejemplo_1_2 en el directorio activo de MATLAB, escribir en la
primera lnea del archivo el comando clear all, en la segunda el comando clc y desde la tercera en
adelante los comandos del ejemplo de la seccin 1.2 desde la instruccin a) hasta la f). Finalmente
ejecutar el programa a partir del botn run.
c) Crear una m-file llamada ejemplo_1_3_a en el directorio activo de MATLAB, escribir en la
primera lnea del archivo el comando clear all, en la segunda el comando clc y desde la tercera en
adelante los comandos del ejemplo de la seccin 1.3 desde la instruccin a) hasta la e). Finalmente
ejecutar el programa a partir del botn run.
d) Crear una m-file llamada ejemplo_1_3_b en el directorio activo de MATLAB, escribir en la
primera lnea del archivo el comando clear all, en la segunda el comando clc y desde la tercera en
adelante los comandos del ejemplo de la seccin 1.3 desde la instruccin f) hasta la h). Finalmente
ejecutar el programa a partir del botn run.
A continuacin se analizan los resultados obtenidos a partir de los ejemplos.
1) La estructura de la m-file creada en el ejemplo a) se presenta en la Figura 7.
FIGURA7. ESTRUCTURA DE LA M-FILE DEL EJEMPLO A).
Al presionar el botn run, se puede observar en el command window y en el workspace lo
siguiente:
15
(a)
(b)
Figura 8. (a) Command window del ejemplo a), (b) workspace para el ejemplo a)
Como las instrucciones son secuenciales, es posible seguir el orden de ejecucin del archivo
ejemplo_1_1 a partir de la Figura 8:
- Lnea 1: La instruccin: clear all borra todas las variables que pudiesen haberse definido
previamente.
- Lnea 2: La instruccin clc borra todo el contenido del command window, dejando la
pantalla limpia
- Lnea 3: se realiza la suma 9+5 y como no existe una asignacin de variables se la asigna
a la variable del sistema ans (que recordemos es la que guarda el resultado de la ltima
instruccin). Puesto que la lnea 3 no termina en ; el resultado de esta operacin
aparece directamente en el command window como ans = 14.
- Lnea 4: Se define la variable y =8 + 10 y se almacena en el workspace. Al igual que en
la lnea 3, el resultado de esta operacin aparece en el command window, puesto que la
instruccin no termina con el operador ;.
16
- Lnea 5: Se define la variable z = 9 y se almacena en el workspace. Puesto que en este
caso la instruccin termina con ;, el valor de z no aparece en el command window.
- Lnea 6: Se define la variable d := y + z. Al igual que en el caso anterior, no aparece el
resultado de d en el command window, puesto que la instruccin ha terminado con el
operador ;. Es importante mencionar que esta asignacin se pudo realizar, debido a
que en lneas anteriores se haban definido las variables y,z. De esta forma, al estar
disponibles en el workspace, la definicin de d tiene sentido.
- Lnea 7: Este comando presenta un error (como se puede apreciar en la Figura 8(a)),
puesto que la variable x no se encuentra definida a priori, lo que impide crear la variable
e. Al encontrar un error, MATLAB de inmediato detiene la ejecucin del programa y da
un mensaje advirtiendo que hay una inconsistencia en una de las definiciones de la m-
file.
2) La estructura de la m-file creada en el ejemplo b) se presenta en la Figura 9.
FIGURA 9. ESTRUCTURA DE LA M-FILE DEL EJEMPLO B).
Al presionar el botn run, el command window no muestra mensajes, mientras que el
workspace obtenido se presenta en Figura 10.
FIGURA 10. WORKSPACE PARA EJEMPLO B).
EL anlisis de los pasos ejecutados por el programa, son equivalentes a los del ejemplo a),
sin embargo se puede hacer mencin al hecho que la variable f toma el valor de [1;2;3] en vez
del escalar producto de sin(a)*cos(b). Esto se debe a que al seguir el orden de ejecucin
17
desde la lnea 1 a la lnea 8, se ha producido una sobre escritura de la variable en cuestin, y
el valor de esta corresponde a la ltima asignacin (en este caso, la asignacin del vector).
3) La estructura de la m-file creada en el ejemplo c) se presenta en la Figura 11.
FIGURA 11. ESTRUCTURA DE LA M-FILE DEL EJEMPLO C).
Al presionar el botn run, se puede observar en el command window y en el workspace lo
siguiente:
(a)
(b)
Figura 12. (a) Command window del ejemplo c), (b) workspace para el ejemplo c)
El anlisis de los pasos ejecutados por el programa, es anlogo al del ejemplo a). Nuevamente se
observa un error, el cual se produce en este caso al elevar al cuadrado el vector ang, lo que termina
la ejecucin del programa y no se define la variable ang2
4) La estructura de la m-file creada en el ejemplo d) se presenta en la Figura 13.
18
FIGURA 13. ESTRUCTURA DE LA M-FILE DEL EJEMPLO D).
Al ejecutar el script del ejemplo d), no se observan errores en el command window y tal
como es de esperar, todas las variables definidas, se encuentran almacenadas en el workspace
(Figura 14).
FIGURA 14. WORKSPACE PARA EJEMPLO D).
Sin embargo la grfica que entrega el programa, corresponde a la de la Figura 5
(plot(s_ang,c_ang)) y no aparecen las grficas de la funcin valor absoluto, ni de la funcin
seno. Esto se produce debido a que se ha llamado a la funcin plot tres veces de manera
secuencial, lo que implica que su output se ha sobre escrito dos veces y por lo tanto, la
grfica muestra el ltimo valor asignado. Si se desean mostrar las tres grficas se deben
definir tres variables grficas tal como se muestra en la Figura 15.
A diferencia del programa de la Figura 13, en este caso se han agregado los comandos
figure(i) en las lneas 6, 10 y 13. Estas expresiones son equivalentes a asignarle un nombre
distinto al output de la funcin plot. De esta forma, se evita la sobre escritura y se permite
visualizar las tres grficas en las figuras 1, 2 y 3. Otro detalle que vale la pena mencionar es
el comando clf de la lnea 3, que permite borrar el contenido de las figuras que existen al
momento de ejecutar el programa (es un equivalente al clc, pero con las figuras).
19
FIGURA 14. WORKSPACE PARA EJEMPLO D).
Bucles 2.3
MATLAB contiene palabras reservadas que permiten programar bucles. Estos se definen como la
repeticin de un cdigo mientras se cumpla una condicin. Existen dos formas de programar un
bucle: mediante el uso de las palabras for y while.
La estructura del bucle, independiente del mismo se resume en la Figura 15:
FIGURA 15. ELEMENTOS DE UN BUCLE.
Una vez que la condicin lgica sea falsa, el bucle acabar y el programa seguir con las
instrucciones que se encuentran bajo este.
Bucle for 2.3.1
El bucle for se utiliza generalmente cuando se requiere realizar un clculo un nmero fijo de
veces. La estructura que tiene es:
for (o while) condicin lgica
Comandos que se ejecutarn de
manera secuencial y repetitiva
mientras la condicin lgica sea
verdadera
end
20
FIGURA 16. FORMA PARA DEFINIR UN BUCLE FOR.
En este caso el programa siempre ingresar al bucle for. La primera vez que lo haga, se realzar
la asignacin x=a. Una vez que se termine de ejecutar la secuencia que est dentro del ciclo por
primera vez, MATLAB retornar a la cabecera del bucle, sobre escribir el valor de x=a+b y
volver a ejecutar las instrucciones hasta antes de end. A continuacin se devolver a la cabecera
del bucle nuevamente y reasignar el valor de x=a+2b y ejecutar el cdigo. Esta operacin se
realizar sucesivamente hasta que x=b. Cuando esto suceda, el programa ejecutar las instrucciones
dentro del ciclo por ltima vez y seguir con los comandos que se encuentran despus del end.
A modo de recordatorio, es importante indicar que si en la definicin de la condicin lgica, no
se escribe la variable b por defecto MATLAB asume que es igual a 1.
2.3.1.1 Ejemplo
Tal como se mencion en el ejemplo e) del apartado 1.3 la funcin power no se puede aplicar a
un vector. Sin embargo, es posible aplicarla a cada uno de los trminos dentro del vector. Para esto,
anteriormente se definieron las variables ang_2_i, i=19 y luego se compuso el vector ang_2. Esto
tambin se puede realizar dentro de un ciclo for. La Figura 17 muestra la m-file que se debe
implementar para calcular el vector ang_2.
FIGURA 17. M-FILE DEL EJEMPLO DE CICLO FOR.
Desde la lnea 8 a la 12 de la Figura 17 se define el bucle for. Dentro de este, se realiza la
asignacin de los elementos del vector ang_2 elevando al cuadrado cada uno de los componentes del
vector ang (definido previamente en la lnea 4). Se observan tambin unas instrucciones en verde,
que corresponden a comentarios. Los comentarios sirven para ayudar al programador a describir
for x = a : b : c
end
21
cada paso del programa y siempre comienzan con el smbolo %, lo que implica que cualquier
instruccin que est a la derecha del % no se ejecutar.
Bucle while 2.3.2
El bucle while se utiliza generalmente cuando el nmero de veces que se debe realizar un clculo
depende de una condicin externa (generalmente el resultado de un clculo dentro del mismo bucle).
Su estructura se detalla en la Figura 18.
FIGURA 18. FORMA PARA DEFINIR UN BUCLE WHILE.
El programa ingresar al bucle while, s y solo s la condicin lgica del mismo sea verdadera (lo
que implica que sta se debe comprobar antes de la definicin del ciclo). Una vez dentro del bucle,
los clculos en su interior se realizarn de manera secuencial y repetitiva hasta que la condicin
lgica sea falsa. Por lo mismo esta condicin debe ser comprobada en cada paso del ciclo.
2.3.2.1 Ejemplo
Se resolver el mismo problema del ejemplo 2.3.1.1 mediante un ciclo while. La Figura 19
muestra la m-file que se debe implementar para calcular el vector ang_2.
FIGURA 19. M-FILE DEL EJEMPLO DE CICLO WHILE.
Desde la lnea 8 a la 14 de la Figura 19 se define el bucle while. Dentro de este, se realiza la
asignacin de los elementos del vector ang_2 elevando al cuadrado cada uno de los componentes del
vector ang (definido previamente en la lnea 4). La definicin inicial de la condicin lgica se realiza
antes del bucle (en la lnea 7) de tal forma que en la primera comprobacin del ciclo, el programa
ingrese al bucle.
while condicin lgica
end
22
Conmutadores 2.4
Los conmutadores en MATLAB, se utilizan cuando se requiere evaluar una expresin u otra,
dependiendo del valor de verdad de una condicin lgica. Las palabras reservadas para estos
conmutadores son if, else y elseif.
La estructura general que tiene la implementacin de conmutadores en MATLAB se resume en
la Figura 20
FIGURA 20. ESTRUCTURA GENERAL DE UN CONMUTADOR EN MATLAB.
2.4.1.1 Ejemplo
Para entender la aplicacin de un conmutador y su integracin con otros elementos como los
bucles, se propone graficar la siguiente funcin definida por tramos.
()
(), < 0
2
,
(2)
Para valores de [5,5].
if condicin lgica 1 (obligatorio)
Asignacin relacionada con la
condicin lgica 1
elseif condicin lgica 2 ( opcional)
Asignacin relacionada con la
condicin lgica 2
elseif condicin lgica n ( opcional)
Asignacin relacionada con la
condicin lgica n
else condicin lgica n ( obligatorio)
Asignacin relacionada con la
condicin lgica n+1 (cuando
ninguna de las anteriores es cierta)
end
23
La Figura 21 muestra la implementacin del ejemplo utilizando: un bucle for y un conmutador
con dos condiciones lgicas.
FIGURA 21. M-FILE DEL EJEMPLO DEL CONMUTADOR IF CON UN BUCLE FOR.
El resultado de este script se representa en la Figura 22.
FIGURA 22. GRFICA DE LA ECUACIN (2).
-5 -4 -3 -2 -1 0 1 2 3 4 5
0
5
10
15
20
25
24
3 Ejercicios
1) Definir un vector t que represente el tiempo de calentamiento de un reactor agitado desde 0
hasta 3 horas, siendo el tiempo de muestreo de 1s.
A partir de la evolucin de la Temperatura del reactor, entregada en el archivo de texto
T_exp.txt, importar los datos y graficar la evolucin del reactor. (utilice la funcin load)
2) La ecuacin 3, muestra la concentracin esperada de la biomasa (X) en estado estacionario,
para el bioreactor continuo de la Figura 23, el cual sigue una cintica de Monod. Para los
parmetros de la Tabla 1, graficar el valor de la biomasa esperada para un valores de la
variable D que van desde 0 hasta 0.4.
=
(3)
TABLE 1 VALOR DE LOS PARMETROS EN EL BIOREACTOR
Parameter Value Parameter Value
0
0.5
0.42
0.35
0
5
0.025
0.09
FIGURA 23. BIOREACTOR DEL EJERCICIO 3.
3) Determinar las races del polinomio
3
3
2
+