168
Colección G UÍAS  P RÁCTICAS L  A B M  A  T  A plicado a Métodos Numér icos e Ing enier í a

Manual Matlab FIEE UNI

Embed Size (px)

Citation preview

Page 1: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 1/168

Colección GUÍAS PRÁCTICAS

L A BM A  T A plicado a Métodos Numér ic

os e Ing enier í a

Page 2: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 2/168

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áco 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 - Miraores

Lima - Perú

  (511) 719 - 9700

  [email protected]

  www.editorialmacro.com

Primera edición: Marzo 2012 - 1000 ejemplares

Impresión

Talleres Gráfcos 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.

Page 3: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 3/168

Indice 

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

Denició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ácas .......................................................................................42

Operadores Aritmécos .............................................................................................................42

Operadores Relacionales ............................................................................................................43

Operadores Lógicos ....................................................................................................................44

Funciones Relacionales y Lógicas Adicionales ............................................................................44

Funciones Matemácas ..............................................................................................................45

Funciones de Fecha y Hora .........................................................................................................47

Operaciones con Funciones ........................................................................................................48

Page 4: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 4/168

Ejercicio de aplicación ................................................................................................................49

Indexación de Matrices ..............................................................................................................51

Concatenación de matrices (Agrupación) ..................................................................................53

Ejercicios propuestos ...................................................................................................54

Ejercicios más avanzados .............................................................................................55

Capítulo 3: Programación en Matlab

M-FILES .......................................................................................................................57

Funciones de Ingreso y Salida de datos ........................................................................61

Sentencias de Control de Flujo .....................................................................................64

if … else … end ............................................................................................................................65

if … elseif … else … end ...............................................................................................................66switch … case … otherwise … end ..............................................................................................68

while … end ................................................................................................................................69

for … end ....................................................................................................................................70

Sentencias Especiales .................................................................................................................71

Ejercicios de Aplicación ................................................................................................72

Ejercicios Propuestos ...................................................................................................73

Capítulo 4: Gráfcos

Ventana de Figura ........................................................................................................75

Funciones de Gráfcas en 2 Dimensiones ......................................................................76

Grafcas en 2D  .............................................................................................................77

Puntos ........................................................................................................................................77

Cartesianas .................................................................................................................................80

Paramétricas ...............................................................................................................................82

Polares ........................................................................................................................................83

Quiver .........................................................................................................................................84

Gráfcos Múlples........................................................................................................85

Subplot .......................................................................................................................................86

Funciones de Gráfcas en 3 Dimensiones ......................................................................88

Puntos ........................................................................................................................................88

Cartesianas .................................................................................................................................89

Paramétricas ...............................................................................................................................90

Superfcies  ...................................................................................................................91

Forma z=f(x,y) .............................................................................................................................91

Sombras y Colores ......................................................................................................................92

Page 5: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 5/168

Rotación de Gráca ....................................................................................................................93

Supercies Complejas ................................................................................................................93

Estadíscas .................................................................................................................................94

Superfcies: Generados por Funciones  .........................................................................94

Esfera ..........................................................................................................................................94

Vectores Normales a una supercie ...........................................................................................95

Cilindro .......................................................................................................................................95

Geometría diferencial de curvas ..................................................................................96

Longitud de arco .........................................................................................................................96

Vectores tangente, normal y binormal: Triedro de Frênet-Serret ..............................................96

Curvatura y torsión .....................................................................................................................97

Plano osculador ..........................................................................................................................98

Centro de curvatura ...................................................................................................................99

Teorema fundamental de curvas ................................................................................................99

Ejercicios Propuestos ...................................................................................................100

Capítulo 5: Polinomios

Defnición  ....................................................................................................................103

Operaciones con Polinomios ........................................................................................105

Ejercicios .....................................................................................................................108

Ajuste de Curvas Bidimensionales ...............................................................................108

Funciones de Interpolación ..........................................................................................109

Ejercicios .....................................................................................................................111

Capítulo 6: Interpolación

Polinomios de Lagrange ..............................................................................................113

Polinomio de Interpolación por Diferencias Divididas de Newton ................................115

Capítulo 7: Resolución de Sistema de Ecuaciones Lineales

Defnición  ....................................................................................................................119

Aplicación a los Circuitos Eléctricos ..............................................................................121

Operaciones Elementales de Reglón ............................................................................122

Eliminación Gaussiana ...............................................................................................................122

Metodo de Gauss – Jordan .........................................................................................................124Pivote Máximo ...........................................................................................................................125

Page 6: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 6/168

Método Montante ......................................................................................................................126

Matriz Inversa .............................................................................................................127

Metodos Iteravos: Jacobi  ...........................................................................................127

Métodos Iteravos: Gauss-Seidel .................................................................................129

Ejercicios Propuestos ...................................................................................................131

Capítulo 8: Solución de Ecuaciones No Lineales

Defnición del Problema  ..............................................................................................133

Método de la Bisección................................................................................................133

Ejercicio propuesto .....................................................................................................................136

Método de Punto Fijo (iteración simple) ......................................................................136

Método de Newton-Rapson .........................................................................................139

Método de la Secante ..................................................................................................141

Newton-Rapson para Funciones de más de una Variable .............................................143

Ejemplo de dos variables ............................................................................................................144

Ejercicios propuestos ...................................................................................................145

Capítulo 9: Integración

Método de los Trapecios ..............................................................................................148Método de Romberg ....................................................................................................149

Método de Simpson 1/3 ..............................................................................................150

Método de Simpson 3/8 ..............................................................................................152

Funciones de Cuadratura .............................................................................................153

Capítulo 10: Solución de Ecuaciones Diferenciales Ordinarias

Método de Euler ..........................................................................................................155

Método de Euler Modifcado  .......................................................................................157Método de Runge Kua  ...............................................................................................159

Funciones Ode .............................................................................................................160

Solución de Ecuaciones Diferenciales de Orden Superior .............................................164

Page 7: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 7/168

MatLAB

El presente manual: MATLAB Aplicado a los Métodos Numéricos e Ingeniería estáorientado a todos los interesados, estudiantes y profesionales de las diferentesespecialidades, en desarrollar la capacidad de manejo de la herramienta MATLAB.Tiene un enfoque, principalmente, a la adecuación y familiarización del programacon el usuario. Y al ser la eficiencia en la resolución de problemas matemáticosla principal característica de esta herramienta, este manual proporciona lossiguientes temas: una introducción al ambiente de trabajo del MATLAB, tipos dedatos, entrada y salida de datos, el manejo y visualización de variables, creaciónde m-files, estadística básica, programación utilizando la sentencias de control

de flujo, el desarrollo de visualizaciones gráficas, la aplicación a los MétodosNuméricos, así como ejemplos directos de aplicación a la ciencia e ingeniería.

 Al ser una herramienta de un lenguaje de muy alto nivel, fácil de aprender yusar, muy potente, flexible, extensible, de gran exactitud, robusto y rápido. Nopredispone como requisito necesario el conocimiento de algún otro tipo de lenguajede programación, pero si es de su conocimiento aceleraría el estudio del programa.

Dentro de este manual encontraremos un conjunto de herramientas (grupode funciones con propósito de aplicación directa) que nos permitirán resolverproblemas diversos mucho más rápidos y eficientes, comparados con otro lenguaje

tales como FORTRAN, C/C++ e inclusive JAVA.

 Al finalizar el uso de este manual el lector podrá ser capaz de interpretar todotipo de expresión de cálculo al lenguaje MATLAB, además de poder implementarestructuras de código para solucionar problemas con una metodología adecuadaque podemos describir de la siguiente manera: Planteamiento claro del problema,descripción de las información de entrada y salida, resolución del problema deforma manual para ciertos conjuntos de datos sencillos, implementación de unasolución en MATLAB, comprobación de la solución ingresando datos distintos.

Espero que este manual didáctico pueda servir como guía tanto a los programadoresexpertos como para principiantes, pero sobretodo que sea un medio de difusiónpara lograr el interés de la comunidad académica en esta herramienta sofisticadaque actualmente se dispone.

Page 8: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 8/168

Page 9: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 9/168

Capítulo

9

1Introducción

En esta parte presentamos al entorno de manejo de Matlab para su mejor adaptación, como unentorno interactivo para realizar análisis de datos, cálculo numérico y de visualización gráfica. Tambiénse explicará cómo pueden representarse los datos y comandos para imprimir información. En lasprimeras secciones comenzaremos explorando Matlab de la forma más simple, en modo comando: elusuario pregunta y Matlab responde.

EL GUI DE MATLAB 

El software se desarrolló originalmente como un ‘Laboratorio de Matrices’, de ahí su nombre, yactualmente cuenta con una capacidad superior debido a su lenguaje de programación para cómputocientífico y técnico en general.

La siguiente figura define la interfaz gráfica para la versión r20011b:

 

Cuando se instala el programa, en este caso se realizó en el sistema operativo Windows 7, este pordefecto crea una carpeta de nombre MATLAB en el directorio Documentos, y es ese lugar donde pordefecto el programa almacenará todo archivo creado.

Page 10: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 10/168

10

Capítulo 1

La Ventana de Comandos (Command Window): Es el espacio principal de interacción entre el usuarioy el software, ahí se ejecutan las instrucciones y muestran los resultados. Mantiene las mejoras dela versión anterior, algunas de las cuales recordaremos a continuación:

• Se permiten líneas de comandos muy largas que automáticamente siguen en la línea siguienteal llegar al margen derecho de la ventana. Para ello hay que activar la opción Wrap Lines, en elmenú File/Preferences/Command Window .

• Haciendo clic con el botón derecho sobre el nombre de una función que aparezca en esta ventanase tiene acceso a la página del Help sobre dicha función.

• Al iniciar la escritura de una función y pulsando la tecla Tab, el programa completa automáticamenteel nombre de la función, o bien muestra un menú de todas las funciones disponibles que comienzancon las letras digitadas.

• Cuando al ejecutar un fichero *.m se produce un error y se obtiene el correspondiente mensaje

en la Command Window , MATLAB muestra mediante un subrayado un enlace a la línea delfichero fuente en la que se ha producido el error. Haciendo clic en ese enlace se va a la líneacorrespondiente del fichero por medio del Editor/Debugger .

Ventanas auxiliares: command history, workspace, current directory, que informan sobre (y permiteneditar) los comandos insertados, las variables declaradas y el directorio en el que estamos trabajando.

Ventana de ayuda: Es una ventana independiente que proporciona un acceso completo a las funcionesde ayuda de Matlab, incluyendo búsquedas, demostraciones, etc.

Estas son las características básicas que debemos considerar:

• El prompt de Matlab es >>. El usuario escribe a continuación y para ejecutar se pulsa la teclaEnter.

• Se pueden recuperar comandos anteriores navegando con las flechas ↑ y ↓.

INGRESO DE DATOS 

Todo dato ingresado al programa es un ordenamiento en filas y columnas, matemáticamente conocidocomo matriz y que se define como arreglo en la programación. Y mantiene la siguiente estructura desentencia:

>> variable = valor;

Donde:

variable: Es la combinación de caracteres alfabéticos, numéricos y el carácter especial (_), siendola cantidad de 63 caracteres como agrupamiento máximo para nombrarla teniendo en cuenta quelos caracteres minúsculos y mayúsculos se diferencian. Las únicas restricciones para nombrar a unavariable son que esta no debe iniciar con un carácter numérico ni el especial (_) y tampoco ser iguala una palabra reservada.

Page 11: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 11/168

11

Guía Práctica MatLAB

Ejemplo:

a1, dato, data, f1  variables validas

media23 es diferente a meDia231p, 45va, _p1, 3w1  variables invalidas

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’

valor: Es un dato o un conjunto de datos ordenados en filas y columnas. Por defecto los datostoman el tipo double, y se puede cambiar de tipo definiéndolo según la necesidad del usuario (verejemplos).

“;”: Es la sentencia de la instrucción. Si una expresión termina en este signo su resultado se calcula,pero no se muestra en pantalla, y si se omite, entonces el programa ejecutará la tarea y ademásmostrará el resultado.

Se define que los valores ingresados al programa puedenser de los siguientes tipos (se detallará en el siguienteítem):

Tipo Bytes

doublé 8B

int  4B

char  2Blogical 1B

Page 12: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 12/168

12

Capítulo 1

Ejemplos:

Ingrese los siguientes datos:

double:>> x = 7;

int:

>>a = int16(23);

char: Los caracteres deben estar entre apóstrofes.

>> 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).>> m = 6>4;

>> who

Your variables are:

a c m x

>> whos

  Name Size Bytes Class Attributes

  a 1x1 2 int16

c 1x10 20 char

m 1x1 1 logical

x 1x1 8 double

Si deseamos ver las características de una o de sólo algunas variables, entonces especificamos ellasde la siguiente manera:

>> whos a m

  Name Size Bytes Class Attributes

  a 1x1 2 int16

m 1x1 1 logical

Nota La función who y whos, nos permite ver las variables creadas hasta el momento y a las variables consus características de ingreso, respectivamente que están almacenados en el workspace.

Page 13: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 13/168

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.

DATOS NUMÉRICOS 

Números Reales

Matlab representa los números reales en doble precisión y en simple precisión.

a Doble Precisión: double

Es el tipo por defecto de un dato ingresado al programa. A continuación se muestra la creación,conversión y los valores máximos y mínimos de un dato de doble precisión:

>> d = 45.78;

>> whos d  Name Size Bytes Class Attributes

  d 1x1 8 double

La función isoat nos permite verificar si el dato ingresado es de punto flotante (decimal).

>> d1=isoat(d)d1 =

  1

Las funciones realmax y realmin devuelven el valor máximo y mínimo para el tipo de dobleprecisión.

>> realmax

ans =

  1.7977e+308

>> realmin

ans =

  2.2251e-308

b Simple Precisión: single

Estos tipos de datos son creados de la siguiente manera:

>> s=single(78.012);

>> whos s

  Name Size Bytes Class Attributes

  s 1x1 4 single

>> s1=isoat(s)s1 =

  1

Page 14: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 14/168

14

Capítulo 1

Las funciones realmax y realmin devuelven el valor máximo y mínimo para el tipo de simpleprecisión si es que especificamos el argumento ‘single’.

>> realmax(‘single’)ans =

  3.4028e+038

>> realmin(‘single’)

ans =

  1.1755e-038

Números Complejos

Se conoce que los números complejos se definen como un valor que tiene parte real y parte imaginaria.

Donde la base imaginaria es i=√(-1) y que en el programa se define con el carácter i ó j.Existen 2 formas de ingresar un dato complejo:La primera es digitar la expresión a+bi.

>> c = 7-15i

c =

  7.0000 -15.0000i

La segunda forma es utilizando la función complex de la siguiente manera:

>> z = complex(12,8)z =

  12.0000 + 8.0000i

Podemos obtener los valores numéricos de la parte real e imaginaria de un número complejo yaingresado al programa con las funciones real e imag y si queremos conocer su módulo y argumentoen radianes utilizaremos las funciones abs y angle, respectivamente.

>> zr=real(z)

zr =

  12

>> zi=imag(z)

zi =

  8

>> modulo_z=abs(z)

modulo_z =

  14.4222

>> argumento_z=angle(z)

argumento_z =  0.5880

Page 15: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 15/168

15

Guía Práctica MatLAB

Estos datos tendrán un atributo característico de complex, según se puede observar si visualizamosa las variables en el workspace.

>> whos z c  Name Size Bytes Class Attributes

  c 1x1 16 double complex

z 1x1 16 double complex

Números Enteros

Definimos un dato entero como aquel valor exacto dentro del programa. La siguiente tabla muestracómo definir los datos enteros:

Ejemplos de ingreso de datos enteros:

>> x=int8(23);

>> y=int16(46);

>> w=int64(-6);

>> z=int32(157);

>> whos x y w z

  Name Size Bytes Class Attributes

  w 1x1 8 int64

x 1x1 1 int8

y 1x1 2 int16

z 1x1 4 int32

NotaLas funciones real, imag, abs y angle, son aplicables también a un arreglo de datos(matriz de datos).

Tipo Función Rango de Valores

Entero con signo de 8 bits int8 -27 a 27 -1

Entero con signo de 16 bits int16 -215 a 215 -1

Entero con signo de 32 bits int32 -232 a 232 -1

Entero con signo de 64 bits int64 -264 a 264 -1

Entero sin signo de 8 bits uint8 0 a 28 -1

Entero sin signo de 16 bits uint16 0 a 216 -1

Entero sin signo de 32 bits uint32 0 a 232 -1

Entero sin signo de 64 bits uint64 0 a 264 -1

Page 16: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 16/168

16

Capítulo 1

Si se desea verificar si un dato es de tipo entero, utilizaremos la función isinteger:

>>isinteger(x)

ans =  1

>> isinteger(y)

ans =

  1

Conversión de Tipo de Datos

Conocidos los tipos de datos, es posible cambiar de un tipo a otro tal como mostraremos a continuación:

>> a=int16(24);

>> b=double(a);

>> c=single(a);

>> whos a b c

  Name Size Bytes Class Attributes

  a 1x1 2 int16

b 1x1 8 double

c 1x1 4 single

Valores EspecialesLa herramienta MATLAB considera los siguientes valores especiales inf, -inf  y NaN, pararepresentar a las cantidades infinito positivo, infinito negativo y a todos aquellos que no son unnúmero, 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

Page 17: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 17/168

17

Guía Práctica MatLAB

La siguiente tabla muestra algunos valores especiales:

Funciones de Identificación de Tipo de Dato

Mostramos a continuación una tabla de funciones que nos permiten conocer los tipos de datosingresados al programa. Sea x un ordenamiento, entonces:

CADENAS DE CARACTERES 

Una cadena de texto se define como un ordenamiento o arreglo de caracteres UNICODE.

Para crear una cadena al valor de la instrucción se debe encerrar entre comillas simples, por ejemplo:

>> cadena = ‘Bienvenidos al Matlab 2011’

cadena =

Bienvenidos al Matlab 2011

>> whos cadena

  Name Size Bytes Class Attributes

  cadena 1x26 52 char

Sintaxis MatLab Significado

pi   πi ó j   √(-1)

inf    ∞

NaN No es un número

Función Descripción

whos x  Muestra la característica del dato x.

isnumeric(x) Determina si el dato x es un tipo de dato numérico.

isa(x, ’arg’)Determina si x es un tipo de dato numérico específico, donde arg puedetomar los siguientes textos: integer (entero), uintxx (no entero de xx: 8,

16, 32 ó 64), float, doublé o single.

isreal(x) Determina si el tipo de dato x es un número real.isnan(x) Determina si el tipo de dato x no es un número.

isinf(x) Determina si el valor de x es infinito.

isfinite(x) Determina si el valor de x es finito.

Page 18: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 18/168

18

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, para ello utilizaremos la función strcat,como veremos a continuación:

>> nombre = ‘Jose’;

>> apellido = ‘Manrique’;

>> completo = strcat(nombre,apellido)completo =

JoseManrique

Para crear una matriz de 2 ó más filas de caracteres debemos tener en cuenta que cada cadena debetener la misma cantidad de caracteres. Se debe rellenar con espacios en blanco a las cadenas máscortas para forzar que sean del mismo tamaño.

Ejemplo:

>> nombres=[‘Jose Carlos’;’Rosario ‘;’Bartolomeo ‘]

nombres =

Jose Carlos

Rosario

Bartolomeo

La manera más simple para crear matriz de cadenas de texto es usando la función char . Esta funciónrellena automáticamente a las cadenas de menor longitud para igualar a la cadena de mayor longitud.

Ejemplo:

>> nombres=char(‘Jose Carlos’,’Rosario’,’Bartolomeo’)

nombres =

Jose CarlosRosario

Bartolomeo

Comparación de Cadenas

Las cadenas de texto también pueden compararse y esta se realiza carácter con carácter. La siguientetabla muestra las funciones con las que se pueden realizar dicha comparaciones:

Función Descripción

strcmp Determina si dos cadenas son idénticas. Diferencia las mayúsculas yminúsculas.

Page 19: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 19/168

