manual-uso del matlab 01

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

Upload: felicia-luz-palacios-conde

Post on 22-Jan-2016

44 views

Category:

Documents


7 download

DESCRIPTION

este libro sirve como guia para usar el Matlab

TRANSCRIPT

Page 1: Manual-Uso del Matlab 01

º

LENGUAJE DE PROGRAMACIÓN CON MATLAB

FUNDAMENTOS TEORICOS Y PRACTICOS

ROJAS ZACARIAS, EDGAR ORE CERRON, JUAN JOSE

Page 2: Manual-Uso del Matlab 01

2

LENGUAJE DE PROGRAMACIÓN CON MATLAB

FUNDAMENTOS TEORICOS Y PRACTICOS

Rojas Zacarías Edgar Docente de la facultad de Ingeniería de Química

Universidad Nacional del Centro del Perú

Oré Cerrón Juan José Docente de la facultad de Ingeniería de Sistemas

Universidad Nacional del Centro del Perú

Page 3: Manual-Uso del Matlab 01

3

Rojas Zacarías Edgar Docente de la facultad de Ingeniería de Química Universidad Nacional del Centro del Perú Oré Cerrón Juan José Docente de la facultad de Ingeniería de Sistemas Universidad Nacional del Centro del Perú Editor: Edgar Rojas Zacarías [email protected] Av. 28 de Julio 343 - Jauja PRIMERA EDICION, 2008. EDITADO EN HUANCAYO, DICIEMBRE, 2008. Hecho el Depósito Legal en la Biblioteca Nacional del Perú Nº 2008- 15609

Page 4: Manual-Uso del Matlab 01

4

INDICE

Introducción Fundamentos básicos 9 Arreglos 13 Operaciones con arrays 15 Arreglos bi dimensionales 18 Construcción de arrays 19 Ejercicios propuestos de arrays 20 Matrices 21 Definición de matrices desde el teclado 22 Conceptos básicos sobre matrices – Operaciones con matrices 24 Suma y Resta de matrices 25 Multiplicación de matrices 26 Productos de un número real por una matriz 28 Matriz inversa 30 Manipulación de matrices – comandos relacionados con ellos 34 Funciones que actúan sobre matrices 38 Ejercicios propuestos sobre matrices 38 Gráficos con Matlab 39 Gráficos simples 40 Tipos y colores de líneas 41 Ejemplos relacionados con Gráficos – Ley de Boyle 49 Ejemplo Calculo del volumen con la Ecuación de van Der Waals 55 Ejercicios propuestos con gráficos 64 Gráficos 3D – Plot3 66 Gráficos de malla: mesh(X,Y,Z) meshz(X,Y,Z) meshc(X,Y,Z) 68 Gráficos de contorno 69 Polígonos en tres dimensiones 71 Fundamentos teóricos de programación 72 Procesamiento de datos 73 Algoritmos y programas 74 Partes de un programa 76 Diagramas de flujo 77 Aplicaciones de los diagramas de flujo 80 Elementos básicos de un programa 83 Ejercicios 84 Comando If..Else…End 94 Operadores necesarios – algunas variedades del comando If…End 96 Código de programa para determinar si un número es par o impar 97 Código de programa para redondear un número de hasta 4 cifras 99 Uso de if múltiple 101 Uso de l comando Switch ...End 103 Comando For...End - Estructura 109 Ejercicios 110 Código de programa – producción de amoniaco: Conversión vs Temperatura a diferentes presiones

116

Comando While…End - estructura y relaciones 122 Código de programa para calcular la presión de rocio 123

Page 5: Manual-Uso del Matlab 01

5

Ejercicios propuestos 127 Ecuaciones lineales 128 Sistema de ecuaciones lineales – parte teórica 130 Aplicaciones con programas – método de bisección 131 Método de la Regla Falsa 132 Método de Newton – Raspón 133 Solución gráfica 134 Ejercicios propuestos 135 Ajuste de curvas – Método mínimos cuadrados 137 Cóٌdigo de programa – gráficos 138 Ajuste de curvas – Diferenciación numérica 142 Polinomios 142 Funciones orientadas al cálculo con polinomios – Ajuste polinomial 143 Diferenciación 147 Uso del Comando diff 148 Estadística Descriptiva : media, mediana 149 Desviación estándar – ejercicios 150 Integración numérica – Método de Simpson y método abreviado 152 Bibliografía 156

Page 6: Manual-Uso del Matlab 01

6

Prólogo

El hombre que ha dejado de aprender, no merece deambular libremente en

estos días tan peligrosos

M.M. Coady

El presente aporte es como parte del proceso de aprendizaje en las aulas

universitarias, dirigido a los estudiantes de ingeniería de Química y otras facultades y/o

escuelas profesionales.

La presentación del texto se encuentra plasmada en la parte introductoria del presente

texto.

Dedicatoria

A la memoria de Francisco Oré Alcántara JJOC

A la memoria de mis Padres: Apolinario Rojas y Delfina Zacarías ELRZ

Page 7: Manual-Uso del Matlab 01

7

Introducción El presente texto constituye un aporte para los estudiantes de la Facultad de Ingeniería Química, la misma que contiene problemas de los exámenes del curso de LENGUAJES DE PROGRAMACION de los años 2006 y 2007, así mismo se encuentran las prácticas de laboratorio correspondientes a las ocho primeras semanas establecidas en el sylabus correspondiente. El texto preparado con fines didácticos, escrito usando código del programa MATLAB pueden ser trasladados a otros programas con pequeñas modificaciones, que se deja al estudiante para estimularlos en su desarrollo y que exploren otros medios de solución para un problema. Se considera que el presente texto será tomado como una versión preliminar y su perfeccionamiento se hará en base a las recomendaciones de los usuarios que serán recibidos en el siguiente correo electrónico: [email protected], quedando sumamente agradecido por sus aportes. LOS AUTORES

Page 8: Manual-Uso del Matlab 01

8

Agradecimiento

Nuestros sinceros agradecimientos a los docentes de la facultad de Ingeniería de Sistemas por

las constantes recomendaciones para la mejora del presente trabajo. Así mismo, al encargado

del Centro de Cómputo de la mencionada Facultad por su gentileza en el apoyo con la

tecnología de información correspondiente.

Los Autores

Rojas Zacarías Edgar Docente de la facultad de Ingeniería de Química

Universidad Nacional del Centro del Perú, Director pasante de la Oficina General de Informática de la UNCP. Con estudios de maestría en Administración Mención

Informática para la Gestión

Oré Cerrón Juan José Docente de la facultad de Ingeniería de Sistemas

Universidad Nacional del Centro del Perú. Con estudio de Maestría en Ingeniería de Sistemas

Page 9: Manual-Uso del Matlab 01

9

FUNDAMENTOS BASICOS

Page 10: Manual-Uso del Matlab 01

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 código para la ejecución en modo interactivo. Se denomina modo interactivo, debido a que estamos interactuando con el computador haciendo uso del lenguaje de programación MATLAB. En la pantalla adjunta se puede observar el promt o señala de ingreso de datos, funciones o palabras reservadas por el MATLAB.

Page 11: Manual-Uso del Matlab 01

11

También; 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 códigos de programa. O presionando la tecla F1 y se observa la figura siguiente figura.

Page 12: Manual-Uso del Matlab 01

12

En el que se observa las diferentes funciones que posee matlab

Entre ellas los operadores aritméticos, operadores relacionales y operadores lógicos, también 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. También se muestran las funciones acos y acosd con las cuales se calculan la inversa de la función coseno y los resultados se muestran en radianes y grados respectivamente. Cada función tiene su parte explicativa y uso para lo cual haremos clik sobre una función determinada, por ejemplo; para ver la sintaxis de la función sqrt, el cual nos permite sacar la raíz cuadrada de cualquier número, hacemos click sobre la función y observamos la sintaxis y tiene la siguiente forma:

Page 13: Manual-Uso del Matlab 01

13

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

Ahora; usaremos la función trigonométrica seno (sin en matlab) para ver los resultados (primero se observará la sintaxis de la función, también se observa el uso de la función PLOT que nos permite graficar dicha función en un determinado rango)

Page 14: Manual-Uso del Matlab 01

14

También podemos hacer uso de operadores aritméticos para realizar operaciones más complejas

OPERADORES Significado

+ Suma o adición

- Resta o sustracción

* Producto o Multiplicación

/ División o cociente

^ Potenciación

( ) Orden de operación

Page 15: Manual-Uso del Matlab 01

15

Podemos usar operadores relacionales, tales como:

OPERADORES

< Menor que

<= Menor que o igual a

> Mayor que

>= Mayor que o igual a

== Igual a

~= No igual a

También podemos hacer uso de operadores lógicos para tomar decisiones; tales como: A & B A │ B ~ A El símbolo &, │ y ~ son operadores lógicos AND, OR y NOT, ellos trabajan elemento por elemento en los arreglos. Los operadores lógicos retornan un arreglo lógico 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 asignación de valores a las variables y proceder al cálculo de las expresiones aritméticas OJO: Matlab es sensible a la declaración de variables y asignación 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:

Page 16: Manual-Uso del Matlab 01

16

Ejercicios: Acudimos a su imaginación 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, trigonométricas: seno, coseno, tangente, etc. También deben contener operadores relacionales, lógicos)

Page 17: Manual-Uso del Matlab 01

17

ARREGLOS

Page 18: Manual-Uso del Matlab 01

18

ARREGLOS: Variables de arreglo unidimensional: Estas variables tienen forma de fila o columna y están 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 subíndice 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 expresión 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

Page 19: Manual-Uso del Matlab 01

19

La definición 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 apóstrofo 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:

+ adición o suma – sustracción o resta \ división-izquierda / división-derecha .* producto elemento a elemento ./ y .\ división 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 aritméticos 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

Page 20: Manual-Uso del Matlab 01

20

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 potenciación 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 función exponencial clear all; clear memory; clear command history; clc for i=1:6 g(i) = i .^ 1.2 end % también 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 También: 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.

Page 21: Manual-Uso del Matlab 01

21

Así mismo:

El tamaño de un arreglo puede incrementarse anexándole 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

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

El tamaño de un arreglo puede incrementarse anexándole 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

También 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 añade 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

Page 22: Manual-Uso del Matlab 01

22

También

Si no recuerda el tamaño de su vector, pregúntelo 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 además 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 número de filas y la segunda es el número 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 número de elementos; si no es así, la definición 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 aritméticos de arreglos: c = a + b c = a – b c = a .*b c = a ./ b Aquí, a y b son arreglos bidimensionales del mismo tamaño.

Page 23: Manual-Uso del Matlab 01

23

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 tamaño que x. El cálculo realizado equivale a:

% Listado 1.18 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

Page 24: Manual-Uso del Matlab 01

24

EJERCICIOS 1. Definir un arreglo llamado temperatura (T) que inicie en 100 °C y termine en 1200°C, con

incrementos de 50°C cada vez. Debe usarse una orden o sentencia. 2. Teniendo en consideración que los arreglos sirven para guardar variables de memoria, defina dos

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

3. En general hacer 20 ejercicio usando arrays y operadores aritméticos, relacionales y lógicos

pero relacionado con la carrera de ingeniería química

Page 25: Manual-Uso del Matlab 01

25

MATRICES

Page 26: Manual-Uso del Matlab 01

26

MATRICES: MATLAB es un programa especializado en cálculo matricial. DEFINICIÓN DE MATRICES DESDE TECLADO Las matrices y vectores son variables que tienen nombres. Una matriz de orden m×n es un conjunto rectangular de elementos aij dispuestos en m líneas horizontales (filas) y n líneas verticales (columnas) de la forma:

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

