Sie sind auf Seite 1von 8

Tutorial de MATLAB

Publicacin: 10 de agosto de 2011


Adaptado de:
http://ocw.mit.edu/OcwWeb/Chemical-
Engineering/10-34Fall-2005/Tools/index.htm
Maestra en Ingeniera Qumica
Aplicaciones Matemticas en Ingeniera Qumica
3003730
Semestre 03, 2011

Alejandro Molina Ochoa, http://www.docentes.unal.edu.co/amolinao/
Facultad de Minas, Universidad Nacional de Colombia, Sede Medelln

1
1 Introduccin
Un computador se limita a recoger nmeros localizados en
una memoria, realizar algunas operaciones algebraicas
simples con estos nmeros y luego los guarda en la misma u
otra memoria. La forma de programar un computador sera
algo como:

1. Encuentre un espacio en memoria para guardar un
nmero real x
2. Encuentre un espacio en memoria para guardar un
nmero real y
3. Encuentre un espacio en memoria para guardar un
nmero real z
4. A la memoria de x asgnele el nmero 3
5. A la memoria y asgnele el nmero 7
6. En la memoria z coloque la suma de 2x y
3y. Donde significa multiplicacin.
Para evitar el procedimiento engorroso del algoritmo
anterior se utilizan lenguajes de computacin, que como
FORTRAN 77 le permiten al usuario de computador realizar
el mismo proceso. Por ejemplo, en FORTRAN 77 este
programa sera:

REAL x, y, z
x = 2
y = 4
z = 2x + 3y

Por ltimo habra que decirle a FORTRAN que nos
muestre el resultado mediante un comando como:
PRINT *, 'z = ',z