19

Guía Práctica MatLAB

strncmp Determina si los n primeros caracteres de dos cadenas son idénticas.Diferencia las mayúsculas y minúsculas.

strcmpi Determina si dos cadenas son idénticas. No diferencia las mayúsculas y

minúsculas.

strncmpi Determina si los n primeros caracteres de dos cadenas son idénticas. Nodiferencia las mayúsculas y minúsculas.

Recordemos que los resultados de una comparación tiene como resultado los valores de 1 (verdadero)ó 0 (falso).

>> cad_1=’masa’;

>> cad_2=’mazo’;

>> c1=strcmp(cad_1,cad_2)

c1 =  0

Como los primeros 2 caracteres de ambas cadenas anteriores son iguales, entonces podemos realizarla 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 dichascadenas 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

Page 20: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 20/168

20

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 decombinaciones de números y caracteres. La tabla siguiente muestra las funciones que hacen posible

algunas conversiones:

 

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 66 50 48 49 49 66

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

Comando Descripción

char Convierte un entero positivo a su equivalente carácter (código ASCII). Truncacualquier parte fraccional.

int2str Convierte un valor numérico de tipo int a un dato de tipo char (carácter).

num2str y

str2numConvierte un valor numérico de tipo double a un dato de tipo char (carácter) deprecisión con formato específico y viceversa, respectivamente.

mat2str ystr2mat

Convierte un tipo numérico a una de tipo carácter de una determinadaprecisión, retornando una cadena Matlab que puede ser evaluada y viceversa,respectivamente.

dec2hex y

hex2decConvierte un entero positivo a un dato de tipo char de base hexadecimal yviceversa, respectivamente.

dec2bin y

bin2decConvierte un entero positivo a un dato de tipo char de base binaria y viceversa,respectivamente.

dec2base Convierte un entero positivo a un dato de tipo char de cualquier base de 2 a 36.

Page 21: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 21/168

21

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

Page 22: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 22/168

22

Capítulo 1

TIPOS DE FORMATO DE SALIDA

Matlab tiene forma específica y diferente de visualizar sus datos en el command window. La siguientetabla nos muestra estos tipos:

Tipo Descripciónshort Formato con 4 cifras significativas exactas.

short e Formato de 5 dígitos. Incluye potencia de 10.

short g Formato de 5 dígitos.

long Formato de 15 cifras significativas exactas.

long e Formato de 15 dígitos. Incluye potencia de 10.

long g Formato de 15 dígitos.

Rat Formato en fracción irreductible.

Hex Formato en base 16 (hexadecimal).

Bank Formato de 2 cifras significativas exactas.

Compact Formato que suprime el exceso de líneas.

Loose Formato que añade más líneas para que sea más legible.

Por defecto el tipo de formato del Matlab es el short, para cambiar a un diferente tipo de formato

podemos usar la función format, estos cambios sólo afectan la forma en la que los números sonvisualizados y no como el programa los calcula.El cambio de formato lo realizamos así:

>> format tipo

Ejemplo:

>> x=[26/14 3 16.567246 4e-4];

>> format short

>> x

x =

  1.8571 16.5672 0.0004

>> format long

>> x

x =

 1.857142857142857 16.567246000000001 0.000400000000000

>> format rat>> x

Page 23: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 23/168

23

Guía Práctica MatLAB

NotaPara representar las potencias del número diez, Matlab abrevia la forma de sudefinición utilizando la forma exponencial.

x =

  13/7 2833/171 1/2500

>> x

x =

  1.86 16.57 0.00

Para volver al formato por defecto bastaría con sentenciar la función format.

Entonces:

104  1e4 ó 5×10-7  5e-7

Page 24: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 24/168

Page 25: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 25/168

Capítulo

25

MATRICES 

Cuando resolvemos problemas de ingeniería, es importante saber visualizar los datos relacionadoscon el problema. A veces consiste en un solo número, como el peso de un cuerpo, en otras ocasionespodría ser una coordenada en un plano, la cual podemos representar como un par de números. En

todo caso, podemos representar cualquier ejemplo usando un ordenamiento de datos dispuestos enfilas y columnas llamado matriz.

Ejemplo:

Entonces tenemos 2 representaciones de datos para ingresar:

>> x = [4]x=

  4

>>mt = [23.7 6.7]mt =

23.7 6.7

Ahora, para ingresar una matriz de cualquier orden debemos realizarlo fila por fila, donde un espacioen blanco o una coma diferencian los datos de cada columna. Entonces:

>> A = [3 -6 8 0;2 1 7 -1;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, entonces dicha matriz es compleja.

Sea:

>> C = [7+i -2+5i;4 -9i]C =  7.0000 + 1.0000i -2.0000 + 5.0000i  4.0000 0 - 9.0000i

2Operaciones con

Matrices y Vectores

Page 26: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 26/168

Capítulo 2

26

También podemos obtener la matriz de los valores de la parte real y de la parte imaginaria de la matrizC anteriormente definida.

>> Creal = real(C)

Creal =  7 -2

  4 0

>> Cimaginario = imag(C)

Cimaginario =

  1 5

  0 -9

>> Carg = angle(C)

Carg =  0.1419 1.9513

  0 -1.5708

>> Carg = angle(C)*180/pi

Carg =

  8.1301 111.8014

  0 -90.0000

Al igual que para un par de valores, podemos construir una matriz de complejos con la funcióncomplex utilizando un par de matrices de igual orden. Tomando los resultados anteriores, tenemos:

>> Cnew = complex(Creal,Cimaginario)

Cnew =

  7.0000 + 1.0000i -2.0000 + 5.0000i

  4.0000 0 - 9.0000i

Matriz Nula

Se define la matriz nula, como aquella matriz que no tiene elementos, es decir, es la representacióndel vacío. En Matlab se define así:

>> M = []

M=

  [ ]

NotaSe define como comentario a toda línea de texto que el programa no identifica como sintaxis de código,su ingreso es después de anteponer el carácter % y que toma el color verde para su identificación.

Page 27: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 27/168

Guía Práctica MatLAB

27

DEFINICIÓN DE VECTOR 

Una matriz de orden nx1 o 1xm, se le conoce como vector fila o vector columna, respectivamente.

Ejemplo:

>> col = [2;-7;12;0]

col =

  2

  -7

  12

  0

>> la = [14 -6 10 18 43]la =

  14 -6 10 18 43

Operador paso (:)

Permite crear un vector fila de elementos en progresión aritmética.

 Sintaxis: 

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 Por sus índices

Sea A una matriz ingresada:

 

: : 1ini finvar V paso V paso= → ≠

  : 1ini finvar V V paso= → =

 , : 1, 2, , 1, 2, ,

:

  ( , )

ij  n m

ij 

 A a donde i n y j m

 Entonces

 El elemento a se reconoce por A i j 

× = = … = …

Page 28: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 28/168

Capítulo 2

28

Ejemplo:

>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];

>> a24 = A(2,4)

a24 =  -1

>> a12 = A(1,2)

a12 =

  -6

b Por su posición en la matriz 

Matlab asigna una numeración de posición a cada elemento de una matriz, donde:

El programa inicia la asignación de la posición desde el primer elemento de la primera columna yprosigue con los demás elementos con posiciones consecutivas, si ya asignó a todos los elementoscontinúa en la columna que sigue con la posición siguiente. Vea el ejemplo a continuación, dondelos subíndices de cada elemento son sus respectivas posiciones en la matriz.

Sea:

>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];

A =

  3 -6 8 0

  2 1 7 -1

  11 -7 2 -5

>>a6 = A(6)

a6 =

  -7

>>a3 = A(3)

a3 =

  11

[ ]   , 1,2, ,

:

  ( )

k  n m

 A a donde k n m

 Entonces

 El elemento a se reconoce por A k 

×

= = … ×

1 4 7 10

2 5 8 11

3 6 9 12

3 6 8 0

2 1 7 1

11 7 2 5

 A

− = −

− −

Page 29: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 29/168

Guía Práctica MatLAB

29

MATRICES ESPECIALES 

Existen en Matlab varias funciones orientadas a definir, con gran facilidad y muy rápidamente, algunasmatrices de tipo particular. La siguiente tabla especifica las funciones para crear estas matrices

especiales:

Función Descripciónzeros Crea matriz de elementos igual a cero.

ones Crea matriz de elementos igual a la unidad.

eye Crea matriz identidad.

rand Crea matriz de elementos aleatorios entre 0 y 1.

randn Crea matriz de elementos aleatorios con media 0.

Las funciones anteriores tienen la siguiente sintaxis general para su generación:

Sintaxis: var = funcion(n)  matriz cuadrada

  var = funcion(n,m)    “ rectangular

  var = funcion([n m])   “ rectangular

La 1ra forma permite crear matrices cuadradas de orden “n”, la 2da y 3ra forma crea matricesrectangulares de orden “nxm”.

Ejemplos:Matrices de puros ceros:

>> Z1 = zeros(3)

Z1 =

  0 0 0

  0 0 0

  0 0 0

