Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
I INTRODUCCIN
1.1 Definicin y usos Matlab es un lenguaje de computacin tcnica de alto desempeo, que emplea la computacin donde los problemas y las soluciones son expresados en una notacin matemtica familiar. Los usos tpicos de Matlab incluyen: a) Computacin y matemticas, b) Desarrollo de algoritmos, c) Manejo de datos, d) Modelacin, simulacin y desarrollo de prototipos, e) Anlisis de datos, exploracin y visualizacin, f) Grficos de ciencia e ingeniera, g) Desarrollo de aplicaciones, que incluyen construccin de interfaces para graficacin.
Barra de mens
Barra estndar
Apuntador y cursor Ventana de directorio actual Recuadro de directorio actual Ventana de comandos Ventana de historial de comandos
1.3 Variables, nmeros y operadores en Matlab Variables: A diferencia de otros lenguajes de programacin, matlab no requiere de declaracin de variables o dimensionamiento de matrices, pues las crea automticamente cuando encuentra el nombre por primera vez, debe recalcarse que distingue entre asignacin de variables con letras minsculas y letras maysculas, ejemplo:
Si se desea que Matlab no despliegue valores de variables o matrices, es necesario terminar cada sentencia con punto y coma, ejemplo:
>>concentracion=100;
Nmeros: Para el almacenamiento de nmeros internamente se usa un formato de precisin de aproximadamente 16 dgitos en un intervalo entre 10-308 a 10308, denominado long. Para expresar la escala de la potencia 10 se usa la letra e o E; los nmeros imaginarios debern acompaarse ya sea de la letra i o j, algunos ejemplos de nmeros en Matlab son:
2.7183
1.55E15
2.23E-12
6.67j
Operadores de elemento a elemento suma,.+; resta, .- ; multiplicacin, .*, divisin, ./; recproco, .\; potencia .^
1.4 Funciones internas Al igual que cualquier paquete matemtico se cuenta con funciones matemticas del tipo trigonomtrico, exponencial, complejas y redondeo, las cuales se citan a continuacin en la tabla siguiente:
Tabla 1.1 Funciones matemticas Trigonomtricas sin sinh asin asinh cos cosh seno seno hiperblico arco seno arco seno hiperblico coseno coseno hiperblico
acosh arco coseno hiperblico tan tanh atan atan2 atanh sec sech asec tangente tangente hiperblico arco tangente arco tangente en los 4 cuadrantes arco tangente hiperblica secante secante hiperblica arco secante
asech arco secante hiperblica csc csch acsc cosecante cosecante hiperblica arco cosecante
acsch arco cosecante hiperblica cot coth acot acoth cotangente cotangente hiperblica arco cotangente arco cotangente hiperblica
Tabla 1.1 Funciones matemticas (continuacin) Exponenciales exp log log10 log2 pow2 sqrt conj imag real exponencial logaritmo natural logaritmo de base 10 logaritmo de base 2 potencia de base 2 raz cuadrada complejo conjugado parte imaginaria del nmero complejo parte real del nmero complejo Redondeo y residuo fix floor ceil complejo conjugado redondea a menos infinito redondea a ms infinito
round redondea al entero ms cercano mod rem sign residuo de la divisin residuo signo
1.5 Grficos en dos y tres dimensiones Instruccin plot Sintaxis >>plot(x,y) Ejemplo >>x=[0:pi/100:2*pi]; >>y=sin(x); >>plot(x,y)
El ejemplo anterior generara la funcin seno como se muestra a continuacin, las leyendas de los ejes y ttulos se pueden editar desde el entorno grfico
Ejemplo >> x=[0,0]; >> y=[-5,5]; >> plot(x,y); >> hold on; >> x=[-5,5]; >> y=[0,0]; >> plot(x,y); >> x=[-5:0.5:5]; >> y=sqrt(1-x); >> plot(x,y); >>plot(x,-y);
Esta serie de instrucciones permitir desplegar la figura de una parbola, con los ejes respectivos X y Y; si se desea editar puede hacerse desde la ventana de la misma grfica
Una manera alterna de realizar varias grficas en una misma ventana de despliegues grficos, puede realizarse de la manera como indica el ejemplo siguiente. >> t=[0:pi/100:pi]; >> x=cos(t); >> y=sin(t); >> plot(t,x,'c-',t,y,'m--'); lo cual producira
1
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0.5
1.5 t
2.5
3.5
Grficas en tres dimensiones En este tipo de grficas se emplean las instrucciones mesh y surf, tal como se observa en el siguiente ejemplo:
0.8 0.6
>> surf(x,y,z);
0.8 0.6
0.4
0.2
0 -0.2
Funcin roots Sintaxis >>variable=roots([ pnp2 p1 p0]); o bien >>p=[ pnp2 p1 p0]; >>variable=roots(p); Ejemplo: encontrar las races del polinomio x 4 + 6 x 3 + 7 x 2 6 x 8 = 0 . >> p=[1 6 7 -6 -8]; >> raices=roots(p) raices = -4.0000 1.0000 -2.0000 -1.0000
Funcin polyval Verifica que las races encontradas de un polinomio sean satisfactorias Sintaxis >>polyval([pn++p2+p1+p0], variable) Ejemplo: con respecto al ejemplo anterior
Funcin solve Sintaxis >>solve(ecuacin,variable_a_resolver) El uso de esta funcin se ilustra mediante el ejemplo siguiente: Ejemplo: resuelva la ecuacin del ejemplo anterior. >> solve('x^4+6*x^3+7*x^2-6*x-8',x) ans = -1 1 -2 -4 o bien >> solve('x^4+6*x^3+7*x^2-6*x-8') solamente Ejemplo: Calcule el volumen molar a 100 oC y 50 atm para los gases dados en la tabla siguiente, mediante la ecuacin de estado de Redlich-Kwong dada por la expresin: a P + T 1 / 2V (V + b ) (V b ) = RT Donde: P: presin en atm T: temperatura en K V: volumen molar en l/gmol R: constante universal de los gases en atm l/gmol K Los valores de a y b se calculan mediante:
a = 0.4278 R 2Tc Pc
2.5
, b = 0.0867
RTc Pc
Para el oxgeno Pc=49.70 atm, Tc=154.40 K. >> t=373; >> p=50; >> pc=49.7; >> tc=154.40; >> r=0.0821; >> a=0.4278*r^2*tc^2.5/pc;
>> b=0.0867*r*tc/pc; >> a a= 17.1866 >> b b= 0.0221 >> sol=solve('(50+17.1866/(373^0.5*v*(v+0.0221)))*(v-0.0221)-0.0821*373','v'); >> double(sol) ans = 0.6073 0.0026 + 0.0253i 0.0026 - 0.0253i
Advierta que la solucin se asigna a la variable sol, para despus desplegarla en forma de punto flotante con la funcin double. Otra opcin para resolver el problema, es mediante el empleo de la instruccin syms la cual le da un valor simblico a alguna variable.
Instruccin syms Sintaxis >>syms nombre_variable Ejemplo: >> syms v; >> t=373; >> p=50; >> pc=49.7; >>tc=154.4; >> r=0.0821; >> a=0.4278*r^2*tc^2.5/pc a= 17.1866 >> b=0.0867*r*tc/pc b= 0.0221 10
>> f=(p+a/(t^0.5*v*(v+b)))*(v-b)-r*t; >>sol= solve(f); >> double(sol) 0.6073 0.0026 + 0.0253i 0.0026 - 0.0253i
11
3.2 Vectores La forma de declarar vectores en Matlab se muestra a continuacin. Syntaxis >>variable=[nmero 1, nmero 2,, nmero n] o bien >>variable=[nmero1 nmero 2 nmero n];
Donde los nmeros no han sido separados por ningn signo de puntuacin. Ejemplo:
>> z=[2 4 5 6 7]; si se omite el punto y coma, se despliegan los valores del vector, como se haba advertido anteriormente. >> z=[2 4 5 6 7] z= 2 4 5 6 7
3.3 Matrices Las matrices se designan segn la sintaxis presentada enseguida. Sintaxis >>variable=[ vector1; vector2; ;vectorn] Ejemplo
Una forma ms simple es como se muestra >> z=[2 3 4; 1 2 3; 3 4 5] (se han omitido los corchetes de los vectores)
12
z= 2 1 3 3 2 4 4 3 5
3.4 Transpuesta de una matriz La transpuesta de una matriz designada como A ser A Sintaxis >>z; Ejemplo: la matriz transpuesta de la matriz que se cit anteriormente ser >> z' ans = 2 3 4 1 2 3 3 4 5
3.6 Inversa de una matriz Sintaxis >>inv(nombre_de _la_matriz) Ejemplo: para la matriz A del ejemplo anterior
>> inv(A)
13
>> A
A= 1 3 8 5 5 9 -8 -2 -1
>> B=inv(A) B= 0.2500 -1.2885 -0.2500 -0.2500 >> A*B ans = 1.0000 0 0 0 0 0.5769
3.8 Solucin de sistemas de ecuaciones lineales Como se sabe la solucin se fundamenta en el hecho siguiente
Ax = b A 1 * Ax = A 1 * b I * x = A 1 * b
14
2 x1 + 4 x 2 + 6 x3 = 18 8 x1 + 5 x 2 + 6 x3 = 40 3 x1 + x 2 2 x3 = 4
>> A=[2 4 6; 8 5 6; 3 1 -2]; >> b=[18; 40; 4]; >> x=inv(A)*b x= 4.0000 -2.0000 3.0000 Observe que los elementos del vector b son separados por punto y coma, de no haber realizado esto, se empleara para el clculo la transpuesta de b, como se muestra
>> A=[2 4 6; 8 5 6; 3 1 -2]; >> b=[18 40 4]; >> x=inv(A)*b' x= 4.0000 -2.0000 3.0000
3.9 Otras operaciones La suma de matrices y la multiplicacin por un escalar no se han incluido por ser demasiado obvias, de cualquier forma se introduce aqu la sintaxis.
15
f 1 = f1 x 1 , x 2 ,..., x n
f 2 = f 2 ( x1 , x 2 ,..., x n )
M f n = f n ( x1 , x 2 ,..., x n )
(4.1)
4.2 Funcin solve Aqu, se refiere la sintaxis, para dos ecuaciones solamente, aunque puede ampliarse para un sistema de ecuaciones cualquiera. Sintaxis >>solve(ecuacin1,ecuacin2,variable_1,variable_2). Ejemplo: resuelva el sistema de ecuaciones no lineales siguiente:
f 1 ( x, y ) = 2 * x + y 2 6 = 0
>> [x,y]=solve('2*x+y^2-6=0','x^2-y^2+2*y=0'); >> double([x,y]) ans = -1.8705 - 0.0000i 3.1211 + 0.0000i 0.6252 - 0.0000i 2.1794 + 0.0000i 2.1095 - 0.0000i -1.3345 - 0.0000i -4.8642 + 0.0000i -3.9659 + 0.0000i
f 2 ( x, y ) = x 2 y 2 + 2 * y = 0
4.3 Comprobacin de la solucin Funcin inline Verifica que las races encontradas de un sistema sean satisfactorias Sintaxis nombre_variable=inline([ecuacin1; ecuacin2]). Ejemplo: comprobar que las races del ejemplo anterior satisfagan el sistema. >> f1f2=inline('[2*x+y.^2-6;x.^2-y.^2+2*y]')
16
f1f2 = Inline function: f1f2(x,y) = [2*x+y.^2-6;x.^2-y.^2+2*y] >> f1f2(double(x),double(y)) ans = 1.0e-014 * 0.1776 + 0.0000i 0.1776 + 0.0000i 0 + 0.0000i 0 -0.0888 + 0.0000i -0.0888 - 0.0000i -0.0444 - 0.0000i 0.1776 - 0.0000i
4.4 Representacin grfica de la solucin Se puede hacer uso de lo que se revis en el captulo 1 para ver grficamente, la solucin. >> [x,y]=meshgrid(-5:0.5:5); >> z=x.^2-y.^2+2*y; >> mesh(x,y,z); >> hold on; >> z=2*x+y.^2-6; >> mesh(x,y,z); >> z=0*x.*y; >> mesh(x,y,z); >>plot3([-1.8705,0.6252,2.1095,-4.8642],[3.1211,2.1794,-1.3345,-3.9659], [0,0,0,0],'d');
La figura que aparece junto con los puntos de interseccin se muestra a continuacin.
17
40
20
-20
-40 5 5 0 -5 0 -5 x
4.5 Otras funciones grficas Funcin sphere Realiza la grfica de una esfera. Sintaxis >>[x,y,z]=sphere(numero).
18
V AJUSTE DE DATOS
5.1 Ajuste de datos Frecuentemente es necesario ajustar datos experimentales a ciertas funciones para crear un modelo matemtico que describa cierto fenmeno; el tipo de funcin al cual pueden ajustarse puede ser de tipo lineal, polinomial o alguna otra; en esta seccin revisaremos algunos de ellos.
5.2 Funciones de matlab para el ajuste de datos Funcin polyfit Syntaxis >>polyfit(var_independiente, var_dependiente, grado de ajuste) Ejemplo: > peso=[0:10:90] peso = 0 10 20 30 40 50 60 70 80 90
>> calor_esp=[1 0.9 0.81 0.73 0.675 0.65 0.64 0.615 0.575 0.515] calor_esp = 1.0000 0.5750 0.9000 0.5150 0.8100 0.7300 0.6750 0.6500 0.6400 0.6150
EL ajuste a cierto tipo de funciones se puede realizar dentro del entorno grfico, mediante la instruccin plot; esto puede ilustrarse mediante el ejemplo que se muestra a continuacin.
19
0.9
calor especifico
0.8
0.7
0.6
0.5
0.4
10
20
30
60
70
80
90
La forma en que se desplegaron las ecuaciones, sus grficos y leyendas, fue desde el entorno grfico, en la barra de menus, seleccionando
ToolsBasic Fitting Dentro de este cuadro se selecciona las opciones linear, quadratic, cubic y show equations.
20
5.3 Instruccn cftool Al invocarse la instruccin despliega una ventana en la cual pueden realizarse los ajustes ya analizados y otros correspondientes a otras funciones, para desplegar la ventana y comenzar a trabajar sobre ella se teclea. >>cftool;
La manipulacin de datos para el ajuste es extremadamente sencilla y no necesita una descripcin aparte.
5.4 Otras funciones de ajuste Para observar el desplegado de otras funciones de ajuste, puede usarse la instruccin siguiente >> cflibhelp; Con dicha instruccin se mostrar la mayor parte de las funciones a las cuales los datos de cualquier experimento pueden ser ajustados.
21
Funcin int Realiza integrales de funciones definidas por variables simblicas. Sintaxis >>int(nombre_funcin, lmite superior, lmite inferior)
e x senx dx x 0
%definicin de la funcin
>> int(f,0,inf) %inf define a infinito ans = 1/4*pi Ejemplo: resolver >> syms x; >> f=exp(-(x^2)/2)/sqrt(2*pi); >> int(f,-1,1) ans = 2251799813685248/5644425081792261*erf(1/2*2^(1/2))*2^(1/2)*pi^(1/2) >> double(ans) %para cambiar a un nmero de punto flotante ans = 0.6827
x2 2
dx
6.2 Creacin de un archivo M Los archivos M son creados por el usuario y son empleados por matlab, para ejecutar ciertas funciones. Para crear uno se pulsa en la barra de menus, la opcin representada por una hoja en blanco y tecleamos a continuacin en ese editor 22
function dy = enfriam (x, y) % Temperatura de enfriamiento de un cuerpo humano % Ultima modif: [May 9,08] dy = -0.063 * (y - 20);
A continuacin salvamos los cambios como en cualquier editor de textos con cualquier nombre, en esta ocasin guarde con el nombre de enfriamiento. El archivo anterior describe a la ecuacin diferencial dada por:
humano.
6.3 Solucin de ecuaciones diferenciales Funcin ode45 Sintaxis >>ode45(nombre_archivo_M, [valor inicial de la variable
independiente, valor final de la variable independiente], valor inicial variable dependiente). Ejemplo: Resuelva la ecuacin diferencial condicin inicial en t=0, y=37; para t=40, y=?. >> [t, T]=ode45('enfriamiento',[0,40],37); >> plot(t,T)
dy = 0.063 * ( y 20 ) con las dt
Advierta que en la ecuacin diferencial la variable dependiente es y y el resultado en matlab se guarda en T, lo cual no advierte ninguna importancia; en el caso de que se omitiera la asignacin de los resultados al vector [t, T], se hubiese desplegado la grfica inmediatamente sin necesidad de emplear plot(t, T). De cualquier forma la solucin numrica a la ecuacin diferencial est representada por la Figura 6.1.
23
38 36 34 32 30 T 28 26 24 22 20 0
10
15
20 t
25
30
35
40
6.4 Solucin de sistemas de ecuaciones diferenciales La funcin ode 45 puede resolver sistemas de ecuaciones diferenciales de la misma forma en que se ejecut para una ecuacin diferencial, siempre y cuando se escriba el archivo M correspondiente la sintaxis de esta funcin considerando un sistema de 3 ecuaciones sera. Sintaxis >>ode45(nombre_archivo_M, [valor inicial de la variable
Ejemplo: considere una reaccin llevada a cabo en un reactor batch o str (stirred tank reactor) como se muestra en la Figura 6.2, la reaccin se lleva
k1 k2 cabo de acuerdo a la reaccin A R S ; en el tiempo t=0, las
[A]o = 1
k1 = 3 hr-1, k 2 = 1 hr-1.
Considerando la Figura 6.2 el conjunto de reacciones que definen el sistema, considerando que no hay entradas ni salidas, estn dados por:
24
Para un reactor cstr (continuous stirred tank reactor) las ecuaciones estn dadas por:
Pero para un reactor batch no hay flujos de entrada ni de salida, adems el volumen permanece constante, por tanto el sistema a resolver se reduce a:
d [A] = k1 [ A] = 3 [ A] dt d [R ] = k1 [ A] k2 [R ] = 3 [ A] 1 [R ] dt d [S ] = k2 [R ] = 1 [R ] dt
Junto con las condiciones iniciales:
t=0 t=2.5
25
function sistema = batch(t, z) A=z(1); R=z(2); S=z(3); % Valores iniciales de variables dependientes k1=3; k2=1; % Constantes (velocidad de reaccion) para las ecs. sistema=[-k1*A; k1*A-k2*R; k2*R]; % Sistema de 3 EDO's (Vector columna), no aparece S
A continuacin guarde el archivo M con el nombre de reactor_batch, aunque puede usar cualquier otro. La solucin con matlab se efecta de la forma como se indica a continuacin. >> [t,z]=ode45('reactor_batch',[0,2.5],[1,0,0]); >> plot(t,z) Que desplegar la solucin dada en forma grfica por la siguiente figura
1 0.9 0.8 0.7 [concentracin] 0.6 0.5 0.4 0.3 0.2 0.1 0 [A] [R] [S]
0.5
1 t
1.5
2.5
Si se desea desplegar los valores numricos bastar con teclearse >> [t,z] sin punto y coma al final.
26
7.2 Ejemplo de simulacin de una ecuacin de segundo orden mediante simulink Ejemplo: simular la Ecuacin diferencial con condiciones iniciales y(0)=0, y(0)=-2000; d2y dy + a + by = 0 . 2 dt dt d2y dy = a by ; con 2 dt dt
a=-2000, b=-20000, a continuacin dentro de matlab pulsamos el cono de simulink en la barra estndar, al momento del cual se desplegara la ventana siguiente:
27
A continuacin se crea un documento nuevo en la barra estndar de esta ventana, sobre la cual construiremos el diagrama siguiente:
dy/dx
1 s Integrator
1 s
Integrator 1 Scope
Gain -K-
a=-2000 b=-20000
Gain 1 -K -
Cada uno de los conos de ganancia e de integracin fueron tomados de la librera de simulink, particularmente del menu bloques comnmente usados y unidos arrastrando el ratn y pulsando el click izquierdo simultneamente; el valor respectivo de los integradores y bloques de ganancia se introduce dando doble click con el botn izquierdo del ratn.
El bloque sum, suma los valores correspondientes al producto de cada integrador con su ganancia, para observar el resultado damos doble click con el mismo botn en el bloque de scope, en la barra de menus de la ventana donde se construy el diagrama de la figura 7.2.
En la opcin simulation se elige la opcin configuration parameters y se selecciona .01 segundos; a continuacin se comienza la simulacin con el cono start simulation en la barra estndar de la ventana mencionada anteriormente, desplegndose la Figura 7.3. En la ventana desplegada scope pulsamos el cono correspondiente a autoescale con forma de binoculares para ajustar la grfica.
28
BIBLIOGRAFA SUGERIDA
Bez-Lpez, D., Matlab con aplicaciones a la Ingeniera, Fsica y Finanzas, Editorial, Alfaomega, Mxico, (2007).
Medina-Heredia, G. y P. A., Quintana-Hernndez, Solucin de problemas de ingeniera qumica empleando matlab, XXIV Seminario Anual de Ingeniera Qumica, Mxico, (2007).
Nieves, A., F. C., Domnguez, Mtodos Aplicados a la Ingeniera, Editorial, CECSA, Mxico, (2002).
29