Para que este programa corra en FORTRAN es necesario
compilarlo (o sea crear instrucciones como las descritas al
comienzo para que el computador entienda el cdigo fuente)
y generar un ejecutable. Este ltimo es el cual se utilizara
para obtener el resultado de z = 14 en pantalla.
FORTRAN no tiene la posibilidad de realizar grficas, sino
mediante complejos programas. En la prctica, los
resultados que se obtienen en FORTRAN se exportan,
normalmente a programas como EXCEL en el cual se
generan las grficas. EXCEL no fue creado para realizar
grficas de ingeniera sino de negocios. Existen distintos
paquetes de software exclusivamente dedicados a realizar
grficas de ingeniera de la mejor calidad. Entre ellos se
tienen:
- Originlab (http://www.originlab.com/)
- Kaleidagraph (http://www.synergy.com/)
- Sigmaplot
(http://www.systat.com/products/SigmaPlot/)
- Tecplot (http://www.tecplot.com/)

Otros programas compilables, como C++ y C, que se
popularizaron en los 80s, son ms poderosos que FORTRAN
y son los preferidos (especialmente C++) por los expertos en
programacin. Sin embargo, FORTRAN tiene una ventaja
con respecto a ellos y es que es ms rpido. Las ventajas que
la programacin orientada a objetos de C y C++ otorga al
programador de sistemas complejos no son atractivas para la
mayora de los programas de ciencia, los cuales son
relativamente simples y demandan gran velocidad. El
surgimiento de FORTRAN 90 y FORTRAN 95 han
ratificado a FORTRAN como una gran herramienta para los
clculos en ingeniera.
FORTRAN 90/95 incluye tambin facilidades para realizar
programacin en paralelo, la cual gana importancia da a da.
La razn por la cual este curso sigue MATLAB es porque
este ltimo, un lenguaje de programacin interpretado,
reduce el nmero de instrucciones que es necesario ingresar
al computador para obtener un resultado. Por ejemplo, en
MATLAB no es necesario declarar el tipo de variables.
Tampoco se requiere indicar al computador que imprima los
resultados. En un lenguaje interpretado, es posible
interactuar directamente con el computador. Adems se
pueden obtener resultados grficos, los cuales no son
posibles con los lenguajes como FORTRAN, C o C++.
El precio a pagar en un lenguaje interpretado como
MATLAB es la velocidad. En FORTRAN, C o C++ el
programa se compila y luego se ejecutan las instrucciones en
el computador a travs de un programa ejecutable. En
MATLAB, se utilizan operaciones de mquina que leen el
programa original para luego crear otras operaciones de
mquina que ejecutan el programa. Esta gran cantidad de
operaciones disminuye la velocidad de MATLAB frente a
los programas compilados. Sin embargo, para problemas
pequeos y de mediano tamao, MATLAB es una opcin
ideal.
Por otro lado, MATLAB tiene gran cantidad de funciones
establecidas las cuales se pueden utilizar sin necesidad de
acoplarlas con el programa original, como s es necesario en
los lenguajes compilados. Adems los programas tienden a
ser de menor longitud en MATLAB, dada la facilidad de
notacin matricial, como veremos ms adelante.
Otras ventajas de MATLAB incluyen la posibilidad de
compilar los programas de MATLAB de tal forma que
puedan ser utilizados en C o C++. Adems, programas
realizados en FORTAN o C o C++ se pueden correr desde el
mismo MATLAB.

2 Operaciones bsicas con MATLAB
2.1 Operaciones con escalares
Los comentarios (es decir las lneas en el programa que no
lee el programa) en MATLAB se crean con el smbolo %
anteponiendo el texto.
Para declarar una variable y alocarle un valor basta con
escribir:
x=2

Tutorial de MATLAB
Publicacin: 10 de agosto de 2011
Adaptado de:
http://ocw.mit.edu/OcwWeb/Chemical-
Engineering/10-34Fall-2005/Tools/index.htm
Maestra en Ingeniera Qumica
Aplicaciones Matemticas en Ingeniera Qumica
3003730
Semestre 03, 2011

Alejandro Molina Ochoa, http://www.docentes.unal.edu.co/amolinao/
Facultad de Minas, Universidad Nacional de Colombia, Sede Medelln

2
Si se quiere evitar que el texto aparezca en la pantalla se
coloca un punto y coma al final.
El comando:
x=3;
no presenta nada en pantalla. Otras variables se pueden
declarar y asignarle valores:
y = 2*x;
x = x + 1;
z = 2*x;
Para conocer las variables que tenemos se pueden escribir
los comandos who o whos. Se pueden liberar variables
mediante el comando clear. Se pueden borrar todas las
variables mediante el comando clear all. Se recomida que
este comando aparezca al comienzo de cada programa que
estemos desarrollando.
2.2 Operaciones con vectores
Se pueden declarar mediante:
x(1) = 1;
x(2) = 4;
x(3) = 6;
Sin embargo, esta forma no es muy recomendada. Es
preferible utilizar:
y = [1 4 6]
Lo anterior crea un vector fila. Para crear un vector
columna se puede escribir:
yT = y
o desde un principio colocar:
yT = [1; 4; 6];
El tamao de los vectores se encuentra mediante los
comandos:
size(T);
size(yT);
o mediante el comando:
length(T);
La suma de vectores y la multiplicacin por un escalar es
simplemente:
z = x + y
v = 2*x
Se puede utilizar tambin el operador punto . para
decirle a MATLAB que la operacin solo se realiza sobre
cada elemento. Una instruccin en un bucle que sea y(i) =
2*x(i) + z(i)^2 + 1, donde i es cada elemento en el vector, se
puede representar en MATLAB como:
y = 2.*x + z.^2 + 1
Las operaciones de producto punto y producto cruz en
MATLAB son simplemente:
dot(x,y)
z=cross(x,y)
Se puede definir tambin un vector que comience un valor
a y termine en un valor b con un espaciado d como:
v = [a:d:b].
v = [0 : 0.1: 0.5];
v2 = [0 : 0.1: 0.49];
Un vector con n divisiones entre a y b se puede defiir
como v = linespace(a,b,n)
v2 = linspace(0,1,5)

2.3 Operaciones con matrices
Las matrices se pueden declarar como:
A = [1 2 3; 4 5 6; 7 8 9]

B = [1,2,3; 4,5,6; 7,8,9]
O crearlas a partir de filas:
row1 = [1 2 3];
row2 = [4 5 6];
row3 = [7 8 9];
C = [row1; row2; row3]
o columnas.
column1 = [1; 4; 7];
column2 = [2; 5; 8];
column3 = [3; 6; 9];
D = [column1 column2 column3]
Varias matrices se pueden combinar.
M = [A B; C D]
Y se pueden obtener vectores a partir de matrices:
row1 = C(1,:)
column2 = D(:,2)
v = M(1:4,1)
w = M(2,2:4)
C = M(1:4,2:5)
Los comandos utilizados para vectores como who, size,
transpuesta (), suma, multiplicacin por escalar, operador
punto tambin se utilizan con matrices.
Una matriz cuadrada con todos sus elementos como ceros
de tamao nn se define:
C = zeros(n)
Y la matriz identidad como:
D = eye(5)
2.4 Variables tipo texto (string)
Las variables tipo texto se definen en MATLAB mediante
comillas simples.
Las variables texto se pueden combinar de igual manera
que como se combinan matrices:
word1 = 'Numerical';
word2 = 'Methods';
word3='Course';
phrase3 = [word1, word2, word3]
Se pueden convertir enteros a strings:
icount = 1234;
phrase5 = ['Value of icount = ', int2str(icount)]
O reales a strings:
Temp = 29.34372820092983674;
phrase6 = ['Temperature = ',num2str(Temp,5)]
phrase7 = ['Temperature = ',num2str(Temp,10)]


Tutorial de MATLAB
Publicacin: 10 de agosto de 2011
Adaptado de:
http://ocw.mit.edu/OcwWeb/Chemical-
Engineering/10-34Fall-2005/Tools/index.htm
Maestra en Ingeniera Qumica
Aplicaciones Matemticas en Ingeniera Qumica
3003730
Semestre 03, 2011

Alejandro Molina Ochoa, http://www.docentes.unal.edu.co/amolinao/
Facultad de Minas, Universidad Nacional de Colombia, Sede Medelln

3
2.5 Operaciones bsicas
Potencias:
2^3,
2^3.3,
Raz cuadarada:
sqrt(27),
Otros operadores:
abs(2.3)
abs(-2.3)
sign(2.3)
sign(-2.3)
sign(0)
a=exp(2.3) % exponencial
log(a) %logaritmo natural
log10(a) %logaritmo en base 10
pi, 2*pi
sin(0),
sin(pi/2),
cos(0),
tan(pi/4),
cot(pi/4),
sec(pi/4),
csc(pi/4)
asin(1),
acos(1),
atan(1),
acot(1),
asec(1),
acsc(1)
sinh(pi/4),
cosh(pi/4),
tanh(pi/4),
coth(pi/4)
sech(pi/4)
csch(pi/4)
asinh(0.5)
acosh(0.5)
atanh(0.5)
acoth(0.5)
asech(0.5)
acsch(0.5)

Algunas operaciones de redondeo son:
round(1.1), % entero mas cercano
fix(-3.1),: %entero ms cercano en la direccin de 0
floor(-3.1) %entero ms cercano menor o igual
ceil(-3.1) %entero ms cercano mayor o igual
rem(3,2) % residuo de division
mod(28.36,2.3) : %mdulo de divisin

Nmeros complejos
z = 3.1-4.3*i
conj(z) %conjugado de z
real(z) %parte real part of z
imag(z) %parte imaginaria de z,
abs(z) %valor absolute de la norma
angle(z) %ngulo de fase teta con z = r*exp(i*teta)
abs(z)*exp(i*angle(z)) %equivale a z

Transformacin de coordenadas
Polares:
x=1; y=1;
[theta,r] = cart2pol(x,y)
[x,y] = pol2cart(theta,r)

Esfricas:
x=1; y=1; z=1;
[alpha,theta,r] = cart2sph(x,y,z)
[x,y,z] = sph2cart(alpha,theta,r)

3 Estructuras de programacin
3.1 Ciclos for
La estructura de los ciclos for en Matlab es:
for i=1:2:10
disp(i);
end
En este caso se muestran los nmeros de 1 a 9 con un
intervalo de 2.

3.2 Estructuras tipo if, case y operadores de
comparacin
Permiten comparar y tomar decisiones sobre los
resultados.
Igualdad:
(1==2)
(1==1)
No igual:
(1~=1)
(1~=2)
Menor que:
(1<2)
Mayor que:
(1>2)
Mayor o igual:
(1>=2)
Menor o igual:
(1<=2)
Las operaciones anteriores se pueden combinar mediante
el y lgico:
((1==1)&(8.7==8.7)&(1<2))
((1==1)&(8.7==8.7)&(1>2))
O el o lgico:
or(i1,i2),
or(i1,i3),
or(i2,i2)
Tambin se pueden extender a combinacin de varias
posibilidades. Para el y lgico se tiene:

Tutorial de MATLAB
Publicacin: 10 de agosto de 2011
Adaptado de:
http://ocw.mit.edu/OcwWeb/Chemical-
Engineering/10-34Fall-2005/Tools/index.htm
Maestra en Ingeniera Qumica
Aplicaciones Matemticas en Ingeniera Qumica
3003730
Semestre 03, 2011

Alejandro Molina Ochoa, http://www.docentes.unal.edu.co/amolinao/
Facultad de Minas, Universidad Nacional de Colombia, Sede Medelln

4
i1 = 1; i2 = 0; i3=-1;
all([i1 i2 i3]), all([i1 i1 i3])
Para el o lgico el comando es:
any([i1 i2 i3]), any([i2 i2 i2]), any([i1 i2 i2 i2]),
Las operaciones de comparacin descritas anteriormente se
combinan con las unidades de control if para permitir el
flujo del cdigo:
logictest1 = 0; logictest2 = 1; logictest3 = 1;
if(logictest1)
disp('Executing block 1');
elseif(logictest2)
disp('Executing block 2');
elseif(logictest3)
disp('Executing block 3');
else disp('Execute end block');
end

Las estructuras case son similares a las estructuras if
paro permiten escoger entre varias opciones:
for i=1:4
switch i;
case {1}
disp('i is one');
case {2}
disp('i is two');
case {3}
disp('i is three');
otherwise
disp('i is not one, two, or three');
end
end
En ciclo while desarrolla una tarea mientras un valor
est por debajo de uno establecido. La nomenclatura de
ciclo while en MATLAB es:
error = 283.4;
tol = 1;
factor = 0.9;
while (error > tol)
error = factor*error;
disp(error)
end
3.3 Entrada y salida de pantalla
El comando bsico para salida de informacin en
MATLAB es disp. Cuando se trabaja con nmeros es
necesario utilizar los comandos num2str e int2str:
i = 2934;
x = 83.3847;
disp(['i = ' int2str(i)]);
disp(['x = ' num2str(i)]);
El comando bsico de entrada de informacin desde
pantalla es input:
i = input('Input integer i : ');
x = input('Input real x : ');
v = input('Input vector v : '); %Ensaye ingresando [1 2 3]
i, x, v

4 Formatos simples para graficar
La ingeniera ha despertado en nosotros la habilidad para
entender los procesos en forma grfica. Pero al mismo
tiempo nos ha acostumbrado mirar a grficas para aclarar el
comportamiento del proceso. Una de las ventajas principales
de MATLAB es una fuerte interfase grfica que nos permite
analizar la informacin inmediatamente la hemos generado.
4.1 Grficas en 2-D
El comando principal es plot. Para graficar la funcin
seno entre 0 y 2pi se necesita:
x = linspace(0,2*pi,200);
f1 = sin(x);
plot(x,f1);
Adicionalmente se puede agregar ttulo general y para los
diferentes ejes:
title('Plot of f_1 = sin(x)');
xlabel('x');
ylabel('f_1');
Cambiar los lmites de los ejes:
axis([0 2*pi -1.1 1.1]);
[xmin xmax ymin ymax]
Combinar dos curvas en una misma grfica:
f2 = cos(x);
hold on; %Con hold off se remueve la condicin
hold
plot(x,f2);
Alternativamente se puede escribir:
plot(x,f1,x,f2)
para genera una figura con las dos funciones f1 y f2
Y agregar un nombre para las series:
legend('f_1', 'f_2');
Tambin se puede colocar un texto en una posicin fija del
cursor:
gtext('f_1=f_2 at two places');

4.2 Figuras en 3-D
Para poder genera una grfica en 3-D, primero generamos
una malla que contenga los valores para los ejes X y Y de
nuestra grfica. Esto se logra con el comando meshgrid:
x = 0:0.2:2*pi;
y = 0:0.2:2*pi;
[XX,YY] = meshgrid(x,y);
Mientras x y y son vectores, XX y YY son matrices
Creamos ahora una matriz para que complete el eje Z de
nuestra grfica:
Z1 = sin(XX).sin(YY);
Y generamos distintos tipos de grficas en tres
dimensiones:
figure; mesh(XX,YY,Z1);

Tutorial de MATLAB
Publicacin: 10 de agosto de 2011
Adaptado de:
http://ocw.mit.edu/OcwWeb/Chemical-
Engineering/10-34Fall-2005/Tools/index.htm
Maestra en Ingeniera Qumica
Aplicaciones Matemticas en Ingeniera Qumica
3003730
Semestre 03, 2011

Alejandro Molina Ochoa, http://www.docentes.unal.edu.co/amolinao/
Facultad de Minas, Universidad Nacional de Colombia, Sede Medelln

5
xlabel('x'); ylabel('y'); zlabel('z'); title('sin(x)*sin(y)');

figure; surf(XX,YY,Z1);
xlabel('x'); ylabel('y'); zlabel('z'); title('sin(x)*sin(y)');

figure; contour(XX,YY,Z1);
xlabel('x'); ylabel('y'); zlabel('z'); title('sin(x)*sin(y)');

figure; contourf(XX,YY,Z1); colorbar;
xlabel('x'); ylabel('y'); zlabel('z'); title('sin(x)*sin(y)');

figure; contour3(XX,YY,Z1);
xlabel('x'); ylabel('y'); zlabel('z'); title('sin(x)*sin(y)');

4.3 Figuras mltiples
Para combinar diferentes figuras se utiliza el comando
subplot(nf,nc,n) el cual genera una grfica con nf filas y
nc columnas donde n es la posicin de la figura n en la
figura total subplot:
x = 0:0.2:2*pi;
y = 0:0.2:2*pi;
f1 = sin(x);
f2 = cos(y);
[XX,YY] = meshgrid(x,y);
Z1=sin(XX).*cos(YY);
figure;
subplot(2,2,1);
plot(x,f1); title('sin(x)');
xlabel('x'); ylabel('sin(x)'); axis([0 2*pi -1.1 1.1]);
subplot(2,2,2);
plot(y,f2); title('cos(y)');
xlabel('y'); ylabel('cos(y)'); axis([0 2*pi -1.1 1.1]);
subplot(2,2,3);
surf(XX,YY,Z1); title('sin(x)*cos(y)');
xlabel('x'); ylabel('y'); zlabel('z');
subplot(2,2,4);
contourf(XX,YY,Z1); colorbar; title('sin(x)*cos(y)');
xlabel('x'); ylabel('y');

5 Operaciones avanzadas con matrices
5.1 Matrices dispersas
Para entender el concepto de matrices dispersas tomemos
el ejemplo de una matriz que se genera cuando se utilizan
diferencias finitas (ms adelante veremos esto qu es) para
resolver ecuaciones diferenciales. Esta matriz luce as:


Como se nota, la matriz consiste principalmente de ceros.
Si bien en el ejemplo anterior solo se tiene una matriz de 15
15, el uso de memoria solo para asignar los valores cero
ser mucho ms grave en una matriz de mayor tamao, como
las que frecuentemente se utilizan en la solucin de sistemas
numricos en ingeniera.
La discusin a continuacin presenta inicialmente la
formacin de una matriz no dispersa. Posteriormente
realizamos clculos con una matriz dispersa y comparamos
resultados.

x = 1:num_pts;
Afull=zeros(100,100);
Afull(1,1) = 1;
Afull(num_pts,num_pts) = 1;
for i=2:(num_pts-1)
Afull(i,i) = 2;
Afull(i,i-1) = -1;
Afull(i,i+1) = -1;
end
BC1 = -10;
BC2 = 10;
b_RHS = linspace(0,0,num_pts)';
b_RHS(1) = BC1;
b_RHS(num_pts) = BC2;
b_RHS(2:(num_pts-1)) = 0.05;
Para resolver el sistema utlizamos:
f = Afull\b_RHS;
Graficamos la solucin
figure; plot(x,f);
title('PDE solution from FD-CDS method (full matrix)');
xlabel('x'); ylabel('f(x)');
Observemos ahora la naturaleza de la matriz Afull con el
comando spy el cual coloca un punto donde se encuentre
un elemento distinto a cero en la matriz.
figure;
spy(Afull); title('Structure of Afull');


|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.
|

\
|














1 1 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0 0 0 0 0 0 0 0 0 0 0
0 1 2 1 0 0 0 0 0 0 0 0 0 0
0 0 1 2 1 0 0 0 0 0 0 0 0 0
0 0 0 1 2 1 0 0 0 0 0 0 0 0
0 0 0 0 1 2 1 0 0 0 0 0 0 0
0 0 0 0 0 1 2 1 0 0 0 0 0 0
0 0 0 0 0 0 1 2 1 0 0 0 0 0
0 0 0 0 0 0 0 1 2 1 0 0 0 0
0 0 0 0 0 0 0 0 1 2 1 0 0 0
0 0 0 0 0 0 0 0 0 1 2 1 0 0
0 0 0 0 0 0 0 0 0 0 1 2 1 0
0 0 0 0 0 0 0 0 0 0 0 1 2 1
0 0 0 0 0 0 0 0 0 0 0 0 1 1

Tutorial de MATLAB
Publicacin: 10 de agosto de 2011
Adaptado de:
http://ocw.mit.edu/OcwWeb/Chemical-
Engineering/10-34Fall-2005/Tools/index.htm
Maestra en Ingeniera Qumica
Aplicaciones Matemticas en Ingeniera Qumica
3003730
Semestre 03, 2011

Alejandro Molina Ochoa, http://www.docentes.unal.edu.co/amolinao/
Facultad de Minas, Universidad Nacional de Colombia, Sede Medelln

6
El nmero nz representa el nmero de elementos que no
son cero en la matriz y para esta matriz representa un
porcentaje muy bajo del total de elementos de la matriz:
num_elements = num_pts*num_pts;
nzA = nnz(Afull);
fraction_filled = nzA/num_elements
Ahora borramos todas las variables, excepto Afull:
clear x f b_RHS BC1 BC2 i num_elements nzA
fraction_filled;

Realizaremos ahora el mismo anlisis, pero considerando
una matriz dispersa:
Asparse = sparse(Afull)
La matriz Asparse remplaza la matriz Afull por una matriz
de NZ por 3. En la primera est el nmero de la fila de la
matriz, en la segunda el nmero de la columna y en la tercera
el valor de cada elemento en Afull. La memoria requerida
para manejar Asparse es mucho menor que la requerida para
manejar Afull como lo muestran los siguientes comandos:

whos Afull Asparse;
clear Asparse;
Con las matrices dispersas se pueden utilizar tambin
operaciones. MATLAB tiene distintos comandos que
permiten reducir considerablemente los requerimientos de
memoria cuando se trabaja con estos sistemas.

5.2 Operaciones tpicas con marices y valores
caractersticos (eigenvalues)
El determinante de una matriz cuadrada se calcula
mediante det:
A = rand(4); %crea una matriz aleatoria de 4 3
det(A)
Otras operaciones tpicas son:
rank(A)
trace(A)
norm(A)
cond(A)
A_inv=inv(A)
Los valores caractersticos se calculan como:
eig(A)
Y los vectores caractersticos:
[V,D] = eig(A)
V contiene los vectores caractersticos y D los valores
caractersticos.

6 Lectura y escritura de archivos
6.1 Lectura y escritura de archivos binarios
MATLAB guarda el entorno en el cual est trabajando en
una memoria. Este entorno se puede grabar y recuperar en el
caso que se necesite suspender el trabajo en una sesin de
MATLAB para luego reiniciarla.

num_pts =10;
Afull=zeros(num_pts,num_pts);
Afull(1,1) = 1;
Afull(num_pts,num_pts) = 1;
for i=2:(num_pts-1) sum over interior points
Afull(i,i) = 2;
Afull(i,i-1) = -1;
Afull(i,i+1) = -1;
end
b = linspace(0,1,num_pts)';
x = Afull\b;
whos; display
El comando "save" graba todo lo anterior en un arrchivo.
En el ejemplo anterior este arrchivo es mem_store1.
save mem_store1.mat;
clear all;
whos;
El comando load se puede utilizar para recuperar la
informacin guardada en el archivo mem_store1.mat
load mem_store1.mat;
whos;
Es importante recalcar que el archibo *.mat est en
formato binario y solo puede ser ledo por MATLAB
mediante el comando load.

6.2 Lectura y escritura de archivos ASCII
Contrario a los archivos binarios, los archivos ASCII
pueden ser ledos mediante distintos programas.
Carguemos primero el sistema para tener algo que guardar
en un archivo:
num_pts =10;
Afull=zeros(num_pts,num_pts);
Afull(1,1) = 1;
Afull(num_pts,num_pts) = 1;
for i=2:(num_pts-1)
Afull(i,i) = 2;
Afull(i,i-1) = -1;
Afull(i,i+1) = -1;
end
b = linspace(0,1,num_pts)';
x = Afull\b;
whos
Para escribir los contenidos de Afull en un arrchivo
ASCII:
save store1.dat Afull -ascii;
Para leerlos:
load store1.dat;
La opcin -double se puede agregar al final del comando
para garantizar que se guarden archivos con el doble de
digitos:
delete store1.dat;

Tutorial de MATLAB
Publicacin: 10 de agosto de 2011
Adaptado de:
http://ocw.mit.edu/OcwWeb/Chemical-
Engineering/10-34Fall-2005/Tools/index.htm
Maestra en Ingeniera Qumica
Aplicaciones Matemticas en Ingeniera Qumica
3003730
Semestre 03, 2011

Alejandro Molina Ochoa, http://www.docentes.unal.edu.co/amolinao/
Facultad de Minas, Universidad Nacional de Colombia, Sede Medelln

7
save store1.dat Afull -ascii -double;
type store1.dat
Un formato ms elaborado de escritura y lectura de
archivos ASCII es posible en MATLAB siguiendo un
formato similar al utilizado por el lenguaje de programacin
C:
FID = fopen(FILENAME,PERMISO)
donde PERMISO puede ser:
'r' = read only
'w' = write (create if needed)
'a' = append (create if needed)
'r+' = read and write (do not create)
'w+' = create for read and write
'a+' = read and append (create if needed)
FID_out = fopen('test_io.dat','w');
ls
En el siguiente paso escribemos el vector b como vector
columna. En el formato, \n es equivalente al carcter
cambio de prrafo (Retorno) y 10.5f especifica la escritura
de un nmero real (floating) con cinco nmeros luego del
punto decimal y un total de 10 nmeros:
for i=1:length(b) fprintf(FID_out,'10.5f \n',b(i)); end
Luego de cerrar la alimentacin se pueden mostrar los
resultados:
fclose(FID_out);
disp('Contents of test_io.dat : ');
type test_io.dat;
fprintf se puede utilizar para escribir una matriz:
C = [1 2 3; 4 5 6; 7 8 9; 10 11 12];
FID_out = fopen('test_io.dat','a');
fprintf(FID_out,'\n');
for i = 1:size(C,1)
fprintf(FID_out,'5.0f 5.0f 5.0f \n',C(i,:));
end
fclose(FID_out);
disp('Contents of test_io.dat : ');
type test_io.dat;
Para leer los contenidos de un archivo utilizamos "fscanf",
el cual opera en forma similar a "fprintf":
FID_in = fopen('test_io.dat');
b_new = linspace(0,0,num_pts)';
for i=1:num_pts
b_new(i) = fscanf(FID_in,'f',1);
end
b_new

7 Funciones en MATLAB
Los archivos en MATLAB tienen la extensin .m.
Existen dos tipos de archivos. Uno principal que es el que
maneja la operacin global del programa. Equivale a
escribir los comandos que se ingresan en la pantalla de
MATLAB para que se corran todos en una sola tanda.
El segundo tipo de archivos, denominados funciones,
tambin tienen la extensin .m pero tienen como primera
lnea no comentada el siguiente texto:
function [out1,out2,...] = filename(arg1,arg2,...);
filename corresponde al mismo nombre del archivo. arg1
y arg2 son los argumentos de la funcin y pueden ser reales,
enteros, string, matrices, o vectores. out1 y out2 son los
resultados de la funcin que se pasan al programa principal.
Para llamar a la funcin desde el programa principal basta
con invocar la funcin mediante:
[outvar1,outvar2,...] = filename(var1,var2,...)
Las variables outvar1, outvar2 corresponden a los valores
out1 y out2. De igual manera arg1, arg2 corresponden a var1
y var2.
Las funciones se utilizan pues facilitan la escritura de los
programas. Es ms sencillo controlar estructuras pequeas y
simples que programas de mltiples lneas.
En un lenguaje compilable como FORTRAN, se produce
un acoplamiento de los diferentes programas durante el
proceso de compilacin. De esta forma el programa
ejecutable sabe cundo llamar y cmo encontrar una funcin.
En MATLAB, donde no hay compilacin, es imperativo
notificar al sistema dnde se encuentran las funciones que va
a utilizar. Para hacer esto se utiliza el comando addpath
que describiremos ms adelante. Por eso es fundamental que
el nombre de la funcin y el del archivo .m sean iguales.
De lo contrario, MATLAB no puede encontrar la funcin.

7.1 Escritura y ejecucin de archivos .m
Los archivos .m se pueden editar con el editor de textos
de MATLAB. Al ejecutarlos, simplemente se siguen las
diferentes instrucciones en ellos especificadas. Si bien
siempre se tiene un archivo maestro, lo ms comn es que
estos archivos maestros llamen a otros denominados
funciones y que se describen en la prxima seccin.

7.2 Programacin estructurada con funciones.
MATLAB necesita saber dnde se encuentran las
funciones. Cuando se llama una funcin bien sea en la
ventana interactiva o en el cdigo principal, MATLAB busca
en una lnea de directorios en los cuales se ha especificado
existan estas funciones. Por lo tanto es necesario especificar
el directorio en el cual se encuentran las funciones que
vamos a utilizar en MATLAB. El comando path nos
muestra los directorios en los cuales busca MATLAB y el
comando pwd el directorio actual.
Se puede utilizar el comando addpath para agregar un
nuevo subdirectorio a la lista de directorios que busca
MATLAB. El comando rmpath borra subdirectorios de
esa lista.
addpath(pwd); path
Las funciones terminan con la lnea return.

Tutorial de MATLAB
Publicacin: 10 de agosto de 2011
Adaptado de:
http://ocw.mit.edu/OcwWeb/Chemical-
Engineering/10-34Fall-2005/Tools/index.htm
Maestra en Ingeniera Qumica
Aplicaciones Matemticas en Ingeniera Qumica
3003730
Semestre 03, 2011

Alejandro Molina Ochoa, http://www.docentes.unal.edu.co/amolinao/
Facultad de Minas, Universidad Nacional de Colombia, Sede Medelln

8
7.3 Funciones en lnea
En algunos casos puede ser conveniente utilizar una
funcin dentro del programa principal. En tal caso se utilize
el comando inline. La funcin f1(x) = 2*x + 3*x^2 se
puede definir en lnea mediante:
f1 = inline('2*x + 3*x^2');
y para llamarla basta:
f1(1), f1(23)

7.4 Funciones como argumentos de funciones
La funcin de MATLAB feval se puede utilizar para
evaluar una funcin. De esta forma se puede tener una
funcin como argumento de otra funcin. Los comandos
func_name = 'sin
feval(func_name,pi)
dan como resultado la evaluacin de sen(pi).

8 Estructuras de datos
En ingeniera, la forma tpica de expresar estructuras de
datos son vectores y matrices. Sin embargo, MATLAB
brinda la posibilidad de crear otras estructuras que pueden
ser ms complejas con mltiples entradas de texto, nmeros
reales y combinaciones de estos.
Los comandos:
NameData.First = 'John';
NameData.MI = 'J';
NameData.Last = 'Doe';
Definen una estructura llamada NameData que tiene la
informacin de un estudiante. Luego podemos crear otra
estructura llamada StudentData que va a incluir NameData
ms otras variables:
StudentData.Name = NameData;
StudentData.Status = 'ChE grad 1';
StudentData.HW = 10;
StudentData.Exam = linspace(100,100,3);
Los resultados se pueden ver mediante:
StudentData
StudentData.Name
StudentData.Exam

Las estructuras se pueden utilizar como argumentos de
funciones y se pueden crear matrices y vectores de
estructuras.

9 El compilador de MATLAB
Para mejorar su portabilidad y velocidad, los programas de
.m se pueden compilar. En tal caso solo se debe operar
con funciones. Un ejemplo de instrucciones a utilizar para la
compilacin es:

mcc -B sgl ...
make_plot_trig ...
plot_trig_1 ...
trig_func_1 ...
get_input_scalar ...
Donde los tres puntos representan continuacin de lnea y
cada lnea son diferentes funciones dentro del sistema.

Das könnte Ihnen auch gefallen