>> Z2 = zeros(2,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

Page 30: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 30/168

Capítulo 2

30

Si queremos crear una matriz de ceros del mismo orden que la matriz A3x4

 definida en los ejemplosanteriores, utilizaremos la 3ra sintaxis definida.

>> Z4 = zeros(size(A))Z4 =

  0 0 0 0

  0 0 0 0

  0 0 0 0

Ya definida la matriz, podemos asignar a un dato un valor diferente a cero.

>> Z4(7) = 99

Z4 =

  0 0 99 0

  0 0 0 0  0 0 0 0

>> Z4(3) = 11

Z4 =

  0 0 99 0

  0 0 0 0

  11 0 0 0

Matrices de elementos igual a la unidad:

>> U = ones(2)

U =

  1 1

1 1

>> U1 = ones(2,9)

U1 =

  1 1 1 1 1 1 1 1 1

  1 1 1 1 1 1 1 1 1

>> U2 = 27*ones(4,6)U2 =

  27 27 27 27 27 27

  27 27 27 27 27 27

  27 27 27 27 27 27

  27 27 27 27 27 27

Page 31: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 31/168

Guía Práctica MatLAB

31

Matriz Identidad:

>> I = eye(4)

I =  1 0 0 0

  0 1 0 0

  0 0 1 0

  0 0 0 1

 

>> I1 = eye(3,6)

I1 =

  1 0 0 0 0 0

  0 1 0 0 0 0

  0 0 1 0 0 0

 

Matriz de valores aleatorios entre 0 y 1:

>> x = rand % un valor aleatorio

x =

  0.8147

>> x = rand % nuevamente un valor aleatorio

x =

  0.9058

>> X = rand(5) % matriz de orden 5x5

X =

  0.1270 0.5469 0.9572 0.9157 0.8491

  0.9134 0.9575 0.4854 0.7922 0.9340

  0.6324 0.9649 0.8003 0.9595 0.6787

  0.0975 0.1576 0.1419 0.6557 0.7577

  0.2785 0.9706 0.4218 0.0357 0.7431

>> X1 = rand(2,4)

X1 =  0.3922 0.1712 0.0318 0.0462

  0.6555 0.7060 0.2769 0.0971

Si se desea cambiar el domino entre 0 y un valor, solo multiplicamos por dicho valor.

>> X2 = 25*rand(3)

X2 =

20.5864 23.7556 9.5390

  17.3707 0.8612 19.1379

  7.9275 10.9686 19.8800

Page 32: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 32/168

Capítulo 2

32

Si deseamos tener datos entre dos valores consecutivos, sólo sumamos dicho valor.

>> X3 = 25+rand(3) % datos entre 25 y 26X3 =  25.1869 25.6463 25.2760  25.4898 25.7094 25.6797  25.4456 25.7547 25.6551

>> X4 = 12+9*rand(1,5) % datos entre 12 y 21X4 =  13.4635 13.0710 16.4853 20.6377 15.0635

Es lo mismo al trabajar con la función randn, sólo que en este caso algunos valores serán negativos.

Función Generador de Vectores

linspace:  Crear un vector fila de una cierta cantidad de elementos distribuidos en un dominioconstante.

Sintaxis: var = linspace(Val_ini,Val_n,# datos)

Los números de datos incluyen a Val_ini y Val_n.

Ejemplo:

  >> L = linspace(3,19,3)L =  3 11 19

>> L = linspace(3,19,6)L =  3.0000 6.2000 9.4000 12.6000 15.8000 19.0000>> L = linspace(3,19); % crea un vector de 100 datos desde 3 a 19

logspace (a,b,n): Genera un vector logarítmicamente espaciado entre los valores 10^a y 10^bcon n elementos.

logspace (a,b): Genera un vector logarítmicamente espaciado entre los valores 10^a y 10^bcon 50 elementos.

FUNCIONES PARA EL ANÁLISIS DE UNA MATRIZ 

Existen diferentes funciones de aplicación directa a una matriz que realizan tareas específicas, lascuales nos facilitan y agilizan, en muchos casos, soluciones de diversos problemas de cálculo. Acontinuación mostramos algunas de estas funciones y su sintaxis de ejecución para su adecuado uso.

size: Al aplicarse a una matriz obtiene un vector de 2 elementos que indica el orden de dicha matriz.

El 1er elemento indica el número de fila y el 2do el número de columna.

Sintaxis: var = size(matriz)   var = [#f #c]

Page 33: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 33/168

Guía Práctica MatLAB

33

Ejemplo:

>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];

>> ordenA = size(A)

ordenA =  3 4

 length: Obtiene la longitud máxima, en número de datos, de los lados de la matriz. Esto es similara obtener el max{# ,# } f c

 Sintaxis:  var = length(matriz)   var = max{#f,#c}

Un caso particular es cuando aplicamos la función a un vector, donde el resultado es numéricamente

igual a su cantidad de elementos.

Ejemplo:

>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];

>> longitudA = length(A)

longitudA =

  4

Aplicando a un vector:

>> la = [14 -6 10 18 43];>> Lf = length(la)Lf =

  5

>> q = [19 5 10 -3];

>> Lq = length(q)

Lq =

  4

sum: 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.

 Sintaxis:  var = sum(matriz)

var = sum(matriz,1)

var = sum(matriz,2)

Las 2 primeras sintaxis realizan por defecto la suma de los elementos de cada columna, ordenandocada resultado en un vector fila, y la última sintaxis suma los elementos de cada fila, ordenando cadaresultado en un vector columna. Y si aplicamos esta función a un vector, obtendremos como resultadoel valor de la suma de todos sus elementos.

Page 34: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 34/168

Capítulo 2

34

Ejemplo:

>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];

>> As1 = sum(A,1)

As1 =  16 -12 17 -6

>> As2 = sum(A,2)

As2 =

  5

  9

  1

>> la = [14 -6 10 18 43]

>> sf = sum(la)sf =

  79

prod: Esta función calcula el producto de los elementos de cada columna o fila y los resultados dedicho cálculo los ordena en un vector.

 Sintaxis: var = prod(matriz)

var = prod(matriz,1)

var = prod(matriz,2)

Análogamente a la función anterior, las 2 primeras sintaxis realizan por defecto el producto de loselementos de cada columna, ordenando cada resultado en un vector fila y la última sintaxis realizael producto de los elementos de cada fila, ordenando cada resultado en un vector columna. Y siaplicamos esta función a un vector, obtendremos como resultado el valor del producto de todos suselementos.

Ejemplo:

>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];

>> Ap1=prod(A,1)

Ap1 =

  66 42 112 0

>> Ap2 = prod(A,2)

Ap2 =

  0

  -14

  770

>> la = [14 -6 10 18 43];>> pf = prod(la)

pf =

  650160

Page 35: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 35/168

Guía Práctica MatLAB

35

max: Obtiene los máximos de cada columna de una matriz y los ordena en un vector fila, tambiénpodemos conocer a qué fila pertenece el dato mayor de cada columna. Aplicando la función a unvector nos muestra el mayor valor de todos los datos.

 Sintaxis:  mayor = max(matriz)

  [mayor,#la] = max(matriz)

Ejemplo:

>> A = [3 -6 8 0;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,las] = max(A)

mayor =

  11 1 8 0

las =

  3 2 1 1

>> vec = [14 -6 10 18 43];

>> Mv = max(vec)

Mv =

  43

El valor mayor de una matriz se puede calcular así:

>> mayorT = max(max(A))mayorT =

11

min: Obtiene los mínimos de cada columna de una matriz y los ordena en un vector fila, tambiénpodemos conocer a qué fila pertenece el dato menor de cada columna. Aplicando la función a unvector nos muestra el menor valor de todos los datos.

 Sintaxis:  menor = min(matriz)

  [menor,#la] = min(matriz)

Page 36: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 36/168

Capítulo 2

36

Ejemplo:

Teniendo en cuenta la matriz A y el vector vec ingresados anteriormente.

>> menor = min(A)menor =  2 -7 2 -5

>> [menor,las] = min(A)menor =  2 -7 2 -5

las =  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. Si esaplicado a un vector nos creará una matriz diagonal con los elementos de dicho vector.

 Sintaxis:  var = diag(matriz)

  var = diag(martiz,k) k=..-2,-1,1,2..

  var = diag(vector)

  var = diag(vector,k) k=..-2,-1,1,2..

Ejemplo:

Definiendo una matriz W y obteniendo sus diagonales k-ésimas.

>> W = [1 6 -2;0 9 3;-5 8 4]

W =

  1 6 -2

  0 9 3

  -5 8 4

>> Do = diag(W) % diagonal principal de W

Do =

  1

  9  4

Page 37: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 37/168

Guía Práctica MatLAB

37

>> D1 = diag(W,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

  0 2 0

  0 0 1

>> Dvk = diag(v,2)

Dvk =

  0 0 3 0 0

  0 0 0 2 0

  0 0 0 0 1  0 0 0 0 0

  0 0 0 0 0

>> Dvk = diag(v,-1)

Dvk =

  0 0 0 0

  3 0 0 0

  0 2 0 0

  0 0 1 0

Las siguientes funciones son utilizadas para aproximar valores numéricos de una matriz.

Función Descripciónceil Redondea el valor hacia el infinito.

x Redondea el valor hacia cero.

oor Redondea el valor hacia el menos infinito.

round Redondea el valor hacia el entero próximo.

Page 38: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 38/168

Capítulo 2

38

Aplicación:

>> P = [12.5624 4.2351 56.9870]P =

  12.5624 4.2351 56.9870

>> Pc = ceil(P)Pc =  13 5 57

>> Pf1 = x(P)Pf1 =  12 4 56

>> Pf2 = oor(P)Pf2 =  12 4 56

>> Pr = round(P)Pr =  13 4 57

La siguiente tabla muestra más funciones de aplicación.

(Con A matriz, v1 y v2 vectores).

Función Descripción

cond(A) Muestra el número de condición

det(A) Calcula la determinante

inv(A) Calcula la inversaA' Calcula la transpuesta

poly(A) Obtiene el polinomio característico

eig(A) Calcula los valores propios

norm(A) Halla la norma

normmest(A,2) Estima la norma-2

null(A) Reconoce los espacios nulos

orth(A) Calcula la ortogonalización

pinv(A) Calcula la seudo inversatrace(A) Calcula la traza

rank(A) Calcula el rango

rref(A) Obtiene la reducción mediante eliminación de Gauss

tril(A) Obtiene la matriz triangular inferior

triu(A) Obtiene la matriz triangular superior

dot(v1,v2) Calcula el producto escalar de los vectores

cross(v1,v2) Calcula el producto vectorial de los vectores v1 y v2,

donde ambos deben ser de orden 1x3 ó 3x1.

Page 39: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 39/168

Guía Práctica MatLAB

39

Aplicación:

>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5;2 -1 6 1]

>> dA = det(A) % determinantedA =

 -786.0000

>> iA = inv(A) % inversa

iA =

  -0.1985 -0.1221 0.0992 0.3740

  -0.1845 0.0916 0.0089 0.1361

  0.0611 0.1145 -0.0305 -0.0382

  -0.1539 -0.3511 -0.0064 0.6170

>> At = A’ % transpuestaAt =

  3 2 11 2

  -6 1 -7 -1

  8 7 2 6

  0 -1 -5 1

>> Ap = poly(A) % polinomio característico

Ap =

  1.0000 -7.0000 19.0000 377.0000 -786.0000

>> Avp = eig(A) % valores propios

Avp =

  -5.6726

5.3413 + 6.4108i

  5.3413 - 6.4108i

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

Page 40: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 40/168

Capítulo 2

40

>> Atl = tril(A) % triangular inferiorAtl =  3 0 0 0  2 1 0 0

  11 -7 2 0  2 -1 6 1

>> Atu = triu(A) % triangular superiorAtu =  3 -6 8 0  0 1 7 -1  0 0 2 -5  0 0 0 1

>> v1=[1 2 3];v2=[4 5 6];

>> Pp=dot(v1,v2)Pp =  32

>> Pc=cross(v1,v2)Pc =  -3 6 -3

Funciones Adicionales

(Con A matriz, m y n naturales).

Función Descripción

nd(A) Devuelve los índices donde las entradas de A son distinto de cero

iplr(A) Intercambia la matriz de izquierda a derecha

ipud(A) Intercambia la matriz de arriba abajo

reshape(A,n,m) Devuelve una matriz m x n cuyos elementos se toman porcolumnas de A, si A no contiene m x n elementos daría un error

rot90(A) Gira la matriz 90º en sentido contrario a las agujas del reloj

rot90(A,n) Gira la matriz nx90º

expm(A) Matriz exponencial de A

sqrtm(A) Matriz raíz cuadrada

logm(A) Matriz logarítmica

funm(A,@funcion) Evalúa la función que indiquemos en la matriz A

[Vep,Vap]=eig(A) Vep son los vectores propios y Vap son los valores propios de A

[L,U]=lu(A) Factorización LU

[Q,R]=qr(A) Factorización QR

[U,S,V]=svd(A) Calcula la descomposición en valores singulares de A. Donde U y

V son matrices unitarias

Page 41: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 41/168

Guía Práctica MatLAB

41

Ejemplos:

>> A = [pi 0; pi/4 pi/3]

A =

  3.1416 0  0.7854 1.0472

>>Af = nd(A) % devuelve los índices como un vector columnaAf =

  1

  2

  4

>> Arsh = reshape(A,1,4)

Arsh =  3.14160.7854 0 1.0472

>>A90 = rot90(A) % gira la matriz 90º

A90 =

  0 1.0472

  3.1416 0.7854

>>A270 = rot90(A,3) % gira la matriz 270º ( 90º x 3 = 270º )

A270 =

  0.7854 3.1416  1.0472 0

>> funm(A,@sin) % calcula el seno de cada elemento de la matriz

ans =

  0.0000 0

  -0.3248 0.8660

>> Ae = expm(A)

ans =

  23.1407 0  7.6091 2.8497

Page 42: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 42/168

Capítulo 2

42

OPERADORES Y FUNCIONES MATEMÁTICAS 

En la realización de operaciones con las matrices, debemos tener en cuenta si dicha operaciónes matricial o de elemento a elemento (operación de arreglos), pues ambos son muy diferentes y

pueden realizarse por operadores o funciones, entonces es necesario conocer cómo se aplica lasfunciones y además cómo se realizan las operaciones.

Operadores Aritméticos

Tabla de Operadores Aritméticos I

(Siendo A y B matrices del mismo orden, n escalar).

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

  4 3

>> A+Bans =  3 4  7 7

>> A-Bans =  -1 2  -1 1

>>A*Bans =  14 10  22 15

>> A/Bans =-4.5000 2.5000-3.5000 2.5000

>> A^3

ans =  55 90  90 145

Operador DescripciónA + B Adición de matrices

A - B Sustracción de matrices

A * B Producto de matricesA / B División de matrices = A*B-1

A ^ n Potencia de matriz

Page 43: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 43/168

Guía Práctica MatLAB

43

Si anteponemos un punto a los operadores *,/ y ^, la operación se realizará elemento a elemento.Ver tabla siguiente:

Tabla de Operadores Aritméticos II

(Siendo A y B matrices del mismo orden, n escalar).

>> A.*Bans =  2 3  12 12

>> A./Bans =  0.5000 3.0000  0.7500 1.3333

>> A.^Bans =  1 3  81 64

>> A.^4ans =  1 81  81 256

OPERADORES RELACIONALES 

Matlab como lenguaje de programación dispone de operadores relacionales que permite hacercomparaciones entre los elementos de dos arreglos de igual dimensión; en cualquiera de los casossiguientes, el resultado es un arreglo de 0 (ceros) o 1 (unos) cuando la relación es falsa o verdadera,respectivamente. Estos operadores son los siguientes:

Tabla de Operadores Relacionales

Operador Descripción

> Mayor que

< Menor que

== Igual que

<= Menor que

>= Mayor que

~= Diferente que

Operador Descripción

A .* B Producto elemento a elemento: aij*b

ij

A ./ B División elemento a elemento: aij/b

ij

A .^ B Potencia elemento a elemento: aij^b

ij

A .^ n Potencia elemento a elemento: aij^n

Page 44: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 44/168

Capítulo 2

44

OPERADORES LÓGICOS 

Permite hacer comparaciones entre los elementos de dos arreglos de igual dimensión; en cualquierade los casos siguientes, el resultado es un arreglo de 0 (ceros) o 1 (unos) como en el ítem anterior.

Estos operadores son los siguientes:

Tabla de Operadores Lógicos

Ejemplos:

Teniendo en cuenta a las matrices A y B definidas anteriormente, tendremos:

>> C=A>BC =  0 1  0 1

>> C=(A==B)C =  0 0

  0 0

FUNCIONES RELACIONALES Y LÓGICAS ADICIONALES 

Tabla de Funciones

Operador Descripción

& y (and)

| o (or)

~ no (not)

= identico

Función Descripción

xor(x,y) Operación “o” exclusiva, devuelve 0 si ambas son falsas o ambas verdaderasy devuelve 1 si una es falsa y la otra verdadera.

any(x) Devuelve 1 si algún elemento en un vector x es no nulo y devuelve 0 si sontodos nulos, si se trata de una matriz da una respuesta por cada columna

all(x) Devuelve 1 si todos los elementos en un vector x son no nulos y 0 si existealguno nulo y si se trata de una matriz da una respuesta por cada columna

exist('x') Devuelve uno si existe y cero si no existe

isnan(x) Devuelve unos en magnitudes no numéricas (NaN) en x

isinf(x) Devuelve unos en magnitudes infinitas (Inf ) en x

isnite(x) Devuelve unos en valores finitos en x

NotaPodemos ver muchos más casos pero todos serían similares: ischar, isempty, isequal,

isoat, isinteger, islogical, isnumeric, isprime, isreal, isscalar, isspace…

Page 45: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 45/168

Guía Práctica MatLAB

45

Ejemplo:

>> c = [Inf 0 5 -8 NaN 94];>> 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 falsoans =0 0 0 0 1 0

>> isinf (c) %c es Inf? devuelve 1 si es verdadero y 0 si es falsoans =1 0 0 0 0 0

FUNCIONES MATEMÁTICAS 

Para la simplicidad de cálculo, Matlab tiene una variedad de funciones que afectan solamente a todoslos elementos de cada matriz a la que es aplicada, mas no altera el orden de estas. De ahí que alaplicarse a vectores podemos deducir la forma de operar entre vectores que es al de elemento aelemento. La siguiente tabla nos indica las funciones matemáticas más conocidas:

Tabla de Funciones Algebraicas

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. La función diff al aplicarse a una matriz devuelve otra matriz de igual cantidad de columnas, pero de número de filasmenor en una unidad de la matriz aplicada.

Operador Descripción

abs(A) Valor absoluto de A

sqrt(A) Raíz cuadrada de A

sign(A) Función signo de A

exp(A) Exponencial de A

log(A) Logaritmo natural de A

log10(A) Logaritmo en base 10 de A

log2(A) Logaritmo en base 2 de A

power(A,n) Potencia n-ésima de Amean(A) Calcula la mediana de las columnas de la matriz A ó la

mediana de un vector A

diff(A)Calcula la diferencias divididas de primer orden a lascolumnas de la matriz A y lo mismo para un vector A

cumprod(A)Devuelve el producto acumulativo de las columnas de lamatriz A y lo mismo para un vector A.

Page 46: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 46/168

Capítulo 2

46

Ejemplos:

>> A=[-2 4;1 -6];>> abs(A)ans =2 41 6

>> exp(A)ans =  0.1353 54.5982  2.7183 0.0025

>> power(A,3)ans =  -8 64  1 -216

>> mean(A)ans =  -0.5000 -1.0000

>> diff(A)ans =  3 -10

Tabla de Funciones Trigonométricas

Observación: Para las funciones inversas asin y acos tener en cuenta que los datos deben estardefinidos entre el dominio [-1 , 1].

Operador Descripción

sin(A) Seno de Acos(A) Coseno de A

tan(A) Tangente de A

cot(A) Cotangente de A

csc(A) Cosecante de A

sec(A) Secante de A

asin(A) Arco Seno de A

acos(A) Arco Coseno de A

atan(A) Arco Tangente de A

sinh(A) Seno hiperbólico de A

cosh(A) Coseno hiperbólico de A

tanh(A) Tangente hiperbólico de A

asinh(A) Arco Seno hiperbólico de A

acosh(A) Arco Coseno hiperbólico de A

atanh(A) Arco Tangente hiperbólico de A

Page 47: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 47/168

Guía Práctica MatLAB

47

De la matriz A, anterior definida:

>> sin(A)

ans =  -0.9093 -0.7568

  0.8415 0.2794

>> sinh(A)

ans =

  -3.6269 27.2899

  1.1752 -201.7132

>> csc(A)

ans =

  -1.0998 -1.32131.1884 3.5789

FUNCIONES DE FECHA Y HORA

Tabla Principal

Ejemplo:

>> date

ans =

14-Feb-2012

>> calendar

  Feb 2012

  S M Tu W Th F S

  0 0 0 1 2 3 4

  5 6 7 8 9 10 11

  12 13 14 15 16 17 18

  19 20 21 22 23 24 25

  26 27 28 29 0 0 0

Operador Descripción

date Devuelve la fecha actual del sistemacalendar Muestra el calendario del mes actual

calendar(año,mes) Calendario del mes y año específico

Eomday(año,mes) Último día de mes y año específico

Page 48: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 48/168

Capítulo 2

48

OPERACIONES CON FUNCIONES 

Debemos tener en cuenta la forma de ejecución y sobretodo del tipo de resultado que deseamosobtener cuando realicemos las operaciones utilizando las funciones matemáticas de Matlab. A

continuación, mostramos una forma práctica de realizar los cálculos:

Sea:

>> x=[0:2] % vector de 1x3x =  0 1 2

>> y1=exp(x) % al afectar a x la dimensión no cambiay1 =  1.0000 2.7183 7.3891

Donde:y1 = [y1(1) y1(2) y1(3)]

>> y2=sin(x) % igualmente la dimensión de x no cambiay2 =  0 0.8415 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 funcionesmatemáticas, debemos recordar que cada función es una matriz o vector de igual dimensión que elargumento a la cual se aplica, por lo tanto se tendría que realizar la operación elemento a elemento.Entonces, si queremos representar la siguiente expresión en el Matlab:

  para , el resultado debería ser:

Para lo cual realizamos en el programa lo siguiente:

>>y=exp(x).*sin(x) %y =

  0 2.2874 6.7188

Donde:y = [y1(1)*y2(1) y1(2)*y2(2) y1(3)*y2(3)]

Análogamente la división será de la forma siguiente:

>>Y=exp(x)./sin(x) %y =  0 2.2874 6.7188

Donde:Y = [y1(1)/y2(1) y1(2)/y2(2) y1(3)/y2(3)]

Page 49: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 49/168

Guía Práctica MatLAB

49

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 losresultados. 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:

Page 50: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 50/168

Capítulo 2

50

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

Page 51: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 51/168

Guía Práctica MatLAB

51

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 40 37 48 9

  8 21 33 22 22

  49 46 9 19 32

Un caso particular es cuando deseamos extraer una fila o una columna, pues normalmente tendríamosque hacer lo siguiente:

>>Pf5=P(5,[1:8]) % Obtención de la 5ta laPf5 =

  32 8 21 42 33 5 22 22

Page 52: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 52/168

Capítulo 2

52

En este caso involucra un vector que especifica a todas las cantidades de columnas, si eso ocurre,podemos abreviar la sintaxis, que realizará acción semejante, de la siguiente manera:

>> Pv5=P(5,:) % obtención de la 5ta laPv5 =

  32 8 21 42 33 5 22 22

>>Pc3=P(:,3) % obtención de la 3ra columna de P

Pc3 =

  48

  24

  40

  7

  21

  46

Conocido esto, nos resultará fácil eliminar una(s) fila(s) o columna(s) si es que asignamos a estasel valor del vacío.

>> P

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

>> P(:,[1 3])=[]

P =

  14 40 34 35 35 38

  27 48 38 2 16 40

  48 33 37 14 48 9

  48 2 20 2 2 24

  8 42 33 5 22 22  49 47 9 41 19 32

>> P([2 5],:)=[]

P =

  14 40 34 35 35 38

  48 33 37 14 48 9

  48 2 20 2 2 24

  49 47 9 41 19 32

Observación: Sólo es posible eliminar filas o columnas de forma completa.

Page 53: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 53/168

Guía Práctica MatLAB

53

CONCATENACIÓN DE MATRICES (AGRUPACIÓN) 

Consiste en agrupar 2 o más matrices para formar una de ordenmayor. Se mantiene las característicasde cada matriz, porque son las variables que representan a estas con las que se realiza la

concatenación. 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 deun vector fila.

• Concatenación Vertical: En este caso la agrupación se realizará con matrices que tienen igualnúmero de columnas y se agruparán como elementos de un vector columna.

Ejemplo:

% Generando las matrices R3x5, T2x5 y W3x1

>>R=round(32*rand(3,5))R =

  18 24 18 17 4

  29 24 2 25 18

  9 12 2 30 15

>>T=round(16*rand(2,5))

T =

  0 3 5 3 4

  5 13 8 10 10

>> W=round(56*rand(3,1))

W =

  39

  42

  25

Se observa que R y W tienen igual cantidad de filas,además R y T tienen la misma cantidad decolumnas. 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;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

Page 54: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 54/168

Capítulo 2

54

EJERCICIOS PROPUESTOS 

1.  Sea la matriz cuadrada:

a)  Construya una matriz añadiendo la matriz identidad de rango 3 a la derecha de la matriz A.

b)  Sume a la tercera fila, la primera fila multiplicada por -3.

c)  Cambie la primera columna de A por la tercera.

d)  Construya una nueva matriz cuyas columnas sean las columnas 1ra y 3ra de A.

e)  Construya una nueva matriz cuyas filas sean las columnas 1ra y 3ra de A.

2.  Sea la matriz cuadrada:

a)  Halle el valor mínimo dentro de cada fila de A.

b)  Ordene los elementos de A en orden descendente dentro de cada columna.

c)  Ordene los elementos de A en orden ascendente dentro de cada fila.

d)  Forme una lista con los elementos de A ordenada de forma ascendente.

e)  Halle el máximo en valor absoluto de los elementos de la matriz A.

3.  Con una sola orden de MATLAB cree una matriz aleatoria 4x4 de números reales entre -5 y 5.Indicación: Ejecute help rand  para saber cómo generar números aleatorios en distribucionesuniformes (randn se emplea para distribuciones normales).

4.  En una sola orden de MATLAB cree una matriz 3x5 cuyo único elemento sea el 7.

5.  Con una sola orden de MATLAB cree una matriz aleatoria 4x4 de números enteros entre -5 y 5.

6.  Considere la siguiente orden de MATLAB: A=magic(5). En una sola orden:

a)  Defina una matriz B formado por las filas pares de la matriz A.

b)  Defina una matriz C formado por las columnas impares de la matriz A.

c)  Defina una vector d formado por la tercera columna de la matriz A

d)  Elimine la tercera fila de la matriz A.

7.  Sea x=0:pi/2:2*pi, con una sola orden de MATLAB cree una matriz cuya primera fila es x, susegunda fila es el seno de cada elemento de x y cuya tercera fila es el coseno de cada elementode x.

Page 55: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 55/168

Guía Práctica MatLAB

55

8.  Defina un vector aformado por los cuatro primeros números impares y otro bformado por loscuatro primeros números pares de varias formas distintas. Empléelos para construir la matriz:

9.  Construya una matriz

ConCon

EJERCICIOS MÁS AVANZADOS 

1.  En una sola instrucción, cambie todos los valores de la diagonal de una matriz cuadrada a cero.

2.  En una sola instrucción, sustituya todos los valores de la diagonal de una matriz cuadrada por loselementos de un vector dado.

3.  Ordene los elementos de una matriz del menor a mayor manteniendo su forma (indicación:emplee la orden reshape).

4.  En una sola instrucción, ponga a cero todos los elementos negativos de una matriz.

5.  En una sola instrucción, ponga a cero todos los elementos de una matriz que estén entre -1 y 1.(La conjunción lógica es &).

6.  De tres formas distintas (cada una en una sola instrucción), averigue el número de elementos deuna matriz, de forma que al final tengamos un número.

Page 56: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 56/168

Page 57: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 57/168

Capítulo

57

3Programación

en Matlab

Un lenguaje de programación es un lenguaje que puede ser utilizado para controlar el comportamientode una máquina, particularmente una computadora. Consiste en un conjunto de símbolos y reglassintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones,permite especificar de manera precisa sobre qué datos de una computadora debe operar, cómodeben ser estos almacenados, transmitidos y qué acciones debe tomar bajo una variada gama

de circunstancias. Todo esto, a través de un lenguaje relativamente próximo al lenguaje humano(lenguaje de alto nivel).

Todo programa en su edición debe tener en cuenta las 3 lógicas de programación, que se definencomo: Lógica Secuencial , Lógica Selectiva y Lógica Repetitiva.

En este capítulo conoceremos cómo editar e implementar un programa utilizando la sintaxis delMatlab, manteniendo los criterios de las lógicas en la cual se gobiernan, y que dependiendo de suestructura podrá ser reconocido como M-File.

M-FILES 

La programación en Matlab se realiza básicamente sobre archivos M o M-files. Se los denomina deesta forma debido a su extensión ".m". Pueden ser creados y editados desde cualquier editor de textocomún; por ejemplo, el Bloc de Notas. Pero el Matlab incluye un lugar propio llamado editor debuggerelcual se invoca con la instrucción edit. Si se opta por un editor externo se debe tener en cuenta quelos archivos deban ser guardados con esta extensión.

De acuerdo a su edición, estos archivos pueden separarse en dos tipos:

• Script o Archivo de Comandos

• Funciones

 Script: Son archivos que contiene líneas de instrucciones del Matlab, manteniendo mínimamente unalógica secuencial en su edición. Este archivo ya editado se guarda con un nombre específico dando alugar que dichas instrucciones sean desde ese instante representadas por tal nombre, entonces, siqueremos ejecutar las instrucciones bastará con escribir dicho nombre en la ventana de comandos.

Aquí se debe notar algo importante: Todas las variables que se hayan definido o creado dentro de estearchivo, luego de su ejecución pasarán a formar parte del workspace. Se debe tratar de que la variabledel workspace no coincida con las que aparecen en el script que se ha de ejecutar.

Page 58: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 58/168

Capítulo 3

58

Ejemplo:

Implementar un script que calcule el valor de la hipotenusa de un triángulo rectángulo cuyos catetostienen los valores de 12 y 17.

 Solución:

Invocamos al editor debugger.>> edit

 

Iniciando la edición del script:

El archivo fue guardado con el nombre de hipotenusa, note en la parte superior de la ventana elnombre con el que fue guardado.

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 sonlas variables creadas en el workspace.

Page 59: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 59/168

Guía Práctica MatLAB

59

