2012II+Manual-Uso Del Matlab

174
º LENGUAJE DE PROGRAMACIÓN CON MATLAB FUNDAMENTOS TEORICOS Y PRACTICOS ROJAS ZACARIAS, EDGAR ORE CERRON, JUAN JOSE

Transcript of 2012II+Manual-Uso Del Matlab

  • LENGUAJE DE PROGRAMACIN CON MATLAB

    FUNDAMENTOS TEORICOS Y PRACTICOS

    ROJAS ZACARIAS, EDGAR ORE CERRON, JUAN JOSE

  • 2

    LENGUAJE DE PROGRAMACIN CON MATLAB

    FUNDAMENTOS TEORICOS Y PRACTICOS

    Rojas Zacaras Edgar Docente de la facultad de Ingeniera de Qumica

    Universidad Nacional del Centro del Per

    Or Cerrn Juan Jos Docente de la facultad de Ingeniera de Sistemas

    Universidad Nacional del Centro del Per

    PCRectngulo

  • 3

    Rojas Zacaras Edgar Docente de la facultad de Ingeniera de Qumica Universidad Nacional del Centro del Per

    Or Cerrn Juan Jos Docente de la facultad de Ingeniera de Sistemas Universidad Nacional del Centro del Per

    Editor: Edgar Rojas Zacaras [email protected] Av. 28 de Julio 343 - Jauja

    PRIMERA EDICION, 2008.

    EDITADO EN HUANCAYO, DICIEMBRE, 2008.

    Hecho el Depsito Legal en la Biblioteca Nacional del Per N 2008- 15609

  • 4

    INDICE

    Introduccin 7 Fundamentos bsicos 9 Arreglos 19 Operaciones con arrays 21 Arreglos bi dimensionales 24 Construccin de arrays 25 Ejercicios propuestos de arrays 20 Matrices 30 Definicin de matrices desde el teclado 31 Conceptos bsicos sobre matrices Operaciones con matrices 33 Suma y Resta de matrices 34 Multiplicacin de matrices 35 Productos de un nmero real por una matriz 37 Matriz inversa 42 Manipulacin de matrices comandos relacionados con ellos 43 Funciones que actan sobre matrices 47 Ejercicios propuestos sobre matrices 47 Grficos con Matlab 50 Grficos simples 51 Tipos y colores de lneas 52 Ejemplos relacionados con Grficos Ley de Boyle 60 Ejemplo Calculo del volumen con la Ecuacin de van Der Waals 66 Ejercicios propuestos con grficos 75 Grficos 3D Plot3 77 Grficos de malla: mesh(X,Y,Z) meshz(X,Y,Z) meshc(X,Y,Z) 80 Grficos de contorno 81 Polgonos en tres dimensiones 83 Fundamentos tericos de programacin 84 Procesamiento de datos 85 Algoritmos y programas 86 Partes de un programa 88 Diagramas de flujo 89 Aplicaciones de los diagramas de flujo 82 Elementos bsicos de un programa 85 Ejercicios 101 Comando If..ElseEnd 105 Operadores necesarios algunas variedades del comando IfEnd 107 Cdigo de programa para determinar si un nmero es par o impar 108 Cdigo de programa para redondear un nmero de hasta 4 cifras 110 Uso de if mltiple 112 Uso de comando Switch ...End 115 Ejercicios propuesto sobre comando if 117 Comando For...End - Estructura 118 Ejercicios 121 Cdigo de programa produccin de amoniaco: Conversin vs Temperatura a diferentes presiones

    126

    Comando WhileEnd - estructura y relaciones 133

  • 5

    Cdigo de programa para calcular la presin de rocio 136 Ejercicios propuestos 140 Ecuaciones lineales 145 Sistema de ecuaciones lineales parte terica 146 Aplicaciones con programas mtodo de biseccin 147 Mtodo de la Regla Falsa 148 Mtodo de Newton Raspn 149 Solucin grfica 150 Ejercicios propuestos 151 Ajuste de curvas Mtodo mnimos cuadrados 152 Cdigo de programa grficos 154 Ajuste de curvas Diferenciacin numrica 157 Polinomios 158 Funciones orientadas al clculo con polinomios Ajuste polinomial 159 Diferenciacin 163 Uso del Comando diff 164 Estadstica Descriptiva : media, mediana 165 Desviacin estndar ejercicios 167 Integracin numrica Mtodo de Simpson y mtodo abreviado 169

    Bibliografa 173

  • 6

    Prlogo

    El hombre que ha dejado de aprender, no merece deambular libremente en estos das tan peligrosos

    M.M. Coady

    El presente aporte es como parte del proceso de aprendizaje en las aulas universitarias, dirigido a los estudiantes de ingeniera de Qumica y otras facultades y/o

    escuelas profesionales.

    La presentacin del texto se encuentra plasmada en la parte introductoria del presente texto.

    Dedicatoria

    A la memoria de Francisco Or Alcntara JJOC

    A la memoria de mis Padres: Apolinario Rojas y Delfina Zacaras ELRZ

  • 7

    Introduccin

    El presente texto constituye un aporte para los estudiantes de la Facultad de Ingeniera Qumica, la misma que contiene problemas de los exmenes del curso de LENGUAJES DE PROGRAMACION de los aos 2006 y 2007, as mismo se encuentran las prcticas de laboratorio correspondientes a las ocho primeras semanas establecidas en el sylabus correspondiente.

    El texto preparado con fines didcticos, escrito usando cdigo del programa MATLAB pueden ser trasladados a otros programas con pequeas modificaciones, que se deja al estudiante para estimularlos en su desarrollo y que exploren otros medios de solucin para un problema.

    Se considera que el presente texto ser tomado como una versin preliminar y su perfeccionamiento se har en base a las recomendaciones de los usuarios que sern recibidos en el siguiente correo electrnico: [email protected], quedando sumamente agradecido por sus aportes.

    LOS AUTORES

  • 8

    Agradecimiento

    Nuestros sinceros agradecimientos a los docentes de la facultad de Ingeniera de Sistemas por las constantes recomendaciones para la mejora del presente trabajo. As mismo, al encargado

    del Centro de Cmputo de la mencionada Facultad por su gentileza en el apoyo con la tecnologa de informacin correspondiente.

    Los Autores

    Rojas Zacaras Edgar Docente de la facultad de Ingeniera de Qumica

    Universidad Nacional del Centro del Per, Director pasante de la Oficina General de Informtica de la UNCP. Con estudios de maestra en Administracin Mencin

    Informtica para la Gestin

    Or Cerrn Juan Jos Docente de la facultad de Ingeniera de Sistemas

    Universidad Nacional del Centro del Per. Con estudio de Maestra en Ingeniera de Sistemas

  • 9

    FUNDAMENTOS BASICOS DEL MATLAB

    OBJETIVO

    Usar el MatLab en modo interactivo con las funciones establecidas en el

    Lenguaje de programacin citado.

  • 10

    USO DEL MATLAB DE MANERA INTERACTIVA

    Para ingresar a MATLAB hacer doble clic en el icono siguiente:

    O

    y observaremos la siguiente pantalla, donde podemos escribir algunos cdigo para la ejecucin en modo interactivo. Se denomina modo interactivo, debido a que estamos interactuando con el computador haciendo uso del lenguaje de programacin MATLAB.

    En la pantalla adjunta se puede observar el promt o seala de ingreso de datos, funciones o palabras reservadas por el MATLAB.

  • 11

    Tambin; podemos carga el HELP o ayuda del matlab y ubicarnos las principales funciones que pose el MATLAB para hacer las operaciones que desea el usuario, estas mismas funciones se usan para escribir cdigos de programa.

    O presionando la tecla F1 y se observa la figura siguiente figura.

  • 12

    En el que se observa las diferentes funciones que posee matlab

    Entre ellas los operadores aritmticos, operadores relacionales y operadores lgicos, tambin el significado de algunos caracteres especiales usados por el MATLAB.

    Una de las primeras funciones que se muestra es abs que sirve para tratar cualquier magnitud o arreglo. Tambin se muestran las funciones acos y acosd con las cuales se calculan la inversa de la funcin coseno y los resultados se muestran en radianes y grados respectivamente.

    Cada funcin tiene su parte explicativa y uso para lo cual haremos clik sobre una funcin determinada, por ejemplo; para ver la sintaxis de la funcin sqrt, el cual nos permite sacar la raz cuadrada de cualquier nmero, hacemos click sobre la funcin y observamos la sintaxis y tiene la siguiente forma:

  • 13

    Podemos usar dicha funcin en la VENTANA DE COMANDO del MATLAB y tendremos el siguiente resultado:

    Ahora; usaremos la funcin trigonomtrica seno (sin en matlab) para ver los resultados (primero se observar la sintaxis de la funcin, tambin se observa el uso de la funcin PLOT que nos permite graficar dicha funcin en un determinado rango)

  • 14

    Tambin podemos hacer uso de operadores aritmticos para realizar operaciones ms complejas

    OPERADORES Significado

    + Suma o adicin

    - Resta o sustraccin

    * Producto o Multiplicacin

    / Divisin o cociente

    ^ Potenciacin

    ( ) Orden de operacin

  • 15

    Podemos usar operadores relacionales, tales como:

    OPERADORES

    < Menor que

    Mayor que

    >= Mayor que o igual a

    == Igual a

    ~= No igual a

    Tambin podemos hacer uso de operadores lgicos para tomar decisiones; tales como:

    A & B

    A B

    ~ A

    El smbolo &, y ~ son operadores lgicos AND, OR y NOT, ellos trabajan elemento por elemento en los arreglos. Los operadores lgicos retornan un arreglo lgico con elementos (1) para verdadero y elementos (0) para falso.

    POR EJEMPLO:

    Dado A=3, B=2 y C=5; vamos a calcular las siguientes expresiones:

    A + B + C, A * B C y A ^ B + C

    SOLUCION:

    Debemos tener en cuenta la asignacin de valores a las variables y proceder al clculo de las expresiones aritmticas

    OJO: Matlab es sensible a la declaracin de variables y asignacin de valores. Si asignamos el valor de 3 para la variable A, 2 para la variable B y 5 para la variable C, son esas variables las que tiene en cuenta Matlab.

    Vamos a usar la variable indistintamente la variable a en lugar de la variable A, matlab muestra un mensaje de error

    Podemos observar los resultados obtenidos:

  • 16

    2. Resolver los siguientes ejercicios de manera interactiva con los comandos del Matlab

    )ycos(*)y(sen

    )yln(*)ylog(*)ee(

    )xln(*)xlog()xcos(*)x(sen)y,x(F yx ++=

    ee

    e

    xyysenxsen

    yxyxyxG )

    )cos(*)cos()(*)(())10(log(

    *),( 5 +++=

    Con x = 1, 3, 5, 7 y y = 7, 5, 3, 1

  • 17

    Solucin

    x=1:2:7; y=7:-2:1;

    f=(sin(x).*cos(x))./(log10(x).*log(x))+(sqrt(exp(x)+exp(y))).*(log10(y).*log(y))./(sin(y).*cos(y))

    g=sqrt((x+y)./(x.*y)+log10(10^5^exp(1)))+(sqrt(sin(x).*sin(y))./sqrt(cos(y).*cos(x)))*exp(exp(1))

    EJERCICIOS PROPUESTOS SOBRE EL TRATAMIENTO INTERACTIVO CON MATLAB

    1. Calcule el valor de las siguientes expresiones:

    ( )158

    33345677/3*43*753

    6/86+++

    ( )158

    345678112log

    456783/7*437*951223/9

    6

    ++

    158

    33454533457)233/234(*41234/3*7)5(log3

    8/66)1234(log ++++

    ( )111158

    323454677/3*43* log(3456)*34*745653

    26/816+++

    158333564567

    74167645)18745ln(*2345

    e*438973

    8/66

    47)74345(5

    +

    ++

  • 18

    2. Calcule el valor de la siguiente expresin

    6 4 3

    )sen(6)cos(6 /9)(5tang *)7/(cos

    pi

    pi+pipi

    61/2 4 32

    )4/cos()2/cosec( /6)(85sec *)7/(cos )(3sen

    pi

    pi+pipi+pi

    ( )624

    7

    2 2/44/3

    )(3cos)(8sen /9)(5cosec -)7/cos( * )sen(2

    pi

    pi+pipipi

    3. Defina las variable x=3.6, y=14.2 y z=456 y calcule las siguientes expresiones

    ( )158

    z * 3333y*x/8*64567y*x*6 y/3*7*z*y*x*4z*3 y*7x*3 ++++

    ( )2-x)*y*(158

    3y)*z*(333Y*x/8*6456767/3*4z)*y*Log(x*3*7z*y*x*5 +++

    4. Sabiendo que p=543 y r=234 y definida las variables: a, b, c y d como: a=3*p, b=4*a-b; c=3*b-c y d=3,5*(a*c*r/b), calcular las siguientes expresiones:

    z*158

    3b*33a*34567

    6

    b*a

    2)da(c

    b*a a +

    +

    +

    z*158* b*a

    3b*z*ca*3)cba(

    6

    b*a

    2)da(c

    b*a b)*Ln(a *Log(a) +

    +

    +

    5. Acudimos a su imaginacin para que pueda realizar 30 ejercicios del nivel de su grado de estudios, la misma que ser evaluada rigurosamente. (Los ejercicios deben incluir operaciones con funciones algebraicas, trigonomtricas: seno, coseno, tangente, etc. Tambin deben contener operadores relacionales, lgicos)

  • 19

    ARREGLOS

    OBJETIVO

    Aplicar el concepto de arreglo y sus funciones establecidas en el MatLab para manipular variables y aplicarlos en la solucin de problemas especficos

  • 20

    ARREGLOS: Variables de arreglo unidimensional: Estas variables tienen forma de fila o columna y estn relacionadas con los vectores y las matrices. En MATLAB: arreglo de fila es lo mismo que vector de fila y arreglo de columna es lo mismo que vector de columna. La variable x puede definirse como vector de fila especificando sus elementos; por ejemplo:

    x = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9] ; La variable x tiene 10 elementos, si desea imprimir o visualizar un elemento cualquiera, digite: x con el subndice correspondiente. Por ejemplo, si digita x(8) como un comando se mostrar el siguiente resultado: Ans = 0.7 Una forma equivalente de definir la misma x es: for i = 1 : 10

    x(i) = (i - 1) * 0.1

    end ; Otra forma de escribir un arreglo de fila, asignado a una variable, con un incremento o decremento fijo es: x = 6 : -0.4 : 0 Que produce el siguiente resultado: x = 6.0 5.6 5.2 4.8 4.4 4.0 3.6 3.2 2.8 2.4 2.0 1.6 1.2 0.8 0.4 0.0 o si digitamos la siguiente expresin se tiene lo siguiente: >> [x]'

    ans = 6.0000 5.6000 5.2000 4.8000 4.4000 4.0000 3.6000 3.2000 2.8000 2.4000 2.0000 1.6000 1.2000 0.8000 0.4000 0.0000

  • 21

    La definicin de un arreglo de columna es similar a la de un arreglo de fila, excepto que los elementos se separan mediante signos de punto y coma; por ejemplo, z = [0.0; 0.1; 0.2; 0.3; 0.4; 05; 06 ] Cuyo resultados es: z = 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000

    Una forma alternativa para definir lo anterior es agregar un apstrofo a un arreglo de fila: z=[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 06 ]' ; Cuyo resultado es: z = 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000

    Si se define un solo elemento de un arreglo c, por ejemplo c(9) = 15 Se supondr c(i) = 0 para i = 1 hasta 7. Por tanto, si teclea c como comando obtendr c = 0 0 0 0 0 0 0 0 15 OPERACIONES CON ARRAYS Los operadores de arrays en MATLAB son los siguientes:

    + adicin o suma sustraccin o resta \ divisin-izquierda / divisin-derecha .* producto elemento a elemento ./ y .\ divisin elemento a elemento .^ elevar a una potencia elemento a elemento

    Cuando y y x tienen la misma longitud y la misma forma (fila y columna), los vectores y y x se pueden sumar, restar, multiplicar y dividir empleando los operadores aritmticos de arreglos

    z = x + y z = x - y z = x .* y z = x ./ y

    Que equivalen a:

    Listado 1.12 For i=1 : 6 ; z(i) = x(i) + y(i) ; end For i=1 : 6 ; z(i) = x(i) - y(i) ; end For i=1 : 6 ; z(i) = x(i) * y(i) ; end For i=1 : 6 ; z(i) = x(i) / y(i) ; end

  • 22

    Se puede comprobar digitando la siguiente sentencia o haciendo correr el siguiente programa:

    x=[1 2 3 4 5 6] y=[2 4 6 8 10 12] z = x ./ y for i=1 : 6 ; z(i) = x(i) ./ y(i) end

    El operador potenciacin en arreglos se puede ilustrar con: G = z. ^ 1.2; Donde z es un vector de longitud 6, se coloca un punto antes del operador (^) y g se convierte en un vector de la misma longitud. El enunciado anterior equivale a % prueba de una funcin exponencial clear all; clear memory; clear command history; clc for i=1:6 g(i) = i .^ 1.2 end % tambin i=1:6 g(i) = i .^ 1.2 Produce el siguiente resultado: g = 1 g = 1.0000 2.2974 g = 1.0000 2.2974 3.7372 g = 1.0000 2.2974 3.7372 5.2780 g = 1.0000 2.2974 3.7372 5.2780 6.8986 g = 1.0000 2.2974 3.7372 5.2780 6.8986 8.5858 Tambin: i = 1 2 3 4 5 6 g = 1.0000 2.2974 3.7372 5.2780 6.8986 8.5858 Donde el operador (^) no lleva antepuesto un punto.

  • 23

    As mismo:

    El tamao de un arreglo puede incrementarse anexndole un elemento o un vector (o vectores). Por ejemplo, suponga: >> x = [ 4 , 8 ] x = 4 8

    El comando que sigue anexa 7 a x y hace que su longitud sea 3 >> x = [ x , 7 ] lo que devuelve x = 4 8 7

    Tambin se puede anteponer un elemento a un vector; por ejemplo x = [6, x ] produce x = 6 4 8 7

    El tamao de un arreglo puede incrementarse anexndole un elemento o un vector (o vectores). Por ejemplo, suponga: >> m = [ 24 , 81 ] m = 24 81

    El comando que sigue anexa 15 a m y hace que su longitud sea 3 >> m = [ m , 7 ] lo que devuelve m = 24 81 15

    Tambin se puede anteponer un elemento a un vector; por ejemplo m = [16, m ] produce m = 16 24 81 15

    Podemos anexar un vector o varios vectores a un vector columna. Suponga que y es un vector columna, >> y = [ 2 ; 3; 6 ] y = 2 3 6 entonces; >> y = [ y ; 9] produce y = 2 3 6 9

    Adjunto; 9 se aade al final del vector columna. Observe que se utiliza un signo de punto y coma para anexar a un vector de columna. De forma similar, [ -4. y ] produce y = -4 2 3 6 9

    Un procedimiento inverso consiste en extraer una parte de un vector. Con la y anterior, >> w = y (2:3) Define a w que equivale al tercer y cuarto elemento de y, a saber: w = 2 3

  • 24

    Tambin

    Si no recuerda el tamao de su vector, pregntelo a la computadora usando la orden length(x).

    Para un vector x = [9, 2, 3, 5, 6, 8, 10] la consulta length(x) recibe la respuesta ans = 7

    Para un arreglo de columna; y = [ 9, 2, 3, 4, 9, 10 ] La consulta, length(y) devolver ans = 6.

    Si adems de la longitud se desea saber si el vector es de columna o de fila, se debe usar size. Por ejemplo,

    >> size( y )

    devolver : ans = 1 3

    donde la primera cifra es el nmero de filas y la segunda es el nmero de columnas. Esta respuesta nos dice que y es un arreglo de 3 por 1, es decir, un vector de columna de longitud 3.

    Para >> z = [9; 2; 3; 5; 8; 10; 12 ] >> z = [9, 2, 3, 5, 8, 10, 12 ] >> size( z ) devolver

    ans = 4 1

    es decir, z es un vector de 4 filas y 1 columna.

    Variables de Arreglo Bidimensional: un arreglo bidimensional es lo mismo que una matriz en MATLAB, Por ejemplo, un arreglo de 3 por 3 se puede definir mediante m = [0.1, 0.2, 0.3; 0.4, 0.5, 0.6; 0.7, 0.8, 0.9 ] ; Observe que los elementos de una fila terminan con un signo de punto y coma. Desde luego, todas las filas deben tener el mismo nmero de elementos; si no es as, la definicin no ser aceptada. Si digitamos m obtenemos

    m = 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000

    Los arreglos bidimensionales se pueden sumar, restar, multiplicar y dividir con los operadores aritmticos de arreglos: c = a + b c = a b c = a .*b c = a ./ b Aqu, a y b son arreglos bidimensionales del mismo tamao.

  • 25

    Argumentos de arreglo: La mayor parte de las funciones de MATLAB puede aceptar vectores y matrices como argumentos. Por ejemplo, si x = 1 2 3 9 9 7 entonces: sin(x) producir:

    ans = 0.8415 0.9093 0.1411 04121 0.9894 0.6570

    El cual es una matriz del mismo tamao que x. El clculo realizado equivale a:

    % Ejercicio 1.

    clear all; clear memory; clear command history; clc x=[1 2 3; 9 9 7] sin(x)

    % Tambien

    for i = 1 : 2 for j = 1 : 3

    x(i,j) = sin(x(i,j)) end

    end CONSTRUCCION DE ARRAYS % CONSTRUCCION DE ARRAYS X = (0 : 1 : 12)' CC = [X X+X X.^2 X.^3 sqrt(X) ]

    Rpta:

    X X+X X^2 X^3 Sqrt(X)

    X =

    0 1 2 3 4 5 6 7 8 9 10 11 12

    CC = 1.0e+003*

    0 0.0010 0.0020 0.0030 0.0040 0.0050 0.0060 0.0070 0.0080 0.0090 0.0100 0.0110 0.0120

    0 0.0020 0.0040 0.0060 0.0080 0.0100 0.0120 0.0140 0.0160 0.0180 0.0200 0.0220 0.0240

    0 0.0010 0.0040 0.0090 0.0160 0.0250 0.0360 0.0490 0.0640 0.0810 0.1000 0.1210 0.1440

    0 0.0010 0.0080 0.0270 0.0640 0.1250 0.2160 0.3430 0.5120 0.7290 1.0000 1.3310 1.7280

    0 0.0010 0.0014 0.0017 0.0020 0.0022 0.0024 0.0026 0.0028 0.0030 0.0032 0.0033 0.0035

  • 26

    FUNCIONES PARA EL TRATAMIENTO DE ARREGLOS O VECTORES

    FUNCION DESCRIPCION

    X=linspace(Vi, Vf, n) Dicha funcin genera un arreglo (X) desde un valor inicial hasta un valor final, con divisiones equivalentes al valor de n.

    X = logspace(Vi, Vf, n) Dicha funcin genera un arreglo (X) espaciados logaritmicamente

    X = length(S) Dicha funcin devuelve el nmero de elementos del arreglo o vector

    X = mean(S) X toma el valor medio o promedio de los elementos de un vector o un arreglo. Si (S) es una matriz, la funcin retorna un arreglo con el valor medio de cada columna de la matriz.

    X = max(S) X toma el elemento de mximo valor del arreglo (S) y si (S) es una matriz, el arreglo (X) almacenar los elementos de mximo valor de cada columna de la matriz.

    X = min(S) Idntico al anterior, considerando al elemento de menor valor.

    [a,b] = max(S)

    Muestra el elemento de mayor valor del arreglo y la posicin donde se encuentra. Si (S) es una matriz, nos muestra los elementos de mximo valor de cada columna de la matriz y la fila que ocupa cada una de ellas.

    [c,b] = min(S) Idntico al anterior pero con los valores ms bajos.

    X = sum(S) X muestra la suma de los elementos del arreglo o vector (S). Si (S) es una matriz devuelve un arreglo con la suma de los elementos de cada columna de la matriz.

    X = cumsum(S) El arreglo X es la suma acumulativa de los elementos del arreglo o vector (S). Si (S) es una matriz devuelve una matriz con la suma acumulativa de los elementos de cada columna de la matriz.

    X = prod(S) X muestra el producto de los elementos del arreglo o vector (S). Si (S) es una matriz devuelve un arreglo con el producto de los elementos de cada columna de la matriz.

    X = cumprod(S) El arreglo X es el producto acumulado de los elementos del arreglo o vector (S). Si (S) es una matriz devuelve una matriz con la producto acumulado de los elementos de cada columna de la matriz.

    X = sort(S) El arreglo X toma los elementos del arreglo (s) sorteado de manera ascendente o descendente segn se usa el argumento. Si (S) es una matriz, el sorteo lo realiza por columnas de la matriz

    [a,b] = sort(S)

    La funcin nos indica los elementos sorteados y la posicin inicial de los elementos pertenecientes al arreglo(S). Si (S) es una matriz nos devuelve otra matriz sorteada por columna y la posicin inicial de los elementos de la matriz

    X = sortrows(S) La matriz (X) toma elementos de la matriz (S) ordenados por filas en base a la primera columna

    X = rand(1,S) Genera un arreglo (X) con elementos cuyos valores son aleatorios de tamao (S)

    X = randperm(S) Genera un arreglo (X) con elementos aleatorios cuyos valores son generado con el valor o tamao (S). S toma valores aleatorios de 1 hasta S

  • 27

    Ejercicios de Aplicacin - Usos de la funcin (sort)

    En arreglos o vectores En matrices

    >> x=[ 5 2 1 4 8 9 3 6 5 7 3] x = 5 2 1 4 8 9 3 6 5 7 3 >> x1=sort(x) x1 = 1 2 3 3 4 5 5 6 7 8 9 >> x1=sort(x,'ascend') x1 = 1 2 3 3 4 5 5 6 7 8 9 >> x2=sort(x,'descend') x2 = 9 8 7 6 5 5 4 3 3 2 1 >> [a,b]=sort(x,'ascend') a = 1 2 3 3 4 5 5 6 7 8 9 b = 3 2 7 11 4 1 9 8 10 5 6 >> [a,b]=sort(x,'descend') a = 9 8 7 6 5 5 4 3 3 2 1 b = 6 5 10 8 9 1 4 11 7 2 3

    >> x=magic(3) x = 8 1 6 3 5 7 4 9 2 >> x1=sort(x) x1 = 3 1 2 4 5 6 8 9 7 >> x1=sort(x,'ascend') x1 = 3 1 2 4 5 6 8 9 7 >> x2=sort(x,'descend') x2 = 8 9 7 4 5 6 3 1 2 >> [a,b]=sort(x,'ascend') a = 3 1 2 b = 2 1 3 4 5 6 3 2 1 8 9 7 1 3 2 >> [a,b]=sort(x,'descend') a = b= 8 9 7 1 3 2 4 5 6 3 2 1 3 1 2 2 1 3

    FUNCIONES DE POSICION DE ELEMENTOS, FILAS Y COLUMNAS

    FUNCION DESCRIPCION

    disp display isequal : A(:,j) A(i: ) A(:,:) A(j,k) A(:)

    Muestra un arreglo Muestra un arreglo Verdadero si los arreglos son idnticos Operaciones con arreglos Es la j th columna de A Es la i TH fila de A Es el equivalente a un arreglo de dos dimensiones Es A(j), A(j+1), ..A(k) A(:) muestra los elementos de A, mostrados en una columna simple

  • 28

    Ejercicios de Aplicacin - Usos de las funciones length(x), max(x), min(x), mean(x), sum(x), prod(x), cumsum(x) y cumprod(x)

    En arreglos o vectores En matrices

    >> x=[3 5 8 5 8 2 6] x = 3 5 8 5 8 2 6 >> x1=length(x) x1 = 7 >> x2=mean(x) x2 = 5.28571428571429 >> x3=max(x) x3 = 8 >> x4=min(x) x4 = 2 >> [a,b]=max(x) a = 8 b = 3 >> [a,b]=min(x) a = 2 b = 6 >> x=magic(3) x = 8 1 6 3 5 7 4 9 2 >> c1=mean(x) c1 = 5 5 5 >> c2=max(x) c2 = 8 9 7 >> c3=min(x) c3 = 3 1 2 >> [a,b]=max(x) a = 8 9 7 b = 1 3 2 >> [a,b]=min(x) a = 3 1 2 b = 2 1 3

    >> v = [4 6 5 8 9 3 4] v = 4 6 5 8 9 3 4 >> c11=sum(v) c11 = 39 >> c12=prod(v) c12 = 103680 >> c13=cumsum(v) c13 = 4 10 15 23 32 35 39 >> c14=cumprod(v) c14 = 4 24 120 960 8640 25920 103680 >> c=magic(2) c = 1 3 4 2 >> c1=sum(c) c1 = 5 5 >> c2=prod(c) c2 = 4 6 >> c3=cumsum(c) c3 = 1 3 5 5 >> c4=cumprod(c) c4 = 1 3 4 6

  • 29

    PROBLEMAS SOBRE EL TRATAMIENTO DE ARREGLOS CON MATLAB 1. Calcular el promedio de 1850 valores almacenados en un vector. Determinar cuntos son mayores

    que el promedio, el nmero de elementos mayores que el promedio y una lista de valores mayores que el promedio.

    2. Llenar dos vectores A y B de 45 elementos cada uno, sumar el elemento uno del vector A con el

    elemento uno del vector B y as sucesivamente hasta 45, almacenar el resultado en un vector C, e mostrar el vector resultante.

    3. llenar un vector de 20 elementos, imprimir la posicin y el valor del elemento mayor almacenado

    en el vector. Suponga que todos los elementos del vector son diferentes. 4. Almacenar 500 nmeros en un vector, elevar al cuadrado cada valor almacenado en el vector,

    almacenar el resultado en otro vector. Imprimir el vector original y el vector resultante. As mismo calcular la suma y producto de todo los elementos de cada vector generado

    5. Almacenar 380 nmeros en un vector, imprimir cuantos son ceros, cuntos son negativos y

    cuntos son positivos. As mismo calcular la suma y producto de los elementos positivos y negativos del vector

    7. Se tienen almacenados cien elementos en cada uno de los vectores M y N. Hacer un algoritmo que

    escriba la palabra Iguales si ambos vectores son iguales y Diferentes si no lo son. Sern iguales cuando los elementos se encuentre en la misma posicin y tengan el mismo valor.

    8. Se tiene el vector A con 100 elementos almacenados. Disee un algoritmo que escriba SI si el

    vector esta ordenado ascendentemente o NO si el vector no est ordenado

    9. Definir un arreglo llamado temperatura (T) que inicie en 100 C y termine en 1200C, con incrementos de 50C cada vez. Debe usarse una orden o sentencia.

    10. Teniendo en consideracin que los arreglos sirven para guardar variables de memoria, defina dos

    arreglos llamados presin (P) y volumen (V), pero el volumen puede generarse como resultado de la siguiente ecuacin PV = nRT (Considere: n=1 mol, R=0.09205 y T=300)

    11. En general hacer 20 ejercicio usando arrays y operadores aritmticos, relacionales y lgicos

    pero relacionado con la carrera de ingeniera qumica

  • 30

    MATRICES

    OBJETIVO

    Conocer las funciones establecidas para el tratamiento de matrices y su relacin con el concepto de arreglos

  • 31

    MATRICES: MATLAB es un programa especializado en clculo matricial. DEFINICIN DE MATRICES DESDE TECLADO Las matrices y vectores son variables que tienen nombres. Una matriz de orden mn es un conjunto rectangular de elementos aij dispuestos en m lneas horizontales (filas) y n lneas verticales (columnas) de la forma:

    Las matrices se definen por filas; los elementos de una misma fila estn separados por blancos o comas, mientras que las filas estn separadas por pulsaciones intro o por caracteres punto y coma (;).

    Por ejemplo, el siguiente comando define una matriz A de dimensin (3x3): >> A = [ 1 2 3; 4 5 6; 7 8 9 ] La respuesta del programa es la siguiente: A = 1 2 3 4 5 6 7 8 9

    A partir de este momento la matriz A est disponible para hacer cualquier tipo de operacin con ella. Por ejemplo, una operacin con A es hallar su matriz traspuesta. En MATLAB el apstrofo (') es el smbolo de trasposicin matricial. Para calcular A' digitamos lo siguiente: >> A' ans =

    1 4 7 2 5 8 3 6 9

    Como el resultado de la operacin no ha sido asignado a ninguna otra matriz, MATLAB utiliza un nombre de variable por defecto (ans, de answer), que contiene el resultado de la ltima operacin. La variable ans puede ser utilizada como operando en la siguiente expresin que se introduzca. Tambin podra haberse asignado el resultado a otra matriz llamada B: >> B = A' B = 1 4 7 2 5 8 3 6 9

    Ahora ya estn definidas las matrices A y B, y es posible seguir operando con ellas. Por ejemplo, se puede hacer el producto B * A (deber resultar una matriz simtrica): >> B * A ans = 66 78 90 78 93 108 90 108 126

  • 32

    En MATLAB se accede a los elementos de un vector poniendo el ndice entre parntesis ( por ejemplo: x( 3 ) x( i ) ). Los elementos de las matrices se acceden poniendo los dos ndices entre parntesis, separados por una coma (por ejemplo A(1,2) A(i,j)). Las matrices se almacenan por columnas., y teniendo en cuenta esto puede accederse a cualquier elemento de una matriz con un slo subndice. Por ejemplo, si A es una matriz (3x3) se obtiene el mismo valor escribiendo A(1,2) que escribiendo A(4). Invertir una matriz es casi tan fcil como trasponerla.

    A continuacin se va a definir una nueva matriz A en la forma: >> A=[ 1 4 -3; 2 1 5; -2 5 3 ] A =

    1 4 -3 2 1 5 -2 5 3

    Ahora se va a calcular la inversa de A y el resultado se asignar a B. Para ello basta hacer uso de la funcin inv( ): B = inv(A) B = 0.1803 0.2213 -0.1885 0.13110 0.0246 0.0902 -0.0984 0.1066 0.0574

    Para comprobar que este resultado es correcto basta multiplicar A por B; >> B * A ans = 1.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 1.0000

    De forma anloga a las matrices, es posible definir un vector fila x en la forma siguiente (si los tres nmeros estn separados por blancos o comas, el resultado ser un vector fila): >> x = [ 10 20 30 ] % vector fila x = 10 20 30 >> z=[ 34, 45, 22 ] z = 34 45 22

    Por el contrario, si los nmeros estn separados por intros o puntos y coma (;) se obtendr un vector columna: >> y = [ 11; 12; 13 ] % vector columna y = 11 12 13

    MATLAB tiene en cuenta la diferencia entre vectores fila y vectores columna. Por ejemplo, si se intenta sumar los vectores x e y se obtendr el siguiente mensaje de error: >> x+y ??? Error using ==> + Matrix dimensions must agree.

    Estas dificultades desaparecen si se suma x con el vector traspuesto de y: >> x+y' ans = 21 32 43 >> x + z ans = 44 65 52

    Nota: MATLAB considera comentarios todo lo que va desde el carcter tanto por ciento (%).

  • 33

    ALGUNOS CONCEPTOS BASICOS: Matriz cuadrada : Una matriz de M = N Matriz Nula : Todo los elementos de la matriz nula son ceros Matriz Identidad : Es una matriz cuadrada donde los elementos diagonales son la unidad y el resto de los elementos son cero. La orden en matlab para definir una matriz identidad es eye Matriz transpuesta : La transupuesta de la Matriz A = [ a i,j ] es At = [ a j,i ] Matriz de Permutacin : Matriz obtenida intercambiando las filas de una matriz identidad. OPERACIONES CON MATRICES MATLAB operar con matrices por medio de operadores y por medio de funciones. Se han visto ya los operadores suma (+), producto (*), traspuesta (') e invertir inv( ). Los operadores matriciales de MATLAB son los siguientes:

    + adicin o suma sustraccin o resta * multiplicacin ' traspuesta ^ potenciacin

    \ divisin-izquierda / divisin-derecha .* producto elemento a elemento ./ y .\ divisin elemento a elemento .^ elevar a una potencia elemento a elemento

    Estos operadores se aplican tambin a las variables o valores escalares, aunque con algunas diferencias. Nota: no se puede por sumar matrices que no sean del mismo tamao. Si los operadores no se usan de modo correcto se obtiene un mensaje de error. Los operadores anteriores se pueden aplicar tambin de modo mixto, es decir con un operando escalar y otro matricial. En este caso la operacin con el escalar se aplica a cada uno de los elementos de la matriz. Considrese el siguiente ejemplo:

    >> A = [ 1 2; 3 4 ] A = 1 2 3 4

    >> A * 2 ans = 2 4 6 8

    >> A - 4 ans = -3 -2 -1 0

    Los operadores de divisin requieren una cierta explicacin adicional. Considrese el siguiente sistema de ecuaciones lineales, Ax = b (1)

    Donde x y b son vectores columna, y A una matriz cuadrada invertible. La resolucin de este sistema de ecuaciones se puede escribir en las 2 formas siguientes: x = inv(A) * b (2a) x = A\ b (2b)

  • 34

    SUMA Y RESTA DE MARICES: Podemos sumar una matriz a otra o restarla de otra si ambas tienen el mismo tamao (el mismo nmero de columnas y de filas) EJEMPLOS

    >> A = [ 1 2 4; 3 1 2; 4 1 3 ] A = 1 2 4 3 1 2 4 1 3

    >> B = [ 7 3 1; 2 3 5; 8 1 6 ] B = 7 3 1 2 3 5 8 1 6

    >> A + B ans = 8 5 5 5 4 7 12 2 9

    >> A - B ans = -6 -1 3 1 -2 -3 -4 0 -3

    >> x = [ 1; 4; 2 ] x = 1 4 2

    >> y = [ 3; 9; 4 ] y = 3 9 4

    >> x + y ans = 4 13 6

    >> x - y ans = -2 -5 -2

    M=[45 23;15 34] M = 45 23 15 34

    N=[56 67; 23 78] N = 56 67 23 78

    M+N ans = 101 90 38 112

    N-M ans = 11 44 8 44

  • 35

    MULTIPLICACION Si el nmero de columnas de A y el nmero de filas de B son idnticos, las matrices pueden multiplicarse como: C = AB, el nmero de filas de C es igual al de A y el nmero de columnas de C es igual al de B, en otras palabras, si A es una matriz de p por q y C es una matriz de q por r, entonces C es una matriz de p por r , mostramos algunos ejemplos tpicos: Suponga que B y C son matrices:

    la matriz resultante seria:

    Para recordar el mtodo para multiplicar matrices, existe una disposicin ms llamativa: se sube la matriz de la derecha, y se escribe el producto debajo de ella:

    Por lo tanto se define el producto de matrices as:

  • 36

    EJEMPLOS:

    >> M = [ 8 2 9; 3 9 4; 6 9 4 ] M = 8 2 9 3 9 4 6 9 4

    >> N = [ 7 3 1 ; 2 3 5 ; 8 1 6 ] N = 7 3 1 2 3 5 8 1 6

    >> y = [ 7; 9; 3 ] y = 7 9 3

    >> M * N ans = 132 39 72 71 40 72 92 49 75

    >> N * M ans = 71 50 79 55 76 50 103 79 100

    >> M * y ans = 101 114 135

    Ojo: Para poder multiplicar dos matrices, la primera debe tener el mismo nmero de columnas que filas de la segunda

    >> A = [ 1 2; 4 3; 0 2 ] A = 1 2 4 3 0 2 >> B = [ 5 ; 1 ] B = 5 1 >> A * B ans = 7 23 2

    >> A = [ 2 1 7 ] A = 2 1 7 >> B = [ 1 2 ; 4 3 ; 0 2 ] B = 1 2 4 3 0 2 >> A * B ans = 6 21

    >> A = [ 8 1 3 ; 1 5 2 ] A = 8 1 3 1 5 2 >> B = [ 1 2 ; 4 3 ; 0 2 ] B = 1 2 4 3 0 2 >> A * B ans = 12 25 21 21

    >> A = [ 1 2; 4 3; 0 2 ] A = 1 2 4 3 0 2 >> B = [ 8 1 3 ; 1 5 2 ] B = 8 1 3 1 5 2 >> A * B ans = 10 11 7 35 19 18 2 10 4

  • 37

    PRODUCTO DE UN NMERO REAL ( ESCALAR ) POR UNA MATRIZ

    Para multiplicar un escalar por una matriz se multiplica el escalar por todos los elementos de la matriz, obtenindose otra matriz del mismo orden.

    EJEMPLOS:

    >> A = [ 5 ] A = 5 >> B = [ 7 3 1 ; 2 3 5 ; 8 1 6 ] B = 7 3 1 2 3 5 8 1 6

    >> M = [ 10 ] M = 10 >> N = [ 8 4 7 ; 8 3 8 ; 2 0 7 ] N = 8 4 7 8 3 8 2 0 7

    >> x = [ 1 3; 4 2; 6 2 ] x = 1 3 4 2 6 2

    >> A * B = B * A ans = 35 15 5 10 15 25 40 5 30

    M * N = N * M ans = 80 40 70 80 30 80 20 0 70

    >> A * x = x * A ans = 5 15 20 10 30 10

  • 38

    DIVISION DE MATRICES: La divisin de matrices se define como el producto del numerador multiplicado por la matriz inversa del denominador. Es decir, sean las matrices A y B tal que A/B = AB-1 .. Si una matriz est dividida entre un escalar, todos los trminos de la matriz quedarn divididos por ese escalar. As:

    EJEMPLOS

    >> A = [ 1 2 4 ; 3 1 2 ; 4 1 3 ] A = 1 2 4 3 1 2 4 1 3

    >> B = [ 7 3 1 ; 2 3 5 ; 8 1 6 ] B = 7 3 1 2 3 5 8 1 6

    >> x = [ 1; 4; 2 ] x = 1 4 2

    >> x ' ans = 1 4 2 >> A' ans = 1 3 4 2 1 1 4 2 3 >> x' * A' ans = 17 11 14

    >> B' ans = 7 2 8 3 3 1 1 5 6 >> A' ans = 1 3 4 2 1 1 4 2 3 >> B' * A' ans = 43 39 54 13 14 18 35 20 27 >> (A * B)' ans = 43 39 54 13 14 18 35 20 27

    Nota: La transpuesta de un producto de matrices es el producto de las trasnpuestas de las matrices en orden invertido. Por ejemplo:

    (A*B)' = B' * A' y

    (ABG)' = G'.B' A'

  • 39

    CONCEPTO DE MATRIZ INVERSA

    Una de las aplicaciones del mtodo de Gauss-Jordan, es el clculo de matrices inversas. Recordamos primero la definicin de matriz inversa.

    Definicin. Sea A una matriz de nxn . La matriz inversa de A es una matriz B de nxn tal que:

    Se escribe 1= AB para denotar la matriz inversa. Cuando la matriz inversa existe, es nica, pro no siempre existe la matriz inversa. Un resultado de algebra lineal prueba que la matriz inversa

    1A existe si y solo si el determinante de A es distinto de cero.

    El mtodo de Gauss-Jordan procede como sigue:

    Es decir, en una matriz comenzamos por escribir la matriz A, y a su derecha

    agregamos la matriz identidad nI del mismo orden que la matriz A; enseguida aplicamos el mtodo

    de Gauss-Jordan para hacer los ceros y unos y obtener del lado izquierdo la matriz identidad nI . Del lado derecho lo que obtendremos ser la matriz inversa de A.

    Ejemplo 1. Usar el mtodo de Gauss-Jordan para calcular la matriz inversa de la siguiente matriz:

    Solucin. En una matriz, colocamos la matriz A y a su derecha agregamos la matriz identidad 2I :

    El primer elemento pivote 411 =a est bien colocado y procedemos a hacer ceros debajo de este elemento. Para ello, multiplicamos el rengln 1 por 4

    1 y lo sumamos al rengln 2. Esto nos da:

  • 40

    Nuestro segundo elemento pivote es 25.022 =a . Para hacer ceros arriba de este elemento, multiplicamos el rengln 2 por 25.0

    11 y lo sumamos al rengln 1. Dando:

    Finalmente, hacemos los 1s en la diagonal principal. Para ello, multiplicamos el rengln 1 por 41

    y el

    rengln 2 por 25.01

    . Esto nos da la matriz final:

    Por lo tanto, conclumos que la matriz inversa de A es:

    Ejemplo 2. Usar el mtodo de Gauss-Jordan para calcular la matriz inversa de:

    Solucin. En una matriz, colocamos la matriz A y a su derecha agregamos la matriz identidad:

    Vemos que el primer elemento pivote 211 =a est bien colocado y procedemos a hacer ceros

    debajo de este elemento. Para ello multiplicamos el rengln 1 por 25.0

    y lo sumamos al rengln 2;

    tambin, multiplicamos el mismo rengln 1 por 23125.0

    y lo sumamos al rengln 3. Esto nos da:

  • 41

    Para elegir el segundo elemento pivote, debemos escoger el elemento mayor (con valor absoluto)

    entre 2.022 =a y 25.132 =a , el cual obviamente es ste ltimo. Por lo tanto, debemos intercambiar el rengln 2 y el rengln 3. Tenemos entonces:

    Procedemos a hacer ceros arriba y abajo de nuestro segundo elemento pivote; para ello,

    multiplicamos el rengln 2 por 25.14

    y lo sumamos al rengln 1, y tambin multiplicamos el mismo

    rengln 2 por 25.12.0

    y lo sumamos al rengln 3. Esto nos da:

    Nuestro tercer elemento pivote es 4.033 =a . Para hacer ceros arriba de este elemento, multiplicamos el rengln 3 por 4.0

    125.3 y lo sumamos al rengln 2, y tambin multiplicamos el mismo

    rengln 3 por 4.010

    y lo sumamos al rengln 1. Esto nos da:

    Finalmente, hacemos los 1s en la diagonal principal. Para ello multiplicamos el rengln 1, 2 y 3 por 21

    ,

    25.11

    y 4.01

    , respectivamente. Esto nos da la matriz final:

    Por lo tanto, conclumos que la matriz inversa de A es:

  • 42

    MATRIZ INVERSA: Cuando Dos matrices cuadradas A y B satisfacen lo siguiente: AB = I B A = 1 Donde I es la matriz identidad, A y B estn en la relacin inversa; es decir; A es el inverso de B y B es el inverso de A La orden para generar una matriz identidad es: eje(n), as: EJEMPLOS

    eye(3) ans = 1 0 0 0 1 0 0 0 1

    J = [ 1 3 5; 5 6 7 ; 1 1 1 ] J = 1 3 5 5 6 7 1 1 1

    Z=inv(J) Z = 1.0e+015 * 0.5004 -1.0008 4.5036 -1.0008 2.0016 -9.0072 0.5004 -1.0008 4.5036

    M= eye(4) M = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1

    J = [ 1 2 3 4; 5 6 7 8 ; 1 1 1 1; 2 2 2 2] J = 1 2 3 4 5 6 7 8 1 1 1 1 2 2 2 2

    S=M * J S = 1 2 3 4 5 6 7 8 1 1 1 1 2 2 2 2

    >> A = [ 3 6 4; 3 8 5; 1 4 2 ] A = 3 6 4 3 8 5 1 4 2 >> B = inv(A) B = 2.0000 -2.0000 1.0000 0.5000 -1.0000 1.5000 -2.0000 3.0000 -3.0000

    >> A * B ans = 1.0000 0 0 0 1.0000 0 0 0 1.0000

    >> B * A ans = 1.0000 0 0 0 1.0000 0 0 0 1.0000

  • 43

    Una matriz identidad de m por m se genera con >> s = eye(5) s = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1

    Una matriz nula de m por m es >> x = zeros(5) x = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    Una matriz nula de m por n se genera con s = zeros(m,n). >> v = zeros(2,4) v = 0 0 0 0 0 0 0 0

    Escribiremos una matriz de m por n >> q = ones(4,3) q = 1 1 1 1 1 1 1 1 1 1 1 1

    Tambin: >> d = ones(3) d = 1 1 1 1 1 1 1 1 1

    >> r = ones(3,3) r = 1 1 1 1 1 1 1 1 1

    MANIPULACION DE MATRICES

    MATLAB proporciona funciones que manipulan matrices (mas a detalle se pueden encontrar en el Help del Matlab):

    [m,n] = size(A) Devuelve el nmero de filas y de columnas de la matriz A. Si la matriz es cuadrada basta recoger el primer valor de retorno

    n=length(x) calcula el nmero de elementos de un vector x

    A=diag(x)

    forma una matriz diagonal A cuyos elementos diagonales son los elementos de un vector ya existente x (puedes usarlo para generar una matriz diagonal con los componentes del vector existente) x=[ 1 4 6 7 ] x = 1 4 6 7

  • 44

    >> A = diag( x ) A = 1 0 0 0 0 4 0 0 0 0 6 0 0 0 0 7 >> A = diag([20:-4:4]) A = 20 0 0 0 0 0 16 0 0 0 0 0 12 0 0 0 0 0 8 0 0 0 0 0 4 Tambin se puede usar el comando diag para buscar las diagonales de una matriz >> A = magic(5) A = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9

    >> diag(A,2) ans = 1 14 22

    >> diag(A,1) ans = 24 7 20 3

    >> diag(A,0) ans = 17 5 13 21 9

    >> diag(A,-1) ans = 23 6 19 2

    >> diag(A,-2) ans = 4 12 25

    >> diag(A,-3) ans = 10 18

  • 45

    x=diag(A)

    forma un vector x a partir de los elementos de la diagonal de una matriz ya existente A A = 1 2 3 4 5 6 7 8 9 >>x = diag( A ) ans = 1 5 9

    diag(diag(A))

    crea una matriz diagonal a partir de la diagonal de la matriz A >> m=magic(4) m = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 >> diag(diag(m)) ans = 16 0 0 0 0 11 0 0 0 0 6 0 0 0 0 1

    blkdiag(A,B)

    crea una matriz diagonal de sub-matrices a partir de las matrices que se le pasan como argumentos

    triu(A)

    Forma una matriz triangular superior a partir de una matriz A (no es necesario que sea cuadrada).

    tril(A)

    dem con una matriz triangular inferior

    rot90(A,k)

    Gira k*90 grados la matriz rectangular A en sentido anti-horario. k es un entero que puede ser negativo. Si se omite, se supone k=1

    flipud(A)

    halla la matriz simtrica de A respecto de un eje horizontal >> A = [ 1 3 5; 5 6 7 ] A = 1 3 5 5 6 7

  • 46

    >> flipud( A ) ans = 5 6 7 1 3 5

    fliplr(A) halla la matriz simtrica de A respecto de un eje vertical

    reshape(A,m,n)

    Cambia el tamao de la matriz A devolviendo una matriz de tamao m n cuyas columnas se obtienen a partir de un vector formado por las columnas de A puestas una a continuacin de otra. Si la matriz A tiene menos de m n elementos se produce un error. >> a=[10 22 31; 45 53 62; 78 86 97; 14 26 34] a = 10 22 31 45 53 62 78 86 97 14 26 34 >> k=reshape( a , 2 , 6) k = 10 78 22 86 31 97 45 14 53 26 62 34

    Si f es una matriz >> f = [4 5 6 ;6 8 7 ;1 6 3] f = 4 5 6 6 8 7 1 6 3 se puede generar la matriz nula y la matriz unidad del mismo tamao de f con la siguientes ordenes:

    >> zeros(size(f)) ans = 0 0 0 0 0 0 0 0 0 >> ones(size(f)) ans = 1 1 1 1 1 1 1 1 1

    Generamos una matriz aleatoria con: >> g = rand(2,4) g = 0.9501 0.6068 0.8913 0.4565 0.2311 0.4860 0.7621 0.0185 >> h = rand(3,3) h = 0.8214 0.7919 0.1763 0.4447 0.9218 0.4057 0.6154 0.7382 0.9355 >> h = rand(5,2) h = 0.9501 0.7621 0.2311 0.4565 0.6068 0.0185 0.4860 0.8214 0.8913 0.4447

  • 47

    FUNCIONES QUE ACTAN SOBRE MATRICES Las siguientes funciones exigen que el/los argumento/s sean matrices. En este grupo aparecen algunas de las funciones ms tiles y potentes de MATLAB. FUNCIONES MATRICIALES ELEMENTALES:

    FUNCION ACCION

    B = A' Calcula la traspuesta (conjugada) de la matriz A

    B = A.' Calcula la traspuesta (sin conjugar) de la matriz A

    v = poly(A) Devuelve un vector v con los coeficientes del polinomio caracterstico de la matriz cuadrada A

    t = trace(A) Devuelve la traza t (suma de los elementos de la diagonal) de una matriz cuadrada A

    [m,n] = size(A) Devuelve el nmero de filas m y de columnas n de una matriz rectangular A

    n = size(A) Devuelve el tamao de una matriz cuadrada A

    nf = size(A,1) Devuelve el nmero de filas de A

    nc = size(A,2) Devuelve el nmero de columnas de A

    EJERCICIOS SOBRE EL TRATAMIENTO DE MATRICES CON MATLAB 1. Defina una matriz de 15 x 15 y luego escriba las ordenes para obtener la suma de los elementos

    de cada filas, de los elementos de cada columna y la suma del total de todo los elementos de la matriz

    2. Dada la siguiente matriz A, escribir la orden usando funciones conocidas para el tratamiento de

    matrices y tener la parte resaltada con rojo en el arreglo BB y la parte resaltada con verde en el arreglo CC: Nota: no copie los elementos de la matriz

    64 9 17 40 32 41 49 8

    2 55 47 26 34 23 15 58

    3 54 46 27 35 22 14 59

    61 12 20 37 29 44 52 5

    60 13 21 36 28 45 53 4

    6 51 43 30 38 19 11 62

    7 50 42 31 39 18 10 63

    57 16 24 33 25 48 56 1

  • 48

    3. Sin usar la forma comn de definir una matriz; es decir: a=[2 1 1; 1 2 1; 1 1 2], solo usando comando conocidos para el tratamiento de matrices definir la siguiente matriz:

    2 1 1 1 2 1 1 1 2

    4. Dada la siguiente matriz A, escribir la orden usando funciones conocidas para el tratamiento de

    matrices y transformar dicha matriz en la matriz inferior. As mismo; la parte resaltada con rojo y lila debe transferirse a una matriz CC : Nota: no copie los elementos de la matriz

    64 9 17 40 32 41 49 8

    2 55 47 26 34 23 15 58

    3 54 46 27 35 22 14 59

    61 12 20 37 29 44 52 5

    60 13 21 36 28 45 53 4

    6 51 43 30 38 19 11

    62

    7 50 42 31 39 18 10 63

    57 16 24 33 25 48 56 1

    64 9 17 40 32 41 49 8

    2 55 47 26 34 23 15 58

    3 54 0 0 0 0 14 59

    61 12 0 1 1 0 52 5

    60 13 0 1 1 0 53 4

    6 51 0 0 0 0 11

    62

    7 50 42 31 39 18 10 63

    57 16 24 33 25 48 56 1

    Y tener la siguiente respuesta: CC=

    0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0

    5. Dada la siguiente matriz A, escribir la orden usando funciones conocidas para el tratamiento de

    matrices para EXTRAER los elementos con color a arreglos AA y BB: Nota: no copie los elementos de la matriz

    144 13 25

    108 96 61 73 60 48

    109 121 12

    2 131 119 38 50 83 71 86 98 35 23

    134

    3 130 118 39 51 82 70 87 99 34 22

    135

    141 16 28

    105 93 64 76 57 45 112 124

    9

    140 17 29

    104 92 65 77 56 44

    113 125

    8

    6 127 115 42 54 79 67 90

    102 31 19

    138

    7 126 114 43 55 78 66 91

    103 30 18

    139

    137 20 32 101 89 68 80 53 41

    116 128

    5

    136 21 33

    100 88 69 81 52 40 117 129

    4

    10 123 111 46 58 75 63 94

    106 27 15

    142

    11 122 110 47 59 74 62 95

    107 26 14

    143

    133 24 36 97 85 72 84 49 37

    120 132

    1

  • 49

    6. Dada la siguiente matriz A, escribir la orden usando funciones conocidas para el tratamiento de matrices para EXTRAER los elementos de color rojo a arreglos AA y BB, luego calcular la suma y producto de dichos elementos: Nota: no copie los elementos de la matriz

    35 3 31 8 30 4

    1 32 9 28 5 36

    6 7 2 33 34 29

    26 21 22 17 12 13

    19 23 27 10 14 18

    24 25 20 15 16 11

    7. Dada la siguiente matriz A, escribir las ordenes usando funciones conocidas para el tratamiento

    de matrices para tener como resultado la matriz B: Nota: no copie los elementos de la matriz

    17 23 4 10 11

    24 5 6 12 18

    1 7 13 19 25

    8 14 20 21 2

    15 16 22 3 9

    9 3 22 16 15

    2 1

    20 14 8

    25 19 13 7 1

    18 12 6 5 4

    11 10 4 3 7

    8. Hacer un programa en matlab para establecer campos para ingresar datos de una matriz ( El

    usuarios debe preguntar Cuntas filas y cuntas columnas debe tener la matriz ), de acuerdo a ello se debe abrir una tabla para ingresar datos y operar los siguientes clculos (suma, resta, multiplicacin y divisin)

    9. Se quiere saber como podra formarse la siguiente matriz:

    X = 5 5 5 4 4 4 5 5 5 4 4 4 5 5 5 4 4 4 5 5 5 4 4 4 5 5 5 4 4 4 5 5 5 4 4 4

    10. Dibuje un rbol de navidad usando comandos del MATLAB (relacionado matrices u otros)

  • 50

    GRAFICOS CON MATLAB

    OBJETIVO

    Generar grficos bi-dimensionales de diversas funciones establecidas con el comando plot del MatLab.

  • 51

    GRAFICOS CON MATLAB Toda funcin matemtica se puede representar grficamente para poder interpretarlo y visualizar las tendencias que poseen, son muy usadas en la solucin de ecuaciones ya que permite visualizar los resultados a priori y poder seguir evaluando para hallarlos con precisin. ESQUEMATIZACION SIMPLE

    Suponga que desea graficar un conjunto de puntos de datos, (xi, yi), i=1, 2, ...n. Es necesario preparar x y y en forma de arreglos con igual nmero de puntos, es decir, convertirlos en arreglos de fila o de columna de la misma longitud. Los datos se grafican con plot. Por ejemplo, y = sen(x)exp(-0.4x), -1= 10, se grafica con el listado 2.1 EJEMPLOS Listado 2.1 x = -1 : 0.08 : 10; y = sin (x) .* exp(-0.3.* x); plot(x,y) xlabel( 'x' ); ylabel('y') obteniendo el siguiente resultados

    Otra forma es utilizar vectores de columna en los argumentos de plot, como se muestra en el siguiente guin: Listado 2.2 x = ( -1 : 0.05 :10)' ; y = sin(x).*exp(-0.3.* x); plot(x,y) xlabel( 'x' ) ; ylabel( 'y' )

  • 52

    USO DE MARCAS: Los datos pueden graficarse slo con marcas sin estar conectados por lneas. Se dispone de cinco tipos de marcas o letras:

    Tipo de marca Simbolo Tipo de marca Simbolo

    Punto . Circulo o Ms + Marca x x

    Estrella * Si desea graficar con un solo tipo de marca, coloque el smbolo de la marca como una cadena despus de las coordenadas en los argumentos de plot. La grfica del listado 2.4 se muestra en la figura 2.3 Listado 2.3 x = (0 : 0.4 : 10 ) ; y = sin(x) . * exp(-0.4 * x) ; plot ( x , y , + ) xlabel( 'x' ) ; ylabel( 'y' ) obteniendo el resultado adjunto Tambien x = (0 : 0.4 : 10 ) ; y = sin(x) . * exp(-0.4 * x) ; plot ( x , y , -o ) xlabel( 'x' ) ; ylabel( 'y' )

  • 53

    Tipos y colores de lneas: Se dispone de cuatro tipo de lneas

    Tipo de lnea Smbolo Tipo de lnea Smbolo

    Continua - Punteada :

    Guiones -- Guiones y puntos -. El tipo de lnea por omisin es el continuo. Si deseas graficar con un tipo de lnea en particular, especifique la marca de lnea despus de las coordenadas; por ejemplo:

    Plot( x , y , ) Se dispone de los siguientes colores:

    Color de lnea Smbolo Color de Lnea Smbolo

    Rojo r Verde g Amarillo y Azul b Magenta m Blanco w Turquesa c Negro k

    Utilice el smbolo del color igual que los tipos de lnea en el argumento de plot; por ejemplo:

    Plot( x , y , g ) Tambin es posible combinar marcas y colores: Plot( x , y , + g ) grafica los datos con marcas + de color verde Ejemplo: %PROG32 x=-5:0.1:15; y=sin(x); z=cos(x); plot(x,y,'.-r',x,z,'*b'); title('PROG32: MULTIPLES CURVAS')

  • 54

    %prog21 x=0:0.05:10; y=sin(x).*exp(-0.4*x); plot(x,y) xlabel('x');ylabel('y') title('PROG21')

    %Tambin se pueden utilizar %vectores de columna en los %argumentos de plot, como se %muestra a continuacin %prog22 x=(0:0.05:10)'; y=sin(x).*exp(-0.4*x); plot(x,y) xlabel('x');ylabel('y') title('PROG22')

    %PROG23 p=0: 0.05:8*pi; z = (cos(p) + i*sin(2*p)).*exp(-0.05*p) + 0.01*p; plot(real(z), imag(z)) xlabel('Re(z)') ; ylabel('Im(z)') title('PROG23') Nota: Re(z) : Parte real de un nmero complejo Imag(z) : Parte imaginaria de un nmero complejo

  • 55

    %PROG24 x=(0:0.4:10)'; y=sin(x).*exp(-0.4*x); plot(x,y,'*') xlabel('x');ylabel('y') title('PROG24: grafico con un solo tipo de marca')

    %PROG25 x=(0:0.2:10)'; y=sin(x).*exp(-0.4*x); plot(x,y) grid on xlabel('x');ylabel('y') title('PROG25: Figura con reticula')

    %PROG26 t=0:0.2:pi+.010; y=sin(3*t).*exp(-0.3*t); polar(t,y) title('PROG26: grafica con polar') grid

  • 56

    %PROG27 t=0.1:0.1:3; x=exp(t); y=exp(t.*sinh(t)); loglog(x,y) grid xlabel('x'); ylabel('y'); title('PROG27: Grafica semilogaritmica...')

    %PROG28 t=0.1:0.1:3; semilogy(t,exp(t.*t)) grid xlabel('t'); ylabel('exp(t.*t)'); title('PROG28: Grafica semilogaritmica...')

    %PROG29 t=0.1:0.1:3; semilogx(t,exp(t.*t)) grid xlabel('t'); ylabel('exp(t.*t)'); title('PROG28: Grafica semilogaritmica...')

  • 57

    %PROG30 x=0:0.05:5; y=sin(x); z=cos(x); plot(x,y,x,z) ; title('PROG30: MULTIPLES CURVAS')

    %PROG31 x=0:0.05:5; y=sin(x); z=cos(x); plot(x,y,'r',x,z,'b') ; title('PROG30: MULTIPLES CURVAS')

    %PROG32 x=0:0.05:5; y=sin(x); z=cos(x); plot(x,y ,'. -r' , x,z ,'*b') ; title('PROG32: MULTIPLES CURVAS')

  • 58

    %PROG33 clear; clf; hold off x=0:0.05:5; y=sin(x); plot(x,y,'*b'); hold on z=cos(x); plot(x,z,'--r') xlabel('x'); ylabel('y(-), z(--)'); hold off %PROG34 M=[0:0.01:1]' k=1.4; p0_entre_p = (1 + (k-1)/2+M.^2).^(k/(k-1)); plot(M,p0_entre_p) xlabel('M,numero de Mach') ylabel('p0/p') title('Relacion de presion, p(estancamiento/p(estatica)') %PROG34-A clear; clf; hold off x=0:0.05:5; y=tan(x); plot(x,y,'*b'); hold on z=cot(x); plot(x,z,'--r'); title('Grfico Tangente - Cotangente') xlabel('x'); ylabel('y(-), z(--)'); hold off

  • 59

    %PROG35 %RELACION DE PRESION vs NUMERO DE MACH clear; clf; hold off; M=[0:0.01:0.9]'; k=1.4; p0_entre_p = (1 + (k-1)/2+M.^2) .^ (k/(k-1)); hold on axis('square'); %Hace que la grafica sea cuadrada plot(M,p0_entre_p) xlabel('M,numero de Mach') ylabel('p0/p') title('Relacion de presion, p(estancamiento/p(estatica)') text(0.35, 5.55, 'compresible') Mb = [0:0.01:0.9]'; p0_entre_pb = 1 + k/2*Mb.^2; plot(Mb, p0_entre_pb,'*') text(0.5, 0.8, 'Incompresible')

  • 60

    EJEMPLOS ADICIONALES PROGRAMA PARA LA LEY DE BOYLE %Ley de Bolye-Mariotte PV = K %PV = nR.T n=1 y R=0.08205 t=25+273=298K clc hold off clear all; clear memory; clear command history; clc for T=298:100:698; K = 1.*0.08205.*T ; P=1:0.01:10; V = K./P ; switch T case 298 xox='-r'; case 398 xox='-k'; case 498 xox='-b'; case 598 xox='-m'; case 698 xox='-.R'; end hold on; grid on; title(' Perfiles de la Ley de Boyle - Mariotte ') ylabel(' Presin - atm '); xlabel(' Volmen - Lts '); plot(V,P,xox); end h = legend('T=298K','T=398K','T=498K','T=598K','T=698K',1); axis([0 60 0 10]) % Para el caso del grfico (P vs 1/V) figure; hold on; grid on for T=298:100:698; K = 1.*0.08205.*T ; P=1:0.01:10; V = K./P ; switch T case 298 xox='-r'; case 398 xox='-k'; case 498 xox='-b'; case 598 xox='-m'; case 698 xox='-.R'; end title(' Perfiles de la Ley de Boyle - Mariotte ') ylabel(' Presin - atm '); xlabel(' Volmen (1/V) Lts -1 '); plot((1./V),P,xox) end h = legend('T=298K','T=398K','T=498K','T=598K','T=698K',4); axis([0 0.45 0 10])

  • 61

    % Para el caso del grfico (P.V vs 1/V ) figure; hold on; grid on for T=298:100:698; K = 1.*0.08205.*T ; P=1:0.01:10; V = K./P ; PV=P.*V ; switch T case 298 xox='-r'; case 398 xox='-k'; case 498 xox='-b'; case 598 xox='-m'; case 698 xox='-.R'; end title(' Perfiles de la Ley de Boyle - Mariotte ') ylabel(' Presin*Volumen - atm*L '); xlabel(' Volmen (1/V) Lts -1 '); plot((1./V),PV,xox) end h = legend('T=298K','T=398K','T=498K','T=598K','T=698K',1); RESULTADOS

  • 62

  • 63

    PROGRAMA PARA LA LEY DE CHARLES %Ley de Charles V/T = K Proceso a Presin constante %PV = nR.T n=1 y R=0.08205 P=1 atm clc hold off clear all; clear memory; clear command history; clc for P=1:5:21; K = 1.*0.08205./P ; V=0.05:0.05:10; T = V./K ; switch P case 1 xox='-r'; case 6 xox='-k'; case 11 xox='-b'; case 16 xox='-m'; case 21 xox='-.R'; end hold on; grid on; title(' Perfiles de la Ley de Charles ') ylabel('Volmen - Lts '); xlabel(' Temperatura K '); plot(T,V,xox); end h = legend('P=1 atm','P=6 atm','P=11 atm','P=16 atm','P=21 atm',4); axis([0 3000 0 10]) % Para el caso del grfico (P vs 1/T) figure; hold on; grid on for P=1:5:21; K = 1.*0.08205./P ; V=0.05:0.05:10; T = V./K ; switch P case 1 xox='-r'; case 6 xox='-k'; case 11 xox='-b'; case 16 xox='-m'; case 21 xox='-.R'; end hold on; grid on; title(' Perfiles de la Ley de Charles ') ylabel('Volmen - Lts '); xlabel(' Temperatura (1/T) K-1 '); plot((1./T),V,xox); end h = legend('P=1 atm','P=6 atm','P=11 atm','P=16 atm','P=21 atm',1); axis([0 0.035 0 10])

  • 64

    % Para el caso del grfico (P.V vs 1/V ) figure; hold on; grid on for P=1:5:21; K = 1.*0.08205./P ; V=0.01:0.01:10; T = V./K ; switch P case 1 xox='-r'; case 6 xox='-k'; case 11 xox='-b'; case 16 xox='-m'; case 21 xox='-.R'; end hold on; grid on; title(' Perfiles de la Ley de Charles ') ylabel('Volmen - Lts '); xlabel(' Temperatura (t) C '); plot((T-273),V,xox) end h = legend('P=1 atm','P=6 atm','P=11 atm','P=16 atm','P=21 atm',4); axis([-500 2500 0 10]) RESULTADOS

  • 65

  • 66

    PROGRAMA PARA EL CLCULO DEL VOLUMN CON LA ECUACION DE VAN DER WAALS % Clculo del volumen con Ecuacin de Van Der Waals Metano clear all; clear memory; clear command history; clc T=273; % K P=100; % atm Tc=190.6 % K Pc=45.4 % atm R=0.08205 b=R*Tc/(8*Pc) a=27*R*R*Tc*Tc / (64*Pc) Vm=0.1:0.1:100; PP = ((R.*T./(Vm - b)) - (a./(Vm.*Vm))); plot(Vm,PP); grid on nombre_f='( (R.*T./(x - b)) - (a./(x.*x)) )-P'; i=1; delta=0.005; x0=0.05; e=1; while e>3E-12 & i

  • 67

    PROGRAMA %TRATAMIENTO TERCIARIO DE AGUAS RESIDUALES CON CARBON ACTIVADO clc;clear memory;clear command history;clear all format short g p1=[0.76 1.52 2.28]; t1=[740 1789 2780]; y1=polyfit(p1,t1,1); m1=y1(1); %pendiente ; b1=y1(2); %ordenada al origen p11=[0.0:0.01:2.40]; %plot(p11,p11*m1+b1); hold on %---------------- p2=[0.76 1.52 3.04]; t2=[180 560 1330]; y2=polyfit(p2,t2,1);m2=y2(1); b2=y2(2); p22=[0.0:0.01:3.10]; %plot(p22,p22*m2+b2); %-------------- p3=[1.52 3.04 4.56]; t3=[170 500 830]; y3=polyfit(p3,t3,1);m3=y3(1); b3=y3(2); p33=[0.0:0.01:5.00]; %plot(p33,p33*m3+b3); %------------------ p4=[1.52 4.56 7.60]; t4=[60 390 730]; y4=polyfit(p4,t4,1); m4=y4(1); b4=y4(2); p44=[0.0:0.01:8.00]; %plot(p44,p44*m4+b4); grid on plot(p11,p11*m1+b1,p22,p22*m2+b2,p33,p33*m3+b3,p44,p44*m4+b4); text(2.2,2560,'Experimento 1','BackgroundColor',[.7 .9 .7]);text(3,1060,'Experimento 2','BackgroundColor',[.7 .9 .7]); text(4.7,700,'Experimento 3','BackgroundColor',[.7 .9 .7]), text(5.7,400,'Experimento 4','BackgroundColor',[.7 .9 .7]); xlabel('Profundidad D (m)'); ylabel('Tiempo t (h)'); title('REPRESENTACION DE TIEMPO-t vs PROFUNDIDAD DE LECHO-D','BackgroundColor',[.7 .9 .7]) hold off %--------------------- %Caudal en m3/hr y diametro del lecho de prueba piloto en mts qa1=0.00248; qa2=0.0049; qa3=0.0099; qa4=0.0198; diamlecho=0.0254; %Caudal en L/(min*m2) - el factor de conversion de conversion de m3/hr a L/(min*m2) es 21.2207 qa11=(4*1000/(60*pi))*qa1/(diamlecho^2); qa22=(4*1000/(60*pi))*qa2/(diamlecho^2); qa33=(4*1000/(60*pi))*qa3/(diamlecho^2); qa44=(4*1000/(60*pi))*qa4/(diamlecho^2); %Calculo de la velocidad en mts/hr v1=0.06*qa11; v2=0.06*qa22; v3=0.06*qa33; v4=0.06*qa44; %Calculo de la concentracion inicial de contaminante en mg/L - el factor de %conversion es 0.001 para que este dado en Kg/m3 - debe ingresar con input Coo y Cee Coo=20; Cee=1; Co=0.001*Coo; Ce=0.001*Cee; %Calculo de No en Kg/m3 No1=Co*v1*m1; No2=Co*v2*m2; No3=Co*v3*m3;

  • 68

    No4=Co*v4*m4; %Calculo de la constante de velocidad - m3/(Kg de carbon * hr) %Se trabaja con Coo=20 y Cee=1 Ambos deben ingresar con imput k1=-log((Co/Ce)-1)/(b1*Co); k2=-log((Co/Ce)-1)/(b2*Co); k3=-log((Co/Ce)-1)/(b3*Co); k4=-log((Co/Ce)-1)/(b4*Co); %Calculo de la profundidad crtica (mts) Do1=log((Co/Ce)-1)*v1 / (k1*No1); Do2=log((Co/Ce)-1)*v2 / (k2*No2); Do3=log((Co/Ce)-1)*v3 / (k3*No3); Do4=log((Co/Ce)-1)*v4 / (k4*No4); %Grafico de los datos encontrados figure Q=[qa11 qa22 qa33 qa44]; KK=[k1 k2 k3 k4]; DD=[Do1 Do2 Do3 Do4]; NN=[No1 No2 No3 No4]; subplot(2,2,1);plot(Q,KK,'*-');xlabel('Caudal-L/(min*m2)');ylabel('K - m3/(Kg*hr)');grid on subplot(2,2,2);plot(Q,DD,'O-');xlabel('Caudal-L/(min*m2)');ylabel('Do - m)');grid on subplot(2,2,3);plot(Q,NN,'*-');xlabel('Caudal-L/(min*m2)');ylabel('No - Kg/m3)');grid on %---- %Ajuste de curva para encontrar la ecuacion de cada una de ellas Q1Q=[81.5:50:681.5]; k2 =polyfit(Q,KK,2); % ES IGUAL A [p,S] = polyfit(Q,KK,2) ko2=k2(1).*Q1Q.*Q1Q + k2(2).*Q1Q + k2(3); cof11=k2(1); cof22=k2(2); cof33=k2(3); %k3=polyfit(Q,KK,3) %Existe mucha dispersion, por lo que se desecha %ko3=k3(1).*Q1Q.*Q1Q.*Q1Q + k3(2).*Q1Q.*Q1Q + k3(3).*Q1Q + k3(4) n2 =polyfit(Q,NN,2); % Es igual a [p,s]=polyfit(Q,NN,2) no2=n2(1).*Q1Q.*Q1Q + n2(2).*Q1Q + n2(3); cof1=n2(1); cof2=n2(2); cof3=n2(3); %n3 =polyfit(Q,NN,3); %Existe mucha dispersion, por lo que se desecha %no3=n3(1).*Q1Q.*Q1Q.*Q1Q + n3(2).*Q1Q.*Q1Q + n3(3).*Q1Q + n3(4) %no33=(no2+no3)/2 %plot(Q,NN,'*-',Q1Q,no2,'o-',Q1Q,no3,'*-') d2 =polyfit(Q,DD,2); do2=d2(1).*Q1Q.*Q1Q + d2(2).*Q1Q + d2(3); cof111=d2(1); cof222=d2(2); cof333=d2(3); %---------INCREMENTADO figure subplot(2,2,1);plot(Q1Q,ko2,'*-');xlabel('Caudal-L/(min*m2)');ylabel('K - m3/(Kg*hr)');grid on subplot(2,2,2);plot(Q1Q,do2,'O-');xlabel('Caudal-L/(min*m2)');ylabel('Do - m)');grid on subplot(2,2,3);plot(Q1Q,no2,'*-');xlabel('Caudal-L/(min*m2)');ylabel('No - Kg/m3)');grid on %-------FIN DE INCREMENTO %DATOS DE PROBLEMA REAL %Caudal en m3/hr y diametro del lecho de prueba piloto en mts - profundidad - prof en mts qaa1=4; diamlecho1=0.76; prof=1.82; %Caudal en L/(min*m2) - el factor de conversion de conversion de m3/hr a L/(min*m2) es 21.2207 qaa11=(4*1000/(60*pi))*qaa1/(diamlecho1^2); area=(pi/4)*diamlecho1^2; %Calculo de la velocidad en mts/hr ve1=0.06*qaa11; %Modulo para halla K ko22 en m3/(kg*hr) y No no22 en kg/m3 no22=cof1*qaa11*qaa11 + cof2*qaa11 + cof3; ko22=cof11*qaa11*qaa11 + cof22*qaa11 + cof33;

  • 69

    do22=cof111*qaa11*qaa11 + cof222*qaa11 + cof333; %Calculo del tiempo de servicio t=((no22*prof)/(ve1*Co)) - (log((Co/Ce)-1)/(ko22*Co)); %horas/ciclo %Parte2:Calculo del numero de cambios de carbon por ao y volumen anual de carbon NumCamCar=365*24 / t ; VolAnualCarbon = prof*area*NumCamCar ; %Parte3:Estimacion de eliminacion del soluto (Kg/ao) %Kg soluto separado por ciclo=kg soluto en afluente-Kg soluto en efluente VolAR=qaa1*t; %Kg de soluto en el afluente por ciclo SolutAfluen=VolAR * Co; %Calculo del soluto residual - Kg de soluto por ciclo SolutEfluen=VolAR * Ce; SolutSeparado = SolutAfluen - SolutEfluen; SolutSepanual = SolutSeparado*NumCamCar; %Parte4: Rendimiento de la adsorcion CapTotAdsor=no22*VolAnualCarbon; rendimiento = (SolutSepanual/CapTotAdsor)*100; %Rendimiento basandose en Do para un caudal de 148 L/(min*mt2) Rendimiento = ((prof - do22)/prof)*100; %Los resultados disp(' '); disp('------------------------------------------------------------------') disp('RESULTADOS '); disp('------------------------------------------------------------------') disp(' APLICACION DE LOS DATOS DE LABORATORIO ') disp(' AL DISEO DE UNA PLANTA A ESCALA REAL ') disp('------------------------------------------------------------------') disp('PARTE1: CALCULO DEL TIEMPO DE SERVICIO') disp('------------------------------------------------------------------') fprintf('Capacidad de Adsorcin (No) = %g (Kg/m3)\n' ,no22) fprintf('Constante de Velocidad (K) = %g (m3/(kg*hr)\n',ko22) fprintf('Tiempo de servicio (t) = %g (hr/ciclo)\n' ,t) disp(' ') disp('-------------------------------------------------------------------') disp('PARTE2: CAMBIO DE CARBON POR AO Y VOLUMEN ANUAL DE CARBON') disp('-------------------------------------------------------------------') fprintf('# de Cambios de Carbn / ao (NumCamCar) = %g (Ciclo/ao)\n',NumCamCar) fprintf('Volmen anual de carbn (VolAnualCarbon) = %g (m3)\n',VolAnualCarbon) disp(' ') disp('-------------------------------------------------------------------') disp('PARTE3: ESTIMACION DE LA ELIMINACION DE SOLUTO (kg/ao)') disp('kg de soluto separado=Kg soluto en afluente - Kg soluto en efluente') disp('-------------------------------------------------------------------') fprintf('Volmen de Agua Residual (VolAR) = %g (m3/ciclo)\n',VolAR) fprintf('Eliminacin de soluto (SolutSeparado) = %g (kg/ciclo)\n',SolutSeparado) fprintf('Soluto separado anual (SolutSepanual) = %g (kg/ciclo)\n',SolutSepanual) disp(' ') disp('-------------------------------------------------------------------') disp('PARTE4: RENDIMIENTO DE LA ADSORCION') disp('-------------------------------------------------------------------') disp('Basado en No: Capacidad de adsorcin') fprintf('Capacidad Total de Adsorcin (CapTotAdsor) = %g (m3/ciclo)\n',CapTotAdsor)

  • 70

    fprintf('Rendimiento (rendimiento) = %g (kg/ciclo)\n',rendimiento) disp('Basado en Do: Profundidad Crtica') fprintf('Rendimiento (Rendimiento) = %g (m3/ciclo)\n',Rendimiento) disp(' ') disp('-------------------------------------------------------------------') disp(' ') disp(' ') RESULTADOS

  • 71

  • 72

    PROGRAMA %CAPACIDAD DE ADSORCION DE CARBON GRANULADO clc;clear memory;clear command history;clear all dc=[0 0.4 0.8 1.6 3.2 9.75]; dcA=[0 0.08 0.16 0.32 0.64 1.95]; dcB=[0 0.08 0.16 0.32 0.64 3.00]; imreA=[400 248 164 92 34 10]; imreB=[400 280 200 120 60 10]; %subplot(1,2,1) plot(dcA,imreA,'o-',dcB,imreB,'*-') title('Isoterma de adsorcion');xlabel('Dosage de carbn - gr/200mL'); ylabel('Impurezas remanentes - mg/L') text(0.8,110,'O - Carbn A');text(0.8,85,' * - Carbn B');grid on %subplot(1,2,2) figure imreA=[400 248 164 92 34 10]; imreB=[400 280 200 120 60 10]; XMA=[0 380 295 193 114 40]; XMB=[0 300 250 175 106 26]; LnimreA=log(imreA); LnimreB=log(imreB); LnXMA=log(XMA); LnXMB=log(XMB); %figure loglog(imreA,XMA,'o-',imreB,XMB,'-*') title('Isoterma de adsorcion'); xlabel('Impurezas remanentes - mg/L'); ylabel('X/M Impurezas adosrbidas/peso de carbon usado - mgr/gr'); text(100,50,'O - Carbn A');text(100,40,'* - Carbn B'); grid on %Determinacion de carga de carbon desde los perfiles de las isotermas a un %nivel de impureza final deseada - Mtodo de Interpolacin SeA=20 ; SeB=20; Carga_carA = interp1(imreA,XMA,SeA); Carga_carB = interp1(imreB,XMB,SeB); %Cculo de la impureza eliminada - Se conoce So=400 mg/L y Se=20 Mg/L SoA=400; SoB=400; % mg/L Impu_elimA = SoA - SeA; Impu_elimB = SoB - SeB; %Promedio de uso de carbon Prom_uso_carbonA = Impu_elimA / Carga_carA; Prom_uso_carbonB = Impu_elimB / Carga_carB; clc; %Los resultados disp(' '); disp('------------------------------------------------------------------') disp('RESULTADOS '); disp('------------------------------------------------------------------') disp('CAPACIDAD DE ADSORCION DE CARBON GRANULADO ') disp('------------------------------------------------------------------') disp(' ') disp('Clculo de carga de carbn desde las isotermas:')

  • 73

    disp('-----------------------------------------------') fprintf('Carbn A (X/M) = %g (mg/g)\n' ,Carga_carA) %g es el formato mas corto fprintf('Carbn B (X/M) = %g (mg/g)\n' ,Carga_carB) %g es el formato mas corto disp(' ') disp('Promedio de uso de Carbn :') disp('---------------------------') fprintf('Uso de Carbn A = %g (mg/L)\n',Prom_uso_carbonA) fprintf('Uso de Carbn B = %g (mg/L)\n',Prom_uso_carbonB) disp(' ') disp('----------------------------------------------------------------------------') disp('De los resultados calculados se concluye que se requiere de aproximadamente') fprintf('%g \n',Prom_uso_carbonB - Prom_uso_carbonA ) disp('mas de carbn B para levar a cabo el mismo tratamiento. El precio unitario ') disp('de cada tipo de carbn puede ser usado para determinarel mejor caso de ') disp('costo-efectividad para una aplicacin de purificacin ') disp('----------------------------------------------------------------------------') RESULTADOS

  • 74

  • 75

    EJERCICIOS PROPUESTOS SOBRE EL TRATAMIENTO GRAFICO CON MATLAB 1. Dibujar la funcin y = x * e-x2 con

    x variando entre -5 y 5 a intervalos de 0.05, ponindole titulo y nombre a los ejes

    2. Mostrar las ordenes para

    obtener el siguiente grfico. Entre -3 y 3 hay 50 puntos

    3. Dibujar en una sola ventana con dos subventanas las funciones y = x2 -3*x 2 y z =

    x3 2*x + 1 con x variando entre -5 y 5 a intervalos de 0.02. La primera en lneas verdes continuas, la segunda en lneas azules discontinuas. Marcar con un '+' rojo el punto (2,1) en ambas grficas. Escribir las instrucciones

    4. Escribir las instrucciones para

    conseguir la segunda figura mostrada

    5. Se han usado diverso comandos no tratados en la clase correspondientes a grficos con Matlab,

    es necesario que Ud. Con ayuda el HELP del MATLAB, mencione el significado

  • 76

    6. Mencione el significado y uso de los comandos: disp, fprintf, hold on, figure

    7. El mecanismo de un pistn conectado mediante una varilla a una manivela es un problema clsico utilizado frecuentemente en aplicaciones de ingeniera. En el mecanismo que se muestra en la figura adjunta, la manivela tiene una velocidad constante de rotacin de 500 rpm. Calcular y representar grficamente la posicin, la velocidad y aceleracin del pistn para una de las revoluciones de la manivela. Represente tres grficos distintos. Consideras theta=0 en el instante t=0

    8. Un barco A viaja hacia el sur a una

    velocidad de 8 millas por hora, mientras que otro barco B viaja hacia el este a una velocidad de 16 millas por hora. A la 7 am los barcos estan a las distancias que se indica en la figura adjunta. Represente la distancia entre los barcos en funcin del tiempo para las siguientes cuatro horas. El eje horizontal debe mostrar el tiempo actual del da, comenzando por las 7 am, mientras que el eje vertical debe mostrar la distancia. Ponga titulo y etiquetas a los ejes. Si la visibilidad es de 8 millas, estime la hora a partir de la cual las personas de un barco pueden ver a las del otro.

    NOTA: los problemas 6 y 7 fueron tomados del texto MATLAB una introduccin con ejemplos prcticos - Amos Gilat 9. Grafique diez funciones relacionados con los cursos de Ingeniera Qumica, Fsica u

    otro, deben tener cierto grado de dificultad con conceptos de simulacin

  • 77

    GRAFICOS 3D

    OBJETIVO

    Generar grficos tri-dimensionales de diversas funciones establecidas con el comando plot3 del MatLab

    Tomado de la Web PARA USO INTERNO

  • 78

    GRAFICOS 3D

    La orden plot que utilizbamos en 2 dimensiones podemos tambin usarla en 3 dimensiones. El formato ser el mismo que en 2D, pero en vez de representar los datos en parejas, lo haremos en tripletes. El formato generalizado de la orden plot en 3D es:

    plot3(x,y,z,s)

    "x", "y", "z", sern los tres vectores, y "s" ser una cadena de caracteres adicional para indicar color y tipo de lnea. Si queremos representar varias curvas en un solo grfico, la orden ser de la forma:

    plot3(x1,y1,z1,s1,x2,y2,z2,s2,...xn,yn,zn,sn)

    Por ejemplo, si queremos representar una hlice en tres dimensiones:

    % Programa para representar una hlice en tres dimensiones clc; clear memory; clear command history; clear all; t=0:0.1:30; plot3(sin(t),cos(t),2*t) title('Hlice') xlabel('Seno(t)'); ylabel('Coseno(t)'),zlabel('2t')

    Para fijar manualmente los lmites de los ejes, usaremos la misma orden que en 2D, pero teniendo en cuenta al eje z:

    >>axis([xmin xmax ymin ymax zmin zmax] )

    Del mismo modo, podemos introducir texto en la grfica, usando coordenadas en 3D:

    >>text(x,y,z,'texto')

    -1-0.5

    00.5

    1

    -1-0.5

    00.5

    10

    10

    20

    30

    40

    50

    60

    Seno (t)

    Hlice

    Coseno (t)

    2 t

  • 79

    Por ejemplo, si en la grfica anterior queremos limitar los ejes al doble de su valor actual, e introducir la etiqueta "Grfica en 3D" en las coordenadas x=0.25, y=0.25, z=20: % Programa para representar una hlice en tres dimensiones clc; clear memory; clear command history; clear all; t=0:0.1:30; plot3(sin(t),cos(t),2*t) title('Hlice') xlabel('Seno (t)'); ylabel('Coseno (t)'),zlabel ('2 t') axis([-2 2 -2 2 0 120]); text(0.25,0.25,100,'GRAFICA EN 3D') grid

    Grficos de Malla

    Un grfico tridimensional de malla viene definido por una funcin z=f(x,y), de tal forma que los puntos de la superficie se representan sobre una rejilla, resultado de levantar los valores de z dados por f(x,y) sobre los correspondientes puntos (x,y) del plano. Los puntos adyacentes se unen mediante lneas rectas, dndolo al grfico un aspecto de malla. Para representar un grfico de malla, se utiliza el comando mesh y sus variantes. Estos grficos son muy tiles a la hora de visualizar grandes matrices o representar funciones de dos variables.

    El primer paso para representar una funcin de dos variables z=f(x,y), es utilizar el comando meshgrid, que bsicamente define la matriz de puntos (X,Y) sobre los cuales se evala la funcin de dos variables para hacer su representacin grfica. Su sintaxis es la siguiente:

    [X,Y]=meshgrid(x,y) Transforma el campo de definicin dado de las variables "x" e "y", de la funcin a representarz=f(x,y), en argumentos matriciales utilizables por el comando mesh para obtener el grfico de malla.

    -2-1

    01

    2

    -2-1

    01

    20

    20

    40

    60

    80

    100

    120

    Seno (t)

    GRAFICA EN 3D

    Hlice

    Coseno (t)

    2 t

  • 80

    Disponemos de tres tipos de grficos de malla:

    mesh(X,Y,Z) Representa el grfico de malla de la funcin z=f(x,y). Podemos aadir un argumento opcional C que indique el color de la rejilla.

    meshz(X,Y,Z) Representa el grfico de malla de la funcin z=f(x,y) con una especie de teln o cortina en la parte inferior

    meshc(X,Y,Z) Representa el grfico de malla de la funcin z=f(x,y) junto con el grfico de contorno correspondiente (curvas de nivel proyectadas sobre el plano x,y)

    Supongamos que queremos representar la grfica de malla para la siguiente funcin:

    El programa que introduciremos en MATLAB ser:

    % Programa para representar grfico tipo malla

    clc; clear memory; clear command history; clear all;

    [X,Y]=meshgrid(-7.5:0.5:7.5);

    Z=sin(sqrt(X.^2+Y^2))./(sqrt(X.^2+Y.^2)+eps);

    % Le sumaremos esp al denominador para no dividir por cereo

    % (eps es la cantidad ms pequea que maneja MATLAB, mayor que cero)

    subplot(2,2,1)

    mesh(X,Y,Z)

    title('Comando mesh')

    subplot(2,2,2)

    meshz(X,Y,Z)

    title('Comando meshz')

    subplot(2,2,3)

    meshc(X,Y,Z)

    title('Comando meshc')

    Los tres tipos de grficas de mallas que hemos visto son:

  • 81

    Grficos de Contorno

    Las grficas de contorno o sistema de planos acotados muestran lneas de elevacin o altura constante. As, dibujando diferentes curvas de nivel correspondientes a alturas constantes, se puede describir un mapa de lneas de nivel de la superficie. Son las grficas usadas en los mapas topogrficos. Los grficos de contorno pueden representarse en dos o en tres dimensiones

    En estos grficos se observa, por tanto, la variacin de z=f(x,y) con respecto a "x" y a "y". Cuando el espacio entre las curvas de nivel es grande, significa que la variacin de la variable "z" es lenta, mientras que un espacio pequeo indica un cambio rpido de "z".

    Los comandos que utiliza MATLAB para la representacin de grficos de contorno son los siguientes (todos ellos aceptan el argumento adicional sobre el color de las lneas):

    contour(Z) Dibuja el grfico de contorno para la matriz Z. El nmero de lneas de contorno a utilizar se elige automticamente

    contour(Z,n) Dibuja el grfico de contorno para la matriz Z usando n lneas de contorno

    contour(x,y,Z,n) Dibuja el grfico de contorno para la matriz Z usando en los ejes X e Y el escalado definido por los vectores "x" e "y", con n lneas de contorno

    contour3(Z), contour3(Z,n), contour3(x,y,Z,n) Dibujan los grficos de contorno en tres dimensiones

  • 82

    pcolor(X,Y,Z) Dibuja un grfico de contorno para la matriz (X,Y,Z) utilizando una representacin basada en densidades de colores. Suele denominarse grfico de densidad.

    Como ejemplo, vamos a representar las curvas de nivel que responden a la ecuacin:

    z=Sen(x)Sen(y) con -2 < x,y < 2

    En la primera grfica vemos su grfico de contorno en 2D, con 20 lneas. En la segunda, su grfico de contorno tridimensional, con 40 lneas. En la tercera dibujaremos su grfico de densidad:

    % Programa para representar grfico tipo contorno clc; clear memory; clear command history; clear all; [X,Y]=meshgrid(-2:0.1:2); Z=sin(X).*sin(Y); subplot(2,2,1) contour(Z,20,'b') title('GRAFICA DE CONTORNO 2D') subplot(2,2,2) contour3(Z,40,'b') title('GRAFICA DE CONTORNO 3D') subplot(2,2,3) pcolor(X,Y,Z) title('GRAFICA DE DENSIDAD')

  • 83

    Polgonos en Tres Dimensiones

    MATLAB permite dibujar polgonos en tres dimensiones. Para ello utiliza los siguientes comandos:

    fill3(X,Y,Z,C) Dibuja el polgono compacto cuyos vrtices son las tripletas de componentes (Xi,Yi,Zi) de los vectores columna X, Y y Z. C es un vector de la misma dimensin de X, Y y Z, que contiene los colores Ci de cada punto(Xi,Yi,Zi). Si C es solo un carcter, se pintarn todos los puntos del polgono del color correspondiente al carcter.

    fill3(X1,Y1,Z1,C1...Xn,Yn,Zn,Cn) Dibuja el polgono compacto cuyos vrtices vienen dados por los puntos (Xi,Yi,Zi,Ci)

    Un ejemplo de este tipo de grficos tridimensionales sera:

    % Programa para REPRESENTAR polgono en tres dimensiones

    clc; clear memory; clear command history; clear all;

    x=cos(0:0.01:8*pi);

    y=sin(0:0.01:8*pi);

    z=(0:0.01:8*pi);

    fill3(x,y,z,'r')

    -1-0.5

    00.5

    1

    -1-0.5

    00.5

    10

    5

    10

    15

    20

    25

    30

  • 84

    FUNDAMENTOS TEORICOS DE PROGRAMACION

    OBJETIVO

    Conocer los fundamentos bsicos de la programacin con MatLab y la relacin con el concepto de diagramas de flujo

  • 85

    LOS LENGUAJES DE PROGRAMACION: 1. Las operaciones que conducen a expresar un algoritmo en forma de programa se llama

    programacin 2. Un programa est compuesto por instrucciones, sentencias o proposiciones las cuales especifican

    ciertas operaciones que debe ejecutar la mquina 3. Existen:

    Lenguajes de mquina: Usan dgitos binarios ( 1 y 0 )

    Lenguajes de bajo nivel: Ensamblador - El programa fuente es compilado mediante el programa ensamblador para obtener el programa objeto

    Lenguaje de alto nivel: Son BASIC, Cobol, Pascal, FORTRAN, Visual Basic, Visual C, Visual Fox

    PROCESAMIENTO