Por ejemplo, el siguiente comando define una matriz A de dimensión (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 operación con ella. Por ejemplo, una operación con A es hallar su matriz traspuesta. En MATLAB el apóstrofo (') es el símbolo de trasposición matricial. Para calcular A' digitamos lo siguiente: >> A' ans =

1 4 7 2 5 8 3 6 9

Como el resultado de la operación 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 operación. La variable ans puede ser utilizada como operando en la siguiente expresión que se introduzca. También podría haberse asignado el resultado a otra matriz llamada B: >> B = A' B = 1 4 7 2 5 8 3 6 9

Ahora ya están 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 simétrica): >> B * A ans = 66 78 90 78 93 108 90 108 126

Page 27: Manual-Uso del Matlab 01

27

En MATLAB se accede a los elementos de un vector poniendo el índice entre paréntesis ( por ejemplo: x( 3 ) ó x( i ) ). Los elementos de las matrices se acceden poniendo los dos índices entre paréntesis, 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 sólo subíndice. 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 fácil como trasponerla.

A continuación 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 función 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 análoga a las matrices, es posible definir un vector fila x en la forma siguiente (si los tres números están 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 números están 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 carácter tanto por ciento (%).

Page 28: Manual-Uso del Matlab 01

28

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 Permutación : 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:

+ adición o suma – sustracción o resta * multiplicación ' traspuesta ^ potenciación

\ división-izquierda / división-derecha .* producto elemento a elemento ./ y .\ división elemento a elemento .^ elevar a una potencia elemento a elemento

Estos operadores se aplican también a las variables o valores escalares, aunque con algunas diferencias. Nota: no se puede por sumar matrices que no sean del mismo tamaño. Si los operadores no se usan de modo correcto se obtiene un mensaje de error. Los operadores anteriores se pueden aplicar también de modo mixto, es decir con un operando escalar y otro matricial. En este caso la operación con el escalar se aplica a cada uno de los elementos de la matriz. Considérese 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 división requieren una cierta explicación adicional. Considérese el siguiente sistema de ecuaciones lineales, Ax = b (1)

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

Page 29: Manual-Uso del Matlab 01

29

SUMA Y RESTA DE MARICES: Podemos sumar una matriz a otra o restarla de otra si ambas tienen el mismo tamaño (el mismo número de columnas y de filas)

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

Page 30: Manual-Uso del Matlab 01

30

MULTIPLICACION Si el número de columnas de A y el número de filas de B son idénticos, las matrices pueden multiplicarse como: C = AB, el número de filas de C es igual al de A y el número 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 típicos: Suponga que B y C son matrices:

la matriz resultante seria:

ó

Para recordar el método para multiplicar matrices, existe una disposición más 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í:

Page 31: Manual-Uso del Matlab 01

31

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 número 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

Page 32: Manual-Uso del Matlab 01

32

PRODUCTO DE UN NÚMERO REAL ( ESCALAR ) POR UNA MATRIZ

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

También:

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

Page 33: Manual-Uso del Matlab 01

33

DIVISION DE MATRICES: La división 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 términos de la matriz quedarán divididos por ese escalar. Así:

>> 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 (AB…G)' = G'….B' A'

Page 34: Manual-Uso del Matlab 01

34

CONCEPTO DE MATRIZ INVERSA

Una de las aplicaciones del método de Gauss-Jordan, es el cálculo de matrices inversas. Recordamos primero la definición de matriz inversa.

Definición. 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

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

El método 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 método

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 método de Gauss-Jordan para calcular la matriz inversa de la siguiente matriz:

Solución. 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 renglón 1 por 41− y lo sumamos al renglón 2. Esto nos da:

Page 35: Manual-Uso del Matlab 01

35

Nuestro segundo elemento pivote es 25.022 =a . Para hacer ceros arriba de este elemento,

multiplicamos el renglón 2 por 25.011− y lo sumamos al renglón 1. Dando:

Finalmente, hacemos los 1’s en la diagonal principal. Para ello, multiplicamos el renglón 1 por 41

y el

renglón 2 por 25.01

. Esto nos da la matriz final:

Por lo tanto, concluímos que la matriz inversa de A es:

Ejemplo 2. Usar el método de Gauss-Jordan para calcular la matriz inversa de:

Solución. 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 renglón 1 por 25.0

y lo sumamos al renglón 2;

también, multiplicamos el mismo renglón 1 por 23125.0

y lo sumamos al renglón 3. Esto nos da:

Page 36: Manual-Uso del Matlab 01

36

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 renglón 2 y el renglón 3. Tenemos entonces:

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

multiplicamos el renglón 2 por 25.14− y lo sumamos al renglón 1, y también multiplicamos el mismo

renglón 2 por 25.12.0

y lo sumamos al renglón 3. Esto nos da:

Nuestro tercer elemento pivote es 4.033 =a . Para hacer ceros arriba de este elemento,

multiplicamos el renglón 3 por 4.0125.3− y lo sumamos al renglón 2, y también multiplicamos el mismo

renglón 3 por 4.010

y lo sumamos al renglón 1. Esto nos da:

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

,

25.11− y 4.0

1, respectivamente. Esto nos da la matriz final:

Por lo tanto, concluímos que la matriz inversa de A es:

Page 37: Manual-Uso del Matlab 01

37

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 están en la relación 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í:

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

Page 38: Manual-Uso del Matlab 01

38

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

También: >> 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 número 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 número 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

Page 39: Manual-Uso del Matlab 01

39

>> 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 También 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

Page 40: Manual-Uso del Matlab 01

40

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 simétrica de A respecto de un eje horizontal >> A = [ 1 3 5; 5 6 7 ] A = 1 3 5 5 6 7

Page 41: Manual-Uso del Matlab 01

41

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

fliplr(A) halla la matriz simétrica de A respecto de un eje vertical

reshape(A,m,n)

Cambia el tamaño de la matriz A devolviendo una matriz de tamaño m × n cuyas columnas se obtienen a partir de un vector formado por las columnas de A puestas una a continuación 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 tamaño 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

Page 42: Manual-Uso del Matlab 01

42

FUNCIONES QUE ACTÚAN SOBRE MATRICES Las siguientes funciones exigen que el/los argumento/s sean matrices. En este grupo aparecen algunas de las funciones más ú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 característico 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 número de filas m y de columnas n de una matriz rectangular A

n = size(A) Devuelve el tamaño de una matriz cuadrada A

nf = size(A,1) Devuelve el número de filas de A

nc = size(A,2) Devuelve el número de columnas de A

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

usuarios debe preguntar ¿Cuántas filas y cuántas columnas debe tener la matriz ), de acuerdo a ello se debe abrir una tabla para ingresar datos y operar los siguientes cálculos (suma, resta, multiplicación y división)

2. Se quiere saber como podría 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

3. Dibuje un arbol de navidad usando comandos del MATLAB (relacionado con matrices u otros)

Page 43: Manual-Uso del Matlab 01

43

GRAFICOS CON MATLAB

Page 44: Manual-Uso del Matlab 01

44

GRAFICOS CON MATLAB Toda función matemática se puede representar gráficamente para poder interpretarlo y visualizar las tendencias que poseen, son muy usadas en la solución de ecuaciones ya que permite visualizar los resultados a priori y poder seguir evaluando para hallarlos con precisión. 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 número 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<= i >= 10, se grafica con el listado 2.1 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 guión: Listado 2.2 x = ( -1 : 0.05 :10)' ; y = sin(x).*exp(-0.3.* x); plot(x,y) xlabel( 'x' ) ; ylabel( 'y' )

Page 45: Manual-Uso del Matlab 01

45

USO DE MARCAS: Los datos pueden graficarse sólo con marcas sin estar conectados por líneas. Se dispone de cinco tipos de marcas o letras:

Tipo de marca Simbolo Tipo de marca Simbolo

Punto . Circulo o Más + Marca x x

Estrella * Si desea graficar con un solo tipo de marca, coloque el símbolo de la marca como una cadena después de las coordenadas en los argumentos de plot. La gráfica 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' )

Page 46: Manual-Uso del Matlab 01

46

Tipos y colores de líneas: Se dispone de cuatro tipo de líneas

Tipo de línea Símbolo Tipo de línea Símbolo

Continua - Punteada :

Guiones -- Guiones y puntos -. El tipo de línea por omisión es el continuo. Si deseas graficar con un tipo de línea en particular, especifique la marca de línea después de las coordenadas; por ejemplo:

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

Color de línea Símbolo Color de Línea Símbolo

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

Utilice el símbolo del color igual que los tipos de línea en el argumento de plot; por ejemplo:

Plot( x , y , ‘g’ ) También 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')

Page 47: Manual-Uso del Matlab 01

47

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

%También se pueden utilizar %vectores de columna en los %argumentos de plot, como se %muestra a continuación %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 número complejo Imag(z) : Parte imaginaria de un número complejo

Page 48: Manual-Uso del Matlab 01

48

%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

Page 49: Manual-Uso del Matlab 01

49

%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...')

Page 50: Manual-Uso del Matlab 01

50

%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')

Page 51: Manual-Uso del Matlab 01

51

%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('Gráfico Tangente - Cotangente') xlabel('x'); ylabel('y(-), z(--)'); hold off

Page 52: Manual-Uso del Matlab 01

52

%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') EJEMPLOS ADICIONALES

Page 53: Manual-Uso del Matlab 01

53

PROGRAMA PARA LA LEY DE BOYLE %Ley de Bolye-Mariotte PV = K %PV = nR.T n=1 y R=0.08205 t=25+273=298°K 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(' Presión - atm '); xlabel(' Volúmen - Lts '); plot(V,P,xox); end h = legend('T=298°K','T=398°K','T=498°K','T=598°K','T=698°K',1); axis([0 60 0 10]) % Para el caso del gráfico (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(' Presión - atm '); xlabel(' Volúmen (1/V) Lts -1 '); plot((1./V),P,xox) end h = legend('T=298°K','T=398°K','T=498°K','T=598°K','T=698°K',4); axis([0 0.45 0 10]) % Para el caso del gráfico (P.V vs 1/V )

Page 54: Manual-Uso del Matlab 01

54

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(' Presión*Volumen - atm*L '); xlabel(' Volúmen (1/V) Lts -1 '); plot((1./V),PV,xox) end h = legend('T=298°K','T=398°K','T=498°K','T=598°K','T=698°K',1); RESULTADOS

Page 55: Manual-Uso del Matlab 01

55

Page 56: Manual-Uso del Matlab 01

56

PROGRAMA PARA LA LEY DE CHARLES %Ley de Charles V/T = K Proceso a Presión 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('Volúmen - 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 gráfico (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('Volúmen - 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])

Page 57: Manual-Uso del Matlab 01

57

% Para el caso del gráfico (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('Volúmen - 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

Page 58: Manual-Uso del Matlab 01

58

Page 59: Manual-Uso del Matlab 01

59

PROGRAMA PARA EL CÁLCULO DEL VOLUMN CON LA ECUACION DE VAN DER WAALS % Cálculo del volumen con Ecuación 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<=18 x=x0; fx0=eval(nombre_f); x=x0-delta; df1=eval(nombre_f); x=x0+delta; df2=eval(nombre_f); dfx0=(df2-df1)./(2.*delta); r=x0-(fx0./dfx0); e=abs((r-x0)./r); x0=r; i=i+1; end fprintf('la raiz es:%10.9f\n',x0); axis([0 4 0 120]) RESULTADOS la raíz es : 0.165435983

Page 60: Manual-Uso del Matlab 01

60

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;

Page 61: Manual-Uso del Matlab 01

61

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 crítica (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;

Page 62: Manual-Uso del Matlab 01

62

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 año y volumen anual de carbon NumCamCar=365*24 / t ; VolAnualCarbon = prof*area*NumCamCar ; %Parte3:Estimacion de eliminacion del soluto (Kg/año) %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 DISEÑO DE UNA PLANTA A ESCALA REAL ') disp('------------------------------------------------------------------') disp('PARTE1: CALCULO DEL TIEMPO DE SERVICIO') disp('------------------------------------------------------------------') fprintf('Capacidad de Adsorción (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 AÑO Y VOLUMEN ANUAL DE CARBON') disp('-------------------------------------------------------------------') fprintf('# de Cambios de Carbón / año (NumCamCar) = %g (Ciclo/año)\n',NumCamCar) fprintf('Volúmen anual de carbón (VolAnualCarbon) = %g (m3)\n',VolAnualCarbon) disp(' ') disp('-------------------------------------------------------------------') disp('PARTE3: ESTIMACION DE LA ELIMINACION DE SOLUTO (kg/año)') disp('kg de soluto separado=Kg soluto en afluente - Kg soluto en efluente') disp('-------------------------------------------------------------------') fprintf('Volúmen de Agua Residual (VolAR) = %g (m3/ciclo)\n',VolAR) fprintf('Eliminación 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 adsorción') fprintf('Capacidad Total de Adsorción (CapTotAdsor) = %g (m3/ciclo)\n',CapTotAdsor)

Page 63: Manual-Uso del Matlab 01

63

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

Page 64: Manual-Uso del Matlab 01

64

Page 65: Manual-Uso del Matlab 01

65

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 carbón - gr/200mL'); ylabel('Impurezas remanentes - mg/L') text(0.8,110,'O - Carbón A');text(0.8,85,' * - Carbón 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 - Carbón A');text(100,40,'* - Carbón B'); grid on %Determinacion de carga de carbon desde los perfiles de las isotermas a un %nivel de impureza final deseada - Método de Interpolación SeA=20 ; SeB=20; Carga_carA = interp1(imreA,XMA,SeA); Carga_carB = interp1(imreB,XMB,SeB); %Cáculo 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('Cálculo de carga de carbón desde las isotermas:')

Page 66: Manual-Uso del Matlab 01

66

disp('-----------------------------------------------') fprintf('Carbón A (X/M) = %g (mg/g)\n' ,Carga_carA) %g es el formato mas corto fprintf('Carbón B (X/M) = %g (mg/g)\n' ,Carga_carB) %g es el formato mas corto disp(' ') disp('Promedio de uso de Carbón :') disp('---------------------------') fprintf('Uso de Carbón A = %g (mg/L)\n',Prom_uso_carbonA) fprintf('Uso de Carbón 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 carbón B para levar a cabo el mismo tratamiento. El precio unitario ') disp('de cada tipo de carbón puede ser usado para determinarel mejor caso de ') disp('costo-efectividad para una aplicación de purificación ') disp('----------------------------------------------------------------------------') RESULTADOS

Page 67: Manual-Uso del Matlab 01

67

Page 68: Manual-Uso del Matlab 01

68

EJERCICIOS 1. Se han usado diverso comandos no tratados en la clase correspondientes a gráficos con Matlab,

es necesario que Ud. Con ayuda el HELP del MATLAB, mencione el significado 2. Grafique diez funciones relacionados con los cursos de Ingeniería Química, Física u otro, deben

tener cierto grado de dificultad con conceptos de simulación

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

Page 69: Manual-Uso del Matlab 01

69

GRAFICOS 3D

Tomado de la Web PARA USO INTERNO

Page 70: Manual-Uso del Matlab 01

70

GRAFICOS 3D

La orden plot que utilizábamos en 2 dimensiones podemos también 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", serán los tres vectores, y "s" será una cadena de caracteres adicional para indicar color y tipo de línea. Si queremos representar varias curvas en un solo gráfico, 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 hélice en tres dimensiones:

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

Para fijar manualmente los límites 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 gráfica, usando coordenadas en 3D:

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

-1-0.5

00.5

1

-1-0.5

0

0.510

10

20

30

40

50

60

Seno (t)

Hélice

Coseno (t)

2 t

Page 71: Manual-Uso del Matlab 01

71

Por ejemplo, si en la gráfica anterior queremos limitar los ejes al doble de su valor actual, e introducir la etiqueta "Gráfica en 3D" en las coordenadas x=0.25, y=0.25, z=20: % Programa para representar una hélice en tres dimensiones clc; clear memory; clear command history; clear all; t=0:0.1:30; plot3(sin(t),cos(t),2*t) title('Hélice') 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

Gráficos de Malla

Un gráfico tridimensional de malla viene definido por una función 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 líneas rectas, dándolo al gráfico un aspecto de malla. Para representar un gráfico de malla, se utiliza el comando mesh y sus variantes. Estos gráficos son muy útiles a la hora de visualizar grandes matrices o representar funciones de dos variables.

El primer paso para representar una función de dos variables z=f(x,y), es utilizar el comando meshgrid, que básicamente define la matriz de puntos (X,Y) sobre los cuales se evalúa la función de dos variables para hacer su representación gráfica. Su sintaxis es la siguiente:

[X,Y]=meshgrid(x,y) Transforma el campo de definición dado de las variables "x" e "y", de la función a representarz=f(x,y), en argumentos matriciales utilizables por el comando mesh para obtener el gráfico de malla.

-2-1

01

2

-2-1

0

120

20

40

60

80

100

120

Seno (t)

GRAFICA EN 3D

Hélice

Coseno (t)

2 t

Page 72: Manual-Uso del Matlab 01

72

Disponemos de tres tipos de gráficos de malla:

mesh(X,Y,Z) Representa el gráfico de malla de la función z=f(x,y). Podemos añadir un argumento opcional C que indique el color de la rejilla.

meshz(X,Y,Z) Representa el gráfico de malla de la función z=f(x,y) con una especie de telón o cortina en la parte inferior

meshc(X,Y,Z) Representa el gráfico de malla de la función z=f(x,y) junto con el gráfico de contorno correspondiente (curvas de nivel proyectadas sobre el plano x,y)

Supongamos que queremos representar la gráfica de malla para la siguiente función:

El programa que introduciremos en MATLAB será:

% Programa para representar gráfico 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 más pequeña 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 gráficas de mallas que hemos visto son:

Page 73: Manual-Uso del Matlab 01

73

Gráficos de Contorno

Las gráficas de contorno o sistema de planos acotados muestran líneas de elevación o altura constante. Así, dibujando diferentes curvas de nivel correspondientes a alturas constantes, se puede describir un mapa de líneas de nivel de la superficie. Son las gráficas usadas en los mapas topográficos. Los gráficos de contorno pueden representarse en dos o en tres dimensiones

En estos gráficos se observa, por tanto, la variación 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 variación de la variable "z" es lenta, mientras que un espacio pequeño indica un cambio rápido de "z".

Los comandos que utiliza MATLAB para la representación de gráficos de contorno son los siguientes (todos ellos aceptan el argumento adicional sobre el color de las líneas):

contour(Z) Dibuja el gráfico de contorno para la matriz Z. El número de líneas de contorno a utilizar se elige automáticamente

contour(Z,n) Dibuja el gráfico de contorno para la matriz Z usando n líneas de contorno

contour(x,y,Z,n) Dibuja el gráfico de contorno para la matriz Z usando en los ejes X e Y el escalado definido por los vectores "x" e "y", con n líneas de contorno

contour3(Z), contour3(Z,n), contour3(x,y,Z,n) Dibujan los gráficos de contorno en tres dimensiones

Page 74: Manual-Uso del Matlab 01

74

pcolor(X,Y,Z) Dibuja un gráfico de contorno para la matriz (X,Y,Z) utilizando una representación basada en densidades de colores. Suele denominarse gráfico de densidad.

Como ejemplo, vamos a representar las curvas de nivel que responden a la ecuación:

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

En la primera gráfica vemos su gráfico de contorno en 2D, con 20 líneas. En la segunda, su gráfico de contorno tridimensional, con 40 líneas. En la tercera dibujaremos su gráfico de densidad:

% Programa para representar gráfico 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')

Page 75: Manual-Uso del Matlab 01

75

Polígonos en Tres Dimensiones

MATLAB permite dibujar polígonos en tres dimensiones. Para ello utiliza los siguientes comandos:

fill3(X,Y,Z,C) Dibuja el polígono compacto cuyos vértices son las tripletas de componentes (Xi,Yi,Zi) de los vectores columna X, Y y Z. C es un vector de la misma dimensión de X, Y y Z, que contiene los colores Ci de cada punto(Xi,Yi,Zi). Si C es solo un carácter, se pintarán todos los puntos del polígono del color correspondiente al carácter.

fill3(X1,Y1,Z1,C1...Xn,Yn,Zn,Cn) Dibuja el polígono compacto cuyos vértices vienen dados por los puntos (Xi,Yi,Zi,Ci)

Un ejemplo de este tipo de gráficos tridimensionales sería:

% Programa para REPRESENTAR polígono 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

0

0.510

5

10

15

20

25

30

Page 76: Manual-Uso del Matlab 01

76

FUNDAMENTOS TEORICOS DE PROGRAMACION

Page 77: Manual-Uso del Matlab 01

77

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

programación 2. Un programa está compuesto por instrucciones, sentencias o proposiciones las cuales especifican

ciertas operaciones que debe ejecutar la máquina 3. Existen:

• Lenguajes de máquina: Usan dígitos 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 DE DATOS En la actualidad es muy común solucionar problemas con ayuda del computador, sabemos que existen muchos datos que son posibles tratarlos para poderlos tener como información que pueda ayudarnos para tomar decisiones importantes en la vida diaria

PROCESO

SALIDA ENTRADA

DATOS

INFORMACION

SISTEMA DE PROCESO DE

INFORMACION

DISEÑO DEL ALGORITMO

PROGRAMA DE COMPUTADORA

PROBLEMA

Page 78: Manual-Uso del Matlab 01

78

ALGORITMOS Y PROGRAMAS La resolución de problemas exige al menos los siguientes pasos: 1. Definición o Análisis del problema 2. Diseño del Algoritmo 3. Transformación del algoritmo en un programa 4. Ejecución y validación del programa

ANALISIS DEL PROBLEMA

DISEÑO DEL ALGORITMO ALGORITMO: Es una fórmula o método para la resolución de problemas, podemos ayudarnos de diagramas de flujo CARACTERISTICA DE LOS ALGORITMOS: • Debe ser preciso e indicar el orden de ejecución de cada paso • Debe ser definido. Si se hace dos veces se debe obtener el mismo resultado • Debe ser finito. Debe terminar en algún momento Por ejemplo:

ANALISIS DEL PROBLEMA

ESPECIFICACIONES DE SALIDA

ESPECIFICACIONES DE ENTRADA

DEFINICION DEL PROBLEMA

CALCULAR SUPERFICIE (CIRCULO)

LONGITUD (CIRCUNFERENCIAS)

DATOS DE ENTRADA

RADIO

ENTRADA

CALCULO DE SUPERFICIE S = PI * R * R CALCULO DE LA CIRCUNFERENCIA L = 2 * PI * R

PROCESO

SALIDA DE RESULTADOS

S R L

SALIDA

Page 79: Manual-Uso del Matlab 01

79

RESOLUCION DEL PROBLEMA MEDIANTE EL USO DEL COMPUTADOR PROCESO DE PROGRAMACION

EJECUCION DEL PROGRAMA

COMPROBACION DEL PROGRAMA

RESOLUCION DEL PROBLEMA CON COMPUTADORA

CODIFICACION DEL PROGRAMA

PROCESO

INFORMACION

DATOS

PROCESO

“ BASURITA “

“ BASURITA ”

DEFINICION DEL PROBLEMA

DISEÑO DEL ALGORITMO –

DIAGRAMA DE FLUJO

CODIFICACION DEL PROGRAMA - USO DE UN LENGUAJES DE PROGRAMACION

DEPURACION Y VERIFICACION

D O C U M E N T A C I O N

M A N T E N I M I E N T O

Page 80: Manual-Uso del Matlab 01

80

PARTES DE UN PROGRAMA

INSTRUCCION 1 INSTRUCCION 2 INSTRUCCION 3 INSTRUCCION 4 INSTRUCCION 5 INSTRUCCION 6 ................... .................. .................. INSTRUCCION 7 INSTRUCCION 8

INSTRUCCIONES DE ENTRADA

INSTRUCCIONES DE PROCESO

INSTRUCCIONES DE SALIDA

INSTRUCCIONES CONDICIONALES

INSTRUCCIONES REPETITIVAS

NOTA:

EN ALGUNOS

CASOS EXISTEN PROGRAMAS CON INSTRUCCIONES DE UNA SOLA

PASADA

INSTRUCCION 1 INSTRUCCION 2 INSTRUCCION 3

¿ ES CIERTO ?

INSTRUCCION n-2 INSTRUCCION n-1 INSTRUCCION

SI NO

Instruccione 1 Instruccione 2 Instruccione 3 Instruccione 4

Instruccione 1 Instruccione 2 Instruccione 3 Instruccione 4

INSTRUCCIONES CONDICIONALES

INSTRUCCION 1 INSTRUCCION 2 INSTRUCCION 3

HACER MIENTRAS CUMPLE LA CONDICION INSTRUCCION 1 INSTRUCCION 2 INSTRUCCION 3 INSTRUCCION 1 FIN DE LA CONDICION

INSTRUCCION n-2 INSTRUCCION n-1 INSTRUCCION n FIN

INSTRUCCIONES REPETITIVAS

Page 81: Manual-Uso del Matlab 01

81

DIAGRAMAS DE FLUJO Los diagramas de flujo representan la forma de especificar y documentar los detalles algorítmicos de un producto de programación. También podemos decir que el diagrama de flujo es la fotografía de la solución de un problema. Estos diagramas utilizan cajas rectangulares para especificar las acciones, cajas en forma de rombos para las proposiciones de decisión, arcos dirigidos para las interconexiones entre las diversas cajas, así como una variedad de formas especiales para denotar las entradas, las salidas, los almacenamientos,

FUNCION TERMINAL.- Representa el inicio y el final de un programa

FUNCION ENTRADA/SALIDA.- Representa cualquier tipo de entrada de datos a la memoria del computador desde los periféricos de entrada.

FUNCION PROCESO.- Cualquier tipo de operación que pueda originar cambio de valor, formato o posición de la información

FUNCION DECISION.- Indica operaciones lógicas o de comparación entre datos y en función del resultado de la misma determina cual de las alternativas se tomará. Normalmente tiene dos salidas

FUNCION CONECTOR.- Sirven para conectar dos partes de un diagrama de flujo, el primero sirve para conectar dos funciones dentro de la misma página, mientras que el segundo conecta diagramas de páginas diferentes

FUNCION SALIDA.- sirve para indicar que los resultados de la operación se observará impreso en un papel

FUNCION SALIDA.- sirve para indicar que los resultados de la operación se observará en el monitor del computador

FUNCION INDICADOR.- sirve para indicar la dirección o línea de flujo. Indica el sentido de ejecución de las operaciones dentro de un programa

Page 82: Manual-Uso del Matlab 01

82

DIAGRAMAS DE FLUJO En un inicio, la programación estructurada fue desarrollada en sus principios por Edsgar W. Dijkstra en sus Notes on Structured Programming y se basa en el denominado Teorema de la Estructura desarrollado en 1966 por Bömh y Jacopini, que se ratificó con los trabajos de Charlan D. Mills. En la actualidad existen diversas definiciones de estos diagramas, pero todas ellas giran alrededor del teorema de estructura que, como ya hemos dicho, se debe a Bömh y Jacopini que inician todo esto con esta técnica de programación a través de módulos o bloques. Para un buen entendimiento del teorema mencionado, se realiza una definición previa de algunos de los conceptos que trata el teorema: 1. Diagrama Propio. Es aquel que posee

un solo punto de entrada y uno de salida.

2. Programa Propio. Es aquel programa que cumple las siguientes condiciones:

• Posee un solo inicio y un solo fin. • Todo elemento del programa es accesible, es decir, existe al menos un camino desde el inicio al fin que pasa a través de él. • No posee bucles infinitos.

C1

A

S

INICIO

FIN

B

A

C1

B

S

Page 83: Manual-Uso del Matlab 01

83

CARACTERISTICAS DE LOS DIAGRAMAS DE FLUJO En los distintos departamentos de informática existentes no siempre se dispone de los mismos programadores con respecto al tiempo que se pretende que dure una aplicación, por lo cual es de suma importancia que un programa realizado por una persona sea fácil de modificas u mantener por otra. En este sentido, la diagramación estructurada ofrece muchas ventajas para logras estos objetivos. Con esto podemos decir que: Un diagrama estructurado es: • Fácil de leer y comprender. • Fácil de codificar en una amplia gama de lenguajes y en diferentes sistemas. • Fácil de mantener, Eficiente, aprovechando al máximo los recursos de la computadora. • Es posible tener los programas de una aplicación por módulos.

Algunas Diferencias de los Diagramas Estructurados y los Diagramas Tradicionales. Los diagramas de flujo estructurados difieren de los diagramas tradicionales en que los primeros tienen restricción en cuanto a las formas de uso; con las actuales se obtiene que la gráfica obtenida sea un equivalente gráfico de la descripción del “ problema ” por medio del seudo código estructurado; un ejemplo de las formas comunes y de los equivalentes en seudo código son:

Los diagramas estructurados poseen una entrada única y una salida única; así estas formas pueden ser anidadas dentro de otras formas hasta el nivel deseado de anidamiento.

F

V

A

P

S

Mientras P sea verdadero hacer S

S

P

V

F

Repetir S mientras P sea Falso

P

S1 S2

Si P verdadero hacer SI, si P falso hacer S2

V F

Page 84: Manual-Uso del Matlab 01

84

APLICACIONES DE LOS DIAGRAMAS DE FLUJO. Los diagramas de flujo estructurados son actualmente caracterizados como una herramienta de la programación estructurada. Gracias a esta herramienta podemos interpretar cada acción de un programa y representarlo gráficamente.

Principales Estructuras de los Diagramas de flujo. 1. Estructura Secuencial. Es una estructura con una entrada y una salida en la cual figuran una

serie de acciones cuya ejecución es lineal y en el orden en que aparecen. A su vez. Todas las acciones tienen una única entrada y una única salida.

2. Estructura Alternativa. Es una estructura con una sola entrada y una sola salida en la cual se

realiza una acción de entre varias, según una condición o se realiza una acción según el cumplimiento o no de una determinada condición. Esta condición puede ser simple o compuesta. Las estructuras alternativas pueden ser:

• De dos salidas, en la que una de ellas puede ser la acción nula. En el Matlab esta representado por el comando IF ….then…..else end

A

B

C

N

S

COND

A

Alternativa Simple Alternativa doble

COND

B A

N S

Page 85: Manual-Uso del Matlab 01

85

• De tres o más salidas, que también se llama múltiple. En el Matlab esta representado por el comando switch

3. Estructura Repetitiva. Es una estructura con una entrada y una salida en la cual se repite una

acción un número determinado o indeterminado de veces, dependiendo en este caso del cumplimiento de una condición. Las estructuras repetitivas pueden ser:

• Estructura para (FOR) simple y anidado

COND.

A B C D

Alternativa Múltiple

Sintaxis switch switch_expr

case case_expr statement,...,statement

case case_expr statement,...,statement

... otherwise

statement,...,statement end

Page 86: Manual-Uso del Matlab 01

86

4. Estructura MIENTRAS (WHILE). En esta estructura se repite una acción mientras se cumpla la condición que controla el bucle. La característica principal de esta estructura es la de que la condición es evaluada siempre antes de cada repetición.

El número de repeticiones oscila entre 0 e infinito, dependiendo de la evaluación de la condición, cuyos argumentos en los casos de repetición, al menos una vez, deberán modificarse dentro del bucle, pues de no ser así el número de repeticiones será infinito y nos encontraremos en un bucle sin salida.

También en función con otros diagramas estandarizados

Y = Y + 1

Y = Y + 1

Page 87: Manual-Uso del Matlab 01

87

ELEMENTOS BASICOS DE UN PROGRAMA CONCEPTO DE CONTADORES: Es una variable cuyo valor se incrementa o decrementa en una cantidad constante en cada iteración. Tiene la función de contar los sucesos o acciones del bucle. Una forma de controlar un bucle es mediante un contador N = N + 1 CONCEPTO DE ACUMULADOR También llamado totalizador, es una variable cuya misión es almacenar cantidades variables resultante de sumas sucesivas S = S + N CONCEPTO DE BUCLE Es un segmento de programa o conjunto de sentencias u ordenes de un programa que se repiten un número determinado de veces mientras se cumple una determinada condición

BUCLES INDEPENDIENTES BUCLES ANIDADOS

Page 88: Manual-Uso del Matlab 01

88

EJERCICIO 1: Diseñar el diagrama de flujo que permita escribir los números del 1 al 1000 EJERCICIO 2: Calcular la suma de los 1000 primeros números enteros

INICIO

I = 1

Es I <=1000

Escribir I

I = I + 1

FIN

NO

SI

INICIO

I = 1 S = 0

Es I <=1000

Escribir S

S = S + I I = I + 1

FIN

NO

SI

Page 89: Manual-Uso del Matlab 01

89

EJERCICIO 3: Escribir el diagrama de flujo para calcular el factorial de un número, considerar que el número ingresado por teclado sea mayor que 1

INICIO

Leer N

Es N < = 1

SI

IMPRIMIR ERROR

1

P = P * N N = N - 1

NO

Es N = 1

NO

SI

ESCRIBIR P

FIN

1

Page 90: Manual-Uso del Matlab 01

90

Ejercicio 1-1

Preparar un algoritmo que represente la receta que se muestra a continuación:

Ingredientes:

1. 1 taza de almendras picadas. 2. ¼ de libra de chocolate en bloque para hornear 3. ½ de libra de malvaviscos cortados a la mitad 4. 3 tazas de azúcar 5. ½ taza de leche evaporada 6. ½ taza de miel de maíz 7. 1 cucharadita de vainilla 8. ½ libra de mantequilla 9. ½ cucharadita de sal

Viértase la leche y añada la miel de maíz, el azúcar, el chocolate y la sal en un recipiente de 1 litro, y cocínese en flama alta, mezclando constantemente hasta que hierva la mezcla. Redúzcase, a flama moderada y continúese hirviendo y revolviendo hasta que una gota de la miel forme una pelota suave en un vaso de agua fría. Quítese de la flama y déjesele enfriar durante 10 minutos. Mézclese la mantequilla y la vainilla hasta que estén completamente incorporadas. Agréguense las almendras. Distribúyanse las mitades de malvavisco en el fondo de una charola de horneado, de 30 centímetros por lado, engrasada. Viértase la miel sobre los malvaviscos. Déjesele enfriar durante 10 minutos. Córtese en cuadros y sírvase.

TOMADO DE: http://www.uady.mx/~contadur/fundamentos_de_programacion/ejercicios1.htm

Ejercicio 2.1

Un maestro asignó a sus estudiantes el problema de construir un diagrama de flujo en la forma siguiente. La entrada consistía en las longitudes y anchuras de varios rectángulos. El objeto era producir una lista con líneas numeradas consecutivamente que mostrasen la longitud L, el ancho W y el área A, únicamente de aquellos rectángulos cuyo perímetro fuese mayor que 12. Los estudiantes entregaron los diagramas de flujo que se encuentran en los diagramas adjunto del 1 al 8, como soluciones al problema.

a. Aplicar la prueba a cada uno de los diagramas (deberás entregar la evidencia de cada prueba) y dígase cuáles soluciones son correctas y cuáles incorrectas (para nuestro objeto una solución correcta es la que produce el resultado deseado. Sin embargo, puede no ser la más eficiente).

b. En cuanto a las soluciones incorrectas, ¿cuáles son los errores? c. Construir un diagrama de flujo que utilice las características más eficientes de cada uno (el

programa más eficiente es el que requiere el menor número de cálculos).

Datos para la prueba.

L W 1 8 4 2 10 6 3 6 3 4 8 5

Page 91: Manual-Uso del Matlab 01

91

Diagrama de flujo del 1 al 4

Page 92: Manual-Uso del Matlab 01

92

Diagramas de flujo del 5 al 8:

Tomado para clases de: http://www.uady.mx/~contadur/fundamentos_de_programacion/ejemplos/Ejemplo_Comparar%20Diagramas1.jpg NOTA: Ambos símbolos representan entrada de datos

Page 93: Manual-Uso del Matlab 01

93

Ejercicios propuestos

1. Hacer un diagrama para calcular el área de un triangulo.

2. Hacer un diagrama para convertir de grados centígrados a grados Fahrenheit.

3. Hacer un diagrama para imprimir la suma de los números del 1 al 100.

4. Hacer un diagrama que te pida un número y te diga si es par, es non y/o es primo.

5. Hacer un diagrama para imprimir la sucesión de Fibonacci.

6. Hacer un diagrama que pida 10 números y muestre el promedio.

7. Hacer un diagrama que pida 3 números y diga cual es el mayor.

8. Hacer un diagrama que pida la edad y despliegue si es menor de edad (<18), mayor (>=18) o si

pertenece a la 3ª edad.(>=60)

9. Hacer un diagrama que te pida un número y te diga si es par, es non y/o es primo.

10. Hacer un diagrama para calcular el factorial de un número.

11. Hacer un diagrama que calcule e imprima N números primos.

12. Hacer un diagrama que solicite 4 calificaciones y diga si está reprobado o no, según las

reglas de tu escuela.

13. Hacer un diagrama que pida un número N y despliegue todas las combinaciones de dos

números que sumados den N.

14. Hacer un diagrama que despliegue la tabla de multiplicar de un número X.

15. Hacer un diagrama que calcule la probabilidad de que dos dados lanzados sumen 7.

16. Hacer un diagrama que pida 100 números y diga cual es la mediana.

17. Hacer un diagrama que solicite los datos de una matriz de 4x4 y la muestre invertida.

18. Hacer un diagrama que pida 3 números y calcule el común denominador.

19. Hacer un diagrama que llene una matriz de 3x3 y despliegue los valores de la diagonal

principal.

20. Hacer un diagrama que pida 2 matrices y despliegue el producto cruz de las mismas.

Page 94: Manual-Uso del Matlab 01

94

PROBLEMA: Leer con atención el diagrama de flujo y escriba el programa en Matlab

TOMADO DE: http://www.uady.mx/~contadur/fundamentos_de_programacion/ejemplos/Ejemplo_Ciclos1.jpg

Page 95: Manual-Uso del Matlab 01

95

ANEXO DE ESQUEMAS ESTANDARIZADOS PARA DIAGRAMAS DE FLUJO

Inicio o fin del programa

Pasos, procesos o líneas de instruccion de programa de computo

Operaciones de entrada y salida

Toma de desiciónes y Ramificación

Conector para unir el flujo a otra parte del diagrama

Cinta magnética

Disco magnético

Conector de pagina

Líneas de flujo

Anotación

Display, para mostrar datos

Envía datos a la impresora

Page 96: Manual-Uso del Matlab 01

96

PROBLEMA: Interpretar el diagrama de flujo, y escribir las secuencia de actividades TOMADO DE: http://www.programaempresa.com/empresa/empresa.nsf/paginas/D7EFF6D4C6394D96C125702900429390?OpenDocument

Page 97: Manual-Uso del Matlab 01

COMANDO IF… ELSE … END

Page 98: Manual-Uso del Matlab 01

98

COMANDO IF….END Sirve para realizar cálculos con consultas o toma de decisiones, ello de acuerdo con la respuesta de la consulta que puede ser VERDADERA o FALSA. La consulta puede ser con respecto a una, dos o tres variables

if

Else

end

EXPRESION

CONJUNTO DE SENTENCIAS QUE SERVIRAN PARA SOLUCIONAR EL

PROBLRMA

CONJUNTO DE SENTENCIAS QUE SERVIRAN PARA SOLUCIONAR EL

PROBLRMA

Page 99: Manual-Uso del Matlab 01

99

OPERADORES NECESARIOS: Less than (<), less than or equal to (<=), greater than (>), greater than or equal to (>=), equal to (==), not equal to (~=) Element-wise AND (&) Element-wise OR (|) ALGUNAS VARIEDADES DEL COMANDO IF...END

CASO 1: If p = 20 Hacer “S” Else No hace nada se va a “FIN” end

CASO 2: If p = 25 No hace nada se va a “FIN” Else Hacer “S” end

CASO 2: If p = 25 Hacer “S1” Else Hacer “S2” end

If p = 20 Hacer “S” end

V

A

P

S

Mientras P sea verdadero hacer S

S

P

V

F

Repetir S mientras P sea Falso

P

S1 S2

Si P verdadero hacer SI, si P falso hacer S2

V F

Page 100: Manual-Uso del Matlab 01

100

CODIGO DE PROGRAMA PARA DETERMINAR SI UN NUMERO ES PAR O IMPAR PROBLEMA 1 Escribir el código de programa y el diagrama de flujo para determinar si un número ingresado por el teclado es par o impar SOLUCION %Hacer un programa que permita ingresar un número cualquiera por teclado y %determine si dicho número es par o impar, tener en consideración que no deben ingresar 0 ni números negativos clc;clear memory;clear command history; ni=input('ingrese numero inicial : '); par=0; impar=0; %mensaje=' '; if ni<=0 mensaje='numero ingresado no es mayor que cero'; else if rem(ni,2)~=0 mensaje='IMPAR'; else mensaje='PAR'; end end disp(' ');disp(' '); [mensaje]

Page 101: Manual-Uso del Matlab 01

101

DIAGRAMA DE FLUJO PARA DETREMINAR SI UN NUMERO ES PAR O IMPAR

INICIO

INGRESA VALOR DE N

DEFINIR VARIABLES

n=VAL(TxtN)

IF REM(N, 2) = 0

TxtRpta = Es Par

FIN

SI

NO

SI

NO

TxtRpta = Es Impar

IMPRIMIR RESULTADOS

Es N <= 0

IMPRIMIR MENSAJE

Page 102: Manual-Uso del Matlab 01

102

PROBLEMA 2 Escribir un programa que permita ingresar cuatro dígitos: A, B, C y D de un entero positivo N . Se desea redondear N a la centena más próxima y visualizar el resultado. Por ejemplo: Si A es 2, B es 3, C es 6 y D es 2, entonces N será 2362 y el resultado redondeado será 2400. Si N 2342 el resultado será 2300 y si N es 2962 el resultado será 3000. SOLUCION % PROGRAMA DE REDONDEO clear all; clear memory; clear command history; clc a = input('Ingrese el primer digito '); b = input('Ingrese el segundo digito '); c = input('Ingrese el tercer digito '); d = input('Ingrese el cuarto digito '); if a > 0 x=1000*a + 100*b + 10*c + d %Numero ingresado k=10*c + d; %Expresa las decenas del número if k>49 y = x + (100-k); else y = x - k; end end [(y)]

Page 103: Manual-Uso del Matlab 01

103

DIAGRAMA DE FLUJO PARA EL PROGRAMA REDONDEO

INICIO

INGRESA VALORES DE A, B, C, D

IF a>0

X = 1000 * a + 100 * b + 10 * c + d k = 10 * c + d

IF k>49 Y = X + ( 100 – k )

Y = X - k

FIN

NO

SI

SI

NO

NUMERO REDONDEADO

Page 104: Manual-Uso del Matlab 01

104

PROBLEMA 3 Supongamos que Ud. Solicita bolas de billar de diferentes colores pero que tendría que ayudarse de un programa para verificar el color, tal que: 1=rojo, 2=azúl, 3=verde, 4=amarillo y 5=negro Escribir el código de programa: SOLUCION Se digitará el código de programa y tendrá las siguientes ordenes % Uso de if multiple % 1=rojo, 2= azul, 3=verde, 4=amarillo 5=negro clear all; clear memory; clear command history; clc; color = input('Ingrese el numero que represente un color....'); if color == 1 color1='rojo' else if color == 2 color1='azul' else if color == 3 color1='verde' else if color == 4 color1 = 'amarillo' else if color == 5 color1 = 'negro' else color1 = 'no dado' end end end end end [color1]

Page 105: Manual-Uso del Matlab 01

105

El diagrama de flujo tendría la siguiente característica:

S

N COND

.

NO DADO

COND.

ROJO COND.

AZUL COND

.

VERDE COND

.

AMARILLO

NEGRO

S

S

S

S

N

N

N

N

INGRESE BOLA

INICIO

FIN

COLOR1

Page 106: Manual-Uso del Matlab 01

106

OTRA FORMA DE CODIGO: % Uso de if multiple % 1=rojo, 2= azul, 3=verde, 4=amarillo 5=negro clear all; clear memory; clear command history; clc; color = input('Ingrese el numero que represente un color....'); switch color case 1 color1='rojo' case 2 color1='azul' case 3 color1='verde' case 4 color1='amarillo' case 5 color1='negro' otherwise color1='no dado' end [color1] DIAGRAMA DE FLUJO:

COND.

A B C D D D

INICIO

FIN

Page 107: Manual-Uso del Matlab 01

107

OTRA FORMA % Uso de if multiple % 1=rojo, 2= azul, 3=verde, 4=amarillo 5=negro clear all; clear memory; clear command history; clc; color = input('Ingrese el numero que represente un color....'); if color == 1 color1='rojo' end if color == 2 color1='azul' end if color == 3 color1='verde' end if color == 4 color1 = 'amarillo' end if color == 5 color1 = 'negro' else color1 = 'no dado' end [color1]

Page 108: Manual-Uso del Matlab 01

108

DIAGRAMA DE FLUJO PARA EL CODIGO ANTERIOR

S

COND.

NO DADO

COND.

ROJO

COND.

AZUL

COND.

VERDE

COND.

AMARILLO

NEGRO

S

S

S

S

N

INGRESE BOLA

INICIO

FIN

COLOR1

Page 109: Manual-Uso del Matlab 01

109

EJERCICIOS RESOLVER 10 PROBLEMAS HACIENDO USO DEL COMANDO IF

Page 110: Manual-Uso del Matlab 01

110

COMANDO FOR…END

Page 111: Manual-Uso del Matlab 01

111

COMANDO FOR Sirve para realizar cálculos repetitivos, repitiendo las sentencias que se encuentran dentro del bucle un número específico de veces. Según las necesidades de solución del problema puede haber un solo bucle o puede haber varios bucles for-end

for

end

VARIABLE = 1: N: M

CONJUNTO DE SENTENCIAS QUE SERVIRAN PARA SOLUCIONAR EL

PROBLRMA

Page 112: Manual-Uso del Matlab 01

112

Estructura Repetitiva. Es una estructura con una entrada y una salida en la cual se repite una acción un número determinado o indeterminado de veces, dependiendo en este caso del cumplimiento de una condición. Las estructuras repetitivas pueden ser:

• Estructura para (FOR) simple y anidado El caso dos es muy usado para construir la tabla de multiplicación del 1 al 12 en un solo paso. El caso tres podría darse en un proceso de simulación simple.

Page 113: Manual-Uso del Matlab 01

113

PROBLEMA: Hacer un programa y el diagrama de flujo que permita calcular la suma de la serie: ingresando el valor de “ n” S = (1/2)+(2/2*2)+(3/2*2*2)+...+(n/2*2*2*2*………….*n) SOLUCION % Uso del comando FOR clear all; clear memory; clear command history; clc; n = input('ingrese el valor de "n" : '); su=0; if n > 0 for I = 1:n ; su = su + I / (2 ^ I); end disp(' ') disp(' ') [su] else disp(' ') disp(' ') disp('Ingresar valores de "n" mayores de cero') end DIAGRAMA DE FLUJO

SI

NO

SU = SU + I / (2¨I)

FIN

FOR I = 1 to N

IMPRIMIR SU

IMPRIMIR ERROR

Page 114: Manual-Uso del Matlab 01

114

PROBLEMAS 2 Hacer el diagrama de flujo y escribir el código de programa para hacer la tabla del 1 al 12, SOLUCION % Uso del comando FOR % Tabla de multiplicar clear all; clear memory; clear command history; clc; for n=1:12; disp(' ') fprintf(' TABLA DEL = %g \n ',n) ; disp(' ') for m=1:12 ; p = m * n ; disp([m,n,p]); end end

p = m * n

FIN

FOR m = 1 to 12

IMPRIMIR m, n, p

IMPRIMIR TABLA DE: n

FOR n = 1 to 12

Page 115: Manual-Uso del Matlab 01

115

PROBLEMA % solubilidad del oxigeno disuelto en funcion % de la temperatura y salinidad en KCl - mg/L clc clear clear memory clear history xlabel('Temperatura - °C'), ylabel('Concentración de oxigeno disuelto, mg/L') title('solubilidad del oxigeno disuelto en función de la temperatura y salinidad en KCl - mg/L') for cl=0:5:25; T=273.15:0.5:323.15; C=-139.344+(1.5757e+5)./T-(6.6423e+7)./(T.^2)+(1.2438e+10)./(T.^3)-(8.6219e+11)./(T.^4)-cl.* (3.1929e-2 -(19.428./T) + 3867.3./(T.^2)); C=exp(C); hold on plot(T-273.15,C) end grid

Page 116: Manual-Uso del Matlab 01

116

PROBLEMA: Un número perfecto es un entero positivo que es igual a la suma de todos los enteros positivos (excluido el mismo) que son divisores del número. El primer número perfecto es 6, ya que los divisores son 1, 2, 3 y 1 + 2 + 3 = 6. Esquematice el Diagrama de flujo y escribir un programa que encuentre los números perfectos en el rango de 2 al número “ n “ ingresado por teclado % calcula la cantidad de números perfectos clear memory; clear command history; clear all; clc; XX=input('Ingrese un numero cualquiera : '); if XX>0 np = 0; % Calcula la cantidad de numeros perfectos entre 1 y XX for II = 1:XX; suma = 1; z=round(II/2); for I = 2:z; %Realiza un bucle para saber cuantos divisores if rem(II,I)== 0 %Tiene el número que se esta probando suma = suma + II / I; %Acumulación de todo los divisores end end if II == suma %Verifica si la suma de los divisores es Idéntico al número probado a ser perfecto np = np + 1; %Cuenta la cantidad de números perfectos existentes en el rango disp([II]) end end disp(['la cantidad de numeros perfectos es = ',num2str(np)]) fprintf('La cantidad de numeros perfectos es = %g \n' ,np)%np representa la cantidad de números perfectos en un rango else disp(' ') disp(' ') disp(['debe ingresar cantidad mayor que cero']) en

Page 117: Manual-Uso del Matlab 01

117

DIAGRAMA DE FLUJO PARA EL PROBLEMA DE NUMERO PERFECTO

XX

Es XX<= 0 disp(['debe ingresar cantidad mayor que cero'])

NO

SI

I = 2 to round(II/I)

Es II mod I = 0 SUMA = SUMA + II / I

NP = NP + 1

FIN

SI

NO

SI

txtnumperf = “HAY “ + np + “Numeros Perfectos”

II = 1 to XX

Page 118: Manual-Uso del Matlab 01

118

PROBLEMA DE AMONIACO %PROGRAMA PARA EL PROCESO DE AMONIACO clear all; clear memory; clear command history; clc; ce1 = 2; ce2 = 3; ce3 = 1; T=298; To=298; P=1; for P=1:1:5; T1=300:20:700; a1 = 2.73.*10; b1 = 2.38E-2; c1 = 1.71E-5; d1 = -1.19E-8; a2 = 2.71.*10; b2 = 9.27E-3; c2 = -1.38E-5; d2 = 7.65E-9; a3 = 3.12.*10; b3 = -1.36E-2; c3 = 2.68E-5; d3 = -1.17E-8; H=-45700; syms T dCp = (ce1*a1-ce2*a2-ce3*a3)+(ce1*b1-ce2*b2-ce3*b3)*T+(ce1*c1-ce2*c2-ce3*c3)*T^2+(ce1*d1-ce2*d2-ce3*d3)*T^3; I=H-((ce1*a1-ce2*a2-ce3*a3)*To+(ce1*b1-ce2*b2-ce3*b3)/2*To^2+(ce1*c1-ce2*c2-ce3*c3)/3*To^3+(ce1*d1-ce2*d2-ce3*d3)/4*To^4); DH=I+(ce1*a1-ce2*a2-ce3*a3)*T+(ce1*b1-ce2*b2-ce3*b3)/2*T^2+(ce1*c1-ce2*c2-ce3*c3)/3*T^3+(ce1*d1-ce2*d2-ce3*d3)/4*T^4; %DH1=I+(ce1.*a1-ce2.*a2-ce3.*a3).*T1+(ce1.*b1-ce2.*b2-ce3.*b3)./2.*T1.^2+(ce1.*c1-ce2.*c2-ce3.*c3)./3.*T1.^3+(ce1.*d1-ce2.*d2-ce3.*d3)./4.*T1.^4; R = 8.314; % En joules Go = -16160; % En joules To = 298; ko = exp(-Go/(R*To)); Ka=exp(33.3398+(3642.8./T1)-6.97.*log(T1)+0.0020086.*T1+0.0000009776.*T1.^2-0.00000000035041.*T1.^3); Tc1 = 405.7; Tc2 = 33.19; Tc3 = 126.2; Pc1 = 111.32; Pc2 = 12.96; Pc3 = 33.55; Pr1 = P./Pc1; Pr2 = P./Pc2; Pr3 = P./Pc3; Tr1 = T1./Tc1; Tr2 = T1./Tc2; Tr3 = T1./Tc3; w1=0.253; w2=-0.216; w3=0.038; Bo1=0.083-0.422./Tr1.^1.6; Bo2=0.083-0.422./Tr2.^1.6; Bo3=0.083-0.422./Tr3.^1.6; B11=0.139-0.172./Tr1.^4.2; B12=0.139-0.172./Tr2.^4.2; B13=0.139-0.172./Tr3.^4.2; Fi1=2.7182.^((Pr1./Tr1).*(Bo1+w1.*B11)); Fi2=2.7182.^((Pr2./Tr2).*(Bo2+w2.*B12)); Fi3=2.7182.^((Pr3./Tr3).*(Bo3+w3.*B13)); Fit=Fi1.^ce1./((Fi2.^ce2).*(Fi3.^ce3)); nombre_f='(4.*Fit.*(x.^2).*(4-2.*x).^2./((1-x).*(P.^2).*(3-3.*x).^3))- Ka'; i=1; delta=0.05; x0=0.88; e=1; while e>3E-12 & i<=18 x=x0; fx0=eval(nombre_f); x=x0-delta; df1=eval(nombre_f); x=x0+delta; df2=eval(nombre_f); dfx0=(df2-df1)./(2.*delta); r=x0-(fx0./dfx0); e=abs((r-x0)./r); x0=r; i=i+1;

Page 119: Manual-Uso del Matlab 01

119

end %fprintf('la raiz es:%10.9f\n',x0); hold on switch P case 1 xox='-r'; case 2 xox='-k'; case 3 xox='-b'; case 4 xox='-m'; case 5 xox='-R'; end plot(T1,x0,xox); h = legend('P=1 atm','P=2 atm','P=3 atm','P=4 atm','P=5 atm',1); xlabel('Temperatura - °K'); ylabel('Extensión de la reacción'); title('EXTENSION VS TEMPERTAURA PARA EL PROCESO AMONIACO') axis([250 700 0 1]) grid on P,[T1' x0' Fit'] end %fprintf('la raiz es:%10.9f\n',x0) RESULTADOS

Page 120: Manual-Uso del Matlab 01

120

PRESION= 1 atm PRESION = 2 atm PRESION = 3 atm PRESION= 4 atm

P = 1 300.0000 0.8267 320.0000 0.7710 340.0000 0.7079 360.0000 0.6393 380.0000 0.5677 400.0000 0.4960 420.0000 0.4271 440.0000 0.3633 460.0000 0.3062 480.0000 0.2565 500.0000 0.2142 520.0000 0.1787 540.0000 0.1493 560.0000 0.1251 580.0000 0.1053 600.0000 0.0891 620.0000 0.0758 640.0000 0.0648 660.0000 0.0559 680.0000 0.0485 700.0000 0.0424

P = 2 300.0000 0.8771 320.0000 0.8365 340.0000 0.7895 360.0000 0.7368 380.0000 0.6796 400.0000 0.6192 420.0000 0.5575 440.0000 0.4964 460.0000 0.4375 480.0000 0.3824 500.0000 0.3320 520.0000 0.2869 540.0000 0.2473 560.0000 0.2128 580.0000 0.1833 600.0000 0.1581 620.0000 0.1366 640.0000 0.1185 660.0000 0.1031 680.0000 0.0901 700.0000 0.0791

P = 3 300.0000 0.8998 320.0000 0.8664 340.0000 0.8274 360.0000 0.7831 380.0000 0.7343 400.0000 0.6818 420.0000 0.6268 440.0000 0.5707 460.0000 0.5149 480.0000 0.4607 500.0000 0.4092 520.0000 0.3615 540.0000 0.3179 560.0000 0.2787 580.0000 0.2440 600.0000 0.2135 620.0000 0.1870 640.0000 0.1640 660.0000 0.1441 680.0000 0.1270 700.0000 0.1122

P = 4 300.0000 0.9135 320.0000 0.8845 340.0000 0.8504 360.0000 0.8116 380.0000 0.7683 400.0000 0.7214 420.0000 0.6715 440.0000 0.6198 460.0000 0.5674 480.0000 0.5154 500.0000 0.4649 520.0000 0.4168 540.0000 0.3719 560.0000 0.3306 580.0000 0.2931 600.0000 0.2594 620.0000 0.2295 640.0000 0.2032 660.0000 0.1800 680.0000 0.1598 700.0000 0.1421

PROBLEMA: Diseñar el diagrama de flujo y código de programa: para determinar la cantidad de número primos existentes en un rango (entre 1 y el número ingresado por teclado)

Page 121: Manual-Uso del Matlab 01

121

DIAGRAMA DE FLUJO PARA DETERMINAR LA CANTIDAD DE NUMEROS PRIMOS

Es NN>0 disp(['debe ingresar cantidad mayor que cero'])

SI

NO

X = 0

P=2 to n-1

Es rem(n,p) = 0

XX = XX + 1

SI

NO

SI

TxtRpta= “Hay “ + XX + “Números primos”

n = 1 To NN

XX = 0

n

Page 122: Manual-Uso del Matlab 01

122

LISTADO DEL PROGRAMA % Determinar la cantidad de números primos % Entre 1 y un número ingresado por el teclado % Numero primo es aquel que es divisible por la unidad y el mismo numero clc; clear memory; clear command history; clear all; NN=input('Ingrese un numero cualquiera : '); if NN > 0 XX = 0; for n = 1:NN % Bucle para buscar números primos en el rango de 1 a nn X = 0; for p = 2:(n-1) % Busca otro divisor aparte del 1 y el mismo numero if rem(n,p)== 0 % Determinación del numero de divisores X = X + 1; % Si x>0 el numero cuenta con mas de dos divisores end % por lo tanto no es primo end if X == 0 % Si el numero de divisores es cero, entonces es primo XX = XX + 1; % Cuenta los números primos disp([n]) end end fprintf('La cantidad de números primos es = %g \n' ,XX) %np representa la cantidad de números perfectos en un rango else disp(' ') disp(' ') disp(['debe ingresar cantidad mayor que cero']) end EJERCICIOS Hacer 10 programas usando el Comando FOR … END

Page 123: Manual-Uso del Matlab 01

123

COMANDO WHILE

Page 124: Manual-Uso del Matlab 01

124

COMANDO WHILE El bucle while es similar al bucle for en el que permite repetir la ejecución de las sentencias Matlab, la sintaxis del bucle while tiene la siguiente forma: while expression % MATLAB command 1 % MATLAB command 2 % Mas comandos para ejecutar repetidamente hasta que la expresión sea no verdadera end Donde la expresión es una expresión lógica y que puede ser falsa o verdadera, por ejemplo: consideramos el siguiente bucle while n = 1 while n < 3 n = n+1 end Este código crea la siguiente salida: n = 1 n = 2 n = 3 También

count = 1;

num = 2; while count < 16 cnum= [count num] % forms a vector disp(cnum) % pretty printing num = num*2; count = count + 1; % expression is modified if count >= 10 break end end

Page 125: Manual-Uso del Matlab 01

125

Se muestra el diagrama de flujo para el comando While Relaciones. Los operadores que se pueden usar son:

< Menor que

> Mayor que

<= Menor o igual que

>= Mayor o igual que

== Igual

~= No igual

También puede usarse operadores lógicos, tales como:

& Y │ O ~ No

Sentencias en el Cuerpo del bucle

Condición Verdadera ?

SI

NO

FIN

Page 126: Manual-Uso del Matlab 01

126

PROBLEMA PARA CALCULAR LA PRESION DE ROCIO Encontrar la presión de rocío y la composición en la fase líquida para una mezcla vapor de 55% de acetona (1) y 45% de hexano (2) a la temperatura de 20ºC.

Datos:

Tc (K) Pc (bar) Zc Vc

cm3/mol ω A B C

1 2

508,1 507.5

47,0 30,1

0.232 0,264

209 370

0.304 0,299

7,11714 6,91058

1210,595 1189,64

229,664 226,280

Donde :

A, B, C: constantes de Antoine: )CT(

BA)Plog( sat

+−= , T: ºC y Psat : mmHg.

Los parámetros de Margules son: A12 = 1,7448, A21 = 1,8012.

Page 127: Manual-Uso del Matlab 01

127

Si

Si

No

No

ALGORITMO

Leer temperatura (T1) y fracción molar gaseosa (Y1) – Constantes

Hacer Φi = 1.0 y Gammai = 1.0 Calcular Psat

Calcular Presión: P = 1 / ∑( Yi * Φi / Gammai* Pi

sat )

Calcular Xi Xi = ( Yi * Φi * P ) / (Gammai * Pisat )

Evaluar Gammai ( Ecuación de Margules )

Recalcular P P = = 1 / ∑( Yi * Φi / Gammai* Pi

sat )

Evaluar Φi

Recalcular Xi = ( Yi * Φi * P ) / (Gammai * Pisat )

Como es ∑ Xi Normalizar Xi Dado lo valores de X1 y X2,

donde Xi = ( Xi / ∑ Xi ) Recalculamos Gammai

Φ

Calcular Presión: P = 1 / ∑( Yi * Φi / Gammai* Pisat )

γ

Pi Xi

Es ∆ Gammai < 0

Es ∆ P < 0

Page 128: Manual-Uso del Matlab 01

128

% Programa para el problema - (1) Acetona (2) Hexano clear all; clear command history; clc; y1 = 0.55; y2 = 0.45; T = 20 + 273; % Cálculo de la Psat Con Constantes de ANTOINE A1 = 7.11714; B1 = 1210.595; C1 = 229.664; A2 = 6.91058; B2 = 1189.64; C2 = 226.280; Psat1 = exp(A1 - B1 / (T + C1)); Psat2 = exp(A2 - B2 / (T + C2)); % Calculo de la presion fi1=1; fi2=1; gama1=1.0; gama2=1.0; P=1/( y1*fi1/(gama1*Psat1) + y2*fi2/(gama2*Psat2) ) % Calculo de X1 y X2 x1=y1*fi1*P/(gama1*Psat1); x2=y2*fi2*P/(gama2*Psat2); % Calculo de gama1 y gama2 MARGULES A12 = 1.7448; A21 = 1.8012; gama1 = exp(x2 ^ 2 * (A12 + 2 * x1 * (A21 - A12))) gama2 = exp(x1 ^ 2 * (A21 + 2 * x2 * (A12 - A21))) % Calcular P PP=1/( y1*fi1/(gama1*Psat1) + y2*fi2/(gama2*Psat2)); gama11=0; gama22=0; while (PP-P)>0.00001 % Evaluar fi1 y fi2 Tc1 = 508.1; Tc2 = 507.5; Pc1 = 47. * 750.0617; Pc2 = 30.1 * 750.0617; w1 = 0.304; w2 = 0.299; Tr1 = T / Tc1; Tr2 = T / Tc2; Pr1 = PP / Pc1; Pr2 = PP / Pc2; B01 = 0.083 - 0.422 / Tr1 ^ (1.6); B02 = 0.083 - 0.422 / Tr2 ^ (1.6); B11 = 0.139 - 0.172 / Tr1 ^ (4.2); B12 = 0.139 - 0.172 / Tr2 ^ (4.2); fi1 = exp(Pr1 / Tr1 * (B01 + w1 * B11)); fi2 = exp(Pr2 / Tr2 * (B02 + w2 * B12)); while gama11-gama1>0.00000001 %Nuevo calculo de x1 y x2 xx1 = y1*fi1*PP/(gama1*Psat1); xx2 = y2*fi2*PP/(gama2*Psat2) xtot = xx1 + xx2; xx1 = xx1/(xx1+xx2); xx2=xx2/(xx1+xx2); %forzando a 1.0 xtot1 = xx1 + xx2; x1 = xx1; x2 = xx2 %Recalculo de gama1 y gama2 gama1=gama11; gama2=gama22; A12 = 1.7448; A21 = 1.8012; gama11 = exp(x2 ^ 2 * (A12 + 2 * x1 * (A21 - A12))) gama22 = exp(x1 ^ 2 * (A21 + 2 * x2 * (A12 - A21))) end P=PP; PP = 1/( y1*fi1/(gama1*Psat1) + y2*fi2/(gama2*Psat2)) end [ x1 x2 P ]' RESULTADOS= COMPOSICION DE ACETONA : 0.5048 COMPOSICION DE HEXANO : 0.4952 PRESION DE ROCIO : 176.6582

Page 129: Manual-Uso del Matlab 01

129

Programa con uso del comando While

h = 0.001; x = [0:h:2]; y = 0*x; y(1) = 1; i = 1; size(x) max(size(x)) while(i<max(size(x))) y(i+1) = y(i) + h*(x(i)-abs(y(i))); i = i + 1; end plot(x,y,'r-') figure plot(x,y)

Page 130: Manual-Uso del Matlab 01

130

EJERCICIOS 1. Al final del año las empresas cuentan con ganancias de las cuales una parte se distribuye entre

los trabajadores y es llamada utilidad total a distribuir (UAD). En base a la UAD se obtiene la utilidad que recibirá determinado trabajador(UADT).

Para hallar la utilidad se debe tener en cuenta los ingresos y los gastos de la empresa de acuerdo a sus ventas de acuerdo a las siguientes relaciones: - El precio unitario es 20% más que el costo unitario - Ingresos= Precio_unitario x Cantidad_vendida - Costos= Costo_unitario x Cantidad_vendida - Los gastos administrativos equivalen al 10% de los ingresos - Gastos= Costos + Gastos_administrativos - Utilidad_a_distribuir(UAD)=Ingresos – Gastos - Utilidad_a_distribuir_a_cada_trabajador(UADT)= 50% x UAD x f1 + 50% UAD x f2 Donde f1 es el factor de horas-hombre laboradas en un año para un trabajador y f2 es el factor del salario anual del trabajador vs. el salario anual de todos los trabajadores de la empresa. F1 = hF / (hF x cF + hlT1 x clT1 + hlT2 x clT2) F2 = sF / (sF x cF + clT1 x slT1 + clT2 x slT2) Siendo cada una de las variables que intervienen en las fórmulas anteriores: - hF: Horas por día que trabaja un funcionario - sF: Salario que recibe el funcionario - cF: Cantidad de funcionarios que existen en la empresa - hIT1: Horas por día que trabaja un ingeniero tipo 1 - cIT1: Cantidad de ingenieros tipo 1 que existen en la empresa - sIT1: Salario que recibe el ingeniero tipo 1 - hIT2: Horas por día que trabaja un ingeniero tipo 2 - cIT2: Cantidad de ingenieros tipo 2 - sIT2: Salario que recibe el ingeniero tipo 2

2. Implementar un programa en VBA, que nos diga el día de la semana que corresponda a una fecha

ingresada en forma de dia (xx), mes (yy), año (yyyy)

día mes año día de la semana (Respuesta)

Un método para determinar qué día de la semana correspondiente a un día, mes y año determinado es el siguiente: A. Tome los dos últimos dígitos del año y divídalo entre 4, quedándose con la parte entera como

resultado. B. Añada el día ingresado. C. Luego, añada uno de los siguientes valores, de acuerdo al mes ingresado:

- Abril, julio: 0

Page 131: Manual-Uso del Matlab 01

131

- Enero, octubre: 1 - Mayo: 2 - Agosto: 3 - Febrero, marzo, noviembre: 4 - Junio: 5 - Septiembre, diciembre: 6

D. Reste 1 si el mes ingresado es enero o febrero y el año ingresado es bisiesto. E. De acuerdo al año ingresado (asuma que el año ingresado se encuentra en alguno de los

rangos anteriores), añada: - Para los 1700 - 1799 4 - Para los 1800 - 1899 2 - Para los 1900 - 1999 0 - Para los 2000 - 2999 6

F. Añada al resultado los últimos dos dígitos del año. G. Por último, divida entre 7 y tome el resto.

El resultado será un número entre 0 y 6, que corresponderá a un día de la semana: 0 sábado, 1 domingo, 2 lunes, 3 martes, 4 miércoles, 5 jueves, 6 viernes. NOTA: Un año es bisiesto si ocurre que:

Es divisible por 4 y no por 100 ó Es divisible por 400.

3. Se tiene una diana (“bull”) para el juego de dardos, formada por 5 zonas delimitadas por

circunferencias concéntricas de radio 2, como se observa en la figura. Cada punto Px, está conformado por (x, y) o datos de ingreso.

Ejemplos: Observe el gráfico y la Tabla mostrados anteriormente. El punto P1 está en la zona 1, circunferencia de radio 2, entonces el puntaje será 50 puntos. El punto P2 está en la zona 3, limitada por la circunferencia de radio 4 y 6, entonces el

puntaje será 30 puntos. El punto P3 está en el límite de la zona 4 y 5 (se considera la menor zona, zona 4), entonces

el puntaje será 20 puntos. El punto P4 está fuera de la diana, entonces el puntaje será 0 (cero) puntos.

Page 132: Manual-Uso del Matlab 01

132

Para lo cual se pide desarrollar un Diagrama de flujo y el Programa correspondiente para que nos devuelva el mensaje correspondiente, según los casos siguientes:

Si x e y son números positivos, nos devuelva “las coordenadas ingresadas pertenecen al

primer cuadrante”. Si x e y son números negativos, nos devuelva “las coordenadas ingresadas pertenecen al

tercer cuadrante”. Si x es un número positivo e y es un número negativo, nos devuelva “las coordenadas

ingresadas pertenecen al cuarto cuadrante”. Si y es un número positivo y x es un número negativo, nos devuelva “las coordenadas

ingresadas pertenecen al segundo cuadrante”.

Y el puntaje alcanzado en cada tiro (ingreso de dato)

4. Hacer el Diagrama de flujo y el programa correspondiente para calcular la suma de los cubos de

los dígitos de un número natural ingresado por el teclado, el número ingresado puede ser de 3, 4, 5 y 6 dígitos, pero no de 1 ni de 2.

5. Hacer 10 problemas relacionado con la Ingeniería Química haciendo uso de comando WHILE

Page 133: Manual-Uso del Matlab 01

133

ECUACIONES LINEALES

Page 134: Manual-Uso del Matlab 01

134

SISTEMA DE ECUACIONES LINEALES Consideramos un conjunto de ecuaciones de n incógnitas dado por:

a1,1 x1 + a1,2 x2 + a1,3 x3 + …………+ a1,n xn = y1 a2,1 x1 + a2,2 x2 + a2,3 x3 + …………+ a2,n xn = y2

…………. am,1 x1 + am,2 x2 + am,3 x3 + …………+ am,n xn = ym

Donde: ai,j son coeficientes conocidos, x i son incógnitas yi términos conocidos (términos no homogéneos) Las ecuaciones lineales anteriores se pueden expresar en forma compacta como: A x = y

Podrá solucionarse mediante: x = A \ y (El resultado esta en forma de vector columna) x = inv(A) * y (El resultado esta en forma de vector columna) z = y ‘ / A ‘ (El resultado esta en forma de vector fila ) inv(A) * y (El resultado esta en forma de vector columna) A ^ (-1) * y (El resultado esta en forma de vector columna) Y ‘ * inv(A) (El resultado esta en forma de vector fila)

Sea el conjunto de ecuaciones: X1 + 2x2 + 3x3 = 14

2x1 + x2 + 2x3 = 10 2x1 + x2 + x3 = 9

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

>> y = [14 ; 10 ; 9 ] y = 14 10 9

>> x = A \ y x = 1.6667 4.6667 1.0000

>> x = inv(A) * y x = 1.6667 4.6667 1.0000

>> z = y' / A' z = 1.6667 4.6667 1.0000

>> inv(A) * y ans = 1.6667 4.6667 1.0000

>> A ^ (-1)* y ans = 1.6667 4.6667 1.0000

>> y' * inv(A') ans = 1.6667 4.6667 1.0000

a1,1 … a1,n :

A

x1 : xn

x =

y1 : yn

y =

Page 135: Manual-Uso del Matlab 01

135

PARTE TEORICA

Un sistema de ecuaciones lineales es un conjunto de ecuaciones lineales que podemos escribir de forma tradicional así:

un sistema así expresado tiene "m" ecuaciones y "n" incógnitas, donde aij son números reales, llamados coeficientes del sistema, los valores bm son números reales, llamados términos independientes del sistema, las incógnitas xj son las variables del sistema, y la solución del sistema es un conjunto ordenado de números reales (s1, s2, ..., sn) tales que al sustituir las incógnitas x1, x2, ... , xn por los valores s1, s2, ..., sn se verifican a la vez las "m" ecuaciones del sistema.

Este mismo sistema de ecuaciones lineales en notación matricial tiene esta forma:

Donde:

• Llamamos matriz del sistema a la matriz de dimensión m×n formada por los coeficientes del sistema, y la designamos por A.

• Designamos por X a la matriz columna formada por las incógnitas. • Denotamos por B a la matriz columna formada por los términos independientes.

Así mismo; llamamos matriz ampliada de dimensión m×(n+1) a la matriz que se obtiene al añadir a la matriz del sistema (= matriz de coeficientes) la columna de los términos independientes, y la denotamos por A*, es decir

Page 136: Manual-Uso del Matlab 01

136

APLICACIONES CON PROGRAMAS Programas Aplicados a Los Sistemas de Ecuaciones Lineales %método de la bisección para los sistemas de ecuaciones fprintf(‘\n’); nombre_f=input(‘ ingrese función asociada f(x)= ‘,’s’); a=input(‘ ingrese limite inferior: ‘); b=input(‘ ingrese limite superior: ‘); fprintf(‘\n’); fprintf(‘ it a b aprox error\n’); i=1;e=1; r=0; while e>=3E-6 & i<=10 va=r; r=(a+b)/2; x=a;fa=eval(nombre_f); x=b;fb=eval(nombre_f); x=r;fr=eval(nombre_f); fprintf(‘ %3.0f %10.6f %10.6f %10.6f’,I,a,b,r); if fa*fr<=0 b=r; e=abs((r-va)/r); fprintf(‘ %10.6f\n’,e); else a=r; e=abs((r-va)/r); fprintf(‘ %10.6f\n’,e); end i=i+1; end fprintf(‘\n’); fprintf(‘la raíz es: %10.9f\n’, r); SALIDA: ingrese función asociada f(x)= x^3+3*x ingrese límite inferior: 4 ingrese límite superior: 8 it a b aprox error 1 4.000000 8.000000 6.000000 1.000000 2 6.000000 8.000000 7.000000 0.142857 3 7.000000 8.000000 7.500000 0.066667 4 7.500000 8.000000 7.750000 0.032258 5 7.750000 8.000000 7.875000 0.015873 6 7.875000 8.000000 7.937500 0.007874 7 7.937500 8.000000 7.968750 0.003922 8 7.968750 8.000000 7.984375 0.001957 9 7.984375 8.000000 7.992188 0.000978 10 7.992188 8.000000 7.996094 0.000489 la raiz es: 7.996093750

Page 137: Manual-Uso del Matlab 01

137

%método de la regla falsa fprintf('\n'); nombre_f=input(' ingrese función asociada f(x)= ','s'); a=input(' ingrese límite inferior: '); b=input(' ingrese límite superior: '); fprintf('\n'); fprintf(' it a b aprox error\n'); i=1;e=1; r=0; while e>=3E-6 & i<=10 va=r; r=(a+b)/2; x=a;fa=eval(nombre_f); x=b;fb=eval(nombre_f); x=r;fr=eval(nombre_f); fprintf(' %3.0f %10.6f %10.6f %10.6f',i,a,b,r); if fa*fr<=0 b=r; e=abs((r-va)/r); fprintf(' %10.6f\n',e); else a=r; e=abs((r-va)/r); fprintf(' %10.6f\n',e); end i=i+1; end fprintf('\n'); fprintf('la raíz es: %10.9f\n', r); SALIDA: ingrese función asociada f(x)= sqrt(x)+2*x ingrese límite inferior: 2 ingrese límite superior: 6 it a b aprox error 1 2.000000 6.000000 4.000000 1.000000 2 4.000000 6.000000 5.000000 0.200000 3 5.000000 6.000000 5.500000 0.090909 4 5.500000 6.000000 5.750000 0.043478 5 5.750000 6.000000 5.875000 0.021277 6 5.875000 6.000000 5.937500 0.010526 7 5.937500 6.000000 5.968750 0.005236 8 5.968750 6.000000 5.984375 0.002611 9 5.984375 6.000000 5.992188 0.001304 10 5.992188 6.000000 5.996094 0.000651 la raíz es: 5.996093750

Page 138: Manual-Uso del Matlab 01

138

% método de Newton Raphson clc; nombre_f = input(' ingrese función asociada f(x) = ','s'); x0 = input(' ingrese valor inicial : '); fprintf('\n'); fprintf(' it aprox g(x) error\n'); i=1; e=1; delta=0.001; while e>=3E-12 & i<=18 x=x0; fx0=eval(nombre_f); x=x0-delta; df1=eval(nombre_f); x=x0+delta; df2=eval(nombre_f); dfx0=(df2-df1)/(2*delta); r=x0-(fx0/dfx0); e=abs((r-x0)/r); fprintf(' %3.0f %10.6f %10.6f %10.6f\n',i,x0,r,e); x0=r; i=i+1; end fprintf('la raíz es: %10.9f\n', x0); SALIDA: Ingrese función asociada f(x) = sqrt(x)+2*x^3 Ingrese valor inicial : 12 it aprox g(x) error 1 12.000000 7.996659 0.500627 2 7.996659 5.324967 0.501729 3 5.324967 3.538690 0.504785 4 3.538690 2.338336 0.513337 5 2.338336 1.520431 0.537942 6 1.520431 0.941642 0.614659 7 0.941642 0.489185 0.924921 8 0.489185 0.055119 7.875092 9 0.055119 -0.054335 2.014432 10 -0.054335 0.054324 2.000056 11 0.054324 -0.053579 2.013915 12 -0.053579 0.053535 2.000502 13 0.053535 -0.052828 2.013405 14 -0.052828 0.052757 2.000890 15 0.052757 -0.052087 2.012908 16 -0.052087 0.051994 2.001225 17 0.051994 -0.051359 2.012426 18 -0.051359 0.051247 2.001513 la raíz es: 0.051246950

Page 139: Manual-Uso del Matlab 01

139

También podrá solucionarse el problema de manera gráfica, así % Gráfico función clear all; clear memory; clear command history; clc; x=10.9:0.1:11.2 y=0.9.*x.^2+8.*x-200 plot(x,y) grid on SOLUCION Se puede observar que la solución es aproximadamente 11.11

10.9 10.95 11 11.05 11.1 11.15 11.2 11.25-6

-5

-4

-3

-2

-1

0

1

2

3

Page 140: Manual-Uso del Matlab 01

140

EJERCICIOS: Escribir 10 ejercicios para el caso de ecuaciones lineales homogénea

Page 141: Manual-Uso del Matlab 01

AJUSTE DE CURVAS METODO MINIMOS CUADRADOS

Page 142: Manual-Uso del Matlab 01

142

Uso de Método de mínimos cuadrado al ajuste de curva El siguiente programa es para ajustar una curva dada por un conjunto de puntos, usando el método de mínimos cuadrados (puede verificarse en la bibliografía: %Ejemplo6 %Y variable dependiente: Y = b + m*X clc;clear memory; clear command history x=[1 3 4 6 8 9 11 14] y=[1 2 3.8 4 5 7 8 9] plot(x,y,'o-r') xlabel('X'); ylabel('Y') axis([-6 15 -10 15]) grid on figure plot(y,x,'o-b') xlabel('X'); ylabel('Y') axis([-6 14 -10 15]) grid on figure Sx=sum(x); Sy=sum(y); Sx2=sum(x.^2); Sy2=sum(y.^2); Sxy=sum(x.*y); N=length(x) %Y variable dependiente: Y = b1 + m1*X b=(Sy*Sx2-Sx*Sxy)/(N*Sx2-Sx^2) m=(N*Sxy-Sx*Sy)/(N*Sx2-Sx^2) xx=-3:1:14; plot(xx,b+m*xx,x,y,'r-') text(5,2.8,' \leftarrow Y=b+m*X ','EdgeColor','red','LineWidth',2); text(9.5,3.5,['b = ',num2str(b)]) text(9.5,2.4,['m = ',num2str(m)]) xlabel('X'); ylabel('Y') axis([-6 15 -10 15]) figure %hold on %X variable dependiente: X = b1 + m1*Y b1=(Sx*Sy2-Sy*Sxy)/(N*Sy2-Sy^2) m1=(N*Sxy-Sx*Sy)/(N*Sy2-Sy^2)

Page 143: Manual-Uso del Matlab 01

143

yy=-5:1:10; plot(yy,b1+m1*yy,'b',y,x,'k*-') text(-3.5,-7,' \leftarrow X=b1+m1*Y ','EdgeColor','black','LineWidth',2); text(1.5,-6.4,['b = ',num2str(b1)]) text(1.5,-7.4,['m = ',num2str(m1)]) xlabel('X'); ylabel('Y') axis([-6 14 -10 15]) TAREA % falta calcular el error % verificar en la bibliografía y adicionar ....TAREA CUYOS RESULTADOS SE DAN EN LA FIGURA ADJUNTA: SE PIDE CONFIRMAR LOS RESULTADOS, explicando paso por paso lo que dice cada sentencia del programa OJO………Probar dichos resultados con el comando POL

Page 144: Manual-Uso del Matlab 01

144

Page 145: Manual-Uso del Matlab 01

145

RECOMENDACIONES:

1. Es necesario revisar el Help del MatLab para verificar el significado de cada uno de los comandos

2. Hacer un Ejemplo con cada uno de ellos

Page 146: Manual-Uso del Matlab 01

146

AJUSTE DE CURVAS

DIFERENCIACION NUMERICA La Media, la Mediana, Medidas de Dispersión – Ajuste de

Curvas

Page 147: Manual-Uso del Matlab 01

147

POLINOMIOS - Funciones para cálculos con polinomios En MATLAB un polinomio se puede definir mediante un vector de coeficientes. Por ejemplo, el polinomio:

X4 – 8X2 + 6X – 10 = 0

se puede representar mediante el vector [1, 0, -8, 6, -10]. MATLAB puede realizar diversas operaciones sobre él, como por ejemplo evaluarlo para un determinado valor de x (función polyval()) y calcular las raíces (función roots())

>> pol = [ 1 0 -8 6 –10 ] pol = 1 0 -8 6 -10 >> roots(pol) ans = -3.2800 2.6748 0.3026 + 1.0238i 0.3026 - 1.0238i

>> polyval( pol,1 ) ans = -11

>> polyval(pol,2) ans = -14

>> polyval(pol,4) ans = 142 >> polyval(pol,5) ans = 445

Para calcular el producto de polinomios MATLAB utiliza una función llamada conv() (de producto de convolución). En el ejemplo se va a ver cómo se multiplica un polinomio de segundo grado por otro de tercer grado, asi mismo; Para dividir polinomios existe otra función llamada deconv(). Por ejemplo; sean los polinomios siguientes: Pol1 = X2 – 2X + 4 y pol2 = X3 + 3X – 4

>> pol1 = [ 1 -2 4 ] pol1 = 1 -2 4 >> pol2 = [ 1 0 3 –4 ] pol2 = 1 0 3 -4 >> pol3 = conv(pol1,pol2) pol3 = 1 -2 7 -10 20 -16

>> pol4 = deconv(pol3,pol1) pol4 = 1 0 3 -4 >> pol5 = deconv(pol3,pol2) pol5 = 1 -2 4

El polinomio será: X5 – 2X4 + 7X3 – 10X2 – 20X – 16

Page 148: Manual-Uso del Matlab 01

148

Las funciones orientadas al cálculo con polinomios son las siguientes:

poly(A) polinomio característico de la matriz A

roots(pol) raíces del polinomio pol

polyval(pol,x) evaluación del polinomio pol para el valor de x. Si x es un vector, pol se evalúa para cada elemento de x

polyvalm(pol,A) evaluación del polinomio pol de la matriz A

conv(p1,p2) producto de convolución de dos polinomios p1 y p2

[c,r]=deconv(p,q) división del polinomio p por el polinomio q. En c se devuelve el cociente y en r el resto de la división

residue(p1,p2) descompone el cociente entre p1 y p2 en suma de fracciones simples

polyder(pol) calcula la derivada de un polinomio

polyder(p1,p2) calcula la derivada de producto de polinomios

polyfit(x,y,n) calcula los coeficientes de un polinomio p(x) de grado n que se ajusta a los datos p(x(i)) ~= y(i), en el sentido de mínimo error cuadrático medio.

interp1(xp,yp,x) calcula el valor interpolado para la abscisa x a partir de un conjunto de puntos dado por los vectores xp e yp.

interp1(xp,yp,x,'m') como el anterior, pero permitiendo especificar también el método de interpolación. La cadena de caracteres m admite los valores 'nearest', 'linear', 'spline', 'pchip', 'cubic' y 'v5cubic'.

AJUSTE POLINOMIAL: Si se dispone de n+1 puntos (xi,yi), se pueden encontrar un polinomio único de orden “ n “ . Estos coeficientes será determinados por la función polyfit . Sean los puntos (x,y): (1,2), (2,5), (3,10), (4,17), (5,26), la aplicación estará dado por:

EDU>> x = [ 1 2 3 4 5 ] ; EDU>> y = [ 2 5 10 17 26 ] ; EDU>> a = polyfit( x , y , length(x) – 1 ) a=

0.0000 0.0000 1.0000 0.0000 1.0000 resultando el polinomio siguiente: y = x2 + 1

Page 149: Manual-Uso del Matlab 01

149

El concepto nos sirve para ajustar curvas cuando tenemos un conjunto de puntos tales como: Xi = [590 1100 1750 2400 3200 4100 5800 6700 7800 8900 11000]; Vsz = [3.306 2.71 2.13 1.65 1.16 0.82 0.38 0.30 0.22 0.13 0.08]; Graficando obtendremos lo siguiente: Para hacer un ajuste manual: hacemos click en Tools y clic en Basic Fitting y aparecerá el menú que aparece en la siguiente página Y se observa el ajuste manual e incluye la ecuación que rige dicho ajuste:

Page 150: Manual-Uso del Matlab 01

150

El estudiante podrá probar ajustes de 5th, 6th y 7th grado polinomial y escribir sus conclusiones También podemos escribir código de programa para ajustar curvas, un caso particular es el método de mínimos cuadrados para un ajuste lineal. A continuación se muestra un ejemplo típico: %Ejemplo - Ajuste Lineal %Y variable dependiente: Y = b + m*X clc;clear memory; clear command history x=[1 3 4 6 8 9 11 14] y=[1 2 3.8 4 5 7 8 9] plot(x,y,'o-r') xlabel('X'); ylabel('Y') axis([-6 15 -10 15]) grid on figure plot(y,x,'o-b') xlabel('X'); ylabel('Y') axis([-6 14 -10 15]) grid on figure Sx=sum(x); Sy=sum(y); Sx2=sum(x.^2); Sy2=sum(y.^2); Sxy=sum(x.*y); N=length(x) %Y variable dependiente: Y = b1 + m1*X b=(Sy*Sx2-Sx*Sxy)/(N*Sx2-Sx^2) m=(N*Sxy-Sx*Sy)/(N*Sx2-Sx^2) xx=-3:1:14; plot(xx,b+m*xx,x,y,'r-') text(5,2.8,' \leftarrow Y=b+m*X ','EdgeColor','red','LineWidth',2); text(9.5,3.5,['b = ',num2str(b)]) text(9.5,2.4,['m = ',num2str(m)])

Page 151: Manual-Uso del Matlab 01

151

xlabel('X'); ylabel('Y') axis([-6 15 -10 15]) figure %hold on %X variable dependiente: X = b1 + m1*Y b1=(Sx*Sy2-Sy*Sxy)/(N*Sy2-Sy^2) m1=(N*Sxy-Sx*Sy)/(N*Sy2-Sy^2) yy=-5:1:10; plot(yy,b1+m1*yy,'b',y,x,'k*-') text(-3.5,-7,' \leftarrow X=b1+m1*Y ','EdgeColor','black','LineWidth',2); text(1.5,-6.4,['b = ',num2str(b1)]) text(1.5,-7.4,['m = ',num2str(m1)]) xlabel('X'); ylabel('Y') axis([-6 14 -10 15]) % falta calcular el error % verificar en la bibliografía y adicionar....TAREA % Tarea para el estudiante: completar el programa con la parte de cálculo de error en el ajuste

Page 152: Manual-Uso del Matlab 01

152

DIFERENCIACION La derivada de un polinomio es y’ = n.c1.xn-1 + (n-1).c2.xn-2 + ......+ cn Equivalente a un polinomio con coeficientes: p. * [ n : -1 : 1 , 0 ]. MATLAB ofrece la función polyder para los coeficientes de la derivada >> p=[ 1 2 3 4 5 ] P = 1 2 3 4 5 >> n = length(p) – 1 n = 4 >> q = p . * [ n : -1 : 1 , 0] q = 4 6 6 4 0 ó >> q = polyder(p) q = 4 6 6 4 También La derivada del producto de los polinomios siguientes: ( 3X2 + 6X + 9 )*( x2 + 2X ) a = [3 6 9]; b = [1 2 0]; k = polyder(a,b) k = 12 36 42 18

a = [3 6 9]; b = [1 2 0]; c = conv(a,b) c = 3 12 21 18 0 kk=polyder(c) kk = 12 36 42 18

La derivada será: 12X3 + 36X2 + 42X + 18

Page 153: Manual-Uso del Matlab 01

153

También; Uso del comando diff: syms x d=3*x^2+6*x+9 diff(d) ans = 6*x+6 otro: s=x^5 + x^4 + x^3 + x + 9 diff(s) ans 5*x^4 +4*x^3 +3*x^2 + 1

Page 154: Manual-Uso del Matlab 01

154

ESTADISTICA DESCRIPTIVA MEDIA M=mean(A) retorna el valor medio de los elementos de arreglos de diferentes dimensiones Si A es un vector, mean(A) retorna el valor medio de A Si A es una matriz, mean(A) trata las columnas de A como vectores, retornando un vector fila con los valores de la media, por ejemplo:

>> a=[2 4 6 8 3 6 8] a = 2 4 6 8 3 6 8 >> mean(a) ans = 5.2857

>> A = [1 2 3; 3 3 6; 4 6 8; 4 7 7] A = 1 2 3 3 3 6 4 6 8 4 7 7 >> mean(A) ans = 3.0000 4.5000 6.0000

MEDIANA M=median(A) retorna el valor de la mediana de los elementos de un arreglo de cualquier dimensión. Si A es un vector, median(A) retorna el valor de la mediana de A. Si A es una matriz, median(A) trata a las columnas de A como un vector y retorna un vector fila con los valores de la mediana, por ejemplo:

x=[4, 6, 2. 10, 12] x = 4 6 2 10 12 >> median(x) ans = 6

>> A = [1 2 4 4; 3 4 6 6; 5 6 8 8; 5 6 8 8] A = 1 2 4 4 3 4 6 6 5 6 8 8 5 6 8 8 >> median(A) ans = 4 5 7 7

Page 155: Manual-Uso del Matlab 01

155

DESVIACION ESTÁNDAR Hay dos definiciones para la desviación estándar de S de un vector de datos X Sintáxis S=std(X) S=std(X,flag) S=std(X,flan,dim) Por definición sabemos: Donde: “ n “ es el número de elementos en el ejemplo. Las dos formas de las ecuaciones difieren en “ n-1 “ y “ n “ en el divisor. s = std(X), donde X es un vector, retorna la desviación estándar usando la ecuación (1) de arriba. Si X es un ejemplo al azar de datos desde una distribución normal, “ s2 “ es la mejor respuesta imparcial estimada de su varianza. 150 Si X es una matriz, std(X) retorna un vector fila conteniendo la desviación estándar de los elementos de cada columna de X. Si X es un arreglo multidimensional, std(X) es la desviación estándar de los “ th “ elementos a lo largo de la primera dimensión de X. Por ejemplo: EJERCICIOS Hacer 10 ejercicios, con los comandos estudiados en este capítulo

Page 156: Manual-Uso del Matlab 01

INTEGRACION NUMERICA

Page 157: Manual-Uso del Matlab 01

157

METODOS DE INTEGRACION NUMERICA % Integracion Simpson 3/8 – forma abreviada function simpson38 clc; clear all; clear memory; clear command history; f=input(' Ingrese la función a integrar f(x) = ','s'); a=input(' Ingrese limite inferior : '); b=input(' Ingrese limite superior : '); n=input(' Ingrese numero de trapecios a considerar en la integración : '); % f n=2*n; xmin=a; xmax=b; h=(b-a)/n; x=a:h:b; fx=eval(f);y=abs(fx); suma1=y(1)+y(n+1); suma2=3*sum(y(2:3:n-1)); suma3=3*sum(y(3:3:n)); suma4=2*sum(y(4:3:n-2)); suma= suma1+suma2+suma3+suma4; integral=(3/8)*h*suma; fprintf('El área es : %10.9f\n ',integral); % gráfico hold on xp= xmin:0.1:xmax; x=xp; yp=eval(f); x3=0:0.01:0.95; x=x3; yp1=eval(f); plot(x3,yp1,'r',xp,yp,'bo') x=a:0.1:b; y=eval(f); bar(x,y,'y'); axis([0 1 0 30]) % Metodo Abreviado syms x yy=int('3.2824e+5*x^10-1.5407e+6*x^9+3.1342e+6*x^8-3.6235e+6*x^7+2.6261e+6*x^6-1.2424e+6*x^5+3.8818e+5*x^4-79512*x^3+10465*x^2-855.51*x+44.084','x',0.25,0.75) %yy=3.2824e+5.*x.^10 - 1.5407e+6.*x.^9 + 3.1342e+6.*x.^8 - 3.6235e+6.*x.^7 + 2.6261e+6.*x.^6 -1.2424e+6.*x.^5 + 3.8818e+5.*x.^4 - 79512.*x.^3 + 10465.*x.^2 - 855.51.*x + 44.084 y=(3.2824e+5.*x.^10 - 1.5407e+6.*x.^9 + 3.1342e+6.*x.^8 - 3.6235e+6.*x.^7 + 2.6261e+6.*x.^6 -1.2424e+6.*x.^5 + 3.8818e+5.*x.^4 - 79512.*x.^3 + 10465.*x.^2 - 855.51.*x + 44.084);

Page 158: Manual-Uso del Matlab 01

158

RESPUESTA: Introducir la función sgte: y=(3.2824e+5.*x.^10 - 1.5407e+6.*x.^9 + 3.1342e+6.*x.^8 - 3.6235e+6.*x.^7 + 2.6261e+6.*x.^6 -1.2424e+6.*x.^5 + 3.8818e+5.*x.^4 - 79512.*x.^3 + 10465.*x.^2 - 855.51.*x + 44.084);

Se puede observar los resultados: método Simpson y el método abreviado El área es 5.361569895 Método Simpson El área es yy = 5.3937307293604290674603174603175 Método abreviado OJO…….Explique la diferencia En la figura adjunta se puede observar el gráfico trazado por el programa 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

0

5

10

15

20

25

30

Page 159: Manual-Uso del Matlab 01

159

También; Programas Aplicados a la integración de Funciones % Este programa sirve para integrar por integrales numéricas % por el método de %SIMPSON una función dada % y para graficar dicha función. clc disp(' INTEGRACION NUMERICA CON EL METODO DE SIMPSON') f=input('ingrese la función a integrar f(x)= ','s');%FUNCION a=input('ingrese limite inferior: '); b=input('ingrese limite superior: '); n=input('ingrese numero de trapecios: '); n=2*n;xmin=a-1;xmax=b+1; h=(b-a)/n; x=a:h:b; fx=eval(f);y=abs(fx); suma1=y(1)+y(n+1); suma2=4*sum(y(2:2:n)); suma3=2*sum(y(3:2:n-1)); suma=suma1+suma2+suma3; integral=(h/3)*suma; fprintf('el área es :%10.9f\n',integral); %grafica xp=xmin:0.2:xmax; x=xp; yp=eval(f); plot(xp,yp,'g'); hold on x=a:0.05:b; y=eval(f); bar(x,y,'r');

INTEGRACION NUMERICA CON EL METODO DE SIMPSON ingrese la función a integrar f(x)= sqrt(x.^2+x.*3+2) ingrese limite inferior: 2 ingrese limite superior: 9 ingrese número de trapecios: 10 el área es :48.862387973

1 2 3 4 5 6 7 8 9 100

2

4

6

8

10

12

Page 160: Manual-Uso del Matlab 01

160

El primer problema puede solucionarse con el siguiente comando abreviado: syms x yy=int('3.2824e+5*x^10-1.5407e+6*x^9+3.1342e+6*x^8-3.6235e+6*x^7+2.6261e+6*x^6-1.2424e+6*x^5+3.8818e+5*x^4-79512*x^3+10465*x^2-855.51*x+44.084','x',0.25,0.75) ESQUEMA DE LA SENTENCIA U ORDEN AL COMPUTADOR USANDO MATLAB syms x yy=int( ‘función’,’x’,limite inferior, limite máximo) EJERCICIOS: Escribir 10 funciones para su integración, con los dos métodos (programa y orden abreviada) Nota: Las fotografías fueron tomadas de la Web – Fotos Sistemas Informáticos

Page 161: Manual-Uso del Matlab 01

161

BIBLIOGRAFIA 1. Vasquez Paragulla, Julio - “Diseño de Programación “ Edit. San Marcos – 2000 2. Perez, Cesar - MATLAB Aplicaciones en las Ciencias y la Ingeniería Edit. Prentice Hall – 2002 3. Nakamura, Shoichiro - “MATLAB Análisis Numérico” - Edit. Prentice Hall – 1997 4. Morales Marchena, Herón - “Métodos numéricos y Visualización Gráfica” - Edit. Megabit –

2005 5. Chapra, Steven - “Métodos Numéricos para Ingenieros” - Edit. Mc. Graw Hill – 2004 6. Lecca, Eduardo - “Mi Primer Matlab” - Ed. Faffo-Lecca Editores - 2001