Función: En principio existen dos tipos de funciones: las funciones inline, que se insertan enla líneade comandos y las que se escriben en un documento de texto externo (M-File). Esta últimaforma,que es la evolución natural de los ficheros script, es más flexible y es en la que noscentraremos a

continuación. La función es un M-file con cabecera de ejecución definida, es decir tiene por primeralínea una sintaxis definida por:

function [argumentos_salidas]=nombre(argumentos_entradas)

Donde:

nombre: Corresponde al nombre de la función.

argumentos_salidas:Representa a un vector de elementos o variables de retorno de lafunción. El valor de cada uno de los elementos varía a medida que se ejecuta el algoritmo. Losvalores 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. La definición de esta salida esopcional; de no aparecer la función se convertirá en un procedimiento, puesto que no devuelvenada; sólo acepta parámetros y ejecuta el algoritmo dado.

argumentos_entradas:Son los parámetros que recibe la función para realizar suprocesamiento. Estos argumentos, durante la ejecución, son parámetros recibidos por valor (byvalue); es decir, se hacen duplicados de los parámetros y en estos sobre los cuales se realizantodas las modificaciones.

Contrario a los scripts, todas las variables que se definan dentro del cuerpo o definición de la función,si la función es invocada desde la ventana de comandos, no pasarán a formar parte de nuestroworkspace.

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 ecuacioneslineales compatible determinado, haciendo uso de una matriz A de coeficientes, y un vector dado Bde términos independientes, es decir, obtendremos un X tal que AX=B. Dicho vector X será devueltopor la función.

 Solución:

Observamos que las matrices A y B son los argumentos de entrada, y particularmente están definidasasí:

 , las cuales ingresamos de esta manera:

>> A=[1 0 2;5 4 1;-2 1 -1];

>> B=[12;4;-8];

Nota

Es muy importante que guardemos el archivo con el mismo nombre de la función definida en la cabecera.

De no hacer esto será un error 

Page 60: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 60/168

Capítulo 3

60

 Entonces, 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.

Aplicamos la función de la siguiente manera:

>> Xo=solucion(A,B)

Xo =

  0.5714

  -1.1429

  5.7143

inline: Permite crear en línea una función que representará a una expresión algebraica.

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, y la salida será y. Escriba la función de forma que xpueda ser unvector, y utilícela para calcular el valor de la expresión evaluada en x e [-2,2] siendo x entero.

 Solución:

Usando funciones en línea, escribiremos en el editor lo siguiente:

1 x=[-2:2]; % extension de x como vector

2 f=inline('0.9*x.^4-12*x.^2-5*x'); % funcion f(x)

3 y=g(x) % evaluando la funcion f en los valores de x

Page 61: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 61/168

Guía Práctica MatLAB

61

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 delprograma, ya sea para solicitar ingreso de datos o mostrando resultados en pantalla. Estas accionesestán definidas en Matlab como funciones in/out de datos. A continuación especificamos algunos deestos 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 unacadena 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 comandosy la segunda forma especifica que todo lo ingresado será una cadena de texto, es decir los datosingresados serán ya de tipo char .

Ejemplo:

>> w=input('Ingresar un vector la de 3 elementos: ');Ingresar un vector la 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. Lavariable 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);

Page 62: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 62/168

Capítulo 3

62

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 bienalmacenarlas en un fichero. Con este comando, y a diferencia de disp, la salida puede tener unformato preestablecido. En este caso se puedencombinar texto y resultados numéricos provenientesde cálculos o variablespredefinidas en la misma línea. Además, el formato de los números sepuedecontrolar directamente.

Uso del comando fprintf para visualizar mensajes de texto:

>>fprintf('Mensaje en forma de cadena\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 fprintf  debeutilizarsesiguiendo la sintaxis:

>>fprintf('Texto %-5.2f texto adicional', nombre_variable)

Nota Para cambiar de línea en un mensaje de texto se debe insertar el código \n.

El símbolo % marcadel lugar donde seinsertará el númerodentro del texto

Elementos de formato(definen el formato delnúmero)

Nombre de la variablecuyo valor serávisualizado

Page 63: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 63/168

Guía Práctica MatLAB

63

Los elementos del formato son:-5.2f

El flag o bandera, cuyo carácter es opcional, puede ser uno de los siguientes:

La especificación del ancho y precisión del campo (5.2 en el ejemplo anterior) es opcional. El primernúmero (5 en nuestro ejemplo) es el ancho del campo, el cual nos indica el menor número de dígitosen la visualización. Si el número que se visualiza esmenor que el ancho del campo, se añadirán ceroso espacios delante del número encuestión. La precisión se corresponde con el segundo número en elejemplo 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 esobligatorio.

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úmerosingresados es...

 Solución:Realizando un script, en el editor escribiremos las siguientes líneas:

Flag o bandera(opcional)

Ancho del campo yprecisión (opcional)

Caracter de conversión(obligatorio)

Caracter Descripción

+ (signo mas) Justificación izquierda del número dentro del campo

- (signo menos) Visualiza el carácter de signo ( + o -) delante del número

0 (cero) Añade ceros si el número es más pequeño que el campo

Page 64: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 64/168

Capítulo 3

64

1 n1=input('Ingrese el primer numero: ');

2 n2=input('Ingrese el segundo numero: ');

3 n3=input('Ingrese el tercer numero: ');

4 prom=(n1+n2+n3)/3;

5 fprintf('Promedio de los numeros ingresado es:%f\n',prom);

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

SENTENCIAS DE CONTROL DE FLUJO Hoy en día las aplicaciones informáticas son mucho más ambiciosas que las necesidades deprogramación existentes antaño, principalmente debido a las aplicaciones gráficas, por lo que lastécnicas de programación estructurada no son suficientes. Ello ha llevado al desarrollo de nuevastécnicas, tales como la programación orientada a objetos y el desarrollo de entornos de programaciónque facilitan la programación de grandes aplicaciones.La programación estructurada es una técnicapara escribir programas (programación de computadora) de manera clara, teniendo en cuenta elTeorema del Programa Estructurado, propuesto por Böhm-Jacopini, el cual demuestra que todoprograma puede escribirse en base únicamente a tres estructuras de control:

• Secuencial

• Selectica (Instrucción condicional)

• Repetitiva (Iteración, bucle de instrucciones, con condición al principio)

Solamente con estas tres estructuras se pueden escribir todos los programas y aplicaciones posibles.Si bien los lenguajes de programación tienen un mayor repertorio de estructuras de control, éstaspueden ser construidas mediante las tres básicas citadas.

Estructura secuencial: Una estructura de programa es secuencial si las instrucciones se ejecutan unatras otra, a modo de secuencia lineal, es decir que una instrucción no se ejecuta hasta que finalizala anterior, ni se bifurca el flujo del programa.

Ejemplo:

1 x = 12;

2 y = 15;

3 z = x+y;

Sólo es posible realizar el cálculo de z si previamente se ha definido x y y.

Estructura selectiva o de selección: La estructura selectiva permite que la ejecución del programase bifurque a una instrucción (o conjunto) u otras, según un criterio o condición lógica establecida,

sólo uno de los caminos en la bifurcación será el tomado para ejecutarse. Para ello contamos con lasinstrucciones de control if…else…end y switch…case…end.

Page 65: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 65/168

Guía Práctica MatLAB

65

IF … ELSE … END 

Diagrama de Flujo: Sintaxis:

 

condición: Es una expresión lógica o relacional cuyo resultado es de tipo lógico, valor de 1 (uno) siel resultado es verdadero ó 0 (cero) si el resultado es falso.

 Sentencias1: Es un conjunto de sentencias a ejecutarse siempre que la respuesta de condición seaverdadera.

 Sentencias2: Es un conjunto de sentencias a ejecutarse siempre que la respuesta de condición sea

falsa.

Casos Especiales:

• Ausencia de cláusula else

Diagrama de Flujo: Sintaxis: 

if  condición

  <Sentencias1>;

else

  <Sentencias2>;

end 

if condición

  <Sentencias>;

end 

Page 66: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 66/168

Capítulo 3

66

• Respuesta solamente ante la cláusula else

Diagrama de Flujo: Sintaxis:

IF … ELSEIF … ELSE … END (ANIDADO) 

Diagrama de Flujo: Sintaxis:

if condición

  ; % sentencia nula 

else

  <Sentencias>;

end 

if  condición

  <Sentencias1>;elseif

  <Sentencias2>;

elseif

  <Sentencias3>;

.

.

.

elseif

  <SentenciasN>;else

  <Sentencias por Defecto>;

end 

Page 67: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 67/168

Guía Práctica MatLAB

67

Ejemplo ilustrativo:

Implementar un archivo script que solicite el ingreso de dos números cualesquiera y muestre enpantalla el mayor de ambos.

 Solución: Abrimos el editor y escribimos lo siguiente:

a=input('Ingrese valor de a= ');

b=input('Ingrese valor de b= ');

if a>b

  fprintf('\nEl mayor es a=%i\n',a);

else

  fprintf('\nEl mayor es b=%i\n',b);

end

Guardamos el script con el nombre mayor2n, 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, por lo tanto debemos modificar el script para considerar la condición de igualdad, entoncestendremos lo siguiente:

a=input('Ingrese valor de a= ');

b=input('Ingrese valor de b= ');

if a>b

  fprintf('\nEl mayor es a=%i\n',a);

elseif b>a

  fprintf('\nEl mayor es b=%i\n',b);

else

  fprintf('\na=%i y b=%i son iguales\n',a,b);

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

Page 68: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 68/168

Capítulo 3

68

SWITCH … CASE … OTHERWISE … END (MULTIBIFURCACIÓN) 

Diagrama de Flujo: Sintaxis:

Ejemplo ilustrativo:

Implementar un archivo script que calcule y muestre el valor respectivo de la función f para un valorde x ingresado por el usuario, siendo la función de la siguiente forma:

 Solución:

Implementamos en el editor las siguientes líneas de instrucción:

x=input('x= ');switch x

  case pi/5; f=sin(3*x)*exp(-x/2);  case 5; f=sqrt(x+5)*(x^2+5);  case 6.1; f=x^2.6;  otherwise; f=0;

endfprintf('f(%4.3f)=%f\n',x,f)

switch condición

case var=cte1;

  <Sentencias2>;

case var=cte2;

  <Sentencias3>;

  .

  .

  .

case var=cteN

  <SentenciasN>;

otherwise

  <Sentencias por Defecto>;

end

Page 69: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 69/168

Guía Práctica MatLAB

69

Guardando el archivo con nombre valorf, ejecutamos y probamos:

>> valorf

x= pi/5f(0.628)=0.694654

>> valorf

x= 6.1

f(6.100)=110.117811

>> valorf

x= 25

f(25.000)=0.000000

Estructura iterativa: Un bucle iterativo o iteración de una secuencia de instrucciones hace que serepita su ejecución mientras se cumpla una condición. El número de iteraciones normalmente estádeterminado por el cambio en la condición dentro del mismo bucle, aunque puede ser forzado oexplícito por otra condición. Por la forma de ejecución del bucle tenemos a la sentencia while, la cualtrabaja según la evaluación de condición, y a la sentencia for, que trabaja según el recorrido de uncontador.

WHILE … END 

Diagrama de Flujo: Sintaxis:

condición: Es una expresión lógica o relacional cuyo resultado es de tipo lógico, valor de 1 (uno) siel resultado es verdadero ó 0 (cero) si el resultado es falso.

 Sentencias:  Son las sentencias a ejecutarse siempre y cuando la respuesta de la condición seaverdadera.

 while  condición

  <Sentencias>;

end 

Page 70: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 70/168

Capítulo 3

70

Ejemplo:

Implementar un script que calcule la suma de los 10 primeros números naturales.

 Solución: Escribimos en el editor las siguientes líneas de instrucción:

k=1;

suma=0;

while k<=10

  suma=suma+k;

  k=k+1;

end

fprintf('Suma10=%i\n',suma)

Guardando el archivo con el nombre suma10n y ejecutando, tendremos:

>> suma10n

Suma10=55

FOR … END 

Diagrama de Flujo: Sintaxis: 

rango(k): Es el valor k-ésimo de rango que toma la variable contadora. Donde rango es un vector den elementos y debido a esto tendremos n iteraciones.

 Sentencias: Son las sentencias a ejecutarse para cada uno de los valores del contador.

Si consideramos rango=[4 11 13], entonces tendremos 3 iteraciones y rango tomará el valor deldato que se encuentra en la posición numéricamente igual al número de iteración. La primera parak=1 tomará el valor de rango(1)=4, para la segunda iteración, es decir k=2, tomará el valor derango(2)=11 y para la tercera, k=3, tomará el valor de rango(3)=13.

for  rango(k)

  <Sentencias>;

end 

Page 71: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 71/168

Guía Práctica MatLAB

71

Ejemplo:  (igual al anterior)

Implementar un script que calcule la suma de los 10 primeros números naturales.

 Solución: Escribimos en el editor las siguientes líneas de instrucción:

n=10;suma=0;for k=1:10  suma=suma+k;endfprintf('Suma10=%i\n',suma)

Guardando el archivo con el nombre suma10nf y ejecutando, 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, salteando alposible conjunto de sentencias del cuerpo del bucle que la sucedan.

for rango(k)

sentencias1;

if condición

  sentencias2;

  continue

end 

sentencias3;

end  

break  (sentencia de ruptura)

Termina la ejecución de un bucle for o while. Las sentencias que aparezcan después de esta sentenciano se ejecutarán.

for rango(k)

sentencias1;

if condición

  sentencias2;

  break

end sentencias3;

end  

El cuerpo del bucle for contiene una sentencia condicionalif  que evalúa una condición.

La sentencia de salto continue se ejecutará siempre que laevaluación de la condición resulte verdadera.

Al ejecutarse continue  se iniciará una nueva iteración,salteando las instrucciones que preceden a continue, esdecir a sentencias3.

La sentencia de ruptura break   al ejecutarse finalizará elciclo del bucle for  obviando la ejecución de las sentenciasposteriores, es decir las sentencias3.

Page 72: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 72/168

Capítulo 3

72

EJERCICIOS DE APLICACIÓN 

1. Dado el vector v=[-1,3,6,11,-15,2,-7,-18], 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.

 Solución:

v=[-1,3,6,11,-15,2,-7,-18];

Sn=0; Sp=0;

for k=1:length(v)

 if v(k)>=0

  Sp=Sp+v(k);

 else

  Sn=Sn+v(k); end

end

fprintf('Suma Positivos=%i\n',Sp)

fprintf('Suma Negativos=%i\n',Sn)

2. Implemente una función de nombre facto que calcule el factorial de un número cualquiera; elprograma deberá responder ante el ingreso del dato.

3. Implemente un script que calcule la sumatoria de los primeros n números cuadrados perfectos.

 Solución:

n=input('n= ');

Scp=0;

for k=1:n

 Scp=Scp+k^2;

end

fprintf('Suma=%i\n',Scp)

4. Implemente una función de nombre exponencial que calcule la aproximación de ex por la serie deMaclaurin, con un error de 10-4, donde x y n son ingresados por el usuario.

5. Dada la ecuación de 2do grado: , implemente un script que calcule y muestre lasraíces de dicha ecuación y de qué tipo son dependiendo de su discriminante, donde a, b y c soningresados por el usuario.

 Solución:

Page 73: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 73/168

Guía Práctica MatLAB

73

a=input('a= ');

b=input('b= ');

c=input('c= ');

d=b^2-4*a*c;

if d>0

 disp('Raices Reales')

elseif d==0

 disp('Raices Reales Iguales')

else

 disp('Raices Complejas')

end

x1=(-b+sqrt(d))/2;x2=(-b-sqrt(d))/2;

fprintf('x1=%8.6f\nx2=%8.6f\n\n',x1,x2)

6. Implemente un script que muestre en pantalla la siguiente lista de artículos de una tienda:

[1] Zapatos…………S.200.00[2] Pantalones…….S.100.00

[3] Camisas………..S. 80.00

Y que el programa permita al usuario elegir el tipo de artículo a comprar, además que puedaingresar la cantidad que desea comprar. Finalmente el programa deberá mostrar el valor total apagar.

EJERCICIOS PROPUESTOS 

1. Escriba un programa que permita determinar si un número entero dado es par o impar. (Utilizar

el operador mod).

2. Utilizando el operador relacional > (mayor que), escriba un archivo.m que permita definir si unnúmero a es mayor que un número b. El programa debe admitir ingresar los números a y b, eimprimir el resultado a es mayor que b, o a es menor que b, o a es igual a b.

3. Implemente un programa que permita ingresar un vector con N números y, posteriormente, permitaevaluar la media aritmética.

4. Implemente un programa que dé como resultado los números primos menores que un número

dado n (positivo y entero).

Page 74: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 74/168

Capítulo 3

74

5. Imprima los múltiplos de 7 existentes entre dos valores m y n pedido al usuario. Modifique elalgoritmo para que calcule cuántos números hay y su suma.

6. Solicite al usuario dos números n y k  y calcule (combinaciones de n elementos tomados de k  en k ).

7. Diseñe un algoritmo que permita calcular la posición (fila y columna) de la mayor componente deuna matriz pedida al usuario.

8. Realice un programa en Matlab que calcule el centro de masas de un sistema de partículas en3D. Interés: Sumatorios y medias.

9. Cree un archivo.m que permita evaluar las series. Los argumentos de entrada son x y n, donde nes el número de términos que se evalúan en la serie y x es un número real:

a) 

b) 

c) 

Page 75: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 75/168

Capítulo

75

MATLAB ofrece numerosas oportunidades para emplear rutinas que realicen gráficas en dos y tresdimensiones, estas gráficas son alojadas en una ventana para su visualización donde existe unapaleta de comandos que permiten:

• Añadir texto en posiciones deseadas.

• Añadir flechas o líneas.

• Seleccionar alguna de las componentes del gráfico.

• Rotar el grafico a criterio deseado.

Las gráficas de MATLAB se pueden exportar a multitud de formatos gráficos puntuales y vectoriales(jpg, bmp, tiff, eps, png). Además está la posibilidad de guardarlos con la extensión fig. En ese caso,cuando se abre la figura se inicia la ejecución de MATLAB y se ofrece al usuario lafigura tal y comoestaba cuando la guardó, incluyendo modificaciones realizadas directamente sobre la ventana gráfica.

En lugar de dar instrucciones que se puedan ejecutar en la ventana de comandos, en este capítuloprincipalmente implementaremos scripts que generen uno o varios gráficos al ejecutarse.

VENTANA DE FIGURA

Todas las gráficas realizadas en MATLAB deben alojarse en una ventana de figura que se identifica porun nombre seguido de un valor de identificación, para invocarlo debemos escribir la siguiente sintaxis:

Ejemplo:

>> gure(8) % invocando a la ventana gura 8

Esta invocación responderá mostrando a la ventana figura 8:

4Gráfcos

Page 76: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 76/168

Capítulo 4

76

Si al realizar una gráfica no precisamos una ventana figura en la cual alojarla, al ejecutar el programaesta se alojará por defecto en la ventana figura 1.

Para cerrar una ventana figura n por comandos lo podremos hacer usando la función close(n);el orden de cerrar las ventanas existentes no interesa, en caso no exista la ventana la funcióncloseretornará un mensaje de error.

  >> close(8) % cerrando la ventana gura 8

FUNCIONES DE GRÁFICAS EN 2 DIMENSIONES 

 

La función más estándar en ser utilizada es el plot. A continuación mostramos la característica desus sintaxis:

plot(dominio,rango,'características')

plot(D1,R1,'caract1',D2,R2,'caract2',…,Dn,Rn,'caractN')

Función Descripción

plotGrafico de líneas en el plano cartesiano, ubicando y uniendo los puntos consegmentos de recta.

bar,barh Grafica parcela de barras verticales y horizontales

hist Grafica el histograma

stem Gráfico de bastones verticales, encierra a los puntos y los proyecta al eje x.

stairs Gráfica con trazos tipo escalonado.

polar Grafica las expresiones en coordenadas polares

pie Realiza gráficos de sectores.

rose Grafica el histograma angular, diagrama polar que muestra la distribución devalores agrupados de acuerdo con su rango numérico

