Manual Matlab FIEE UNI

March 22, 2018 | Author: Bboy010193 | Category: Programming Language, Data Type, Matrix (Mathematics), Computer File, Mathematical Analysis


Comments



Description

ColecciónG UÍAS P RÁCTICAS B A L T A M Aplicado a Métodos Numéricos e Ingeniería MatLAB: Aplicado a los Métodos Numéricos e Ingeniería Autor: Hider Pimentel Dextre © Derecho de autor reservado © Derecho de edición, arte gráfico y diagramación reservados Empresa Editora Macro E.I.R.L. Edición a cargo de: Empresa Editora Macro E.I.R.L. Av. Paseo de la República N° 5613 - Miraflores Lima - Perú (511) 719 - 9700 [email protected] www.editorialmacro.com Primera edición: Marzo 2012 - 1000 ejemplares Impresión Talleres Gráficos de la Empresa Editora Macro E.I.R.L. Lima - Perú ISBN Nº Hecho el Depósito Legal en la Biblioteca Nacional del Perú Nº Prohibida la reproducción parcial o total, por cualquier medio o método de este libro sin previa autorización de la Empresa Editora Macro E.I.R.L. Índice Índice Índice Índice ÍndiceÍndiceIndice Índice Capítulo 1: Introducción El GUI de Matlab..........................................................................................................9 Ingreso de Datos...........................................................................................................10 Tipos de Datos..............................................................................................................13 Datos Numéricos.........................................................................................................................13 Números Reales...........................................................................................................................13 Números Complejos....................................................................................................................14 Números Enteros.........................................................................................................................15 Conversión de Tipo de Datos.......................................................................................................16 Valores Especiales.......................................................................................................................16 Funciones de Identificación de Tipo de Dato..............................................................................17 Cadenas de Caracteres................................................................................................................17 Comparación de Cadenas............................................................................................................18 Conversión de Valores Numéricos a Cadenas y Viceversa...........................................................20 Tipos de Formato de Salida.........................................................................................................22 Capítulo 2: Operaciones con Matrices y Vectores Matrices.......................................................................................................................25 Matriz de Números Complejos....................................................................................................25 Matriz Nula..................................................................................................................................26 Definición de Vector....................................................................................................................27 Operador Paso (:).......................................................................................................................27 Reconocimiento de los Elementos de una Matriz.......................................................................27 Matrices Especiales.....................................................................................................................29 Función Generador de Vectores..................................................................................................32 Funciones Para el Análisis de una Matriz....................................................................................32 Operadores y Funciones Matemáticas........................................................................................42 Operadores Aritméticos..............................................................................................................42 Operadores Relacionales.............................................................................................................43 Operadores Lógicos.....................................................................................................................44 Funciones Relacionales y Lógicas Adicionales.............................................................................44 Funciones Matemáticas...............................................................................................................45 Funciones de Fecha y Hora..........................................................................................................47 Operaciones con Funciones.........................................................................................................48 ..................................................................................86 Funciones de Gráficas en 3 Dimensiones.......................................................61 Sentencias de Control de Flujo...............................................................................80 Paramétricas...................................................................72 Ejercicios Propuestos.........................................................................................................................................................Ejercicio de aplicación.........................................................................................................................................................y).65 if … elseif … else … end................................57 Funciones de Ingreso y Salida de datos.............70 Sentencias Especiales..........73 Capítulo 4: Gráficos Ventana de Figura.......................83 Quiver..............................................................................................................................................................................................51 Concatenación de matrices (Agrupación)....................64 if … else … end......................................................................................................................................................................................................................................................................................................................66 switch … case … otherwise … end......91 Forma z=f(x...................................................................................................................................................84 Gráficos Múltiples.............................................................................................................................................................................................76 Graficas en 2D......................55 Capítulo 3: Programación en Matlab M-FILES.................................................................................69 for … end.....................................................................................................................89 Paramétricas.........................................53 Ejercicios propuestos..........................................................................88 Puntos..........................88 Cartesianas.........................................................................................................................82 Polares.71 Ejercicios de Aplicación...................................................................92 ..........................................................................77 Cartesianas..................85 Subplot...............................................................................................................................................................................................................................................54 Ejercicios más avanzados.........................................................................................................................................................................................................................................................................................................................................................77 Puntos.............................................................................................................................................75 Funciones de Gráficas en 2 Dimensiones................90 Superficies....................................................68 while … end...............................................................................................................................................................................................................................................................................................................49 Indexación de Matrices....................................................................................91 Sombras y Colores...................................................................................................................................................................................................................................................................................................................................................................... ............................................................................................................................125 .....................96 Vectores tangente..........................................................................99 Teorema fundamental de curvas.................................................................................................................................109 Ejercicios........................103 Operaciones con Polinomios........................................................... normal y binormal: Triedro de Frênet-Serret.................94 Superficies: Generados por Funciones....................................................................................................................................122 Eliminación Gaussiana.98 Centro de curvatura..................96 Curvatura y torsión.............................................................................................................................................................................................................................................99 Ejercicios Propuestos.............................................................................................................................105 Ejercicios................................................................................................................................................................................................................................................................................................................................................................................................................111 Capítulo 6: Interpolación Polinomios de Lagrange ................................................................................................................................................................................................................................................................................93 Estadísticas................................................108 Ajuste de Curvas Bidimensionales ..........95 Cilindro....................................................................................................................................119 Aplicación a los Circuitos Eléctricos.........97 Plano osculador.................121 Operaciones Elementales de Reglón...........................Rotación de Gráfica........................................................................................................................96 Longitud de arco....................................108 Funciones de Interpolación..................113 Polinomio de Interpolación por Diferencias Divididas de Newton..........94 Esfera.................................................................................................................................................................115 Capítulo 7: Resolución de Sistema de Ecuaciones Lineales Definición.....................................................................................................................122 Metodo de Gauss – Jordan....................................................................................................................................................................................................................................................................95 Geometría diferencial de curvas...124 Pivote Máximo..............................................................93 Superficies Complejas.............................................................................................................................................................................94 Vectores Normales a una superficie......................................................................................................................100 Capítulo 5: Polinomios Definición........... ...............................................................................................152 Funciones de Cuadratura..................................................160 Solución de Ecuaciones Diferenciales de Orden Superior.......................................................................................................................................129 Ejercicios Propuestos................................................................................................................................................................................................149 Método de Simpson 1/3.........................................................................................................................131 Capítulo 8: Solución de Ecuaciones No Lineales Definición del Problema...........................................................................................................................................141 Newton-Rapson para Funciones de más de una Variable..........................................................................................................139 Método de la Secante.....................133 Ejercicio propuesto.................................................................164 ........................................................Método Montante...............................................................................................................................................................................126 Matriz Inversa..............................153 Capítulo 10: Solución de Ecuaciones Diferenciales Ordinarias Método de Euler............................................................................................................................................................................................................................................................................................................150 Método de Simpson 3/8.........155 Método de Euler Modificado.....................................136 Método de Punto Fijo (iteración simple)................................................144 Ejercicios propuestos...............................................................................................145 Capítulo 9: Integración Método de los Trapecios........................................................................159 Funciones Ode......................................................................................................................................................................................................127 Métodos Iterativos: Gauss-Seidel.........................................................................................157 Método de Runge Kutta..................143 Ejemplo de dos variables....133 Método de la Bisección........................................................127 Metodos Iterativos: Jacobi...........................................................136 Método de Newton-Rapson............................148 Método de Romberg.......................................................... principalmente. el manejo y visualización de variables. creación de m-files. estudiantes y profesionales de las diferentes especialidades. comprobación de la solución ingresando datos distintos. el desarrollo de visualizaciones gráficas. muy potente. la aplicación a los Métodos Numéricos. de gran exactitud.MatLAB El presente manual: MATLAB Aplicado a los Métodos Numéricos e Ingeniería está orientado a todos los interesados. flexible. además de poder implementar estructuras de código para solucionar problemas con una metodología adecuada que podemos describir de la siguiente manera: Planteamiento claro del problema. robusto y rápido. estadística básica. entrada y salida de datos. implementación de una solución en MATLAB. programación utilizando la sentencias de control de flujo. extensible. así como ejemplos directos de aplicación a la ciencia e ingeniería. pero sobretodo que sea un medio de difusión para lograr el interés de la comunidad académica en esta herramienta sofisticada que actualmente se dispone. . en desarrollar la capacidad de manejo de la herramienta MATLAB. Espero que este manual didáctico pueda servir como guía tanto a los programadores expertos como para principiantes. descripción de las información de entrada y salida. Tiene un enfoque. este manual proporciona los siguientes temas: una introducción al ambiente de trabajo del MATLAB. comparados con otro lenguaje tales como FORTRAN. resolución del problema de forma manual para ciertos conjuntos de datos sencillos. fácil de aprender y usar. Y al ser la eficiencia en la resolución de problemas matemáticos la principal característica de esta herramienta. Al finalizar el uso de este manual el lector podrá ser capaz de interpretar todo tipo de expresión de cálculo al lenguaje MATLAB. a la adecuación y familiarización del programa con el usuario. Dentro de este manual encontraremos un conjunto de herramientas (grupo de funciones con propósito de aplicación directa) que nos permitirán resolver problemas diversos mucho más rápidos y eficientes. tipos de datos. No predispone como requisito necesario el conocimiento de algún otro tipo de lenguaje de programación. C/C++ e inclusive JAVA. Al ser una herramienta de un lenguaje de muy alto nivel. pero si es de su conocimiento aceleraría el estudio del programa. . y es ese lugar donde por defecto el programa almacenará todo archivo creado. y actualmente cuenta con una capacidad superior debido a su lenguaje de programación para cómputo científico y técnico en general. en este caso se realizó en el sistema operativo Windows 7. cálculo numérico y de visualización gráfica. como un entorno interactivo para realizar análisis de datos. En las primeras secciones comenzaremos explorando Matlab de la forma más simple. La siguiente figura define la interfaz gráfica para la versión r20011b: Cuando se instala el programa. El GUI de Matlab El software se desarrolló originalmente como un ‘Laboratorio de Matrices’. de ahí su nombre. este por defecto crea una carpeta de nombre MATLAB en el directorio Documentos. También se explicará cómo pueden representarse los datos y comandos para imprimir información. en modo comando: el usuario pregunta y Matlab responde. 9 .1 Capítulo Introducción En esta parte presentamos al entorno de manejo de Matlab para su mejor adaptación. demostraciones. siendo la cantidad de 63 caracteres como agrupamiento máximo para nombrarla teniendo en cuenta que los caracteres minúsculos y mayúsculos se diferencian. Ventana de ayuda: Es una ventana independiente que proporciona un acceso completo a las funciones de ayuda de Matlab. Haciendo clic en ese enlace se va a la línea correspondiente del fichero por medio del Editor/Debugger. algunas de las cuales recordaremos a continuación: • S e permiten líneas de comandos muy largas que automáticamente siguen en la línea siguiente al llegar al margen derecho de la ventana. Ingreso de Datos Todo dato ingresado al programa es un ordenamiento en filas y columnas. current directory. etc. Ventanas auxiliares: command history. • Cuando al ejecutar un fichero *. workspace. Y mantiene la siguiente estructura de sentencia: >> variable = valor. incluyendo búsquedas. 10 . MATLAB muestra mediante un subrayado un enlace a la línea del fichero fuente en la que se ha producido el error. ahí se ejecutan las instrucciones y muestran los resultados. Mantiene las mejoras de la versión anterior. • Haciendo clic con el botón derecho sobre el nombre de una función que aparezca en esta ventana se tiene acceso a la página del Help sobre dicha función. numéricos y el carácter especial (_). El usuario escribe a continuación y para ejecutar se pulsa la tecla Enter.Capítulo 1 La Ventana de Comandos (Command Window): Es el espacio principal de interacción entre el usuario y el software. Estas son las características básicas que debemos considerar: • E l prompt de Matlab es >>. • Al iniciar la escritura de una función y pulsando la tecla Tab. • Se pueden recuperar comandos anteriores navegando con las flechas ↑ y ↓.m se produce un error y se obtiene el correspondiente mensaje en la Command Window. o bien muestra un menú de todas las funciones disponibles que comienzan con las letras digitadas. Las únicas restricciones para nombrar a una variable son que esta no debe iniciar con un carácter numérico ni el especial (_) y tampoco ser igual a una palabra reservada. Donde: variable: Es la combinación de caracteres alfabéticos. el programa completa automáticamente el nombre de la función. en el menú File/Preferences/Command Window. matemáticamente conocido como matriz y que se define como arreglo en la programación. las variables declaradas y el directorio en el que estamos trabajando. Para ello hay que activar la opción Wrap Lines. que informan sobre (y permiten editar) los comandos insertados. y se puede cambiar de tipo definiéndolo según la necesidad del usuario (ver ejemplos). data. pero no se muestra en pantalla. Si una expresión termina en este signo su resultado se calcula. 3w1  variables invalidas media23 1p. _p1. entonces el programa ejecutará la tarea y además mostrará el resultado. dato. Se define que los valores ingresados al programa pueden ser de los siguientes tipos (se detallará en el siguiente ítem): Tipo Bytes doublé int char logical 8B 4B 2B 1B 11 . f1  variables validas es diferente a meDia23 45va. Por defecto los datos toman el tipo double. Las palabras reservadas son las siguientes: >>iskeyword ans = ‘break’ ‘case’ ‘catch’ ‘classdef’ ‘continue’ ‘else’ ‘elseif’ ‘end’ ‘for’ ‘function’ ‘global’ ‘if’ ‘otherwise’ ‘parfor’ ‘persistent’ ‘return’ ‘spmd’ ‘switch’ ‘try’ ‘while’ Es un dato o un conjunto de datos ordenados en filas y columnas. valor: “.”: Es la sentencia de la instrucción. y si se omite.Guía Práctica MatLAB Ejemplo: a1. Capítulo 1 Ejemplos: Ingrese los siguientes datos: double: >> x = 7. char: Los caracteres deben estar entre apóstrofes. La función who y whos. >> m = 6>4. respectivamente que están almacenados en el workspace. >> c = ‘hola mundo’. logical: Son los resultados de una comparación o relación que en programación se define como 0 (falso) y 1 (verdadero). Nota >> who Your variables are: a c m >> whos Name a c m x x Size 1x1 1x10 1x1 1x1 Bytes 2 20 1 8 Class int16 char logical double Attributes Si deseamos ver las características de una o de sólo algunas variables. int: >>a = int16(23). nos permite ver las variables creadas hasta el momento y a las variables con sus características de ingreso. entonces especificamos ellas de la siguiente manera: >> whos a m Name Size a 1x1 m 1x1 12 Bytes 2 1 Class int16 logical Attributes . conversión y los valores máximos y mínimos de un dato de doble precisión: >> d = 45. >> d1=isfloat(d) d1 = 1 Las funciones realmax y realmin devuelven el valor máximo y mínimo para el tipo de doble precisión. >> realmax ans = 1. a D oble Precisión: double Es el tipo por defecto de un dato ingresado al programa.2251e-308 b Simple Precisión: single Estos tipos de datos son creados de la siguiente manera: >> s=single(78. Datos Numéricos Números Reales Matlab representa los números reales en doble precisión y en simple precisión.78. A continuación se muestra la creación. >> whos d Name Size d 1x1 Bytes 8 Class double Attributes La función isfloat nos permite verificar si el dato ingresado es de punto flotante (decimal).7977e+308 >> realmin ans = 2.012). >> whos s Name Size s 1x1 Bytes 4 Class single Attributes >> s1=isfloat(s) s1 = 1 13 .Guía Práctica MatLAB Tipos de Datos Los tipos de datos definidos son de dos clases: numéricos y las cadenas de caracteres. >> c = 7-15i c = 7.8) z = 12. >> realmax(‘single’) ans = 3.1755e-038 Números Complejos Se conoce que los números complejos se definen como un valor que tiene parte real y parte imaginaria.0000 + 8.Capítulo 1 Las funciones realmax y realmin devuelven el valor máximo y mínimo para el tipo de simple precisión si es que especificamos el argumento ‘single’. Existen 2 formas de ingresar un dato complejo: La primera es digitar la expresión a+bi.5880 14 .4028e+038 >> realmin(‘single’) ans = 1. >> zr=real(z) zr = 12 >> zi=imag(z) zi = 8 >> modulo_z=abs(z) modulo_z = 14.0000i La segunda forma es utilizando la función complex de la siguiente manera: >> z = complex(12. respectivamente. Donde la base imaginaria es i=√(-1) y que en el programa se define con el carácter i ó j.4222 >> argumento_z=angle(z) argumento_z = 0.0000 -15.0000i Podemos obtener los valores numéricos de la parte real e imaginaria de un número complejo ya ingresado al programa con las funciones real e imag y si queremos conocer su módulo y argumento en radianes utilizaremos las funciones abs y angle. abs y angle. Números Enteros Definimos un dato entero como aquel valor exacto dentro del programa.Guía Práctica MatLAB Estos datos tendrán un atributo característico de complex. y=int16(46). >> whos z c Name Size c 1x1 z 1x1 Nota Bytes 16 16 Class double double Attributes complex complex Las funciones real. son aplicables también a un arreglo de datos (matriz de datos). w=int64(-6). imag. whos x y w z Name Size w 1x1 x 1x1 y 1x1 z 1x1 Bytes 8 1 2 4 15 . z=int32(157). La siguiente tabla muestra cómo definir los datos enteros: Tipo Función Rango de Valores Entero con signo de 8 bits Entero con signo de 16 bits Entero con signo de 32 bits Entero con signo de 64 bits Entero sin signo de 8 bits Entero sin signo de 16 bits Entero sin signo de 32 bits Entero sin signo de 64 bits int8 int16 int32 int64 uint8 uint16 uint32 uint64 -27 a 27 -1 -215 a 215 -1 -232 a 232 -1 -264 a 264 -1 0 a 28 -1 0 a 216 -1 0 a 232 -1 0 a 264 -1 Class int64 int8 int16 int32 Attributes Ejemplos de ingreso de datos enteros: >> >> >> >> >> x=int8(23). según se puede observar si visualizamos a las variables en el workspace. Capítulo 1 Si se desea verificar si un dato es de tipo entero. infinito negativo y a todos aquellos que no son un número. utilizaremos la función isinteger: >>isinteger(x) ans = 1 >> isinteger(y) ans = 1 Conversión de Tipo de Datos Conocidos los tipos de datos. whos a b c Name Size a 1x1 b 1x1 c 1x1 Valores Especiales Bytes 2 8 4 Class int16 double single Attributes La herramienta MATLAB considera los siguientes valores especiales inf. para representar a las cantidades infinito positivo. es posible cambiar de un tipo a otro tal como mostraremos a continuación: >> >> >> >> a=int16(24). respectivamente. Verifique los resultados dados a continuación: >> x=45^245 x = Inf >> x=log10(0) x = -Inf >> x=0/0 x = NaN >> x=inf/inf x = NaN 16 . c=single(a). b=double(a). -inf y NaN. Determina si el dato x es un tipo de dato numérico. por ejemplo: >> cadena = ‘Bienvenidos al Matlab 2011’ cadena = Bienvenidos al Matlab 2011 >> whos cadena Name Size cadena 1x26 Bytes 52 Class char Attributes 17 . doublé o single. Determina si x es un tipo de dato numérico específico. Sea x un ordenamiento. entonces: Función Descripción whos x isnumeric(x) Muestra la característica del dato x. isa(x. donde arg puede tomar los siguientes textos: integer (entero). 16. Para crear una cadena al valor de la instrucción se debe encerrar entre comillas simples. Determina si el tipo de dato x no es un número. ’arg’) isreal(x) isnan(x) isinf(x) isfinite(x) Cadenas de Caracteres Una cadena de texto se define como un ordenamiento o arreglo de caracteres UNICODE. float. Determina si el valor de x es finito. Determina si el tipo de dato x es un número real.Guía Práctica MatLAB La siguiente tabla muestra algunos valores especiales: Sintaxis MatLab pi iój inf NaN Significado π √(-1) ∞ No es un número Funciones de Identificación de Tipo de Dato Mostramos a continuación una tabla de funciones que nos permiten conocer los tipos de datos ingresados al programa. Determina si el valor de x es infinito. uintxx (no entero de xx: 8. 32 ó 64). Esta función rellena automáticamente a las cadenas de menor longitud para igualar a la cadena de mayor longitud. Se debe rellenar con espacios en blanco a las cadenas más cortas para forzar que sean del mismo tamaño. como veremos a continuación: >> nombre = ‘Jose’.’Bartolomeo ‘] La manera más simple para crear matriz de cadenas de texto es usando la función char.apellido) completo = JoseManrique Para crear una matriz de 2 ó más filas de caracteres debemos tener en cuenta que cada cadena debe tener la misma cantidad de caracteres. Ejemplo: >> nombres=[‘Jose Carlos’.Capítulo 1 Las funciones class e ischar identifican si un dato es un arreglo de caracteres: >> m = class(cadena) m = char >> n = ischar(cadena) n = 1 Es posible la agrupación de 2 o más cadenas de caracteres.’Rosario nombres = Jose Carlos Rosario Bartolomeo ‘.’Bartolomeo’) nombres = Jose Carlos Rosario Bartolomeo Comparación de Cadenas Las cadenas de texto también pueden compararse y esta se realiza carácter con carácter. >> completo = strcat(nombre. para ello utilizaremos la función strcat. La siguiente tabla muestra las funciones con las que se pueden realizar dicha comparaciones: Función strcmp 18 Descripción Determina si dos cadenas son idénticas.’Rosario’. Diferencia las mayúsculas y minúsculas. Ejemplo: >> nombres=char(‘Jose Carlos’. >> apellido = ‘Manrique’. . Guía Práctica MatLAB Determina si los n primeros caracteres de dos cadenas son idénticas. Diferencia las mayúsculas y minúsculas. Determina si dos cadenas son idénticas. No diferencia las mayúsculas y minúsculas. Determina si los n primeros caracteres de dos cadenas son idénticas. No diferencia las mayúsculas y minúsculas. strncmp strcmpi strncmpi Recordemos que los resultados de una comparación tiene como resultado los valores de 1 (verdadero) ó 0 (falso). >> >> >> c1 cad_1=’masa’; cad_2=’mazo’; c1=strcmp(cad_1,cad_2) = 0 Como los primeros 2 caracteres de ambas cadenas anteriores son iguales, entonces podemos realizar la comparación siguiente: >> c2=strncmp(cad_1,cad_2,2) c2 = 1 c3=strncmp(cad_1,cad_2,3) c3 = 0 También podemos comparar cadenas utilizando los operadores relacionales, siempre que dichas cadenas tengan iguales dimensiones, o uno sea escalar. Ejemplo: >> A=’Rodrigo’; >> B=’Roberto’; >> C = A==B C = 1 1 0 0 0 0 1 La función isletter determina si un carácter es una letra. >> dia = ‘MatLab 2011b’; >> str = isletter(dia) str = 1 1 1 1 1 1 0 0 0 0 0 1 19 Capítulo 1 Conversión de Valores Numéricos a Cadenas y Viceversa En algunos casos es necesario el cambio de tipo de dato para facilitar la salida en pantalla de combinaciones de números y caracteres. La tabla siguiente muestra las funciones que hacen posible algunas conversiones: Comando char int2str num2str y str2num mat2str y str2mat dec2hex y hex2dec dec2bin y bin2dec dec2base Descripción Convierte un entero positivo a su equivalente carácter (código ASCII). Trunca cualquier parte fraccional. Convierte un valor numérico de tipo int a un dato de tipo char (carácter). Convierte un valor numérico de tipo double a un dato de tipo char (carácter) de precisión con formato específico y viceversa, respectivamente. Convierte un tipo numérico a una de tipo carácter de una determinada precisión, retornando una cadena Matlab que puede ser evaluada y viceversa, respectivamente. Convierte un entero positivo a un dato de tipo char de base hexadecimal y viceversa, respectivamente. Convierte un entero positivo a un dato de tipo char de base binaria y viceversa, respectivamente. Convierte un entero positivo a un dato de tipo char de cualquier base de 2 a 36. A continuación, mostramos algunas formas de usar las funciones definidas: >> M=[77 65 84 76 65 66 50 48 49 49 66]; >> Mc=char(M) Mc = MATLAB2011B Realizando lo contrario: >> newM=int8(Mc) newM = 77 65 84 76 65 >> enteros=[ 23 34 11]; >> cadena=int2str(enteros) cadena = 23 34 11 >> num=[23.5 56 -0.34]; >> cad=num2str(num) cad = 23.5 56 -0.34 20 66 50 48 49 49 66 Guía Práctica MatLAB Realizando lo contrario: >> newnum=str2num(cadena) newnum = 23 34 11 >> d=[123 37 98]; >> h=dec2hex(d) h = 7B 25 62 Realizando lo contrario: >> newd=hex2dec(h) newd = 123 37 98 >> b=dec2bin(d) b = 1111011 0100101 1100010 21 5672 4e-4]. Formato en fracción irreductible. Formato de 2 cifras significativas exactas. La siguiente tabla nos muestra estos tipos: Tipo Descripción Formato con 4 cifras significativas exactas.Capítulo 1 Tipos de formato de salida Matlab tiene forma específica y diferente de visualizar sus datos en el command window.857142857142857 >> format rat >> x 22 16. Formato de 5 dígitos. para cambiar a un diferente tipo de formato podemos usar la función format.567246 >> format short >> x x = 1. Incluye potencia de 10. Incluye potencia de 10. Formato de 15 dígitos. Formato que añade más líneas para que sea más legible.000400000000000 . El cambio de formato lo realizamos así: >> format tipo Ejemplo: >> x=[26/14 3 16. Formato que suprime el exceso de líneas. short short e short g long long e long g Rat Hex Bank Compact Loose Por defecto el tipo de formato del Matlab es el short.0004 >> format long >> x x = 1.567246000000001 0. Formato de 15 dígitos. estos cambios sólo afectan la forma en la que los números son visualizados y no como el programa los calcula. 0. Formato de 15 cifras significativas exactas. Formato de 5 dígitos. Formato en base 16 (hexadecimal).8571 16. Entonces: 104  1e4 ó 5×10-7  5e-7 23 . Matlab abrevia la forma de su definición utilizando la forma exponencial.86 16. Nota Para representar las potencias del número diez.00 Para volver al formato por defecto bastaría con sentenciar la función format.57 1/2500 >> x x = 0.Guía Práctica MatLAB x = 13/7 2833/171 1. . 0000 + 1.4 -9i] C = 7. donde un espacio en blanco o una coma diferencian los datos de cada columna.7 Ahora. Sea: >> C = [7+i -2+5i.7] mt = 23. en otras ocasiones podría ser una coordenada en un plano. Entonces: >> A = [3 -6 8 0.0000i 25 .7 6. la cual podemos representar como un par de números. A veces consiste en un solo número.0000i 4.2 1 7 -1.0000i -2.11 -7 2 -5] A = 3 -6 8 0 2 1 7 -1 11 -7 2 -5 Matriz de Números Complejos Si una matriz tiene al menos un elemento complejo. Ejemplo: Entonces tenemos 2 representaciones de datos para ingresar: >> x = [4] x= 4 >>mt = [23.7 6.9. es importante saber visualizar los datos relacionados con el problema. podemos representar cualquier ejemplo usando un ordenamiento de datos dispuestos en filas y columnas llamado matriz.2 Capítulo Operaciones con Matrices y Vectores Matrices Cuando resolvemos problemas de ingeniería. En todo caso. como el peso de un cuerpo.0000 0 .0000 + 5. para ingresar una matriz de cualquier orden debemos realizarlo fila por fila. entonces dicha matriz es compleja. Cimaginario) Cnew = 7.5708 >> Carg = angle(C)*180/pi Carg = 8.0000 + 1.9. es la representación del vacío.0000i 4. Tomando los resultados anteriores.8014 0 -90.0000i Matriz Nula Se define la matriz nula. podemos construir una matriz de complejos con la función complex utilizando un par de matrices de igual orden.Capítulo 2 También podemos obtener la matriz de los valores de la parte real y de la parte imaginaria de la matriz C anteriormente definida. En Matlab se define así: >> M = [] M= [ ] Nota 26 Se define como comentario a toda línea de texto que el programa no identifica como sintaxis de código. .0000 + 5. su ingreso es después de anteponer el carácter % y que toma el color verde para su identificación.0000 Al igual que para un par de valores.0000 0 . >> Creal = real(C) Creal = 7 -2 4 0 >> Cimaginario = imag(C) Cimaginario = 1 5 0 -9 >> Carg = angle(C) Carg = 0.1419 1. es decir.9513 0 -1.1301 111. tenemos: >> Cnew = complex(Creal. como aquella matriz que no tiene elementos.0000i -2. Guía Práctica MatLAB Definición de Vector Una matriz de orden nx1 o 1xm.0] col = 2 -7 12 0 >> fila = [14 -6 10 18 43] fila = 14 -6 10 18 43 Operador paso (:) Permite crear un vector fila de elementos en progresión aritmética. respectivamente.-7.… .12. n y j = 1. …. j ) 27 . 2. 2. m Entonces : El elemento aij se reconoce por A(i. Sintaxis: var = Vini : paso : V fin → paso ≠ 1 var =Vini : V fin → paso = 1 Ejemplos: >> V = 9:3:21 V = 9 12 15 18 21 >> V1 = 6:10 V1 = 6 7 8 9 10 >> V2=45:-6:18 V2= 45 39 33 27 21 Reconocimiento de los Elementos de una Matriz a P or sus índices Sea A una matriz ingresada: A =  aij  n× m . se le conoce como vector fila o vector columna. Ejemplo: >> col = [2. donde : i = 1. >> a24 = A(2. donde: A = [ ak ]n×m .11 -7 2 -5].2) a12 = -6 b P or su posición en la matriz Matlab asigna una numeración de posición a cada elemento de una matriz. … .2 1 7 -1. 2. A = 3 -6 8 0 2 1 7 -1 11 -7 2 -5 >>a6 = A(6) a6 = -7 >>a3 = A(3) a3 = 11 28 . Sea:  31 A =  22 113 −64 15 −7 6 87 78 29 010  −111  −512  >> A = [3 -6 8 0.4) a24 = -1 >> a12 = A(1. si ya asignó a todos los elementos continúa en la columna que sigue con la posición siguiente.2 1 7 -1. donde k = 1. donde los subíndices de cada elemento son sus respectivas posiciones en la matriz.Capítulo 2 Ejemplo: >> A = [3 -6 8 0. Vea el ejemplo a continuación. n × m Entonces : El elemento ak se reconoce por A(k ) El programa inicia la asignación de la posición desde el primer elemento de la primera columna y prosigue con los demás elementos con posiciones consecutivas.11 -7 2 -5]. algunas matrices de tipo particular. con gran facilidad y muy rápidamente. La siguiente tabla especifica las funciones para crear estas matrices especiales: Función Descripción Crea matriz de elementos igual a cero. zeros ones eye rand randn Las funciones anteriores tienen la siguiente sintaxis general para su generación: Sintaxis: var = funcion(n)  = funcion(n. Crea matriz de elementos igual a la unidad. Crea matriz de elementos aleatorios con media 0. Crea matriz de elementos aleatorios entre 0 y 1. Crea matriz identidad. la 2da y 3ra forma crea matrices rectangulares de orden “nxm”.7) Z2 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >> Z3 = zeros([3 2]) Z3 = 0 0 0 0 0 0 29 .Guía Práctica MatLAB Matrices Especiales Existen en Matlab varias funciones orientadas a definir.m)  var = funcion([n m])  matriz cuadrada “ rectangular “ rectangular var La 1ra forma permite crear matrices cuadradas de orden “n”. Ejemplos: Matrices de puros ceros: >> Z1 = zeros(3) Z1 = 0 0 0 0 0 0 0 0 0 >> Z2 = zeros(2. >> Z4 = zeros(size(A)) Z4 = 0 0 0 0 0 0 0 0 0 0 0 0 Ya definida la matriz.6) U2 = 27 27 27 27 27 27 27 27 27 27 27 27 30 1 1 1 1 1 1 27 27 27 27 27 27 27 27 27 27 27 27 1 1 1 1 1 1 . >> Z4(7) = 99 Z4 = 0 0 0 0 0 0 99 0 0 0 0 0 >> Z4(3) = 11 Z4 = 0 0 0 0 11 0 99 0 0 0 0 0 Matrices de elementos igual a la unidad: >> U = ones(2) U = 1 1 1 1 >> U1 = ones(2. utilizaremos la 3ra sintaxis definida.Capítulo 2 Si queremos crear una matriz de ceros del mismo orden que la matriz A3x4 definida en los ejemplos anteriores.9) U1 = 1 1 1 1 1 1 >> U2 = 27*ones(4. podemos asignar a un dato un valor diferente a cero. 4854 0. solo multiplicamos por dicho valor. >> X2 = 25*rand(3) X2 = 20.5469 0.9275 10.9575 0.6) I1 = 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 Matriz de valores aleatorios entre 0 y 1: >> x = rand x = 0.3707 0.7556 17.8491 0.8003 0.0975 0.9686 9.7577 0.6557 0.2769 5x5 0.8800 31 .9595 0.0462 0.6555 0.7922 0.1379 19.6787 0.2785 0.8147 % un valor aleatorio >> x = rand x = 0.6324 0.0971 Si se desea cambiar el domino entre 0 y un valor.0357 0.4218 >> X1 = rand(2.9058 % nuevamente un valor aleatorio >> X = rand(5) % matriz de orden X = 0.1712 0.9157 0.5390 19.7431 0.9340 0.9572 0.1576 0.9649 0.0318 0.9706 0.8612 7.3922 0.4) X1 = 0.5864 23.1419 0.9134 0.Guía Práctica MatLAB Matriz Identidad: >> I = eye(4) I = 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 >> I1 = eye(3.1270 0.7060 0. 3) L = 3 11 19 >> L = linspace(3.2000 9.6551 >> X4 = 12+9*rand(1.6) L = 3. Ejemplo: >> L = linspace(3.4000 12.# datos) Los números de datos incluyen a Val_ini y Val_fin.5) % datos entre 12 y 21 X4 = 13. >> X3 = 25+rand(3) % datos entre 25 y 26 X3 = 25. Sintaxis: 32 var = size(matriz)  var = [#f #c] . en muchos casos.19). A continuación mostramos algunas de estas funciones y su sintaxis de ejecución para su adecuado uso.Val_fin.4898 25.4456 25. size: Al aplicarse a una matriz obtiene un vector de 2 elementos que indica el orden de dicha matriz.n): con n elementos.4635 13. El 1er elemento indica el número de fila y el 2do el número de columna.6797 25. las cuales nos facilitan y agilizan. sólo sumamos dicho valor.6000 15. sólo que en este caso algunos valores serán negativos.6463 25. logspace (a.4853 20.Capítulo 2 Si deseamos tener datos entre dos valores consecutivos.7547 25. soluciones de diversos problemas de cálculo.b.0000 >> L = linspace(3.0000 6. % crea un vector de 100 datos desde 3 a 19 logspace (a.6377 15.19.8000 19. Función Generador de Vectores linspace: constante.1869 25.b): con 50 elementos. Crear un vector fila de una cierta cantidad de elementos distribuidos en un dominio Sintaxis: var = linspace(Val_ini.7094 25.0710 16.0635 Es lo mismo al trabajar con la función randn.19. Genera un vector logarítmicamente espaciado entre los valores 10^a y 10^b Genera un vector logarítmicamente espaciado entre los valores 10^a y 10^b Funciones Para el Análisis de Una Matriz Existen diferentes funciones de aplicación directa a una matriz que realizan tareas específicas.2760 25. Guía Práctica MatLAB Ejemplo: >> A = [3 -6 8 0.11 -7 2 -5].2 1 7 -1. Y si aplicamos esta función a un vector. >> Lq = length(q) Lq = 4 Esta función calcula la suma de los elementos de cada columna o fila y los resultados de dicho cálculo los ordena en un vector. ordenando cada resultado en un vector fila. ordenando cada resultado en un vector columna. >> ordenA = size(A) ordenA = 3 4 length: Obtiene la longitud máxima.11 -7 2 -5]. >> longitudA = length(A) longitudA = 4 Aplicando a un vector: >> fila = [14 -6 10 18 43]. de los lados de la matriz.#c} Un caso particular es cuando aplicamos la función a un vector. sum: Sintaxis: var = sum(matriz) var = sum(matriz. en número de datos. # c} Sintaxis: var = length(matriz)  var = max{#f.1) var = sum(matriz. >> Lf = length(fila) Lf = 5 >> q = [19 5 10 -3]. Ejemplo: >> A = [3 -6 8 0. y la última sintaxis suma los elementos de cada fila. obtendremos como resultado el valor de la suma de todos sus elementos.2 1 7 -1. Esto es similar a obtener el max{# f .2) Las 2 primeras sintaxis realizan por defecto la suma de los elementos de cada columna. 33 . donde el resultado es numéricamente igual a su cantidad de elementos. 1) As1 = 16 -12 17 -6 >> As2 = sum(A. ordenando cada resultado en un vector fila y la última sintaxis realiza el producto de los elementos de cada fila.2) As2 = 5 9 1 >> fila = [14 -6 10 18 43] >> sf = sum(fila) sf = 79 prod: Esta función calcula el producto de los elementos de cada columna o fila y los resultados de dicho cálculo los ordena en un vector.2) Ap2 = 0 -14 770 >> fila = [14 -6 10 18 43].11 -7 2 -5]. Sintaxis: var = prod(matriz) var = prod(matriz. Y si aplicamos esta función a un vector.2 1 7 -1.Capítulo 2 Ejemplo: >> A = [3 -6 8 0.1) var = prod(matriz. >> As1 = sum(A. >> pf = prod(fila) pf = 34 650160 . ordenando cada resultado en un vector columna. >> Ap1=prod(A. Ejemplo: >> A = [3 -6 8 0.11 -7 2 -5].2 1 7 -1.2) Análogamente a la función anterior. las 2 primeras sintaxis realizan por defecto el producto de los elementos de cada columna. obtendremos como resultado el valor del producto de todos sus elementos.1) Ap1 = 66 42 112 0 >> Ap2 = prod(A. >> Mv = max(vec) Mv = 43 El valor mayor de una matriz se puede calcular así: >> mayorT = max(max(A)) mayorT = 11 Obtiene los mínimos de cada columna de una matriz y los ordena en un vector fila.filas] = max(A) mayor = 11 1 8 0 filas = 3 2 1 1 >> vec = [14 -6 10 18 43]. Aplicando la función a un vector nos muestra el menor valor de todos los datos.2 1 7 -1.11 -7 2 -5] A = 3 -6 8 0 2 1 7 -1 11 -7 2 -5 >> mayor = max(A) mayor = 11 1 8 0 >> [mayor. Aplicando la función a un vector nos muestra el mayor valor de todos los datos.#fila] = min(matriz) 35 . también podemos conocer a qué fila pertenece el dato menor de cada columna. max: Sintaxis: mayor = max(matriz) [mayor. min: Sintaxis: menor = min(matriz) [menor.#fila] = max(matriz) Ejemplo: >> A = [3 -6 8 0. también podemos conocer a qué fila pertenece el dato mayor de cada columna.Guía Práctica MatLAB Obtiene los máximos de cada columna de una matriz y los ordena en un vector fila. -2.filas] = min(A) menor = 2 -7 2 -5 filas = 2 3 3 3 >> Mv = min(vec) Mv = -6 El valor menor de una matriz se puede calcular así: >> menorT = min(min(A)) menorT = -7 diag: Aplicado a una matriz extrae la diagonal principal ó k-ésima y lo ordena en un vector. Ejemplo: Definiendo una matriz W y obteniendo sus diagonales k-ésimas..1. >> menor = min(A) menor = 2 -7 2 -5 >> [menor.2.k) k=. k=.1. >> W = [1 6 -2.-2..k) diag(vector) diag(vector.. Sintaxis: var var var var = = = = diag(matriz) diag(martiz.2.-1.0 9 3.Capítulo 2 Ejemplo: Teniendo en cuenta la matriz A y el vector vec ingresados anteriormente.-1.-5 8 4] W = 1 6 -2 0 9 3 -5 8 4 >> Do = diag(W) % diagonal principal de W Do = 1 9 4 36 . Si es aplicado a un vector nos creará una matriz diagonal con los elementos de dicho vector.. -1) Dvk = 0 0 0 3 0 0 0 2 0 0 0 1 0 0 0 0 0 0 1 0 0 Las siguientes funciones son utilizadas para aproximar valores numéricos de una matriz.1) % diagonal N° 1 de W D1 = 6 3 >> D2m = diag(W.-2) % diagonal N° -2 de W D2m = -5 Creando matriz diagonal >> v = [3 2 1]. >> Dv = diag(v) Dv = 3 0 0 2 0 0 0 0 1 >> Dvk = diag(v. Función ceil fix floor round Descripción Redondea el valor hacia el infinito. Redondea el valor hacia el entero próximo. 37 . Redondea el valor hacia el menos infinito.2) Dvk = 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 >> Dvk = diag(v.Guía Práctica MatLAB >> D1 = diag(W. Redondea el valor hacia cero. 2) null(A) orth(A) pinv(A) trace(A) rank(A) rref(A) tril(A) triu(A) dot(v1.5624 4.Capítulo 2 Aplicación: >> P = [12. Función cond(A) det(A) inv(A) A' poly(A) eig(A) norm(A) normmest(A.9870 >> Pc = ceil(P) Pc = 13 5 57 >> Pf1 = fix(P) Pf1 = 12 4 56 >> Pf2 = floor(P) Pf2 = 12 4 56 >> Pr = round(P) Pr = 13 4 57 La siguiente tabla muestra más funciones de aplicación.v2) Descripción Muestra el número de condición Calcula la determinante Calcula la inversa Calcula la transpuesta Obtiene el polinomio característico Calcula los valores propios Halla la norma Estima la norma-2 Reconoce los espacios nulos Calcula la ortogonalización Calcula la seudo inversa Calcula la traza Calcula el rango Obtiene la reducción mediante eliminación de Gauss Obtiene la matriz triangular inferior Obtiene la matriz triangular superior Calcula el producto escalar de los vectores Calcula el producto vectorial de los vectores v1 y v2.9870] P = 12. 38 .5624 4.2351 56.2351 56. (Con A matriz. donde ambos deben ser de orden 1x3 ó 3x1.v2) cross(v1. v1 y v2 vectores). 0000 >> iA = inv(A) % inversa iA = -0.0064 0.11 -7 2 -5.4108i 1.1361 -0.1845 0.1221 0.0305 -0.0000 -786.0992 -0.2 1 7 -1.0000 >> Avp = eig(A) % valores propios Avp = -5.3413 + 6.0000 377.1145 -0.0611 0.0382 0.2 -1 6 1] >> dA = det(A) % determinante dA = -786.1985 -0.9900 >> Atz = trace(A) % traza Atz = 7 >> Ar = rank(A) % rango Ar = 4 >> Ag = rref(A) % eliminacion por Gauss Ag = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 39 .6726 5.0000 19.3511 -0.0916 0.0000 -7.3413 .6170 >> At = A’ % transpuesta At = 3 2 11 2 -6 1 -7 -1 8 7 2 6 0 -1 -5 1 >> Ap = poly(A) % polinomio característico Ap = 1.Guía Práctica MatLAB Aplicación: >> A = [3 -6 8 0.3740 0.1539 -0.6.0089 0.4108i 5. n) expm(A) sqrtm(A) logm(A) funm(A.v2) Pc = -3 6 -3 Funciones Adicionales Función find(A) fliplr(A) flipud(A) reshape(A. Donde U y V son matrices unitarias (Con A matriz.U]=lu(A) [Q.Vap]=eig(A) [L.Capítulo 2 >> Atl = tril(A) % triangular inferior Atl = 3 0 0 0 2 1 0 0 11 -7 2 0 2 -1 6 1 >> Atu = triu(A) % triangular superior Atu = 3 -6 8 0 0 1 7 -1 0 0 2 -5 0 0 0 1 >> v1=[1 2 3].@funcion) [Vep.v2) Pp = 32 >> Pc=cross(v1. >> Pp=dot(v1. 40 . si A no contiene m x n elementos daría un error Gira la matriz 90º en sentido contrario a las agujas del reloj Gira la matriz nx90º Matriz exponencial de A Matriz raíz cuadrada Matriz logarítmica Evalúa la función que indiquemos en la matriz A Vep son los vectores propios y Vap son los valores propios de A Factorización LU Factorización QR Calcula la descomposición en valores singulares de A.n.R]=qr(A) [U.m) rot90(A) rot90(A. m y n naturales).v2=[4 5 6].S.V]=svd(A) Descripción Devuelve los índices donde las entradas de A son distinto de cero Intercambia la matriz de izquierda a derecha Intercambia la matriz de arriba abajo Devuelve una matriz m x n cuyos elementos se toman por columnas de A. 8660 >> Ae = expm(A) ans = 23.1416 1.8497 0 41 .0000 0 -0.0472 0 >> funm(A.14160. pi/4 pi/3] A = 3.0472 3.3248 0.1407 7.6091 2.3) % gira la matriz 270º ( 90º x 3 = 270º ) A270 = 0.Guía Práctica MatLAB Ejemplos: >> A = [pi 0.7854 3.7854 0 1.7854 >>A270 = rot90(A.@sin) % calcula el seno de cada elemento de la matriz ans = 0.0472 >>Af = find(A) % devuelve los índices como un vector columna Af = 1 2 4 >> Arsh = reshape(A.4) Arsh = 3.1416 0.0472 >>A90 = rot90(A) % gira la matriz 90º A90 = 0 1.7854 1.1416 0 0.1. entonces es necesario conocer cómo se aplica las funciones y además cómo se realizan las operaciones.Capítulo 2 Operadores y Funciones Matemáticas En la realización de operaciones con las matrices.5000 >> A^3 ans = 55 90 42 2.B A * B A / B A ^ n Descripción Adición de matrices Sustracción de matrices Producto de matrices División de matrices = A*B-1 Potencia de matriz (Siendo A y B matrices del mismo orden. Operadores Aritméticos Tabla de Operadores Aritméticos I Operador A + B A . B = 2 1 4 3 >> A+B ans = 3 7 4 7 >> A-B ans = -1 -1 2 1 >>A*B ans = 14 22 10 15 >> A/B ans = -4.5000 90 145 . debemos tener en cuenta si dicha operación es matricial o de elemento a elemento (operación de arreglos).4 3]. >> A=[1 3.5000 2. >> B=[2 1. pues ambos son muy diferentes y pueden realizarse por operadores o funciones.5000 -3.3 4]. n escalar). / y ^. en cualquiera de los casos siguientes.^ B Potencia elemento a elemento: aij^bij A .Guía Práctica MatLAB Si anteponemos un punto a los operadores *.5000 0.7500 >> A. n escalar). respectivamente.0000 1.* B Producto elemento a elemento: aij*bij A .3333 Operadores relacionales Matlab como lenguaje de programación dispone de operadores relacionales que permite hacer comparaciones entre los elementos de dos arreglos de igual dimensión.*B ans = 2 12 3 12 >> A./B ans = 0. Ver tabla siguiente: Tabla de Operadores Aritméticos II Operador Descripción A .^4 ans = 1 81 81 256 3.^B ans = 1 81 3 64 >> A. Estos operadores son los siguientes: Tabla de Operadores Relacionales Operador > < == <= >= ~= Descripción Mayor que Menor que Igual que Menor que Mayor que Diferente que 43 . el resultado es un arreglo de 0 (ceros) o 1 (unos) cuando la relación es falsa o verdadera./ B División elemento a elemento: aij/bij A . la operación se realizará elemento a elemento. >> A.^ n Potencia elemento a elemento: aij^n (Siendo A y B matrices del mismo orden. isfloat. tendremos: >> C=A>B C = 0 0 1 1 >> C=(A==B) C = 0 0 0 0 Funciones Relacionales y Lógicas Adicionales Función xor(x. isnumeric. en cualquiera de los casos siguientes. Estos operadores son los siguientes: Tabla de Operadores Lógicos Operador & | ~ = Descripción y (and) o (or) no (not) identico Ejemplos: Teniendo en cuenta a las matrices A y B definidas anteriormente. devuelve 0 si ambas son falsas o ambas verdaderas y devuelve 1 si una es falsa y la otra verdadera. isspace… . isprime. islogical. si se trata de una matriz da una respuesta por cada columna Devuelve 1 si todos los elementos en un vector x son no nulos y 0 si existe alguno nulo y si se trata de una matriz da una respuesta por cada columna Devuelve uno si existe y cero si no existe Devuelve unos en magnitudes no numéricas (NaN) en x Devuelve unos en magnitudes infinitas (Inf) en x Devuelve unos en valores finitos en x Podemos ver muchos más casos pero todos serían similares: ischar. el resultado es un arreglo de 0 (ceros) o 1 (unos) como en el ítem anterior. isreal. Devuelve 1 si algún elemento en un vector x es no nulo y devuelve 0 si son todos nulos. isempty.y) any(x) all(x) exist('x') isnan(x) isinf(x) isfinite(x) Nota 44 Tabla de Funciones Descripción Operación “o” exclusiva. isequal. isinteger.Capítulo 2 Operadores lógicos Permite hacer comparaciones entre los elementos de dos arreglos de igual dimensión. isscalar. Guía Práctica MatLAB Ejemplo: >> c = [Inf 0 5 -8 NaN 94]. pero de número de filas menor en una unidad de la matriz aplicada. De ahí que al aplicarse a vectores podemos deducir la forma de operar entre vectores que es al de elemento a elemento. La función diff al aplicarse a una matriz devuelve otra matriz de igual cantidad de columnas. Observación: La función mean al aplicarse a una matriz sólo devuelve un vector fila de una cantidad de elementos igual al de dicha matriz y un elemento si es que se aplica a un vector. 45 . La siguiente tabla nos indica las funciones matemáticas más conocidas: Tabla de Funciones Algebraicas Operador abs(A) sqrt(A) sign(A) exp(A) log(A) log10(A) log2(A) power(A. >> exist (‘c’) % pregunta si existe alguna variable llamada c ans = 1 >> isnan (c) %c es NaN? devuelve 1 si es verdadero y 0 si es falso ans = 0 0 0 0 1 0 >> isinf (c) %c es Inf? devuelve 1 si es verdadero y 0 si es falso ans = 1 0 0 0 0 0 Funciones Matemáticas Para la simplicidad de cálculo. mas no altera el orden de estas.n) mean(A) diff(A) cumprod(A) Descripción Valor absoluto de A Raíz cuadrada de A Función signo de A Exponencial de A Logaritmo natural de A Logaritmo en base 10 de A Logaritmo en base 2 de A Potencia n-ésima de A Calcula la mediana de las columnas de la matriz A ó la mediana de un vector A Calcula la diferencias divididas de primer orden a las columnas de la matriz A y lo mismo para un vector A Devuelve el producto acumulativo de las columnas de la matriz A y lo mismo para un vector A. Matlab tiene una variedad de funciones que afectan solamente a todos los elementos de cada matriz a la que es aplicada. 7183 54.5000 -1.5982 0. 1].0000 >> diff(A) ans = 3 -10 Tabla de Funciones Trigonométricas Operador sin(A) cos(A) tan(A) cot(A) csc(A) sec(A) asin(A) acos(A) atan(A) sinh(A) cosh(A) tanh(A) asinh(A) acosh(A) atanh(A) Descripción Seno de A Coseno de A Tangente de A Cotangente de A Cosecante de A Secante de A Arco Seno de A Arco Coseno de A Arco Tangente de A Seno hiperbólico de A Coseno hiperbólico de A Tangente hiperbólico de A Arco Seno hiperbólico de A Arco Coseno hiperbólico de A Arco Tangente hiperbólico de A Observación: Para las funciones inversas asin y acos tener en cuenta que los datos deben estar definidos entre el dominio [-1 .3) ans = -8 64 1 -216 >> mean(A) ans = -0. 46 .1353 2.1 -6].0025 >> power(A.Capítulo 2 Ejemplos: >> A=[-2 4. >> abs(A) ans = 2 4 1 6 >> exp(A) ans = 0. mes) Descripción Devuelve la fecha actual del sistema Muestra el calendario del mes actual Calendario del mes y año específico Último día de mes y año específico Ejemplo: >> date ans = 14-Feb-2012 >> calendar S 0 5 12 19 26 M 0 6 13 20 27 Tu 0 7 14 21 28 Feb 2012 W Th 1 2 8 9 15 16 22 23 29 0 F 3 10 17 24 0 S 4 11 18 25 0 47 .8415 -0.5789 Funciones de fecha y hora Tabla Principal Operador date calendar calendar(año.1752 -201.Guía Práctica MatLAB De la matriz A.2899 1.7132 >> csc(A) ans = -1.6269 27.0998 -1.mes) Eomday(año.9093 0. anterior definida: >> sin(A) ans = -0.7568 0.1884 3.3213 1.2794 >> sinh(A) ans = -3. 7183 7.8415 0.2874 Donde: y = [y1(1)*y2(1) 6. si queremos representar la siguiente expresión en el Matlab: para ./sin(x) % y = 0 2. mostramos una forma práctica de realizar los cálculos: Sea: >> x=[0:2] % vector de 1x3 x = 0 1 2 >> y1=exp(x) % al afectar a x la dimensión no cambia y1 = 1. A continuación.2874 Donde: Y = [y1(1)/y2(1) 48 6.*sin(x) % y = 0 2.Capítulo 2 Operaciones con Funciones Debemos tener en cuenta la forma de ejecución y sobretodo del tipo de resultado que deseamos obtener cuando realicemos las operaciones utilizando las funciones matemáticas de Matlab.0000 2.7188 y1(2)/y2(2) y1(3)/y2(3)] . debemos recordar que cada función es una matriz o vector de igual dimensión que el argumento a la cual se aplica. el resultado debería ser: Para lo cual realizamos en el programa lo siguiente: >>y=exp(x).7188 y1(2)*y2(2) y1(3)*y2(3)] Análogamente la división será de la forma siguiente: >>Y=exp(x). por lo tanto se tendría que realizar la operación elemento a elemento.3891 Donde: y1 = [y1(1) y1(2) y1(3)] >> y2=sin(x) % igualmente la dimensión de x no cambia y2 = 0 0.9093 Donde: y2 = [y2(1) y2(2) y2(3)] Pero si necesitamos calcular una expresión algebraica que depende de dos o más funciones matemáticas. Entonces. Guía Práctica MatLAB Ejercicio de aplicación Sea el sistema de ecuaciones lineales: Resuelva dicho sistema y calcule el valor de E, siendo: Solución: Resolvemos el sistema de ecuaciones lineales representándola en la forma matricial: AX=b, donde A es la matriz de coeficientes, X es el vector de las variables y, b el vector de los resultados. Entonces, tendremos lo siguiente: Sabiendo que X=A-1b, donde , realizamos los cálculos en Matlab: >> A=[-3 6 -2 4;4 -2 3 -5;7 8 -4 -2;5 -9 -7 8]; %ingresando matriz >> b=[19;-11;3;-2]; % ingresando vector resultado >> X=inv(A)*b % obteniendo el vector solución X = 1.0000 2.0000 3.0000 4.0000 Entonces podemos observar que: 49 Capítulo 2 Pero aplicando la sintaxis de Matlab podemos resolver la expresión de E de la siguiente manera: Por lo tanto, realizaremos la siguiente sintaxis: >> E=(sum(X.^2)^2+prod(X))/sum(X.^X) E = 3.2083 Ejercicios: Con sintaxis de Matlab realice lo siguiente: a) Halle el valor del factorial de un número natural cualquiera. b) La suma de los primeros 100 números naturales. c) La suma de los primeros 250 números pares. d) La suma de los primeros 250 cuadrados perfectos. e) La suma de los primeros 250 cubos perfectos. Solución: a) f=prod(1:n) % n debe ser un número mayor o igual a 1 b) s1=sum(1:100) c) s2=sum(2:2:500) Sea >> x=1:250; % vector de los primeros 250 número naturales d) s3=sum(x.^2) % suma de los 250 primeros cuadrados perfectos e) s4=sum(x.^3) % suma de los 250 primeros cubos perfectos 50 Guía Práctica MatLAB Indexación de Matrices Consiste en obtener una submatriz de otra que ya fue definida. Sea: donde: Si deseamos obtener una submatriz a partir de A, entonces haremos lo siguiente: Ejemplo: >> P=round(50*rand(6,8)) % creando una matriz aleatoria P = 41 14 48 40 34 35 35 38 45 27 24 48 38 2 16 40 6 48 40 33 37 14 48 9 46 48 7 2 20 2 2 24 32 8 21 42 33 5 22 22 5 49 46 47 9 41 19 32 >> subP1=P([3 5 6],[2 3 5 7 8]) subP1 = 48 8 49 40 21 46 37 33 9 48 22 19 9 22 32 Un caso particular es cuando deseamos extraer una fila o una columna, pues normalmente tendríamos que hacer lo siguiente: >>Pf5=P(5,[1:8]) % Obtención de la 5ta fila Pf5 = 32 8 21 42 33 5 22 22 51 :) % obtención de la 5ta fila Pv5 = 32 8 21 42 33 5 22 22 >>Pc3=P(:.[1 3])=[] P = 14 27 48 48 8 49 40 48 33 2 42 47 Observación: Sólo es posible eliminar filas o columnas de forma completa.:)=[] P = 14 40 34 48 33 37 48 2 20 49 47 9 35 14 2 41 35 48 2 19 38 9 24 32 35 16 48 2 22 19 38 40 9 24 22 32 >> P(:.Capítulo 2 En este caso involucra un vector que especifica a todas las cantidades de columnas. podemos abreviar la sintaxis. de la siguiente manera: >> Pv5=P(5. nos resultará fácil eliminar una(s) fila(s) o columna(s) si es que asignamos a estas el valor del vacío. 52 . >> P P = 41 45 6 46 32 5 14 27 48 48 8 49 48 24 40 7 21 46 40 48 33 2 42 47 34 38 37 20 33 9 35 2 14 2 5 41 34 38 37 20 33 9 35 2 14 2 5 41 35 16 48 2 22 19 38 40 9 24 22 32 >> P([2 5].3) % obtención de la 3ra columna de P Pc3 = 48 24 40 7 21 46 Conocido esto. que realizará acción semejante. si eso ocurre. Guía Práctica MatLAB Concatenación de matrices (Agrupación) Consiste en agrupar 2 o más matrices para formar una de ordenmayor. T2x5 y W3x1 >>R=round(32*rand(3.T] % Concatenación vertical entre R y T I2 = 18 24 18 17 4 29 24 2 25 18 9 12 2 30 15 0 3 5 3 4 5 13 8 10 10 53 .1)) W = 39 42 25 Se observa que R y W tienen igual cantidad de filas. Entonces: >>I1=[R W] % Concatenación horizontal entre R y W I1 = 18 24 18 17 4 39 29 24 2 25 18 42 9 12 2 30 15 25 >>I2=[R.5)) T = 0 3 5 3 5 13 8 10 4 10 >> W=round(56*rand(3. Ejemplo: % Generando las matrices R3x5.5)) R = 18 24 18 17 4 29 24 2 25 18 9 12 2 30 15 >>T=round(16*rand(2.además R y T tienen la misma cantidad de columnas. Por su forma de agrupación se definen dos tipos: • Concatenación Horizontal: Para agrupar de esta forma a un conjunto de matrices se debe tener en cuenta que el número de filas de estas deben ser iguales y se agruparán como elementos de un vector fila. • Concatenación Vertical: En este caso la agrupación se realizará con matrices que tienen igual número de columnas y se agruparán como elementos de un vector columna. Se mantiene las características de cada matriz. porque son las variables que representan a estas con las que se realiza la concatenación. 2. Construya una nueva matriz cuyas filas sean las columnas 1ra y 3ra de A. Ordene los elementos de A en orden descendente dentro de cada columna. Halle el máximo en valor absoluto de los elementos de la matriz A. con una sola orden de MATLAB cree una matriz cuya primera fila es x. su segunda fila es el seno de cada elemento de x y cuya tercera fila es el coseno de cada elemento de x. 5. 6. 7. 3. En una sola orden: a) b) c) d) Defina una matriz B formado por las filas pares de la matriz A. Con una sola orden de MATLAB cree una matriz aleatoria 4x4 de números enteros entre -5 y 5. Sea la matriz cuadrada: a) b) c) d) e) Construya una matriz añadiendo la matriz identidad de rango 3 a la derecha de la matriz A. Sume a la tercera fila. Forme una lista con los elementos de A ordenada de forma ascendente. Defina una matriz C formado por las columnas impares de la matriz A. 4. Sea x=0:pi/2:2*pi. Con una sola orden de MATLAB cree una matriz aleatoria 4x4 de números reales entre -5 y 5. Cambie la primera columna de A por la tercera. Considere la siguiente orden de MATLAB: A=magic(5). Construya una nueva matriz cuyas columnas sean las columnas 1ra y 3ra de A. En una sola orden de MATLAB cree una matriz 3x5 cuyo único elemento sea el 7. Indicación: Ejecute help rand para saber cómo generar números aleatorios en distribuciones uniformes (randn se emplea para distribuciones normales). la primera fila multiplicada por -3. 54 . Defina una vector d formado por la tercera columna de la matriz A Elimine la tercera fila de la matriz A. Ordene los elementos de A en orden ascendente dentro de cada fila.Capítulo 2 Ejercicios propuestos 1. Sea la matriz cuadrada: a) b) c) d) e) Halle el valor mínimo dentro de cada fila de A. Defina un vector aformado por los cuatro primeros números impares y otro bformado por los cuatro primeros números pares de varias formas distintas. 2. 3. En una sola instrucción. Empléelos para construir la matriz: 9. 55 . ponga a cero todos los elementos de una matriz que estén entre -1 y 1. cambie todos los valores de la diagonal de una matriz cuadrada a cero. En una sola instrucción. 6. 4. De tres formas distintas (cada una en una sola instrucción).Guía Práctica MatLAB 8. En una sola instrucción. (La conjunción lógica es &). 5. Ordene los elementos de una matriz del menor a mayor manteniendo su forma (indicación: emplee la orden reshape). En una sola instrucción. ponga a cero todos los elementos negativos de una matriz. sustituya todos los valores de la diagonal de una matriz cuadrada por los elementos de un vector dado. Construya una matriz Con Con Ejercicios más avanzados 1. de forma que al final tengamos un número. averigue el número de elementos de una matriz. . si queremos ejecutar las instrucciones bastará con escribir dicho nombre en la ventana de comandos. entonces. Se los denomina de esta forma debido a su extensión ". a través de un lenguaje relativamente próximo al lenguaje humano (lenguaje de alto nivel). Pero el Matlab incluye un lugar propio llamado editor debuggerel cual se invoca con la instrucción edit. cómo deben ser estos almacenados. transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo programa en su edición debe tener en cuenta las 3 lógicas de programación. y que dependiendo de su estructura podrá ser reconocido como M-File. permite especificar de manera precisa sobre qué datos de una computadora debe operar. En este capítulo conoceremos cómo editar e implementar un programa utilizando la sintaxis del Matlab. Este archivo ya editado se guarda con un nombre específico dando a lugar que dichas instrucciones sean desde ese instante representadas por tal nombre.3 Capítulo Programación en Matlab Un lenguaje de programación es un lenguaje que puede ser utilizado para controlar el comportamiento de una máquina. manteniendo los criterios de las lógicas en la cual se gobiernan. particularmente una computadora. luego de su ejecución pasarán a formar parte del workspace.m". Si se opta por un editor externo se debe tener en cuenta que los archivos deban ser guardados con esta extensión. que se definen como: Lógica Secuencial. Lógica Selectiva y Lógica Repetitiva. M-FILES La programación en Matlab se realiza básicamente sobre archivos M o M-files. Aquí se debe notar algo importante: Todas las variables que se hayan definido o creado dentro de este archivo. Pueden ser creados y editados desde cualquier editor de texto común. 57 . el Bloc de Notas. De acuerdo a su edición. manteniendo mínimamente una lógica secuencial en su edición. por ejemplo. estos archivos pueden separarse en dos tipos: • Script o Archivo de Comandos • Funciones Script: Son archivos que contiene líneas de instrucciones del Matlab. Se debe tratar de que la variable del workspace no coincida con las que aparecen en el script que se ha de ejecutar. Todo esto. Consiste en un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. note en la parte superior de la ventana el nombre con el que fue guardado.Capítulo 3 Ejemplo: Implementar un script que calcule el valor de la hipotenusa de un triángulo rectángulo cuyos catetos tienen los valores de 12 y 17. Solución: Invocamos al editor debugger. Ejecutando el script en la ventana de comandos: >> hipotenusa Your variables are: a b c Según la línea 8 del script hipotenusa la salida de la ejecución que debe dar la instrucción who son las variables creadas en el workspace. >> edit Iniciando la edición del script: El archivo fue guardado con el nombre de hipotenusa. 58 . El valor de cada uno de los elementos varía a medida que se ejecuta el algoritmo. >> B=[12. todas las variables que se definan dentro del cuerpo o definición de la función. 59 . Los valores devueltos por la función convocada serán los valores que se encuentran en argumentos_ salidas en el momento en que termina la ejecución de la función. De no hacer esto será un error La función solamente se aplica y es de la siguiente manera: >>[variables_de_salida]=nombre(argumentos_entradas) Ejemplo: Vamos a crear una función que obtenga el conjunto solución para un sistema de n ecuaciones lineales compatible determinado. Nota Es muy importante que guardemos el archivo con el mismo nombre de la función definida en la cabecera. Esta últimaforma. es más flexible y es en la que noscentraremos a continuación. se hacen duplicados de los parámetros y en estos sobre los cuales se realizan todas las modificaciones.-2 1 -1]. es decir. las cuales ingresamos de esta manera: >> A=[1 0 2. durante la ejecución.5 4 1.Guía Práctica MatLAB Función: En principio existen dos tipos de funciones: las funciones inline.4. Estos argumentos. es decir tiene por primera línea una sintaxis definida por: function [argumentos_salidas]=nombre(argumentos_entradas) Donde: Corresponde al nombre de la función. si la función es invocada desde la ventana de comandos. y un vector dado B de términos independientes. haciendo uso de una matriz A de coeficientes.-8]. y particularmente están definidas así: . es decir. Dicho vector X será devuelto por la función. nombre: Contrario a los scripts. argumentos_salidas:Representa a un vector de elementos o variables de retorno de la función. sólo acepta parámetros y ejecuta el algoritmo dado. La definición de esta salida es opcional. que se insertan enla línea de comandos y las que se escriben en un documento de texto externo (M-File). son parámetros recibidos por valor (by value). que es la evolución natural de los ficheros script. obtendremos un X tal que AX=B. de no aparecer la función se convertirá en un procedimiento. Solución: Observamos que las matrices A y B son los argumentos de entrada. no pasarán a formar parte de nuestro workspace. puesto que no devuelve nada. argumentos_entradas:Son los parámetros que recibe la función para realizar su procesamiento. La función es un M-file con cabecera de ejecución definida. Escriba la función de forma que xpueda ser un vector.2] siendo x entero. y utilícela para calcular el valor de la expresión evaluada en x e [-2.^2-5*x').7143 inline: Permite crear en línea una función que representará a una expresión algebraica. % extension de x como vector f=inline('0. editamos nuestro código para la función: Note que el archivo fue guardado con el mismo nombre solución que de la función.9*x.1429 5.^4-12*x.B) Xo = 0. % funcion f(x) y=g(x) % evaluando la funcion f en los valores de x . y la salida será y.5714 -1.Capítulo 3 Entonces. Solución: Usando funciones en línea. escribiremos en el editor lo siguiente: 1 2 3 60 x=[-2:2]. Aplicamos la función de la siguiente manera: >> Xo=solucion(A. Sintaxis: var = inline('Expresión matemática en forma de cadena') Ejercicio: Usando un archivo de función en MATLAB para la siguiente función: La entrada de la función será x. Guía Práctica MatLAB Guardando el archivo con el nombre sol_inline y ejecutando, tendremos: >> sol_inline y = -23.6000 -6.1000 0 -16.1000 -43.6000 Funciones de Ingreso y Salida de datos Normalmente al realizar un M-File nos vemos en la necesidad de interactuar con el usuario del programa, ya sea para solicitar ingreso de datos o mostrando resultados en pantalla. Estas acciones están definidas en Matlab como funciones in/out de datos. A continuación especificamos algunos de estos que son muy utilizados en la edición de un código: input: Permite al usuario ingresar un conjunto de datos desde el teclado previa exhibición de una cadena de texto como mensaje de solicitud, dicho ingreso de dato es asignado a una variable. Sintaxis: var = input('cadena de mensaje'); var = input('cadena de mensaje','s'); La primera sintaxis permitirá el ingreso de datos como si estuviéramos en la ventana de comandos y la segunda forma especifica que todo lo ingresado será una cadena de texto, es decir los datos ingresados serán ya de tipo char. Ejemplo: >> w=input('Ingresar un vector fila de 3 elementos: '); Ingresar un vector fila de 3 elementos: [6 9 1] >> w % invocando a la variable w w = 6 9 1 En este caso se tuvo que ingresar el vector fila [6 9 1] para que termine la ejecución realizada. La variable w tomó el valor del vector ingresado. Se muestra a continuación cómo ingresar una cadena de texto desde el teclado: >> n=input('Nombre: ','s'); Nombre: Rosario Taipe >> n n = Rosario Taipe disp: Muestra en pantalla lo representado por una variable. Sintaxis: var = disp(variable); 61 Capítulo 3 Ejemplo: >> n=input('Nombre: ','s'); Nombre: Rosario Taipe >> disp(n) % muestra lo representado por la variable n Rosario Taipe También es aceptado mostrar de forma directa una cadena de texto: >> disp('Hola Mundo') % muestra la cadena de texto Hola Mundo fprintf: Se utiliza para visualizar salidas de programas (texto y datos) en la pantalla, o bien almacenarlas en un fichero. Con este comando, y a diferencia de disp, la salida puede tener un formato preestablecido. En este caso se puedencombinar texto y resultados numéricos provenientes de cálculos o variablespredefinidas en la misma línea. Además, el formato de los números se puedecontrolar directamente. Uso del comando fprintf para visualizar mensajes de texto: >>fprintf('Mensaje en forma de cadena\n') Nota Para cambiar de línea en un mensaje de texto se debe insertar el código \n. A este código se le denomina Código de escape. Utilización del comando fprintf para visualizar datos y texto juntos: Para visualizar texto y datos (valores de variables) juntos, el comando siguiendo la sintaxis: fprintf >>fprintf('Texto %-5.2f texto adicional', nombre_variable) El símbolo % marca del lugar donde se insertará el número dentro del texto 62 Elementos de formato (definen el formato del número) Nombre de la variable cuyo valor será visualizado debeutilizarse Guía Práctica MatLAB Los elementos del formato son: -5.2f Flag o bandera (opcional) Ancho del campo y precisión (opcional) Caracter de conversión (obligatorio) El flag o bandera, cuyo carácter es opcional, puede ser uno de los siguientes: Caracter + (signo mas) - (signo menos) 0 (cero) Descripción Justificación izquierda del número dentro del campo Visualiza el carácter de signo ( + o -) delante del número Añade ceros si el número es más pequeño que el campo La especificación del ancho y precisión del campo (5.2 en el ejemplo anterior) es opcional. El primer número (5 en nuestro ejemplo) es el ancho del campo, el cual nos indica el menor número de dígitos en la visualización. Si el número que se visualiza esmenor que el ancho del campo, se añadirán ceros o espacios delante del número encuestión. La precisión se corresponde con el segundo número en el ejemplo anterior, y especifica el número de dígitos que se mostrarán a la derecha del punto decimal. El último elemento es el correspondiente al formato de conversión (f en el ejemplo anterior). Éste es obligatorio. A continuación se muestran los caracteres de conversiónmás utilizados: e Notación exponencial en minúsculas (ej. 1.709098e+001). E Notación exponencial en mayúsculas (ej. 1.709098E+001). f Notación de punto fijo (ej. 17.090980). g Representación en formato corto de las notaciones e o f. G Representación en formato corto de las notaciones E o f. i Entero. Se puede obtener información adicional sobre estos y otros formatos utilizando la ayudade MATLAB, el menú Help (Ayuda). Ejemplo: Pedir al usuario por pantalla tres números y responde con el mensaje: Promedio de los números ingresados es... Solución: Realizando un script, en el editor escribiremos las siguientes líneas: 63 La programación estructurada es una técnica para escribir programas (programación de computadora) de manera clara. con condición al principio) Solamente con estas tres estructuras se pueden escribir todos los programas y aplicaciones posibles. Para ello contamos con las instrucciones de control if…else…end y switch…case…end. z = x+y. Estructura secuencial: Una estructura de programa es secuencial si las instrucciones se ejecutan una tras otra. bucle de instrucciones. teniendo en cuenta el Teorema del Programa Estructurado. tercer numero: '). Si bien los lenguajes de programación tienen un mayor repertorio de estructuras de control. a modo de secuencia lineal. los numeros ingresado es:%f\n'. éstas pueden ser construidas mediante las tres básicas citadas. propuesto por Böhm-Jacopini. Estructura selectiva o de selección: La estructura selectiva permite que la ejecución del programa se bifurque a una instrucción (o conjunto) u otras. Ello ha llevado al desarrollo de nuevas técnicas. según un criterio o condición lógica establecida. ni se bifurca el flujo del programa. principalmente debido a las aplicaciones gráficas. Guardando este script con nombre solprom1 y ejecutando tendremos: Ingrese el primer numero: 24 Ingrese el segundo numero: 11 Ingrese el tercer numero: 26 Promedio de los numeros ingresado es: 20.Capítulo 3 1 n1=input('Ingrese el 2 n2=input('Ingrese el 3 n3=input('Ingrese el 4 prom=(n1+n2+n3)/3. Sólo es posible realizar el cálculo de z si previamente se ha definido x y y. por lo que las técnicas de programación estructurada no son suficientes. es decir que una instrucción no se ejecuta hasta que finaliza la anterior. segundo numero: '). 64 . tales como la programación orientada a objetos y el desarrollo de entornos de programación que facilitan la programación de grandes aplicaciones. sólo uno de los caminos en la bifurcación será el tomado para ejecutarse. Ejemplo: 1 2 3 x = 12. 5 fprintf('Promedio de primer numero: '). el cual demuestra que todo programa puede escribirse en base únicamente a tres estructuras de control: • Secuencial • Selectica (Instrucción condicional) • Repetitiva (Iteración.333333 Sentencias de Control de Flujo Hoy en día las aplicaciones informáticas son mucho más ambiciosas que las necesidades de programación existentes antaño.prom). y = 15. valor de 1 (uno) si el resultado es verdadero ó 0 (cero) si el resultado es falso. Sentencias2: Es un conjunto de sentencias a ejecutarse siempre que la respuesta de condición sea falsa. Sentencias1: Es un conjunto de sentencias a ejecutarse siempre que la respuesta de condición sea verdadera. Casos Especiales: • Ausencia de cláusula else Diagrama de Flujo: Sintaxis: if condición <Sentencias>. else <Sentencias2>. end condición: Es una expresión lógica o relacional cuyo resultado es de tipo lógico. end 65 .Guía Práctica MatLAB if … else … end Diagrama de Flujo: Sintaxis: if condición <Sentencias1>. end if … elseif … else … end (Anidado) Diagrama de Flujo: Sintaxis: if condición <Sentencias1>. . . else end 66 <Sentencias por Defecto>.Capítulo 3 • Respuesta solamente ante la cláusula else Diagrama de Flujo: Sintaxis: if condición . . elseif <Sentencias2>. % sentencia nula else <Sentencias>. . elseif <Sentencias3>. elseif <SentenciasN>. end Guardamos y ejecutando nuevamente tendremos: >> mayor2n % ejecutando Ingrese valor de a= 22 Ingrese valor de b= 22 a=22 y b=22 son iguales 67 .b). else fprintf('\na=%i y b=%i son iguales\n'. por lo tanto debemos modificar el script para considerar la condición de igualdad. entonces tendremos lo siguiente: a=input('Ingrese valor de a= '). if a>b fprintf('\nEl mayor es a=%i\n'. end Guardamos el script con el nombre mayor2n.a.b). elseif b>a fprintf('\nEl mayor es b=%i\n'. ejecutamos y probamos: >> mayor2n % ejecutando Ingrese valor de a= 14 Ingrese valor de b= 18 El mayor es b=18 Pero si los valores ingresados por el usuario son iguales nos damos cuenta que el resultado debe ser diferente. b=input('Ingrese valor de b= ').Guía Práctica MatLAB Ejemplo ilustrativo: Implementar un archivo script que solicite el ingreso de dos números cualesquiera y muestre en pantalla el mayor de ambos.a).a). Solución: Abrimos el editor y escribimos lo siguiente: a=input('Ingrese valor de a= ').b). else fprintf('\nEl mayor es b=%i\n'. b=input('Ingrese valor de b= '). if a>b fprintf('\nEl mayor es a=%i\n'. f=sqrt(x+5)*(x^2+5). f=x^2.3f)=%f\n'. <Sentencias2>. .1. end Ejemplo ilustrativo: Implementar un archivo script que calcule y muestre el valor respectivo de la función f para un valor de x ingresado por el usuario. case 5. .f) 68 . end fprintf('f(%4.x. case 6. f=sin(3*x)*exp(-x/2). <Sentencias3>.6. f=0. otherwise <Sentencias por Defecto>.Capítulo 3 switch … case … otherwise … end (Multibifurcación) Diagrama de Flujo: Sintaxis: switch condición case var=cte1. otherwise. siendo la función de la siguiente forma: Solución: Implementamos en el editor las siguientes líneas de instrucción: x=input('x= '). case var=cteN <SentenciasN>. switch x case pi/5. case var=cte2. . 117811 >> valorf x= 25 f(25.100)=110. y a la sentencia for.000)=0.628)=0. la cual trabaja según la evaluación de condición. valor de 1 (uno) si el resultado es verdadero ó 0 (cero) si el resultado es falso. ejecutamos y probamos: >> valorf x= pi/5 f(0. aunque puede ser forzado o explícito por otra condición.Guía Práctica MatLAB Guardando el archivo con nombre valorf. que trabaja según el recorrido de un contador. end condición: Es una expresión lógica o relacional cuyo resultado es de tipo lógico.1 f(6.000000 Estructura iterativa: Un bucle iterativo o iteración de una secuencia de instrucciones hace que se repita su ejecución mientras se cumpla una condición.694654 >> valorf x= 6. while … end Diagrama de Flujo: Sintaxis: while condición <Sentencias>. 69 . Por la forma de ejecución del bucle tenemos a la sentencia while. Sentencias: Son las sentencias a ejecutarse siempre y cuando la respuesta de la condición sea verdadera. El número de iteraciones normalmente está determinado por el cambio en la condición dentro del mismo bucle. 70 . end fprintf('Suma10=%i\n'. Sentencias: Son las sentencias a ejecutarse para cada uno de los valores del contador. tomará el valor de rango(2)=11 y para la tercera. entonces tendremos 3 iteraciones y rango tomará el valor del dato que se encuentra en la posición numéricamente igual al número de iteración. end rango(k): Es el valor k-ésimo de rango que toma la variable contadora.Capítulo 3 Ejemplo: Implementar un script que calcule la suma de los 10 primeros números naturales. tendremos: >> suma10n Suma10=55 for … end Diagrama de Flujo: Sintaxis: for rango(k) <Sentencias>. La primera para k=1 tomará el valor de rango(1)=4. Donde rango es un vector de n elementos y debido a esto tendremos n iteraciones. tomará el valor de rango(3)=13. k=k+1. while k<=10 suma=suma+k. para la segunda iteración. es decir k=2. Solución: Escribimos en el editor las siguientes líneas de instrucción: k=1. Si consideramos rango=[4 11 13].suma) Guardando el archivo con el nombre suma10n y ejecutando. k=3. suma=0. if condición sentencias2.suma) Guardando el archivo con el nombre suma10nf y ejecutando. for k=1:10 suma=suma+k. Solución: Escribimos en el editor las siguientes líneas de instrucción: n=10. break (sentencia de ruptura) Termina la ejecución de un bucle for o while. end fprintf('Suma10=%i\n'. 71 . es decir las sentencias3. La sentencia de salto continue se ejecutará siempre que la evaluación de la condición resulte verdadera. es decir a sentencias3. Al ejecutarse continue se iniciará una nueva iteración. if condición sentencias2. Las sentencias que aparezcan después de esta sentencia no se ejecutarán. tendremos: >> suma10nf Suma10=55 Sentencias especiales continue (sentencia de salto) Pasa el control a la siguiente iteración de los bucles for y while en el cual aparezca. suma=0. salteando las instrucciones que preceden a continue. salteando al posible conjunto de sentencias del cuerpo del bucle que la sucedan. end La sentencia de ruptura break al ejecutarse finalizará el ciclo del bucle for obviando la ejecución de las sentencias posteriores. for rango(k) sentencias1. continue end sentencias3. for rango(k) sentencias1.Guía Práctica MatLAB Ejemplo: (igual al anterior) Implementar un script que calcule la suma de los 10 primeros números naturales. break end sentencias3. end El cuerpo del bucle for contiene una sentencia condicional if que evalúa una condición. -18].-7. Sp=0. donde x y n son ingresados por el usuario. Dado el vector v=[-1. implemente un script que calcule y muestre los valores de los resultados al sumar todos los números positivos y todos los números negativos.Sn) 2.-18]. 3. Solución: 72 . donde a. Solución: n=input('n= '). for k=1:n Scp=Scp+k^2.Capítulo 3 Ejercicios de Aplicación 1.Scp) 4.11. con un error de 10-4.-15. 5. for k=1:length(v) if v(k)>=0 Sp=Sp+v(k). Scp=0. Implemente una función de nombre facto que calcule el factorial de un número cualquiera. Sn=0.6. Solución: v=[-1.-7. Dada la ecuación de 2do grado: . Implemente un script que calcule la sumatoria de los primeros n números cuadrados perfectos.3. end fprintf('Suma=%i\n'.2. b y c son ingresados por el usuario.-15.3.Sp) fprintf('Suma Negativos=%i\n'. el programa deberá responder ante el ingreso del dato.11.2. end end fprintf('Suma Positivos=%i\n'. else Sn=Sn+v(k). implemente un script que calcule y muestre las raíces de dicha ecuación y de qué tipo son dependiendo de su discriminante.6. Implemente una función de nombre exponencial que calcule la aproximación de ex por la serie de Maclaurin. 4.x2) 6. (Utilizar el operador mod). 80. if d>0 disp('Raices Reales') elseif d==0 disp('Raices Reales Iguales') else disp('Raices Complejas') end x1=(-b+sqrt(d))/2. además que pueda ingresar la cantidad que desea comprar.6f\nx2=%8. o a es menor que b.100. permita evaluar la media aritmética. posteriormente. 3. o a es igual a b. c=input('c= ').S. Implemente un programa que dé como resultado los números primos menores que un número dado n (positivo y entero).S. escriba un archivo.6f\n\n'. Implemente un programa que permita ingresar un vector con N números y. d=b^2-4*a*c. 2.Guía Práctica MatLAB a=input('a= ').. b=input('b= '). fprintf('x1=%8. Escriba un programa que permita determinar si un número entero dado es par o impar. Implemente un script que muestre en pantalla la siguiente lista de artículos de una tienda: [1] Zapatos…………S.x1. e imprimir el resultado a es mayor que b. Finalmente el programa deberá mostrar el valor total a pagar. 73 .00 Y que el programa permita al usuario elegir el tipo de artículo a comprar.m que permita definir si un número a es mayor que un número b. x2=(-b-sqrt(d))/2.00 [2] Pantalones…….200.00 [3] Camisas………. Utilizando el operador relacional > (mayor que). El programa debe admitir ingresar los números a y b. Ejercicios Propuestos 1. Cree un archivo. 6.m que permita evaluar las series. Los argumentos de entrada son x y n.Capítulo 3 5. Modifique el algoritmo para que calcule cuántos números hay y su suma. Interés: Sumatorios y medias. Realice un programa en Matlab que calcule el centro de masas de un sistema de partículas en 3D. Imprima los múltiplos de 7 existentes entre dos valores m y n pedido al usuario. Diseñe un algoritmo que permita calcular la posición (fila y columna) de la mayor componente de una matriz pedida al usuario. Solicite al usuario dos números n y k y calcule (combinaciones de n elementos tomados de k en k). 7. 9. donde n es el número de términos que se evalúan en la serie y x es un número real: a) b) c) 74 . 8. • Añadir flechas o líneas. • Seleccionar alguna de las componentes del gráfico. Además está la posibilidad de guardarlos con la extensión fig. En lugar de dar instrucciones que se puedan ejecutar en la ventana de comandos. Las gráficas de MATLAB se pueden exportar a multitud de formatos gráficos puntuales y vectoriales (jpg. eps.4 Capítulo Gráficos MATLAB ofrece numerosas oportunidades para emplear rutinas que realicen gráficas en dos y tres dimensiones. cuando se abre la figura se inicia la ejecución de MATLAB y se ofrece al usuario lafigura tal y como estaba cuando la guardó. en este capítulo principalmente implementaremos scripts que generen uno o varios gráficos al ejecutarse. • Rotar el grafico a criterio deseado. para invocarlo debemos escribir la siguiente sintaxis: Ejemplo: >> figure(8) % invocando a la ventana figura 8 Esta invocación responderá mostrando a la ventana figura 8: 75 . bmp. tiff. Ventana de Figura Todas las gráficas realizadas en MATLAB deben alojarse en una ventana de figura que se identifica por un nombre seguido de un valor de identificación. incluyendo modificaciones realizadas directamente sobre la ventana gráfica. estas gráficas son alojadas en una ventana para su visualización donde existe una paleta de comandos que permiten: • Añadir texto en posiciones deseadas. En ese caso. png). ubicando y uniendo los puntos con segmentos de recta.…. Dibuja una región poligonal cuyos vértices son definidos por sus argumentos.'caract1'. Realiza una gráfica cartesiana con escala logarítmica en el eje "x" y escala normal en el eje y.Rn. al ejecutar el programa esta se alojará por defecto en la ventana figura 1.Capítulo 4 Si al realizar una gráfica no precisamos una ventana figura en la cual alojarla. Grafica el histograma angular.'caractN') 76 . el orden de cerrar las ventanas existentes no interesa. en caso no exista la ventana la función closeretornará un mensaje de error.Dn. Gráfica con trazos tipo escalonado.rango. La función más estándar en ser utilizada es el plot. cuya magnitud y dirección están determinadas por el módulo de z=x+iy Dibuja un conjunto de flechas con origen en el eje "x". >> close(8) % cerrando la ventana figura 8 Funciones de Gráficas en 2 Dimensiones Función plot bar. cuya magnitud y dirección están determinada por el módulo de y.'caract2'. Para cerrar una ventana figura n por comandos lo podremos hacer usando la función close(n). Grafica las expresiones en coordenadas polares Realiza gráficos de sectores.0). Realiza una gráfica cartesiana con escala logarítmica en los ejes coordenados.barh hist stem stairs polar pie rose compass feather loglog semilogx semilogy fill Descripción Grafico de líneas en el plano cartesiano.R1.'características') plot(D1. diagrama polar que muestra la distribución de valores agrupados de acuerdo con su rango numérico Grafica un conjunto de flechas con origen en (0.D2.R2. Realiza una gráfica cartesiana con escala logarítmica en el eje "y" y escala normal en el eje "x". encierra a los puntos y los proyecta al eje x. A continuación mostramos la característica de sus sintaxis: plot(dominio. Grafica parcela de barras verticales y horizontales Grafica el histograma Gráfico de bastones verticales. implemente un script para representar Solución: Siguiendo la definición dada escribimos las siguientes instrucciones: x=[-2 1 3 6]. plot(x. En el transcurso de las aplicaciones se irán mostrando algunos de estos para su futuro uso. x o + Continua Discontinua Punteada Guión y Punto Equis Circunferencias Cruces Color de Línea b r g c m y k Tipo de Marca Azul Rojo Verde Cian Magenta Amarillo Negro . + o x s d p Punto Cruz Circunferencia Equis Cuadrado Diamante Pentagrama Existen mucho más atributos que podemos asignar a las gráficas realizadas. .y. el segundo especifica el color de línea y el tercer carácter especifica la marca del punto. El argumento 'características' está conformado por 3 caracteres que especifican algunas propiedades para la gráfica a realizarse con la función plot. como por ejemplo el tamaño de la marca de punto. Ejemplo: Sean los siguientes puntos: dichos puntos en el plano cartesiano. Graficas en 2D Puntos: Para ubicar puntos en el plano cartesiano es necesario ubicar los valores de las abscisas de cada par ordenado en un vector y sus respectivas ordenadas en otro vector teniendo en cuenta que estas deben estar en la misma ubicación que ocupan sus abscisas. y=[-1 1 -2 3]. así como el ancho de línea del trazado. Características de la Gráfica Tipo de línea -: -.Guía Práctica MatLAB La primera sintaxis realiza solamente una gráfica y la segunda es la forma para realizar hasta N gráficas en un mismo eje cartesiano. el color de fondo y del borde del mismo. El primer carácter nos especifica el tipo de trazo a mostrar. lo ejecutamos y visualizando la ventana figura tendremos lo siguiente: 77 .'ro') % note que obviamos el 1er caracter Lo guardamos con el nombre de grafo1.m. y=[-1 1 -2 3]. el plot nos muestra esta gráfica que por defecto está alojada en la ventana figura 1.Capítulo 4 Debido a que le dimos solamente atributos de color y marca de punto.'ro') axis([-3 7 -3 4]) 78 .y. plot(x. Note además que la extensión del eje X y del eje Y lo asumió el programa por defecto tomando los valores mínimos y máximos de cada vector. debemos utilizar la función axis. axis: Permite editar los ejes X e Y en extensiones deseadas. tendremos el siguiente resultado: x=[-2 1 3 6]. Sintaxis: axis([xmin xmax ymin ymax]) Agregando la función axis en el script anterior. Si queremos ajustar nuevas extensiones en los ejes. 'cadena') ginput(n) Descripción Activa o desactiva el enrejado de los ejes.y) Ingresa manualmente (con mouse) el texto cadena en el plano cartesiano iniciando la escritura en (x. Coloca el titulo cadena a la gráfica. Por último. al archivo grafo1.Guía Práctica MatLAB MATLAB contiene funciones que nos permiten agregar algunas características para especificar la gráfica saliente: Función grid on. Coloca la leyenda cad_leg a la gráfica Sitúa los valores mínimos y máximos para los ejes Congela y descongela a la ventana figura para poder superponer otra grafica en los mismos ejes. hold off text(x.y. Coloca la etiqueta cadenay al eje y.y) Importar n puntos de una gráfica con el mouse. Ingresa automáticamente el texto cadena en el plano cartesiano iniciando la escritura en (x.'cadena') gtext(x.y. grid off xlabel('cadenax') ylabel('cadenay') title('cadena') legend('cad_Leg') axis([xo xf yo yf]) hold on.m le damos sus atributos para mostrar una mejor salida de nuestra gráfica. el usuario puede visualizar el código del archivo que se encuentra en el disco. teniendo como resultado la siguiente gráfica: 79 . Coloca la etiqueta cadenax al eje x. dichos puntos son almacenados en una variable asignada. tendremos una curva bastante suave con respecto a la primera: 80 .30).y) % vector dominio % vector rango % grafica por defecto Guardando el archivo con el nombre grafo2. Ejemplo: Realizar la gráfica de la siguiente expresión: x=linspace(-1. pero si aumentamos la cantidad de puntos al vector x. plot(x.5. ver código en el disco. y=sin(x. Debemos tener en cuenta que una curva es la unión de infinitos puntos.^2).Capítulo 4 Cartesianas: Para hacer gráficas de funciones de una variable con MatLab. primero tenemos que crear una tabla de valores de la variable para después dibujar la función. tendremos: Notamos las imperfecciones de la curva debido a la poca cantidad de información.m y ejecutando. debido a eso es necesario contar con una cantidad de datos necesarios para realizar la simulación. m y ejecutando. plot(x.3000).y.16) 81 .Guía Práctica MatLAB Ahora supongamos que queremos representar la función: Para poder graficar f(x). multiplicando cada trozo por el índice lógico que describa el lugar en el que queremos dibujarlo.2) grid on title('Funcion definida a trozos'.'linewidth'. generamos una tabla de valores en el dominio en el que queramos dibujar la función y definimos la función.*((0<=x)&(x<1)).*(x<0). y2=1. y3=(-x+2).'-b'.3.^2).'fontsize'. y=y1+y2+y3. tendremos: x=linspace(-2.*(1<=x). y1=(x. Implementando en el editor las instrucciones a continuación y guardando el archivo con nombre grafo3. 1:2*pi. >> bar(x.abs(y)) Se observa que tanto el domino como el rango dependen de una variable. >>y=sin(x).1:5*pi. >>stem(x. >> y=sin(x). x=2*t.1:2*pi. >>y=exp(-x/2).y) >> x=0:0.*cos(t). >> bar(x.y.*sin(2*x).Capítulo 4 Utilizando las demás funciones para las gráficas tendremos lo siguiente: stem: stairs: >>x=-3:0.*sin(t). y=2*t.'linewidth'.1:pi.abs(y)) Paramétricas: >>x=0:0. plot(x.y) bar: loglog: >> x=0:0. Ejemplo: Graficar la siguiente curva paramétrica: Implementamos en un editor las siguientes instrucciones: t=0:0.2) grid on 82 . >> y=sin(x). >>stairs(x.1:pi. m y lo ejecutamos.m y ejecutamos para ver la curva polar. entonces tendremos la siguiente curva paramétrica: Polares: Ejemplo: Graficar la siguiente curva polar: para Solución: Editando un archivo las instrucciones siguientes: u=linspace(0. r=3-2*cos(3*u).360).Guía Práctica MatLAB Guardamos el archivo con nombre grafo4. polar(u. Guardamos con nombre grafo5.2*pi.r). 83 . /(t.dx.-sin(t).y. La gráfica resultante es: El comando comet produce un resultado dinámico.^2-1)). pero esta vez aparece un circulito (el cometa) que va dibujando la curva. >> t=linspace(-5. >>quiver(cos(t).sin(t).20).2*pi.^2+1)) 84 . Si el número de puntos que se indica con el comando linspacees demasiado grande. La velocidad de ejecución depende del número de puntos que hayamos generado con el comando linspace.*(t./(t. la forma de ejecución es similar al plot.dy.cos(t)) >>axis square El número de vectores velocidad que aparecen es 20. puede que no se aprecie con claridad la gráfica. ya que ésta será el número de vectores velocidad que se mostrará. >> comet((t.^2+1).Ingrese las siguientes líneas y verifique la salida gráfica que resulta de la aplicación. Sintaxis: quiver(x.5.Capítulo 4 quiver: Permite crear los vectores velocidad en los puntos de una gráfica.dz) Graficar los vectores velocidad sobre la curva: Resolviendo en la ventana de comandos: >> t=linspace(0.^2-1)).1000).z.(2*(t. y1=4*exp(-x).1). Ejemplo: >> >> >> >> x=0:0. plot(x.explode) Gráficos Múltiples La función plot puede realizar varias gráficas superpuestas en una misma ventana figura. las propiedades las adopta el MATLAB si es que no son especificadas.*sin(2*x).5 2.1:4.x.Guía Práctica MatLAB hist: >> x = -4:0. >> pie(x. >> hist(y.5 2]. y2=2*cos(x). >> explode = [0 1 0 0 0].y2) 85 . >> y = randn(length(x).y1.x) pie: >> x = [1 3 0.1:4. >> >> >> >> >> >> >> >> x=0:0.y2) grid on hold off % descongela la ventana subplot: Permite que una ventana figura pueda dividirse en varios ejes. y1=3*sin(x).y1) hold on % congela la ventana plot(x. Sintaxis: subplot(#filas.#columnas. a) b) c) d) 86 . asignando a cada división un número identificador.posición) Ejemplo: Realizar la gráfica de las siguientes expresiones en una sola ventana figura. y2=cos(x).Capítulo 4 Utilizando la función hold antes de un nuevo comando que gráfica podemos superponer más gráficas en una sola ventana figura. plot(x.1:5. dividiéndose en filas y columnas. permitiendo así alojar más de una gráfica. leyenda.title('Curva 3') subplot(2. es decir: color. etiqueta de ejes.^2.y2.'linewidth'.y3.2). título.4.4) plot(x.300).title('Curva 2') subplot(2.2.'linewidth'. y2=6*sin(4*x).2.*cos(4*x). marca.2. y4=10*exp(-x).Guía Práctica MatLAB Solución: x=linspace(0.2). y1=8*sqrt(x). subplot(2.2). y3=x.1) plot(x. 87 . Pueden ser diferentes para cada gráfica. trazo.y1.2) plot(x.title('Curva 4') Tenga en cuenta que cada gráfica está sujeta independientemente al manejo de sus diferentes características.'linewidth'.2. etc.y4.2) title('Curva 1') subplot(2.'linewidth'.3) plot(x. Dibuja una región poligonal cuyos vértices son los elementos de los vectores que representan a los datos en los ejes XYZ.y) .y) en forma de cascada. .y) considerando una iluminación en formato básico.m. ordenadas y altura.y) y proyecta las curvas de nivel en el plano XY. Ejemplo: Sean los siguientes puntos: representar dichos puntos en el plano cartesiano. Grafica una superficie z=f(x.y) dando relleno de color a cada una de las celdas. ubicarlo en el CD. Grafica una superficie z=f(x. Grafica una superficie z=f(x. Puntos: En tres dimensiones debemos tener en cuenta que ahora cada punto tendrá tres coordenadas. podemos visualizar las siguientes salidas: 88 .Capítulo 4 Funciones de Gráficas en 3 Dimensiones Función plot3 fill3 stem3 comet3 bar3 pie3 mesh meshc meshz surf surfc surfl waterfall contour contour3 sphere cylinder ribbony quiver3 Descripción Grafica un conjunto de puntos en los ejes tridimensional. Grafica una superficie de revolución para f(t) en el dominio t Grafica una superficie z=f(x. Grafica las curvas de nivel en 2D y 3D Grafica una esfera unitaria. Grafica bastones verticales. iniciando desde el plano XY Realiza el trazado de la curva en forma dinámica Grafica de barras tridimensionales Grafica sectores cilíndricos tridimensionales Grafica una superficie z=f(x. implemente un script para Solución: Generando el script grafo3D1.y) cerrando la grafica con las fronteras del dominio. por lo tanto tendríamos tres vectores que alojan al conjunto de abscisas. proyectando las curvas de nivel al plano XY Grafica una superficie z=f(x.y) Grafica una superficie z=f(x.y) como cintas tridimensionales Grafica los vectores velocidad en los puntos de las coordenadas tridimensionales. Grafica una superficie z=f(x. y. Ejemplo: Graficar la curva cartesiana representada por: Solución: Editando en un script de nombre grafo3D2.10.Guía Práctica MatLAB plot3(x.z.y.*cos(4*x).z.z) grid on Ejecutando el archivo. tendremos la gráfica siguiente: 89 . plot3(x.'r') Cartesianas: Cada valor para los ejes estará representado por 3 vectores del mismo orden.'ro'): stem3(x. y=2*sqrt(x+1).y.m las siguientes instrucciones: x=linspace(0. z=7*exp(-y/4).300). Capítulo 4 Paramétricas: Ejemplo: Realizar la gráfica de la siguiente expresión: Solución: Implementando las siguientes líneas de instrucción: t=linspace(0.z) grid on Guardando el archivo con el nombre grafo3D3.*cos(t). x=3*t.y.300).5*pi. podemos deducir que el usuario ya cuenta con las herramientas necesarias y suficientes para interpretar gráficamente cualquier expresión matemática en coordenadas cartesianas.*sin(t). paramétricas y polares. y=3*t. tendremos: A partir de las formas de graficar mostradas hasta ahora. plot3(x. ya sea en 2D o en 3D. z=t.^2. 90 .m y ejecutando. al igual que para funciones de una variable.zm) surf(xm. Para facilitar la creación del enrejado la siguiente sintaxis: en MATLAB.Guía Práctica MatLAB Superficies MATLAB es mucho más práctico y funcional al momento de representar las superficies 3D. Para ello utilizaremos la función meshgrid. Visualizar la superficie se puede lograr de las siguientes formas: >> mesh(xm.zm) 91 .ym. A continuación mostramos un ejemplo: >> x=-1:0. Para trabajar con regiones rectangulares.1:2. entonces la región de dominio rectangular estará definida por el conjunto de coordenadas siguientes: . % orden: 1x21 >> y=-2:0.ym. Seguidamente tenemos que generar un mallado interceptando los datos en el plano XY. primero hay que disponer de datos en una extensión del eje x y también otro conjunto de datosen una extensión del eje y.^2). que representarán a los ejes. generando una matriz de orden n×m. dispone de una gran variedad de formatos para dibujar gráficas de funciones de dosvariables y una componente.zm) mesh(xm.1:1.zm) ó >> surf(xm.^2).^2-ym.yvector) Forma z=f(x. utilizaremos la función meshgridque tiene [xmatriz. % orden: 1x41 >> [xm.ym]=meshgrid(x.ym. ya sea por mallado.y).ym. definiremos los vectores de abscisas y de ordenadas .^2-ym. Para visualizar correctamente las superficies es adecuado y preciso que estén representados como funciones definidas sobre un domino rectangular en cualquiera de los planos de referencia. % enrejado matriz de 21x41 Y finalmente expresaremos la función z con las variables enrejadas: >> zm=exp(-xm.y) Para graficar funciones de dos variables .ymatriz]=meshgrid(xvector. líneas de contorno y cuadrículas de colores que son las usadas.*sin(-xm. ym. Algo que resulta también interesante es añadir una escala de colores al dibujo.y]=meshgrid(linspace(-1.50)).^2+y.ym. >>surf(x.^2+1)). 92 . >>z=cos((x.Capítulo 4 waterfall(xm.ym. A continuación mostraremos el uso de estos comandos: >>[x.ym.zm).y. lo que nos permite conocer las alturas (coordenada z) de los diferentes puntos de la gráfica.zm) surf(xm. shading interp SOMBRAS Y COLORES Para conseguir efectos de sombreadosy colores diferentes se pueden consultar todas las posibilidades de loscomandos colormap y shading./(x. esto se consigue con el comando colorbar (después de dibujada la gráfica). shading flat surf(xm.zm). los puntos más altos corresponden a los colores más calientes y los puntos más bajos de la gráfica están coloreados con colores fríos.*y).z) >>shading interp >>colorbar Como se puede observar.zm) ribbon(xm.1. el eje Y es la parte imaginaria de la variable y el eje Z es la parte real de la imagen de la función. Se especifica el punto de vista en términos de azimut y elevación. Por ejemplo. para obtener la gráfica de la función realizaremos las siguientes líneas de instrucciones: >>z=cplxgrid(12). Esto no es así para imagen cualquier función compleja. rotate3d nos permite activar la rotación de la vista utilizando el ratón sobre la figura. >>cplxmap(z. Por ejemplo. o por un punto en el espacio tridimensional. es decir. rotándola de manera interactiva en tres dimensiones. donde n es el número entero positivo. view: Especifica la posición del espectador (el punto de vista) determinando la orientación de los ejes.Guía Práctica MatLAB ROTACIÓN DE GRÁFICA: Otros comandos interesantes en las gráficas 3D es la que manipulan la vista de los ejes coordenados. dibujando una gráfica tridimensional en la que el eje X es la parte real de la variable . la función es una función trivaluada.z]) Superficies Complejas Sea la función compleja de variable compleja: El comando cplxmap permite representar gráficas de funciones complejas de variable compleja. Esto se consigue utilizando previamente el comando cplxgrid(n). view([az. La variable z debe pertenecer siempre al dominio constituido por el disco unidad con centro en el origen y las coordenadas de los puntos deben estar en forma polar. 93 .el]) ó view([x.y. cada z puede producir tres valores distintos para . la es única. . la función es una función bivaluada.z.^2) Obteniéndose lo siguiente: Se observa que para cada valor de z. y así sucesivamente. >> pie3(x. centrada en el origen). >> bar3(x).5 2]. el valor que tomará n sería 20. donde n es el número de puntos en los que queda dividido el ecuador de la esfera. A continuación damos un ejemplo de cómo realizar la gráfica de la esfera de la derecha: >>sphere. por defecto. >> explode = [0 1 0 0 0]. ESFERA Se genera utilizando el comando >>sphere(n).axis square. Cuanto mayor sea n. mayor sería la aproximación a la curvatura real dela esfera (de radio 1.explode) Superficies: Generados por Funciones Hay varios comandos en MatLab que permiten generar las gráficasde superficies en R3 (superficies que no son funciones.) Estos comandos son funciones que ya vienen programadas. >> x = [1 3 0.5 2.title('ESFERA') 94 .Capítulo 4 Estadísticas bar3: pie3: >> x=[10 2 3 5 18 20 15 ].Poniendo sólo >>sphere. n) genera automáticamente un cilindro de revolución de radio R. si usamos sólo >>cylinder(R). Para dibujarlas normales en el sentido opuesto habría que poner surfnorm(x'.y'. 20. por defecto.z'). podemos utilizar comogeneratriz la función con . Por ejemplo.z]=sphere(30). puede ser utilizado para obtener las gráficas de diferentes tipos de superficies de revolución.y. % Utilizar el siguiente comando: >>surfnorm(x.20). donde n es el número depuntos de la circunferencia de la base del cilindro. pero guardando la información en tres variables: >>[x.2. CILINDRO El comando >>cylinder(R. Como en el caso de laesfera.donde la generatriz es una función definida por R(t).y. el número n es. >>r=sqrt(t). Lo realmente interesante de este comando es que también admiteradios variables R(t). siqueremos dibujar un paraboloide de revolución. realizaremos lo siguiente. con . y). De esta forma.z) Este comando también se puede utilizar para dibujar los vectores normales en superficies de funciones de la forma z = f(x. >>cylinder(r) 95 .Guía Práctica MatLAB Vectores Normales a una superficie Dibujar los vectores normales a la superficie de una esfera siguiéndolos siguientes pasos: Dibujar una esfera utilizando lo descrito anteriormente. >>t=linspace(0. en el Espacio Euclídeo. la geometría diferencial de curvas propone definiciones y métodos para analizar curvas simples en Variedades de Riemann. Vectores tangente.Capítulo 4 Geometría diferencial de curvas En matemáticas. Longitud de arco Dada una curva suficientemente suave (diferenciable y de clase posición expresado mediante el parámetro . normal y binormal como: 96 . en y dado su vector de se define el llamado parámetro de arco como: La cual se puede expresar también de la siguiente forma en la cual resulta más fácil de recordar Lo cual permite reparametrizar la curva de la siguiente manera: donde: son las relaciones entre las dos parametrizaciones. normal y binormal: Triedro de Frênet-Serret Dada una curva parametrizada según un parámetro cualquiera se define el llamado vector tangente. y en particular. ). vector normal y vector binormal de una curva hélice. se dice. como se explicó en la sección anterior las fórmulas anteriores pueden simplificarse notablemente: Donde los parámetros y anteriores designan precisamente a la curvatura y a la torsión. mientras que el vector normal da el cambio dirección por unidad de tiempo de la velocidad o aceleración normal. juntos configuran un sistema de referencia móvil conocido como Triedro de Frênet-Serret a raíz del estudio de Jean Frenet y Joseph Serret. la anterior ecuación se reduce simplemente a: Además de la curvatura se suele definir el llamado radio de curvatura. Es interesante que para una partícula física desplazándose en el espacio. que más grande es la curvatura. Curvatura y torsión La curvatura es una medida del cambio de dirección del vector tangente a una curva.Guía Práctica MatLAB Vista esquemática del vector tangente. como el inverso de la curvatura. Estos tres vectores son unitarios y perpendiculares entre sí. Para una curva parametrizada cualquiera la curvatura es igual a: Si la curva está parametrizada por el parámetro de longitud de arco. Si la curva está parametrizada según la longitud de arco. cuanto más rápido cambia éste a medida que nos desplazamos a lo largo de la curva. 97 . el vector tangente es paralelo a la velocidad. las coordenadas de un punto genérico del plano osculador. el plano osculador viene dado por el conjunto de puntos: Obviamente si la partícula tiene un movimiento rectilíneo el plano osculador no está definido. Si se tiene una partícula en la posición . Para el caso general la torsión viene dada por: Si la curva está parametrizada por el parámetro de longitud de arco.Capítulo 4 La torsión es una medida del cambio de dirección del vector binormal: cuanto más rápido cambia. . 98 . Por lo tanto. para una curva totalmente contenida en el plano la torsión es nula ya que el vector binormal es constantemente perpendicular al plano que la contiene. el plano osculador coincide con el plano que en cada instante contiene a la aceleración y la velocidad. la anterior ecuación se reduce a: Plano osculador En cada punto de una curva. moviéndose con velocidad y sometida a una aceleración . . el punto de la trayectoria. el vector velocidad en el punto considerado. La ecuación de este plano viene dada por: Donde: . más rápido gira el vector binormal alrededor del vector tangente y más retorcida aparece la curva. Para una partícula desplazándose en el espacio tridimiensional. el plano osculador es el plano que contiene al su vector tangente y al vector normal a la curva. El centro de dicho círculo puede buscarse como: O más sencillamente en función del parámetro de arco como: Teorema fundamental de curvas El teorema fundamental de curvas que enunciamos a continuación nos dice que conocido un punto de una curva y su vector tangente. e3 (es decir. B(0) = e3). e1. e2. y tales que: 1. la curva queda totalmente especificada si se conoce la función de curvatura y de torsión. Su enunciado es el siguiente: Sea un intervalo. A lo largo de la curva pueden definirse tres campos vectoriales T(s). e2. {x0. entonces existe una única curva parametrizada de . llamado círculo osculador por estar contenido en el plano osculador. perpendiculares entre sí y tales que en el punto inicial coinciden con e1. La curva pasa por x0. Dadas dos funciones continuas X y t de a y dado un sistema de referencia fijo (ortonormal) de . y el vector tangente T a la curva en ese punto coincide con e1. N(s) y B(s) llamados respectivamente vector tangente. normal y binormal. e3}. en la que se muestra también el radio y centro de curvatura. El radio del círculo osculador coincide con el radio de curvatura (inverso de la curvatura).Guía Práctica MatLAB Centro de curvatura Ilustración de la circunferencia osculatriz en el punto P de la curva C. En un entorno de un punto de una curva puede ser aproximado por un círculo. N(0) = e2. 99 . T(0) = e1. 2. la velocidad inicial y la variación en el tiempo de las derivadas segundas (que están relacionadas con la curvatura y la torsión). Se pide al usuario ejecutar el script tiedro_movil. Se cumplen las siguientes ecuaciones: O bien escrito matricialmente: donde el punto es la derivada con respecto al arco parámetro s. Ejercicios Propuestos 1.m y long_arco. plano_osculador.m. en cada caso.Capítulo 4 3.m. la trayectoria de una partícula queda especificada si se conocen la posición inicial. Esto tiene implicaciones físicas interesantes.m. circ_oscula. Es por eso por lo que las leyes de Newton o las ecuaciones de Euler-Lagrange se expresan en términos de derivadas de segundo orden (que es necesario complementar con la posición y velocidades iniciales). Dibuje las gráficas de las siguientes funciones eligiendo. por ejemplo. una tabla de valores adecuada para que aparezcan los aspectos más representativos de la función: a) b) c) d) e) f) 100 . luego ingresar los datos solicitados por el cada uno de los programas para obtener las definiciones anteriores. dibujar además los vectores velocidad utilizando el comando quiver: a) b) c) d) e) f) g) h) 3. en los apartados a) y b).Guía Práctica MatLAB g) h) i) 2. Dibujar las siguientes curvas en paramétricas. Dibujar las siguientes curvas polares: a) b) c) d) e) 101 . en cada uno de los siguientes casos: 102 a) . utilizando alguno de los comandos descritos anteriormente. c) . d) . Tome las extensiones adecuadas para x e y.30).Capítulo 4 f) g) h) 4. Representar las gráficas de las siguientes funciones de 2 variables. . b) . a) b) c) d) 6. Graficar las siguientes curvas: a) b) c) d) 5. Dibujar las superficies generadas por >>cylinder(R(t). Dibujar también algunas curvas de nivel. Definición Con MATLAB se puede trabajar con polinomios de forma sencilla. Es decir. si deseamos escribir los polinomios: y Sólo realizaríamos lo siguiente: >> f=[3 0 1] % polinomio f de grado 2 f = 3 0 1 >>g=[2 0 -1 3] % polinomio g de grado 3 g = 2 0 -1 3 Si deseamos ver la expresión matemática de los polinomios haremos lo siguiente: >> F=poly2sym(f) % expresión algebraica de f F = 3*x^2 + 1 >> G=poly2sym(g) % expresión algebraica de g G = 2*x^3 . Es muy conocido también que en el área de control existe la manipulación de polinomios de estados para representar el comportamiento a través del tiempo de un sistema.5 Capítulo Polinomios En la actualidad los polinomios son utilizados en la mayoría de los cursos relacionados con la programación de los métodos numéricos. justificando así la facilidad de manipulación y de implementación en cualquiera de los lenguajes existentes.x + 3 103 . si tenemos la expresión: Podemos representarlo en MATLAB de la siguiente manera: Por ejemplo. y es ahí donde apuntamos el estudio de este capítulo.Es suficiente tener en cuenta que un polinomio en el programa no es nada más que un vector que contiene los coeficientes de dicho polinomio completo y ordenado descendentemente en su grado. 6448 .Capítulo 5 Toda matriz está asociada a un polinomio. Sea el vector r: >>r=[-1 2 -2 -1 3]. y este se obtiene de la siguiente forma: >>A=round(46*randn(4)).0. la cual recibe el nombre de polinomio característico de la matriz.5774i >>gr=roots(g) % vector columna de las raíces de g gr = -1.2896 0.1266 3.0e+007 * 0.6448 + 0.5774i 0 . >>R=poly(r) % polinomio de raíces r R = 1 -3 -5 15 4 -12 La cantidad de elementos de un vector que representa a un polinomio está relacionada con el grado de dicho polinomio. % matriz cualquiera A = 25 84 -104 40 15 -60 -20 16 165 127 -62 140 33 -3 33 -9 >>pA=poly(A) % obtiene de polinomio característico de A pA = 1. >>R=poly(r) % polinomio de raíces r R = 1 -1 -9 1 20 12 >>r=[-1 2 -2 1 3].8645i 0.5530 Las raíces de todo polinomio se hallan de la siguienteforma: >>fr=roots(f) % vector columna de las raíces de f fr = 0 + 0.0. entonces con la función poly podemosconocer a dicho polinomio de coeficiente principal igual a 1.0000 0.0014 0.0000 0. dicho grado se halla así: >>gradoF=length(f)-1 % grado del polinomio F gradoF = 2 >>gradoG=length(g)-1 % grado del polinomio G gradoG = 3 104 .8645i Si tenemos un vector cuyos elementos son las raíces de un polinomio cualquiera. poly2) [cociente. por lo tanto es imposible realizar la operación con el operador "+" de forma directa. si deseamos sumar dos polinomios de diferentes grados. tendremos: >>FG=conv(f. tendremos: >>cocienteGF=deconv(g. 105 . debido a esto.residuo]=deconv(g.f) cocienteGF = 0.poly2) No debe olvidar que el grado de poly1 es mayor o igual al grado de poly2.f) cocienteGF = 0. debemos tener en cuenta que dichos polinomios serán representados en MATLAB como dos vectores de diferentes cantidades de elementos.Guía Práctica MatLAB Operaciones con polinomios conv: Calcula el producto de 2 polinomios.g) % producto de f con g FG = 6 0 -1 9 -1 3 >>FG=conv(g. Ejemplo: De los polinomios f y g definidos anteriormente.0000 Ahora. Las siguientes líneas de instrucciones posibilitan realizar la suma de dos polinomios de diferentes grados. Sintaxis: var = conv(poly1.f) % producto de g con f FG = 6 0 -1 9 -1 3 deconv: Calcula la división de 2 polinomios. sólo así se verificará que la suma es realizable. Sintaxis: cociente = deconv(poly1.poly2) Ejemplo: De los polinomios f y g definidos anteriormente.6667 3.6667 0 >>[cocienteGF.resto] = deconv(poly1.6667 0 >>residuo = 0 0 -1. debemos aumentar una cantidad de ceros a la izquierda del vector de menor número de elementos para tener la misma cantidad para ambos vectores. k) . Guardando esta función creada con el nombre de sumapoly aplicando: >>S=sumapol(g. entonces: >>df=polyder(f) % derivada del polinomio f df = 6 0 >>dg=polyder(g) % derivada del polinomio g dg = 6 0 -1 >>dR=polyder(R) % derivada del polinomio R dR = 5 -12 -15 30 4 polyint: Calcula la primera integral de un polinomio.g) % f+g S = 2 3 -1 4 polyder: Calcula la derivada de un polinomio. Sintaxis: var = polyder(poly) Ejemplo: Siendo f.m-n) p].q) n=length(p)-1.Capítulo 5 function s=sumapol(p.n-m) q]. else p=[zeros(1.f) % g+f S = 2 3 -1 4 >>S=sumapol(f. if n>m q=[zeros(1. Sintaxis: 106 var = polyint(poly) var = polyint(poly. g y R polinomios definidos anteriormente. m=length(q)-1. end s=p+q. x=-5:0.x) Ejemplo: Tomando al polinomio f definido anteriormente.1:5.'-r') % graficando al polinomio grid on 107 .x).5000 0 -0.6) % Término Independiente = 2. >> fx=polyval(f.-6) % Término Independiente = -6 Igk = 0.x) fx = 433 508 589 676 769 Si queremos graficar al polinomio con las siguientes instrucciones: 868 en el dominio . Ejemplo: Tomando los polinomios f y g ya definidos anteriormente: >>If=polyint(f) % TérminoIndependiente = 0 If = 1 0 1 0 >>Ifk=polyint(f.6 Ifk = 1.5000 3. implementaremos un script f=[3 0 1].0000 2.Guía Práctica MatLAB La primera sintaxis nos dará la integral con constante = 0 y la siguiente nos dará la integral con una constante de valor k.0000 polyval: Evalúa a un polinomio en un valor o un conjunto de datos.2.0000 -6. Sintaxis: var = polyval(poly. tendremos: >> x=16.x) fx = 769 >> x=12:17.6000 >>Igk=polyint(g. y=polyval(f. >> fx=polyval(f.y.0000 0 1. plot(x. m y ejecutándolo. . obtenga dicho polinomio b) Halle la sumadel cociente y resto de las siguientes divisiones: i) ii) iii) Ajuste de curvas Bidimensionales Si deseamos obtener un polinomio que se ajuste a nuestros datos experimentales teniendo la libertad de elegir el grado de este. Sintaxis: 108 Pol = polyfit(datoX. tendremos: Ejercicios: a) Sea las raíces de un polinomio de grado 3: además de su gráfica para .Capítulo 5 Guardando el archivo con el nombre poly_ejemplo.grado) . aplicaremos la siguiente función: polyfit: Construye un polinomio de ajuste de grado n utilizando el método de los mínimos cuadrados empleando los datos en el dominio y el rango.datoY. la variable independiente se supone que es la dimensión final de datoY con los puntos de interrupción definidos por x 109 . >> x=7*rand(1.y.los valores de la función dato Y subyacente a los valores de la x interpolante.datoY.y.10).1427 9.5543 >> Pajus=polyfit(x. siendo estos los siguientes: Solución: Ejecutando el archivo pol_ajuste. >> y=26*rand(1. tendremos lo siguiente: Funciones de Interpolación spline: Realiza la interpolación cúbica de datos.0248 -1. 3°.1710 -1.m del CD.1) % polinomio de orden 1 Pajus = 0. Sintaxis: var = spline(datoX.10).x) Utiliza una interpolación spline cúbico para encontrar var. 2°.6257 Ejercicio: Implemente un archivo script que grafique los polinomios de ajuste de 1°. >> Pajus=polyfit(x.Guía Práctica MatLAB Ejemplo: Utilizaremos la función rand para obtener datos cualquiera para X e Y.3) % polinomio de orden 3 Pajus = 0.6996 11. Para la interpolación. 4° y además los datos X e Y para un dominio . xx.xi). plot(x. o una matriz de cualquier dimensión.25:10.yy) El resultado gráfico será la siguiente figura: interp1: Interpola datos en 1-D.'metodo') Interpola para encontrar yi. xx=0:. generan una curva sinusoidal.y.xx). plot(x. yi = interp1(x. yy=spline(x.m. las muestras de la estría sobre una malla más fina.xi. x=0:10. y = sin(x). Y puede serun escalar.X debe serun vector. generan una curva sinusoidal gruesa e interpola sobre un eje de abscisas más fino.'o'. xi = 0:.y.y.Y. siendo estas las siguientes: nearest linear cubic : Interpolación del vecino más cercano : Interpolación lineal : Interpolación usando polinomio cúbico de tipo de Hermite. x = 0:10. y=sin(x).y.Capítulo 5 Ejemplo: Las siguientes líneas guardadas como script de nombre interp_spline.A continuación.25:10.xi. Sintaxis: yi=interp1(x.m. Ejemplo: Las siguientes instrucciones guardadas con el nombre interp_INTERP1. un vector.'o'. además metodo es la forma de cómo se desea realizar la interpolación.yi) 110 . los valores de lafunción Ysubyacenteen los puntos en la xi vector o matriz. 36 y 4. 111 .0 1.2 110. 96. 100 y 106.5 109.3 110.5 109.9 110. usando interpolación lineal e interpolación con spline cúbica.4 92. usando interpolación lineal e interpolación con spline cúbica.48.1 86.2 a) Genere una gráfica que compare la conexión de los puntos de temperatura con líneas rectas y con una spline cúbica.5 78.5 2.5 1. Suponga que tiene el siguiente conjunto de puntos de datos: Tiempo (s) 0.5 3.6 111.0 0.5 5.3. b) Calcule los valores de temperatura en los siguientes instantes: 0.0 3.5 4.Guía Práctica MatLAB El resultado gráfico será la siguiente figura: Ejercicios: 1.25. c) Compare los valores de tiempo que corresponde a estas temperaturas: 81. 2.0 2. 1.3 110.0 4.0 Temperatura °F 72. 75 empleando los polinomios involucrados. finalmente muestre sus respectivas gráficas.0 5.0 112 y 18 20 12 0 -10 -12 0 32 90 180 308 . Efectúe un ajuste de 1°.0 9.0 2.0 7. 3° y 4°.0 1.Capítulo 5 2.0 3.1 y x=3.0 4. 2°.0 8. mostrando las aproximaciones para x=3.0 6. La siguiente tabla muestra los datos a ajustar: x 0.0 10. para lo cual es necesario estimarlo de entre los valores que presenta la tabla en un proceso conocido como interpolación. p=p+y(k)*L end % Polinomio de Lagrange 113 . end end L=num/den. for k=1:length(x) den=1. % elimino el termino k-esimo num=poly(xp).6 Capítulo Interpolación En la práctica de la ingeniería se utilizan mucho las tablas de datos. para n puntos de datos. % hallando el numerador de L xp(k)=[]. el polinomio de Lagrange es: (1) Una forma mucho más sencilla de ver la ecuación 1 es en forma de código. L=[]. POLINOMIOS DE LAGRANGE Para ilustrar la interpolación por polinomios de Lagrange considérese un conjunto de datos de tres puntos. Lo mismo sucede con los demás puntos. El polinomio interpolador en este caso es: Obsérvese que en el punto sólo queda el primer término con su numerador y denominador cancelándose entre sí. % numerador: polinomio de x d1=(x(k)-x(r)).% denominador de L den=den*d1. La idea básica de la interpolación es hallar un polinomio o función que cumpla con pasar por todos los puntos de un conjunto de datos. En la mayoría de los casos el dato necesario no se encuentra explícito en la tabla sino entre dos valores de ésta. por lo que se ve que el polinomio cumple con la condición de pasar por todos los puntos de datos. % termino de lagrange for r=1:length(x) if r~=k xp=x. y poder estimar los valores entre ellos por medio del polinomio. En general. el cual se muestra escrito para MATLAB en las siguientes líneas: p=0. como en el caso de las tablas de vapor saturado en la termodinámica. (6.(3.(4.1)...+ -----.m.------.(2.(5.43 120 24 24 24 20 ¿Deseas Graficar [Y]/[N]? : Y Fin del Programa 114 .m Solución: Al ejecutarse el script obtenemos lo siguiente: *** POLINOMIO DE LAGRANGE *** Vector X= [1 2 3 4 5 6] Vector Y= [1 3 -1 0 3 2] Pl(x)= 5 4 3 2 11 x 47 x 371 x 1321 x 1709 x ----.2)}.. A continuación se muestra un ejemplo para ilustrar la implementación del código anterior: Ejemplo: Se tiene el conjunto de datos {(1.0).3).+ -----.-1). Muestre el polinomio interpolador de Lagrange y la gráfica que se calcula ejecutando el script polLAGRANGE.3).Capítulo 6 Dicho código está guardado en el CD como un script de nombre polLAGRANGE.----. para dos nodos se llama diferencia dividida de orden uno a: Mientras que la diferencia dividida de orden n se obtiene por recurrencia a partir de las anteriores como: El polinomio de Newton en diferencias divididas es entonces: El programa siguiente calcula las diferencias divididas. for i=1:n-1 for j=n:-1:i+1 y(j)=(y(j)-y(j-1))/(x(j)-x(j-i)). end fprintf('\n').8330 -0.3219 -0. Los coeficientes del polinomio que hay que poner en la forma de Newton serían los elementos de la columna vertical izquierda: x = y = -4 -2 0.4546 0. el resultado al aplicarse el código anterior puede verse en las líneas siguientes.8330 115 .4f'.9093 2 0.7568 -0.y(j)).7568 -0. fprintf(' %10.0000 -0.Guía Práctica MatLAB POLINOMIO DE INTERPOLACIÓN POR DIFERENCIAS DIVIDIDAS DE NEWTON Para una cantidad mayor de nodos es mucho más sencillo utilizar el método clásico de las diferencias divididas de Newton.9093 0. Recordemos su definición.0537 0. end Para los datos en x e y dados abajo.0000 0 -0.4546 0.0537 4 0 0.3219 -0. 3).1).2)}.t). Muestre el polinomio interpolador de Newton por diferencias divididas y la gráfica que se calcula ejecutando el script newtoninterp.y. 116 .(2.(5.(3. >> t=1:0.m Solución: Ingresando los vectores de datos y aplicando la función.(6. >> y=[1 3 -1 0 3 2]. >> p = newtoninterp(x.3).(4.1:6.Capítulo 6 Ejemplo: Se tiene el conjunto de datos {(1.-1). tendremos: >> x=[1 2 3 4 5 6].0). Guía Práctica MatLAB Comparando las gráficas obtenidas por los dos métodos de interpolación: Lagrange y Newton. tendremos que el error entre ambos es mínimo: 117 . . . A partir de la matriz A y el vector b: Se forma la matriz aumentada: Esta matriz aumentada representa la ecuación vectorial 119 .. lo primero que debemos hacer es escribirlo en la forma matricial Ax=b. Pero además usaremos una combinación de los dos procedimientos. Puede representarse mediante una matriz . Al igual que en la sección anterior usaremos tanto las rutinas internas de MATLAB como rutinaspropias creadas por el usuario. Comencemos con las fáciles y sencillas rutinas internas de MATLAB: Si queremos resolverun sistema de ecuaciones lineales.. Definición Un sistema de ecuaciones lineales simultáneas de la forma: . . asimismo las que se encuentran disponibles en la guía básica de MATLAB que se encuentra en la página del curso. .7 Capítulo Resolución de Sistema de Ecuaciones Lineales En esta parte veremos cómo usar MATLAB para resolver sistemas de ecuaciones lineales. De los varios métodos explicados hasta aquí para la solución de sistemas lineales usando MATLAB. con la que se aproximan todos los resultados a la fracción irreductible más cercana. primero definimos la matriz A y el vector b. Sabiendo que . realizamos en MATLAB lo siguiente: >>x=inv(A)*b Con lo cual obtenemos: x = 3. principalmente porque llega a la solución sin necesidad de hallar la inversa de la matriz A (en realidad se usa factorización QR). es conveniente expresar los resultados de esta misma manera para evitar la pérdida de cifras significativas. se usa en MATLAB para obtener la solución delproblema . así: >> A=[2 -1 -1. 2 3 -1.15]. En MATLAB esto se puede hacer con la instrucción format rat. consideremos el sistema de ecuaciones: Este sistema se puede escribir en la forma con: Para resolverlo en MATLAB. Por último.Capítulo 7 Por ejemplo. >>b=[2.2857e+000 Otra manera de llegar a esta solución es escribiendo manera más sencilla de hacerlo en MATLAB es escribiendo: en lugar de inv(A). sin embargo. 120 . sólo resta decir que en el caso de trabajar con matrices y vectores de componentes enteras o racionales.6. la >> x = Ab Donde el símbolo \ (división a izquierda).0000e+000 3. Se puede observar que el uso de este último método mejora la velocidad de cálculo de MATLAB en cerca de un 50%. lo que desde el punto de vista computacional es bastante ventajoso. 1 2 3]. el que más se usa es el último.1429e+000 1. Guía Práctica MatLAB Para nuestro ejemplo: >> format rat >> x = A\b Produce el resultado: x = 22/7 1 23/7 Que es la solución exacta del sistema lineal. i y v: . y Podemos expresar el juego de ecuaciones como: 121 . considere el circuito eléctrico mostrado en la figura siguiente: Por la Ley de kirchoff. voltajes y potencial delos elementos del circuito. la corriente de la resistencia R es . Definiendo R. Por ejemplo. donde las ecuaciones de malla que describen a este circuito son las siguientes: A partir de las ecuaciones de malla se pueden obtener todas las corrientes. APLICACIÓN A LOS CIRCUITOS ELÉCTRICOS Muchos problemas pueden ser descritos mediante sistemas de ecuaciones lineales. podemos dividir en mallas adecuadamente. Por ejemplo. y en el CD su implementación en MATLAB con el nombre Elim_Gauss. OPERACIONES ELEMENTALES DE REnGLÓN Como la matriz aumentada representa un sistema de ecuaciones simultáneas. En las siguientes secciones se explican los siguientes métodos: • Eliminación gaussiana (Gauss) • Gauss-Jordan • Montante ELIMINACIÓN GAUSSIANA Eliminación Gaussiana aplica operaciones de renglón para resolver un sistema de ecuaciones simultáneas. • Multiplicar un renglón por una constante y sumarlo a otro renglón. su pseudocódigo se presenta a continuación. es posible realizar las siguientes operaciones elementales de renglón manteniendo las igualdades de las ecuaciones representadas: • Multiplicar un renglón por una constante.Capítulo 7 Que puede representarse mediante la matriz aumentada: La cual puede resolverse directamente como es en el caso anterior o utilizando los métodos de iteración que a continuación conoceremos. Los métodos de soluciones de sistemas de ecuaciones aplican estas operaciones sobre la matrizaumentada en forma ordenada y repetida. 122 .m. para cada renglón empezando por el último renglón. >> x=Elim_Gauss(A.1379 123 .5172 0. La solución al sistema de ecuaciones queda en la última columna de la matriz aumentada (línea 9). hace el pivote igual a 1... >> b=[20... Primero.0. Segundo. para cada renglón empezando por el primer renglón. A continuación.. 0 -5 20].b) x = 1.5517 0. y hace ceros arriba del pivote (líneas 5 a 8). -5 15 -5. Eliminación Gaussiana opera en dos fases. se presenta la solución del ejemplo del circuito eléctrico mediante eliminación Gaussiana.0]. hace ceros en los elementos debajo del pivote (líneas 3 y 4).Guía Práctica MatLAB Para cada renglón se define el elemento de la matriz aumentada como el pivote.. cuya salida se muestra a continuación: >> A=[15 -5 0. De donde se tiene que las corrientes de malla son: Demostramos el resultado aplicando la función Elim_Gauss. cuyo código está implementado en el CD con nombre Gauss_Jordan.m.Capítulo 7 METODO DE GAUSS – JORDAN En las líneas siguientes se muestra el seudocódigo método Gauss-Jordan. En el método de Gauss-Jordan primero se hace el pivote igual a 1 (línea 3). A continuación se muestra la solución del ejemplo del circuito eléctrico mediante el método de Gauss-Jordan. La solución al sistema de ecuaciones queda en la última columna de la matriz aumentada en la última línea. pero primero hace el pivote igual a 1. 124 . y luego hace ceros en toda la columna del pivote. después se hacen cero los elementos arriba y abajo del pivote líneas 4 a 6). El método de Gauss-Jordan es similar al de la eliminación Gaussiana. >> b=[20. Para resolver este problema se pueden intercambiar renglones para colocar un elemento diferente de cero en la diagonal principal. causando una división entre cero. cuya salida se muestra a continuación: >> A=[15 -5 0. 0 -5 20].b) x = 1...0.1379 PIVOTE MÁXIMO Los algoritmos presentados pueden encontrar el problema de que el pivote sea cero.0].. >> x=Gauss_Jordan(A.. A continuación se presenta la implementación del seudocódigo de Gauss-Jordan donde se escoge el elemento de máximo valor absoluto como pivote.5517 0.. -5 15 -5.. 125 .Guía Práctica MatLAB Demostramos el resultado aplicando la función Gauss_Jordan.5172 0. m y se encuentra en el CD. >> x=Montante(A.0].. -5 15 -5.1379 126 .b) x = 1. donde se realiza la división entre el determinante. aplicando tendremos la siguiente salida: >> A=[15 -5 0.Capítulo 7 Método MONTANTE El método de Montante resuelve un sistema de ecuaciones simultáneas haciendo operaciones que mantienen el número de decimales que tiene los datos originales hasta el último paso. >> b=[20...5172 0.0... Ejemplo del método Montante: A continuación mostramos el seudocódigo del método montante: El código fue implementado con el nombre Montante.5517 0.. 0 -5 20]. . >> Inversa=Montante(A. y Montante pueden ser utilizados para encontrar la inversa de una matriz. -5 15 -5.0276 0.0552 MéTODOS ITERATIVOS: JACOBI Dado un sistema de ecuaciones de la forma: 127 .. La inversa es la última n columnas de la matriz aumentada: Demostrando el cálculo de la inversa por el método Montante tendremos: >> A=[15 -5 0. En este caso. Gauss-Jordan.0828 0..0207 0.Guía Práctica MatLAB MATRIZ INVERSA Los métodos de eliminación Gaussiana.0069 0...0207 0. la matriz aumentada sería la matriz original y la matriz identidad.I) Inversa = 0.0759 0.0069 0.0276 0. >> I=eye(3). 0 -5 20].. además puede usarse para obtener los valores de xi siguientes en función de los valores de xi actuales. Si definimos la matriz T y el vector c de la siguiente manera: Se pueden escribir las ecuaciones recursivas en forma matricial: En las siguientes líneas se muestra el seudocódigo del método de Jacobi.m .Capítulo 7 Si se despeja la variable de cada ecuación se obtiene lo siguiente: El sistema anterior puede usarse como una fórmula recursiva. El código de este método se encuentra en el CD con el nombre 128 Jacob. …. y la regla debe aplicarse en orden para =1. Las ecuaciones recursivas se pueden escribir en forma matricial de la siguiente manera: Donde representa la fila de la matriz .2.n A continuación se muestra el seudocódigo: 129 .Guía Práctica MatLAB Métodos Iterativos: Gauss-Seidel En las ecuaciones recursivas es posible utilizar inmediatamente los valores obtenidos para calcularlos siguientes valores. es decir: El utilizar los valores de xi que se acaban de calcular para calcular los siguientes valores permite que el método converja más rápidamente a una solución. >> X0=[0.3333 0 0.X0) c = 1.5509 0.1379 Iter = 5 En general. converge en menos iteraciones a la solución correcta. 130 .3333 0 1.0].0].b.2500 0 0.3333 0 0 T = X = 0 0.5170 0. >> b=[20.b.3333 0 0.5516 0.2500 0 0.0.3333 0 0 T = X = 0 0.-5 15 -5.5170 0.1377 Iter = 9 Por Método de Gauss-Seidel: >> [X.0. es decir.Capítulo 7 Ejemplo de Método de Jacobi y Método de Gauss-Seidel Para el ejemplo del circuito eléctrico se tiene que: Y aplicando las funciones creadas para ambos métodos tenemos lo siguiente: >> A=[15 -5 0.0 -5 20]. % vector de valoresiniciales Por Método de Jacobi: >> [X.X0) c = 1. Gauss-Seidel es más rápido que Jacobi.3333 0 0.Iter]=Jacob(A.3333 0 0.3333 0 1.Iter]=Gauss_Seidel(A. m. Resuelva (si es posible) los siguientes sistemas lineales usando los métodos de Jacobi y GaussSeidel. 2. compruebe sus resultados reemplazando las soluciones en las ecuaciones. 131 . Dado el siguiente sistema de ecuaciones: Y tomando como punto inicial lleve a cabo 4 iteraciones de Jacobi y de Gauss-Seidel. 3. En todos los casos verifique si los teoremas garantizan convergencia de los métodos.Guía Práctica MatLAB Ejercicios Propuestos 1.m. implementados anteriormente y que se encuentran en el CD. Dado los siguientes circuitos: Utilizando mallas y Ley de Kirchoff. 4. plantear las ecuaciones de cada circuito que representan a su solución y resolverlos utilizando los métodos de Gauss-Seidel y Jacobi. resolver si es posible el siguiente sistema de ecuaciones lineales. Gauss_Jordan. Aplicando la función Elim_Gauss.m y Gauss_Seidel. compare los resultados. Compruebe sus resultados realizando la multiplicación AA–1. 132 .Capítulo 7 5. utilice la opción de pivote máximo. Dada la siguiente matriz: Encuentre su inversa mediante Gauss-Jordan y Montante. En ambos casos. Use los métodos de Jacobi y Gauss-Seidel para resolver los sistemas: 6. comienza con un intervalo donde se sabe que existe una raíz de la ecuación.8 Capítulo Solución de Ecuaciones No Lineales En este capítulo usaremos el programa MATLAB con el fin de resolver ecuaciones no lineales de manera rápida y fácil. Definición del Problema Dada una ecuación de una variable independiente x: (1) Se desea encontrar el valor o valores de x que hacen que se cumpla la igualdad anterior. A los valores de x que hacen que se cumpla la igualdad se les denomina raíces de la ecuación 1. entonces debemos descartar una de ellas. como rutinas creadas por el usuario que nos llevarán paso a paso a lasolución de problemas. f es una función no lineal de x. donde en general. es decir. entonces es necesario conocer el algoritmo general del método de la bisección: 133 . que no puede expresarse como x donde y son constantes. Método de la Bisección También conocido como el método de las bisecciones sucesivas. podemos deducir que la raíz se encuentra en una de las dos mitades. Se usarán tanto las herramientaspropias de MATLAB. y por lo tanto se debe cumplir que: (2) Este intervalo se divide a la mitad calculando: Al encontrar el punto medio del dominio de x. que se encuentra en el CD e ingresando los datos solicitados. obtenemos la siguiente gráfica y resultado en pantalla: 134 .Capítulo 8 Método de la Bisección Ejemplo: Determine valores aproximados de las soluciones positivas de la ecuación.m. Solución: Utilizando el archivo met_bisección. 812500 1.677368 14 0. 135 .683594 0.671875 0.677231 0.677277 Raiz= 0. tal como podemos observar en la gráfica anterior obtenida.000000 2 0.677002 0.677368 0.671875 0.677734 10 0.Guía Práctica MatLAB ***Metodo de la Bisección f(x)= 0.677185 0.674805 0.677277 0.671875 0.718750 0.250000 0.5*exp(x/3)-sin(x) x1= 0.625000 1.812500 4 0.677734 12 0.677185 0.677368 13 0.695313 7 0.0001 Los resultados son: k= X1= X= X2= 1 0.718750 5 0.676270 0.625000 0.677185 0.674805 0.677734 9 0.625000 0.676270 0.625000 0.671875 0.671875 0.677002 0.695313 0.677002 0.677231 Desea ver gráfica? [y]/[n]: y fin de programa Se observa que para la iteración número 14 la raíz aproximada cumple con el margen de tolerancia requerida.683594 8 0.677734 11 0.000000 3 0.677734 0.25 x2= 1 Tolerancia= 0.718750 6 0. y si se escoge en ese intervalo. La tolerancia es de . y ésta se utiliza O lo que es lo mismo: En la figura siguiente se muestra un ejemplo de la forma en que trabaja el método de punto fijo. la ecuación como una regla recursiva. Calcule las 3 raíces de la siguiente ecuación no lineal: Donde se sabe que las raíces se encuentran en los intervalos siguientes: [1 . [2. 4] y [4 .25 . se transforma a la forma . es decir. 5]. pero no necesaria. si: Para todo ese intervalo. Método de Punto fijo (iteración simple) En el método de punto fijo. El método de iteración simple converge a una raíz de la ecuación si y son continuas en un intervalo alrededor de r. Nótese que ésta es una condiciónsuficiente.Capítulo 8 Ejercicio propuesto: 1. Método de Punto Fijo 136 .25]. 2. Resuelva la ecuación parafutilizando el método de punto fijo para los siguientes casos: a) b) Solución: Si queremos resolver el problema empleando el método de punto fijo debemos llevar la ecuación a la forma: .Guía Práctica MatLAB A continuación mostramos el pseudocódigo de este método: Ejemplo: El factor de fricción para los fluidos turbulentos en una tubería está dado por: Llamada correlación de Colebrook. Como queremos encontrar un punto fijo graficamos la función y la recta y=x para tomar un valor inicial. y así: Luego la función: Puede ser una posible función de iteración de punto fijo para . donde es el número de Reynolds. es la asperezade la superficie de la tubería y D es el diámetro de la tubería. Empecemos con el caso (a) donde: 137 . Para ello llamamos . 0850701544 Luego el valor para f lo obtenemos de: Lo mismo hacemos para resolver el caso b. De la gráfica anterior podemos ver que la función gcumple las condiciones del TeoremaFundamental de Punto Fijo (¿dónde y por qué?). Para graficar utilizamos las siguientes instrucciones: >> >> >> >> fplot('1.0848521150 1.025+3.0.0850811625 1.1167*10^(-4))'. Si aplicamos esta función obtendremos lo siguiente: >>met_puntofijo('1. cuyo código se encuentra en el CD.0893766600 1.0848521150 1. 138 . 0 1 2 3 4 x g(x) 1.m.1167*10^(-4))'.14-2*log10*(0.0000000000 1.0893766600 1.025+3.0850811625 1.1.0850695674 1.[-2 2 -2 2]) grid on hold on fplot('1*x'.0850701544 La aproximación del punto fijo es 1.[-2 2 -2 2]) Donde hold on permite graficar varias funciones en un mismo sistema coordenado. Para emplear el método tomaremos lamisma tolerancia para la distancia entre las aproximaciones y emplearemos una funciónde punto fijo para MATLAB que seha creadoen el editor por el usuario de nombre met_puntofijo.0850695674 1.14-2*log10*(0.Capítulo 8 Verifiquemos la representación de gráficamente.000001) it. como se muestra en la figura siguiente: Método de Newton-Rapson De la figura podemos ver que: De donde tenemos la regla recursiva: O lo que es lo mismo: Tomando la idea de la condición de convergencia de iteración simple. por lo tanto. toma como una mejor aproximación a la raíz en la intersección de la línea tangente a y su intersección con el eje x. El método asume que la función es aproximadamente lineal en ese valor y. la condición para NewtonRapson es la siguiente: Que es equivalente a: 139 .Guía Práctica MatLAB Método de Newton-Rapson El método de Newton-Rapson se debe inicializar en un valor de x cercano a una raíz. obtenemos lo siguiente: ***Metodo de Newtón-Cotes f(x)= pi*sin(2*x)+exp(-x/2)*cos(x) x= 3.407304 3. . pero no necesaria.174280 Desea ver gráfica? [y]/[n]: y fin de programa 140 .5 Tolerancia= 0.000835 3.0001 Los resultados son: k= F(X)= X= dF(X)= 1 1.Capítulo 8 De nuevo.879230 2 -0. Mostramos el pseudocódigo: Ejemplo: Calcule las 3 raíces de la siguiente ecuación no lineal: de y tolerancia de .369840 3 0.500000 4.110338 6.901253 3.m que se encuentra en el CD.174280 6.378647 Raiz= 3. para un valor inicial Solución: Aplicando el script met_newton. esta es una condición suficiente. Método de la secante El método Newton-Rapson requiere evaluar f_(x). Por lo tanto. la derivadase aproxima de la siguiente manera: Sustituyendo en la ecuación recursiva de Newton-Rapson se obtiene: O lo que es lo mismo. el seudocódigo será: 141 .Guía Práctica MatLAB Gráfica de la función y de la solución de la ecuación no lineal. En el método de la secante. 174149 3.130346 3.279696 3.130346 4 0.177753 3.901253 3.500000 2.5 xant= 2.174153 3.0001 Los resultados son: k= F(X)= X= Xant= 1 1.174149 Desea ver gráfica? [y]/[n]: y fin de programa 142 . teniendo en cuenta que inicialmente met_secante.177753 5 -0.Capítulo 8 Ejemplo: Resolviendo el ejemplo anterior.500000 3 0. tendremos lo siguiente: ***Metodo de la Secante*** f(x)= pi*sin(2*x)+exp(-x/2)*cos(x) x= 3.000026 3.5 Tolerancia= 0.022980 3.500000 2 -0.174153 Raiz= 3.m que se encuentra en el disco.000000 3. aplicando el script . Supóngase que se desea encontrar los valores de x e y que hagan que se cumplan las siguientes dos ecuaciones no lineales: Dado un punto inicial . anteriores pueden expresarse en forma matricial de la siguiente manera: y . Las ecuaciones (4) Donde: (5) (6) 143 . La ecuación del plano tangente a es la siguiente: Donde: y De la misma manera. el método Newton-Rapson toma los planos tangentes a . y su intersección con el plano como el siguiente punto para continuar el método en y la siguiente iteración.Guía Práctica MatLAB Newton-Rapson para funciones de más de una variable El método de Newton-Rapson puede generalizarse para funciones de dos variables de la siguiente manera. la ecuación del plano tangente a es la siguiente: Donde: (1) (2) y Sustituyendo z=0 en las ecuaciones 1 y 2 se obtiene el siguiente sistema de ecuaciones: Donde se ha abreviado como . y de la misma manera para . 7083 0.7071 0.7071 .7500 0.7500 0.7083 0.Capítulo 8 De las ecuaciones 4.5 y 6 se obtiene la regla recursiva para el método Newton-Rapson para dos variables: Donde y se obtienen de resolver el sistema de ecuaciones: Ejemplo de dos variables Encontremos una raíz del siguiente sistema de ecuaciones no lineales: Obtenemos las derivadas parciales: El sistema de ecuaciones es: Tomemos : De donde Δx = –1 y Δy = 0 por lo tanto: Iterando tendremos los siguientes valores: x y 144 2 1 1 1 0. y)= x^2+y^2-1 f2(x. Teóricamente.0001 Max. Encuentre una raíz de: en el intervalo [5. nos ayudaremos del archivo script newtonnl. 3.0000000 n=2 x=1.7083333 y=0. El polinomio tiene ceros 1.7500000 n=4 x=0. 5.7500000 y=0.7071078 y=0.25 y 50. que ejecutando en la ventana de comandos e ingresando lo requerido por el programa nos mostrará lo siguiente: >> newtonnl Ingrese las funciones f1(x.5 .7.Guía Práctica MatLAB Para demostrar estos resultados.7083333 n=5 x=0.m.5 y 7.5].6. resuelva la ecuación las raíces más cercanas a 4.5. .10. Encuentre una raíz positiva de significativa. El punto debería ser en este caso un buen punto inicial para calcular cualquiera de los ceros pequeños por medio de la iteración de Newton. que sea exacta hasta la segunda cifra 2.3 y -98.0000000 y=1.0000000 n=3 x=0.y)= x-y Ingrese valores iniciales: X0= [2.Iter= 100 n=1 x=2. . Encuentre 4. Use el método de Newton para calcular la única raíz de: Use una variedad de valores de B=1. Escriba un programa que ejecute el método de Newton. Entre las elecciones del punto de partida tome y explique el comportamiento anómalo. el métodode Newton debe converger para cualquier valor de y B.1] Tolerancia= 0.001 y repita el ejercicio. Cambie -36 por -36.7071078 Ejercicios propuestos 1. 145 .0000000 y=1. 7. Comenzando en (0. 8. Resuelva por el método de Newton para sistemas no lineales el siguiente sistema: Use valores iniciales y .Capítulo 8 6. 1). resuelva por el método de Newton para sistemas no lineales con el sistema: Explique los resultados. 0. Use el método de Newton para encontrar una raíz del sistema no lineal: 146 . Considerando el siguiente caso: Dada una función se desea calcular la integral definida: Para valores dados de y (1) . Todos los métodos que veremos se basan en evaluar la función para valores de x y aproximar el área bajo la curva mediante estos puntos. es decir que es constante para toda . El método más sencillo consiste en aproximar el área bajo la curva mediante rectángulos. como se muestra en la figura siguiente: El área del i-ésimo rectángulo es: Si asumimos que la función va ser evaluada en puntos uniformemente espaciados. entonces podemos escribir como: El área total es entonces igual a: 147 .9 Capítulo Integración Los métodos de integración numérica nos permiten integrar funciones que están definidas analíticamente o de las que sólo conocemos su tabla en un número finito de puntos. 148 . cuyo código mostramos a continuación y ejecutando. . h=x(2)-x(1). obtenemos: x=linspace(0.50). asumimos que el espaciamiento de los datos es uniforme e igual a h. y=sin(x). se pide calcular la integral para un dominio Solución: Implementando un script de nombre I_trap.m. por lo tanto: Como ejemplo consideramos la función con 50 nodos.Capítulo 9 Método de los Trapecios Podemos obtener una mejor aproximación al valor de la integral definida si aproximamos el área mediante trapecios. An=0. n=length(x)-1.pi. como se muestraen la figura siguiente: El área del i-ésimo trapecio es: De nuevo. 2) y R(2. podemos obtener una mejor estimación del valor de la integral utilizando R(1.1).A) >> I_trap % ejecutando Area= 1.). Con cada valor de R podemos obtener una estimación mejor asumiendo que el error es proporcional al cuadrado del paso utilizado mediante la fórmula: 149 . Dado un valor inicial de h. etc. se calcula la integral de f(x) para valores de paso de h. h/8. etc. end A=(h/2)*(y(1)+y(n+1)+An). llamémosle R(3.9993 El usuario puede utilizar y resolver diferentes integrales definidas. (que es equivalente a que el número de trapecios sea igual a n. Podemos calcular un valor estimado dela misma manera. 2) de la siguiente manera: De lo anterior.1). fprintf('Area=%7. podemos obtener una mejor estimación del valor de la integral asumiendoque el error es proporcional a h2: Si eliminamos la constante C podemos despejar el valor estimado para obtener lo siguiente: Donde le hemos llamado R(1. Método de Romberg Suponga que se calcula numéricamente la integral de para un valor h1 = h. propia del programa o de la función trap_comp. Al valor de estas integral les llamamos R(1. llamémosle R(1. utilizando la función trapz. Si después se calcula la integral para h2 = h1/2. obteniendo que: Ahora.1). Ahora.m que se encuentra en el disco. h/4. R(4. 8n. 4n. R(3. etc.1).1) al valor obtenido.4f\n\n'.. h/2. podemos deducir el método de Romberg.1). 2n. supongamos que obtenemos laintegral de para h3 = h/4. R(2. llamémosle R(2.1).Guía Práctica MatLAB for k=2:n An=An+2*y(k).2) al valor estimado. m.5) R(2.0944 1.9742 2.1) El algoritmo continúa evaluando valores de R(i.000006 Método de Simpson 1/3 El método de Simpson 1/3 aproxima el área bajo la curva de f(x) mediante parábolas. El Método de Romberg se utiliza junto con el método de trapecios para obtener una buena aproximación.3) R(2.0046 1. podemos calcular la integral anterior. cuyo resultado luego de ejecutarlo en la ventana de comandos mostramos: f(x)=sin(x) Extremo Inferior a=0 Extremo Superior b=pi Cifras de Aproximacion n=4 An = 0.8961 2.1) R(3. como se muestra en la figura siguiente: 150 .9986 2.0000 0 0 0 2.1) R(1.2) R(3.0000 Integral: I= 2. que se encuentra en el disco.Capítulo 9 Los valores de R pueden ordenarse en una tabla al estilo de diferencias divididas como se muestra a continuación: R(1.0003 0 0 1.3) R(1.2) R(5.1) hasta que la diferencia del valor absoluto entre las últimas dos estimaciones de mayor orden obtenidas sea menor que una tolerancia que escoge el usuario.2) R(1.1) R(2.2) R(2. Ejemplo: Con el script Metodo_Romberg.4) R(1.4) R(3.3) R(4.5708 2.0000 0 1.1) R(4. y xi+1 puede obtener mediante el polinomio de interpolación de Newton: Donde: Nótese que los coeficientes a1. a2 y a3 varían de segmento a segmento y. xi .Guía Práctica MatLAB Se hace pasar un polinomio de segundo orden por cada tres puntos. se traslada la curva a x=0 como se muestra en la figura siguiente: Por lo tanto. que el polinomio P2(x) es diferente para cada intervalo de tres puntos. por lo tanto. El polinomio definido por los puntos xi–1 . Para simplificar el cálculo del área bajo la curva en el intervalo de xi–1 a xi+1 . esto es Ai . el área Aj está dada de la siguiente manera: Entonces el área por el método de trapecio es: 151 . 50) I = 0.Capítulo 9 Por lo tanto.1.1667 152 .= 4 El valor de la integral aproximada es: 0.0453e-007 Método de Simpson 3/8 El método de Simpson 3/8 aproxima el área bajo la curva de f(x) mediante polinomioscúbicos. obtendremos lo >>[I. Para los puntos xi . xi+1 .1667 E = 1.E]=met_simpson13('x^5'. xi+3 el área bajo la curva es: Y el área total es: Del ejemplo anterior y aplicando el script met-simpson38. tenemos: ***Metodo de Simpson 3/8*** f(x)= x^5 a= 0 b= 1 #Cifras Signif Exac. xi+2 .0.m. el área total es (Método de Trapecio Compuesto): Ejemplo: Utilizando el método de simpson 1/3 calcular la siguiente integral: Solución: Aplicando la función siguiente: met_simpson13. Por cada cuatro puntos se hace pasar un polinomio de tercer orden.m que se encuentra en el disco. usamos el siguiente script de nombre cuadrat.Iq. Las formas más sencillas de estas dos funciones requieren tres argumentos. pero eso sí. El primero es el nombre (entre apóstrofos) del m-file función que devuelve un vector de valores de f(x) cuando se le proporciona un vector de valores de entradas.a.a. Iq=quad('sqrt'. ambos exhiben un mensaje de advertencia si detectan una singularidad. Iq8=quad('sqrt'.I.5-a^1. tendremos lo siguiente: Extremo Inferior: 0 Extremo Superior: 5 Iq8 = 7. b=input('Extremo Superior: ').4536 Analitico= 7.a.453556 7. A continuación mostramos la sintaxis de estos: var = quad('nombre_funcion'.b).b) Ejemplo: Calcular la integral de: Solución: Analíticamente el resultado es el siguiente: A fin de comparar qué tanta aproximación tiene el resultado de las funciones de cuadratura. devolviendo de todos modos una estimación de la integral. I=(2/3)*(b^1.a. La primera utiliza una forma adaptativa de la regla de Simpson y la segunda usa la regla de Newton-Cotes adaptativas de 8 paneles. La función puede ser una creada por el usuario o la que está definida en el programa.453560 Numerico: 7. fprintf('Analitico= %f\nNumerico: %f\t%f\n\n'. esta última es la mejor para manejar funciones con cierto tipo de singularidades.Guía Práctica MatLAB Funciones de Cuadratura MATLAB cuenta con dos funciones de cuadratura para realizar integración numérica de funciones: quad y quad8.5).b) var = quad8('nombre_funcion'.453556 153 .m a=input('Extremo Inferior: '). el segundo y tercer elemento son los límites de integración a y b.b).Iq8) Ejecutando el programa para los valores solicitados. 5m escriba un programa que integre el perfil de velocidad para calcular la velocidad de flujo medio en el tubo. Gráfica del perfil de velocidad de un oleoducto: 154 .Capítulo 9 Ejercicio: Un sistema de tubería fluye petróleo. Con n=8 y ro=0. El petróleo que está en contacto con las paredes no se está moviendo. mientras que el petróleo que está en el centro del flujo se está moviendo con velocidad máxima: y cuya ecuación se describe a continuación: Entonces la velocidad media en el tubo es la integral del área de perfil de velocidad.lo cual se demuestra que es: Donde ro es el radio del tubo. donde la fricción en la tubería origina un perfil de velocidades en el petróleo al fluir. ya sean físicos o no físicos. solución exacta y solución de series finitas. razón de crecimiento de bacterias (ciencias biológicas). Dentro de estos últimos. y en disciplinas científicas y no científicas. segundo y cuarto orden. circuitos eléctricos simples (ingeniería eléctrica). etc.10 Capítulo Solución de Ecuaciones Diferenciales Ordinarias Una ecuación diferencial ordinaria lineal de la forma: con se puede utilizar como modelo matemático de una gran variedad de fenómenos. Existe una serie de métodos para resolver este tipo de ecuaciones. razón de descomposición radioactiva (física atómica). tasa de crecimiento de una población (estadística). dentro de los que podemos mencionar: separación de variables. problemas de fuerza (ingeniería mecánica). Método de Euler Dada una ecuación diferencial ordinaria de la forma: se hace la aproximación: Tomando . de donde se tiene que: se obtiene la regla recursiva del método de Euler: Se requiere una condición inicial: Entonces el término para el cálculo de la solución es: 155 . Ejemplo de dichos fenómenos incluyen problemas de transferencia de calor (termodinámica). veremos los métodos de Euler y Runge-Kutta. h(k)).y]=met_Euler(y0. plot(t. for k=1:length(h) [t. k=k+1.y) grid on hold on end te=t0:0. tf=5.1'. end Donde: fcn.'h=0. Ejemplo: Sea la siguiente ecuación diferencial: Obtener el resultado por el método de Euler para y compararla gráficamente con la solución exacta . ye=1000*exp(te/10).ye.y) dy=y/10. h=[1 0.Capítulo 10 Diseñamos una función que nos permita solucionar numéricamente una EDO empleando dicha representación.1].m t0=0.'-r') legend('h=1'. y0=1000. k=1. y(k+1)=y(k)+h*fcn(t(k).y(k)). Luego creamos el siguiente archivo script de nombre sol1_euler.'h=0. es la función que representa a la ecuación diferencial y deberá ser definida cada vez que se desee resolver un problema diferente.1:tf. Solución: Creamos en el editor la función que representará a la ecuación diferencial: function dy=fcn(t.5'.tf. Esta función tendrá la siguiente sintaxis: % Metodo de Euler function [t. A las instrucciones anteriores le dimos el nombre de met_Euler.m. y(1)=y0.5 0.h) t=t0.t0. while t(k)<tf t(k+1)=t0+k*h.tf.'Exacta') hold off 156 . plot(te.y]=met_Euler(y0.t0. Guía Práctica MatLAB y cuando ejecutamos dicho script obtendremos lo siguiente: Método de Euler Modificado La mejora del método de Euler es expresado como: El código implementado en MATLAB para este método.y(k)). k=1. el cual se encuentra en el CD.t0.h) t(1)=t0.5*(K1+K2). y(k+1)=y(k)+0.tf. while t(k)<tf t(k+1)=t0+k*h. K2=h*fcn(t(k+1).m y se muestra a continuación. y(1)=y0. end Al igual que en el método de Euler. tiene por nombre met_EulerMOD. 157 . debemos definir la función fcn que representa a nuestra ecuación diferencial.y]=met_EulerMOD(y0. K1=h*fcn(t(k). % Metodo de Euler Modificado function [t.y(k)+K1). k=k+1. *sin(10. [t1.h). para h=0. h=0.0610329.te.^-2).y2. tf=3. [t2.tf.1:tf.y1]=met_Euler(y0./te). ye=100*(te.0610329.Capítulo 10 Ejemplo: Obtener la solución aproximada del siguiente problema.01.'Euler Modificado'.ye) grid on title('h=0.14) legend('Euler'. plot(t1. y0=1.h).m.001'.t0.'Exacta') El resultado de ejecución del script anterior es: 158 .y1. te=t0:0.'fontsize'.t0.01: Y compararla gráficamente con la solución exacta: Solución: Creamos un script de nombre sol2_euler. cuyo contenido es: t0=1.tf.y2]=met_EulerMOD(y0.t2. while t(k)<tf t(k+1)=t0+k*h. t(1)=t0. Los valores de estos términos constantes se encuentran igualando la fórmula de Runge Kutta de orden p al algoritmo de Taylor de orden . K2=fcn(t(k)+h/2. aquella que usa la ponderación de 2. 3 y 4 aproximaciones. La derivación de estos métodos se acompaña de la suposición de un algoritmo particular con ciertos coeficientes indeterminados. Las más comunes en aplicación son las de orden 2. Método de Runge Kutta Los métodos de Runge Kutta utilizan indirectamente el algoritmo de Taylor.tf. A continuación mostramos la forma de 4to orden: Implementando una función de nombre código será: sol_RK4. solucione numéricamente la siguiente ecuación: De a . las cuales se necesitarían para el uso directo del algoritmo por series de Taylor. k=k+1. K4=fcn(t(k+1)+h.y(k)+0. con h=0.m en MATLAb que resuelva dicho algoritmo.5*h*K2).y(k)+0. k=1. es decir. end 159 . K1=fcn(t(k).y]=sol_RK4(f. En general.Guía Práctica MatLAB Ejercicio: Utilizando el método de Euler.t0. estos métodos evalúan en más de un punto en la proximidad de en lugar de evaluar derivadas de .25 y .5*h*K1).3 y 4.y(k)+h*K3).y(k)). y(k+1)=y(k)+(h/6)*(K1+2*K2+2*K3+K4).y0. el % Metodo de Runge Kutta 4 function [t. y(1)=y0.h) % f: es una funcion referencial fcn=f. K3=fcn(t(k)+h/2. Capítulo 10 Resolviendo el último ejemplo con este método y realizando las comparaciones con los métodos anteriores.t3.*sin(10.tf. : Vector de valores del dominio en que va a ser evaluada la función solución.y3]=met_RK4(f. : Condición inicial : Función solución evaluada en los valores de tspam : Es un vector de los mismos elementos de tspam .0610329.1:tf.y0.te. El script sol3_EDOS.^-2). f=@(t. dos de estas funciones son: ode23 y ode45.t0.'Euler Modificado'.h).y) -200*(t^-3)*sin(10/t)-1000*(t^-4)*cos(10/t).tf.CI) [t. A continuación describimos los argumentos y luego presentaremos algunos ejemplos: [t.CI) @funcion : Es la referencia de la función creada en el editor y que representa a la ecuación diferencial tspam CI y t 160 ordinaria. MATLAB proporciona un conjunto de funciones que nos permite realizar el cálculo de forma más eficiente.y1.001'.y3.tspam.tf.y2.y] = ode45(@funcion.0610329. [t2. ye=100*(te./te).t2. h=0.'fontsize'.m. tf=3. [t3.t0.01.h). plot(t1.'RK4'.t0. [t1.ye) grid on title('h=0.tspam.14) legend('Euler'.y] = ode23(@funcion. te=t0:0.y1]=met_Euler(y0.y2]=met_EulerMOD(y0.h). tendrá las siguientes instrucciones: t0=1. y0=1.'Exacta') Y la salida gráfica será el siguiente: Funciones ode Para resolver ecuaciones diferenciales ordinarias. Guía Práctica MatLAB Ambas funciones permiten obtener la solución aproximada de la ecuación diferencial . Donde la primera sintaxis realiza el cálculo por el método de Runge Kutta de 2do y 3er orden, mientras que el segundo (utilizado de forma estándar) realiza el cálculo por Método de Runge Kutta de 4to y 5to orden Ejemplo 1: Resolver la siguiente ecuación diferencial: dentro del intervalo [0,2], suponiendo que la condición inicial es: Solución: Primeramente creamos la función que representará a la ecuación diferencial, entocnes escribimos en el editor lo siguiente: function dy=funci(t,y) dy=2*t.*(cos(t)).^2 Seguidamente realizamos un script para ejecutar y obtener la solución: [t1,y1]=ode23(@funci,0:0.1:2,pi/4); [t2,y2]=ode45(@funci,0:0.1:2,pi/4); plot(t1,y1,t2,y2) grid on legend('RK23','RK45') El resultado se muestra en la gráfica siguiente. 161 Capítulo 10 Ejemplo 2: Durante un vuelo de prueba de un avión con un cierto motor turbohélice, el piloto de prueba ajustó el nivel de potencia del motor a 40 000 Newtons, lo que hace que el avión de 20 000 Kg. alcance una velocidad de crucero de 180 m/s. A continuación, las gargantas del motor se ajustan a un nivel de potencia de 60 000 Newtons y el avión comienza a acelerar. Al aumentar la velocidad del avión, el arrastre aerodinámico aumenta en proporción con el cuadrado de la velocidad respecto al aire. Después de cierto tiempo, el avión alcanza una nueva velocidad de crucero en la que el empuje de los motores es equilibrado por el arrastre. La ecuación diferencial que determina la aceleración del avión es: Donde: Escribir un programa en MATLAB para determinar la nueva velocidad de crucero después del cambio de nivel de potencia de motores, graficando la solución de la ecuación diferencial. Solución: Para este caso usamos la función ode23 para evaluar la ecuación diferencial. La solución de esta ecuación nos dará valores de velocidad, que pueden servir para determinar valores de aceleración. Realizando el script siguiente: V0=180; ts=240; [t,V]=ode23(@funci2,0:0.1:ts,V0); ac=3-0.000062*V.^2; subplot 211 plot(t,V); title('Velocidad') ylabel('m/s') grid on; subplot 212 plot(t,ac); title('aceleración') ylabel('m/s^2') xlabel('tiempo(s)') grid on La función funci2.m es: function dv=funci2(t,v) dv=3-0.000062*v.^2; 162 Guía Práctica MatLAB Y la salida grafica es: Ejemplo 3: Velocidad en medios con arrastre La ecuación diferencial que rige la velocidad v de un cuerpo de masa m y área proyectada A que cae en un medio de densidad es: (I) El cuerpo adquiere su velocidad terminal de caída cuando no acelera más, es decir a derivada de a velocidad es cero. De acuerdo a la ecuación anterior, la velocidad terminal teórica es: (II) y , que cae de un edificio, entonces Supóngase una moneda con . La velocidad terminal según la expresión II es: . Resolver la ecuación I por el método de Runge-Kutta y compara la velocidad terminal así hallada con la velocidad terminal teórica. Solución Para resolver aplicamos la función met_RK4.m, de la siguiente manera f=@(t,v) 10-v^2*(1*3.1416*10^-4)/(2*0.01); [t,vel]=met_RK4(f,0,0,20,1) plot(t,vel) 163 0000 2.9837 24.9841 24. la cual es la misma teórica.98m/s.9840 24.0000 19.0000 4.9748 24.0000 17.0000 0 9.0000 8.9400 24. Para el caso general.0000 15.Capítulo 10 El resultado y la gráfica serán: 0 1. considere ahora la siguiente ecuación diferencial de orden : y haciendo el siguiente cambio de variables: Donde 164 .8944 24.0000 12. El número de ecuaciones diferenciales de primer orden del sistema es igual al orden de la ecuación diferencial original.9832 24.9798 24.0000 14.5302 24.8880 24.0000 20.3644 20.0044 24.6352 22.9841 Se observa que la velocidad terminal hallada por el método numérico es de 24.0000 6.0000 18.9839 24.9840 24.0000 16.0000 13.9638 24.0000 11.7750 24.0000 9.0000 3. se transforman en un sistema de ecuaciones diferenciales de orden 1 equivalente y se resuelve éste.0000 10.0000 7. lo que demuestra el poderío del método de Runge-Kutta para la solución numérica de ecuaciones diferenciales Solución de Ecuaciones Diferenciales de Orden Superior Para resolver ecuaciones diferenciales de orden superior (de orden mayor que 1) con condiciones iniciales.3244 16.0000 5.9821 24. donde: Implementando la solución con el siguiente código para obtener los valores de función solución y visualizar la gráfica. y=Xn(:.'-b') grid on title('Solución de EDO de 2do Orden') 165 .0:0. para obtener el vector solución.[1. Debemos reducirla a un sistema de ecuaciones diferenciales de primer orden.y.1]).1:1.Xn]=ode45(@fun2.Guía Práctica MatLAB Derivando los cambios de variables. tendremos el siguiente arreglo: Luego utilizamos el solucionador ode45. Ejemplo: Se tiene la siguiente ecuación diferencial con condiciones iniciales: Se desea resolver para con Solución: Dado que la ecuación diferencial es de orden 2. . plot(t. [t. primero despejamos el término de segundo orden y empezamos la reducción.1). X) A=[0 1. calcular la carga en el capacitor en cualquier instante de tiempo t. dX=A*X+b Ejemplo: Un circuito tiene en serie una fem .5*t -2].1 h y un capacitor de 1/260 f. Solución: Recordamos que: '.Capítulo 10 Donde la función de nombre funci. 166 además: . function dX=fun2(t. un resistor de 2 . un inductor de 0.m está definida por el siguiente código. Si la corriente inicial y la carga inicial en el capacitor son ambas cero. b=[0 exp(-2*t)]. 1).0]). plot(t.m el siguiente código: function dX=funCir(t. tenemos lo siguiente: .Guía Práctica MatLAB Reemplazando las expresiones para la corriente en la ecuación.-2600 -20]. 100*sin(60*t)].[0. tendremos la siguiente salida. tendremos la siguiente expresión: Cambiando los valores de R. y=Xn(:.Xn]=ode45(@funCir. donde: Y realizando la ejecución del código siguiente.001:1.y. C y L y V: Haciendo los cambios de variables.X) A=[0 1. dX=A*X+b. Y la gráfica de la función resultado evaluada en el tiempo.0:0. b=[0.'-b') grid on title('Solución de Circuito RLC') Siendo la función funCir. [t. 167 . Impreso en los Talleres Gráficos de Surquillo   719 9700 – 719 9701 Marzo 2012 .
Copyright © 2024 DOKUMEN.SITE Inc.