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