compass Grafica un conjunto de flechas con origen en (0,0), cuya magnitud ydirección están determinadas por el módulo de z=x+iy

featherDibuja un conjunto de flechas con origen en el eje "x", cuya magnitud ydirección están determinada por el módulo de y.

loglogRealiza una gráfica cartesiana con escala logarítmica en los ejescoordenados.

semilogx Realiza una gráfica cartesiana con escala logarítmica en el eje "x" y escalanormal en el eje y.

semilogy Realiza una gráfica cartesiana con escala logarítmica en el eje "y" y escalanormal en el eje "x".

ll Dibuja una región poligonal cuyos vértices son definidos por sus argumentos.

Page 77: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 77/168

Guía Práctica MatLAB

77

La primera sintaxis realiza solamente una gráfica y la segunda es la forma para realizar hasta Ngráficas en un mismo eje cartesiano.

El argumento 'características' está conformado por 3 caracteres que especifican algunaspropiedades para la gráfica a realizarse con la función plot. El primer carácter nos especifica el tipode trazo a mostrar, el segundo especifica el color de línea y el tercer carácter especifica la marca delpunto.

Características de la Gráfica

Existen mucho más atributos que podemos asignar a las gráficas realizadas, como por ejemplo el

tamaño de la marca de punto, el color de fondo y del borde del mismo, así como el ancho de línea deltrazado. En el transcurso de las aplicaciones se irán mostrando algunos de estos para su futuro uso.

GRAFICAS EN 2D 

Puntos: Para ubicar puntos en el plano cartesiano es necesario ubicar los valores de las abscisas decada par ordenado en un vector y sus respectivas ordenadas en otro vector teniendo en cuenta queestas deben estar en la misma ubicación que ocupan sus abscisas.

Ejemplo:

Sean los siguientes puntos: , implemente un script para representardichos puntos en el plano cartesiano.

 Solución: Siguiendo la definición dada escribimos las siguientes instrucciones:

x=[-2 1 3 6];

y=[-1 1 -2 3];

plot(x,y,'ro') % note que obviamos el 1er caracter

Lo guardamos con el nombre de grafo1.m, lo ejecutamos y visualizando la ventana figura tendremoslo siguiente:

Tipo de línea

- Continua

-- Discontinua

: Punteada

-. Guión y Punto

x Equis

o Circunferencias

+ Cruces

Color de Línea

b Azul

r Rojo

g Verde

c Cian

m Magenta

y Amarillo

k Negro

Tipo de Marca

. Punto

+ Cruz

o Circunferencia

x Equis

s Cuadrado

d Diamante

p Pentagrama

Page 78: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 78/168

Capítulo 4

78

axis: Permite editar los ejes X e Y en extensiones deseadas.

 Sintaxis: axis([xmin xmax ymin ymax])

Agregando la función axis en el script anterior, tendremos el siguiente resultado:

x=[-2 1 3 6];y=[-1 1 -2 3];

  plot(x,y,'ro')

  axis([-3 7 -3 4])

Debido a que le dimos solamenteatributos de color y marca de punto,

el plot nos muestra esta gráficaque por defecto está alojada en laventana figura 1.Note además que la extensióndel eje X y del eje Y lo asumió elprograma por defecto tomando losvalores mínimos y máximos decada vector. Si queremos ajustarnuevas extensiones en los ejes,debemos utilizar la función axis.

Page 79: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 79/168

Guía Práctica MatLAB

79

MATLAB contiene funciones que nos permiten agregar algunas características para especificar lagráfica saliente:

Por último, al archivo grafo1.m le damos sus atributos para mostrar una mejor salida de nuestragráfica, el usuario puede visualizar el código del archivo que se encuentra en el disco, teniendo comoresultado la siguiente gráfica:

Función Descripcióngrid on, grid off Activa o desactiva el enrejado de los ejes.

xlabel('cadenax') Coloca la etiqueta cadenax al eje x.

ylabel('cadenay') Coloca la etiqueta cadenay al eje y.

title('cadena') Coloca el titulo cadena a la gráfica.

legend('cad_Leg') Coloca la leyenda cad_leg a la gráfica

axis([xo xf yo yf]) Sitúa los valores mínimos y máximos para los ejes

hold on, hold off Congela y descongela a la ventana figura para poder superponerotra grafica en los mismos ejes.

text(x,y,'cadena')Ingresa automáticamente el texto cadena en el planocartesiano iniciando la escritura en (x,y)

gtext(x,y,'cadena') Ingresa manualmente (con mouse) el texto cadena en el planocartesiano iniciando la escritura en (x,y)

ginput(n) Importar n puntos de una gráfica con el mouse, dichos puntosson almacenados en una variable asignada.

Page 80: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 80/168

Capítulo 4

80

Cartesianas:

Para hacer gráficas de funciones de una variable con MatLab, primero tenemos que crear una tablade valores de la variable para después dibujar la función. Debemos tener en cuenta que una curva es

la unión de infinitos puntos, debido a eso es necesario contar con una cantidad de datos necesariospara realizar la simulación.

Ejemplo:

Realizar la gráfica de la siguiente expresión:

x=linspace(-1,5,30); % vector dominio

y=sin(x.^2); % vector rango

plot(x,y) % graca por defecto

Guardando el archivo con el nombre grafo2.m y ejecutando, tendremos:

Notamos las imperfecciones de la curva debido a la poca cantidad de información, pero si aumentamosla cantidad de puntos al vector x, ver código en el disco, tendremos una curva bastante suave conrespecto a la primera:

Page 81: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 81/168

Guía Práctica MatLAB

81

Ahora supongamos que queremos representar la función:

Para poder graficar f(x), generamos una tabla de valores en el dominio en el que queramos dibujar lafunción y definimos la función, multiplicando cada trozo por el índice lógico que describa el lugar enel que queremos dibujarlo.

Implementando en el editor las instrucciones a continuación y guardando el archivo con nombregrafo3.m y ejecutando, tendremos:

x=linspace(-2,3,3000);y1=(x.^2).*(x<0);

y2=1.*((0<=x)&(x<1));

y3=(-x+2).*(1<=x);

y=y1+y2+y3;

plot(x,y,'-b','linewidth',2)

grid on

title('Funcion denida a trozos','fontsize',16)

 

Page 82: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 82/168

Capítulo 4

82

Utilizando las demás funciones para las gráficas tendremos lo siguiente:

 stem: stairs:

bar: loglog:

Paramétricas:

Se observa que tanto el domino como el rango dependen de una variable.

Ejemplo:Graficar la siguiente curva paramétrica:

Implementamos en un editor las siguientes instrucciones:

t=0:0.1:5*pi;

x=2*t.*cos(t);

y=2*t.*sin(t);

plot(x,y,'linewidth',2)

grid on

>>x=-3:0.1:2*pi;

>>y=exp(-x/2).*sin(2*x);>>stem(x,y)

>> x=0:0.1:pi;

>> y=sin(x);

>> bar(x,abs(y))

>>x=0:0.1:2*pi;

>>y=sin(x);>>stairs(x,y)

>> x=0:0.1:pi;

>> y=sin(x);

>> bar(x,abs(y))

Page 83: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 83/168

Guía Práctica MatLAB

83

Guardamos el archivo con nombre grafo4.m y lo ejecutamos, entonces tendremos la siguiente curvaparamétrica:

Polares:

Ejemplo:

Graficar la siguiente curva polar: para

 Solución:

Editando un archivo las instrucciones siguientes:

u=linspace(0,2*pi,360);

r=3-2*cos(3*u);

polar(u,r);

Guardamos con nombre grafo5.m y ejecutamos para ver la curva polar.

 

Page 84: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 84/168

Capítulo 4

84

quiver: Permite crear los vectores velocidad en los puntos de una gráfica.

 Sintaxis: quiver(x,y,z,dx,dy,dz)

Graficar los vectores velocidad sobre la curva:

Resolviendo en la ventana de comandos:

>> t=linspace(0,2*pi,20);

>>quiver(cos(t),sin(t),-sin(t),cos(t))

>>axis square

El número de vectores velocidad que aparecen es 20. Si el número de puntos que se indica con elcomando linspacees demasiado grande, puede que no se aprecie con claridad la gráfica, ya que éstaserá el número de vectores velocidad que se mostrará.

La gráfica resultante es: 

El comando comet produce un resultado dinámico, la forma de ejecución es similar al plot, pero estavez aparece un circulito (el cometa) que va dibujando la curva. La velocidad de ejecución dependedel número de puntos que hayamos generado con el comando linspace.Ingrese las siguientes líneasy verifique la salida gráfica que resulta de la aplicación.

>> t=linspace(-5,5,1000);

>> comet((t.*(t.^2-1))./(t.^2+1),(2*(t.^2-1))./(t.^2+1))

Page 85: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 85/168

Guía Práctica MatLAB

85

hist: pie:

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.

Ejemplo:

>> x=0:0.1:4;

>> y1=4*exp(-x).*sin(2*x);

>> y2=2*cos(x);

>> plot(x,y1,x,y2)

 

>> x = -4:0.1:4;

>> y = randn(length(x),1);>> hist(y,x)

>> x = [1 3 0.5 2.5 2];

>> explode = [0 1 0 0 0];>> pie(x,explode)

Page 86: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 86/168

Capítulo 4

86

Utilizando la función hold antes de un nuevo comando que gráfica podemos superponer más gráficasen una sola ventana figura.

>> x=0:0.1:5;>> y1=3*sin(x);

>> y2=cos(x);

>> plot(x,y1)

>> hold on % congela la ventana

>> plot(x,y2)

>> grid on

>> hold off % descongela la ventana

 

 subplot: Permite que una ventana figura pueda dividirse en varios ejes, dividiéndose en filas y columnas,asignando a cada división un número identificador, permitiendo así alojar más de una gráfica.

 Sintaxis: subplot(#las,#columnas,posición)

Ejemplo:

Realizar la gráfica de las siguientes expresiones en una sola ventana figura.

a) 

b) 

c) 

d) 

Page 87: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 87/168

Guía Práctica MatLAB

87

 Solución:

x=linspace(0,4,300);

y1=8*sqrt(x);

y2=6*sin(4*x);

y3=x.^2;

y4=10*exp(-x).*cos(4*x);

subplot(2,2,1)

plot(x,y1,'linewidth',2)

title('Curva 1')

subplot(2,2,2)

plot(x,y2,'linewidth',2);title('Curva 2')

subplot(2,2,3)

plot(x,y3,'linewidth',2);title('Curva 3')

subplot(2,2,4)

plot(x,y4,'linewidth',2);title('Curva 4')

 

Tenga en cuenta que cada gráfica está sujeta independientemente al manejo de sus diferentescaracterísticas, es decir: color, trazo, marca, etiqueta de ejes, título, leyenda, etc. Pueden serdiferentes para cada gráfica.

Page 88: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 88/168

Capítulo 4

88

FUNCIONES DE GRÁFICAS EN 3 DIMENSIONES 

Puntos: En tres dimensiones debemos tener en cuenta que ahora cada punto tendrá tres coordenadas,por lo tanto tendríamos tres vectores que alojan al conjunto de abscisas, ordenadas y altura.

Ejemplo:

Sean los siguientes puntos: , implemente un script pararepresentar dichos puntos en el plano cartesiano.

 Solución:  Generando el script grafo3D1.m, ubicarlo en el CD, podemos visualizar las siguientessalidas:

Función Descripción

plot3 Grafica un conjunto de puntos en los ejes tridimensional.

ll3 Dibuja una región poligonal cuyos vértices son los elementos delos vectores que representan a los datos en los ejes XYZ.

stem3 Grafica bastones verticales, iniciando desde el plano XY

comet3 Realiza el trazado de la curva en forma dinámica

bar3 Grafica de barras tridimensionales

pie3 Grafica sectores cilíndricos tridimensionales

mesh Grafica una superficie z=f(x,y)

meshcGrafica una superficie z=f(x,y) y proyecta las curvas de nivel enel plano XY.

meshzGrafica una superficie z=f(x,y) cerrando la grafica con lasfronteras del dominio.

surf Grafica una superficie z=f(x,y) dando relleno de color a cada unade las celdas.

surfc Grafica una superficie z=f(x,y) , proyectando las curvas de nivelal plano XY

sur Grafica una superficie z=f(x,y) considerando una iluminación en

formato básico.waterfall Grafica una superficie z=f(x,y) en forma de cascada.

contour

contour3Grafica las curvas de nivel en 2D y 3D

sphere Grafica una esfera unitaria.

cylinder Grafica una superficie de revolución para f(t) en el dominio t

ribbony Grafica una superficie z=f(x,y) como cintas tridimensionales

quiver3Grafica los vectores velocidad en los puntos de las coordenadas

tridimensionales.

Page 89: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 89/168

Guía Práctica MatLAB

89

 plot3(x,y,z,'ro'): stem3(x,y,z,'r')

Cartesianas:

Cada valor para los ejes estará representado por 3 vectores del mismo orden.

Ejemplo:

Graficar la curva cartesiana representada por:

 Solución:

Editando en un script de nombre grafo3D2.m las siguientes instrucciones:

x=linspace(0,10,300);y=2*sqrt(x+1);z=7*exp(-y/4).*cos(4*x);plot3(x,y,z)grid on

Ejecutando el archivo, tendremos la gráfica siguiente:

Page 90: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 90/168

Capítulo 4

90

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,5*pi,300);

x=3*t.*cos(t);

y=3*t.*sin(t);z=t.^2;

plot3(x,y,z)

grid on

Guardando el archivo con el nombre grafo3D3.m y ejecutando, tendremos:

A partir de las formas de graficar mostradas hasta ahora, podemos deducir que el usuario ya cuentacon las herramientas necesarias y suficientes para interpretar gráficamente cualquier expresiónmatemática en coordenadas cartesianas, paramétricas y polares, ya sea en 2D o en 3D.

Page 91: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 91/168

Guía Práctica MatLAB

91

SUPERFICIES 

MATLAB es mucho más práctico y funcional al momento de representar las superficies 3D, dispone deuna gran variedad de formatos para dibujar gráficas de funciones de dosvariables y una componente,

ya sea por mallado, líneas de contorno y cuadrículas de colores que son las usadas. Para visualizarcorrectamente las superficies es adecuado y preciso que estén representados como funcionesdefinidas sobre un domino rectangular en cualquiera de los planos de referencia.

Para trabajar con regiones rectangulares, definiremos los vectores de abscisas y deordenadas , que representarán a los ejes, entonces la región de dominio rectangularestará definida por el conjunto de coordenadas siguientes: ,generando una matriz de orden n×m.

Para facilitar la creación del enrejado en MATLAB, utilizaremos la función meshgridque tiene

la siguiente sintaxis:

[xmatriz,ymatriz]=meshgrid(xvector,yvector)

Forma z=f(x,y)

Para graficar funciones de dos variables , al igual que para funciones de una variable,primero hay que disponer de datos en una extensión del eje x y también otro conjunto de datosenuna extensión del eje y. Seguidamente tenemos que generar un mallado interceptando los datos en elplano XY. Para ello utilizaremos la función meshgrid. A continuación mostramos un ejemplo:

>> x=-1:0.1:1; % orden: 1x21

>> y=-2:0.1:2; % orden: 1x41

>> [xm,ym]=meshgrid(x,y); % enrejado matriz de 21x41

 Y finalmente expresaremos la función z con las variables enrejadas:

>> zm=exp(-xm.^2-ym.^2).*sin(-xm.^2-ym.^2);

Visualizar la superficie se puede lograr de las siguientes formas:

>> mesh(xm,ym.zm) ó >> surf(xm,ym,zm)

mesh(xm,ym,zm) surf(xm,ym,zm)

Page 92: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 92/168

Capítulo 4

92

waterfall(xm,ym,zm) ribbon(xm,ym,zm)

 surf(xm,ym,zm); shading flat surf(xm,ym,zm); shading interp

 SOMBRAS Y COLORES Para conseguir efectos de sombreadosy colores diferentes se pueden consultar

todas las posibilidades de loscomandos colormap y shading. Algo que resulta también interesante esañadir una escala de colores al dibujo, lo que nos permite conocer las alturas (coordenada z) de losdiferentes puntos de la gráfica, esto se consigue con el comando colorbar (después de dibujada lagráfica). A continuación mostraremos el uso de estos comandos:

>>[x,y]=meshgrid(linspace(-1,1,50));>>z=cos((x.*y)./(x.^2+y.^2+1));>>surf(x,y,z)>>shading interp>>colorbar

 

Como se puede observar, los puntos más altoscorresponden a los colores más calientes y lospuntos más bajos de la gráfica están coloreadoscon colores fríos.

Page 93: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 93/168

Guía Práctica MatLAB

93

ROTACIÓN DE GRÁFICA: Otros comandos interesantes en las gráficas 3D es la que manipulan lavista de los ejes coordenados.

rotate3d  nos permite activar la rotación de la vista utilizando el ratón sobre la figura, rotándola demanera interactiva en tres dimensiones.

view: Especifica la posición del espectador (el punto de vista) determinando la orientación de los ejes. Seespecifica el punto de vista en términos de azimut y elevación, o por un punto en el espacio tridimensional.

view([az,el])  ó view([x,y,z])

SUPERFICIES COMPLEJAS 

Sea la función compleja de variable compleja:

El comando cplxmap  permite representar gráficas de funciones complejas de variable compleja,dibujando una gráfica tridimensional en la que el eje X es la parte real de la variable ; el eje Yes la parte imaginaria de la variable y el eje Z es la parte real de la imagen de la función, esdecir, .

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.

Esto se consigue utilizando previamente el comando cplxgrid(n), donde n es el número entero positivo.

Por ejemplo, para obtener la gráfica de la función realizaremos las siguientes líneas de instrucciones:

>>z=cplxgrid(12);

>>cplxmap(z,z.^2)

Obteniéndose lo siguiente:

Se observa que para cada valor de z, laimagen es única. Esto no es así paracualquier función compleja. Por ejemplo, lafunción es una función bivaluada,la función es una función trivaluada,cada z puede producir tres valores distintospara , y así sucesivamente.

Page 94: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 94/168

Capítulo 4

94

ESTADÍSTICAS 

bar3: pie3:

SUPERFICIES: GENERADOS POR FUNCIONES 

Hay varios comandos en MatLab que permiten generar las gráficasde superficies en R3 (superficiesque no son funciones.) Estos comandos son funciones que ya vienen programadas.

ESFERA

Se genera utilizando el comando

>>sphere(n),

donde n es el número de puntos en los que quedadividido el ecuador de la esfera. Cuanto mayor sea n,

mayor sería la aproximación a la curvatura real delaesfera (de radio 1, centrada en el origen).Poniendosólo >>sphere, el valor que tomará n sería 20, pordefecto. A continuación damos un ejemplo de cómorealizar la gráfica de la esfera de la derecha:

>>sphere;axis square;title('ESFERA')

>> x=[10 2 3 5 18 20 15 ];

>> bar3(x);

>> x = [1 3 0.5 2.5 2];

>> explode = [0 1 0 0 0];>> pie3(x,explode)

Page 95: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 95/168

Guía Práctica MatLAB

95

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,pero guardando la información en tres variables:

>>[x,y,z]=sphere(30); %

Utilizar el siguiente comando:

>>surfnorm(x,y,z)

Este comando también se puede utilizar para dibujar

los vectores normales en superficies de funciones de laforma z = f(x; y). Para dibujarlas normales en el sentidoopuesto habría que poner surfnorm(x',y',z').

CILINDRO 

El comando >>cylinder(R,n) genera automáticamente un cilindro de revolución de radio R, donde

n es el número depuntos de la circunferencia de la base del cilindro. Como en el caso de laesfera, siusamos sólo >>cylinder(R), el número n es, por defecto, 20.

Lo realmente interesante de este comando es quetambién admiteradios variables R(t), con .De esta forma, puede ser utilizado para obtenerlas gráficas de diferentes tipos de superficiesde revolución,donde la generatriz es una funcióndefinida por R(t). Por ejemplo, siqueremos dibujarun paraboloide de revolución, podemos utilizarcomogeneratriz la función con ,realizaremos lo siguiente.

>>t=linspace(0,2,20);

>>r=sqrt(t);

>>cylinder(r)

Page 96: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 96/168

Capítulo 4

96

GEOMETRÍA DIFERENCIAL DE CURVAS 

En matemáticas, la geometría diferencial de curvas  propone definiciones y métodos para analizarcurvas simples en Variedades de Riemann, y en particular, en el Espacio Euclídeo.

LONGITUD DE ARCO 

Dada una curva suficientemente suave (diferenciable y de clase ), en y dado su vector deposición expresado mediante el parámetro ;

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.

VECTORES TANGENTE, NORMAL Y BINORMAL: TRIEDRO DE FRÊNET-SERRET 

Dada una curva parametrizada según un parámetro cualquiera se define el llamado vector

tangente, normal y binormal como:

Page 97: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 97/168

Guía Práctica MatLAB

97

Vista esquemática del vector tangente, vector normaly vector binormal de una curva hélice.

Estos tres vectores son unitarios y perpendiculares entre sí, juntos configuran un sistema de referenciamóvil conocido como Triedro de Frênet-Serret a raíz del estudio de Jean Frenet y Joseph Serret. Esinteresante que para una partícula física desplazándose en el espacio, el vector tangente es paraleloa la velocidad, mientras que el vector normal da el cambio dirección por unidad de tiempo de lavelocidad o aceleración normal.

Si la curva está parametrizada según la longitud de arco, como se explicó en la sección anterior lasfórmulas anteriores pueden simplificarse notablemente:

 

Donde los parámetros y anteriores designan precisamente a la curvatura y a la torsión.

CURVATURA Y TORSIÓN 

La curvatura es una medida del cambio de dirección del vector tangente a una curva, cuanto másrápido cambia éste a medida que nos desplazamos a lo largo de la curva, se dice, que más grandees la curvatura. Para una curva parametrizada cualquiera la curvatura es igual a:

 

Si la curva está parametrizada por el parámetro de longitud de arco, la anterior ecuación se reducesimplemente a:

 Además de la curvatura se suele definir el llamado radio de curvatura, como el inverso de la curvatura.

Page 98: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 98/168

Capítulo 4

98

La torsión es una medida del cambio de dirección del vector binormal: cuanto más rápido cambia,más rápido gira el vector binormal alrededor del vector tangente y más retorcida aparece la curva.

Por lo tanto, para una curva totalmente contenida en el plano la torsión es nula ya que el vectorbinormal es constantemente perpendicular al plano que la contiene. Para el caso general la torsiónviene dada por:

Si la curva está parametrizada por el parámetro de longitud de arco, la anterior ecuación se reduce a:

 

PLANO OSCULADOR 

En cada punto de una curva, el plano osculador es el plano que contiene al su vector tangente y alvector normal a la curva. Para una partícula desplazándose en el espacio tridimiensional, el planoosculador coincide con el plano que en cada instante contiene a la aceleración y la velocidad. Laecuación de este plano viene dada por:

 

Donde:

 , el punto de la trayectoria.

 , el vector velocidad en el punto considerado.

 , las coordenadas de un punto genérico del plano osculador.

Si se tiene una partícula en la posición , moviéndose con velocidad y sometida a una aceleración

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

Page 99: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 99/168

Guía Práctica MatLAB

99

CENTRO DE CURVATURA

Ilustración de la circunferencia osculatriz en el punto P  de la curva C, en la que se muestra tambiénel radio y centro de curvatura.

En un entorno de un punto de una curva puede ser aproximado por un círculo, llamado círculoosculador por estar contenido en el plano osculador. El radio del círculo osculador coincide con elradio de curvatura (inverso de la curvatura). 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 puntode una curva y su vector tangente, la curva queda totalmente especificada si se conoce la función decurvatura y de torsión. Su enunciado es el siguiente:

Sea un intervalo. Dadas dos funciones continuas X y t de a y dado un sistema dereferencia fijo (ortonormal) de , {x

0; e

1, e

2, e

3}, entonces existe una única curva parametrizada de

, y tales que:

1. La curva pasa por x0, y el vector tangente T a la curva en ese punto coincide con e

1.

2. A lo largo de la curva pueden definirse tres campos vectoriales T(s), N(s) y B(s) llamadosrespectivamente vector tangente, normal y binormal, perpendiculares entre sí y tales que en el

punto inicial coinciden con e1, e2, e3 (es decir, T(0) = e1, N(0) = e2, B(0) = e3).

Page 100: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 100/168

Capítulo 4

100

3. Se cumplen las siguientes ecuaciones:

 

O bien escrito matricialmente:

 

donde el punto es la derivada con respecto al arco parámetro s.

Esto tiene implicaciones físicas interesantes, por ejemplo, la trayectoria de una partícula quedaespecificada si se conocen la posición inicial, la velocidad inicial y la variación en el tiempo de lasderivadas segundas (que están relacionadas con la curvatura y la torsión). Es por eso por lo quelas leyes de Newton o las ecuaciones de Euler-Lagrange se expresan en términos de derivadas desegundo orden (que es necesario complementar con la posición y velocidades iniciales).

Se pide al usuario ejecutar el script tiedro_movil.m, circ_oscula.m, plano_osculador.m ylong_arco.m, luego ingresar los datos solicitados por el cada uno de los programas para obtenerlas definiciones anteriores.

EJERCICIOS PROPUESTOS 

1.  Dibuje las gráficas de las siguientes funciones eligiendo, en cada caso, una tabla de valoresadecuada para que aparezcan los aspectos más representativos de la función:

a) 

b) 

c) 

d) 

e) 

f) 

Page 101: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 101/168

Guía Práctica MatLAB

101

g) 

h) 

i) 

2.  Dibujar las siguientes curvas en paramétricas; en los apartados a) y b), dibujar además losvectores velocidad utilizando el comando quiver:

a) 

b) 

c) 

d) 

e) 

f) 

g) 

h) 

3.  Dibujar las siguientes curvas polares:

a) 

b) 

c) 

d) 

e) 

Page 102: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 102/168

Capítulo 4

102

f) 

g) 

h) 

4.  Graficar las siguientes curvas:

a) 

b) 

c) 

d) 

5.  Representar las gráficas de las siguientes funciones de 2 variables, utilizando alguno de loscomandos descritos anteriormente. Dibujar también algunas curvas de nivel. Tome las extensionesadecuadas para x e y.

a) 

b) 

c) 

d) 

6.  Dibujar las superficies generadas por >>cylinder(R(t),30), en cada uno de los siguientescasos:

a)  ,

b)  ,

c)  ,

d)  ,

Page 103: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 103/168

Capítulo

103

5Polinomios

En la actualidad los polinomios son utilizados en la mayoría de los cursos relacionados con laprogramación de los métodos numéricos, justificando así la facilidad de manipulación y deimplementación en cualquiera de los lenguajes existentes. Es muy conocido también que en el áreade control existe la manipulación de polinomios de estados para representar el comportamiento através del tiempo de un sistema, y es ahí donde apuntamos el estudio de este capítulo.

DEFINICIÓN 

Con MATLAB se puede trabajar con polinomios de forma sencilla.Es suficiente tener en cuenta queun polinomio en el programa no es nada más que un vector que contiene los coeficientes de dichopolinomio completo y ordenado descendentemente en su grado. Es decir, si tenemos la expresión:

 Podemos representarlo en MATLAB de la siguiente manera:

Por ejemplo, si deseamos escribir los polinomios:

  y

Sólo realizaríamos lo siguiente:

>> f=[3 0 1] % polinomio f de grado 2f =  3 0 1

>>g=[2 0 -1 3] % polinomio g de grado 3g =  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 fF =3*x^2 + 1

>> G=poly2sym(g) % expresión algebraica de g

G =2*x^3 - x + 3

Page 104: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 104/168

Capítulo 5

104

Toda matriz está asociada a un polinomio, la cual recibe el nombre de polinomio característico de lamatriz, y este se obtiene de la siguiente forma:

>>A=round(46*randn(4)); % matriz cualquiera

A =  25 15 165 33  84 -60 127 -3  -104 -20 -62 33  40 16 140 -9

>>pA=poly(A) % obtiene de polinomio característico de ApA =  1.0e+007 *  0.0000 0.0000 0.0014 0.1266 3.5530

Las raíces de todo polinomio se hallan de la siguienteforma:

>>fr=roots(f) % vector columna de las raíces de ffr =  0 + 0.5774i  0 - 0.5774i

>>gr=roots(g) % vector columna de las raíces de ggr =  -1.2896

0.6448 + 0.8645i  0.6448 - 0.8645i

Si tenemos un vector cuyos elementos son las raíces de un polinomio cualquiera, entonces con lafunción poly podemosconocer a dicho polinomio de coeficiente principal igual a 1. Sea el vector r:

>>r=[-1 2 -2 -1 3];>>R=poly(r) % polinomio de raíces rR =  1 -1 -9 1 20 12

>>r=[-1 2 -2 1 3];

>>R=poly(r) % polinomio de raíces rR =  1 -3 -5 15 4 -12

La cantidad de elementos de un vector que representa a un polinomio está relacionada con el gradode dicho polinomio, dicho grado se halla así:

>>gradoF=length(f)-1 % grado del polinomio FgradoF =  2

>>gradoG=length(g)-1 % grado del polinomio G

gradoG =  3

Page 105: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 105/168

Guía Práctica MatLAB

105

OPERACIONES CON POLINOMIOS 

conv: Calcula el producto de 2 polinomios.

 Sintaxis: var = conv(poly1,poly2)

Ejemplo:  De los polinomios f y g definidos anteriormente, tendremos:

>>FG=conv(f,g) % producto de f con g

FG =

  6 0 -1 9 -1 3

>>FG=conv(g,f) % producto de g con f

FG =

  6 0 -1 9 -1 3

deconv: Calcula la división de 2 polinomios.

 Sintaxis: cociente = deconv(poly1,poly2)

  [cociente,resto] = deconv(poly1,poly2)

No debe olvidar que el grado de poly1 es mayor o igual al grado de poly2.

Ejemplo:  De los polinomios f y g definidos anteriormente, tendremos:

>>cocienteGF=deconv(g,f)

cocienteGF =

  0.6667 0

>>[cocienteGF,residuo]=deconv(g,f)

cocienteGF =

  0.6667 0

>>residuo =  0 0 -1.6667 3.0000

Ahora, si deseamos sumar dos polinomios de diferentes grados, debemos tener en cuenta quedichos polinomios serán representados en MATLAB como dos vectores de diferentes cantidadesde elementos, por lo tanto es imposible realizar la operación con el operador "+" de forma directa,debido a esto, debemos aumentar una cantidad de ceros a la izquierda del vector de menor númerode elementos para tener la misma cantidad para ambos vectores, sólo así se verificará que la sumaes realizable. Las siguientes líneas de instrucciones posibilitan realizar la suma de dos polinomios dediferentes grados.

Page 106: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 106/168

Capítulo 5

106

function s=sumapol(p,q)

n=length(p)-1;

m=length(q)-1;if n>m

q=[zeros(1,n-m) q];

else

p=[zeros(1,m-n) p];

end

s=p+q;

Guardando esta función creada con el nombre de sumapoly aplicando:

>>S=sumapol(g,f) % g+f

S =

  2 3 -1 4

>>S=sumapol(f,g) % f+g

S =

2 3 -1 4

 polyder: Calcula la derivada de un polinomio.

 Sintaxis: var = polyder(poly)

Ejemplo: Siendo f, g y R polinomios definidos anteriormente, 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.

 Sintaxis: var = polyint(poly)  var = polyint(poly,k)

Page 107: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 107/168

Guía Práctica MatLAB

107

La primera sintaxis nos dará la integral con constante = 0 y la siguiente nos dará la integral con unaconstante de valor k.

Ejemplo:  Tomando los polinomios f y g ya definidos anteriormente:

>>If=polyint(f) % TérminoIndependiente = 0

If =

1 0 1 0

>>Ifk=polyint(f,2.6) % Término Independiente = 2.6

Ifk =

  1.0000 0 1.0000 2.6000

>>Igk=polyint(g,-6) % Término Independiente = -6

Igk = 0.5000 0 -0.5000 3.0000 -6.0000

 polyval: Evalúa a un polinomio en un valor o un conjunto de datos.

 Sintaxis: var = polyval(poly,x) 

Ejemplo:  Tomando al polinomio f definido anteriormente, tendremos:

>> x=16;>> fx=polyval(f,x)

fx =

769

>> x=12:17;

>> fx=polyval(f,x)

fx =

433 508 589 676 769 868

Si queremos graficar al polinomio en el dominio , implementaremos un scriptcon las siguientes instrucciones:

f=[3 0 1];

x=-5:0.1:5;

y=polyval(f,x);

plot(x,y,'-r') % gracando al polinomiogrid on

Page 108: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 108/168

Capítulo 5

108

Guardando el archivo con el nombre poly_ejemplo.m y ejecutándolo, tendremos:

EJERCICIOS: 

a)  Sea las raíces de un polinomio de grado 3: , obtenga dicho polinomioademás de su gráfica para .

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 libertadde elegir el grado de este, aplicaremos la siguiente función:

 polyfit: Construye un polinomio de ajuste de grado n utilizando el método de los mínimos cuadradosempleando los datos en el dominio y el rango.

 Sintaxis: Pol = polyt(datoX,datoY,grado)

Page 109: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 109/168

Guía Práctica MatLAB

109

Ejemplo: Utilizaremos la función rand para obtener datos cualquiera para X e Y.

>> x=7*rand(1,10);

>> y=26*rand(1,10);>> Pajus=polyt(x,y,1) % polinomio de orden 1Pajus =

  0.1427 9.5543

>> Pajus=polyt(x,y,3) % polinomio de orden 3Pajus =

  0.0248 -1.6996 11.1710 -1.6257

Ejercicio:

Implemente un archivo script que grafique los polinomios de ajuste de 1°, 2°, 3°, 4° y además losdatos X e Y para un dominio , siendo estos los siguientes:

Solución: Ejecutando el archivo pol_ajuste.m del CD, tendremos lo siguiente:

FUNCIONES DE INTERPOLACIÓN 

 spline: Realiza la interpolación cúbica de datos.

 Sintaxis: var = spline(datoX.datoY,x)

Utiliza una interpolación spline cúbico para encontrar var,los valores de la función dato Y subyacentea los valores de la x interpolante. Para la interpolación, la variable independiente se supone que es ladimensión final de datoY con los puntos de interrupción definidos por x

Page 110: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 110/168

Capítulo 5

110

Ejemplo:

Las siguientes líneas guardadas como script de nombre interp_spline.m, generan una curva sinusoidal.Acontinuación, las muestras de la estría sobre una malla más fina.

x=0:10;y=sin(x);xx=0:.25:10;yy=spline(x,y,xx);plot(x,y,'o',xx,yy)

El resultado gráfico será la siguiente figura: 

interp1: Interpola datos en 1-D.

 Sintaxis: yi=interp1(x,Y,xi,'metodo')

Interpola para encontrar yi, los valores de lafunción Ysubyacenteen los puntos en la xi vector omatriz.X debe serun vector. Y puede serun escalar, un vector, o una matriz de cualquier dimensión,además metodo es la forma de cómo se desea realizar la interpolación, siendo estas las siguientes:

nearest  : Interpolación del vecino más cercanolinear  : Interpolación linealcubic  : Interpolación usando polinomio cúbico de tipo de Hermite.

Ejemplo: Las siguientes instrucciones guardadas con el nombre interp_INTERP1.m, generan una curvasinusoidal gruesa e interpola sobre un eje de abscisas más fino.

x = 0:10;y = sin(x);xi = 0:.25:10;

yi = interp1(x,y,xi);plot(x,y,'o',xi,yi)

Page 111: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 111/168

Guía Práctica MatLAB

111

El resultado gráfico será la siguiente figura:

 

EJERCICIOS: 

1.  Suponga que tiene el siguiente conjunto de puntos de datos:

a)  Genere una gráfica que compare la conexión de los puntos de temperatura con líneas rectasy con una spline cúbica.

b)  Calcule los valores de temperatura en los siguientes instantes: 0.3, 1.25, 2.36 y 4.48,usando interpolación lineal e interpolación con spline cúbica.

c)  Compare los valores de tiempo que corresponde a estas temperaturas: 81, 96, 100 y 106,usando interpolación lineal e interpolación con spline cúbica.

Tiempo (s) Temperatura °F 

0.0 72.5

0.5 78.1

1.0 86.4

1.5 92.3

2.0 110.6

2.5 111.5

3.0 109.3

3.5 110.2

4.0 110.5

4.5 109.9

5.0 110.2

Page 112: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 112/168

Capítulo 5

112

2.  Efectúe un ajuste de 1°, 2°, 3° y 4°, mostrando las aproximaciones para x=3.1 y x=3.75empleando los polinomios involucrados, finalmente muestre sus respectivas gráficas. La siguientetabla muestra los datos a ajustar:

x y

0.0 18

1.0 20

2.0 12

3.0 0

4.0 -10

5.0 -12

6.0 0

7.0 32

8.0 90

9.0 180

10.0 308

Page 113: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 113/168

Capítulo

113

6Interpolación

En la práctica de la ingeniería se utilizan mucho las tablas de datos, como en el caso de las tablasde vapor saturado en la termodinámica. En la mayoría de los casos el dato necesario no se encuentraexplícito en la tabla sino entre dos valores de ésta, para lo cual es necesario estimarlo de entrelos valores que presenta la tabla en un proceso conocido como interpolación. La idea básica dela interpolación es hallar un polinomio o función que cumpla con pasar por todos los puntos de un

conjunto de datos, y poder estimar los valores entre ellos por medio del polinomio.

POLINOMIOS DE LAGRANGE

Para ilustrar la interpolación por polinomios de Lagrange considérese un conjunto de datos de trespuntos. 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ándoseentre sí. Lo mismo sucede con los demás puntos, por lo que se ve que el polinomio cumple con lacondición de pasar por todos los puntos de datos. En general, para n puntos de datos, el polinomiode Lagrange es:

  (1)

Una forma mucho más sencilla de ver la ecuación 1 es en forma de código, el cual se muestra escritopara MATLAB en las siguientes líneas:

p=0;for k=1:length(x)  den=1;L=[]; % termino de lagrange  for r=1:length(x)  if r~=kxp=x; % hallando el numerador de L  xp(k)=[]; % elimino el termino k-esimo  num=poly(xp); % numerador: polinomio de x  d1=(x(k)-x(r));% denominador de Lden=den*d1;  end

  end

  L=num/den;p=p+y(k)*L % Polinomio de Lagrangeend

Page 114: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 114/168

Capítulo 6

114

Dicho código está guardado en el CD como un script de nombre polLAGRANGE.m.

A continuación se muestra un ejemplo para ilustrar la implementación del código anterior:

Ejemplo:

Se tiene el conjunto de datos {(1,1),(2,3),(3,-1),(4,0),(5.3),(6,2)}. Muestre el polinomiointerpolador de Lagrange y la gráfica que se calcula ejecutando el script polLAGRANGE.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

----- - ----- + ------ - ------- + ------ - 43

120 24 24 24 20

¿Deseas Gracar [Y]/[N]? : YFin del Programa

 

Page 115: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 115/168

Guía Práctica MatLAB

115

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 diferenciasdivididas de Newton. Recordemos su definición, 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 anteriorescomo:

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

fprintf(' %10.4f',y(j));

end

fprintf('\n');end

Para los datos en x e y dados abajo, el resultado al aplicarse el código anterior puede verse en laslíneas siguientes. Los coeficientes del polinomio que hay que poner en la forma de Newton serían loselementos de la columna vertical izquierda:

 x =

-4 -2 0 2 4

y =  0.7568 -0.9093 0 0.9093 -0.7568

  -0.8330 0.4546 0.4546 -0.8330

  -0.3219 0.0000 0.3219

  -0.0537 -0.0537

  0.0000

Page 116: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 116/168

Capítulo 6

116

Ejemplo:

Se tiene el conjunto de datos {(1,1),(2,3),(3,-1),(4,0),(5.3),(6,2)}. Muestre el polinomiointerpolador de Newton por diferencias divididas y la gráfica que se calcula ejecutando el script

newtoninterp.m

 Solución:

Ingresando los vectores de datos y aplicando la función, tendremos:

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

>> y=[1 3 -1 0 3 2];

>> t=1:0.1:6;

>> p = newtoninterp(x,y,t);

 

Page 117: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 117/168

Guía Práctica MatLAB

117

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: 

Page 118: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 118/168

Page 119: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 119/168

Capítulo

119

7Resolución de Sistema

de Ecuaciones Lineales

En esta parte veremos cómo usar MATLAB para resolver sistemas de ecuaciones lineales. Al igual queen la sección anterior usaremos tanto las rutinas internas de MATLAB como rutinaspropias creadaspor el usuario, asimismo las que se encuentran disponibles en la guía básica de MATLAB que seencuentra en la página del curso. Pero además usaremos una combinación de los dos procedimientos.Comencemos con las fáciles y sencillas rutinas internas de MATLAB: Si queremos resolverun sistema

de ecuaciones lineales, lo primero que debemos hacer es escribirlo en la forma matricial Ax=b.

DEFINICIÓN 

Un sistema de ecuaciones lineales simultáneas de la forma:

. .. .. .

Puede representarse mediante una matriz .

A partir de la matriz A y el vector b:

 

Se forma la matriz aumentada:

 

Esta matriz aumentada representa la ecuación vectorial

Page 120: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 120/168

Capítulo 7

120

Por ejemplo, consideremos el sistema de ecuaciones:

Este sistema se puede escribir en la forma con:

Para resolverlo en MATLAB, primero definimos la matriz A y el vector b, así:

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

>>b=[2;6;15];

Sabiendo que , realizamos en MATLAB lo siguiente:

>>x=inv(A)*b

Con lo cual obtenemos:

x =3.1429e+0001.0000e+0003.2857e+000

Otra manera de llegar a esta solución es escribiendo en lugar de inv(A); sin embargo, lamanera más sencilla de hacerlo en MATLAB es escribiendo:

>> x = Ab

Donde el símbolo \ (división a izquierda), se usa en MATLAB para obtener la solución delproblema.

De los varios métodos explicados hasta aquí para la solución de sistemas lineales usando MATLAB,el que más se usa es el último, principalmente porque llega a la solución sin necesidad de hallarla inversa de la matriz A (en realidad se usa factorización QR), lo que desde el punto de vistacomputacional es bastante ventajoso. Se puede observar que el uso de este último método mejora lavelocidad de cálculo de MATLAB en cerca de un 50%.

Por último, sólo resta decir que en el caso de trabajar con matrices y vectores de componentesenteras o racionales, es conveniente expresar los resultados de esta misma manera para evitar la

pérdida de cifras significativas. En MATLAB esto se puede hacer con la instrucción format rat, con laque se aproximan todos los resultados a la fracción irreductible más cercana.

Page 121: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 121/168

Guía Práctica MatLAB

121

Para nuestro ejemplo:

>> format rat>> x = A\b

Produce el resultado:

x =22/7123/7

Que es la solución exacta del sistema lineal.

APLICACIÓN A LOS CIRCUITOS ELÉCTRICOS 

Muchos problemas pueden ser descritos mediante sistemas de ecuaciones lineales. Por ejemplo,considere el circuito eléctrico mostrado en la figura siguiente:

 Por la Ley de kirchoff, podemos dividir en mallas adecuadamente, donde las ecuaciones de malla quedescriben a este circuito son las siguientes:

A partir de las ecuaciones de malla se pueden obtener todas las corrientes, voltajes y potencial deloselementos del circuito. Por ejemplo, la corriente de la resistencia R es .

Definiendo  R, i y v:

  , y

Podemos expresar el juego de ecuaciones como:

Page 122: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 122/168

Capítulo 7

122

Que puede representarse mediante la matriz aumentada:

La cual puede resolverse directamente como es en el caso anterior o utilizando los métodos deiteración que a continuación conoceremos.

OPERACIONES ELEMENTALES DE RENGLÓN

Como la matriz aumentada representa un sistema de ecuaciones simultáneas, es posible realizar lassiguientes operaciones elementales de renglón manteniendo las igualdades de las ecuaciones representadas:

• Multiplicar un renglón por una constante.

• Multiplicar un renglón por una constante y sumarlo a otro renglón.

Los métodos de soluciones de sistemas de ecuaciones aplican estas operaciones sobre lamatrizaumentada en forma ordenada y repetida. En las siguientes secciones se explican los siguientesmétodos:

• Eliminación gaussiana (Gauss)

• Gauss-Jordan

• Montante

ELIMINACIÓN GAUSSIANA

Eliminación Gaussiana aplica operaciones de renglón para resolver un sistema de ecuacionessimultáneas; su pseudocódigo se presenta a continuación, y en el CD su implementación en MATLABcon el nombre Elim_Gauss.m.

 

Page 123: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 123/168

Guía Práctica MatLAB

123

Para cada renglón se define el elemento de la matriz aumentada como el pivote. EliminaciónGaussiana opera en dos fases. Primero, para cada renglón empezando por el primer renglón, haceceros en los elementos debajo del pivote (líneas 3 y 4). Segundo, para cada renglón empezando por

el último renglón, hace el pivote igual a 1, y hace ceros arriba del pivote (líneas 5 a 8). La soluciónal sistema de ecuaciones queda en la última columna de la matriz aumentada (línea 9).

A continuación, se presenta la solución del ejemplo del circuito eléctrico mediante eliminaciónGaussiana.

De donde se tiene que las corrientes de malla son:

Demostramos el resultado aplicando la función Elim_Gauss, cuya salida se muestra a continuación:

>> A=[15 -5 0;...

  -5 15 -5;...

  0 -5 20];

>> b=[20;0;0];

>> x=Elim_Gauss(A,b)

x =

  1.5172

  0.5517

  0.1379

Page 124: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 124/168

Capítulo 7

124

METODO DE GAUSS – JORDAN 

En las líneas siguientes se muestra el seudocódigo método Gauss-Jordan, cuyo código estáimplementado en el CD con nombre Gauss_Jordan.m.

 

El método de Gauss-Jordan es similar al de la eliminación Gaussiana, pero primero hace el pivoteigual a 1, y luego hace ceros en toda la columna del pivote. En el método de Gauss-Jordan primerose hace el pivote igual a 1 (línea 3), después se hacen cero los elementos arriba y abajo delpivote líneas 4 a 6). La solución al sistema de ecuaciones queda en la última columna de la matrizaumentada en la última línea.

A continuación se muestra la solución del ejemplo del circuito eléctrico mediante el método deGauss-Jordan.

Page 125: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 125/168

Guía Práctica MatLAB

125

Demostramos el resultado aplicando la función Gauss_Jordan, cuya salida se muestra a continuación:

>> A=[15 -5 0;...

  -5 15 -5;...  0 -5 20];

>> b=[20;0;0];

>> x=Gauss_Jordan(A,b)

x =

  1.5172

  0.5517

  0.1379

PIVOTE MÁXIMO 

Los algoritmos presentados pueden encontrar el problema de que el pivote sea cero, causando unadivisión entre cero. Para resolver este problema se pueden intercambiar renglones para colocar unelemento diferente de cero en la diagonal principal. A continuación se presenta la implementación delseudocódigo de Gauss-Jordan donde se escoge el elemento de máximo valor absoluto como pivote.

Page 126: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 126/168

Capítulo 7

126

MÉTODO MONTANTE 

El método de Montante resuelve un sistema de ecuaciones simultáneas haciendo operaciones quemantienen el número de decimales que tiene los datos originales hasta el último paso, donde se

realiza la división entre el determinante.

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.m y se encuentra en el CD, aplicando tendremosla siguiente salida:

>> A=[15 -5 0;...  -5 15 -5;...  0 -5 20];

>> b=[20;0;0];

>> x=Montante(A,b)x =

  1.5172  0.5517  0.1379

Page 127: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 127/168

Guía Práctica MatLAB

127

MATRIZ INVERSA

Los métodos de eliminación Gaussiana, Gauss-Jordan, y Montante pueden ser utilizados para encontrarla inversa de una matriz. En este caso, la matriz aumentada sería la matriz original y la matriz identidad.

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

  -5 15 -5;...

  0 -5 20];

>> I=eye(3);

>> Inversa=Montante(A,I)

Inversa =

  0.0759 0.0276 0.0069

  0.0276 0.0828 0.0207

  0.0069 0.0207 0.0552

MÉTODOS ITERATIVOS: JACOBI 

Dado un sistema de ecuaciones de la forma:

Page 128: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 128/168

Capítulo 7

128

Si se despeja la variable de cada ecuación se obtiene lo siguiente:

El sistema anterior puede usarse como una fórmula recursiva, además puede usarse para obtener losvalores de x

i siguientes en función de los valores de x

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

El código de este método se encuentra en el CD con el nombre Jacob.m

Page 129: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 129/168

Guía Práctica MatLAB

129

MÉTODOS ITERATIVOS: GAUSS-SEIDEL

En las ecuaciones recursivas es posible utilizar inmediatamente los valores obtenidos para calcularlossiguientes valores, es decir:

El utilizar los valores de xi que se acaban de calcular para calcular los siguientes valores permite queel método converja más rápidamente a una solución.

Las ecuaciones recursivas se pueden escribir en forma matricial de la siguiente manera:

Donde representa la fila de la matriz , y la regla debe aplicarse en orden para =1,2,…,n

A continuación se muestra el seudocódigo:

 

Page 130: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 130/168

Capítulo 7

130

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;-5 15 -5;0 -5 20];>> b=[20;0;0];>> X0=[0;0;0]; % vector de valoresiniciales

Por Método de Jacobi:

>> [X,Iter]=Jacob(A,b,X0)c =  1.3333  0  0

T =  0 0.3333 0  0.3333 0 0.3333  0 0.2500 0

X =

  1.5170  0.5509  0.1377

Iter =  9

Por Método de Gauss-Seidel:

>> [X,Iter]=Gauss_Seidel(A,b,X0)c =  1.3333  0

  0

T =  0 0.3333 0  0.3333 0 0.3333  0 0.2500 0

X =  1.5170  0.5516  0.1379

Iter =  5

En general, Gauss-Seidel es más rápido que Jacobi, es decir, converge en menos iteraciones a lasolución correcta.

Page 131: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 131/168

Guía Práctica MatLAB

131

EJERCICIOS PROPUESTOS 

1.  Dado los siguientes circuitos:

Utilizando mallas y Ley de Kirchoff, plantear las ecuaciones de cada circuito que representan a susolución y resolverlos utilizando los métodos de Gauss-Seidel y Jacobi, compare los resultados.

2.  Aplicando la función Elim_Gauss.m, Gauss_Jordan.m  y Gauss_Seidel.m, implementadosanteriormente y que se encuentran en el CD, resolver si es posible el siguiente sistema deecuaciones lineales, compruebe sus resultados reemplazando las soluciones en las ecuaciones.

3.  Dado el siguiente sistema de ecuaciones:

Y tomando como punto inicial lleve a cabo 4 iteraciones de Jacobi y de Gauss-Seidel.

4.  Resuelva (si es posible) los siguientes sistemas lineales usando los métodos de Jacobi y Gauss-Seidel. En todos los casos verifique si los teoremas garantizan convergencia de los métodos.

 

Page 132: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 132/168

Capítulo 7

132

5.  Use los métodos de Jacobi y Gauss-Seidel para resolver los sistemas:

 

6.  Dada la siguiente matriz:

Encuentre su inversa mediante Gauss-Jordan y Montante. En ambos casos, utilice la opción depivote máximo. Compruebe sus resultados realizando la multiplicación AA–1.

Page 133: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 133/168

Capítulo

133

8Solución de Ecuaciones

No Lineales

En este capítulo usaremos el programa MATLAB con el fin de resolver ecuaciones no lineales demanera rápida y fácil. Se usarán tanto las herramientaspropias de MATLAB, como rutinas creadas porel usuario que nos llevarán paso a paso a lasolución de problemas.

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, donde en

general, f es una función no lineal de x, es decir, que no puede expresarse como x

donde y son constantes. A los valores de x que hacen que se cumpla la igualdad se les denomina

raíces de la ecuación 1.

MÉTODO DE LA BISECCIÓN 

También conocido como el método de las bisecciones sucesivas, comienza con un intervalodonde se sabe que existe una raíz de la ecuación, 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, podemos deducir que la raíz se encuentra en una de lasdos mitades, entonces debemos descartar una de ellas, entonces es necesario conocer el algoritmogeneral del método de la bisección:

Page 134: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 134/168

Capítulo 8

134

 

Método de la Bisección

Ejemplo:  Determine valores aproximados de las soluciones positivas de la ecuación.

 Solución:

Utilizando el archivo met_bisección.m, que se encuentra en el CD e ingresando los datos solicitados,obtenemos la siguiente gráfica y resultado en pantalla:

 

Page 135: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 135/168

Guía Práctica MatLAB

135

***Metodo de la Bisección

f(x)= 0.5*exp(x/3)-sin(x)

x1= 0.25

x2= 1

Tolerancia= 0.0001

Los resultados son:

k= X1= X= X2=1 0.250000 0.625000 1.000000

2 0.625000 0.812500 1.000000

3 0.625000 0.718750 0.812500

4 0.625000 0.671875 0.718750

5 0.671875 0.695313 0.718750

6 0.671875 0.683594 0.695313

7 0.671875 0.677734 0.683594

8 0.671875 0.674805 0.677734

9 0.674805 0.676270 0.677734

10 0.676270 0.677002 0.67773411 0.677002 0.677368 0.677734

12 0.677002 0.677185 0.677368

13 0.677185 0.677277 0.677368

14 0.677185 0.677231 0.677277

Raiz= 0.677231

Desea ver gráca? [y]/[n]: yn de programa

Se observa que para la iteración número 14 la raíz aproximada cumple con el margen de toleranciarequerida, tal como podemos observar en la gráfica anterior obtenida.

Page 136: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 136/168

Capítulo 8

136

Ejercicio propuesto:

1. 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.25], [2.25 , 4]y [4 , 5]. La tolerancia es de .

MÉTODO DE PUNTO FIJO (ITERACIÓN SIMPLE) 

En el método de punto fijo, la ecuación se transforma a la forma , y ésta se utiliza

como una regla recursiva, es decir,

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. Elmétodo de iteración simple converge a una raíz de la ecuación si y son continuasen un intervalo alrededor de r, si:

Para todo ese intervalo, y si se escoge en ese intervalo. Nótese que ésta es una condiciónsuficiente,pero no necesaria.

 

Método de Punto Fijo

Page 137: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 137/168

Guía Práctica MatLAB

137

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, donde es el número de Reynolds, es la asperezade lasuperficie de la tubería y D es el diámetro de la tubería. Resuelva la ecuación parafutilizando elmé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 ala forma: .

Para ello llamamos , y así:

Luego la función:

Puede ser una posible función de iteración de punto fijo para .

Como queremos encontrar un punto fijo graficamos la función y la recta y=x para tomar un valorinicial. Empecemos con el caso (a) donde:

Page 138: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 138/168

Capítulo 8

138

Verifiquemos la representación de gráficamente.

Para graficar utilizamos las siguientes instrucciones:

>> fplot('1.14-2*log10*(0.025+3.1167*10^(-4))',[-2 2 -2 2])

>> grid on

>> hold on

>> fplot('1*x',[-2 2 -2 2])

Donde hold on permite graficar varias funciones en un mismo sistema coordenado.

De la gráfica anterior podemos ver que la función gcumple las condiciones del TeoremaFundamentalde Punto Fijo (¿dónde y por qué?). Para emplear el método tomaremos lamisma tolerancia para ladistancia entre las aproximaciones y emplearemos una funciónde punto fijo para MATLAB que sehacreadoen el editor por el usuario de nombre met_puntojo.m, cuyo código se encuentra en el CD.Si aplicamos esta función obtendremos lo siguiente:

>>met_puntojo('1.14-2*log10*(0.025+3.1167*10^(-4))',1,0.000001)

it. x g(x)0 1.0000000000 1.08937666001 1.0893766600 1.0848521150

2 1.0848521150 1.08508116253 1.0850811625 1.08506956744 1.0850695674 1.0850701544

La aproximación del punto jo es 1.0850701544

Luego el valor para f lo obtenemos de:

Lo mismo hacemos para resolver el caso b.

Page 139: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 139/168

Guía Práctica MatLAB

139

MÉTODO DE NEWTON-RAPSON 

El método de Newton-Rapson se debe inicializar en un valor de x cercano a una raíz. El métodoasume que la función es aproximadamente lineal en ese valor y, 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 ejex,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, la condición para Newton-Rapson es la siguiente:

Que es equivalente a:

Page 140: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 140/168

Capítulo 8

140

De nuevo, esta es una condición suficiente, pero no necesaria.

Mostramos el pseudocódigo:

 

Ejemplo:

Calcule las 3 raíces de la siguiente ecuación no lineal: , para un valor inicialde y tolerancia de .

 Solución:

Aplicando el script met_newton.m que se encuentra en el CD, obtenemos lo siguiente:

***Metodo de Newtón-Cotes

f(x)= pi*sin(2*x)+exp(-x/2)*cos(x)

x= 3.5

Tolerancia= 0.0001

Los resultados son:

k= F(X)= X= dF(X)=

1 1.901253 3.500000 4.879230

2 -0.407304 3.110338 6.3698403 0.000835 3.174280 6.378647

Raiz= 3.174280

Desea ver gráca? [y]/[n]: y

n de programa

Page 141: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 141/168

Guía Práctica MatLAB

141

Gráfica de la función y de la solución de la ecuación no lineal.

MÉTODO DE LA SECANTE 

El método Newton-Rapson requiere evaluar f_(x). En el método de la secante, la derivadase aproximade la siguiente manera:

Sustituyendo en la ecuación recursiva de Newton-Rapson se obtiene:

O lo que es lo mismo,

Por lo tanto, el seudocódigo será:

 

Page 142: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 142/168

Capítulo 8

142

Ejemplo:

Resolviendo el ejemplo anterior, teniendo en cuenta que inicialmente , aplicando el scriptmet_secante.m que se encuentra en el disco, tendremos lo siguiente:

***Metodo de la Secante***

f(x)= pi*sin(2*x)+exp(-x/2)*cos(x)

x= 3.5

xant= 2.5

Tolerancia= 0.0001

Los resultados son:

k= F(X)= X= Xant=

1 1.901253 3.500000 2.5000002 -0.279696 3.130346 3.500000

3 0.022980 3.177753 3.130346

4 0.000026 3.174153 3.177753

5 -0.000000 3.174149 3.174153

Raiz= 3.174149

Desea ver gráca? [y]/[n]: yn de programa

Page 143: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 143/168

Guía Práctica MatLAB

143

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 siguientemanera. 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 , el método Newton-Rapson toma los planos tangentes a

y , y su intersección con el plano como el siguiente punto para continuar el método en

la siguiente iteración. La ecuación del plano tangente a es la siguiente:

  (1)

Donde:

  y

De la misma manera, la ecuación del plano tangente a es la siguiente:

  (2)

Donde:

  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 , y . Las ecuacionesanteriores pueden expresarse en forma matricial de la siguiente manera:

  (4)

Donde:  (5)

  (6)

Page 144: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 144/168

Capítulo 8

144

De las ecuaciones 4,5 y 6 se obtiene la regla recursiva para el método Newton-Rapson para dosvariables:

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 2 1 0.7500 0.7083 0.7071

y 1 1 0.7500 0.7083 0.7071

Page 145: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 145/168

Guía Práctica MatLAB

145

Para demostrar estos resultados, nos ayudaremos del archivo script newtonnl.m, que ejecutando en laventana de comandos e ingresando lo requerido por el programa nos mostrará lo siguiente:

>> newtonnl

Ingrese las funciones

f1(x,y)= x^2+y^2-1

f2(x,y)= x-y

Ingrese valores iniciales:

X0= [2;1]

Tolerancia= 0.0001

Max.Iter= 100

n=1 x=2.0000000 y=1.0000000

n=2 x=1.0000000 y=1.0000000n=3 x=0.7500000 y=0.7500000

n=4 x=0.7083333 y=0.7083333

n=5 x=0.7071078 y=0.7071078

EJERCICIOS PROPUESTOS 

1.  Encuentre una raíz positiva de , que sea exacta hasta la segunda cifrasignificativa.

2.  Encuentre una raíz de:

en el intervalo [5.5 ,6.5]. Cambie -36 por -36.001 y repita el ejercicio.

3.  Escriba un programa que ejecute el método de Newton, resuelva la ecuación . Encuentrelas raíces más cercanas a 4.5 y 7.7.

4.  El polinomio tiene ceros 1,3 y -98. El punto debería ser eneste caso un buen punto inicial para calcular cualquiera de los ceros pequeños por medio de laiteración de Newton.

5.  Use el método de Newton para calcular la única raíz de:

Use una variedad de valores de B=1,5,10,25 y 50. Entre las elecciones del punto de partidatome y explique el comportamiento anómalo. Teóricamente, el métodode Newton debeconverger para cualquier valor de y B.

Page 146: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 146/168

Capítulo 8

146

6.  Resuelva por el método de Newton para sistemas no lineales el siguiente sistema:

Use valores iniciales y .

7.  Comenzando en (0, 0, 1), resuelva por el método de Newton para sistemas no lineales con elsistema:

Explique los resultados.

8. Use el método de Newton para encontrar una raíz del sistema no lineal:

Page 147: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 147/168

Capítulo

147

9Integración

Los métodos de integración numérica nos permiten integrar funciones que están definidasanalíticamente o de las que sólo conocemos su tabla en un número finito de puntos.

Considerando el siguiente caso:

Dada una función se desea calcular la integral definida:

  (1)

Para valores dados de y .

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. El método más sencillo consiste en aproximar el área bajola 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, es decir quees constante para toda , entonces podemos escribir como:

El área total es entonces igual a:

Page 148: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 148/168

Capítulo 9

148

MÉTODO DE LOS TRAPECIOS 

Podemos obtener una mejor aproximación al valor de la integral definida si aproximamos el áreamediante trapecios, como se muestraen la figura siguiente:

 

El área del i-ésimo trapecio es:

De nuevo, asumimos que el espaciamiento de los datos es uniforme e igual a h, por lo tanto:

Como ejemplo consideramos la función , se pide calcular la integral para un dominiocon 50 nodos.

 Solución: Implementando un script de nombre I_trap.m, cuyo código mostramos a continuación yejecutando, obtenemos:

x=linspace(0,pi,50);

y=sin(x);

n=length(x)-1;

h=x(2)-x(1);

An=0;

Page 149: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 149/168

Guía Práctica MatLAB

149

for k=2:n

  An=An+2*y(k);

end

A=(h/2)*(y(1)+y(n+1)+An);fprintf('Area=%7.4f\n\n',A)

>> I_trap % ejecutando

Area= 1.9993

El usuario puede utilizar y resolver diferentes integrales definidas, utilizando la función trapz, propiadel programa o de la función trap_comp.m que se encuentra en el disco.

MÉTODO DE ROMBERG 

Suponga que se calcula numéricamente la integral de para un valor h1 = h, llamémosle R(1,1)al valor obtenido. Si después se calcula la integral para h2 = h1/2, llamémosle R(2,1), podemosobtener 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,2) al valor estimado. Ahora, supongamos que obtenemos laintegral depara h3 = h/4, llamémosle R(3,1). Podemos calcular un valor estimado dela misma manera,

obteniendo que:

Ahora, podemos obtener una mejor estimación del valor de la integral utilizando R(1, 2) y R(2, 2)de la siguiente manera:

De lo anterior, podemos deducir el método de Romberg. Dado un valor inicial de h, se calcula laintegral de f(x) para valores de paso de h, h/2, h/4, h/8, etc., (que es equivalente a que el númerode trapecios sea igual a n, 2n, 4n, 8n, etc.). Al valor de estas integral les llamamos R(1,1), R(2,1),R(3,1), R(4,1), etc. Con cada valor de R podemos obtener una estimación mejor asumiendo que elerror es proporcional al cuadrado del paso utilizado mediante la fórmula:

Page 150: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 150/168

Capítulo 9

150

Los valores de R pueden ordenarse en una tabla al estilo de diferencias divididas como se muestraa continuación:

R(1,1) R(1,2) R(1,3) R(1,4) R(1,5)

R(2,1) R(2,2) R(2,3) R(2,4)R(3,1) R(3,2) R(3,3)R(4,1) R(4,2)R(5,1)

El algoritmo continúa evaluando valores de R(i,1) hasta que la diferencia del valor absoluto entrelas últimas dos estimaciones de mayor orden obtenidas sea menor que una tolerancia que escogeel usuario.

El Método de Romberg se utiliza junto con el método de trapecios para obtener una buena aproximación.

Ejemplo:

Con el script Metodo_Romberg.m, que se encuentra en el disco, podemos calcular la integral anterior,cuyo resultado luego de ejecutarlo en la ventana de comandos mostramos:

f(x)=sin(x)Extremo Inferiora=0Extremo Superiorb=piCifras de Aproximacionn=4

An =  0.0000 0 0 0  1.5708 2.0944 0 0  1.8961 2.0046 1.9986 0  1.9742 2.0003 2.0000 2.0000

Integral:I= 2.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, como semuestra en la figura siguiente:

 

Page 151: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 151/168

Guía Práctica MatLAB

151

Se hace pasar un polinomio de segundo orden por cada tres puntos. El polinomio definido por lospuntos x 

i–1 , x 

i , y x 

i+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, por lo tanto, que elpolinomio P2(x) es diferente para cada intervalo de tres puntos.

Para simplificar el cálculo del área bajo la curva en el intervalo de x i–1

 a x i+1

 , esto es  Ai , se traslada

la curva a x =0 como se muestra en la figura siguiente:

 

Por lo tanto, el área  A j está dada de la siguiente manera:

Entonces el área por el método de trapecio es:

Page 152: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 152/168

Capítulo 9

152

Por lo tanto, 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 met_simpson13.m  que se encuentra en el disco, obtendremos losiguiente:

>>[I,E]=met_simpson13('x^5',0,1,50)

I =  0.1667E =  1.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. Porcada cuatro puntos se hace pasar un polinomio de tercer orden. Para los puntos x

i , x

i+1 , x

i+2 , x

i+3 el

área bajo la curva es:

Y el área total es:

Del ejemplo anterior y aplicando el script met-simpson38.m, tenemos:

***Metodo de Simpson 3/8***

f(x)= x^5a= 0b= 1#Cifras Signif Exac.= 4

El valor de la integral aproximada es: 0.1667

Page 153: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 153/168

Guía Práctica MatLAB

153

FUNCIONES DE CUADRATURA

MATLAB cuenta con dos funciones de cuadratura para realizar integración numérica de funciones:quad y quad8. La primera utiliza una forma adaptativa de la regla de Simpson y la segunda usa la

regla de Newton-Cotes adaptativas de 8 paneles; esta última es la mejor para manejar funciones concierto tipo de singularidades, pero eso sí, ambos exhiben un mensaje de advertencia si detectan unasingularidad, devolviendo de todos modos una estimación de la integral.

Las formas más sencillas de estas dos funciones requieren tres argumentos. El primero es elnombre (entre apóstrofos) del m-file función que devuelve un vector de valores de f(x) cuando sele proporciona un vector de valores de entradas. La función puede ser una creada por el usuario o laque está definida en el programa, el segundo y tercer elemento son los límites de integración a y b.A continuación mostramos la sintaxis de estos:

var = quad('nombre_funcion',a,b)var = quad8('nombre_funcion',a,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, usamosel siguiente script de nombre cuadrat.m

a=input('Extremo Inferior: ');b=input('Extremo Superior: ');

I=(2/3)*(b^1.5-a^1.5);

Iq=quad('sqrt',a,b);Iq8=quad('sqrt',a,b),

fprintf('Analitico= %f\nNumerico: %f\t%f\n\n',I,Iq,Iq8)

Ejecutando el programa para los valores solicitados, tendremos lo siguiente:

Extremo Inferior: 0Extremo Superior: 5

Iq8 =  7.4536

Analitico= 7.453560Numerico: 7.453556 7.453556

Page 154: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 154/168

Capítulo 9

154

Ejercicio:

Un sistema de tubería fluye petróleo, donde la fricción en la tubería origina un perfil de velocidades enel petróleo al fluir. 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 sedemuestra que es:

Donde ro es el radio del tubo.

Con n=8 y ro=0.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:

 

Page 155: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 155/168

Capítulo

155

10Solució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, ya sean físicos o nofísicos, y en disciplinas científicas y no científicas. Ejemplo de dichos fenómenos incluyen problemas detransferencia de calor (termodinámica), circuitos eléctricos simples (ingeniería eléctrica), problemasde fuerza (ingeniería mecánica), razón de crecimiento de bacterias (ciencias biológicas), razón dedescomposición radioactiva (física atómica), tasa de crecimiento de una población (estadística),etc. Existe una serie de métodos para resolver este tipo de ecuaciones, dentro de los que podemosmencionar: separación de variables, solución exacta y solución de series finitas. Dentro de estosúltimos, veremos los métodos de Euler y Runge-Kutta, segundo y cuarto orden.

MÉTODO DE EULER 

Dada una ecuación diferencial ordinaria de la forma:

se hace la aproximación: , de donde se tiene que:

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

Page 156: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 156/168

Capítulo 10

156

Diseñamos una función que nos permita solucionar numéricamente una EDO empleando dicharepresentación. Esta función tendrá la siguiente sintaxis:

% Metodo de Euler

function [t,y]=met_Euler(y0,t0,tf,h)t=t0;y(1)=y0;k=1;while t(k)<tf  t(k+1)=t0+k*h;  y(k+1)=y(k)+h*fcn(t(k),y(k));  k=k+1;end

Donde: fcn, es la función que representa a la ecuación diferencial y deberá ser definida cada vezque se desee resolver un problema diferente.

A las instrucciones anteriores le dimos el nombre de met_Euler.m.

Ejemplo:

Sea la siguiente ecuación diferencial:

Obtener el resultado por el método de Euler para y compararla gráficamente con lasolución exacta .

 Solución:Creamos en el editor la función que representará a la ecuación diferencial:

function dy=fcn(t,y) dy=y/10;

Luego creamos el siguiente archivo script de nombre sol1_euler.m

t0=0; tf=5; y0=1000;h=[1 0.5 0.1];

for k=1:length(h)  [t,y]=met_Euler(y0,t0,tf,h(k));  plot(t,y)  grid on  hold onend

te=t0:0.1:tf;ye=1000*exp(te/10);

plot(te,ye,'-r')legend('h=1','h=0.5','h=0.1','Exacta')

hold off

Page 157: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 157/168

Guía Práctica MatLAB

157

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, el cual se encuentra en el CD, tiene pornombre met_EulerMOD.m y se muestra a continuación.

% Metodo de Euler Modicadofunction [t,y]=met_EulerMOD(y0,t0,tf,h)

t(1)=t0;

y(1)=y0;

k=1;

while t(k)<tf

  t(k+1)=t0+k*h;

  K1=h*fcn(t(k),y(k));

  K2=h*fcn(t(k+1),y(k)+K1);

  y(k+1)=y(k)+0.5*(K1+K2);

  k=k+1;

end

Al igual que en el método de Euler, debemos definir la función fcn que representa a nuestra ecuacióndiferencial.

Page 158: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 158/168

Capítulo 10

158

Ejemplo:

Obtener la solución aproximada del siguiente problema, para h=0.01:

Y compararla gráficamente con la solución exacta:

 Solución:

Creamos un script de nombre sol2_euler.m, cuyo contenido es:

t0=1.0610329; tf=3; y0=1.0610329;

h=0.01;

[t1,y1]=met_Euler(y0,t0,tf,h);

[t2,y2]=met_EulerMOD(y0,t0,tf,h);

te=t0:0.1:tf;

ye=100*(te.^-2).*sin(10./te);

plot(t1,y1,t2,y2,te,ye)

grid on

title('h=0.001','fontsize',14)

legend('Euler','Euler Modicado','Exacta')

El resultado de ejecución del script anterior es:

 

Page 159: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 159/168

Guía Práctica MatLAB

159

Ejercicio:Utilizando el método de Euler, solucione numéricamente la siguiente ecuación:

De a , con h=0.25 y .

MÉTODO DE RUNGE KUTTA

Los métodos de Runge Kutta utilizan indirectamente el algoritmo de Taylor. En general, estos métodosevalúan en más de un punto en la proximidad de en lugar de evaluar derivadas de ,las cuales se necesitarían para el uso directo del algoritmo por series de Taylor.

La derivación de estos métodos se acompaña de la suposición de un algoritmo particular con ciertoscoeficientes indeterminados. Los valores de estos términos constantes se encuentran igualando lafórmula de Runge Kutta de orden p al algoritmo de Taylor de orden . Las más comunes en aplicaciónson las de orden 2,3 y 4; es decir, aquella que usa la ponderación de 2, 3 y 4 aproximaciones.

A continuación mostramos la forma de 4to orden:

Implementando una función de nombre sol_RK4.m  en MATLAb que resuelva dicho algoritmo, elcódigo será:

% Metodo de Runge Kutta 4function [t,y]=sol_RK4(f,y0,t0,tf,h)% f: es una funcion referencialfcn=f; t(1)=t0; y(1)=y0;k=1;

while t(k)<tf  t(k+1)=t0+k*h;  K1=fcn(t(k),y(k));  K2=fcn(t(k)+h/2,y(k)+0.5*h*K1);  K3=fcn(t(k)+h/2,y(k)+0.5*h*K2);  K4=fcn(t(k+1)+h,y(k)+h*K3);  y(k+1)=y(k)+(h/6)*(K1+2*K2+2*K3+K4);

  k=k+1;end

Page 160: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 160/168

Capítulo 10

160

Resolviendo el último ejemplo con este método y realizando las comparaciones con los métodosanteriores. El script sol3_EDOS.m, tendrá las siguientes instrucciones:

t0=1.0610329; tf=3; y0=1.0610329;

h=0.01;f=@(t,y) -200*(t^-3)*sin(10/t)-1000*(t^-4)*cos(10/t);[t1,y1]=met_Euler(y0,t0,tf,h);[t2,y2]=met_EulerMOD(y0,t0,tf,h);[t3,y3]=met_RK4(f,y0,t0,tf,h);te=t0:0.1:tf;ye=100*(te.^-2).*sin(10./te);plot(t1,y1,t2,y2,t3,y3,te,ye)grid ontitle('h=0.001','fontsize',14)legend('Euler','Euler Modicado','RK4','Exacta')

Y la salida gráfica será el siguiente:

FUNCIONES ODE 

Para resolver ecuaciones diferenciales ordinarias, MATLAB proporciona un conjunto de funciones quenos permite realizar el cálculo de forma más eficiente, dos de estas funciones son: ode23 y ode45.A continuación describimos los argumentos y luego presentaremos algunos ejemplos:

[t,y] = ode23(@funcion,tspam,CI)

[t,y] = ode45(@funcion,tspam,CI)

@funcion : Es la referencia de la función creada en el editor y que representa a la ecuación diferencialordinaria.

tspam  : Vector de valores del dominio en que va a ser evaluada la función solución.

CI  : Condición inicial

y  : Función solución evaluada en los valores de tspam

t  : Es un vector de los mismos elementos de tspam

Page 161: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 161/168

Guía Práctica MatLAB

161

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

Page 162: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 162/168

Capítulo 10

162

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 nivelde 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 delos motores es equilibrado por el arrastre. La ecuación diferencial que determina la aceleración delavión es:

Donde:

Escribir un programa en MATLAB para determinar la nueva velocidad de crucero después del cambiode 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 estaecuació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 211plot(t,V); title('Velocidad')ylabel('m/s')grid on;subplot 212plot(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;

Page 163: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 163/168

Guía Práctica MatLAB

163

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 masam 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 avelocidad es cero. De acuerdo a la ecuación anterior, la velocidad terminal teórica es:

  (II)

Supóngase una moneda con y , que cae de un edificio, entonces. 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 terminalteó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)

Page 164: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 164/168

Capítulo 10

164

El resultado y la gráfica serán:

0 0  1.0000 9.3244

  2.0000 16.3644  3.0000 20.6352  4.0000 22.8944  5.0000 24.0044  6.0000 24.5302  7.0000 24.7750  8.0000 24.8880  9.0000 24.9400  10.0000 24.9638  11.0000 24.9748  12.0000 24.9798

  13.0000 24.9821  14.0000 24.9832  15.0000 24.9837  16.0000 24.9839  17.0000 24.9840  18.0000 24.9840  19.0000 24.9841  20.0000 24.9841

SOLUCIÓN DE ECUACIONES DIFERENCIALES DE ORDEN SUPERIOR 

Para resolver ecuaciones diferenciales de orden superior (de orden mayor que 1) con condicionesiniciales, se transforman en un sistema de ecuaciones diferenciales de orden 1 equivalente y seresuelve éste. El número de ecuaciones diferenciales de primer orden del sistema es igual al ordende la ecuación diferencial original.

Para el caso general, considere ahora la siguiente ecuación diferencial de orden :

y haciendo el siguiente cambio de variables:

Donde

Se observa que la velocidad terminal hallada porel método numérico es de 24.98m/s, la cual esla misma teórica, lo que demuestra el poderío delmétodo de Runge-Kutta para la solución numéricade ecuaciones diferenciales

Page 165: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 165/168

Guía Práctica MatLAB

165

Derivando los cambios de variables, tendremos el siguiente arreglo:

Luego utilizamos el solucionador ode45, para obtener el vector solución.

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. Debemos reducirla a un sistema de ecuacionesdiferenciales de primer orden, primero despejamos el término de segundo orden y empezamos lareducción.

 , donde:

Implementando la solución con el siguiente código para obtener los valores de función solución yvisualizar la gráfica.

[t,Xn]=ode45(@fun2,0:0.1:1,[1;1]);

y=Xn(:,1);

plot(t,y,'-b')

grid on

title('Solución de EDO de 2do Orden')

Page 166: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 166/168

Capítulo 10

166

Donde la función de nombre funci.m está definida por el siguiente código.

function dX=fun2(t,X)

A=[0 1;5*t -2];

b=[0 exp(-2*t)];

dX=A*X+b

 

Ejemplo:Un circuito tiene en serie una fem , un resistor de 2 , un inductor de 0.1 h y uncapacitor de 1/260 f. Si la corriente inicial y la carga inicial en el capacitor son ambas cero, calcularla carga en el capacitor en cualquier instante de tiempo t.

 Solución:

Recordamos que:

' , además:

Page 167: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 167/168

Guía Práctica MatLAB

167

Reemplazando las expresiones para la corriente en la ecuación, tendremos la siguiente expresión:

Cambiando los valores de R, C y L y V:

Haciendo los cambios de variables, tenemos lo siguiente:

, donde:

Y realizando la ejecución del código siguiente, tendremos la siguiente salida.

[t,Xn]=ode45(@funCir,0:0.001:1,[0;0]);y=Xn(:,1);plot(t,y,'-b')grid ontitle('Solución de Circuito RLC')

Siendo la función funCir.m el siguiente código:function dX=funCir(t,X)

A=[0 1;-2600 -20];b=[0; 100*sin(60*t)];dX=A*X+b;

Y la gráfica de la función resultado evaluada en el tiempo.

Page 168: Manual Matlab FIEE UNI

7/23/2019 Manual Matlab FIEE UNI

http://slidepdf.com/reader/full/manual-matlab-fiee-uni 168/168

Impreso en los Talleres Gráficos de