Está en la página 1de 494

Análisis numérico

y
visualización gráfica
con
MATLAB
OVllVW
UO:>
e:>!JYJ8 u9!:>ez!1ens!A
Á
o:>!J~wnu S!S!IYUV
Análisis numérico
y
visualización gráfica
con
MATLAB®

Shoichiro Nakamura
The Ohio State University

Traducción
M. En C. Roberto Escalona García
Traductor Profesional

Revisión Técnica
Raymundo Hugo Rangel Gutiérrez
UNAM

PRENTICE-HALL HISPANOAMERICANA, S.A.

MtXICO •NUEVA YORK• BOGOTÁ• LONDRES • SYDNEY


PARÍS• MUNICH • TORONTO •NUEVA DELHI •TOKIO
SINGAPUR • RÍO DE JANEIRO • ZURICH
EDICIÓN EN ESPA/ÍIOL
DIRECTOR GENERAL MOISÉS PÉREZ ZAVALA
GERENTE DIVISIÓN COLLEGE JOSÉ TOMÁS PÉREZ BONILLA
GERENTE EDITORIAL COLLEGE LUIS GERARDO CEDEÑO PLASCENCIA
GERENTE DE EDICIÓNES JUAN ANTONIO RODRIGUEZ MORENO
GERENTE DE TRADUCCIÓN JORGE BONILLA TALAVERA
GERENTE DE PRODUCCIÓN JULIÁN ESCAMILLA LIQUIDANO
DIRECTOR DE EDICIONES: ALBERTO SIERRA OCHOA
SUPERVISOR DE TRADUCCIÓN JOSÉ LUIS NÚÑEZ HERREJÓN
SUPERVISORA DE PRODUCCIÓN OLGA ADRIANA SÁNCHEZ NAVARRETE

EDICIÓN EN INGLES
Acquisitions editor: M.Franz
Editorial assistant: Noreen Regina
Cover design: Shoichiro Nakamura and Mark Weiss
Cover design director: Jerry Volta
Copyeditor: RogerStem
Art production manager: Gail Cocker-Bogusz
Manufacturing manager: Alexis R. Heydt

NAKAMURA: ANAL/SIS NUMÉRICO Y VISUALIZACIÓN GRÁFICA CON MATLAB, Ja. Edición


Traducido del inglés de la obra: NUMERICAL ANALYSIS ANO GRAPHIC VISUALIZA TION WITH
MATLAB, la. Edición
All rights reserved. Authorizad translation from English Janguage edition published by Prentice Hall,
lnc. A Simon & Schuster Company
Todos los derechos reservados. Traducción autorizada de la edición en inglés publicada por Prentice
Hall, lnc. A Simon & Schuster Company
Ali rights reserved. No part of this book may be reproduced or transmitted in any fonn or by any means,
electronic or mechanical, including photocopying, recording or by any infonnation storage and retrieval
system, without pennission in writing from the publisher.
Prohibida Ja reproducción total o parcial de esta obra, por cualquier medio o método sin autorización por
escrito del editor.
Derechor reservados@ 1997 respecto a Ja primera edición en español publicada por
PRENTICE-HALL HISPANOAMERICANA, S.A.
Enrique Jacob 20 Col. El Conde
53500 Naucalpan de Juárez, Edo. de México
ISBN 968-880-860-1
Miembro de la Camara Nacional de la Industria Editorial, Reg. Núm. 1524
Original English Language Edition Published by Prentice Hall, lnc.
A Simon & Schuster Company ...
D

Copyright MCMXCVI
LITOGRAFICA INGRAMEX,S.A. DE C.V.
Ali rights reserved CENTEllO !lo. 112-1
COL. GRANJAS ESMERALDA

-
MEltlCO 01110, D.F.
ISBN 0-13-051518-3
IMPRESO EN MÉXICO/PRINTED IN MEXICO o "''
CJ
Contenido

Prefacio

1 Fundamentos de MATLAB 1
1.1 Tutoriales en la ventana de comandos 1
1.1.1 Antes de iniciar los cálculos 1
1.1.2 Cómo iniciar los cálculos 4
1.1.3 Lectura y escritura 11
1.2 Variables de arreglo 13
1.3 Aspecto singular de los números en MATLAB 20
1.4 Funciones matemáticas en MA TLAB 22
1.5 Funciones que realizan tareas 24
1.6 Creación de un programa en forma de archivo M 26
1.7 Cómo escribir funciones de usuario propias 28
1.8 Cómo guardar y cargar datos 30
1.9 Obtención de una copia impresa 32

2 Gráficas con MA TLAB 35


2.1 Graficación simple 35
2.2 Cómo obtener una copia impresa de las gráficas 50
2.3 Contorno de funciones bidimensionales 51
2.4 Retícula triangular y contornos 56
2.5 Retícula curvilínea y contornos 56
2.6 Graficación de malla y de superficies 59
2.7 MATLAB como herramienta de dibujo 68
2.8 Gráficos interactivos 75
2.9 ArchivosM 76

V
VI Contenido

3 Álgebra lineal 94
3.1 Matrices y vectores 94
3.2 Operaciones de matrices y vectores en MA TLAB 100
3.3 Matriz inversa 102
3.4 Ecuaciones lineales 103
3.5 Problemas·sin solución 107
3.6 Determinante 110
3.7 Problemas mal acondicionados 113
3.8 Eliminación de Gauss 117
3.9 Eliminación de Gauss-Jordan e inversión de matrices 122
3.10 Descomposición LU 126
3.11 Resolución iterativa 130
3.12 Valores propios de matrices 132

4 Polinomios e interpolación 142


4.1 Comandos de MATLAB para polinomios 142
4.2 Interpolación lineal 146
4.3 Interpolación polinómica con forma de series de potencias 149
4.4 Polinomio de interpolación de Lagrange 153
4.5 Error en polinomios de interpolación 156
4.6 Diferenciación e integración de la fórmula de interpolación de Lagrange 160
4.7 Interpolación con puntos de Chebyshev y Legendre 162
4.8 Interpolación de Hermite cúbica 168
4.9 Interpolación bidimensional 172
4.10 Interpolación transfinita 174
4.11 ArchivosM 178

5 Integración numérica 185


5.1 Regla trapezoidal 185
5.2 Reglas de Simpson 190
5.3 Otras cuadraturas 195
5.4 Integración numérica con límites infinitos o singularidades 201
5.4.1 Empleo de la regla trapezoidal extendida 201
5.4.2 Transformación exponencial 203
5.4.3 Transformación doble exponencial 207
5.5 Comandos de MATLAB para integración 209
5.6 Integración numérica en un dominio bidimensional 209
Contenido VII

5.7 Archivos M 216

6 Diferenciación numérica 228


6.1 Derivadas de polinomios de interpolación 228
6.2 Aproximaciones de diferencia 230
6.3 Método de expansión de Taylor 234
6.4 Algoritmos para automatizar la derivación 239
6.4.1 Algoritmo 1 239
6.4.2 Algoritmo 2 240
6.5 Aproximación de diferencia para derivadas parciales 243
6.6 Evaluación numérica de derivadas de orden superior 244
6. 7 Archivos M 247

7 Raíces de ecuaciones no lineales 254


7.1 Métodográfico 254
7.2 Método de la bisectriz 258
7.3 Iteración de Newton 261
7.4 Método de la secante 265
7.5 Método de sustituciones sucesivas 266
7.6 Ecuaciones simultáneas no lineales 270
7. 7 Archivos M 275

8. Ajuste de curvas a datos de mediciones 284


8.1 Ajuste de líneas rectas 284
8.2 Ajuste de curvas no lineales con una función de potencia 288
8.3 Ajuste de curvas con un polinomio de orden superior 290
8.4 Ajuste de curvas con una combinación lineal de funciones conocidas 294

9 Funciones de splines e interpolación no lineal 299


9.1 Interpolación de e-spline 299
9.2 B-spline cúbica 306
9.3 Interpolación con una función no lineal 313
9.4 Archivos M 321

10 Problemas de valor inicial de ecuaciones diferenciales ordinarias 325


10.1 EDO de primer orden 325
10.2 Métodos de Euler 328
10.2.1 Método de Euler hacia adelante 329
vm Contenido

10.2.2 Método de Euler modificado 332


10.2.3 Método de Euler hacia atrás 335
10.2.4 Exactitud de los métodos de Euler 335
10.2.5 EDO de segundo orden 336
10.2.6 EDO de orden superior 340
10.3 Métodos de.Runge-Kutta 344
10.3.1 Método de Runge-Kutta de segundo orden 345
10.3.2 Exactitud del método de Runge-Kutta de segundo orden 349
10.3.3 EDO de orden superior 350
10.3.4 Método de Runge-Kutta de tercer orden 357
10.3.5 Método de Runge-Kutta de cuarto orden 358
10.3.6 Error, estabilidad y optimización por intervalo de tiempo 369
10.4 Método de prueba y error 373
10.5 Método de líneas 376

11 Problemas de valor en la frontera de ecuaciones diferenciales ordinarias 388


11.1 Introducción 388
11.2 Problemas de valor en la frontera para varillas y planchas 390
11.3 Solución de la ecuación tridiagonal 395
11.4 Coeficientes variables y espaciado de retícula no uniforme 397
11.5 Cilindros y esferas 401
11.6 Ecuaciones diferenciales ordinarias no lineales 403
11.6.1 Sustitución sucesiva 403
11.6.2 Iteración de Newton 404

A Colores 413

B Dibujo de objetos tridimensionales 417

C Cine 427

D Procesamiento de imágenes 429

E Interfaz gráfica con el usuario 439


Prefacio

LO QUE ESTE LIBRO DESCRIBE


El propósito de este libro es ofrecer una introducción al análisis numérico y a la visualización
gráfica para estudiantes universitarios en las áreas de ingeniería y ciencias. También puede
servir como manual de aplicaciones de MATLAB para ingenieros y científicos profesionales.
Gracias a sus singulares y fascinantes capacidades, MA TLAB ha cambiado el
concepto de programación para análisis numérico y matemático. Sin embargo, ha
resultado dificil enseñar su aplicación en el análisis numérico con los textos que se han
escrito previamente. Por esta razón, se hizo deseable elaborar un texto que implementara
plenamente las herramientas matemáticas y gráficas de MATLAB en aplicaciones de análisis
numérico.
En la presente obra se han integrado cuatro elementos fundamentales: (1) programación
en MATLAB, (2) fundamentos matemáticos del análisis numérico, (3) aplicación de métodos
numéricos a problemas de ingeniería, ciencias y matemáticas y (4) gráficos científicos con
MATLAB.
Los primeros dos capítulos son tutoriales completos de los comandos y herramientas
gráficas de MATLAB. En los capítulos 3 a 11 se tratan los métodos numéricos y sus
implementaciones con MATLAB. Todos los métodos numéricos descritos se ilustran con
aplicaciones en MATLAB. Si el lector utiliza los listados de los guiones y funciones, podrá
ejecutar la mayor parte de los ejemplos y las figuras en su propia computadora. En los
apéndices se describen temas especiales, como Jos gráficos tridimensionales avanzados con
colores, cine, procesamiento de imágenes y la interfaz gráfica con el usuario.
Este libro se basa en la edición para estudiantes 4 de MATLAB o en la edición profesional
4.1 o superior.

iQUÉ HACE ÚNICO A MATLAB1


MATLAB puede considerarse como un lenguaje de programación, como Fortran o C, aunque
sería dificil describirlo en unas cuantas palabras. He aquí algunas de sus características
notables para los análisis numéricos:

IX
X Prefacio

La programación es mucho más sencilla


Hay continuidad entre valores enteros, reales y complejos
La amplitud de intervalo y la exactitud de los números son mayores
Cuenta con una biblioteca matemática amplia
Abundantes herramientas gráficas, incluidas funciones de interfaz gráfica con el usuario
Capacidad de vincularse con los lenguajes de programación tradicionales
Transportabilidad de los programas MA TLAB

Una característica extraordinaria de los números en MA TLAB es que no hay distinción entre
reales, complejos, enteros, de precisión sencilla y de doble precisión. En MA TLAB, todos estos
números están conectados continuamente, como debe ser. Esto significa que en MATLAB
cualquier variable puede contener números de cualquier tipo sin una declaración especial
durante la programación, con lo cual esta última se hace más rápida y productiva. En Fortran
se requiere una subrutina distinta para cada variable sencilla o doble, real o compleja, o entera,
mientras que en MATLAB no hay necesidad de separarlas.
La biblioteca matemática de MATLAB facilita los análisis matemáticos. Además, el
usuario puede crear rutinas matemáticas adicionales con mucha mayor facilidad que en
otros lenguajes de programación, gracias a la continuidad entre las variables reales y
complejas. Entre las numerosas funciones matemáticas, los solucionadores de álgebra
lineal desempeñan un papel crucial; de hecho, todo el sistema MA TLAB se basa en estos
solucionadores.

IMPORTANCIA DE LAS GRÁFICAS


El análisis visual de los problemas matemáticos ayuda a comprender las matemáticas y a
hacerlas más asequibles. Aunque esta ventaja es bien conocida, la presentación de resultados
calculados con gráficos de computadora solía requerir un esfuerzo adicional considerable. Con
MATLAB, en cambio, bastan unos cuantos comandos para producir presentaciones gráficas
de material matemático. Es posible crear objetos gráficos científicos e incluso artísticos en la
pantalla mediante expresiones matemáticas. Se ha comprobado que las gráficas de MATLAB
motivan e incluso excitan a los estudiantes para aprender métodos matemáticos y numéricos
que de otra forma podrían resultar tediosos.
Las gráficas de MA TLAB son sencillas y resultarán divertidas para los lectores. Además,
este libro ilustra el procesamiento de imágenes y la producción de películas animadas para
cálculos científicos, así como para material artístico o de aficiones.

NOMBRES DE ÓRDENES Y DE FUNCIONES EN ESTE LIBRO


Todos los nombres de comandos y de funciones empleados sólo en este libro incluyen el
carácter de subraya (_); por ejemplo, ro tx_. m. Las funciones y comandos que no incluyen
subraya son originales de MA TLAB. ,
Prefacio XI

lHARÁ MATLAB OBSOLETOS A.FORTRAN O A Cl


La respuesta es no. Fortran y C siguen siendo importantes para la computación de alto
rendimiento que requiere abundante memoria o un tiempo de cómputo largo. La velocidad del
cómputo con MATLAB es significativamente más baja que con Fortran o C porque MATLAB
paga un precio elevado por sus características agradables. Por otro lado, no es necesario
aprender Fortran ni C para entender MATLAB.

LIBROS DE REFERENCIA IMPORTANTES PARA APRENDER MATLAB


Este libro explica muchas órdenes de MA TLAB pero no pretende ser una guía completa del
lenguaje. Se recomienda a los lectores interesados en información adicional sobre MATLAB
consultar la siguiente literatura:

The MathWorks, The Student Edition ofMATLAB,


Version 4, User's guide, Prentice-Hall, 1995
MATLAB, Reference Guide, Math Works, 1992
MATLAB, User's Guide, MathWorks, 1992
MATLAB, Building a Graphica/ User Interface, MathWorks, 1993

CLAVES DE SOLUCIÓN
En el disquete de archivos M se incluirán claves de solución para los problemas del final de
cada capítulo.

CÓMO OBTENER MAYOR INFORMACIÓN SOBRE MATLAB


Es posible obtener respuestas a preguntas comunes, así como Notas Técnicas sobre MATLAB,
directamente de MathWorks vía ftp; su dirección en la Internet es f tp. ma thworks. com
( 144. 212. 100. 10). Las preguntas y las Notas Técnicas pueden encontrarse en los directo-
rios /pub/doc/faq y /pub/tech - suppor t/tech-notes, respectivamente.
También es posible recibir la siguiente información sin costo:

*The MathWorks Newsletter (boletín trimestral)


*The MATLAB News Digest (distribuido por correo electrónico)
*Apoyo Técnico

Envíe su correo electrónico a sub ser ibe®ma thwor ks . com. Incluya en el mensaje su
nombre, compañía/universidad, dirección, número telefónico, dirección de correo electrónico
y número de licencia o de serie, que puede encontrarse tecleando "ver" ante la indicación de
MATLAB.
XII Prefacio

Para cualquier otra comunicación con Math Works, su dirección es: The Math Works, Inc.,
24 Prime Park Way, Natick, MA 01760, Estados Unidos; teléfono: 508-653-1415; Fax:
508-653-2997.

LISTA DE REVISORES

Este libro fue revisado por:

Profesor T. Aldemir, Ingeniería Nuclear,


The Ohio State University, Columbus, Ohio

Profesor M. Darwish, Departamento de Ingeniería Mecánica


American University ofBeirut, Beirut, Líbano

The MathWorks, Inc., Natick, Massachusetts

Profesor J. K. Shultis, Ingeniería Nuclear,


Kansas State University, Manhattan, Kansas

Profesor S. V. Sreenivasan, Departamento de Ingeniería Mecánica


University of Texas, Austin, Texas

MARCAS REGISTRADAS

Image Alchemy es una marca registrada de Handmade Software, Inc.


MATLAB es una marca registrada de MathWorks, Inc.
Qtake es una marca registrada de Apple, Inc.
Unix es una marca registrada de AT &T Bell Laboratories.
Windows es una marca registrada de Microsoft, Inc.

AGRADECIMIENTOS

La editora Mary Franz sugirió la idea original de crear este libro. Su sugerencia inicial coincidió
con el momento en que el autor comenzó a enseñar métodos numéricos con MATLAB. Sin su
continuo apoyo moral y administrativo este libro habría sido imposible. El autor agradece el
apoyo total de MathWorks a esta obra. Paul Costa, Allison Babb y John Galenski de Math-
Works proporcionaron al autor considerable apoyo técnico. El aliento y la ayuda administrativa
de Cristina Palumbo me fueron indispensables.
Varios profesores universitarios proporcionaron problemas de ejemplo útiles, y su ayuda
se reconoce en notas al pie de las páginas en que aparece el material. David Smith de The Ohio
State University ayudó al autor a terminar el apéndice sobre interfaz gráfica de usuario con
MA TLAB. Agradezco especialemente a Keiji Yano de The Ohio State University y a Y. C. Su
de Washington State University su paciente lectura de pruebas de todo el manuscrito. Muchas
Prefacio XIII

gracias también a los profesores que utilizaron el manuscrito como texto en un curso de
métodos numéricos y a los estudiantes de esos cursos. Los comentarios de los profesores y
de los estudiantes fueron valiosísimos.
El autor está en deuda con los revisores citados en una sección anterior; sus sugerencias y
comentarios fueron en extremo valiosos para el autor.
El manuscrito de este libro se escribió en LaTex. Todas las figuras, con excepción de unas
cuantas, se crearon con MATLAB, se guardaron en formato postscript y luego se introdujeron
en los archivos del manuscrito en LaTex. Robert Chong de The Ohio State University capturó
una buena parte del primer borrador en LaTex. El autor tiene una deuda enorme con el Profesor
Shultis, quien no sólo revisó el manuscrito sino que también colaboró en la formación
tipográfica empleando LaTex, junto con su libro LaTex Notes (Prentice-Hall, 1994).
Por último, es el sincero deseo del autor que el lector disfrute del estudio de la presente
obra.

S. Nakamura
Columbus, Ohio
Capítulo 1

Este capítulo servirá como tutoría! práctico para los principiantes que no conocen MATLAB.
Suponemos que los lectores cuentan con la edición para estudiantes de MATLAB (en una PX
o Macintosh) o una versión profesional 4.1 o superior. Antes de leer este capítulo, recomenda-
mos al lector instalar el software de MATLAB en su computadora y abrir la ventana de
comandos. Conforme se expliquen las órdenes, trate de escribir y ejecutar cada una de ellas.
Tenga presente que en todo este libro lag significa loge. La función de logaritmo base 10
se denotará específicamente como loglO. Las funciones trigonométricas emplean radianes
pero no grados; por otro lado, los ángulos en las vistas gráficas están en grados.
Los resultados de los cálculos pueden presentar pequeñas diferencias en las diferentes
computadoras debido a que los errores de redondeo no son los mismos en todos los modelos
de computadoras. 1

1.1 TUTORIALES EN LA VENTANA DE COMANDOS


1.1.1 Antes de iniciar los cálculos
Cómo abrir MA TLAB: En una estación de trabajo Unix, MA TLAB puede abrirse
tecleando
>matlab

Una vez que aparezca la indicación de MA TLAB, que puede ser>>, teclee los comandos que
se explican en esta sección. Para salir de MA TLAB, teclee
»quit
En Macintosh o Windows, haga clic en el icono de MATLAB o de STUDENT MA TLAB.
El procedimiento para salir de MA TLAB es similar al que se sigue para salir de cualquier otra
aplicación en Macintosh o Windows.

1
Las diferencias suelen ser insignificantes, pero algunos problemas son sensibles a errores de redondeo y
producen resultados significativamente distintos en diferentes computadoras. Tales problemas se conocen como
problemas mal condicionados y por lo regular son dificiles de resolver en cualquier computadora.

l
2 Capítulo 1 Fundamentos de MATLAB

Ayuda: Si no entiende bien el significado de un comando, teclee he lp y el nombre del


comando en cuestión. El comando he lp presenta una explicación concisa pero precisa de los
comandos; tal vez no resulte útil para los principiantes, pero será uno de los comandos que
utilice con mayor frecuencia. Por ejemplo, he aqui una traducción de las respuestas a help
qui t y a help help:

»help quit
QUIT Terminar MATLAB.
QUIT termina MATLAB .
»help help
HELP Documentación en linea.
HELP, sin más, presenta una lista de todos los temas de ayuda
primarios. Cada tema primario corresponde a un nombre de
directorio en MATLABPATH.
•HELP tema" proporciona ayuda sobre el tema especificado. El
tema puede ser el nombre de un comando o de un directorio; en
el primer caso, HELP exhibe información acerca de ese comando;
en el segundo caso, HELP muestra la Tabla de Contenido del
directorio especificado.
No es necesario proporcionar el nombre de camino completo del
directorio; basta con el último componente o algunos de los
últimos componentes.
Por ejemplo, tanto "help general" y "help matlab/general" exhiben
la Tabla de Contenido del directorio toolbox/matlab/general.
LOOKFOR XYZ busca la cadena XYZ en la primera linea de comentario
del texto de HELP de todos los archivos M que se encuentren en
MATLABPATH . Para todos los archivos en los que se encuentre
la cadena, LOOKFOR exhibirá las lineas en las que se encontró.
MORE ON hace que HELP haga una pausa después de cada pantalla
si el texto de ayuda ocupa varias pantallas.
Véase también LOOKFOR, WHAT, WHICH, DIR, MORE.
Versión: Lo primero que el usuario debe saber acerca del software de MATLAB es qué
versión está usando. Para obtener esta información, teclee ver sien.
Qué: El comando wha t produce una lista de los archivos M-, MAT- y MEX- presentes en
el directorio de trabajo actual. 2 El comando what nombredirector io lista los archivos del
directorio nombredirectorio en el matlabpath. No es necesario especificar el nombre
completo de la ruta del directorio; basta con el o los últimos componentes. Por ejemplo, tanto
what general como what matlab/general listan los archivos M-del dlrectorio tool-
box/matlab/ general .

2Archivo M: un archivo de guión o función (su formato es nombrearchi vo. m)


ArchivoMAT: un archivo que contiene datos binarios (su"formato es nombrearchi vo. mat)
Archivo MEX: un archivo MATLAB ejecutable compilado a partir de Fortran o C (nombr ear chivo . mex)
Sección 1.1. Tutoriales en la ventana de comandos 3

tolbox/matlab/general.

Quién: El comando who produce una lista de las variables del espacio de trabajo actual;
whos exhibe información adicional acerca de cada variable; who global y whos global
listan las variables del espacio de trabajo global.

Reloj: El comando clock exhibe números como


ans =
1.0e+03 *
1.9950 0.0030 0.0050 0.0150 0.0140 0.0091

El primer número, 1. oe+o3, es un multiplicador; los números de la segunda línea tienen el


siguiente significado:
[año, mes, dia, hora, minuto, segundo]

Se puede exhibir la misma infonnación en formato entero con f ix (e 1 ock) . La respuesta es


ans =
1995 3 5 15 19 56

lo que indica que la fecha fue el año 1995, tercer mes, quinto día, 15 horas, 19 minutos y 56
segundos, aproximadamente seis minutos después de que se imprimió el primer ejemplo de
clock. Podemos medir con clock el tiempo que tarda una ejecución. Por ejemplo, asigne
t_o•clock antes de que se inicie un cálculo y t_1=clock cuando se haya completado;
entonces, t _ 1 - t _o nos dará el tiempo transcurrido durante el cálculo. También podemos
usar tic y toe para medir el tiempo transcurrido.
El comando da te proporciona información similar, pero en un formato más breve:
ans =
5 -Mar - 95

Camino: El comando pa th imprime la ruta de búsqueda vigente de MATLAB. El


comando p = pa th devuelve una cadena p que contiene la ruta . El comando pa th (pO)
cambia la ruta a po, que es una cadena que contiene la nueva ruta. El comando path (pl, p2)
cambia la ruta a la concatenación de las dos cadenas de ruta pl y p2. Por tanto, path (path,
p3 l anexará un directorio nuevo p3 a la ruta vigente y path (p3, path) antepondrá una
ruta nueva.
Obtener entorno: El comando getenv ( 'MATLABPATH') muestra las rutas de MAT-
LAB vigentes.
Diario: El comando di ar y on escribe todo lo que se introduce por el teclado, así como
la mayor parte de lo que se envía a la pantalla, a un archivo llamado diary y diary off
termina la escritura. Si ya existe el archivo diary, las salidas de la pantalla se anexarán a ese
archivo. Se puede especificar un nombre de archivo distinto de diary escribiéndolo después
4 Capítulo 1 Fundamentos de MATLAB

de la palabra diary. Si no se incluyen las palabras on u off, el comando diary sola alternará
entre diary on y diary off. El archivo puede imprimirse en papel o editarse posteriormente.

Escape: El signo ! es el operador que sirve para salir temporalmente de MATLAB. Con
este signo, se tiene acceso al directorio fuera de MATLAB. Por ejemplo, suponga que abrió
MATLAB desde un shell de Unix; entonces, podrá emitir un comando de Unix desde dentro
de MATLAB escribiendo dicho comando después del signo de escape. Por ejemplo, es posible
abrir desde MA TLAB software de edición de textos como el editor vi tecleando ! vi nom -
brearchi vo. Podemos utilizar el escape de forma análoga en una PC para los comandos de
DOS, o incluso en una Mac para un número limitado de comandos. Por ejemplo, podemos dar
formato a un disquete desde MATLAB en una PC con ! forma t a:. Sin embargo, la ejecución
de programas mediante este mecanismo, sobre todo si se trata de software gráfico o de
comunicaciones, puede echar a perder el entorno de computación.

Demostración: El comando demo guía al usuario para que pueda ejecutar diversas
demostraciones que se eligen de un menú. El contenido de algunas demostraciones no es fácil
de entender a la primera, pero puede estudiarse en varias ocasiones si se tiene interés.

1.1.2 Cómo iniciar los cálculos


Cálculos con una sola variable: Cuando se abre una ventana de comandos, aparece la
indicación >> en la esquina superior izquierda de la ventana. Podemos escribir cualquier
comando adelante de la indicación. En nuestras explicaciones de los comandos, omitiremos la
indicación por sencillez.
Como ejemplo sencillo, evaluemos:
4 3
Volumen= 31tr , con r = 2

Los comandos que debemos teclear son:

Listado 1.la
r = 2;
vol= (4/3)*pi•r•3;

donde pi = 1t en MATLAB. Cada línea se teclea adelante de la indicación >> y se oprime


la tecla return (o intro) al final de la línea. Observe que en el guión anterior cada línea es un
comando y termina con un signo de punto y coma. El circunflejo A después de r es el
operador de exponente.
Cuando trabajamos en la ventana de comandos, la computadora calcula la respuesta de
cada comando inmediatamente después de pulsarse la tecla return. Por tanto, el valor de vol
ya está en la computadora; ¿cómo podemos hacer que aparezca en la pantalla?
La forma más fácil de exhibir el resultado es teclear vol y pulsar return. La computadora
exhibirá -..
Sección 1.1. Tutoriales en la ventana de comandos s
vol

Listado 1.lb
r = 2;
vol= (4/3)*pi*rA3

Si falta el punto y coma, el resultado se imprimirá inmediatamente después de calcularse. Sin


embargo, como casi nunca resulta cómodo ir imprimiendo todos los resultados, por lo general
se coloca un punto y coma después de cada comando.
Podemos escribir varios comandos en una misma línea separándolas con signos de punto
y coma. Si necesita imprimir los resultados de cada comando que se ejecute, separe los~
comandos con comas y termine la línea con o sin una coma. Por ejemplo, si escribe

r = 2, vol= (4/3)*pi*rA3

se imprimirán los valores de r y de vol, pero si escribe

r = 2; vol= (4/3}*pi*rA3;

no se imprimirán resultados.
Es posible dividir un comando largo en varias líneas. En Fortran, esto se hace con una
marca de continuación en la columna 6. En MATLAB, la marca de continuación es ... y se
coloca al final de la línea que se desea continuar; por ejemplo,

Listado 1.2
r = 2;
vol= (4/3)*3.14159
*r 3; A

la indicación > no aparecerá en la línea que siga a la marca de continuación.

Operadores aritméticos: Los operadores aritméticos como+,-,* y/ son los mismos


que los de lenguajes de programación tradicionales como Fortran y, respectivamente, más,
menos, multiplicar y dividir. MATLAB emplea un operador no tradicional, \, que puede
llamarse división inversa. Este operador produce el recíproco de la división; o sea, a \b
produce b /a. Por ejemplo,

e = 3\1
e =
0.3333
6 Capítulo 1 Fundamentos de MATLAB

No es conveniente que los lectores utilicen este operador en cálculos ordinarios, pero adquirirá
importancia en el capítulo 3 cuando tratemos el álgebra lineal.

Enunciado if: El enunciado i f siempre debe terminar con un enunciado end; por ejemplo,

Listado 1.3
r = 2;
if r>O, vol (4/3)*3.14159*r·3;
end

Obsérvese también que al escribir el guión anterior la indicación > no aparece sino hasta
después de teclearse end. Si el enunciado matemático requiere un igual después de if, utilice
=,como en el lenguaje C; por ejemplo,

Listado 1.4
r= 2;
if r=2, vol (4/3)*pi*r·3;
end

El operador diferente de se escribe - =; por ejemplo,

Listado 1.5
r= 2;
if r -= 3, vol= (4/3)*pi*r·3;
end

Los operadores mayor que, menor que, igual o mayor que e igual o menor que son,
respectivamente,

>
<
>=
<=
Los enunciados lógicos and y or se denotan con & y 1, respectivamente. Por ejemplo, la
ecuación condicional

Si g > 3 o g < O, entonces a = 6


se escribe
if g>3 1 g<O, a = 6; end

Asimismo, la ecuación condicional

si a> 3 y e< O," b = 19


Sección 1.1. Tutoriales en la ventana de comandos 7

se expresa como

if a>3 & c<O, b=19; end

Los operadores & y 1 se pueden utilizar agrupados; por ejemplo,


if ((a==2 1 b==3) & c<5) g=l; end

El enunciado if se puede utilizar con el se o elseif; por ejemplo,

Listado 1.6
r=2;
if I ) 3 b=l¡
elseif r==3 b=2;
else b=O;
end

Desde luego, e 1 se i f puede repetirse tantas veces como se desee; sin embargo, hay ocasiones en
que el uso de el se y elseif tiene sus bemoles, sobre todo cuando las variables que siguen al
enunciado e 1 se i f incluyen variables de arreglo de diferentes tamaños. Si los enunciados e 1 se i f
no funcionan, olvídese de ellos y repita enunciados i f sencillos cuantas veces sea necesario.

Exhibición: La orden disp exhibe un número, vector, matriz o cadena en la ventana de


comandos sin tener que especificar un nombre de variable; así, puede servir para exhibir
mensajes o datos en la pantalla. Por ejemplo, tanto disp (pi) como disp pi imprimen
3 .14159 en la ventana de comandos. Pruebe también disp •Esta es una prueba de
disp.'.

Variables y nombres de variables: No es necesario declarar los nombres de las variables


ni sus tipos. Esto se debe a que los nombres de las variables en MA TLAB no son diferentes
para las variables enteras, reales y complejas. Cualquier variable puede adoptar valores reales,
complejos y enteros. Ni siquiera es necesario declarar previamente el tamaño de un arreglo.
En principio, cualquier nombre puede utilizarse siempre que sea compatible con MAT-
LAB. Sin embargo, debemos tener presentes dos situaciones incompatibles. La primera es
que MA TLAB no acepta el nombre; la segunda es que se acepta el nombre pero éste anula el
significado original de un nombre reservado. Estos conflictos pueden ocurrir con los siguientes
tipos de nombres:

(a) nombres de ciertos valores


(b) nombres de funciones (subrutinas)
(c) nombres de comandos

Un método para determinar la compatibilidad del nombre de variable es probarlo en la


pantalla de com11ndos. Un enunciado válido como x=9 tendrá una respuesta como ésta:
X=
9
8 Capítulo 1 Fundamentos de MATLAB

lo que significa que se aceptó la variable. En cambio, si se prueba con end=4 (como ejemplo
de uso indebido), será ignorado.
Un ejemplo del segundo conflicto es el siguiente: si se utilizan sin y cos (como
ejemplos de nombres de variable indebidos) sin relación con las funciones trigonométricas;
por ejemplo,
sin = 3;
cos = sin·2;

los cálculos procederán, pero sin y cos ya no podrán utilizarse como funciones trigonométri-
cas en tanto no sean borradas las variables con el comando clear o se abandone MATLAB.
Si aparece un mensaje de error relacionado con un conflicto, es importante que el lector
investigue qué lo causó.
Es tradicional utilizar los símbolos i,j, k, /, m y n como variables enteras o índice.
Al mismo tiempo, i y j se emplean para denotar el valor imaginario unitario, A". En
MA TLAB, i y j se reservan para el valor imaginario unitario; por tanto, si un cálculo
incluye variables complejas es aconsejable evitar el uso de i y j como variables definidas
por el usuario, si es posible.
En la tabla 1.1 se presentan ejemplos de nombres de variable reservados que tienen
significado especial. Se puede verificar la existencia de una variable o un archivo con el
comando exist.

TABLA 1.1 Números y nombres de variables especiales


Nombre de variable Significado Valor
eps Épsilon de Ja máquina 2.2204e-16
pi 1t 3.14159...
i y j Unidad imaginaria .r::r
inf Infinito 00

NaN No es número
date Fecha
flops Contador de operaciones de punto flotante
nargin Número de argumentos de entrada de una función
nargout Número de argumentos de salida de una función

Ciclos: MATLAB cuenta con ciclos far /end y while/end. A fin de ilustrar un ciclo
f or / end, calculemos el volumen de las esferas para r=1
hasta s. Los comandos para esta tarea
pueden escribirse así:
Listado 1.7
for r=l:S
vol= (4/3)*pi•r·3;
disp( [r, vol])
end
Sección 1.1. Tutoriales en la ventana de comandos 9

Los cálculos del ciclo no comenzarátl hasta que se teclee end y se pulse la tecla retum
(intro). El enunciado disp ( [r, vol] l imprimirá los valores de r y vol en una línea cada
vez que se calcule vol. No es necesario un signo de punto y coma después de for r=1: s ni
de end.
Otra forma de escribir un ciclo consiste en utilizar whi 1 e/ end; por ejemplo,

Listado 1.8
r = O;
while r<5
r = r+l;
vol= (4/3)*pi•r·3;
disp ( [r, vol))
end

El índice del ciclo puede decrementarse así:

for r=5:-1:1
vol= (4/3)*pi•r•3;
disp ( [r, vol))
end

En este ejemplo, el -1 entre los operadores de dos puntos es el decremento del parámetro r
después de cada ciclo.
Podemos escribir ciclos dobles y triples; por ejemplo,

Listado 1.9
far r=1:5
for s=l:r
vol= (4/3)*pi*(r·3 - s·3);
disp ( [r, vol))
end
end

Formato: Por omisión, los números se exhiben con cinco dígitos:

pi
ans
3.1416

Sin embargo, los mismos dígitos pueden exhibirse con 16 dígitos si se emite la orden forma t
long; por ejemplo,

forrnat long
pi
ans
3.141592653589793
10 Capítulo 1 Fundamentos de MATLAB

Si desea volver al fonnato corto, utilice format short. Además, format short e y
format long e se pueden imprimir números cortos y largos, respectivamente, en fonnato
de punto flotante.
Corte: El comando break tennina la ejecución de un ciclo for o while. Si se utiliza
break en ciclos anidados, sólo se tennina el ciclo inmediato donde se encuentra el comando.
En el siguiente ejemplo, break tennina el ciclo interior tan pronto como se satisface j >2 * i,
pero el ciclo de i se continúa hasta i =6:

Listado 1.10
for i=1:6
for j=1:20
if j>2*i, break, end
end
end

Otro ejemplo es

Listado 1.11
r=O
while r<lO
r = input('Teclee el radio (o -1 para terminar): ');
if r< O, break, end
vol= (4/3)*pi*r·3;
fprintf('Volumen = %7.3f\n', vol)
end

En el ciclo anterior, el radio r se introduce mediante el teclado. El enunciado fpr in tf


sirve para imprimir vol con un formato, %7 • 3 f, que equivale a F7 . 3 en Fortran. Si
O ~ r < 1O, se calculará e imprimirá vo 1, pero si r < Oel ciclo tenninará. Además, si r < 1O
el ciclo while terminará. En secciones posteriores se explicarán con mayor detalle
input y fpr intf.
En un lenguaje de programación sin orden de corte, se utilizaría goto para romper un ciclo.
MATLAB no cuenta con la orden goto.

Ciclo infinito: Hay ocasiones en que conviene utilizar un ciclo infinito que pueda romperse
cuando se satisfaga cierta condición. En el siguiente ejemplo se muestra un ciclo infinito que
se rompe sólo si se satisface la condición x > xlimi t:

while 1

if x > xlimit, bread; end

end
Sección 1.1. Tutoriales en la ventana de comandos 11

Cómo borrar variables: Al ejecutarse los comandos, MA TLAB memoriza las variables
utilizadas. Sus valores permanecen en la m'emoria hasta que se sale de MA TLAB o hasta que
se borran las variables, lo cual se hace con el comando e 1 ear. Si sólo se desea borrar algunas
variables, sus nombres se indican después de la palabra clear; por ejemplo,

clear x y z

Cómo borrar la ventana de comandos: Si desea borrar la ventana, utilice el comando

ele

1.1.3 Lectura y escritura


Hay varias formas de pasar datos a y de MATLAB. Los métodos pueden agruparse en tres
clases:

(a) Operación interactiva mediante teclado o el ratón


(b) Lectura de o escritura en un archivo de datos
(c) Empleo de save o load

En el resto de esta subsección sólo presentaremos información mínima en lo tocante a


lectura y escritura. Se proporcionará mayor información en la sección 1.8.

Lectura de entradas de un teclado: MATLAB puede aceptar datos de entrada a través del
teclado mediante el comando input. Si se desea leer un número, un enunciado básico sería:

z = input('Teclee el radio:')

La parte Teclee el radio: es un mensaje de solicitud que se exhibe en la pantalla. Cuando


se teclee el valor del radio y se pulse la tecla retum (intro), el dato se guardará en z. También
es posible introducir cadenas desde el teclado. Un enunciado básico sería:

z = input('Indique su nombre: ', 's')

El segundo argumento, • s • , indica que la entrada del teclado es una cadena. La variable z se
convertirá en una variable de arreglo (vector de fila) a menos que la cadena sólo contenga un
carácter. Se puede introducir una cadena con input sin • s • si la cadena se teclea encerrada
entre apóstrofos. En este caso, el mensaje de solicitud podría ser:

z = input('Indique su nombre (encerrado en apóstrofos):')

Formato de salida: Es posible imprimir mensajes y números con formato si se utiliza


fpr intf; por ejemplo,

fprintf('El volumen de la esfera es %12.Sf.\n', vol)


12 Capítulo 1 Fundamentos de MATLAB

Aquí se incluyó entre los apóstrofos la cadena que se va a exhibir, el formato de un número y
el operador de nueva línea. El estilo del formato debe ser familiar para quienes conocen el len-
guaje C: El volumen de la esfera es la cadena que se exhibirá, %12. sf es el formato y
es similar a F12. sen Fortran, y \n es el operador de nueva línea que avanza en una línea la
posición en la pantalla. El operador de nueva línea se puede colocar en cualquier lugar de
la cadena. Por último, vol es la variable que se imprimirá en el formato %12. sf. Si se omite
\n, lo que se imprima en seguida aparecerá en la misma línea.
El enunciado
fprintf('formato_e: %12.5e\n', 12345.2)
exhibirá
formato e: 1.23452e+04
Si se escriben consecutivamente dos enunciados de impresión sin \n en el primer enun-
ciado, por ejemplo,
fprintf('formato e: %12.5e', 12345.2)
fprintf('formato=f: %12.3f\n', 7.23462)
toda la salida se imprimirá en una sola línea, asi:
formato e: 1.23452e+04 formato f: 7.235
Se puede teclear un valor entero empleando el mismo formato, sólo que se pone un O
después del punto decimal; por ejemplo,
fprintf{'formato_f: %12.0f\n', 93)
produce
formato f: 93

Si se desea imprimir varios números en una misma línea, puede utilizarse varias veces
fpr in tf sin \n, excepto en el último enunciado.
Escritura en un archivo especifico: Es posible utilizar el enunciado fprintf para
escribir salidas con formato en un archivo. Para ello, se incluye el nombre del archivo en el
argumento; por ejemplo,
fprintf('archivo_ x', 'Volumen= %12.5f\n', vol)
escribirá la salida en el archivo de nombre archivo x. Si no existe el archivo, se creará uno
nuevo; si existe, la salida se anexará al final de su contenido. Si ya existe archi VO x, es
posible eliminarlo con ! rm archivo x en Unix o ! erase archivo x en Windows:-
Se puede tener un mejor control delos archivos con fopen y fcl;-se. Si desea mayores
detalles, consulte la guia de usuario de MATLAB.
Sección 1.2. Variables de arreglo
o 13

1.2 VARIABLES DE ARREGLO ,


Variables de arreglo unidimensional: Las variables de arreglo u · nal tienen
forma de fila o columna y están íntimamente relacionadas con los vectores y las matrices. En
MATLAB, arreglo de fila es lo mismo que vector de fila y arreglo de columna es lo mismo
que vector de columna. La variable x puede definirse corno vector de fila especificando sus
elementos; por ejemplo:
X= (0, 0.1, 0.2, 0.3, 0.4, 0.5];

Si desea imprimir un elemento en particular, teclee x con su subíndice. Por ejemplo, si teclea
x ( 3 > corno un comando se exhibirá:
ans =
0.2

Una forma equivalente de definir la misma x es


for i=1:6
x(i) = (i-1)*0.1;
end

El tamaño de un vector no tiene que declararse previamente, pues se ajusta automática-


mente. El número de elementos de x puede incrementarse definiendo elementos adicionales,
por ejemplo,
x(7) = 0.6;

Otra forma de escribir una variable de arreglo de fila con un incremento o decremento fijo es:
X= 2:-0.4:-2

que produce
X= 2.0000 1.6000 1.2000 0.8000 0.4000 -0.0000

La definición de un arreglo de columna es similar a la de un arreglo de fila excepto que los


elementos se separan mediante signos de punto y coma; por ejemplo,
z = [O; 0.1; 0.2; 0.3; 0.4; 0.5];

Una alternativa para definir esto mismo es agregar un apóstrofo a un arreglo de fila:
z = [O, 0.1, 0.2, 0.3, 0.4, 0.5] ';

El operador apóstrofo equivale al operador de transposición en el álgebra de matrices y


vectores, así que convierte vectores de columna en vectores de fila y viceversa. Si se teclea z
como orden se obtiene:
14 Capítulo 1 Fundamentos de MATLAB

z =
o
0.1
0.2
0.3
0.4
0.5

Si se define un solo elemento de un arreglo e, por ejemplo,


c(8) = 11;

se supondrá e ( i) o para i =1 hasta 7. Por tanto, si teclea e como comando obtendrá


e =
o o o o o o o 11

Cuando y y x tienen la misma longitud y la misma forma (fila o columna), los vectores y y
x se pueden sumar, restar, multiplicar y dividir empleando los operadores aritméticos de
arreglos:
z X + y
z X - y
z = X * y
z = X ./ y
que equivalen respectivamente a
Listado 1.12
far i=1:6; z(i) x(i) + y(i); end
far i=1:6; z (i) x(i) - y(i); end
far i=1:6; z ( i) x ( i) *y ( i) ; end
far i=1:6; z (i) x(i) /y(i); end
Las reglas para la suma y la resta son las mismas que para los vectores en el álgebra lineal.
En cambio, . • y ./ son operadores nombrados para la multiplicación y la división de arreglos,
respectivamente, y son distintos de la multiplicación y división de matrices y vectores. Si se
omite el punto de.• o ./,el significado cambia totalmente (en el capítulo 3 se proporcionan
mayores detalles).
El operador de potenciación de arreglos se puede ilustrar con
g = z. ·i.2;

donde z es un vector de longitud 6, se coloca un punto antes del operador" y g se convierte en


un vector de la misma longitud. El enunciado anterior equivale a
far i=1:6; g(i) = z(i) ·i.2; end

donde el operador" no lleva antepuesto un punto.


El tamaño de un arreglo puede incrementarse anexándole un elemento o un vector (o
vectores). Por ejemplo, suponga '
Sección 1.2. Variables de arreglo 15

X=
2 3

El comando que sigue anexas ax y hace que su longitud sea 3:


X = (X, 5)

lo que devuelve
X=
2 3 5

Podemos anexar un número, un vector o varios vectores a un vector de columna. Suponga


que y es un vector de columna,
y =
2
3

entonces
y [y; 7)

produce
y
e
3
7

Aquí, 7 se añade al final del vector de columna. Observe que se utiliza un signo de punto y
coma para anexar a un vector de columna. También se puede anteponer un elemento a un
vector; por ejemplo, x = [9 , x J produce
X=
9 2 3 5

donde x del lado derecho se definió previamente. De forma similar, [ - 1; y] produce


y =
-1
2
3
7

Un procedimiento inverso consiste en extraer una parte de un vector. Con la y anterior,


w = y(3:4)
define a w que equivale al tercer y cuarto elementos de y, a saber:
16 Capítulo 1 Fundamentos de MATLAB

w
3
7

Si no recuerda el tamaño de un vector, pregúntelo a la computadora. Para un vector


X = [9 I 2, 3 I 5]

la consulta
length(x)

recibe la respuesta
ans
4

La respuesta es la misma para un arreglo de columna. Definamos y = (9, 2,


3] ';entonces, length (y) devolverá ans = 3 . Por otro lado, si además de la longitud
se desea saber si el vector es de columna o de fila, se debe usar si ze. Por ejemplo,
size (y) devolverá

ans =
3 1

donde la primera cifra es el número de filas y la segunda es el número de columnas. Esta


respuesta nos dice que y es una arreglo de 3 por 1, es decir, un vector de columna de longitud
3. Para z= [9, 2, 3, 5], size (z) devolverá

ans =
1 4

es decir, z es un vector de longitud 4.

Variables de cadena: Las variables de cadena son arreglos. Por ejemplo, una variable de
cadena v definida por
v = 'glaciar'

equivale a
v = ['g', ' l', 'a', 'e', ' i ' , 'a', 'r']

La variable v puede convertirse en una cadena de columna con


V = V'

que es
Sección 1.2. Variables de arreglo 17

g
1
a
e
i
a
r

Variables de arreglo bidimensional: Un arreglo bidimensional, que es lo mismo que una


matriz en MATLAB, se puede definir especificando sus elementos. Por ejemplo, un arreglo de
3 por 3 se puede definir mediante
m = (0.1, 0.2, 0.3; 0.4, 0.5, 0.6; 0.7, 0.8, 0.9);

Observe que los elementos de una fila terminan con un signo de punto y coma. Desde
luego, todas las filas deben tener el mismo número de elementos; si no es así, la definición no
será aceptada. El enunciado anterior equivale a escribir

Listado 1.13
m ( 1 , 1 ) =O . 1 ;
m(l,2)=0.2;
m(l,3)=0.3;
m(2,1)=0.4;
m(2,2)=0.5;
m(2,3)=0.6;
m ( 3 , 1 ) =O . 7 ;
m(3,2)=0.8;
m(3,3)=0.9;

Si tecleamos m como un comando obtenemos


m =
0.1000 0.2000 0.3000
0.4000 0.5000 0.6000
0.7000 0.8000 0.9000

Podemos expresar una columna o una fila completa de un arreglo bidimensional emplean-
do un signo de dos puntos. Por ejemplo, m ( 1 , : ) y m ( : , 3 ) son la primera fila de my la tercera
columna de m, respectivamente, y se tratan como vectores. Por ejemplo,
e (1,:) ffi (3 / : ) i
e (2, : ) m(2,:);
e (3 / : ) m ( 1, : ) ;
producen
e =
0.7000 0.8000 0.9000
0.4000 0.5000 0.6000
0.1000 0.2000 0.3000
18 Capítulo 1 Fundamentos de MATLAB

Los arreglos bidimensionales se pueden sumar, restar, multiplicar y dividir con los
operadores aritméticos de arreglos:
Listado 1.14a
e = a + b
e = a - b
e= a .* b
e = a ./ b
Aquí, a y b son arreglos bidimensionales del mismo tamaño. Los enunciados anteriores
equivalen a, respectivamente,

Listado 1.14b
for i=1:3
for j=1:3
c(i,j) a(i,j) + b(i,j);
end
end
for i=1:3
for j=1:3
c(i,j) = a(i,j) - b(i,j);
end
end
for i=1:3
for j=1:3
e ( i, j) = a ( i, j) *b ( i, j) ;
end
end
for i=1:3
for j=1:3
e (i , j ) a ( i , j ) /b ( i , j ) ;
end
end

Observe que las expresiones del listado l. l 4a son mucho más compactas y claras que las del
listado l.14b.
El enunciado con el operador de potenciación de arreglos,
g = a.• 3

equivale a
for i=1:3
for j=1:3
g(i,j) = a(i,j) •3;
end
end
Sección 1.2. Variables de arreglo 19

Los vectores de columna y los de fila son casos especiales de matrices; por tanto, los
operadores de arreglos funcionan igual con los vectores que con las matrices. El empleo de
los operadores aritméticos de arreglos tiene dos ventajas. En primer lugar, los programas son
más cortos. En segundo lugar, la eficiencia computacional de MATLAB es mayor con la forma
corta que cuando se escribe lo mismo empleando ciclos.
Enunciados ifque comparan arreglos: Las variables de arreglos pueden compararse en
un enunciado i f. Si suponemos que a y b son matrices del mismo tamaño:

(a) i f a=b sólo se satisface si a ( i, j l =b ( i, j l para todos los elementos.


(b) i f a> =b sólo se satisface si a ( i , j l >=b ( i , j l para todos los elementos.
(c) i f a-=b se satisface si a ( i, j l -=b ( i, j l para al menos un elemento.

Si se comparan dos variables de cadena de diferente longitud en un enunciado i f, ocurrirá


un error aritmético, porque los dos arreglos deben tener la misma longitud. Para poder
comparar variables de cadena en enunciados if, será preciso ajustar todas las variables a una
longitud predeterminada anexando espacios en blando. Por ejemplo, en lugar de

a 'equidna'
b 'tapir'
e 'albatross'
d 'petrel'

debemos escribir

a 'equidna
b 'tapir
b 'albatross'
d 'petrel

Con esto ya podremos comparar a, b y e en enunciados i f.


Sin embargo, una forma más fácil de realizar la tarea es con s tr 2ma t. Por ejemplo,
supongamos que las variables de cadena están dadas por

tl 'digitalis'
t2 = 'nicotiana'
t3 = 'basilicurn'
t4 = 'lychnis'
tS 'chrysantemum'

Entonces, podemos organizar las variables en una sola matriz de cadenas con
s = str2mat(tl, t2, t3, t4, tS)
La primera fila des se convierte en tl, la segunda en t2, y así sucesivamente, con longitudes
idénticas porque se añaden espacios en blanco a las cadenas más cortas.
20 Capítulo 1 Fundamentos de MATLAB

1.3 ASPECTO SINGULAR DE LOS NÚMEROS EN MATLAB


En los lenguajes de programación ordinarios, los números se clasifican en varias categorías
como sencillos, dobles, reales, enteros y complejos. En MATLAB, todas las variables se
tratan igualmente con doble precisión. No hay distinción entre variables enteras y reales, ni
entre variables reales y complejas. La forma como se asigna un valor a una variable depende
exclusivamente del usuario. Si una variable se va a utilizar como entero, simplemente se le
asigna un valor entero. Los enteros se reconocen a partir de la mantisa y el exponente en la
memoria. La falta de distinción entre variables reales y complejas es exclusiva de MATLAB,
pero ofrece muchas ventajas. En Fortran, por ejemplo, '•las variables reales y complejas no
pueden compartir las mismas subrutinas.
Como ejemplo sencillo, consideremos las raíces de un polinomio cuadrático

ax2 + bx+ e;:;:\ O

la solución puede escribirse como


-b ± lb2 -1 4ac
X"'
2a
En Fortran o C, hay que separar las soluciones en dos casos:

(i) b2 ~ 4ac,

2
(ii) b < 4ac,

-b ± i ./ 4ac
x=---2a __ - b_2

donde i es igual a l=f y las soluciones en el segundo caso son valores complejos. En
MATLAB, en cambio, no hay necesidad de separaciones; sea cual sea el signo del valor dentro
de la raíz cuadrada, las raíces se calcularán con

xl (- b + sqrt(b·2 4*a*c)) / (2*a)


x2 = (-b sqrt(b·2 4*a*c)) / (2*a)

Si las raíces son complejas, MATLAB tratará las variables automáticamente como complejas.
La exactitud de los cálculos depende de la forma en que se registran y procesan los
números. Los parámetros clave que indican la exactitud de los números en un lenguaje de
programación son

Número positivo más pequeño: x_min


Número positivo más grande: x_max
Épsilon de la máquina: eps
Sección 1.3. Aspecto singular de los números en MATLAB 21

TABLA 1.2 Comparación del intervalo numérico y el épsilon de la máquina


Precisión MATLAB Fortran (estación de Fortran (Cray)
de software (estación de trabajo) trabajo) sencilla (doble)
x_min 4.Se-324 2.9e-39 (misma) 4 . 6e- 2476
x_max 9 . 9e+307 1 . 7e+38 (misma) S . 4e+2465
eps 2.2e-16 l . 2e-7 (2. Se-17) 1.3e-29

En la tabla 1.2 se comparan estos tres números en MATLAB con sus contrapartes en
Fortran en unas cuantas computadoras representativas.
La tabla 1.2 muestra que el épsilon en MATLAB es equivalente al de doble precisión
de Fortran en estaciones de trabajo tipicas. 3 MATLAB trata todos los números como si
fueran de doble precisión. El x_min de MATLAB es significativamente menor que el de
Fortran en VAX y x_max es significativamente mayor. De hecho, x_min y x_max ocupan el
segundo lugar después de los de la Cray. El amplio intervalo numérico en MATLAB cierta-
mente constituye una ventaja significativa cuando se calculan funciones exponenciales o
funciones con singularidades.
Si el lector desea determinar x_ min, x_ max y eps en su propia computadora, puede ejecutar
los siguientes guiones (el último número que aparece en la pantalla es la respuesta):
Listado 1.15
% Para obtener x min
x=l; while x>O, x=x/2, end

Listado 1.16
% Para obtener x max
x=l; while x<inf~ x=x*2, end

Listado 1.17
% Para obtener el épsilon de la máquina
x=l; while x>O, x=x/2; ex= x*0.98 + 1; ex=ex - 1;
if ex > o, ex, end
end
Si un valor se vuelve mayor que x_max, el número se trata (en MATLAB) como oo,
denotado por inf. Si teclea inf en la ventana de comandos, la respuesta será
ans =
inf
Si teclea x = 1/inf obtendrá

3Nakamura, A.pplied Numerical Methods in C, Prentice-Hall, 1992.


22 Capítulo 1 Fundamentos de MATLAB

ans =
o
Sin embargo, hay casos en los que la respuesta es NaN, lo que significa no es un número.
Por ejemplo, si trata de calcular i * inf, la respuesta en MA TLAB es
ans =
NaN

1.4 FUNCIONES MATEMÁTICAS EN MATLAB


Al igual que otros lenguajes de programación, MATLAB tiene numerosas funciones matemá-
ticas, desde las elementales hasta las de alto nivel. Las funciones elementales pueden agruparse
en tres categorías:

(a) Funciones trigonométricas


(b) Otras funciones elementales
(c) Funciones que realizan tareas

En la tabla 1.3 se muestran las funciones de las primeras dos categorías; las funciones de la
tercera se explican en la sección 1.5.
Las funciones matemáticas en MATLAB presentan dos notables diferencias respecto de
las de otros lenguajes de programación como Fortran o C: (1) las funciones matemáticas
funcionan con variables complejas sin discriminación alguna y (2) las funciones matemá-
ticas funcionan con argumentos vectoriales y matriciales.

Argumentos complejos: Para ilustrar la forma en que las funciones de MATLAB trabajan
con variables imaginarias o complejas, probemos

cos(2 + 3*i)

donde i es el número imaginario unitario, equivalente a la raíz cuadrada de -1. La


respuesta es
ans =
-4.1896 - 9.1092i

En otro ejemplo, consideremos la función arco coseno, que es el inverso de la función


coseno definido por
y= acos(x) = cos- 1(x)
El comando
acos(0.5)

produce
Sección 1.4. Funcio~es matemáticas en MATLAB 23

TABLA 1.3 Funciones matemáticas elementales


Funciones Comentarios
trigonométricas
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x) -rr.12 ~ atan(x) ~ rr.12
atan2(y,x) Igualqueatan(y/x) (veaelmanual)
-x ~ atan(y, x) ~ x
sinh(x)
cosh(x)
tanh(x)
asinh(x)
acosh(x)
atanh(x)
Otras funciones Comentarios
matemáticas elementales
abs(x) Valor absoluto de x
angle(x) Ángulo de fase de un valor complejo:
Si x = real, ángulo = O
Si x = .f-í, ángulo = 7t/2
sqrt (x) Raíz cuadrada de x
real (x) Parte real del valor complejo x
imag(x) Parte imaginaria del valor complejo x
conj (x) Conjugado complejo x
round(x) Redondear al entero más cercano
fix(x) Redondear un valor real hacia cero
floor (x) Redondear hacia --
ceil (x) Redondear x hacia +co
sign(x) +l six>0;-1 six<O
rem(x,y) Residuo al dividir: x - y•fix(x/y)
exp(x) Base exponencial e
log(x) Logaritmo base e
loglO(x) Logaritmo base 1O

ans
1.0472

El argumento x de acos(x) normalmente está limitado al intervalo -1 ~ x ~ 1 (así es como


trabaja la función acosen Fortran). En MATLAB, en cambio, acos acepta cualquier valor en
-oo < x < oo porque los valores de acos(x) no están limitados a valores reales. De hecho, si
probamos
acos(3)
entonces
24 Capítulo 1 Fundamentos de MATLAB

ans
o + 1.7627i

Argumentos de arreglo: La mayor parte de las funciones de MATLAB puede aceptar


vectores y matrices como argumentos. Por ejemplo, si
X=
1 . 2 3
9 8 7

entonces sin (x) producirá

ans
0.8415 0.9093 o. 1411
0.4121 0.9894 0.6570

que es una matriz del mismo tamaño que x. El cálculo realizado equivale a

Listado 1.18
for i=1:2
for j=1:3
x(i,j) = sin(x(i,j))
end
end

Si x es un arreglo de columna o de fila, sin (x) se convierte en un arreglo de columna o de


fila, según sea el caso.

1.5 FUNCIONES QUE REALIZAN TAREAS


Además de las funciones que calculan funciones matemáticas directas y que aparecen en la
tabla 1.3, hay varias funciones que realizan tareas.

Ordenar: La función sor t reordena los elementos de un vector en orden ascendente. Esto
resulta útil en los casos en que datos en un orden aleatorio tienen que reacomodarse en orden
ascendente. El argumento x puede ser un vector de fila, un vector de columna o una matriz. Si
x es una matriz, el reordenamiento se realizará en cada columna. A continuación presentamos
algunos ejemplos:
sort ( (2 1 5))
ans =
1 2 5
sort([2 1,5)')
ans
1
2
5
Sección 1.5. Funciones que realizan tareas 25

sort([9 1 5; 2 8 4))
ans =
2 1 4
9 8 5

Sumatoria: sum ( x) calcula la sumatoria de los elementos de un vector o matriz x. Para


los vectores tanto de fila como de columna, sum calcula el total de los elementos. Si x es una
matriz, se calcula la sumatoria de cada columna y se devuelve un vector de fila formado por
las sumatorias de todas las columnas. A continuación damos unos cuantos ejemplos:

surn ( [2 1 5] )
ans =
8

surn ( [2 1 5] , )
ans =
8

surn ( [2 1 5; 9 8 5] )
ans =
11 9 10

Máximo y mínimo: max (x) encuentra el máximo en el vector x y min (x) encuentra el
mfnimo. El argumento x puede ser un vector de fila o de columna o una matriz. Si x es una
matriz, la respuesta es un vector de fila que contiene el máximo o mínimo de cada columna de
x. (La regla es la misma que para sor t y sum.)

Números aleatorios: Podemos generar números aleatorios con r and. La forma básica de
la función es rand {n), donde n especifica el tamaño de la matriz de números aleatorios que
debe devolverse. Si n = 1, se devuelve un solo número aleatorio; si n > l, se devuelve una
matriz n por n de números aleatorios. Si no se especifica otra cosa, los números aleatorios así
generados están en O ~ x ~ 1. Si se invoca r and varias veces seguidas, se genera una secuencia
de números aleatorios. El generador de números aleatorios puede inicializarse proporcionando
un número que sirva como semilla. La forma básica de la inicialización es

rand('seed', k)

donde k es la semilla. Si se utiliza la misma semilla, la secuencia de números aleatorios es


la misma. Por otro lado, si se desea que la secuencia difiera aleatoriamente cada vez que se
inicie el generador de números aleatorios, se deberá proporcionar una semilla elegida al
azar, que podría ser la hora en segundos o el número que ganó el premio mayor en la lotería
de la semana, aunque no es fácil obtener números verdaderamente aleatorios a partir de
fenómenos naturales o la vida diaria (véase el ejemplo 1.1 ). La semilla debe ser mayor que
la unidad.
26 Capítulo 1 Fundamentos de MATLAB

1.6 CREACIÓN DE UN PROGRAMA EN FORMA DE ARCHIVO M


La ejecución de comandos en una ventana sólo es apropiada si no hay que teclear mucho o si
se desea explorar ideas de forma interactiva. Sin embargo, en los casos en que los comandos
ocupan más de unas cuantas líneas es más conveniente que el usuario escriba un archivo M de
guión o un archivo M de función, porque los archivos M se pueden guardar en disco y pueden
corregirse tantas veces como sea necesario. 4 El archivo M puede incluir cualquier cosa que el
usuario pueda escribir directamente en la ventana de comandos. Se recomienda a los princi-
piantes tratar de crear primero archivos M cortos y luego ejecutarlos.

MAC y Windows: Si desea elaborar un archivo M nuevo en Macintosh o Windows,


haga clic en NEW del menú File (Archivo) de la parte superior de la ventana de comandos;
aparecerá una ventana nueva. Como ejercicio, teclee el contenido del listado 1.1 b, por
ejemplo, y guárdelo como archivo M haciendo clic en SA.VE AS del menú File. El nombre
del archivo puede ser esfera. m. El archivo puede ejecutarse desde la ventana de
comandos tecleando esfera como un comando; incluso puede ejecutarse desde otro
archivo M incluyendo esfera en ese archivo. Otra forma de ejecutar el archivo en
Macintosh es hacer clic en SAVE and GO del menú File. ·

Estación de trabajo Unix: Abra MATLAB desde el directorio de trabajo donde se van a
guardar los archivos M. 5 Abra además un editor desde el mismo directorio. Se puede utilizar
cualquier software de edición, como vi, emacs y jot. Se puede editar un archivo en la ventana
del editor y guardarse sin cerrar la ventana. El nombre de archivo debe tener la extensión .m en
Unix. Cuando esté listo para ejecutar el archivo M que guardó, pase a la ventana de MATLAB
y ejecútelo tecleando el nombre del archivo sin la extensión. Si es necesario invocar comandos
de Unix desde el entorno de MA TLAB, teclee ! seguido del comando de Unix. Ésta es una
forma de abrir un editor como vi o emacs.

Eco: Cuando se ejecuta un guión, lo normal es que los enunciados del archivo M no se
exhiban en la pantalla. Sin embargo, si se activa el eco con la orden echo on, los enunciados
se exhibirán. De este modo, el usuario puede ver cuál parte del archivo M se está ejecutando.
Para desactivar el eco, teclee echo off.

Enunciados de comentario: El signo % en un archivo M indica que los enunciados que


siguen al signo en la misma línea son comentarios y deben ignorarse durante los cálculos. Los
comentarios que se añaden así a los archivos M pueden ayudar a explicar el significado de las
variables y los enunciados.

4
Los archivos M se agrupan en dos categorías: archivos M de guión y archivos M de función. Un guión equivale
a un programa principal en los lenguajes de programación tradicionales, en tanto que una función corresponde a un
subP.rograma, subrutina o función en los lenguajes tradicionales.
5
MATLAB puede abrirse desde cualquier directorio; siR embargo, si se desea tener acceso a los archivos M
definidos por el usuario y a los archivos de datos, es necesario establecer primero los caminos apropiados.
Sección 1.6. Creación de un programa en forma de archivo M 27

Ejemplo 1.1
Los números aleatorios pueden servir para crear juegos. El enunciado x=r and ( 1)
genera un número aleatorio entre O y 1 y asigna ese número a x. Consideremos 13
cartas de espadas que se barajaron bien. La probabilidad de escoger una carta en
particular de la pila es de 1/13. Escriba un programa que simule la acción de escoger
una carta de espadas con un número aleatorio. El juego debe continuarse devolviendo
la tarjeta a la pila y barajándola otra vez después de cada juego.

Solución
Puesto que la probabilidad de que un número aleatorio esté en un intervalo de tamaño
dx es igual a dx, supondremos que si el número aleatorio está en (n - 1)/13 < x < n/13
entonces se sacará la n-ésima carta; n puede encontrarse multiplicando x por 13 y
redondeando al entero superior más cercano.
Desde luego, antes de utilizar r and es preciso inicializar la función con una
semilla. Si utilizamos la misma semilla, se generará una secuencia idéntica de
números aleatorios. Una forma de escoger una semilla es aprovechar el comando
clock. Por ejemplo, c=clock asigna a e un vector de fila de longitud 6. El
producto de todos los números desde el segundo hasta el último, es decir,
e ( 2) *e ( 3) *e ( 4) *e ( s) *e ( 6 ) , tiene aproximadamente 3e+ 7 combinaciones y
cambia cada segundo durante todo el año.
El siguiente archivo M determina una carta cada vez que se ejecuta. El juego se
repite respondiendo a la solicitud con r y termina si se teclea cualquier letra distinta
de r. Este archivo M se guarda con el nombre Lis t 1_ 19 . m, así que puede ejecutarse
desde la ventana de comandos tecleando Lis t 1 19.

Listado 1.19
c=clock;
k=c(2)*c(3)*c(4)*c(S)*c(6);
rand('seed', k)
far k=1:20
n=ceil(l3*rand(l));
fprintf('Número de carta sacada: %3.0f\n',
disp(' ')
disp('Teclee r y pulse Return para repetir')
r = input('o cualquier otra letra para terminar ','s');
if r -= 'r', break, end
end

Una característica interesante y útil de los archivos M es que pueden llamar a otros
archivos M. El archivo M que llama es un archivo M padre, en tanto que los archivos M
llamados son archivos M hijos. Esto implica que un guión puede dividirse en un archivo M padre
28 Capítulo 1 Fundamentos de MATLAB

y varios archivos M hijos. Estos últimos son similares a los archivos M de función que se
explican en la siguiente sección, con la diferencia de que los archivos M padre e hijos pueden
ver todas las variables de todos ellos, en tanto que los archivos M de función sólo pueden ver
las variables que se proporcionan mediante argumentos.
1.7 CÓMO ESCRIBIR FUNCIONES DE USUARIO PROPIAS
Las funciones en MATLAB, que se guardan como archivos M independientes, equivalen a las
subrutinas y funciones de otros lenguajes.
Una función que devuelve una sola variable: Consideremos un archivo M de función
para la siguiente ecuación:
f(x) • 2x3 + 7{l + 3x- l (1.7.1)
;i.-3x + se-;t
Suponiendo que el archivo M se guarda como deme f _. m, su guión sería el siguiente
Listado 1.20
function y = demof (x)
y= (2*x.A3+7*x.A2+3•x-1) ./(x.A2-3*x+5*exp(-x));

Observe que el nombre del archivo M es idéntico al nombre de la función, que aparece a la
derecha del signo de igual. En el archivo M se utilizan los operadores aritméticos de arreglos,
así que el argumento x puede ser un escalar, un vector o una matriz. Una vez que se guarda
demof_. m como archivo M, se puede utilizar desde la ventana de comandos o en otro archivo
M. El comando
y = demof_ (3)

produce
y=
502 .1384

Si el argumento es una matriz, por ejemplo,


demof_( [3, 1; O, - 1])

El resultado también es una matriz:


ans
502.1384 -68.4920
-0.2000 0.0568

Función que devuelve múltiples variables: Una función puede devolver más de una
variable. Supongamos una función que evalúa la media y la desviación estándar de una serie
de datos. Para devolver las dos variables utiliza1_llos un vector en el miembro izquierdo del
enunciado de la función; por ejemplo,
Sección 1.7. Cómo escribir funciones de usuario propias 29

Listado 1.21
function [media, dvstd] = media_ds(x)
n=length (x) ;
media= sum(x)/n;
dvstd = sqrt(sum(x.A2)/n - media.A2);
Para utilizar esta función, el miembro derecho del enunciado de llamada también debe ser un
vector. El guión anterior debe guardarse como media_ds . m. Entonces,
X = [l 5 3 4 6 5 8 9 2 4) ¡
[m, d] = media_ds(x)
produce
m
4. 7000
s =
2.3685

Función que utiliza otra función: El argumento de una función puede ser el nombre de
otra función. Por ejemplo, supongamos una función que evalúa la media ponderada de una
función en tres puntos como
r /(a)+ 2/(b) +/(e)
¡av= (1.7.2)
4
donde f (x) es la función que se nombrará en el argumento. El siguiente guión ilustra una
función f_av. mque calcula la ecuación 1.7.2:
Listado 1.22
function mp = f av(nombre f, a, b, e)
mp = (feval(nombre f,a) +-2*feval(nombre f,b) ...
- + feval(nombre_f)c))/4;
En el guión anterior, nombre f (una variable de cadena) es el nombre de la función/(x). Si
f(x) es la función seno, nombre f será 'sin•. feval (nombre f, x) es un comando de
MA TLAB que evalúa la función ifamada nombre_ f para el argumento x. Por ejemplo, y =
feval ('sin' , x) equivale a y=sin (x).

Ejemplo 1.2
Evalúe la ecuación 1.7.2 para la función definida por la ecuación 1. 7.1 con a = l, b = 2 y
e= 3. La ecuación 1. 7.1 se programó como demo f _. my se muestra en el listado 1.19.

Solución
Suponemos que f_av. m (listado 1.22) se guardó como archivo M. Entonces,
el comando
30 Capítulo 1 Fundamentos de MATLAB

A= f_av{'demof_', 1, 2, 3)

produce
89.8976

El número de argumentos de entrada y de salida de feval debe coincidir con el formato


de la función nombre_f. Por ejemplo, si la función nombre_f requiere cuatro variables de
entrada y devuelve tres variables de salida, el enunciado para llamar a feval sería
[p, q, s] = feval{nombre_f, u, v, w, z)

Depuración de archivos M de función: La depuración de archivos M de función es más


dificil que la de archivos M de guión. Una de las causas es que no es posible ver los valores de
las variables tecleando los nombres de las variables a menos que se utilicen órdenes de depu-
ración. El método más básico pero eficaz para crear un archivo M de función consiste en
convertir en comentario el enunciado de la función en la primera línea colocando % antes de
la palabra function y probar el archivo M como guión. Cuando haya depurado exhaustiva-
mente el archivo M, reincorpore el enunciado de la función.
El empleo de comandos de depuración sólo se recomienda a usuarios avanzados de
MATLAB.

1.8 CÓMO GUARDAR Y CARGAR DATOS


Guardar y cargar: Si utiliza save sólo, así:
save

todas las variables se guardarán en el archivo por omisión ma t lab . ma t . La orden load es el
inverso de save y recupera todas las variables guardadas por save.
Se puede especificar el nombre de archivo colocándolo después de save; por ejemplo,
save nombre archivo

guarda todas las variables en el archivo llamado nombre_archivo. ma t. Cuando quiera


recuperar las variables, escriba
load nombre archivo

Si sólo desea guardar ciertas variables, escriba sus nombres después de nombre archivo;
por ejemplo, -
save nombre archivo a b c

En este ejemplo, a, b y e se guardan en el archivo llamado nombre_archivo. No separe


nombre_archivo y las variables con una coma. Todas las variables se guardan en formato
binario de doble precisión. Cuando quiera cargar los datos contenidos en nombre archi -
vo . ma t, teclee -
Sección 1.8. Cómo guardar y cargar datos 31

load nombre archivo


'
sin nombres de variables; a continuación se recuperarán a, by c.
Guardar y cargar en formato ~SCII: Se puede utilizar save para escribir datos en
formato ASCII. Los comandos load y save con la opción ASCII son importantes porque
permiten exportar datos de MATLAB e importarlos en MATLAB.
Si desea utilizar el formato ASCII, agregue - ascii o /ascii después de los nombres de
las variables; por ejemplo,
save datos.tmp x -ascii

guarda la variable x en ASCII de 8 dígitos en el archivo llamado da tos . tmp. El comando


save puede guardar más de una variable; por ejemplo,

X = (1, 2, 3, 4)
y= [-1, -2, -3)'
save datl.tmp x y -ascii
Si abre el archivo M datl. tmp, se verá así:
1.0000000e+OO 2.0000000e+OO 3.0000000e+OO 4.0000000e+OO
-1.0000000e+OO
-2.0000000e+OO
-3.0000000e+OO

El comando load lee un archivo de datos y lo guarda en una variable, pero la carga de un
archivo en formato ASCII no es exactamente el inverso de save en formato ASCII. La razón
es que si bien save en ASCII puede escribir múltiples variables, load lee todo el archivo de
datos y lo coloca en una variable. Además, el nombre del archivo se convierte en el nombre
de la variable. Por ejemplo, cargamos un archivo llamado y_da t . e con
load y_dat.e

el contenido se carga en la variable llamada y_da t sea cual sea la extensión.


Por tanto, el archivo de datos y_da t debe estar sólo en uno de los siguientes formatos de datos:

(1) un solo número


(2) un vector de fila
(3) un vector de columna
(4) una matriz

Si tiene necesidad de cargar múltiples variables, cada una deberá prepararse en un archivo de
datos ASCII individual.
Los archivos de datos preparados con Fortran o C en formato ASCII (o de texto) se pueden
cargar con load siempre que la estructura de datos tenga una de las cuatro formas indicadas.
Si desea conocer métodos más avanzados para exportar e importar archivos de datos, consulte
la guia de usuario de MATLAB.
32 Capítulo 1 Fundamentos de MATLAB

1.9 OBTENCIÓN DE UNA COPIA IMPRESA


Algo que muchos usuarios desean saber es cómo preparar copias en papel de lo que MA TLAB
exhibe en la pantalla. Si desea producir un archivo que registre las entradas del teclado y las
salidas de MATLAB, utilice diary, que presentamos en la sección 1.1. Si utiliza diary sin
un nombre de archivo especifico, el archivo tendrá el nombre diary en el directorio. El
archivo puede imprimirse como archivo de texto. No pueden capturarse figuras gráficas en
diary.

PROBLEMAS
Al resolver los problemas que siguen, siempre prepare sus respuestas con MATLAB.
(1.1) Ejecute los siguientes enunciados:

a = [1 2 3; 4 5 6]'
b = [9;7;5;3;1)
e= b(2:4)
d = b(4:-1:1)
e= sort(b)
f=[3,b')

(1.2) Cree un archivo M de función, fun_es ( x) , que calcule la siguiente función:

y• 0.5?13 - x2sen x
El argumento debe aceptar tanto un escalar como un vector. Pruebe su función tecleando en
MATLAB
fun es(3)
fun=es ( [l 2 3))

(1.3) Repita la tarea del problema 1.2 para la función:

y•sen(x)log(l +x)-x2,x>O
Denote la función por fun_lg (x) .
(1.4) (a) Escriba un archivo M de función que calcule la solución de

ai+bx+c•O
Su forma general es r _ cuad (a, b, e) donde a, b y e pueden ser vectores. (b) Pruebe la
funcióncona=3, b=l, C'""l, r cuad(a,b,c).(c)Pruebelafuncióncona=[3 1 2],
b=[l -4 9), c=[l 3 -5]. -
(l.s) Se supone que el lector ya creó f un es y f UQ 1 g de los problemas 1.2 y 1.3. Ahora, cree una
función f_es (x) que: - -
Problemas 33

• pregunte el nombre de la función que se desea evaluar,


• permita al usuario teclear el nombre de la función,
• evalúe la función con fev~l y devuelva los valores funcionales y
• se detenga si la función indicada por el usuario no es f un_es ni f un_ l g.
Pruebe su f_es calculando fun_es (3) y fun_lg (3).
(1.6) Dos variables x y y se guardan en el archivo sal_ase. m:
X= 1:5
y= [-1:-1:-5] I

save sal_asc x y -ascii


¿Cómo se verá el archivo cuando se abra como archivo M? ¿Es posible leer tanto x como y del
mismo archivo? Si x y y tienen que guardarse en formato ASCII y también tienen que leerse
posteriormente, ¿qué debe hacerse?
(1.7) Reescriba el siguiente guión sin utilizar break:
for p=7: 8
for q = 3:5
for r = 1:2
fprintf(' %3.0f, %3.0f, %3.0f\n', p, q, r)
end
if q 4, break; end
end
end
(1.8) Reescriba el guión del problema 1.7 utilizando whi le en lugar de for.
(1.9) Se tiene un vector:
A = [l 2 3 4 5 6 7 8 9 O]

Escriba un guión que imprima el contenido del vector empleando el comando fpr intf en un
ciclo tal que el aspecto de la salida sea:
El vector A es
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, O]
Terminó la impresión.
En la salida, coloque una coma y dos espacios en blanco entre cada dos números. Los elementos
de A deberán imprimirse como números, no como cadenas.
(1.10) Escriba un guión para una función de dado que pida al jugador teclear Oo l. Si el jugador teclea
l, el software obtendrá diez números al azar entre 1 y 6 y los imprimirá en forma de vector de
fila. Si la entrada del jugador es O, el programa se detendrá. Obtenga un número aleatorio que
sirva como semilla aprovechando clock como sigue:
e = clock;
nurnsem = c(l)*c(2)*c(3)*c(4)*c(5)*c(6);
34 Capítulo 1 Fundamentos de MATLAB

(1.11) Cree un archivo M de función llamado fun_xa que evalúe la siguiente serie:
x2 x3 :x!'
f(x) = 1 + x + 2 ! + 3 ! + · · +n!

Los valores de x y n se pasan a la función mediante argumentos. Pruebe la función comparando


el resultado con cálculos manuales para x ,.. 1 y n .. 4. La serie en cuestión es una expansión
Mclaurin truncada de ,f y converge para -oo < x < oo. Sabiendo esto, pruebe su función con
valores de x selectos como x ... 0.5, 3.0 y-1, con n = 1, 2, 3, 5, 1O y compare el resultado con tf.
(1.12) Cree un archivo M de función llamado fun _ xb que evalúe la siguiente serie:
2 3 n
f(x) = x - ~ + !._ - •. + (-1 )n + 1 !._
2 3 n
Los valores de x y n se pasan a la función mediante argumentos. Pruebe la función comparando
el resultado con cálculos manuales para x = 1 y n = 4. La serie en cuestión es una expansión
Mclaurin truncada de log( 1+x) y converge para - 1 < x < 1. Sabiendo esto, pruebe su función con
valores de x selectos como x = -0.5, y 0.5, con n = 1, 2, 3, 5, 10, 20 50 y compare el resultado
con log(l+x). (La convergencia se hace progresivamente más difícil al acercarsex a-1 o l.)
Capítulo 2

Gráficas con MATLAB

Como la mayor parte de las ecuaciones matemáticas expresa relaciones complicadas en una,
dos, tres o más dimensiones, tratar de entenderlas sin gráficas es casi lo mismo que tener los
ojos vendados. El empleo de gráficas es importante desde la educación primaria hasta la
superior, así como para ingenieros y científicos profesionales por la misma razón. En las
presentaciones profesionales, casi todos los análisis matemáticos, científicos y de ingeniería se
presentan con gráficas.
Durante las últimas tres décadas, en las que Fortran dominó entre los lenguajes de
computación, las gráficas estuvieron desafortunadamente muy desligadas de los cálculos. Por
ello, muchos usuarios de Fortran se vieron obligados a leer los resultados calculados en forma
de listados de números.
Las gráficas son ahora una parte natural del entorno de computación con MA TLAB, y la
graficación de los resultados de los cálculos puede efectuarse con algunos comandos. Se
recomienda a los lectores graficar las funciones matemáticas con las que se tope, así como los
resultados de análisis. Tratar de entender las ecuaciones matemáticas con gráficas es una forma
agradable y muy eficiente de aprender matemáticas. Este capítulo se escribió con la intención
de ayudar al lector a hacer precisamente esto.
Antes de desarrollar el capítulo, el lector debe tomar nota de lo siguiente. Algunos
comandos de gráficas siguen en vigor incluso después de haber terminado de graficar y pueden
interferir trabajos posteriores. Es posible que el comportamiento de MATLAB se haga
impredecible después de utilizarse algunos comandos como hold on o subplot, o que se
interrumpa abruptamente la ejecución de un guión. Se recomienda a los lectores borrar las
variables y las ventanas de gráficas antes de iniciar cualquier trabajo de graficación. Si aun así
MATLAB se comporta de forma extraña, salga por completo de MATLAB y ábralo otra vez.

2.1 GRAFICACIÓN SIMPLE


Graficar: Suponga que desea graficar un conjunto de puntos de datos, (x;, y;), i = 1, 2, ...n.
Es necesario preparar x y y en forma de arreglo idéntica, es decir, convertirlos en arreglos
de fila o de columna de la misma longitud. Los datos se grafican con plot. Por ejemplo, y=
sen(x)exp(--0.4x), O~ x ~ 10, se grafica con el listado 2.1.

35
36 Capítulo 2 Gráficas con MATLAB

>-

0.1

-0.1

-0.20 5 8 10
X

Figura 2.1 Graficación con el listado 2.1 o 2.2

0.8

0.8

o.•
0.2

E
.5 -0.2

-0.8

-o.a
- 1~--='":"-:"-:-~,--~-~...-,L--'-~'--~---'
~ ~ ~ - ~ ~ ~ M M
Re(z)
Figura 2.2 Graficación con el listado 2.3

Listado 2.1
X= 0:0.05:10;
y= sin(x) .*exp(-0.4*x);
plot(x,y)
xlabel ( 'x'); ylabel ('y')

También se pueden utilizar vectores de columna en los argumentos de plot, como se muestra
en el siguiente guión:
Sección 2.1. Graficación simple 37

Listado 2.2
X= (0:0.05:10) i 1

y= sin(x) .*exp(-0.4*x);
plot(x,y)
xlabel('x'); ylabel('y')

Los dos guiones anteriores producen la misma gráfica, que se muestra en la figura 2.1. Los
rótulos de los ejes se imprimen mediante los comandos xlabel y ylabel, que se explicarán
con mayor detalle posteriormente. La figura 2.2 se grafica con el listado 2.3 que conecta una
serie de puntos en un plano complejo.

Listado 2.3
p=O: O.OS: B*pi;
z=(cos(p) + i*sin(2*p)) .*exp(-0.0S*p) + O.Ol*p;
plot(real(z), imag(z))
xlabel('Re(z) '); ylabel('Im(z) ')
0.6.-------.---,---.-------.---,---,-------.---,---,------,
+
+ +
o.s

0.4 +

+
0.3
+
>o 0.2

0.1 +

+ + + + +
o +
+ + +
+
+
-0.1 + +
+ + +
-0.20 2 3 4 s 6 7 8 9 10
X

Figura 2.3 Curva graficada sólo con marcas (listado 2.4)

Graflcación únicamente con marcas: Los datos pueden graficarse sólo con marcas sin
estar conectados por líneas. Se dispone de cinco tipos de marcas o letras:

Tipo de marca Símbolo


Punto
Más +
Estrella •
Círculo o
Marcax X
38 Capítulo 2 Gráficas con MATLAB

Si desea graficar con un solo tipo de marca, coloque el símbolo de la marca como una cadena
después de las coordenadas en los argumentos de plot. La gráfica producida por el listado 2.4
se muestra en la figura 2.3.
Listado 2.4
X= (0:0.4:10)' i
y=sin(x) .*exp(-0.4*x);
plot(x,"y,'+')
xlabel ( 'x'); ylabel ('y')

Si desea graficar una función tanto con líneas como con una marca, grafique dos veces: la
primera con líneas y la segunda sólo con marcas. Para graficar de este modo, el último
enunciado del listado 2.4 se cambia a p 1 o t ( x, y, x, y , ' + • ) • El comando tex t sirve para
graficar con cualquier marca o letra; sin embargo, la posición de la marca puede estar
desplazada un poco de la posición real de punto de datos.
Tipos y colores de lineas: Se dispone de cuatro tipos de líneas:
Tipo de línea Símbolo
continua
guiones
punteada
guiones y puntos

El tipo de línea por omisión es el continuo. Si desea graficar con un tipo de línea en particular,
especifique la marca de línea después de las coordenadas; por ejemplo,
plot(x,y,'--')

Se dispone de los siguientes colores:

Color de línea Símbolo


rojo r
amarillo y
magenta m
turquesa c
verde g
azul b
blanco w
negro k

Utilice el símbolo del color igual que los tipos de línea en el argumento de plot; por
ejemplo,
plot(x,y,'g')
Sección 2.1. Graficación simple 39

También es posible combinar marcas y colores:

plot (x, y, '+g')

grafica los datos con marcas + de color verde.

Graflcación de funciones con fplot: Otra forma de graficar funciones individuales es


con fplot ('nombre f, [xmin, xmax]), donde nombre fes el nombre de la función
o del archivo M de funCión que se desea graficar y xmin y xm~x son los limites de la gráfica.
El máximo y el minimo del eje y está determinado por el máximo y el minimo reales de la
función; sin embargo, es posible ajustar los límites de la gráfica con axis, que se explicará en
breve.

Borrado de gráficas: e 1 f borra todo lo que haya en la ventana de gráficos, mientras que
cla borra las curvas graficadas y redibuja los ejes.

Funciones lmplicitas: Si una función está en forma implícita, como por ejemplo

y3 + exp(y) ... tanh(x)


no se puede expresar como x en función de y ni como y en función de x. No obstante, la
curva se puede graficar utilizando con tour. En la sección 2.3 detallaremos este proce-
dimiento.

X
• 10

Fl1ura 2.4 Gráfica con axis (' square')

Eje: El mínimo y el máximo de las coordenadas, las marcas de escala y los valores de las
coordenadas en las marcas de escala se determinan automáticamente. Sin embargo, es posible
40 Capítulo 2 Gráficas con MATLAB

modificar la forma del marco y el mínimo y el máximo de las coordenadas con la orden axis.
Se puede redibujar una figura en forma cuadrada con

axis (' square')

(véase la figura 2.4). Los ejes de coordenadas y las marcas de escala pueden omitirse con

axis ('off')

Este efecto se cancela con axis (' on').


El máximo y el mínimo de las coordenadas en la gráfica se pueden especificar con

axis([x_rnin, x_rnax, y_rnin, y_rnax])

Las líneas que se salgan de los límites se recortarán. Este comando se utiliza después de plot
para poder modificar el área de visualización tantas veces como se desee. Se sugiere al lector
anexar axis ( [ - 2 , 6 , - o . 7 , o . 7 l ) al listado 2.4 para ver cómo axis limita las fronteras
de la figura.

Retícula: Se puede agregar una retícula a la gráfica con gr id on. Por otro lado, gr id
off elimina la retícula. El empleo de gr id por sí solo activa y desactiva la retícula alternada-
mente. El siguiente guión es un ejemplo del empleo de gr id on:

Listado2.5
X= (0:0.2:10)' ¡
y=sin(x) .*exp(-0.4*x);
plot(x,y)
grid on
xlabel ( 'x'), ylabel ('y')

(Véase la figura 2.5 producida por el listado 2.5.)

Gráficas polares: Podemos graficar una función en coordenadas polares con polar. La
figura 2.6 se grafica con el listado 2.6.

Listado 2.6
t =O: .OS:pi+.01;
y= sin(3*t) .*exp(-0.3*t);
polar(t,y)
title('Gráfica polar')
gr id

Gráficas logarítmicas y semilogarítmicas: Las funciones pueden graficarse en una escala


log-log con loglog. (Véase el listado 2.7 y la figura 2.7.)
Sección 2.1. Graficación simple 41

2
X
• ' 10

Figura 2.S Figura con retícula (listado 2.5)

Gr6flc:ll polar
'°1

Figura 2.6 Gráfica polar (listado 2.6)

Listado 2.7
t = .1: .1:3;
x = exp (t);
y= exp(t.*sinh(t));
loglog(x,y)
gr id
xlabel ( 'x') ;ylabel ('y')

El listado 2.8 produce una gráfica semilogarítmica con y en la escala logarítmica.


42 Capítulo 2 Gráficas con MATLAB

Figura 2.7 Gráfica logarítmica (listado 2.7)

Listado 2.8
t = .1: .1:3;
semilogy(t,exp(t.*t))
gr id
xlabel('t'); ylabel('exp(t.*t)');

De forma similar, el listado 2.9 produce una gráfica semilogaritmica con x en la escala logarítmica.
Listado 2.9
t = .1: .1:3;
semilogx(t,exp(t.*t))
gr id
xlabel('t'); ylabel('exp(t.*t)');

Múltiples curvas: Si quiere graficar dos o más curvas con una sola orden plot, escriba
todos los conjuntos de coordenadas repetidamente en la orden plot:
Listado 2.10
X= 0:0.05:5;
y = sin(x);
z = cos(x);
plot(x,y,x,z)

Se escogerán automáticamente tipos o colores de línea distintos para cada curva. No obstante
puede especificarse el color o el tipo de linea, o la 111arca, después de cada par de coordenadas;
por ejemplo,
Sección 2.1. Graficación simple 43

plot(x,y,'- - ', x,z,'*')


plot(x,y,':', x,z,'*g'")
plot(x,y,'r', x,z,'y')

Los dos listados siguientes ilustran otra forma de graficar múltiples curvas con un solo
comando plot:

Listado 2.11
X= 0:0.05:5;
y ( 1, : ) = sin (x) ;
y(2, :) = cos(x);
plot(x,y)

Listado 2.12
x = (o:o , o5:5) ';
y ( : , 1) = sin (x) ;
y ( : , 2) = COS (X) ¡
plot(x,y)

Retención: Hasta aquí hemos graficado todas las curvas en una sola operación con un solo
comando plot. Sin embargo, a menudo resulta deseable agregar una curva a una gráfica que
ya se trazó. Esta graficación adicional puede realizarse con el comando hold on (véase la
figura 2.8).

Listado 2.13
X= 0:0.05:5;
y = sin (x);
plot(x,y);
hold on
z = cos(x);
plot (x, z, '--')
xlabel('x'); ylabel('y(-), z(--) ');

Una vez emitido el comando hold on, la gráfica permanece en la pantalla incluso si se
ejecuta otro guión; por tanto, lo prudente es colocar un comando hold off tanto al principio
como al final del guión; por ejemplo,

Listado 2.14
clear; clf; hold off
X= O: 0.05: 5;
y= sin(x);
plot(x,y)
hold on
z = cos(x)
plot(x,z)
hold off
44 Capítulo 2 Gráficas con MATLAB

1 --'
o.a ''
'
o.e ''
''
0.4
''
>- 02 ' '
' '
o '
' '
'
-02
'
' '
-0.4 '' '
-o.e
'' ,,'
''
-o.a '
'' ,,
·1o o.a 1.5 2.5 3.5 4 4.5 5
X
Figura 2.8 Dos curvas graficadas con
el comando hold on (listado 2.13)

Cuando se grafican varias curvas con hold on, es recomendable especificar mínimos y
máximos de las coordenadas en el dominio gráfico con el comando axis; de lo contrario, los
límites se determinarán por omisión con base en la primera curva, cosa que podría causar
recortes de las demás curvas.

Relación de presión, p(estancamlento)/p{estátlca)

'
i .e

i 1.5
1.4

12

1.1

\ ~ ~ ~ U M M ~ M ~
M, número de Mach

Figura 2.9 Aplicación del comando ti tle (listado 2.ISA)

El comando hold on también resulta muy importante cuando se está preparando una
gráfica que tarda mucho en dibujarse, por la siguiente razón: los comandos para cambiar
parámetros de las figuras, como los ejes, el map~ de color, los ángulos de perspectiva, el
eje de color y otros, se pueden modificar después de haber graficado una figura, pero cada
Sección 2.1. Graficación simple 45

ez que se emita un comando nuevo se re'dibujará la figura completa. Para ahorrar tiempo,
emita todos los comandos de parámetros antes de graficar, retenga la imagen con hold on, y
luego utilice plot.

Títulos y leyendas: Podemos agregar leyendas y títulos a las coordenadas de la gráfica


mediante xlabel, ylabel y ti tle. El siguiente guión utiliza los tres comandos:

Listado 2.lSA
M = [O: 0.01: 1] '; k=l.4;
pO_entre_p = (1 + (k-1)/2+M .• 2) .• (k/k-1));
plot(M,pO_entre_p)
xlabel('M, número de Mach')
ylabel ( 'pO/p')
title('Relaci6n de presión, p(estancamiento)/p(estática) ')

La figura 2. 9 ilustra la gráfica producida con el listado 2.15A.


El argumento de xlabel, ylabel y ti tle puede incluir más de una cadena, pero debe
escribirse en forma de vector de fila; por ejemplo,
'
title(['cadenal', 'cadena2', ... ] )

Conversión de números a cadenas: Al escribir títulos y leyendas, podríamos querer


incluir valores numéricos en el texto. Para ello, podemos utilizar los comandos num2str y
in t2 s tr, que significan número a cadena y entero a cadena, respectivamente; por ejemplo,

cad = num2str(pi)

define cad como una cadena que contiene 3 .142. Con int2str, un valor real se convierte
en una cadena que contiene sólo la parte entera del número; por ejemplo, con

cad = int2str(pi)

cad se convierte en una variable de cadena que contiene 3. Una vez que un número se ha
convertido en cadena, se puede incluir en los argumentos de ti tle, xlabel y ylabel, o
en text; por ejemplo,

title([' Caja:' cad, 'cm'])

Texto en la gráfica: Podemos escribir texto en una gráfica contexto gtext. La primera
orden requiere tres parámetros en su argumento, a saber: tex t (x, y , ' cadena' ) . Los dos
primeros son valoresx y y de las coordenadas absolutas del punto en el que comienza la cadena;
el tercero es la cadena que se imprimirá, misma que puede ser una variable de cadena
predefinida o un texto encerrado en apóstrofos. Un ejemplo de esta orden es:

text(2, 4, '+++material')
46 Capítulo 2 Gráficas con MATLAB

Relación de presión, p(estancamlento}/p(estátlca)

1.8

1.7

1.8
Compresible
Q. 1.5

~1.4
,,
1.3

1.2 ,,

1.1 Incompresible
1o 02 o.4 o.e o.e
M, número de Mach
Figura 2.10 Gráfica con textos (listado 2.15B)

La orden anterior exhibe +++ material a partir de (2,4) en el sistema de coordenadas


vigente. -
El listado 2.1 SB ilustra el empleo de text, y su resultado se ilustra en la figura 2.1 O.

Listado 2.15B
% Relación de presión vs. número de Mach
clear; clf; hold off;
M = (0:0.01:1)';
k=l. 4;
pO_entre_p = (1 + (k-1) /2+M. • 2). • (k/ (k-1));
hold on
axis('square'); % hace que la gráfica sea cuadrada
plot(M,pO_entre_p)
xlabel('M, número de Mach')
ylabel ( 'pO/p')
title('Relación de presión, p(estancamiento)/p(estática)')
text(0.45, 1.55, 'Compresible')
Mb = [O: 0.01: 0.7) ';
pO entre pb = 1 + k/2*Mb.·2;
plot(Mb,pO entre pb, '--')
text(0.5, l.1, 'Incompresible')

Si es necesario determinar manualmente la ubicación de un texto, gtext ('cadena' )


resulta de utilidad. Cuando se ejecuta este comando , el programa espera hasta que se hace clic
con el ratón o se pulsa una tecla con el apuntador del ratón dentro de la ventana gráfica. El texto
se escribirá en el lugar señalado por el ratón o por el cursor.
Sección 2.1. Graficación simple 47

SUBGRÁFICA 2,2, 1 SUBGRÁFICA 2,2,2


40

o.s 20

~
"i
o Jo
...:

~.5 -20

-1 -400
o 10 20 30 10 20 30
t t
SUBGRÁFICA 2,2,3 SUBGRÁFICA 2,2,4

800
~
~20
e eoo
i
:.: 10
:i
t 400
200

10 20 30 10 20 30

' FIKura 2.11 Ilustración de subgráficas (listado 2.16)

El comando text funciona también en ejes tridimensionales, pero gtext sólo lo hace en
ejes bidimensionales.
Podemos cambiar el color y el tipo de letra (fuente) de un texto de la gráfica. Por ejemplo,
text(0.3,0.2, 'cadena', 'FontSize', (18), 'Color', 'r')

imprimirá cadena en rojo con una fuente de 18 puntos. Si desea cambiar el color por omisión, escriba:
set(gcf,'DefaultTextColor' ,'yellow')

A partir de ese momento los textos se exhibirán en color amarillo. El color del texto puede
elegirse entre red (rojo), yellow (amarillo), green (verde), cyan (turquesa), blue (azul) y
magenta, los cuales pueden abreviarse como 'r', 'y', 'g', 'c', 'b' y 'm', respectivamente.
Podemos cambiar el color de otros textos de forma similar cuantas veces sea necesario. La
disponibilidad de tamaños de fuentes varía dependiendo de la edición de MATLAB.
Los símbolos griegos pueden introducirse también con text; por ejemplo,
text(2,0, 'abcdefg .. ', 'FontName' ,'symbol')

exhibirá cx.~x~ecpy ... Los especificadores 'FontName' y 'symbol' de los argumentos con-
vienen las letras alfabéticas a letras griegas. La conversión de letras alfabéticas a letras griegas
y símbolos se muestra en la tabla 2.1.
48 Capítulo 2 Gráficas con MATLAB

TABLA 2.1 Conversión de letras alfabéticas a letras griegas y símbolos

a a q e
b p r p
e X s o
d r> t T
e e u u
f 4> IV m
g y w (J)

h l'I X
i
j
1
<p
z
D
"'
~
!::.
k IC G r
1 l.. s I:
m µ w n
n V X 'I'
o o $ 3
p 7t ? 'V

El tamaño de la fuente de los valores correspondientes a las marcas de escala de los ejes
se puede modificar con set; por ejemplo,

set(gca, 'FontSize', [18])

cambia la fuente del eje a 18 puntos. Si se coloca texto en un lugar incorrecto, no hay forma de
borrarlo. La única forma de corregir este error es redibujar toda la figura después de corregir
el guión.

Figura: Es posible abrir múltiples ventanas de gráficos con figure. Si sólo se utiliza una
ventana, no hay necesidad de usar este comando, pero si se requieren más ventanas de gráficos
se pueden abrir con ella. Si es necesario reactivar una ventana gráfica previamente abierta,
figure (n) reactivará la n-ésima ventana, donde n es el número secuencial de figura que
aparece en la parte superior de la ventana de gráficos. Las propiedades de las figuras, como su
tamaño, ubicación, mapa de color asignado, etc., pueden modificarse.

Subgráftcas: Con subplot podemos graficar m por n gráficas en una sola figura; la
sintaxis es:

subplot(m,n,k)

donde m, n y k son enteros. Aquí, el par de m y n se refiere a un arreglo de m por n gráficas, y


k es el número secuencial de la gráfica. Por ejemplo, si utilizamos plot después de sub-
P 1 o t ( 3 , 2 , 1 ) , trazaremos la primera gráfica del grupo de 3 por 2 gráficas. El siguiente guión
traza cuatro gráficas, como se ilustra en la figura 2.) 1:
Sección 2.1. Graficación simple 49

Listado 2.16
clear;clf
t=O: . 3: 30;
subplot(2,2,1), plot(t,sin(t)), title('SUBGRÁFICA 2,2,1')
xlabel(~t'); ylabel('sin(t) ')
subplot(2,2,2), plot(t,t.*sin(t)), title('SUBGRÁFICA 2,2,2')
xlabel('t'); ylabel('t.*sin(t) ')
subplot(2,2,3), plot(t,t.*sin(t) .A2), title('SUBGRÁFICA 2,2,3')
xlabel('t'); ylabel('t.•sin(t) .A2')
subplot(2,2,4), plot(t,t.A2.*sin(t) .A2), title('SUBGRÁFICA 2,2,4' )
xlabel (' t') ; ylabel ('t. A2. •sin ( t) . A2')
Podemos trazar una pila vertical de dos gráficas con
subplot(2,l,l), plot( ..
subplot(2,l,2), plot( ..
De forma similar, trazamos una fila de dos gráficas con
subplot(l,2,1), plot(
subplot(l,2,2), plot( ..

/
¡

y
X

Figura 2.12 Ilustración de gráfica 3D (listado 2.17)

Ejes: Para los usuarios avanzados de MATLAB puede resultar interesante el comando
axes, que sirve para trazar múltiples gráficas en una ventana de figura, al igual que con
50 Capítulo 2 Gráficas con MATLAB

subplot. Sin embargo, axes ofrece más libertad con respecto a las posiciones y tamaños de
las gráficas. En el apéndice E se dan más detalles sobre axes.

Versión tridimensional de una gráfica: plot3 es la versión tridimensional de plot.


Todas las reglas y comandos que ya explicamos para plot se aplican a plot3. En la figura
2.12 se grafica el movimiento espiral de una partícula desde el punto A hasta el B utilizando
plot3. El ángulo de perspectiva se puede modificar con view, como se explica en la sección
2.6. También puede utilizarse el comando axis

axis([x_min, x_max, y_min, y_max, z_min, z_max])

para definir las fronteras del espacio tridimensional

Listado 2.17
clear, clf
t=0:0.1:20;
r= exp(-0.2*t);
th=pi*t*0.5;
z=t;
x=r.*cos(th);
y=r.*sin(th);
plot3(x,y,z)
hold on
plot3( [1,1), [-0,5,0], [0,0))
text(l,-0.7,0, 'A')
n=length (x) ;
text (x(n), y (n), z (n) +2, 'B')
xlabel('X'); ylabel('Y'); zlabel('Z');

2.2 CÓMO OBTENER UNA COPIA IMPRESA DE LAS GRÁFICAS


Hay dos procedimientos para producir copias impresas de las figuras. El primero es mediante
impresión directa en la impresora actual; el segundo consiste en crear un archivo que se
imprimirá posteriormente en una impresora designada.
El método para imprimir de inmediato en la impresora actual las figuras que se exhiben en
la pantalla varía dependiendo de la computadora utilizada. 1

Macintosh: Hay un comando de imprimir (print) en la ventana de menús. Haga clic en ella
después de trazar la gráfica en la pantalla. Se puede crear un archivo gráfico postscript con
print nombre_archivo.ps

PC Windows: Igual que en Macintosh

1 "
EI copiado postscript en color se explica en la guía de usuario de MATLAB.
Sección 2.3. Contorno de funciones bidimensionales 51

Estación de trabajo Unix: El comando pr in t envía la gráfica a la impresora por omisión


del sistema.

Para poder crear un archivo de la figura que se imprimirá posteriormente o en otra


impresora, es necesario especificar el tipo de impresora. Por ejemplo, si desea crear un archivo
para imprimirlo en una impresora postscript, el comando es
print -dps nombrearchivo
o
print nombrearchivo.ps
Con esto se crea un archivo postscript nombrearchi vo. ps que se 'podrá imprimir con una
2
impresora postscript. Como ejemplo adicional, para una impresora HP DeskJet SOOC con
color de 1 bit/pixel el comando es
print -dcdeskjet nombrearchivo
La orden anterior crea un archivo llamado nombr ear chivo . jet que se puede imprimir desde
cualquier computadora conectada a una HP DeskJet SOOC. Si desea obtener más información
para situaciones diferentes, utilice he lp pr in t.

2.3 CONTORNO DE FUNCIONES BIDIMENSIONALES


Malla: Se puede definir una función bidimensional z = z(x,y) con puntos discretos
mediante

Zij = z(x;, Yj) (2.3.1)

donde x;, i = 1, 2, ... m, y Yj,j = 1, 2, ... n, son puntos en los ejes x y y en orden ascendente. Las
intersecciones constituyen una retícula cartesiana.
Como ilustración, consideremos la retícula definida por
X;j=x;=-2+0.2(i-l), 1 ~i~21
y;J=yj=-2+0.2(j-l), 1 ~j~21

y valores funcionales definidos por

z;j = x; exp(-,Xf-Yj) (2.3.2)

La función anterior se graficó en la figura 2.13 con el listado 2.18.

2
La mayor parte de las figuras de este libro se crearon con MATLAB y se guardaron como archivos postsitript.
LaTex, el software empleado para la formación tipográfica de esta obra, puede incluir las gráficas a partir de archivos
postscript; para ello, se escriben los nombres de los archivos en lugares apropiados del manuscrito en LaTex.
52 Capítulo 2 Gráficas con MATLAB

Ésta es una gráfica 3-D de z - x*exp(-x·2 -y·2)

o.
o.
o.
N

-0.
-0.

-O~
2
o
y

Figura 2.13 Gráfica de malla (listado 2.18)

Listado 2.18
clear, clf
xa = - 2 : . 2 : 2 ;
ya= -2: .2:2;
[x,y) = meshgrid(xa,ya);
z = x .* exp(-x.·2 - y.•2);
mesh(x,y,z)
title('Ésta es una gráfica 3-D de z = x * exp( - x·2 - y•2)')
xlabel('x'); ylabel('y'); zlabel('z');

En el listado 2.18 utilizamos meshgr id para crear arreglos bidimensionales, x y y, donde x es


un arreglo de las coordenadas x de la retícula y y es un arreglo de las coordenadas y. Estos
arreglos x y y sirven para calcular el arreglo bidimensional z.
Es muy importante darse cuenta de la correspondencia que existe entre los arreglos
bidimensionales, x, y y z, y Xij. Yij y Zij, respectivamente. El hecho es que x ( j , i) , y ( j , i)
y z ( j , i) corresponden a Xij. Yij y Zij. respectivamente. Dicho de otro modo, el primer índice
de x, y y z cambia en la dirección y, en tanto que el segundo índice cambia en la dirección x.
Es preciso respetar esta regla si se calculan los elementos de z ( j , i) con ciclos f or / end.
El comando mesh del guión anterior puede sustituirse por mesh ( z) . El primer indice de
z cambia en la dirección y, mientras que el segundo lo hace en la dirección x.

Contorno: Podemos utilizar contour para graficar el contorno de una función en un arreglo
bidimensional. La sintaxis básica es

contour(x, y, z, nivel)
Sección 2.3. Contorno de funciones bidimensionales 53

Aquí, z es el arreglo bidimensional de la función; x y y son, respectivamente, las


coordenadasx y y en arreglos bidimensionales, y nivel es un vector que contiene los niveles
de contorno. Las coordenadas x y y también pueden ser arreglos unidimensionales, pero aquí
también se aplica la regla antes mencionada respecto de los índices de z; es decir, el primer
índice de z cambia en la dirección de y, mientras que el segundo índice lo hace en la dirección
de x. Si la retícula está equiespaciada, una forma más sencilla es con tour ( z) . En este caso,
el primero y el segundo índices cambian en las direcciones y y x, respectivamente. Además,
puede sustituirse nivel por un entero, m, que se interpretará como el número de niveles de
contorno. Estos niveles se determinan dividiendo los valores mínimo y máximo de z en m-1
intervalos.

Gráfica de contorno hecha con contour(x,y,z,nivel)

-1.5 -1 -0.5 o 0.5 1.5 2


X

Figura 2.14 Gráfica de contorno (listado 2.19)

La figura 2.14 muestra una gráfica de contorno producida por el listado 2.19, en la que la
función graficada está definida por la ecuación 2.3.1 y es la misma de la figura 2.13. Los
valores de los contornos de la figura se rotularon con clabel (h, 'manual'), que permite al
usuario indicar la posición de los números con el ratón. Los niveles de contorno pueden
rotularse automáticamente con clabel (h).

Listado 2.19
elear, ele, elf, axis('square')
xm=-2: .2:2; ym=-2:.2:2;
[x, y] = meshgrid(xm,ym);
z = x .* exp(-x.·2 - y.•2);
zmax=max(max(z)); zmin=min(min(z));
54 Capítulo 2 Gráficas con MATLAB

dz = (zmax-zmin)/10;
nivel = zmin + O.S*dz: dz: zmax;
h=contour(x,y,z,nivel); clabel(h,'manual')
title('Gráfica de contorno hecha con contour(x,y,z,nivel) ')
xlabel ( 'x'); ylabel ('y')

0.5

y -0.5

·1 1 - - - - - - -

·1 .5

-~3~--.2~--.1~--'-----'~--'-----' '
X
Figura 2.15 Trazado de una curva
especificada por una función implícita

El comando con tour puede servir para graficar una función implícita como

y3 + exp(y) = tanh(x)
Para graficar la curva, reescribimos la ecuación así:

f (x.Jl) =y3 + exp(y) - tanh(x)

y graficamos el contorno de un solo nivel que corresponde a/= O (véase la figura 2.15). El
siguiente guión ilustra el procedimiento de graficación:

Listado 2.20
clear, clf
xm = - 3:0.2:3; ym = - 2:0.2:1;
[x, y] = meshgrid(xm, ym);
f = y."3 + exp(y) - tanh(x);
contour(x , y,f, [O,O])
xlabel ( 'x'); ylabel ('y')

Observe que en el guión anterior el vector [o, o J en los argumentos de con tour sirve para
especificar el nivel del contorno. El único contorno que nos interesa es el del nivel O, pero los
niveles de contorno deben estar en forma de vector, por lo que repetimos el cero.
Sección 2.3. Contorno de funciones bidimensionales 55

0.2 0.4 0.6 0.8 Figura 2.16 Contornos y vectores


X

Gráfica vectorial: En ocasiones, las cantidades correspondientes a los puntos de una


retícula se dan en forma vectorial. Por ejemplo, la distribución de velocidades en un flujo de
fluido bidimensional se pueden expresar mediante vectores de velocidad en los puntos de la
retícula. Los vectores en esos puntos pueden graficarse con qui ver y requieren dos compo-
nentes, uno para la direcciónx y otro para la dirección y. Suponga que estos componentes están
dados por u y v, que son matrices del mismo tamaño que x y y. Entonces, los vectores se
graficarán con
quiver(x,y,u,v,s)
donde s es un factor de escala que es un parámetro del usuario para ajustar la longitud de los
vectores. La figura 2.16 ilustra el trazado de los vectores de velocidad en un problema de flujo
típico (llamado flujo de cavidad con impulso). La figura muestra también curvas de las líneas
de flujo hechas con con tour. El siguiente guión ilustra las partes esenciales del guión para
graficar la figura 2.16.
% (Se omitió la parte anterior del guión en la que se
% calculan x, y, s, u y v.)
clf
L= [.-o. 00577: -O. 00577: -O. 054, O, O. 0001, O. 00005] ;
c=contour(x,y,s,L); % s=función de flujo
clabel(c)
title('función de flujo Re=400 (reticula 51x51) ')
xlabel('dirección x')
ylabel('dirección y')
axis (' square')
hold on % u y v constituyen un vector.
56 Capítulo 2 Gráficas con MATLAB

qui ver ( x ( 1 : 2 : ni , 1 : 2 , ni) , y ( 1 : 2 : ni , 1 : 2 , ni) , ...


u(1:2:ni,1:2,ni), v(1:2:ni,1:2,ni), 4)

En el listado anterior, suponemos que x, y, u y v se calcularon en una parte anterior del guión
que no se muestra aquí.

2.4 RETÍCULA TRIANGULAR Y CONTORNOS


Una retícula triangular consta de elementos triangulares y su uso más común es en el análisis
de elementos finitos o de volúmenes finitos.
Graficación de una retícula triangular: Necesitamos los dos archivos de datos llamados
ce 11 _da y poin t _da para trazar una retícula triangular. El primer archivo incluye los
datos de los elementos triangulares, y el segundo, las coordenadas de los puntos nodales. (En
FM 2-1 de la página 76 se explican con mayor detalle los archivos.)
Cuando se ejecuta el listado 2.21, aparecen dos preguntas. La primera se refiere a si se
desea numerar o no los los elementos; teclee 1 si desea hacerlo o O si no. La segunda pregunta
se refiere a si se desea numerar o no los puntos; acepte con 1 o niéguese con O. La primera parte
de la figura 2.1 7 muestra la retícula trazada.

Listado 2.21 '


% trazado de reticula triangular
clear, clf
load cell da
load point da
tri_grid(cell_da, point_da, 1.8)

Gráfica de contorno en una retícula triangular: Si tenemos una función discreta


definida en los puntos nodales de una retícula triangular, podemos trazar su contorno con
tri con t de FM 2-2 (página 79). Para ejecutar este guión necesitamos dos archivos de datos,
cell da y point da (los mismos que usamos en tri cont), y un archivo de función
adicicmal, f da. Lasegunda parte de la figura 2.17 ilustra la-gráfica de contorno producida por
el listado 2.22 empleando tri_ con t.

Listado 2.22
% Gráfica de contorno en una reticula triangular
clear, clf
load cell da
load point da
load f da -
tri_cont(cell_da, point_da, f _ da, 1.8)

2.5 RETÍCULA CURVILÍNEA Y CONTORNOS

Suponga que los valores funcionales de/(x,y)_están dados en los puntos de una retícula,
(x;,j, Yi.j), por
Sección 2.5. Retícula curvilínea y contornos 57

'

-'------4!1\--'--'--~~--'----Ml-'----.>./5)

Figura 2.17 Una retícula triangular y una gráfica de contorno


(la impresión de los números de elementos y puntos es opcional)

donde i = 1, 2, ... , Ímáx y j = 1, 2, ... ,jmáx son índices de puntos. El sistema de retícula es una
reticula cartesiana si sus líneas son paralelas a los ejes de las coordenadas cartesianas. Por otro
lado, si la geometría en cuestión es compleja podemos utilizar puntos de retícula ajustados a
fronteras curvas, como se ilustra en la figura 2.18. Una retícula así se denomina retícula
curvilínea.
58 Capítulo 2 Gráficas con MATLAB

Figura 2.18 Trazado de una retícula curvilínea


'
La retícula curvilínea y el contorno de/¡,j se pueden trazar con g_cont de FM 2.3 (página
81 ). Su sintaxis es:
g_cont(x, y, f, nivel)

donde

x, y: las coordenadas de Jos puntos de Ja retícula.


f: arreglo bidimens)onal de Jos valores funcionales.
nivel: niveles del contorno en forma vectorial.

Como demostración, el lector podría ejecutar el siguiente guión:

Listado 2.23
clear, clf
[x, y, f] = td_data;
f max = max(max(f))
f-min = min(min(f))
kmax = 20;
for k=l:kmax
ELV(k)=(k-1)/kmax*(f_max-f_ min)*0.9999 + f _ min;
end
g cont(x, y, f, ELV)
O-%Para responder automáticamente
....
a la pregunta yue hace
g_cont
Sección 2.6. Graficación de malla y de superficies 59

Figura 2.19 Ejemplo de gráfica de contorno

1 % Ídem
axis ( [ -1 o 15 -15
I I I 1 ol )
axis ( 'square')
\
axis('off')

En el guión anterior, td_da ta es un archivo M de función que está en FM 2.3 y que genera la
retícula y la función de ejemplo para fines de demostración. La gráfica de contorno trazada por
el listado 2.23 se muestra en la figura 2.19. Los datos f generados por td_data se pueden
graficar con mesh como se muestra en la figura 2.20 o con sur f, que se explica en la sección
2.6, pero no es posible utilizar con tour porque la retícula no es rectangular.

2.6 GRAFICACIÓN DE MALLA Y DE SUPERFICIES


En esta sección, estudiaremos los gráficos tridimensionales, que se han mejorado notablemente
en la nueva edición para estudiantes y en las últimas versiones profesionales de MATLAB.
Aunque ya presentamos a mesh, aquí lo veremos con mayor detalle.

Gráfica de malla de una matriz: La aplicación más sencilla de los gráficos tridimensio-
nales es la graficación de una matriz. Consideremos una matriz z de m por n. El elemento
z ( j , i) se considera el valor funcional en y =j y x = i en el plano bidimensional. Definimos
una matriz de muestra con
60 Capítulo 2 Gráficas con MATLAB

0.5

- o
-0.5

-1

15

y X

Figura 2.20 Gráfica de malla que corresponde

Listado 2.24
clear, clf
for i=1:4 % corresponde a la direcci6n x
for j=1:7 % corresponde a la direcci6n y
z {j , i ) = sqr t { i • 2 + j • 2 ) ;
end
end
mesh{z)
xlabel {' i')
ylabel{'j')
zlabel{'z')

Entonces,
mesh{z)

produce la gráfica de malla que se muestra en la figura 2.21.


Color por omisión: En una pantalla a color, las líneas que conectan los puntos se colorean
con el mapa de color por omisión hsv (iniciales en inglés de matiz, saturación, valor). Se asigna
rojo a los valores tanto máximo como mínimo de z (i , j ) . Entre el mínimo y el máximo, el
color se determina linealmente en el orden rojo, amarillo, verde, turquesa, azul, magenta, rojo.
Sección 2.6. Graficación de malla y de superficies 61

10

8
...
4

o
8
4

o 1

Figura 2.21 Gráfica de malla de una matriz

Sin embargo, en la figura 2.21 (si se ve en una pantalla a color) las líneas que tienen la
mayor elevación son de color púrpura y las que tienen la menor elevación son de color amarillo
rojizo. Esto se debe·a que el color de una línea está determinado por el promedio de los valores
z de los dos puntos conectados. En esta gráfica de malla, el valor de color de una línea en la
más alta elevación se acerca al magenta, mientras que el valor de color de una línea en la más
baja elevación se acerca al amarillo. Si se graficara una malla mucho más fina, ambas líneas,
la más alta y la más baja, aparecerían en rojo.

Ejes y leyendas: Los límites del espacio tridimensional en la gráfica se determinan


automáticamente, pero pueden modificarse con axis [xmin, xmax, ymin, ymax, zmin,
zmaxJ igual que en las gráficas bidimensionales. Las leyendas de los ejes x-,y- y z- se agregan
con xlabel, ylabel y zlabel, respectivamente.

Perspectiva: El ángulo de perspectiva de una gráfica de malla puede cambiarse con


view ( [az, el]) o view ( [x, y, zJ). Aquí, az es el ángulo azimutal y el es el ángulo
de elevación. Cuando az=o y el=o, la posición del ojo del observador está en el ángulo de
perspectiva de referencia que yace a lo largo del eje y-negativo (véase la figura 2.22). Con esta
perspectiva, la gráfica se vuelve un plano x-z bidimensional con el eje z vertical y el eje x
extendiéndose horizontalmente a la derecha. El parámetro a z gira la posición del ojo en sentido
antihorario az grados alrededor del eje z-a partir del ángulo de referencia (como si giráramos
la gráfica alrededor del eje z-en sentido horario el mismo número de grados). El parámetro e 1
eleva el ángulo del ojo el grados a partir del plano x-y. Los valores por omisión son az =
-37. s grados y el = 30 grados.
62 Capítulo 2 Gráficas con MATLAB

Obaervador en ángulo (az, el)


mirando hacia el origen
z
~\) I
I
I

I
I
I
,....... y
I ••••, ángulo el
,' ···...

Figura 2.22 Posición del ojo en ángulos.


az •O, e1 · O
X
(ángulo de referencia)
Observador en (x,y.z)
mirando hecia el origen

J:
z .. ···

I :
y
I
I

X
Figura 2.23 Posición del ojo en (x, y, z)
y

Si se utiliza vi ew con coordenadas tridimensionales como vi ew ( [x, y , z] ) , se supone


que el ojo del observador se encuentra a lo largo del vector [x, y, z J extendido desde el
origen (véase la figura 2.23). view( [o, - 1, o]) equivale a view( [O, o]) expresado en
ángulos. Las relaciones entre los ángulos y las tripletas están dados por

az = atan2(x,-y)*180/pi;
el= atan2(z,sqrt(x·2 + y•2))*180/pi

Las figuras 2.24 y 2.25 ilustran diferentes vistas de una malla. Las gráficas de malla
ilustradas en la figura 2.24 se trazan con el siguiente guión:

Listado 2.25
clear, clf
yp=l : S;
xp=1 : 4;
Sección 2.6. Graficación de malla y de superficies 63
Perspectiva por omisión (35,20]

10

.... 5

g
5
10

N 5

8
, '

y oo X 5 o y
X
(35, ·20] (10,90)

@,.:
10

~
8 5
y
X

Figura 2.24 Malla con diferentes perspectivas

[x,y]=meshgrid(xp,yp);
z=sqrt(x.·2 + y.·2);
%
subplot(221)
mesh(x,y,z)
axis ( [o I 5 I o I 5 I o I 1 o] )
title('perspectiva por omisión')
xlabel ('X')
ylabel ('Y')
zlabel ( 'Z')
%
subplot(222)
mesh(x,y,z)
axis ( [o I 5 I o I 5 I o I 1 o] )
title(' [35, 20) ')
view ( [35, 20))
xlabel ('X')
ylabel ('Y')
zlabel ( 'Z')
%
subplot(223)
mesh(x,y,z)
axis ( [o I 5 I o I 5 I o I 1 o] )
ti tle ( I [35 1 - 20) I)
view ( [35, -20))
xlabel ('X')
y l abe l ( ' Y ' )
64 Capítulo 2 Gráficas con MATLAB

perspectiva por omisión perspectiva[1,2,2)

10 10

N 5
N 5
o
g o
5 o
y oo X y 5 5 X

perspectiva[O,O, 1] perspectiva(1,0, 1)
5

9
4
3
> 10
2
N 5 )(

ºo 4
o
2
X
o 2
y
4

Figura 2.25 Gráfica de malla con diferentes perspectivas

zlabel ( 'Z')
%
subplot(224)
rnesh(x,y,z)
axi s ( [O , 5 , O, 5 , O, 1 O] )
title(' [10,90] ')
xlabel ('X')
ylabel ('Y')
zlabel ( 'Z')
view ( [10, 90]
axis (' square')

Contorno con malla: me shc traza el contorno de z en el plano x-y además de las gráficas
de mesh ( z) . La figura 2.26 se traza con el siguiente guión:

Listado 2.26
clear,clf,hold off
dth=pi/20;
j=1:21;
i=l:lO;
X= log(i) i
y = log(j);
[x,y] = rneshgrid(x,y);
z=sqrt (O .1* ( (x-log (5)). 2 + (y-log (5)) . 2)) +1;
A A

rneshc(x,y,z)
Sección 2.6. Graficación de malla y de superficies 65

1.8

1.6

.. 1.4

1.2

1
4
3 2.5

y X

Fla=ura 2.26 Malla y contorno de una matriz

xlabel ('X')
ylabel ('Y')
zlabel (' Z')

Superficie y contorno: Las órdenes sur f y sur fe producen gráficas similares a mesh y
meshc excepto que surf y sur fe pintan el interior de cada célula de la malla con color,
creando una imagen de superficies. El color de la célula lo determina el promedio de z en las
cuatro esquinas.

Superficie con iluminación: El comando sur f puede sustituirse por sur f 1 para crear un
objeto de superficies con iluminación. También puede especificarse la dirección de la fuente
de luz. Por ejemplo, la sintaxis básica es sur f 1 {x, y, z) con iluminación por omisión, pero
puede especificarse una dirección en particular para la fuente de iluminación con
sur f 1 ( x, y, z, s) , donde s es un vector direccional para la luz que tiene la misma forma que
el ángulo de perspectiva en grados. Se recomienda utilizar sur fl con colormap gray y
shading flato shading interp. En el apéndice B se muestra un ejemplo de gráfica
(véase la figura B4).

Mayor control de las condiciones de iluminación: 3 Podemos controlar aún mejor


utilizando surfnorm, y diffuse o specular junto con sur f. La orden [xn,yn, zn] =
surfnorm (x, y, z) genera un conjunto de vectores [xn, yn, zn] que representa las direccio-
nes normales a la superficie (x, y, z).Laor.denr = specular (xn,yn,zn,L) determina
la intensidad de la luz proveniente de la superficie, donde Les un vector direccional o un vector
angular en grados que define la dirección de la luz. Por tanto, si utilizamos r en lugar de un

3
Éste es un tema avanzado; se recomienda a Jos principiantes pasarlo por alto.
66 Capítulo 2 Gráficas con MATLAB

·1

H 1

·1

Figura 2.27 Superficie en una retícula curvilínea

vector de color en sur f, se creará una imagen con iluminación di fusa. Podemos cambiar el
diffuse por specular (nxn, yn, zn, L, V), donde V es un vector direccional o un vector
angular que define la dirección del observador. A continuación presentamos un ejemplo de
guión. Se recomienda a los lectores investigar los efectos de modificar los parámetros del
guión. En las láminas a color aparece un ejemplo de gráfica de superficie con iluminación
especular en fortna de tubo espiral.

clear,clf
axis ( [ -1 . 5 , 1 . 5 , -1 . 5 , 1 . 5 , -1 . 3 , 1 . 3 ] )
view{ (1 -0.5 0.31])
caxis( (-0.B 1.5)
colormap hot
hold on
L= [ O . 5 , O . 3 , O . 7 ] ; V= [ 1 , 1 , 1 ] ;
Sección 2.6. Graficación de malla y de superficies 67

[x,y,z] = sphere(20); '


[xn,yn,zn] = surfnorm(x,y,z);
% r = specular(xn,yn,zn, L,V);
r = diffuse(xn,yn,zn, L);
surf(x,y,z,r)
shading interp
Malla o superficie en una retícula curvilínea: En el caso de una superficie en una retícula
curvilínea, el orden de i y j no tiene importancia siempre que se utilicen de forma consistente
en todos los arreglos en cuestión. En una retícula curvilínea, x es una matriz de n por m y su
elemento x ( i , j ) es la coordenada x del punto ( i, j ) , en tanto que y es la coordenada y. La
primera parte de la figura 2.27 muestra la gráfica de superficie con la retícula no rectangular
véase el listado 2.27).
Listado 2.27
clear,clf,hold off
dth=pi/20
for j=l: 21
for i=l:lO
r=0.5+0.2*i + j*O.Ol*i;
th = dth*(j-1);
x(i,j) = r*cos(th);
y(i,j)= r*sin(th);
z=cos(O.l*(x.A2 + y.A2))+1;
end
end
surf(x,y,z) % graficación de una superficie
xlabel ( 'x')
ylabel ('y')
z 1abe1 ( ' z ' )
axis([-5, 4, -1, 5))
view ( [-135, 40))
hold on
mesh(x,y,zeros(size(x))) % graficación de una retícula en
% el plano x - y
colormap hot
caxi s ( [ - o . 5, 3] )
hold off
% shading flat % para la segunda gráfica de la Fig 2.27
No es posible graficar contornos con meshc ni sur f c si la retícula no es rectangular.

Eje de color: Podemos controlar los colores escribiendo el cuarto argumento de los
comandos mesh y sur f; por ejemplo,
mesh(x,y,z,c)
El cuarto argumento c es un vector del mismo tamaño que z y especifica la coordenada de
color. Si se omite c, se supondrá que es igual a z, y los colores de las líneas y superficies estarán
determinados por los valores de z.
68 Capítulo 2 Gráficas con MATLAB

Si no se ha utilizado el comando colormap, el mapa de color será colormap hsv por


omisión; entonces, se asignará el color rojo al punto con el más bajo valor de e ( j , i) , lo mismo
que al punto con el valor más alto de e ( j , i) . El color para los valores intermedios se
determinará linealmente en el orden rojo, amarillo, verde, turquesa, azul, magenta y rojo. No
obstante, podemos asignar a los puntos de la malla valores de color distintos con .:; definido por
el usuario. El comando

caxis ([O, 100])

asigna el rojo a Oy a 1OO. Por tanto, si todos los elementos de la matriz de color de e ( j , i) se
hacen cercanos a cero, la gráfica entera se verá rojiza, mientras que si los elementos de la matriz
de color están alrededor de 50 toda la gráfica se verá entre azulosa y púrpura.

Mapa de color: La definición de los colores en el eje de color puede modificarse con
colormap. Las definiciones de mapa de color alternativas incluyen colormap (hot) , co -
lormap ( cold) y colormap (jet) para sustituir a colormap (hsv). Pruebe estos coman-
dos para alterar la coloración de una gráfica de malla o de superficie. En el apéndice A se
describen aspectos más generales. El argumento de colormap puede escribirse sin paréntesis,
como colormap hsv.

Sombreado: Los objetos creados por sur f consisten en mosaicos cuadrilaterales separa-
dos por líneas negras como se ilustra en la primera parte de la figura 2.27. Esto corresponde a
la opción por omisión de shading, es decir, shading faceted (sombreado con facetas).
Las líneas de separación pueden eliminarse con shading f la t. Si desea eliminar las líneas
y además alisar la superficie, utilice shading interp. La segunda parte de la figura 2.27 se
graficó añadiendo el comando shading interp. (Véase también la figura 5.14, la figura 9.11
y las aspas del rotor de ventilador en las láminas de color como ejemplos del uso de shading
interp).

Otra vez hold on: El comando hold on es muy importante también cuando se elabora
una gráfica que tarda mucho tiempo, por la siguiente razón: El comando para cambiar las
propiedades gráficas como el eje, el mapa de color, los ángulos de perspectiva, el eje de color
y otros parámetros puede especificarse después de haber trazado una figura; pero cada vez que
se emita un comando nuevo se redibujará toda la figura. Se puede ahorrar tiempo si se
especifican todos los comandos de propiedades antes de graficar y se retienen con hold on.

2.7 MATLAB COMO HERRAMIENTA DE DIBUJO


MATLAB puede servir como mesa de dibujo para elaborar imágenes y diagramas. A
diferencia del software de dibujo ordinario, es posible utilizar funciones matemáticas para
definir líneas y curvas. En esta sección explicaremos primero los elementos de dibujo de
imágenes y diagramas con MA TLAB y luego presentaremos un conjunto de herramientas
de dibujo. "
Sección 2.7. MATLAB como herramienta de dibujo 69

Dibujo sencillo: Lo primero que debemos hacer antes de dibujar es determinar el área
del dibujo en el plano x-y con axis seguido de hold on. Después trazaremos líneas y
curvas con plot. El siguiente guión dibuja una carita feliz como se muestra a la izquierda en
la figura 2.28.

Listado 2.28
clear, clf, hold off
dt = pi/20;
t=O:dt:2*pi;
x=cos(t); y=sin(t);
axis((-1 1 -1 l]), hold on
plot(x,y) % contorno de la cara
hold on
for k=0.8:-0.05:0.05
plot(k*O.l*x-0.3,k*0,15*y+O.l) % ojo izquierdo
plot(k*O.l*x+0.3,k*0.15*y+O.l) % ojo derecho
end
sl = 3*pi/2-l. l;
s2 = 3*pi/2+1.l;
s = sl:dt:s2;
xs = 0.5*cos(s); ys 0.5*sin(s);
plot(xs,ys) % boca
hold off

• •
~ ~
••
Figura 2.28 Carita feliz

Con axis (' square') y axis ('off') el dibujo queda como a la derecha de la figura2.28. 4
Las funciones matemáticas son útiles para dibujar formas y patrones creativos. La figura
2.29 ilustra una patrón de burbujas de jabón creado dibujando círculos al azar. Las posiciones
y los tamaños de las burbujas se determinan con rand. Véase el listado 2.29.

4
Si la figura no se vuelve cuadrada a pesar de axis ( ' squar e' ) , una alternativa consiste en multiplicar
todos los valores y por un factor de escala para compensar la distorsión. Otra solución sería cambiar el mínimo y el
máximo dey en axis.
70 Capítulo 2 Gráficas con MATLAB

Figura 2.29 Burbujas de jabón

Listado 2.29
clear,clf, hold off
axis( [-O. l . -O. l. ] )
axis (' square')
axis('off')
hold on
plot( [0,1,1,0,oJ, [o,q,1,1,oJ)
h=pi/10;
t=O:h:pi*2;
XX = COS (t) ¡
yy = sin (t);
for n=1:40
r = rand(l)*0.1;
xc = rand(l);
ye = rand(l);
x = xx*r + xc;
y = yy*r + ye;
plot(x,y)
end
hold off

Las figuras pueden expresarse conectando una serie de puntos. Por ejemplo, las alas y el
cuerpo del insecto en la primera parte de la figura 2.30 se definen mediante puntos conectados
por líneas. La función insect _ (pl, p2) de FM 2.4 traza un insecto colocado entre dos
puntos, pl y p2, donde pl y p2 son pares de coordenadas en forma vectorial. La función
insect puede probarse ejecutando insect t listado después de insect . m. La segunda
parte de la figura 2.30 se crea girando y trasladando el insecto mediante el aigoritmo que se
explica a continuación. "
Sección 2.7. MATLAB como herramienta de dibujo 71

Figura 2.30 Un insecto y su patrón aleatorio

Rotación y traslación: Si queremos dibujar una imagen o diagrama complicado, podemos


crear varias subfiguras como archivos M de función. Cada subfigura puede crearse en un
dominio normalizado como -1 ~ x ~ 1, -1 ~y~ 1, o O~ x ~ 1, O~ y~ l. Luego, mediante
traslación, rotación y cambio de escala, las sub figuras se colocan en el lugar deseado. La figura
2.3.1 ilustra una bobina definida en un área unitaria, y su reemplazo después de rotación y
traslación en un punto de una figura mayor.
En la traslación y la rotación es necesario especificar dos puntos de referencia en la
subfigura y dos puntos correspondientes en la imagen total. Las coordenadas de los dos puntos
en la subfigura se denotarán por (x1, y1) y (x2, yi), mientras que las coordenadas de los
puntos correspondientes en la figura completa se denotan por (X1, Y1) y (X2, Y2). Para que la
forma de la figura siga siendo la misma después de la rotación y la traslación, es preciso
satisfacer la siguiente relación entre las coordenadas (x, y) y (X, Y):

X=cx-dy+f
(2.7.1)
Y=dx+cy+g

donde los coeficientes e, d,f y g están determinados por


72 Capítulo 2 Gráficas con MATLAB

Figura 2.31 Traslación y rotación de una figura

X¡ = CX¡ - dy¡ +f

f¡ = dx1 + cy¡ + g
(2.7.2)

Sobre todo si x1 = -1, xi = 1, y1 =.Y2 = O, los coeficientes se convierten en


x2-x1
c=-2-
1 d=yi-yl
2 (2.7.3)
xi +x¡
g=-2-
f=Y2 ;yl
Una subfigura creada originalmente en un dominio elegido arbitrariamente puede estanda-
rizarse mediante el inverso de la transformación anterior. Suponga que los puntos de referencia
de las figuras originales están dados por (X1, Y1) y ('X2, Y2). Entonces, la figura se transformará
al dominio normalizado de (x1 = -1, y¡ = O) y (x2 = 1, .Y2 = O) por
Sección 2.7. MATLAB como herramienta de dibujo 73

x=CX-DY+F
(2.7.4)
y=DX+CY+G

donde los coeficientes C, D, F y G están determinados por

XJ = CX1 -DY1 + F=-1


y1 = DXí + CY1 + G - O
(2.7.5)
x2 = CX2 '-DY2 + F= 1
.Y2 = DX2 + CY2 + G = O

Los coeficientes que satisfacen las ecuaciones anteriores son

C_ -2(X1 - X2)
- (Y1 -Yd + (X1 -X2)2

D- 2(Y1-Y2)
- (Y1 - Y2)2 + (X1 -X2)2 (2.7.6)

F= l -CX2 + DY2
G=-DX2-CY2

Dibujo de diagramas: La tabla 2.1 es una lista de subfiguras que pueden servir para crear
diagramas e imágenes.

TABLA 2.1 Órdenes para imágenes y diagramas hechos con componentes


nornbre-f Sintaxis
capacit capacit (u,w,pl,p2) % condensador
battery- battery-(u,w,pl,p2) % batería
circle - circle (r,xO,yO) % círculo
coil b- coil b(n,u,w,pl,p2) % bobina a
coil-a coil-a(n,u,w,pl,p2) % bobina b
damper damper (w,pO,pl) % amortiguador
line line (pl,p2) % línea
arrow arrow (w,pl,p2) % flecha
arrow-dot arrow-dot(w,pl,p2) % flecha con
resist resist (n,u,w,pl,p2) % resistor
spring spring-(n,u,w,pl,p2) % resorte
switch- switch-(u,w,pl,p2) % interruptor
box box (w~pl,p2) % cuadro
human human_(pl,p2,Body, ... % persona
74 Capítulo 2 Gráficas con MATLAB

Rarml,Rarm2,Larml,Larm2, ...
Rlegl,Rleg2,Llegl,Lleg2 )
insect insect (pl,p2) % insecto y sus dos ojos
two eyes two eyes(phi,eyeangle,xO,yO,zD,width)
ellip_ ellip_(xO,yO,rx,ry) % elipse
El significado de los argumentos de la tabla anterior es el siguiente:
n: número de oscilaciones o devanados
u: longitud relativa del componente
w: anchura relativa del componente
pl: los valores x y y del punto de referencia izquierdo (vector de fila)
p2: los valores x y y del punto de referencia derecho (vector de fila)
r: radio de un círculo
x o , y o: centro de un círculo
Body, Rarmsl, etc.: (véase la figura 2.36)
phi, eyeangle, etc.: véase el listado FM 2.4 para two_eyes
rx, ry: radios en las direcciones x y y.

>4

ºo 2 3 4 5 8 7 8 9
X

Figura 2.32 Ilustración de una bobina

Cada componente puede colocarse en el lugar deseado del dibujo final con el ángulo de
rotación deseado definiendo de forma apropiada pl y p2. Es importante establecer axis y
hold on antes de invocar las funciones. El listado 2.30 ilustra el empleo de los componentes.
La figura dibujada por ese listado aparece en la figura 2.32. Observe que la bobina comienza
en pl (x = 2,y = 4) y termina en p2 (x = 6,y = 4). ·
Las figuras 2.33 y 2.34 ilustran imágenes creadas con human_. El guión de human_. m se
encuentra en FM 2-5. "
Sección 2.8. Gráficos interactivos 75

Listado 2.30
clear, clf
axis([0,9,0,8])
hold on
pl=[2,4]; p2=[6,4)
n = 6; u = 0.5; w = 0.5;
coil b(n,u,w, pl,p2)
hold-off

Uegan siete niños ruidosos

Figura 2.33 Imagen 1

2.8 GRÁFICOS INTERACTIVOS


El elemento fundamental de los gráficos interactivos es la capacidad de un programa para leer
las coordenadas del apuntador del ratón en cualquier posición. Esto puede hacerse con ginpu t
en uno de los siguientes formatos:

[x,y] = ginput
[x,y,bot6n] = ginput
[x,y,bot6n] = ginput(n)

Suponga que se hace clic con el ratón en cierto lugar dentro de una pantalla de gráficos.
Entonces, [x, y] = ginput acumulará un número ilimitado de puntos hasta que se pulse la
tecla return (intro}, así que x y y se convertirán en vectores de longitud igual al número de
puntos acumulados. [x, y, botón] = ginput es lo mismo excepto que también se registran
los números de botón del ratón. Los números de botón son l, 2 y 3, contando a partir del lado
izquierdo del ratón. [x, y, botón] = ginput (n) acumulan puntos, pero puede suspenderse
pulsando la tecla return.
76 Capítulo 2 Gráficas con MATLAB

YaMvan

Figura 2.34 Imagen 2

El listado 2.31 ilustra el empleo de ginput. Cuando se ejecuta este listado, el programa
espera hasta que se hace clic con el ratón. Si se hace clic con el botón izquierdo, se imprimirá
una marca '+' roja en la posición del apuntador. De forma similar, si se acciona el botón del
medio o el derecho, se imprimirá una marca 'o' amarilla o una marca '•' verde, respectivamen-
te. La ejecución termina si se hace clic con el ratón cuando el cursor está dentro del cuadro en
la esquina inferior izquierda de la pantalla. La figura 2.35 ilustra las marcas graficadas con el
listado 2.31.

Listado 2.31
clear,clf,hold off
axis( [0,10,0,10))
hold on
plot( [l,2,2,1,l] [2,2,3,3,2))
I

text(l,1.6, 'Haga clic dentro del cuadro para terminar')


while 1
[x,y,boton] = ginput(l)
if boton==l, plot(x,y, '+r'), end
if boton==2, plot(x,y, 'oy'), end
if boton==3, plot(x,y, '*g'), end
if x>l & x<2 & y>2 & y<3, break;end
end
hold off

2.9 ARCHIVOS M
FM 2-1 Gr,flca de malla triangular
Objetivo: trazar una retícula triangular.
Sección 2.9. Archivos M 77

10

8
..... • • •
7

6 •
5

4
• •
3

2
[]
Haga clic dentro del cuadro para terminar

ºo 2 4 8 8 10

Figura 2.35 Ilustración de gráficos interactivos

Sintaxis: tri_grid(datosl, datos2, escala_y)


datosl: Nombre del arreglo que contiene los números de los puntos vértice para cada
elemento triangular. La columna 1 es el número de triángulo; las columnas 2 a 4
son los números de vértice para el triángulo en orden según las manecillas del
reloj. Véase el archivo de datos de muestra llamado ce 11 _da.
da tos2 : Nombre del arreglo que contiene coordenadas de vértices. La primera columna
es el número secuencial de los puntos y las siguientes dos columnas son los
valoresx y y del punto. Véase el archivo point_da.
escala_Y: Factor de escala para la coordenada y. Si se grafica un circulo sin ajuste, por
ejemplo, se convierte en una elipse. Se puede estimar un valor de escala apropiado
midiendo qué tanto se distorsiona un cuadrado o un círculo cuando este factor es
la unidad.
Ejemplo: tri_grid(cell_da, point_da, y_scale)

tri_grid.m
function tri_grid(tri_d, xy_d, y_scale)
hold off
[n tr,n] = size(tri d);
[n-pt,n] = size(xy_d);
nmax=tri d(l,1);
x=xy d( :-:-2);
y=xy-d(:,3)*y scale;
tri_num_prnt ~ input('¿Numerar los elementos? 1 si/O no: ');
78 Capítulo 2 Gráficas con MATLAB

pnt nurn prnt =input ('¿Numerar los puntos de reticula? 1 si/O no: ');
xmin=min(x); xmax=max(x); x cen 0.5*(xmin + xmax);
ymin=min(y); ymax=max(y); y-cen = 0.5*(ymin + ymax);
Dx=xmax-xmin; Dy=ymax-ymin;-
if Dx<Dy, xmin = x cen-Dy/2; xmax = x cen+Dy/2; end
if Dx>Dy, ymin = y-cen-Dx/2; ymax = y-cen+Dx/2; end
clf; hold off; ele;% axis('square') -
axis([xmin, xmax, ymin, ymax])
xlabel('Trazado de retícula triangular'); hold on
del x = 0.1; del y= 0,1; % Ajustar posición de núm. de elemento
for-k=l:n tr -
for 1=1:3
p=tri d(k,l+l);
xx(l)-;;x(p); yy(l)=y(p);
end
xx(4)=xx(l); yy(4)=yy(l);
plot(xx,yy)
x cen = surn(xx(1:3))/3; y cen = sum(yy(1:3))/3;
if tri num prnt == 1 % si-O, no imprime núms. de elementos.
text(x cen - del X, y_cen - del y, int2str(k))
end - - -
end
%plot(x, y, '*')
if pnt num prnt == 1 % si o, no imprime núms. de puntos.
for n=l :n pt
text (x (n)~ y (n), [' (', int2str (n), ') '))
end
end
axis('off')

cell_da
1 1 6 2
2 2 6 7
3 3 2 7
4 3 7 8
5 3 8 9
6 3 9 4
7 4 9 5
8 6 11 12
9 7 6 12
10 7 12 13
11 7 13 8
12 8 13 14
13 8 14 10
14 8 10 9
15 11 15 16
16 11 16 12
17 12 16 17
18 12 17 13
19 13, 17 18
20 13 18 14
Sección 2.9. Archivos M 79

point_da
1 o.o o.o
2 l. o o.o
3 2.0 o.o
4 3.0 o.o
5 4.0 o.o
6 o.o l. o
7 l. o 1.0
8 l. 7 1.3
9 3.0 1.0
10 2.4 1.6
11 o.o 1. 75
12 o .65 1.8
13 1.25 2.0
14 1.66 2.34
15 o.o 2.0
16 0.518 2.069
17 l. o 2.268
18 1.414 2.586

FM 2-2 Graficación de contorno en una retícula triangular


Objetivo: graficar el contorno de una función definida en una retícula triangular
Sintaxis: tri cont (datosl, datos2, datos3, escala y)
datosl: véase FM 2-1 -
datos2: véase FM 2-1
da tos 3: valores funcionales en los puntos de la retícula. Véase el archivo de datos
llamado phi da
escala: véase FM 2-1
Ejemplo: tr i_cont (cell_da, point_da, phi_da, y_scale)
lri_cont.m
:unction dummy=tri cont(tri data,xy data,f data,ys)
'.n tr, n) = size (trí data); - - -
:n=pt,n) = size(xy data);
~.ma x=tri data(l,1);
x=xy da ta (:, 2l ;
y=xy- da ta ( : , 3) ;
: = f data;
~ri_num_prnt = input('¿Numerar elementos? 1 si/O no: ');
~:mt num prnt = ...
- input('¿Numerar puntos de retícula? 1 si/o no: ');
x::ni n=min(x); xmax=max(x); x cen = 0.5*(xmin + xmax);
_>:ni n=min(y*ys); ymax=max(y*ys); y cen = 0.5*(ymin + ymax);
:~in=min(f)+0 . 01; fmax=max(f) - 0.0l;
:.Jc=xmax-xmin; Dy=ymax-ymin;
:: c ont=20;
if = (fmax-fmin)/n cont; kmax=n cont;
s = fmin:df:fmax; - -
.& Dx<Dy, xmin x cen-Dy/2, xmax = x cen+Dy/2 , end
~= Dx>Dy, ymin = y=cen-Dx/2, ymax = y=cen+Dx/2, end
80 Capítulo 2 Gráficas con MATLAB

clf; hold off; ele; %axis('square')


axis([xmin, xmax, ymin, ymax)); m=O;
title('Gráfica de contorno'); hold on
del x = 0.1; del y= 0.1; % Ajustar posic. de núm. de elemento
for-k=l:n tr -
for j=i73
p=tri data(k,j+l);
xx(j)~x(p); yy(j)=y(p);
ff(j) = f(p);
end
xx(4)=xx(l); yy(4)=yy(l); ff(4)=ff(l);
plot (xx, yy*ys)
f min = min([ff(l), ff(2), ff(3)));
f-max = max([ff(l), ff(2), ff(3)));
for kv= l:kmax
if f min <= s (kv) & s (kv) <= f_max; ,
m=o;
fer i=1:3
i f ( s (kv) - f f ( i ) ) * ( s (kv) - f f ( i +1 ) ) <= o , ,
m = m + 1;
if f(i+l) == f(i), alph=0.5; end
i f f (i+l) -= f (i)t

alph = (s(kvl-ff(ill/(ff(i+l)-ff(i));
end
xp(m) = alph*xx(i+l) + (1-alph)*xx(i);
yp(m) = alph*yy(i+l) + (1-alph)*yy (i);
end
if m == 2,
plot ( [xp (1) ,xp (2) J, [yp (1) *ys, yp (2) *ys), '--' l;
break
end
end
end
end
% ==
x cen = sum(xx(1:3))/3; y cen = sum(yy(1:3))/3;
if tri num prnt == 1 % si-O, no imprime núms. de elementos.
text(x cen - del X, (y cen - del y)*ys, int2str(k))
~d - - - -
end
% plot(x,y•ys,'*') % Usar si va a marcar los puntos con*
%=================
if pnt num prnt == 1 % si o, no imprime núrns. de puntos.
for n=l :n pt
text (x (n)-;- y (n) •ys, [' (', int2str (n), ') 'J)
end
end
axis('off')

phl_da
3.3744378e+02 3.4924482e+02 3.732'8341e+02 3. 90207 57e+02
Sección 2.9. Archivos M 81

4.0131868e+02 3.1453162e+02 3.2645937e+02 3.3443546e+02


3.8200298e+02 3.4679150e+02 ' 2.5358725e+02 2.5990002e+02
2 .6843571e+02 2.6889073e+02 2.2356239e+02 2.2439244e+02
2.2498863e+02 2.2577131e+02

FM 2-3 Gráfica de contorno en retfcula curvilínea generalizada


Objetivo: trazar una retícula curvilínea y un contorno en la retícula
Sintaxis: g cont (x, y, f, s)
x: arreglo bidimensional de coordenadas x
y: arreglo bidimensional de coordenadas y
f: arreglo bidimensional de valores funcionales
s: arreglo unidimensional de niveles del contorno

g_cont.m
function g cont(x, y, f, s)
x max=max(max(x));
x-min=min(min(x));
y-max=max(max(y));
y-min=min(min(y));
axis ( square I)
I

axis([x min,x max,y min,y_max]); hold on


kmax=length(sf; -
m plot=input('¿Desea trazar una retícula? 1/0 ');
iI m plot = 1
for j=1 :nj
plot(x(:,j),y(:,j))
end
for i=l:ni
plOt (X ( i Y (i / : ) )
1 : ) /

end
el se
for j=l:nj-l:nj
plot(x(:,j),y(:,j))
end
for i=l:ni-l:ni
plot(x(i, :) ,y(i, :) )
end
end
for i = l:ni-1
for j=l:nj-1
f min = min([f(i,j), f(i+l,j), f(i,j+l), f(i+l,j+l)]);
f= max = max ( [ f ( i, j) , f ( i ~ 1, j) , f ( i, j +1) , f ( i +1, j ·+ 1) ] ) ;
ip = i+l;
jp = j+l;
for k = l:kmax
i f f min <= s (k) & s (k) <= f_max,
l=o;
i f (s(k) - f(i,j)) * (s(k) - f(ip,j)) <=O; l=l+l;
[xp(l) ,yp(l)] = GC_interp(s(k),i,j,ip,j,x, y,f);
82 Capítulo 2 Gráficas con MATLAB

end
i f (s(k) - f(ip,J)) * (s(k) - f(ip,jp)) <=o, l=l+l;,
[xp(l) ,yp(l)] = GC interp(s(k),ip,j,ip,jp,x, y,f);
end -
i f (s(k) - f(i,j)) * (s(k) - f(i,jp)) <=O, l=l+l;,
[xp(l),yp(l)] = GC interp(s(k),i,j,i,jp,x, y,f);
end -
i f (s(k) - f(i,jp)) * (s(k) - f(ip,jp)) <=O, l=l+l;,
[xp(l),yp(l)] = GC interp(s(k),i,jp,ip,jp,x, y,f);
end -
i f 1>=2, plot([xp(l),xp(2)], [yp(l),yp(2)], '--');
end
if 1 4 plot([xp(3),xp(4)], [yp(3),yp(4)),'--');
end
end
end
end
end
return
GC_interp.m
function [x ,y J = GC interp(s lev,i1,j1,i2,j2,x grid, y_grid,fun)
i f abs(fun(il,jl) --s lev) <-1.0e-5 & .•.
abs(fun(i2,j2) - s Iev) < l.oe-5
X = (X grid(il,jl)- +X grid(i2,j2) )/2;
y_= (y=grid(il,jl) + y=grid(i2,j2))/2;
el se
a= (fun(i2,j2) - s lev)/(fun(i2,j2) - fun(il,jl));
% if a<O 1 a>l, a, eñd
b = 1-a;
x x grid(il,jl)*a + x grid(i2,j2)*b;
y y=grid(il,jl)*a + y=grid(i2,j2)*b;
end-
r et ur n
td_data.m
function [x,y,f) = td data
ni = 10; nj = 20;
for j=1:nj
for i=l:ni
r = 3 (5+j) *O. 05* (i-1);
th = j•pi/10;
x(i,j) = r*cos(th);
y(i,j) = r*sin(th);
end
end
f=zeros(ni,nj);
for j=2:nj-1
f(ni,j)=sin(0.5*j);
end
for it = 1:20
for i=2:ni-1
Sección 2.9. Archivos M 83

f ( i , nj ) = f ( i , nj -1) ;
f(i,1) = f(i,2);
end
f(ni,nj) = O.S*(f(ni-1,nj) + f(ni,nj-1));
f(ni,1) = O.S*(f(ni,2) + f(ni-1,1));
for i=2:ni - 1
for j=2: nj-1
f(i,j) = 0.375*(f(i-1,j)+f(i+l,j)+f(i,j - l)+f(i,j+l))
- 0.5 * f(i,j);
end
end
end

FM 2-4 Subfiguras de imágenes y diagramas


Objetivo: dibujar un componente de una imagen o diagrama en el lugar deseado.
Sintaxis: véase la tabla 2.1. (Es importante establecer axis y hold on antes de invocar las
funciones de imágenes y diagramas listadas aquí.)

c:apacit_.m
:unction y = capacit (u,w, pl,p2)
= = (p2(1)-pl(l))/2;-d = (p2(2)-p1(2))/2;
: = (p2(l)+pl(l))/2; g = (p2(2)+p1(2))/2;
x: (-1,-u]; yl [O, O];
x2 (-u,-u]; y2 = (-1,l]*w ;
x3 = [u,u]; y3 = (-1,l]*w;
X4 = (u,1]; y4 = (0,0];
xx l c*xl d*yl + f; yyl d*xl + c*yl + g;
xx2 = c*x2 d*y2 + f; yy2 d*x2 + c*y2 + g;
xx 3 = c*x3 d*y3 + f; yy3 d*x3 + c*y3 + g;
xx4 = c*x4 d*y4 + f; yy4 d*x4 + c*y4 + g;
.;:;lot(xxl,yyl)
pl ot(xx2,yy2)
:;:il ot (xx3, yy3)
plot(xx4,yy4)

drcle_.m
:unction y = circle (r,xO,yO)
i e l t = 2*pi/30; -
'.: = O:delt:2*pi;
x=r*cos(t)+xo, y= r*sin(t)+yo;
:;:ilot(x,y)

coil_b.m
fu nction dummy = coil b(n,u,w, pl,p2)
e = (p2(1)-pl(l))/2; ~= (p2(2)-p1(2))/2;
f = (p2(1)+pl(l))/2; g = (p2(2)+p1(2))/2;
k = n*2;
::ix = 2/k/2;
X = -1:0.01:1;
z k*acos (x) ;
y = w*sin(z);
84 Capítulo 2 Gráficas con MATLAB

X = X + o . 1 * ( 1-cos ( z) ) ; % X = [ -1 , X, 1] ;
x (-1,-u, u*x,u,1];
y [O,O,y,O,O];
XX = C*X - d*y + f;
yy = d*x + c*y + g;
plot(xx,yy)
coil_a.m
function dummy= coil a(n,w, pl,p2)
e (p2(1)-pl(l))/2; ~= (p2(2)-p1(2))/2;
f (p2(l)+pl(l))/2; g = (p2(2)+p1(2))/2;
X = -1:0.01:1;
t - (x+l)*pi*(n+0.5);
y -w*sin(t);
x x + 0.15*(1 - cos(t)); a=x(l); b=x(length(x));
x 2*(x-a)/(b-a) - 1;
xx = c*x - d*y + f;
yy = d*x + c*y + g;
plot(xx,yy)
damper_.m
function y = damper (w,pO,pl)
e (pl(l)-p0(1))/2;d (p1(2)-p0(2))/2;
f = (pl(l)+pO(l))/2; g = (pl(2)+p0(2))/2;
s = 0.25;
Xl = (-1,-s]; yl =(O, O];
x2 = (-s,-s]; y2 [-l.2,1.2]*w;
x3 = [s,s]; y3 [-0.7,0.7]*w;
x4 =[s,1); y4 [O, O);
txl c*xl d*yl + f; tyl d*xl + c*yl + g;
tx2 = c*x2 d*y2 + f; ty2 = d*x2 + c*y2 + g;
tx3 = c*x3 d*y3 + f; ty3 = d*x3 + c*y3 + g;
tx4 = c*x4 d*y4 + f; ty4 d*x4 + c*y4 + g;
plot ( txl, tyl)
plot( tx2, ty2)
plot( tx3, ty3)
plot( tx4, ty4)
x= ( -s, 2 * S) ; y = ( 1 . 2, 1 . 2) *W
tx = c*x - d*y + f; ty = d*x + c*y + g;
plot( tx, ty)
x= ( -s, 2 * S) ; y = ( -1 , 2, -1 . 2) *W
tx = c*x - d*y + f; ty = d*x + c*y + g;
plot( tx, ty)
line_.m
function dummy = line (pl,p2)
plot ( [pl (1) ,p2 (1) J, [pl (2) ,p2 (2) J)
resistor_.m
function dummy = resist (n,u,w, pl,p2)
% n: número de vueltas -
% u: longitud
% w: anchura
Sección 2.9. Archivos M 85

! pl: par de coordenadas para el punto de inicio


! p2: lo mismo para el punto final
~ Ejemplo>> pl =[1,0); p2=[2,0); resist (5, 0.4, 0.1, pl,p2)
(p2(1)-pl(l))/2; d (p2(2)-pl(2))/2;
: = (p2(1)+pl(l))/2; g = (p2(2)+p1(2))/2;
'Jx = 1/ (2*n) ;
X = U*(-l+Dx:2*DX:l);
:m1,n1]=size(l:length(x));
w* [O, (-ones (l,nl-2)). • (1: nl-2), O);
X = (-1,X,l];
[O,y, O];
xx = c*x - d*y + f;
y y = d*x + c*y + g;
;il ot (xx, yy)
spring_.m
f u nction dummy spring (n,u,w, pl,p2)
% n: núm. de vueltas
% u: longitud del resorte
% w: anchura del resorte
% pl: par de coordenadas para el punto de inicio
% p2: lo mismo para el punto final
% Ejemplo>> pl=[l,O); p2=[2,0);
~ spring (5,0.4, 0.2, pl,p2)
e = (p2(1)-pl(l))/2;-d (p2(2)-p1(2))/2;
: (p2(1)+pl(l))/2; g = (p2(2)+pl(2))/2;
I<. = 2*n;
X = -1:0.02:1;
z = k*x*2;
y w*cos(z) .*cos(-x*pi/2);
x x - 0.2*sin(z);
X (-1,U*X,l); y= (O,y,0) ¡
XX = C*X - d*y + f;
yy = d*x + c*y + g;
pl ot(xx,yy)
switch_.m
function y = switch (u, w, pl,p2)
% u: tamaño del interruptor
% w: altura relativa del interruptor
% pl: par de coordenadas para el punto de inicio
% p2: lo mismo para el punto final
% Ejemplo>>
% pl=[l,O]; p2=[2,0]; switch (0.4, 1 . 2, pl,p2)
e = (p2(1)-pl(l))/2; d = (p2(2)-p1(2))/2;
f = (p2(1)+pl(l))/2; g = (p2(2)+p1(2))/2;
Xl (-1,-0.5*u, 0.5*u);
yl W*[O, O, 0.5*u);
x2 [O.S*u, 1];
y2 [O, O];
xl c*xl d*yl + f;
yl d*xl + c*yl + g;
x2 c*x2 d*y2 + f;
86 Capítulo 2 Gráficas con MATLAB

y2 = d*x2 + c*y2 + g;
plot ( xl, yl)
plot( x2, y2)
box_.m
function dummy = box (hi, pl,p2)
% hi=altura del cuadro; pl y p2 son coordenadas del punto
% central del lado izquierdo de la pared del cuadro y p2 lo mismo
para el derecho.
% Ejemplo >> pl = [0,0); p2 = [1,0); box_(0.5,pl,p2)
%
c (p2(1)-pl(l))/2; d = (p2(2)-p1(2))/2;
f (p2(l)+pl(l))/2; g = (p2(2)+pl(2))/2;
X [ -1 1 1 -1 -1] i y = hi * [ -1 -1 1 1 -1) ¡
xxl = c*x - d*y + f; yyl = d*x + c*y + g;
plot (XXl, yyl)
human_.m
function y = human_(pl, p2, Body,
Rarml, Rarm2, Larml, Larm2, ...
Rlegl, Rleg2, Llegl, Lleg2 )
%10,10,30,30,90 30 90 90 20
xO=pl(l);
yO=pl(2);
xl=p2(1);
yl=p2(2)
c (xl-x0)/2; d = (yl - y0)/2;
f = (xl+x0)/2; g = (yl + y0)/2;
M = [c,-d; d,c)/3; F = [f,g)';
thb = Body/180*pi; % ángulo del cuerpo
thrhl=Rarml/180*pi; % theta-1 del brazo derecho
thrh2=Rarm2/180*pi; % theta-2 del brazo derecho
thlhl=Larml/180*pi; % theta-1 del brazo izquierdo
thlh2=Larm2/180*pi; % theta-2 del brazo izquierdo
thrgl=Rlegl/180*pi; % theta-1 de la pierna derecha
thrg2=Rleg2/180*pi; % theta-2 de la pierna derecha
thlgl=Llegl/180*pi; % theta-1 de la pierna izquierda
thlg2=Lleg2/180*pi; % theta-2 de la pierna izquierda
t = 0:0.25:6.3;
% cuerpo
bl=[O,O)';
b2=bl + 1.S*[sin(thb), cos(thb)J ';
b3=b1 + 2*[sin(thb), cos(thb)) ';
b=[bl,b2,b3) i
[m,n)=size(b); w=ones(l,n); b = M*b+[f*w;g*w];
plot(b(l, :) , b(2, :))
% cabeza
b4=b3+1.*[sin(thb), cos(thb)) ';
xHd = l.*cos(t)+b4(1);
yHd = l.*sin(t)+b4(2);
b = [xHd; yHd) ;
w=ones ( 1, n) ;
[m,n]=size(b); w=ones(l,n); b M*b+[f*w;g*w);
plot(b(l, :) , b(2, :))
ción 2.9. Archivos M 87

::razo derecho/mano
rh1=b2;
rh2=rhl + 1.S*[cos(thrhl), sin(thrhl))';
rh3=rh2 + 1.S*[cos(thrh2), sin(thrh2))';
rh4=rh3 + 0.2*[cos(thrh2), sin(thrh2)) ';
b=[rhl,rh2,rh3);
w=ones(l,n);
[m,n)=size(b); w=ones(l,n); b M*b+[f*w;g*w)
plot(b(l, :) , b(2, :))
xrp = 0.2*cos(t)+rh4(1);
y rp = 0.2*sin(t)+rh4(2);
b= [xrp;yrp);
w--ones ( 1, n) ;
[m,n)=size(b); w=ones(l,n); b M*b+[f*w;g*w);
plot (b ( 1, : ) , b ( 2, : ) )
~ razo izquierdo/mano
l hl=b2;
l h2=lhl + 1.5*[-cos(thlhl), sin(thlhl))';
l h3=lh2 + l.5*[-cos(thlh2), sin(thlh2)) ';
l h4=lh3 + 0.2*[-cos(thlh2), sin(thlh2)) ';
b=[lhl,lh2,lh3) ;
=ones(l,n);
[m,n)=size(b); w=ones(l,n); b M*b+[f*w;g*w)
plot (b (l, : ) , b ( 2, : ) )
xlp = 0.2*cos(t)+lh4(1);
y lp = 0.2*sin(t)+lh4(2);
;:; = [xlp;ylp) ;
w=ones ( 1, n) ;
(m,n)=size(b); w=ones(l,n); b M*b+[f*w;g*w);
plot (b ( l, : ) b ( 2, : ) )
~p ierna derecha/pie
rg1=b1;
rg2=rgl + l*[cos(thrgl), - sin(thrgl)) ';
rg3=rg2 + 1.5*[cos(thrg2), - sin(thrg2)] ';
rg4=rg3 + 0.2*[cos(thrg2), -sin(thrg2)) ';
b=[rgl,rg2,rg3);
w=ones(l,n);
[m,n)=size(b); w=ones(l,n); b M*b+[f*w;g*w);
plot (b(l,:), b(2,:))
xrf = 0.2*cos(t)+rg4(1);
yrf = 0.2*sin(t)+rg4(2);
b=[xrf; yrf);
w=ones ( 1, n) ;
[m,n]=size(b); w=ones(l,n); b M*b+(f*w;g*w);
plot (b ( 1, : ) , b ( 2, : ) )
% pierna izquierda/pie
lgl=bl;
lg2=lgl +l.* [-cos(thlgl), -sin(thlgl)] ';
lg3=lg2 + l.5*[-cos(thlg2), -sin(thlg2)] ';
lg4=lg3 + 0.2*[-cos(thlg2), -sin(thlg2)) ';
b=[lgl,lg2,lg3];
w=ones(l,n);
[m,n)=size(b); w=ones(l,n) b M*b+[f*w;g*w];
88 Capítulo 2 Gráficas con MATLAB

plot (b(l,:), b(2,:))


xlf = 0.2*cos(t)+lg4(1);
ylf = 0.2*sin(t)+lg4(2);
b = [xlf ;ylf);
[m,n)=size(b); w=ones(l,n); b M*b+ [f*w;g*w);
plot(b(l, :) b(2, :))
I

two_eyes.m
function f=two eyes(phi,eyeangle, xO,yO,zO,width)
% Ejemplo de enunciado de invocación:
% clf;hold on; Two-eyes(l20,45,0,0,0,0.2) ;view(120,30)
% axis( [-1 1 -1 1 -1 1]); ylabel('y'); hold off
% phi dirección de la cara. Grados.
% Si es O, la cara está en el plano x - z hacia y positiva
% eyeangle: dirección de los ojos. Grados .
eyr = O. 2;
angleO=eyeangle;
x=[-l,0,1,0,-1]; z=[o, 0.3,0,-0.3, O); y=[o,o,o,o,o];
dth=pi/10; th=o:dth:2*pi;
zc=cos(th)*eyr; xc=sin(th)*eyr; yc=zeros(size(xc));
th=O: dth: lO*pi;
ze=cos(th)*eyr.*(1.0- 0.03*th); % ojo
xe=sin(th)*eyr.*(1.0 - 0.03*th);
angle = angleO/lBO*pi;
xd=xe/2 + eyr*cos(angle)/2;
zd=ze/2 eyr*sin(angle)/2;
b = eyr·2 - xd. ·2 - zd. ·2;
yd=sqrt((eyr+0.01) ·2 - xd. ·2 - zd. ·2);
xcL=xc-0.25; xcR=xc+0.25;
yc=yc; zc=zc;
xdL=xd-0.25; xdR=xd+0.25;
yd=yd*0.2; zd=zd; xdR=xd+0.25;
xns=[O,O,O]; yns=[o, 0.1, O); zns=[0.1,-0.3,-0.3); % nariz
s=width/0.2/2; %factor de escala
[xl,yl, zl]=rotz (xcL,yc,zc, phi);
plot3(xl*S+xO,yl*S+yO,zl*S+zO);
[x2,y2,z2)=rotz (xcR,yc,zc, phi);
plot3(x2*S+xo,y2*S+yO,z2*S+zO);
[x3,y3,z3]=rotz (xdL,yd,zd, phi);
plot3(x3*S+xo,y3*S+yO,z3*S+zO);
[x4,y4,z4)=rotz (xdR,yd,zd, phi);
plot3(x4*S+xo,y4*S+yO,z4*S+zO);
[x5,y5,z5)=rotz (xns,yns,zns, phi);
plot3(x5*S+xO,yS*S+yO,z5*S+zO);
axis ( ' off ' )
arrow_.m
function dummy = arrow_(w, pl,p2)
% w: anchura de la flecha
% pl y p2: pares de coordenadas de puntos de inicio y fin
c (p2(1)-pl(l))/2; d (p2(2)-p1(2)~/2;
f (p2(1)+pl(l))/2; g = (p2(2)+p1(2))/2;
X [-11); y= [0,0];
Sección 2.9. Archivos M 89

.XX l = C*X - d*y + f; yyl = d*x + c*y + g;


;: _o t(xxl,yyl) '
= (0.5, 1]; y w* [O. 5, O];
:cxl = c*x - d*y + f¡ yyl = d*X + c*y + g¡
;: .... o t (xxl, yyl)
= (0.5, 1]; y= w*(-0.5,0];
xx1 = c*x - d*y + f; yyl = d*x + c*y + g;
;: o t (xxl, yyl)

arrow_dot.m
=:inction dummy= arrow dot(w, pl, p2)
w: anchura de la flecha
pl y p2: pares de coordenadas de puntos de inicio y fin
= (p2(1)-pl(l))/2; d (p2(2)-p1(2))/2;
: = (p2(1)+pl(l))/2; g = (p2(2)+p1(2))/2;
= (-11]; y= [0,0];
xxl = c*x - d*y + f; yyl = d*x + c*y + g;
;::o t(xxl,yyl,' :')
= [ o •5 t 1] Í y = W* [o • 5 t o l Í
xxl = c*x - d*y + f; yyl = d*x + c*y + g;
;::ot( xxl,yyl,' :')
= [0.5, 1]; y= w*(-0.5,0];
xxl = c*x - d*y + f; yyl = d*x + c*y + g;
~-ot (xxl,yyl,' :')

t_.m
=·.mction y = insect_(pl,p2)
ol d on
x: = pl(l); yO=p1(2);
: = p2(1); yl=p2(2);
(xl - x0)/2; d = (yl y0)/2;
: = (Xl + X0)/2¡ g = (yl + y0)/2¡
L = (-13 -18 -20 -20 -18 -13 -8 -6 O O -6 -13]/50;
L = (13 O -10 -40 -47 -50 -45 -38 -17 -10 2 13]/50~
xx = c*xwL - d*ywL + f;
ry = d*xwL + c*ywL + g;
xxb = -c*xwL = d*ywL + f;
b = -d*xwL + c*ywL + g;
~:ot (xx,yy); plot(xxb,yyb)
x:ieck = (-13 O 13]/50;
;. eck = (13 14 13]/50;
xx = c*xneck - d*yneck + f;
ry = d*xneck + c*yneck + g¡
~:.o t(xx,yy)
x.~L= [ -13 -12.5 -10]/50;
·~L= (13 20 27]/50;
XX c*xhL - d*yhL + f;
yy d*xhL + c*yhL + g; plot(xx,yy)
XX -c*xhL + d*yhL +f;
~'Y -d*xhL + c*yhL + g; plot(xx,yy)
xcop = (-5 o 7]/50;
90 Capítulo 2 Gráficas con MATLAB

ytop = (30 32 30)/50;


xx = c*xtop - d*ytop + f;
yy = d*xtop + c*ytop + g; plot(xx,yy)
t = 0:0.5:pi*2;
xeyeL = ( -.08 + .03*cos(t))*2;
yeyeL = ( .29 + .03*sin(t))*2;
xx = c*xeyeL - d*yeyeL + f;
yy = d*xeyeL + c*yeyeL + g; plot(xx,yy)
xeyeR = (.10 + .03*cos(t))*2;
yeyeR = (.30 + .03*sin(t))*2;
xx = c*xeyeR d*yeyeR + f;
yy = d*xeyeR + c*yeyeR + g; plot(xx,yy)
plot'(xeyeR, yeyeR)
xantL=(-10 -15 18 -21)/50;
yantL=[27 31 37 38)/50;
xx = c*xantL - d*yantL + f;
yy = d*xantL + c*yantL + g; plot(xx,yy)
xantR=[25 19 13)/50;
yantR=[41 39 27)/50;
xx = c*xantR - d*yantR + f;
yy = d*xantR + c*yantR + g; plot(xx,yy)
hold off

larm2=90

larm1=30

Leyenda

Figura 2.36 Explicación de los argumentos de human

FM 2-5 Ejemplo de dibujo de imágenes


Objetivo: dibujar la figura 2.33.
Sintaxis: kidsl
kidsl.m
Problemas 91

~ol d off, clear, clf


=.xi s((-5 14 -5 14))
::old on
=.xi s ( 'square')
=.xi s('off')
xo=-1;x1=2;yo=2;y1=2;
3ody=lO; % ángulo del cuerpo, véase la figura 2.36.
?..a rml=lO; Rarm2=30;
:..arm1=30; Larm2=9o;
~:e g1=30; Rleg2=90;
~-e g1=90; Lleg2=20;
~:.una n ([xO,yO), [xl,yl), Body, Rarml,Rarm2,Larml,Larm2,
- Rlegl,Rleg2,Llegl,Lleg2)
.:mian ( [2, O), [5, 1) , Body, Rarml, Rarm2, Larml, Larm2, ...
- Rlegl,Rleg2,Llegl,Lleg2)
-~an ( (3, 1), (6, 1), -Body, Rarml, Rarm2, Larml, Larm2, . ..
- Rlegl,Rleg2,Llegl,Lleg2)
-..:.. a n ( (-3,1), ( - 1. ,1), Body*l.1, · Rarml,Rarm2,Larml,Larm2,
- Rlegl,Rleg2,Llegl,Lleg2)
.:..."'T\a n ( [ - 4, 4) , [ - 2. , 4) , Body, Rarml, Rarm2, Larml, Larm2, .. .
- Rlegl,Rleg2 , Llegl,Lleg2)
_·=ia n ([7,0.5], (10.5,0.5), Body, - Rarml,-Rarm2*2,Larml,Larm2,
_ =ia n-((9.5, - 2), (13,-2), 2*Body, -Rarml,-Rarm2,Larml,Larm2,
- Rlegl,Rleg2,Llegl,Lleg2)
X!.abel('Llegan siete niños ruidosos')

. t 2-6 Demostración de dibujo de insectos


~etivo: ilustrar el trazado de patrones insectiles
taxis: insect t
t_tm
prueba de insecto
=:ear , clf, hold on
:x:.s( (-O, 10, - o , 10))
:..s ( ' square')
==::: k =1:20
::: = rand(size(1 : 6));
:::
1
1 : 4 ) =r ( 1 : 4 ) * 1 O;
pl = [r(l), r(2));
;;2 = [r(1)+(2*r(5)-1)*2, r(2)+(2*r(6)-1)*2);
:.~s ect_(pl,p2)*2;
.::.-::.
- _s(' off')

PROBLEMAS
las siguientes tareas de trazado de figuras, imprima leyendas de ejes y leyendas para
licar el significado de cada curva si hay más de una. También deberá imprimir el
de la figura en cada gráfica que elabore. Utilice labelx, labely, ti tle,
-=x:., gtext, pero no acabe sus figuras escribiendo cosas a mano.
92 Capítulo 2 Gráficas con MATLAB

(2.1) Grafique las siguientes funciones en el dominio que se indica:

= sen(x) , 0 ~ x ~ 4 7t
y 1 + cos(x)

y-- l 2' O< <4


_x_
1 +(x-2)

y= exp(-x).i, O ~x ~JO

(2.2) Grafique y= tan(x) en el dominio gráfico O~ x ~ 1O, -1 O~ y~ 1Ocon la mayor exactitud posible.
Explique qué esfuerzo especial es necesario para hacer esto.

(2.3) Grafique las dos funciones que siguen en la misma gráfica con un solo comando p 1 o t:

= (x - 1)(x - 2)(x - 4)(x - 5)


0
< <6
y (3 - 1)(3 - 2)(3 - 4)(3 - 5)' - X -

= (x-2)(x-3)(x-4)(x-5) < < 6


0
y (1-2)(1-3)(1-4)(1-5)' _x_

Repita la misma gráfica con dos comandos plot y hold on.

(2.4) Grafiquey = cos(m cos- 1(x)) llamados polinomios de Chebyshev para m = 1, 2, ... , 8 en-1 ~x ~ 1
en dos conjuntos de cuatro gráficas empleando subplot.

(2.S) Las siguientes funciones tienen singularidades; grafiquelas por separado en el dominio que se
indica:

y= tan(x)Jx0 .J, O< x ~ 5

y= 1f70<x~ 1
l -x2

(2.6) Una curva se expresa mediante

x = sen(- t) + t,y = 1 - cos(-t)

grafique la curva en el plano x-y para O ~ t ~ 4n.

(2.7) Suponga que z = x + iy es una línea en el dominio complejo, donde i = r-:í. Demuestre
gráficamente que w = l/z se convierte en un círculo para cualquier línea. Sugerencia: Grafique
w para y= ax+ b con tres conjuntos de valores de a y b:
Problemas 93

a= O, b = 1
a= l,b= 1
a= 100, b=O

(2.8) Grafique la siguiente función con mesh:

f(x,y) = 0.2 cos x +y exp(-x2-y\ -3 ~ x ~ 3,-3 ~y~ 3

(2.9) Utilce con tour para graficar la función implícitaf(x, y)= O donde

f(x,y) = y2 + x exp(y)- tanh(x), O~ x ~ 5


(2.10) Dos parámetros de diseño están acotados por O< x < 5 y O< y< 5. El costo del producto es

J=x2 - 8x + / - 6y - O. lxy + 50
Utilice la gráfica de malla para encontrar aproximadamente los parámetros óptimos que minimi-
zan el costo, así como el costo máximo.

2.11) Repita el problema 2.1 O con una gráfica de contorno.

2.12) Dibuje su propia carita feliz con nariz y cabello.

2.13) Utilice las órdenes de la tabla 2.2 para dibujar un diagrama eléctrico de la figura 10.1 o de la
figura 1O. 6.

14) Dibuje un patrón aleatorio de diez insectos con insect_, con las cabezas hacia arriba.

IS) Dibuje dos personas boxeando con human_ .

16) Dibuje una bicicleta con un ciclista utilizando human_.

17) Elabore un programa gráfico interactivo modificando el guión del listado 2.31 de modo que: (a)
se acumulen múltiples puntos haciendo clic en el botón izquierdo del ratón hasta que se oprima
el botón central, y (b) conforme los puntos se acumulen, se marquen en la pantalla con 'x' y se
conecten mediante líneas. La gráfica se mostrará sólo después de haber hecho clic dentro del
cuadro que está en la esquina inferior izquierda.
Capítulo 3

Álgebra lineal

Son dos las razones principales por las que conviene aprender álgebra lineal en esta etapa tan
temprana del estudio de los métodos numéricos. En primer lugar, el álgebra lineal es funda-
mental para Jos métodos numéricos, así que cuanto más pronto la aprendamos, más fácil nos
resultará el resto del estudio de Jos métodos numéricos. En segundo lugar, las capacidades de
MA TLAB se basan en las operaciones de matrices y vectores; por tanto, podremos utilizar
mucho mejor MA TLAB si aprendemos álgebra lineal.
El objetivo de este capítulo es comprender los fundamentos del álgebra lineal y poder
resolver ecuaciones lineales, sobre todo con MA TLAB. Sin embargo, esto requiere cuatro
áreas de estudio. Primero, debemos aprender a expresar las ecuaciones lineales y sus operacio-
nes básicas en notación de matrices y vectores. Segundo, debemos entender las órdenes de
MATLAB que trabajan con ecuaciones lineales en notación de matrices. Tercero, debemos
entender los problemas que son dificiles o imposibles de resolver. La cuarta área incluye temas
adicionales que amplían la comprensión y que ayudan a aplicar el álgebra lineal.

3.1 MATRICES Y VECTORES


En notación matemática, las matrices se encierran entre paréntesis o corchetes y siguen ciertas
reglas matemáticas. En MA TLAB, en cambio, las matrices se escriben sin paréntesis ni
corchetes. Aunque en MA TLAB los términos matriz y arreglo son sinónimos, debemos estar
conscientes de si un arreglo se está utilizando para una matriz en matemáticas o simplemente
como variable de arreglo. En el presente capítulo hablaremos de matrices y vectores en su
sentido matemático.
Una matriz es un arreglo rectangular de números encerrados entre corchetes o
paréntesis:

[ b1,1
b2,I
b1,2
b2,2
b1,
b2,n
n] (3.1.1)
. "
bm,I bm,2 bm ,n
94
Sección 3.1. Matrices y vectores 95

La matriz anterior es una matriz de m por n. Observe que el primer subíndice de una matriz
cambia en la dirección vertical y el segundo lo hace en la dirección horizontal. Una matriz se
representa con un símbolo; por ejemplo,

:~::
B
[ bm ,I bm ,2
(3.1.2)

Una vez definida B como la ecuación 3.1.2, las ecuaciones matemáticas pueden expresarse en
términos de B sin tener que escribir toda la matriz. La definición puede abreviarse así:

Los vectores son formas especiales de matrices. Si m>l pero n=l, B se convierte en

B = [ ::::
bm, I
l
con una sola columna, y se denomina vector de columna. Por otro lado, si m=l y n> 1, la matriz
se convierte en

que sólo tiene una fila, y se denomina vector de fila. Cuando sólo hay una columna o sólo una
fil a, no es necesario utilizar dos subíndices. De hecho, omitimos el segundo índice de los
elementos de un vector de columna y el primer índice de los elementos de un vector de fila, de
modo que los vectores de columna y de fila se escriben como

¡::1
B (3.1.3)

(3.1.4)

respectivamente.
En otro caso especial de m = n = 1, B es una matriz de 1 por 1 y puede escribirse como

o simplemente
96 Capítulo 3 Álgebra lineal

B = [b]

La matriz B de 1 por 1 se denomina escalar, y es lo mismo que B = b.


A continuación definimos los nombres de algunas matrices y vectores especiales:

MATRIZ CUADRADA: Una matriz con m = n.

MATRIZ NULA: Todos los elementos de la matriz nula son cero:

A= oO oO O
[o
º] (3.15.)
o o
Las matrices nulas se definen en MATLAB con zeros. Con A = zeros {m, n}, A se
convierte en una matriz nula de m por n. A = zeros {n} devuelve una matriz nula den por n.

MATRIZ IDENTIDAD: Una matriz cuadrada en la que todos los elementos diagonales son la
unidad y el resto de los elementos son cero. Una matriz identidad se denota por/, o sea

I =
[
l o
O 1 O º] (3.1.6)
o o 1
La orden de MATLAB para definir una matriz identidad es eye. Con A = eye {n}, A se
convierte en una matriz identidad de n por n.

MATRIZ TRANSPUESTA: La transpuesta de la matriz A= [a;j] es A'= [aj,i] (iyjse intercambian).


Por ejemplo:

A = [~ ~], At = [i ~] (3.1. 7)

(3.1.8)
B = [;] , Bt = [1 7]

La transpuesta de una matriz se define en MA TLAB con el operador apóstrofo.

MATRIZ DE PERMUTACIÓN: Matriz que se obtiene intercambiando las filas de una matriz
identidad. Por ejemplo, si intercambiamos las filas 1 y 3 de la ecuación 3.1.6, obtenemos una
matriz de permutación:

(3.1.9)
Sección 3.1. Matrices y vectores 97

Suma y resta de matrices: Podemos sumar una matriz a otra o restarla de otra si ambas
tienen el mismo tamaño (mismo número de columnas y de filas). Como los vectores son una
forma especial de matrices, las mismas reglas se aplican a los vectores. La suma y resta de dos
matrices
A = [ai,;], B = [bi,;]

del mismo tamaño está definida por


C=A±B (3.1.10)

donde C = [Cij] es ,una matriz con

Ejemplo 3.1

Dos matrices cuadradas y dos vectores se definen así:

[! 21 4]2 '
[~ ~]
3
A= B= 3
1 3 1

X = [~] · y
m
Calcule A + B, B - A, x +y y x - y.

Solución
Los cálculos son:

1+7 2+3 4+1]


A+B= [ 3+2 1+3 2+5
5
4 7
5]
A - B =
4+8

[!=~
4-8 1-1 3-6
1+1

i=~ ~=~]
3+6 2 9
-1
-2
o
3
-3
-3
l
H y [Hfl ~l = [
98 Capítulo 3 Álgebra lineal

X - y =
[1-3] ¡-2]
4-9
2-4
= -5
-2

Multiplicación: Suponga que B y C son matrices. Si el número de columnas de A y el


número de filas de B son idénticos, las matrices pueden multiplicarse como

C=AB

donde C = [Cij] es una matriz que representa el resultado de la multiplicación. Los elementos
de C están relacionados con los de A y B por

· · = r.
el,j k a·,1 1c bk, j · (3.1.11)

El número de filas de Ces igual al de A, y el número de columnas de Ces igual al de B. En


otras palabras, si A es una matriz de p por q y B es una matriz de q por r, entonces Ces una
matriz de p por r. Obviamente, si A y B son matrices cuadradas del mismo tamaño, C también
será una matriz cuadrada del mismo tamaño.
En general, el producto AB no es igual a BA. Si AB = BA, se dice que las matrices A y B
son conmutativas.

División: La división de una matriz entre otra está relacionada con la obtención de la
solución de una ecuación lineal en forma de matriz. Se darán más detalles en la sección 3 .4.

Ejemplo 3.2

Calcule los siguientes productos:

(a)

[~ nm
(b)

[2 1 7]
[~ ~]
(c)

[~
1
5 ~] ufl
'
Sección 3.1. Matrices y vectores 99

(d)

Solución
(a)

=
[
lx5+2xll
4x5+3xl
Ox5+2xl = [~ l
(b)

[2 1 7] U~] =[2xt+tx4+7x0 2x2+1x3+7x2]

= [ 6 21]

(e)

~]
[~ ~ ;] [~ 2
= [ 8 X 1+ 1 X 4 + 3 X 0
lx1+5x4+2x0
8 X 2 + 1 X 3 + 3 X 2]
lx2+5x3+2x2

= [ 12 25]
21 21
(d)

[~ ~] [~
1 3] [lx8+2xl 1 X 1+2 X 5 1 X 3 + 2 X 2]
5 2
= 4x8+3xl 4x1+3x5 4x3+3x2
Ox8+2xl Ox1+2x5 Ox3+2x2

= [!~ ~! 1~]
2 10 4

Ejemplo 3.3
1
Calcule Ax, AB, BA y x'A utilizando las definiciones de matrices y vectores dadas en
el ejemplo 3.1.
100 Capítulo 3 Álgebra lineal

Solución
He aquí los cálculos:

AB = [~4 i ~] [~ ~ ~]
1 3 8 1 6
lx7+2x2+4x8 lx3+2x3+4xl 1 X 1 + 2 X 5 + 4 X 6]
3x7+1x2+2x8 3x3+1x3+2xl 3xl+l x 5+2x6
[ 4x7+1x2+3x8 4x3+1x3+3xl 4xl+l x 5+3x6
43 13 35]
39 14 20
[
54 18 27

BA =
7 3 [1 2 4] l
[28 31 65 43 11 32 [ ;~35 ~~ ;~]
23 52
(3.1.12)

(Notice that AB is not equal to BA.)

Ax [i : ~] [~] ~ [
1 X 1+2 X 4 + 4 X 2]
3xl+lx4+2x2
4xl+lx4+3 x 2 [::J
xtAt=[l 4 2] [~ i ~1
. 4 2 3
= (1 1+4 X 2 + 2 X 4 1 X 3 + 4 X 1+2 X 2 1 X 4 + 4 X 1 + 2 X 3]
X
= (17 11 11]
Transpuesta de un producto de matrices: La transpuesta de un producto de matrices es
el producto de las transpuestas de las matrices en orden invertido. Por ejemplo, (AB/ = B1A1 y
(AB .. G) 1 = G1••B 1A1•

3.2 OPERACIONES DE MATRICES Y VECTORES EN MATLAB


En MATLAB, las matrices, los vectores de columna y los vectores de fila se introducen siguiendo
las mismas reglas que los arreglos, mismas que se explicaron en el capítulo 1. Por ejemplo, Ja matriz

se introduce en MATLAB con


Sección 3.2. Operaciones de matrices y vectores en MATLAB 101

b=[l,6;5,2]; "

' n vector de columna o de fila se puede definir como una matriz de una columna o una fila,
pectivamente; por ejemplo,

e = [ l, 2]; (vector de fila)


d = [ 1; 7); (vector de columna)

Podemos transponer una matriz en MA TLAB colocando un apóstrofo después de la


triz; por ejemplo, con

e = b'
matriz e se convierte en la transpuesta de la matriz b.
Una matriz identidad de m por m se genera con
s = eye(m)

De forma similar, una matriz nula de m por mes

s = zeros(m)

·na matriz nula de m por n se genera con s z eros (m, n l . Escribimos una matriz de m por
que consiste sólo en la unidad así:
w = ones(m,n)

Si a es una matriz que ya existe, zeros (size (a)) y ones (size (a)) producen, respecti-
amente, la matriz nula y la matriz unidad del mismo tamaño que a. Generamos una matriz
aleatoria m por n con r and (m, n) (la sección 1.5 contiene mayores detalles sobre los números
aleatorios). Una matriz especial, llamada matriz de Hilbert, se genera con hilb (m) (véase el
ejemplo 3.6).
La multiplicación de matrices en MA TLAB se expresa con el operador de multiplicación;
por ejemplo,

b (1 2; 4 3; o 2) i
d [5; l) i
g b*d

produce
g
7
23
2

que corresponde al inciso (a) del ejemplo 3.2. La suma y la resta de matrices es igual que en el
caso de arreglos bidimensionales.
102 Capítulo 3 Álgebra lineal

3.3 MATRIZ INVERSA


Ahora que aprendimos a multiplicar matrices tanto mediante cálculos manuales como con
MA TLAB, podemos estudiar el concepto de matrices inversas. Cuando dos matrices cuadradas
A y B satisfacen
AB =loBA = 1 (3.3.1)

donde 1 es la matriz identidad, A y B están en la relación inversa; es decir, A es el inverso de B


y Bes el inverso de A. Por ejemplo,

A = [1 6] B = [-0.0714 0.2143 ]
5 2 ' 0.1786 -0.0357

están en la relación inversa entre sí, es decir

AB = [1 6] [-0.0714
5 2 0.1786
0.2143 ]
-0.0357 [~ ~]
y

BA = [-0.0714
0.1786
0.2143 ] [ 1 6] = [ 1
-0.0357 5 2 o 1
º]
La inversa de una matriz M se escribe 1'r1 1; por tanto, la relación anterior entre A y B puede
escribirse como A = B- 1 y B = A- 1. Así, la ecuación 3 .3 .1 se puede escribir como

AA- 1 = Jy A- 1 A =I (3.3.2)

Sólo las matrices cuadradas tienen inversos.


El inverso de un producto de matrices es igual al producto del inverso de las matrices en
el orden inverso. Por ejemplo, si W = ABC... G, donde A, B, ... G son matrices cuadradas,
entonces

w-1 = G-1 ... c-I B-1 A-1 (3.3.3)

En MATLAB, el inverso de M se calcula con inv (M). Por ejemplo, sea


A= [l 6; 5 2)

entonces,
B inv(A)

produce
Sección 3.4. Ecuaciones lineales 103

B =
-0.0714 0.2143
0.1786 -0.0357

Para asegurarse de que B es el inverso de A, calculamos tanto AB como BA como sigue:

A*B
ans
1.0000 0.0000
0.0000 1.0000
B*A
ans
1.0000 o.o
0.0000 1.0000

El comando inv calcula el inverso de cualquier matriz cuadrada excepto cuando es


singular. Si MA TLAB se niega a calcular el inverso, sabremos que la matriz es singular. No
obstante, merece la pena aprender a crear un ejemplo de matriz singular. En una matriz
singular, al menos una fila (o columna) puede expresarse restando o sumando otras filas (o
columnas); por tanto, para crear una matriz singular de 3 por 3, escribimos la primera y la
segunda filas eligiendo números arbitrarios, pero escribimos la tercera fila como la primera fila
multiplicada por una constante más la segunda fila multiplicada por otra constante. El resultado
es una matriz singular. Si ninguna fila (o columna) puede expresarse sumando o restando otras
filas (o columnas), todas las filas (o columnas) son linealmente independientes y la matriz no
es singular.

3.4 ECUACIONES LINEALES


Consideremos un conjunto de m ecuaciones con n incógnitas dado por

a1,1x1 + a1,2X2 + a1,:>X3 + · · · +a¡, nXn =y¡

a2,1x1 + a2,2X2 + a2,:>X3 + · · · + a2, nXn = Y2

(3.4.1)
a,,,,¡x¡ + am,2X2 + am,:>X3 + · · · + a,,,, 1iX11 =y,,,

donde a;j son coeficientes conocidos, x; son incógnitas y y; son términos conocidos que se
denominan términos no homogéneos (o términos fuente).
Las ecuaciones lineales anteriores se pueden expresar de fonna compacta como

Ax=y (3.4.2)

donde A, x y y están definidos, respectivamente, por


\

104
•:,! ·· a1,n 1 Capítulo 3 Álgebra lineal

1am ,I am,n

X=[]
y=[]
La ecuación 3.4.2 también puede expresarse en la forma

xA'=y' (3.4.3)

donde A1 es una matriz de n por m y x y y' son vectores de fila.


Las ecuaciones lineales expresadas por la ecuación 3.4.2 se pueden agrupar en los
siguientes tres casos:

Casol:m=n
Caso 2: m<n (ecuación subdeterminada)
Caso 3: m>n (ecuación sobredeterminada)

El caso 1 es el más común, con el número de ecuaciones igual al número de incógnitas. En el


caso 2, el número de ecuaciones es menor que el de incógnitas y tenemos lo que se conoce
como problema subdeterminado. En el caso 3, el número de ecuaciones es mayor que el
número de incógnitas y tenemos un problema sobredeterminado. Esto ocurre en el ajuste de
curvas y lo veremos en el capítulo 8.
En el caso 1, la matriz es cuadrada. Para obtener la solución en MATLAB, escribimos

X = A\y
Un mecanismo equivalente es

x = inv(A)*y
Sin embargo, el primer método es más eficiente desde el punto de vista computacional (el
tiempo de cómputo del segundo método en MATLAB es aproximadamente 50% más largo que
para el primero).
Si la ecuación se escribe en la forma de la e,.cuación 3.4.3, la solución se obtiene en
MATLABcon
Sección 3.4. Ecuaciones lineales 105

z = y' /A'
donde y· es un vector de fila y z también se convierte en un vector de fila. Las siguientes
expresiones producen el mismo resultado:
inv(A)*y
A·(-l)*y
y' *inv (A')

Los resultados de las primeras dos están en forma de vector de columna, mientras que el de la
!tima está en forma de vector de fila.

Ejemplo 3.4

Utilice MA TLAB para obtener la solución de


Ax=y
donde

Solución
Sea
A= [ 3 2; 1 - 1);
y = (-1, 1] I j

Entonces,
X= A\y

produce
X
0.2000
-0.8000

También, si escribimos
z = y' /A'
Obtendremos la misma respuesta en forma de vector de fila como

z =
0.2000 -0.8000
106 Capítulo 3 Álgebra lineal

Ejemplo 3.5
En la figura 3. l(i) se muestra una red eléctrica conectada a tres terminales con voltajes
conocidos. Obtenga los voltajes en los nodos a, b y c.

2ohms 4ohms 3ohms


ov
3ohms Sohms

3ohms

(ij Una red eléctrica de resistorH

e
(ii) Un nodo conectado a resistor••
Figura 3.1 Redes eléctricas

Solución
Primero haremos referencia a un nodo hipotético a que está conectado a b, e, · · ·, k
como en la figura 3. l(ii). La corriente eléctrica i del nodo a al b, denotada por iab, está
relacionada con los voltajes mediante

ea - eb
Íab =- -- (A)

donde rab es la resistencia entre a y b, y ea y eb son voltajes. El total de las corrientes


que salen del nodo a debe ser cero:

L: Íaj =O (B)
j=b,c,..k

o lo que es lo mismo, si introducimos las rela~iones entre la corriente y los voltajes


indicadas por la ecuación A,
Sección 3.5. Problemas sin solución 107

( .
L"
J=b ,c, .. k
ea - ej
Ta j
) =0
(C)

La ecuación anterior se aplica a cada nodo en que se desconoce el voltaje. Para la red
de la figura 3. l(i), escribimos las tres ecuaciones siguientes:

ea - 20 ea - eb ea - ec
2 + 4 + 3 =O
eb - ea eb - o eb - ec
4 +-3-+ 5 =O
ec - 5 ec - ea ec - eb - o
3 + 3 + 5 -

o, de forma equivalente,

La solución de las ecuaciones en MA TLAB es la siguiente:


Listado 3.1
clear
a(l,1) = 1/2 + 1/4 + 1/3; a(l,2) = -1/4; a(l,3) = -1/3;
a(2,l) = a(l,2); a(2,2) = 1/4 + 1/3 + 1/5; a(2,3) = -1/5;
a(3,1) = a(l,3); a(3,2) = a(2,3); a(3,3) = 1/3 + 1/3 + 1/5;
y(l) = 20/2; y(2) = O; y(3) = 5/3;
X = a\y' i
x'
13.3453 6.4401 8.5420

En los resultados anteriores, los valores son, respectivamente, ea, eb y ec en volts.

3.5 PROBLEMAS SIN SOLUCIÓN


Un conjunto de ecuaciones lineales no siempre puede resolverse numéricamente. Los
siguientes tres conjuntos de ecuaciones son ejemplos sencillos pero importantes:
108 Capítulo 3 Álgebra lineal

Caso (A):
-X+ y= 1
(3.5.1)
-2x + 2y = 2

Caso (B):
-x +y= 1
(3.5.2)
-X+ y= 0

Caso (C):
X+ 2y=-2

-x +y= 1 (3.5.3)
2x-y=O

Las ecuaciones de cada uno de estos conjuntos se grafican en la figura 3.2.

Número infinito Ninguna solución Ninguna solución


de soluciones

Caso A Caso B Caso C

Figura 3.2 Tres conjuntos de ecuaciones lineales que no tienen solución

En el caso (A), la segunda ecuación es 2 por la primera, de modo que son matemáticamente
idénticas. Cualquier punto (x, y) que satisfaga una ecuación también será una solución de la
otra; por tanto, el número de soluciones es infinito. En términos más generales, si una ecuación
es un múltiplo de la otra o puede obtenerse sumando o restando otras ecuaciones, se dice que
esa ecuación es linealmente dependiente. Si ninguna de las ecuaciones es linealmente
independiente, las ecuaciones son linealmente independientes.
En el caso (B), las dos ecuaciones son líneas paralelas que nunca se intersecan, por lo que
no existe una solución. Un sistema así se caraderiza como "sistema inconsistente". Un
Sección 3.5. Problemas sin solución 109

conjunto de ecuaciones es inconsistente si el miembro izquierdo de por lo menos una ecuación


puede eliminarse por completo sumando o restando otras ecuaciones y el miembro derecho
sigue siendo distinto de cero.
En el caso (C) tenemos tres ecuaciones independientes para dos incógnitas. Como se
observa en la figura 3.2, estas tres ecuaciones nunca pueden satisfacerse simultáneamente.
De todos modos, apliquemos MA TLAB a estos tres casos para ver qué sucede:

Caso (A): El comando de MATLAB para obtener la solución es:

( - 1, 1; - 2, 2) \ [1;2]

La respuesta de MA TLAB es

Warning: Matrix is singular to working precision .


ans =
00 00

(..Aviso: La matriz es singular dentro de la precisión con que se trabaja") En cambio, si


intentamos resolver únicamente la primera ecuación con

(-1, 1)\(1)

La respuesta de MATLAB será

ans =
-1
o
Caso (B): El comando de MA TLAB es

(-1, 1; -1, 1)\(1;0]

y la respuesta es

Warning: Matrix is singular to working precision.


ans =
00 00

es decir, la misma que en el caso (A).

Caso (C): El comando de MATLAB es

(1, 2; -1, 1; 2, - 1) \ (-2; 1; O]

a lo que se responde sin chistar con


110 Capítulo 3 Álgebra lineal

ans
-0.6
- 0.6

Observe, empero, que la solución anterior no satisface ninguna de las ecuaciones de (C).
¿Cómo puede ser correcto esto?
· Ahora repasaremos lo que sucedió con las respuestas de MA TLAB. La respuesta a la
ecuación 3.5.1 es razonable y consistente con lo que señalamos; es decir, el caso (A) tiene un
número infinito de soluciones pero ninguna solución única. Sin embargo, MA TLAB determina
que la matriz de coeficientes es singular, de modo que el problema no puede resolverse. La
respuesta, x¡ = x2 = 00 indica que no existe una solución única o que no existe ninguna solución.
Resulta interesante que si sólo se resuelve una ecuación, MA TLAB obtiene una solución. La
solución x¡ = -1, x2 = O es una de un número infinito de posibles soluciones. MA TLAB
encuentra una respuesta de una ecuación subdeterminada si las ecuaciones son linealmente
independientes. La respuesta en el caso (B) es exactamente la misma que en el (A). MA TLAB
no nos avisa que las ecuaciones son inconsistentes. Debemos prestar atención al caso (C)
porque, como apuntamos antes, no hay solución, pero MATLAB presenta una solución. Lo que
sucedió es que MA TLAB resuelve el caso (C) como ecuaciones sobredetenninadas y exhibe
la solución de

A' Ax=A'y (3.5.4)

La ecuación anterior puede derivarse por el método de los mínimos cuadrados. La solución no
satisface exactamente la ecuación original si está sobredetenninada, pero sí minimiza el total
del cuadrado del residuo de cada ecuación, a saber,

R =(x¡ + 2x2 + 2)2 + (-x¡ + x2 -1)2 + (2x1 -x2)2 (3.5.5)

(el residuo es el miembro izquierdo menos el miembro derecho de cada ecuación). La ecuación
3.5.4 se obtiene con

(3.5.6)

3.6 DETERMINANTE
El determinante es una cantidad importante asociada a una matriz cuadrada. De hecho, no
podemos obtener una solución única de un conjunto no homogéneo de ecuaciones lineales si
el determinante de la matriz de coeficientes es cero. Esto se debe a que, si por lo menos una
ecuación de un conjunto de ecuaciones lineales no es linealmente independiente, el determi-
nante es cero. 1 Si el valor del determinante es extremadamente pequeño o grande, es señal de

1
Si el determinante es cero, se dice que la matriz es sin'gular. Una matriz singular no tiene inverso. Recuerde
que ya explicamos como crear un ejemplo de matriz singular.
Sección 3.6. Determinante 111

que hay errores graves en la solución de las ecuaciones. El determinante de una matriz también
desempeña un papel importante cuando se calculan los valores propios de una matriz.
El determinante de la matriz A se denota por det(A) o IAI. En el caso de una matriz de 2 x 2,
el determinante de A se calcula como

det(A) = [ª 11

a 2, 1
a1 ,1a2, 2 - a2,1a1 ,2 (3.6.1)

Para una matriz de 3 x 3, el determinante es

det(A ) = det ¡:~:: :~: ~ :~· ~]


a3 ,1 a3 ,2 a3 :3
= a1,1a2 ,2a3 ,3 + a2 ,1a3 ,2a1 ,3 + a3 ,1a1 ,2a2,3
- a1 , 1a3 ,2a2 ,3 - a2 ,1a1 ,2a3 ,3 - a3 ,1a2,2a1 ,3
(3 .6.2)

Es fácil memorizar Ja regla para una matriz de 3 por 3 como la regla del espagueti. En la
fi gura 3.3, cada una de las tres líneas continuas conecta tres números. Los productos a lo largo
de las líneas continuas tienen signo positivo en la ecuación 3.6.2. Los productos de los tres
números a lo largo de las líneas punteadas tienen signo negativo en Ja ecuación 3.6.2. Sin
embargo, la regla del espagueti no puede extenderse a una matriz de 4 por 4 o mayor.

Línea punteada: signo - Línea continua: signo +

,,A(1, ,A{1, ,A{1,


/
I
I

~(2,
''
' /
' 1
'
',,:\ , ~(3,
,, ....,... -
'

Figura 3.3 Regla del espagueti para calcular el dctcnninante de una matriz de 3 por 3

Una definición formal del detenninante de una matriz A de orden n está dada por

det(A) = L ( ±)a;, 1aj,2 ak ,3·· ·ªr,n


(3 .6.3)
(i ,j, k ... r )
112 Capítulo 3 Álgebra lineal

donde la sumatoria abarca todas las permutaciones del primer subíndice de a, y(±) es+ si
la permutación es par y - si es impar. 2 Las ecuaciones 3.6. l y 3.6.2 son congruentes con la
ecuación 3.6.3.
Si la matriz es una matriz triangular inferior o superior, o una matriz diagonal, el cálculo
de la ecuación 3.6.3 se simplifica mucho. La matriz triangular inferior es una matriz en la que
todos los elementos que están arriba de la línea diagonal son cero. La matriz triangular superior
es aquella en la que todos los elementos que están abajo de los pivotes son cero. La matriz
diagonal es un caso especial de la matriz triangular superior o inferior. Para estas matrices, la
ecuación 3.6.3 se reduce a

(3.6.4)

es decir, el determinante es igual al producto de todos los pivotes. Por ejemplo,

1 5 3]6 =(1)(4)(2)=8
[o o 2
det O 4 (3.6.5)

det [
-9
! º]
o7 o = (-9)(7)(3) = -189
2 3
(3.6.6)

4 o
det O 1
[
o o
~
-4
l = (4)(1)( - 4) = -16
(3.6.7)

Si una matriz se expresa como un producto de matrices, digamos M = ABC. .. K, el


determinante de Mes igual al producto de los determinantes de las matrices, o sea:

det(M) = det(A) det(B) det( C) ... det(K) (3.6.8)


Por tanto, cuando es necesario evaluar el detenninante de una matriz es común transformar la
matriz en un producto de las matrices para las cuales la evaluación del determinante es fácil.
Por ejemplo, si una matriz M se descompone en el producto de L y U, donde L es una matriz
triangular inferior y U es una matriz triangular superior, det(A) es igual a det(L)det(U). En la
sección 3 .1 O daremos más detalles sobre las matrices L y U.

2
La secuencia del primer subíndice (i,j, k, .. ., r) se llama "permutación''. Una permutación es impar o par si (i,
j, k, .. ., r) se obtiene alterando el orden de cualesquier dos números consecutivos en ( 1, 2, 3, .. ., n) un número impar
o par de veces, respectivamente. Por ejemplo, (3, 2, l, 4, .. ., n) se obtiene intercambiando los tres primeros números
así: 123 -> 213 -> 231 -> 321 (esto es, tres veces); así la permutación de (3, 2, l, 4, .. ., n) es impar. Sin embargo,
resulta que los intercambios de dos números no tienen que hacerse entre dos números consecutivos, sino que pueden
efectuarse con cualquier par de números. En el presente ejemp)o, (3, 2, l, 4, .. ., n) se obtiene intercambiando l y 3
en (l, 2, 3, 4, .. ., n). El número de intercambios es uno, así que la permutación (3, 2, l, 4, .. ., n) es impar.
Sección 3.7. Problemas mal acondicionados 113

Otra alternativa para calcular el determinante de una matriz consiste en utilizar la elimina-
"ón hacia adelante del método de Gauss. En la sección 3.8 presentaremos los detalles.
Si queremos calcular un determinante en MA TLAB utilizamos de t (A) , donde A es una
matriz cuadrada. La siguiente ilustración muestra el cálculo del determinante de una matriz de
3 por 3:

A [3, 4, 1; O, 2, 7; 5, -1, 2);


d det (A)
d
163

3.7 PROBLEMAS MAL ACONDICIONADOS


Hay varias ecuaciones lineales que pueden resolverse pero cuyas soluciones son muy inexactas
bido a graves errores de redondeo. Los problemas de este tipo se denominan problemas mal
acondicionados.
Pequeños errores de redondeo durante el cálculo o pequeños cambios en los coeficientes
eden causar errores significativos al resolver un problema mal acondicionado. El efecto de
errores de redondeo se puede ilustrar con dos ecuaciones:

(A) 0.12065x + 0.98775y = 2.01045


(3 .7.1)
(B) 0.12032x + 0.98755y = 2.00555

e están muy cercanas una a la otra. La solución se denotará con (x¡,y¡), y es

X¡= 14.7403
y¡ =0.23942

Para ilustrar el efecto de un error en los coeficientes, incrementaremos artificialmente el


érmino no homogéneo de la primera ecuación (línea A) en 0.001, de modo que la
ecuación 3. 7.1 queda alterada a

(C) 0.12065x + 0.98775y = 2.01145


(3 .7.2)
(B) 0.12032x + 0.98755y = 2.00555

La solución de la ecuación 3.7.2, denotada por (x2,Y2) es

xi= 17.9756
yi=--0.15928
114 Capítulo 3 Álgebra lineal

Las diferencias entre (xi, y1) y (x2, yi) son significativas, sobre todo si se comparan con la
magnitud de la alteración del término no homogéneo de la primera ecuación. Cambios
pequeños en los demás coeficientes pueden causar efectos similares. Los errores en los
coeficientes pueden ocurrir inadvertidamente al redondear durante el proceso de resolución de
la ecuación.

cuando la línea A se mueve a la posición de la línea C debido a pequeños cambios


en las constantes. la raíz x1 se mueve una distancia considerable hasta x2.

B '

Figura 3.4 Problema mal acondicionado

En la figura 3 .4 se muestran como curvas A, B y C las dos ecuaciones de la ecuación 3. 7 .1


y la primera de la ecuación 3.7.2, respectivamente. La línea A interseca laB con un ángulo muy
agudo (síntoma característico de los problemas mal acondicionados). La línea Ces paralela a
A pero un poco más alta que A. Puesto que los gradientes de las líneas A y B son muy cercanos,
cualquier cambio, aunque sea muy pequeño, en el gradiente o la altura de una de las líneas
causa un desplazamiento considerable en Ja ubicación de la intersección de las dos líneas.
Aunque utilizamos un conjunto de sólo dos ecuaciones en el ejemplo anterior, ocurren efectos
similares en conjuntos más grandes de ecuaciones mal acondicionadas. Dejamos al lector
explicar gráficamente cómo podría resultar afectada la solución de un conjunto de tres
ecuaciones lineales mal acondicionadas por errores en los coeficientes. El efecto de los errores
de redondeo se hace más pronunciado conforme aumenta el número de ecuaciones.
En lo que resta de esta sección estudiaremos dos formas de averiguar si una matriz está mal
acondicionada o no. El primer método consiste en utilizar el número de condición, pero para
entender el significado de este número debemos comenzar con la definición de la norma 2. La
norma 2 de una matriz A se define como
Sección 3.7. Problemas mal acondicionados 115

(3.7.3)

E número de condición de la matriz A, denotado por Cond(A), está definido por

Cond(A) = llAll x llA- 111


E número de condición siempre satisface
Cond(A) ~ 1
E número de condición tiende a crecer cuando la matriz está mal acondicionada. Sin embargo,
te número no ofrece una medida directa del error de la solución. En MA TLAB, el número
condición puede calcularse mediante

cond(A)

orejemplo, el número de condición de la ecuación 3.7.1 se calcula como

cond( [0.12065, 0.98775; 0.12032, 0 . 98755))


ans
6.5598e+3

Para poder calcular con exactitud la solución de un problema mal acondicionado, la


cisión de los cálculos debe ser elevada. En el caso de problemas moderadamente mal
ondicionados, la doble precisión resuelve la dificultad . Los problemas excesivamente
al acondicionados podrían requerir una precisión mucho más alta, como la cuádruple. 3
Tanto el inverso como el detenninante calculados carecen de exactitud si la matriz está mal
ondicionada. Así, podemos obtener una medida directa de los errores en la resolución de un
roblema mal acondicionado a partir de los siguientes síntomas:

• det(A)det(A- 1) calculado se aparta de 1.


1 1
• (A- f calculado es diferente de A.

• AA- 1 calculado se aparta de la matriz identidad.

• A- 1(A-l)-l calculado se aparta de la matriz de identidad de forma más significativa


queAA- 1.

La severidad de los síntomas también depende de la precisión del entorno de computación.


Por ejemplo, si se observa que uno de los síntomas anteriores es grave con precisión sencilla,
tal vez desaparezca con doble precisión; pero si se presenta incluso con doble precisión es señal

3
Esto no es posible con MATLAB.
116 Capítulo 3 Álgebra lineal

de que el inverso calculado, el determinante y, lo que es más importante, la solución de la


ecuación lineal pueden ser muy inexactos aun con doble precisión.

Ejemplo 3.6
Las matrices de Hilbert son notablemente mal acondicionadas. La definición de estas
matrices es:
A= [a l·, j ·]
donde
. 1
a·1-
'· - i + j - l

Calcule el número de condición y det(A)det(A- 1) para las matrices de Hilbert desde la


de 5 por 5 hasta la de 14 por 14.

Solución
Ambas respuestas se calculan con el siguiente guión:
Listado 3.2
clear
for n=5:14
for i=l:n
for j=l:n
a(i,j) = 1/(i+j-1);
end
end
c = cond (a);
d = det(a)*det(a· (-1));
fprintf('n=%3.0f cond(a)= %e det*det= %e\n', n,c,d)
end
La salida es:
n= 5 cond(a) 4.76e+05 det*det 1.000000
n= 6 cond(a) 1.49e+07 det*det = 1.000000
n= 7 cond(a) 4.75e+08 det*det 1.000000
n= 8 cond(a) 1.52e+10 det*det 1.000000
n= 9 cond(a) 4.93e+ll det*det 1.000000
n= 10 cond(a) 1.60e+13 det*det 1.000016
n= 11 cond(a) 5.22e+14 det*det 0.999657
n= 12 cond(a) 1.71e+16 det*det 0.993415
n= 13 cond(a) 7.32e+17 det*det 1.027812
n= 14 cond(a) = 2.48e+17 det*det 2.245038
Durante la ejecución, se imprime un mensaje similar al que sigue para cada cálculo
desden= 11 hasta n = 14:
Aviso: La matriz está cerca de ser circular o su
escala es deficiente ~ Los resultados pueden ser
inexactos. RCOND = 2.48e - 17
- _ ción 3.8. Eliminación de Gauss 117

El número de condición ya es grande para n = 5, y sigue creciendo rápidamente al


aumentar n. Los valores de det *det son sensibles a los errores de redondeo que
dependen de la computadora utilizada; por ello, es posible que el lector no obtenga
exactamente los mismos valores que se indican aquí. Dicho de otro modo, ~na
desviación de det*det respecto de la unidad indica que el inverso de la matriz no es
exacto en el entorno de computación actual.

Ejemplo 3.7
Calcule AA- 1 e imprima el producto si A es una matriz de Hilbert de 11 por 11 .
Solución
El producto de las matrices se calcula con el siguiente guión:
Listado 3.3
clear
for n=ll:ll
for i=l:n
for j=l:n
a(i,j) 1/(i+j-1);
end
end
a inv = a*inv(a);
for-j=l:n;
for i=l:n
fprintf(' %7.4f', a_inv(i,j))
end
fprintf(' \n')
end
end

El producto de las matrices debe ser una matriz identidad exacta si los cálculos son
precisos. Sin embargo, la salida que se muestra en seguida se aparta significativamente
de la matriz identidad:
o. 999 8 - 0 . 0001 -0 . 0001 -0.0001 -0.0001 -0.0001 - 0.0001 - 0.0001 -0 . 0001 - 0.0001 -0 . 0001
-0.0001 0.9999 -0 . 0001 -0.0001 -0.0000 - 0.0000 - 0.0000 - 0.0000 -0 . 0000 - 0 . 0000 - 0.0000
0.0014 0 . 0012 l . 0010 0.0009 0 . 0008 0 . 0008 0 . 0007 0 . 0006 0.0006 0 . 0006 0 . 0005
- 0 . 0006 - 0.0005 - 0.0004 0.9997 -0.0003 - 0.0003 - 0.0002 - 0.0002 -0 . 0002 - 0.0002 - 0 . 0002
0.0029 0 . 0022 0 . 0016 0.0014 1.0012 o. 0011 0 . 0009 0 . 0008 0 . 0007 0 . 0006 0 . 0006
- 0 . 0103 - 0.0072 - 0 . 0059 - 0.0049 - 0 . 0039 0.9962 - 0 . 0030 - 0.0028 - 0.0024 - 0 . 0025 - 0 . 0018
0 . 0241 0 . 0176 o. 014 o o. 0118 o. 0093 0 . 0089 l . 007 4 o. 007 5 0 . 0062 0 . 0053 0 . 0043
-0.0354 -0 . 0269 -0 . 0226 -0 . 0186 - 0 . 0155 - 0 . 0135 - 0 . 0114 o. 9890 - 0 . 0101 - 0 . 0094 - 0 . 0080
0 . 0291 0 . 0224 0 . 0166 0 . 0151 o. 0117 0.0112 o. 009 o 0 . 0091 1 . 0077 0.0072 0 . 0061
-0.0129 - 0 . 0096 -0 . 0074 -0.0062 - 0 . 0052 - 0 . 0049 - 0 . 0037 - 0 . 0038 - 0.0031 0.9969 -0 . 0023
0 . 0020 0 . 0013 0.0010 0.0008 0 . 0006 0.0005 0 . 0004 0 . 0004 0 . 0003 0 . 0003 1 . 0002

3.8 ELIMINACIÓN DE CAUSS


La eliminación de Gauss consiste en (i) eliminación hacia adelante y (ii) sustitución hacia atrás.
Para la ecuación 3.4.1 con m = n, la eliminación hacia adelante procede como sigue: la primera
118 Capítulo 3 Álgebra lineal

ecuación, multiplicada por a2,1/a1,1, se resta de la segunda ecuación para eliminar el primer
término de la segunda ecuación. De forma similar, el primer término de cada una de las
ecuaciones subsecuentes, 1>2, se elimina restando la primera ecuación multiplicada por
a¡,1/a1,1. Una vez hecho esto, las ecuaciones deberán verse así:

a1,1x1 + a1,2x2 + a1,JX3 + · · · a1,1.X11 =y¡

a'2,2x2 + a'2,JX3 + · · · a'2,1.Xn = y'2

a'n,2X2 + a'n,JX3 + . . . a'11,1.X11 = y'n (3.8.1)

donde
a';,j = a;,j-(a;, 1la1 ,1)a1 ,j

y'¡= y; - (a;,1/a1,1)y1

Observe que la primera ecuación no se altera.


A continuación se elimina el término inicial de todas las ecuaciones desde la tercera hasta
la última restando a cada ecuación la segunda ecuación multiplicada por aí, 2 laí, 2 . Una vez
completado este paso, se eliminarán los términos iniciales de las ecuaciones desde la cuarta
hasta la última. Cuando haya terminado el proceso de eliminación hacia adelante, el conjunto
de ecuaciones tendrá la forma

a1,1x1 + a1 ,2x2 + a1 ,JX3 + · · · + a1 , 11X11 =y¡

a' 2,2x2 + a' 2,JX3 + · · · + a' 2, nXn = y' 2


a'\JX3 + · · · + a'3, 1.Xn = y"3 (3.8.2)

(11 - J) (11 - J)
Q11.11 X11=y11

El término inicial de cada ecuación de la ecuación 3.8.2 recibe el nombre de pivote. Se


podría haber normalizado las ecuaciones dividiendo cada una entre el coeficiente inicial,
pero en la eliminación de Gauss no se utiliza normalización . La razón principal es que la
normalización de las ecuaciones incrementa el tiempo de cómputo total, pero además el
cálculo del determinante durante la eliminación de Gauss es más fácil si no se efectúa
normalización .
El procedimiento de sustitución hacia atrás comienza con la última ecuación. Se obtiene la
solución de Xn de la última ecuación por
-y<11-J) ,.,_ (n-J)
X 11- n IU11,11 (3.8.3)
=- ción 3.8. Eliminación de Gauss 119

~ los pasos subsecuentes,


(3.8.4)

X¡= ( Y1 - ta1,¡x ¡) /a1 ,1 (3.8.5)


t=2
n esto tennina la eliminación de Gauss.
Hasta aquí hemos supuesto una situación idealmente simple en la que ningún
ote (o coeficiente diagonal), au, se convierte en cero. Si cualquier pivote se vuelve cero en
roceso de resolución, la eliminación hacia adelante no procederá. El pivoteo evita esto, pero
más contribuye a aumentar la exactitud de la solución incluso cuando todos los coeficientes
gonales son distintos de cero.
El pivoteo consiste en intercambiar el orden de las ecuaciones de modo que el coeficiente
pivote, a;,¡, tenga una magnitud mayor que cualquier otro coeficiente que esté debajo de él
a misma columna y que por tanto vaya a ser eliminado. Por ejemplo, examine la ecuación
.i.1 antes de que se inicie la eliminación, suponiendom = n. El primer pivote, a1,1, se compara
los coeficientes iniciales de cada una de las ecuaciones que están abajo. Si la1 ,1I ~ la;,11,
. no es necesario pivotear. En caso contrario, la primera ecuación se intercambiará con la
tiene el la;,il más grande. El segundo pivoteo puede efectuarse antes de iniciar el segundo
eso de eliminación, cuando la ecuación esté en la fonna de la ecuación 3.8.1; es decir, laí 2 I
-ompara con laf, 2 1 de cada ecuación que está abajo. Si no se satisface la2,21 ~ laf, 2 1,'la
ación se intercambia de modo que el pivote sea el de mayor magnitud antes de iniciarse
eliminación. Esto se repite con cada pivote hasta completar la eliminación hacia adelante. La
inación de Gauss con pivoteo se ilustra en el ejemplo 3.8, y el efecto del pivoteo sobre
exactitud de la solución se ilustra en el ejemplo 3.9.

Ejemplo 3.8
Resuelva la siguiente ecuación mediante eliminación de Gauss paso por paso en
MATLAB:

¡-004
0.04
0.12
0.56 -1.56 0.32
-0.24 1.24 -0.28
ln mXz
X3

Solución
Definimos una matriz aumentada con
a = (-0.04 0.04 0.12 3;
0.56 -1.56 0.32 1;
- 0.24 1.24 -0.28 O]
donde las tres primeras columnas son la matriz de coeficientes y la última columna es
el miembro derecho de la ecuación (A).
120 Capítulo 3 Álgebra lineal

Primer pivoteo (se intercambian las filas 1 y 2):


tempo = a ( 2, : } ; a ( 2, : } = a ( l, : } ; a ( l, : } tempo;
Entonces,
a =
0.5600 -1.5600 0.3200 1.0000
- 0.0400 0.0400 0.1200 3.0000
0.2400 1.2400 0.2800 o
La eliminación de los números debajo del primer pivote mediante
a(2,:} a(2,:} a(l,:}*a(2,l}/a(l,l};
a(3,:} = a(3,:} - a(l,:}*a(3,l}/a(l,1);
produce
a
0.5600 -1.5600 0.3200 1.0000
o - 0.0714 0.1429 3.0714
o 0.5714 -0.1429 0.4286
Puesto que el valor absoluto del segundo pivote es menor que el del número que está
abajo, es necesario un segundo pivoteo:
tempo = a ( 3, : } ; a ( 3, : ) = a ( 2, : } ; a ( 2, : } = tempo;
Entonces,
a
0.5600 -1.5600 0.3200 1.0000
o 0.5714 -0.1429 0.4286
o -0.0714 0.1429 3.0714
La eliminación del número que está abajo del segundo pivote mediante
a(3,:} = a(3,:} - a(2,:}*a(3,2}/a(2,2};
produce
a
0.5600 -1.5600 -0.3200 1.0000
o - 0.5714 - 0.1429 0.4286
o o 0.1250 3.1250
Con esto se completa la eliminación hacia adelante. La sustitución hacia atrás es:
x(3} a(3,4}/a(3,3};
x(2} = (a(2,4} - a(2;3}*x(3}}/a(2,2};
x(l} = (a(l,4} - a(l,2:3}*x(2:3}}/a(l,l};
La solución es entonces:
X
7.0000
7.0000
25.0000
El guión completo para el cálculo anterior es el siguiente:
·ó n 3.8. Eliminación de Gauss 121

Listado 3.4
::l ear
a = [-0.04 0.04 0.12 3; 0.56 -1.56 0.32 1; - 0.24 1.24 -0.28 O)
x = [0,0,0) '; % x se inicializa como vector de columna
5 Primer pivoteo (Se intercambian las filas 1 y 2)
:empo = a ( 2, : ) ; a ( 2, : ) = a ( 1, : ) ; a ( 1, : ) =tempo; a
5 Eliminación de elementos debajo de pr i mer pivote.
a (2,:) = a(2,:) - a(l,:)*a(2,1)/a(l,1);
a 1 3,:) = a(3,:) - a(l,:)*a(3,1)/a(l,1); a
5 Segundo pivoteo (Se intercambian las filas 2 y 3)
:empo =a( 3, :) ; = a(3, :) a(2, :) ; a(2, : ) = tempo; a
i Eliminación de elementos debajo del segundo pivote.
a (3, :) = a(3, :) - a(2, :)*a(3,2)/a(2,2) ;a
x (3) a(3,4)/a(3,3);
x ( 2) = (a(2,4) a(2;3)*x(3))/a(2,2);
x ' l) = (a(l,4) - a(l,2:3)*x(2 : 3))/a(l,l);x

Ejemplo 3.9

El siguiente arreglo representa un conjunto de ecuaciones lineales con cuatro ecuacio-


nes y cuatro incógnitas. La solución exacta es la unidad para todas las incógnitas,
porque cada térrnino no homogéneo (última columna) es igual a la sumatoria de los
coeficientes de la misma línea:
1.334-4 4.123+1 7.912+2 - 1.544+3 - 711. 5698662
1.777 2.367-5 2.070+1 -9.035+1 -67. 87297633
9.188 o -1.015+1 1.988-4 -0.961801200
1.002+2 1.442+4 -7.014+2 5.321 13824 .12100

(a) Resuelva las ecuaciones sin pivoteo y luego con pivoteo, utilizando precisión sencilla
en Fortran o C.
(b) Repita utilizando doble precisión.
(c) Repita con MATLAB.

Solución
Las soluciones para (a) y (b) se obtuvieron con Fortran. 4

(a) Precisión sencilla:

Sin pivoteo Con pivoteo


i Xi Xi
1 0.95506 0.99998
2 1.00816 1
3 0.96741 1
4 0.98352 1

4véase Nakamura, Applied Numerical Methods with Software, Prenticc-Hall, 1991 .


122 Capítulo 3 Álgebra lineal

Los resultados en precisión sencilla sin pivoteo son muy deficientes, pero el pivoteo
mejora la exactitud significativamente.
(b) Doble precisión
Sinpivoteo Con pivoteo
i Xi Xi
1 0.9999 9999 9861 473 1.0000 0000 0000 002
2 1.0000 0000 0000 784 1.0000 0000 0000 000
3 0.9999 9999 9984 678 1.0000 0000 0000 000
4 0.9999 9999 9921 696 1.0000 0000 0000 000
La doble precisión mejora la exactitud significativamente, pero el mejor resultado se
obtiene cuando se aplica tanto doble precisión como pivoteo.
(c) MATLAB:
La solución se obtuvo con el guión que se muestra en seguida:
Listado 3.5
clear
a= [1.3340e-04 4.1230e+Ol 7.9120e+02 -1.5440e+03;
1.7770e+OO 2.3670e-05 2.0700e+Ol - 9.0350e+Ol;
9.1880e+OO O -1.0150e+Ol 1.9880e-04;
1.0020e+02 1.4420e+04 -7.0140e+02 5.3210e+OO)
y = sum (a')' ;
format long e
x=a\y

Los resultados son


X =
1.0000 0000 0000 007
1.0000 0000 0000 000
1.0000 0000 0000 000
1.0000 0000 0000 000

El resultado con MA TLAB es equivalente a la solución con Fortran o C en doble


precisión en una IBM PC o una estación de trabajo.

Con la eliminación de Gauss es posible calcular de manera sencilla y eficiente el determi-


nante de la matriz. De hecho, cuando se completa la eliminación hacia adelante de la
eliminación de Gauss, el determinante es igual al producto de todos los pivotes (los términos
a lo largo de la diagonal) multiplicado por 1 o -1, dependiendo de si el número de operaciones
de pivoteo es par o impar, respectivamente.

3.9 ELIMINACIÓN DE GAUSS-JORDAN E INVERSIÓN DE MATRICES


La eliminación de Gauss-Jordan es una variación de la eliminación de Gauss mediante la cual
se eliminan los números que están arriba y abajo de un pivote sin distinguir la eliminación hacia
Sección 3.9. Eliminación de Gauss-Jordan e inversión de matrices 123

:!delante de la sustitución hacia atrás. No- obstante, el pivoteo sigue siendo necesario por la
::::iisma razón que lo es en la eliminación de Gauss.
En la presente sección ilustraremos primero la resolución de una ecuación lineal por
eliminación de Gauss-Jordan y luego aplicaremos este método a la inversión de una matriz.
-na ventaja de la eliminación de Gauss-Jordan es que la explicación del algoritmo para
:alcular el inverso de una matriz se simplifica.

Ejemplo 3.1 O
Resuelva el mismo problema del ejemplo 3.8 por eliminación de Gauss-Jordan.
Solución
Comenzamos con la misma matriz aumentada que en el ejemplo 3.8. El procedimiento
para el primer pivoteo es el mismo que se siguió en ese ejemplo, pero ahora después
del primer pivoteo se normaliza la primera fila dividiéndola entre el pivote:
a =
1.0000 -2.7857 0.5714 1.7857
-0.0400 0.0400 0.1200 3.0000
-0.2400 1.2400 -0.2800 o
A continuación se eliminan todos los elementos que están debajo del primer pivote
restando (o sumando) un múltiplo de la primera fila:
a =
1.0000 -2.7857 o. 5714 1.7857
o -0.0714 0.1429 3. 0714
o 0.5714 -0.1429 0.4286
El segundo pivote se compara con los elementos que están abajo. Puesto que la
magnitud del segundo pivote es menor que la del elemento que está abajo, es necesario
pivotear. Luego, la segunda fila se divide entre su propio pivote:
a =
1.0000 -2. 7857 o. 5714 1. 7 857
o 1.0000 - 0.2500 o. 7 500
o -0.0714 0.1429 3. 0714
Todos los elementos que están arriba y abajo del segundo pivote se eliminan restando
(o sumando) un múltiplo de la segunda fila:
a =
1.0000 o -0.1250 3. 87 50
o 1.0000 -0.2500 o. 7 500
o o 0.1250 3.1250
La tercera fila se nonnaliza dividiéndola entre su propio pivote:
a =
1.0000 o -0.1250 3.8750
o 1.0000 -0.2500 0.7500
o o 1.0000 25.0000
124 Capítulo 3 Álgebra lineal

Los elementos que están arriba del tercer pivote se eliminan restando (o sumando) la
tercera fila multiplicada por el número que se va a eliminar. Ahora, la matriz
aumentada es
a =
1.0000 o o 7.0000
o l . 0000 o 7.0000
o o 1.0000 25.0000
Aquí, las primeras tres columnas forman una matriz identidad, mientras que la última
columna es la solución.

Ejemplo 3.11
Obtenga el inverso de la matriz del ejemplo 3.1 O.
Solución
Como se dijo antes, la eliminación Gauss-Jordan puede servir para obtener el inverso de
una matriz. Para ello, se escribe una matriz aumentada en la que las tres primeras columnas
son la matriz original, A, y las tres siguientes columnas son la matriz de identidad:
a =
-0.0400 0.0400 0.1200 1.0000 o o
0.5600 - 1.5600 0.3200 o 1.0000 o
-0.2400 1.2400 -0.2800 o o 1.0000
El resto de la operación es exactamente igual a la del ejemplo 3.1 O. Después del
pivoteo, se normaliza la primera fila.
a =
1.0000 -2.7857 0.5714 o 1.7857 o
-0.0400 0.0400 0.1200 1.0000 o o
- 0.2400 1.2400 - 0.2800 o o 1.0000
Los elementos que están abajo del primer pivote se eliminan restando la primera fila
multiplicada por el número que se va a eliminar:
a =
1.0000 -2.7857 o. 5714 o 1.7857 o
- 0.0714 0.1429 1.0000 o. 0714 o
o o. 5714 -0.1429 o 0.4286 1.0000
El segundo pivoteo produce
1.0000 -2.7857 o. 5714 o 1. 7 857 o
o o. 5714 - 0.1429 o 0.4286 1.0000
o - 0.0714 0.1429 1.0000 o. 0714 o
La segunda fila se nonnaliza dividiéndola entre su propio pivote:
a =
1.0000 - 2.7857 0.5714 o 1.7857 o
o 1.0000 -0 . 2500 " o 0.7500 1.7500
o -0.0714 0.1429 1.0000 0.0714 o
Sección 3.9. Eliminación de Gauss-Jordan e inversión de matrices 125

Los elementos que están arriba y abaj6 del segundo pivote se eliminan restando la
segunda fila multiplicada por el número que se va a eliminar:
a =
1.0000 o -0.1250 o 3.8750 4.8750
o 1.0000 -0.2500 o 0.7500 1.7500
o o 0.1250 1.0000 0.1250 0.1250
La tercera fila se normaliza y luego se eliminan los números que están arriba del tercer
pivote restando la primera fila multiplicada por el número que se va a eliminar:
a =
1.0000 o o1.0000 4.0000 5.0000
o 1.0000 o2.0000 1.0000 2.0000
o o 1.0000 8.0000 1.0000 1.0000
Ahora las primeras tres columnas son una matriz identidad y las tres últimas son el
inverso de A. Denotamos el inverso por A_ i nv:
A inv =
1.0000 4.0000 5.0000
2.0000 1.0000 2.0000
8.0000 1.0000 1.0000
Para verificar, calculamos A* A_ i nv y obtenemos
A*A inv
ans
1.0000 0.0000 0.0000
-0.0000 1.0000 -0.0000
-0.0000 -0.0000 1.0000
El cálculo anterior se realiza con el siguiente guión:

Listado3.6
clear
A= (-0.04 0.04 0.12; 0.56 -1.56 0.32
; -0.24 1.24 -0.28]
a= [A, eye ( 3) J ;
% Primer pivoteo (Se intercambian las filas 1 y 3)
tempo = a ( 2 , : ) ; a ( 2 , : ) = a ( 1, : ) ; a ( 1 , : ) =tempo;
% La primera fila se divide entre su pivote:
a(l,:) a(l,:)/a(l,l)
% Los elementos debajo de a(l,l) se eliminan.
far i=2:3; a(i, :)=a{i, :) - a(i,l)*a(l, :) ; end;a
% Elimina todos los elementos que están arriba
% y abajo del segundo pivote.
% Segundo pivoteo
tempo = a ( 3, : ) ; a ( 3, : ) = a ( 2, : ) ; a ( 2, : ) = tempo; a
% Normalización de la segunda fila
a ( 2 , : ) =a ( 2 , : ) /a ( 2 , 2 ) ; a
for i=l:3; i f i-=2, a(i, :)=a{i, :)-a(i,2)*a(2, :) ; end;
end;a
% Eliminar todos los elementos arriba del tercer pivote.
126 Capítulo 3 Álgebra lineal

a ( 3 , : ) =a ( 3 , : ) /a ( 3 , 3 )
for i=1:3; if i-=3, a(i, :)=a(i, :) - a(i,3)*a(3, :) ; end;
end;a
A inv = a(:,4:6)
A*A inv

3.1 O DESCOMPOSICIÓN LU
El procedimiento de descomposición LU transforma una matriz A en un producto de dos
matrices,

A=LU (3.10.1)

donde Les una matriz triangular inferior y U es una matriz triangular superior. Con A= LU, la
ecuación Ax= y se puede escribir también así:

LUx=y (3.10.2)

La ecuación anterior se resuelve como sigue. Si hacemos

Ux=z (3.10.3)

La ecuación 3.10.2 se convierte en

Lz= y (3.10.4)

La resolución de la ecuación anterior para obtener z es fácil gracias a Ja fonna triangular de L.


Una vez obtenida z, se resuelve Ja ecuación 3~ 10.3 para obtener x.
En los casos en que debemos resolver varios conjuntos de ecuaciones lineales con la misma
matriz de coeficientes pero ténninos no homogéneos (miembros derechos) distintos, la resolu-
ción mediante la descomposición LU es mucho más eficiente que la resolución individual de
cada ecuación por eliminación de Gauss.

Ejemplo 3.12
Resuelva la ecuación lineal por descomposición LU

Ax=y
donde

~3] ,
1
A 3 y
1 -3

y A =LUcon
~ ción 3.1 O. Descomposición LU 127

[entra L = [-~.5
1.5
~ ~1] ,u
-0.1428
-3 l
0.5
1.5714

Solución
Primero resolvemos Lz =y para z, o sea

o
[entra
[ -~.51.5 -0.1428
La solución es z¡ = 2, z2 =O - 2(-0.5) = 1 y z3 = 1 - 2(1.5) - (-0.1428) = -1.8572.
Entonces, Ux = z se convierte en

[entra -3 l
0.5
1.5714
La solución es

X3 = -1.8572/1.5714 = -1.1818
[entra X2 = (1 - 0.5X3)/3 .5 = 0.4545

X¡= (2- :1:2 + 3x3)/ 2 = -1

Una matriz puede descomponerse en L y U mediante eliminación de Gauss. De hecho, la


matriz que tenemos después de la eliminación hacia adelante es la matriz U. Primero supone-
mos que no hay necesidad de pivotear. La eliminación hacia adelante puede considerarse como
una transformación de la matriz A en U, y una forma equivalente de representar la transforma-
ión es mediante multiplicación previa por una matriz F:

FA= U (3.10.5)

Podemos encontrar la matriz F si aplicamos la misma operación de eliminación hacia adelante


a una matriz identidad. Para ilustrar lo anterior, escribiremos primero la matriz A del ejemplo
3.12junto con una matriz identidad:

~ -3 ·
~3] [~o o~ ~]1 (3.10.6)

Si aplicamos la eliminación hacia adelante a la primera matriz y realizamos la misma


operación con la matriz identidad, los resultados son:
-=ción 3.10. Descomposición LU 127

o
[entra L = [-~.5 -3 l
0.5
1.5 -0.1428 1.5714

Solución
Primero resolvemos Lz =y para z, o sea

o
[entra
[ -~.5
1.5 -0.1428
La solución es z¡ = 2, z2 =O - 2(-0.5) = 1 y z3 = 1 - 2(1.5) - (-0.1428) = -1.8572.
Entonces, Ux = z se convierte en

[entra

La solución es

X3 = -1.8572/ 1.5714 = -1.1818


[entra x 2 = (1 - 0.5 x3 )/3.5 = 0.4545
x 1 = (2- :r 2 + 3x3)/2 = -1

Una matriz puede descomponerse en L y U mediante eliminación de Gauss. De hecho, la


matriz que tenemos después de Ja eliminación hacia adelante es Ja matriz U. Primero supone-
os que no hay necesidad de pivotear. La eliminación hacia adelante puede considerarse como
a transformación de Ja matriz A en U, y una forma equivalente de representar la transforma-
ión es mediante multiplicación previa por una matriz F:

FA=U (3.10.5)

Podemos encontrar la matriz F si aplicamos la misma operación de eliminación hacia adelante


a una matriz identidad. Para ilustrar lo anterior, escribiremos primero la matriz A del ejemplo
3.1 2junto con una matriz identidad:

1
3 -3] [o1 o
2
-3
' 1
o o
º]o
1
(3.10.6)

Si aplicamos la eliminación hacia adelante a la primera matriz y realizamos la misma


operación con la matriz identidad, los resultados son:
128 Capítulo 3 Álgebra lineal

-3
0.5l[
1.5714
' 1
0.5
~ ~1
- 1.4286 0.1428
l (3.10.7)

La primera matriz es FA = U. La segunda matriz es el resultado de F multiplicada por una


matriz identidad,/, lo que es igual a F. Si comparamos

(3.10.8)

con Ja ecuación 3.10.1, Fdeberá ser igual al inverso deL, es decir, F= L- 1• Por tanto, podemos
obtener L si calculamos el inverso de F. La obtención del inverso de una matriz triangular es
una operación fácil y rápida. El inverso de una matriz triangular inferior siempre es una matriz
triangular inferior.
Ahora nos preguntamos cómo el pivoteo afecta a las matrices L y U. Recuerde que en Ja
eliminación de Gauss el pivoteo modifica el orden de las filas. Si conocemos los cambios en
el orden antes de la eliminación de Gauss, podemos expresar el efecto de los cambios mediante
un operador P, donde P es una matriz unitaria. Si multiplicamos previamente la ecuación
original Ax= y por P tenemos

PAx=Py
o, lo que es equivalente,

Ax=y (3.10.9)

donde X= PA y y= Py. Si aplicamos la eliminación de Gauss a A, no será necesario pivotear.


Asimismo, si descomponemos A en L y U, no habrá que pivotear. En la eliminación de Gauss
con pivoteo, la matriz después de la eliminación hacia adelante es la matriz U de A. La
matriz P puede obtenerse aplicando el pivoteo a una matriz de identidad del mismo modo que
hicimos en la eliminación de Gauss.
La descomposición LU puede realizarse con 1 u en MATLAB. La orden puede escribirse
con dos formatos, el primero de los cuales es

[l,u,p) = lu(A)

donde A es la matriz que se va a descomponer; 1, u y p corresponden, respectivamente,


a L, U y P de la explicación anterior. Por ejemplo, si escribimos:

A = (2 1 - 3; - 1 3 2; 3 1 - 3);
(1, U, p) = lu(A)

la respuesta será
ión 3.10. Descomposición LU 129

1 ...
1 . 0000 o o
- 0.3333 1.0000 o
0.6667 0.1000 1.0000

u =
3.0000 1.0000 -3.0000
o 3.3333 1.0000
o o -1.0000

p
o o 1
o 1 o
1 o o
qu í, 1 es la matriz triangular inferior, u es la matriz triangular superior y pes la matriz unitaria
representa el pivoteo. Las matrices L y U así obtenidas satisfacen

PA=LU (3.10.10)

Es decir, LU es la descomposición de PA y no de A. Por tanto, la ecuación lineal original se


ribe primero como

PAx=Py (3.10.11)

• luego

LUx=Py (3.10.12)

La matriz original A puede recuperarse a partir de L, U y P mediante p- 1LU. En MATLAB


escribimos
p• (-1) *l*u

. la respuesta es

ans
2 1 -3
-1 3 2
3 1 -3

El segundo formato es
[l,u ] = lu(A)
que produce
130 Capítulo 3 Álgebra lineal

1
0 . 6667 0.1000 1.0000
- 0.3333 1.0000 o
1 . 0000 o o
u
3 .0000 1 . 0000 - 3.0000
o 3 . 333 3 1.0000
o o - 1.1000

donde 1 es igual a P-- 1L y u es igual a U, así que (P-- 1L)U =A.

3.11 RESOLUCIÓN ITERATIVA


La resolución iterativa de ecuaciones lineales no es aplicable a todos los problemas, pero
resulta útil para resolver ciertos tipos de problemas. Si el número de incógnitas es muy grande
pero la matriz de coeficientes está despoblada, la eliminación de Gauss resulta ineficiente y en
algunos casos inaplicable si las necesidades de memoria exceden el límite. Para este tipo de
problemas son preferibles los métodos iterativos. Otras ventajas de estos métodos son que (1)
la programación es sencilla y (2) es fácil aplicarlos cuando los coeficientes no son lineales.
Aunque hay muchas versiones de los métodos iterativos, presentaremos tres de ellos: el método
iterativo de Jacobi, el método de Gauss-Seidel y el método de sobrerrelajación sucesiva (SOR).
Consideremos una ecuación lineal,
Ax=y (3 .11.1)

donde A es una matriz cuadrada, x es un vector desconocido y y es el ténnino de origen. Todos


los métodos iterativos requieren una estimación inicial para comenzar la iteración, mismo que
denotaremos por x(O)_ La estimación inicial puede ser cualquier vector arbitrario. Si se dispone
de una buena estimación, la convergencia de la resolución iterativa será rápida; si no, se puede
utilizar como estimación inicial un vector nulo (todos los elementos son cero).
Una condición suficiente para que la resolución iterativa converja es: 5
n
lai,il> L.: lai,jl, foralli (3 .11.2)
j =l ,# i

Sin embargo, si A es irreducible (es decir, si ninguna parte de la ecuación puede resolverse
independientemente del resto), una condición suficiente es

n
lai,il ~ L.: lai,jl, for ali i (3.11.3)
j=l ,# i

5
En el caso de una matriz no singular, la resolución iterati\la descrita en esta sección converge incondicional-
mente si se aplica después de multiplicar la ecuación Ax= y por A 1•
- - cdón 3.11. Resolución iterativa 131

- desigualdad estricta para por lo menos. una i.


Se sabe que las ecuaciones lineales que surgen de los siguientes problemas (aunque no sólo
) satisfacen una o dos de las condiciones mencionadas:
(a) Red eléctrica formada por resistores
(b) Problemas de conducción de calor
(c) Difusión de partículas
(d) Ciertos problemas de tensión-esfuerzo
(e) Potencial fluido, magnético o eléctrico
El método iterativo de Jacobi se escribe como

x(t)
t
= (y·- ~
t L..,¡ ai·,J·x(t-I))
J
/a i,i
·· (3.11.4)
j =l,#i

nde el superíndice t es la cuenta de iteraciones. Cuando t = 1 en la ecuación anterior, x del


embro derecho tiene superíndice O, lo que significa que el valor es una estimación inicial.
cada ciclo de iteración se evalúa Xi en orden creciente según i.
El método de Gauss-Seidel es un poco diferente del método iterativo de Jacobi y se escribe
IDO

x(t)
t
= (y·- ~a· ·x(t) - ~
t L..,¡ i ,J J L..,¡
a·i ,J·x(_t-I))
J
/a i··, i (3 .11.5)
j=I j=i+l

Este método se relaciona con el de Jacobi como sigue: En la ecuación 3.11.5, x¡ para}< i tiene
períndice (t) en lugar de (t- 1). Es decir, siempre que están disponibles valores actualizados
el método iterativo, se utilizan. Esto ayuda a acelerar la convergencia y también simplifica la
ogramación porque cada vez que se obtiene un valor nuevo, éste puede escribirse sobre los
alares anteriores.
La sobrerrelajación sucesiva (SOR) es una mejora del esquema de Gauss-Seidel y su
expresión matemática es:

x(t)
t
=w
(
i -1
y t· - '°'a · ·x(_t) -
L..,¡ t,J J
'°'
n
L..,¡
a·i,J·x(t-I)
J
)
/a i,··i + (1 - w)x(t-I)
i
(3.11.6)
j=I j=i+I

donde w es un parámetro de sobrerrelajación que satisface


1 ~w<2
como regla empírica, se puede asignar a w un valor entre 1.2 y 1. 7. 6

6un algoritmo para determinar una w óptima se describe en Nakamura, Applied Numerical Methods in C,
Prentice-Hall, 1992.
132 Capítulo 3 Álgebra lineal

Ejemplo 3.13
Resuelva la ecuación lineal del ejemplo 3.5 por SOR.
Solución
Este guión resuelve la ecuación por SOR:
Listado 3.7
clear
a(l,1) = 1/2 + 1/4 + 1/3; a(l,2) = -1/4; a(l,3) = -1/3;
a(2,1) = a(l,2); a(2,2) = 1/4 + 1/3 + 1/5; a(2,3) = -1/5;
a(3,1) = a(l,3); a(3,2) = a(2,3); a(3,3) = 1/3 + 1/5 + 1/3;
y(l) = 20/2; y(2) =O; y(3) = 5/3;
x = zeros (1, 3);
w=l.2;
for elem=1:50
error = O;
for i=1:3
s=O; xb = x(i);
for j=1:3
if i-=j, s = s + a(i,j)*x(j); end
end
x(i) = w*(y(i)-s)/a(i,i) + (1-w)*x(i);
error =error + abs(x(i) - xb);
end
fprintf(' Elem. núm.= %3.0f, error= %7.2e\n',
elem, error)
if error/3 < 0.0001, break; end
end
X

El resultado es:
Elem. núm. 1, error 2.39e+Ol
Elem. núm. 2, error 4.75e+OO
Elem. núm. 3, error 7.24e-Ol
Elem. núm. 4/ error 2.64e-Ol
Elem. núm. 5, error 5.03e - 02
Elem. núm. 6, error l.36e-02
Elem. núm. 7/ error 4.39e-03
Elem. núm. 8, error 1.16e-03
Elem. núm. 9, error 3.03e-04
Elem. núm. 10, error 8.55e-05

X =
13.3453 6.4401 8.5420

3.12 VALORES PROPIOS DE MATRICES


Suponga que A es una matriz den por n. Entonces, la función definida por
__ ción 3.12. Valores propios de matrices 133

f ('A.) '>; det[A - AJ] (3.12.1)

el llamado polinomio característico de la matriz A. La funciónf(A.) es un polinomio de A.


en n. Por ejemplo, para

A= [
-1
1 23] (3.12.2)

. ) se convierte en
det[A - A.!] = (1 - A.)(2 - A.) + 3
2
= A. - 3A. + 5 (3.12.3)

r tanto, la ecuación 3.12.1 se reduce a


f('>.. ) = A.2 - 3A. + 5 (3.12.4)

- soluciones def(A.) =O se denominan valores característicos y son idénticos a los valores


pios de la matriz A.
En MA TLAB, los coeficientes del polinomio característico se calculan con

e= poly(A)

de A es la matriz y e es un arreglo de coeficientes polinómicos. Los valores característicos


calculan entonces mediante
roots(c)

emos calcular de fonna más directa los valores propios de la matriz A con
eig(A)

- e luego, las respuestas de roots (e) y de e ig (A) son idénticas.

Ejemplo 3.14

La matriz A está dada por

A = [~
4
-1 (A)
o
Obtenga los valores propios directamente con eig, expanda A a su polinomio carac-
terístico y obtenga las raíces del polinomio.

Solución
La matriz A se introduce con
134 Capítulo 3 Álgebra lineal

A= [3 4 -2; 3 -1 1; 2 O 5)

Entonces, los valores propios se calculan con


eig(A)
ans
-2.7503
4.8751 + 1.4314i
4.8751 - 1.4314i

La orden poly (Al calcula los coeficientes del polinomio característico:


ans =
1.0000 -7.0000 - 1.0000 71.0000

lo que indica que la ecuación característica es

/CA)= det(A -1.J) = A.3 - 7A.3 -A.+ 71 (B)

Las raíces de un polinomio se pueden calcular con roo t. Por tanto, una vez obtenidos
los coeficientes del polinomio característico, sus raíces pueden calcularse con
e = poly(A)
e =
1.0000 -7.0000 -1.0000 71.0000
roots(c)
ans
4.8751 + 1.4314i
4.8751 - 1.4314i
-2.7503

Las raíces de las ecuaciones características son idénticas a los valores propios calcu-
lados directamente con la orden e i g.

Ejemplo 3.15
Considere el sistema formado por masas y resortes que se muestra en la figura 3.5. El
desplazamiento está dado por las ecuaciones
d2
m¡ dt 2Y1(t) = -(ko1 + k12)Y1 + k12y2
(A)
d2
m2dt2Y2(t) = krl.YI - k12Y2
donde y¡ y Y2 son desplazamientos de m¡ y m2 (positivos hacia abajo), respectiva-
mente, y

ko1 = 0.3 N/m, k12 = 0.1 N/m (constantes de los resortes)


m¡ = 0.1 kg, m2 = 0.2 kg (masas)
Sección 3.12. Valores propios de matrices 135

Encuentre las frecuencias de las oscilaciones armónicas.

m1

··I y1 (desplazamiento)

m2

. . T y2(desplazamiento)

Figura 3.S Sistema de resortes-masas

Solución
Para las oscilaciones armónicas, la solución puede escribirse como

y1r.(t) = e2rcjiJ fi, k = 1, 2 (B)

donde A. es la frecuencia y j = f::f. Si introducimos la ecuación (B) en la (A) tenemos

_,.,r, = -{ko1 + k12)Ji + k12 ¡;


-u1 ml 1 m¡J2
(C)
k12 k12
-"([¡ = - f ¡ - -Ji
ml m¡

donde y= (27t A.) 2. Las dos ecuaciones anteriores pueden escribirse en forma de matriz
como
Af=yf (D)
136 Capítulo 3 Álgebra lineal

con

A= [(ko1 + k12)/m1 - k12/m1 J


-k1zlm2 k12/m2

[
(0.3 + 0.1)/0.1 -0.1/0.1]
- 0.1/0.2 0.1/0.2
= 4 0.5-1]
[-0.5
f = [~~]
Ahora obtenemos los valores propios de A con
'
eig( (4, -1; -0.5, 0.5])
que produce
ans
4 .137 5
0.3625
Si utilizamos la definición anterior, y= (27t ').}, las frecuencias son A.=
.fY/(27t) = 0.3237 0.0958 Hz.

PROBLEMAS
(3.1) Calcule C=A + B,D=A-B, E=AB, donde

1 2 3] [4 1 2]
A=
[03 1o 42 , B = o3 21 12
(3.2) Calcule JIA1 y(AB)', donde A y B se definen como en el problema anterior. Demuestre que
los resultados son idénticos.
(3.3) Calcule E= AB, donde

A = [~ ~
3 o
!]
2
:: oblemas 137
..,
(3.4) CalculeD=A +E, E=A-E, F=AB, G= BA y H=BC, donde

[1
~] [~
3 3
A
2
= O 1 4 o ']
1
' E =
3 o 2 5 o

[4 1 21
[entra fórmula~
B 3 2 1j
o 1 2
3 1 o

e= rn
(3.5) Calcule E= B + CD, donde

[entr B = [3O 42 3'] ,


o o 6
e= [-11
o
o1 2]
o ,
3 2
D = [-21
5
o1O
2 7
º]
(3.6) Resuelva el siguiente conjunto de ecuaciones con MATLAB y verifique los resultados
mediante cálculos manuales.
(a)

[2 1-3) [XI] ¡-1]


-1
3
3 2
1 -3
X2
X3
12
0
(b)
0.1 -0.6
-2 8
[
1 6
(3. 7) Resuelva los siguientes conjuntos de ecuaciones por eliminación de Gauss-Jordan:
(a)
4 1
3 2
[ 1 -5

(b)
138 Capítulo 3 Álgebra lineal

(3.8) Los siguientes conjuntos de ecuaciones lineales tienen coeficientes comunes pero diferentes
miembros derechos:
(a)

[~ -1
2 iJ r::i [~J
(b)

(e)
[~ -1
2 iJ r::i [~2]
u iJ r::i ~1 l
1
-1
2 [

Los coeficientes y los tres conjuntos de miembros derechos se pueden combinar en un arreglo

1 -2
-1 3 4 5
2 -2 -2

Si aplicamos el método de Gauss-Jordan al arreglo anterior y reducimos las primeras tres


columnas a la forma de matriz unitaria, las soluciones de los tres problemas se obtendrán
automáticamente en la cuarta, quinta y sexta columnas al ténnino de la eliminación. Calcule
la solución paso por paso con MATLAB siguiendo este procedimiento.
(3.9) Calcule el inverso de

A = [~ ~]
con MATLAB y luego verifique que AA- 1 = I y A- 1A = /.
(3.10) Utilice MATLAB para calcular el inverso de

A
-1
2
-1
o
~l ~
2 -1
-1 2
l
B
[H ~l
:iroblemas 139

(3.11) Utilice MATLAB para obtener el inverso de

(3.12) Encuentre el inverso de

M [~l !9 ~]
por el método de Gauss-Jordan en MA TLAB. Utilice pivoteo.
(3.13) (i) Descomponga las siguientes matrices en matrices L y U paso a paso con MATLAB; (ii)
verifique la descomposición calculando el producto LV.
(a)

~l ~1]
-1
A 2
[
-1
(b)

B
[ ~3
-1
4
-1 ~l l
(3.14) Resuelva las siguientes ecuaciones utilizando descomposición LU:

(a)

~l ~l H::l
-1

(b)
[
2
-1 rn
~3 ~1] [::J rn
-1
4
[
-1

(3.15) Obtenga el detenninante de las siguientes matrices por Ja eliminación hacia adelante del
método de eliminación de Gauss:

A= [~ ~]
B = [~ ~]
140 Capítulo 3 Álgebra lineal

C=
[l
-1
2
3 ~3 l
D=
¡-1o2
-1
2
2-3]
3 2
4 1
5 1 -1

(3.16) Calcule el detenninante de

A~ [~ ~]
2
9 3
-1 2
-2 -1
que puede descomponerse para dar el producto de

[~
o
8.75
o o
l
l
L=
-1.75 o
2.2 oo
-2.5 -0.4285 4.8052

[~
0.25 0.125 0.125
1 0.238 -0.0143
U= o 1 2.545
o o 1

(3.17) (i) Invente un ejemplo de matriz 3 por 3 que sea singular. (ii) Trate de obtener el inverso de
Ja matriz. Trate de obtener el detenninante de la matriz. Trate de descomponer la matriz en
matrices L y U.
(3.18) Obtenga el detenninante de A" 1, donde

A=BCD

B =
[
006
l [
3O 42 31 , C = 1
-1
o
o1
2] , D = [ -2
O
32
1
5
o1
O
27
º]
(3.19) Calcule el detenninante de la transpuesta de las matrices del problema anterior y demuestre
que el detenninante de A es igual al detenninante de A1• Haga primero el cálculo manual y
· Juego verifiquelo con MA TLAB.
- oblemas 141

(3.20) La matriz A es la matriz de Hilbert Cie 12-x- J 2 dada por


A= [a;j]

donde a;j = l/(i + j-1). Calcule (i) A- 1, (ii) A- 1A, (iii) ([ 1f 1A- 1•

(3.21) Elabore su propio guión para resolver una ecuación lineal de cualquier tamaño (matriz
cuadrada) mediante la eliminación de Gauss. El guión deberá incluir el cálculo del determi-
nante.
(3.22) Cree su propio guión para calcular el inverso de cualquier matriz cuadrada mediante el
método de Gauss-Jordan.
(3.23) Expanda el detenninante de la siguiente matriz a una fonna polinómica:

2- s 4
A 1 -1 - s
[
2 o
Capítulo 4

Polinomios e interpolación

El objetivo principal de la interpolación es interpolar datos conocidos en puntos discretos para


poder estimar los valores funcionales entre dichos puntos. Sin embargo, este objetivo básico
se extiende y aprovecha de muchas formas distintas para derivar otros métodos numéricos. Por
ejemplo, los métodos de integración numérica se derivan integrando polinomios de interpola-
ción y las aproximaciones de diferencias finitas son derivadas de polinomios de interpolación.
Por esta razón, es indispensable estudiar las expresiones de los polinomios de interpolación, su
exactitud y los efectos de la selección de puntos de datos. Aunque existen formas alternativas
de expresar los polinomios de interpolación, nos concentraremos en las formas de serie de
potencias e interpolación de Lagrange. También estudiaremos la diferenciación y la integra-
ción de los polinomios de interpolación. Presentaremos los polinomios de interpolación que
utilizan puntos no equiespaciados junto con los puntos de Chebyshev. También presentaremos
la interpolación doble de Lagrange y la interpolación transfinita para dos dimensiones.

4.1 COMANDOS DE MATLAB PARA POLINOMIOS


Expresamos la forma de serie de potencias de un polinomio con

y= c¡x'1 + c:zx'1- 1 + ... + CnX + Cn+I (4.1.1)

donde n es el orden del polinomio y los e¡ son coeficientes. El polinomio puede expresarse
también en la forma agrupada

y= (( ..((c¡x + c2)x + c3)x ... + Cn)x + Cn+I) (4.1.2)

o en la forma factorizada

y= c1(x-r¡) (x- r2) ... (x- r11) (4.1.3)

donde las r¡ son raíces del polinomio. Por ejemplo, el polinomio

142
Sección 4.1. Comandos de MATLAB para polinomios 143

y= x 4 + f,x3- 7x2-8x-12 (4.1.4)

se puede escribir de la forma equivalente

y= ((((x + 2)x- 7)x- 8)x + 12) (4.1.5)

bien
y= (x- l)(x-2Xx + 2Xx + 3) (4.1.6)

Un polinomio de orden n tienen raíces, algunas de las cuales pueden ser valores múltiples
omplejos. Si todos los coeficientes son reales, todas las raíces complejas se encontrarán en
conjugados complejos.

Coeficientes de potencias: En MA TLAB, un polinomio se representa mediante un vector


fila que contiene los coeficientes de las potencias en orden descendente. Por ejemplo, el
linomio
y = 2x3 + x 2 + 4x + 5 (4.1.7)

representa con
p = (2 1 4 5]

Raíces: Las raíces de un polinomio se obtienen mediante el comando roots. Por ejemplo,
el polinomio dado por la ecuación 4.1. 7,

r = roots(p)

uce
I =
0.2500 + 1.5612i
0.2500 - 1.5612i
-1.0000

quí, las raíces se dan en fonna de vector de columna.


Si se conocen todas las raíces, los coeficientes pueden recalcularse con el comando poly.
orejemplo,
poly(r)

uce
ans =
1.0000 0.5000 2.0000 2.5000
144 Capítulo 4 Polinomios e interpolación

Observe, sin embargo, que todos Jos coeficientes son Ja mitad de Jos coeficientes originales de
la ecuación 4.1. 7. Esto se debe a que un polinomio determinado a partir exclusivamente de las
raíces sigue siendo arbitrario en cuanto a un multiplicador constante. Para poder determinar
un polinomio de orden n, se requieren n + 1 puntos de datos, pero el número de raíces de un
polinomio es sólo n; por ello, MA TLAB normaliza Jos coeficientes de modo que el primero
sea la unidad.
Aunque las conversiones de coeficientes a raíces y viceversa son fáciles con MATLAB,
debemos tener cuidado en lo que se refiere a Ja exactitud de los cálculos. La conversión tiende
a ser menos exacta si hay múltiples raíces. Como ejemplo de inexactitud, consideremos

y= (x-1)6
= x6 - 6x5 + 15x4 - 20x 3 + 15x2 - 6x + 1 (4.1.8)

que tiene una raíz séxtuple de x = 1. Si tratamos de calcular las raíces con roots, las respuestas
son

r = roots( [1 -6 15 -20 15 -6 1))


r
1.0035 + 0.0020i
1.0035 - 0.0020i
1.0000 + 0.0040i
1.0000 - 0.0040i
0.9965 + 0.0020i
0.9965 - 0.0020i

que son distintas de la unidad. La discrepancia de todas las raíces respecto de la unidad se debe
a errores de redondeo durante el cálculo y depende de la computadora utilizada. En una
computadora diferente, las discrepancias podrían ser distintas. 1

Evaluación de polinomios: Los polinomios pueden evaluarse con el comando polyval.


Por ejemplo, para el polinomio

y= 3x4 - 7x 3 + 2.x2 + x + 1 (1.4.9)

los siguientes comandos calculan el valor de y(2.5):


e= [3, -7, 2, 1, l);
xi = 2.5;
yi = polyval(c, xi)

Si xi es un vector que contiene múltiples valores de la abscisa, yi se convierte en un vector


de las respuestas con la misma longitud que xi.

1
La obtención de raíces con muchos múltiplos es uno de l~s problemas más dificiles de métodos numéricos.
: -=cción 4.1. Comandos de MATLAB para polinomios 145

Ajuste de polinomios: Un polinomio de orden n está determinado de fonna única si se dan


- 1 puntos. En otras palabras, el polinomio de orden n ajustado a n + 1 puntos de datos, (x¡,
. i = 1, 2, ... , n + 1, es único. Los coeficientes del polinomio se pueden detenninar fácilmente
polyf i t. Suponga que un conjunto de datos está dado por

X (1.1, 2.3, 3.9, 5.1)


y= [3.887, 4.276, 4.651, 2.117)

= onces
a polyfit(x,y,length(x) - 1)
uce
a =
-0.2015 1.4385 - 2 . 7477 5.4370

es un vector de los coeficientes del polinomio. El tercer argumento de polyfit es


portante, y se le asigna el valor length (x) - 1 porque el orden del polinomio es igual al
ero de puntos de datos menos uno. El polinomio detenninado aquí es

y= --0.2015x3 + 1.4385x2- 2.7477x + 5.4370 (4.1.10)

- desea evaluar el polinomio anterior para un vector de abscisas xi, escriba


yi = polyval(a,xi)
Diferenciación e integración: La integración del polinomio dado por la ecuación 4.1 .1 es

Y= f Ydx =

n+l~
.Jl+I c2_J1 Cn 2
+2~ + ... +2.r+cn+1x+c11+2 (4.1.11)

nde c 11+2 es una constante de integración. Si los coeficientes de la ecuación 4. 1.11 están
os por un vector de fila e, los coeficientes de Y pueden calcularse con el guión po ly_ i tg
-rado en FM 4.1. Su sintaxis es la siguiente:

d = poly_itg(c)
nde e es el vector de coeficientes del polinomio y y des el vector de coeficientes después
la integración, que es igual a
e¡ c2
[ - - , - ... c,,+1] (4.1.12)
n + 1 n,
rve, empero, que la constante de integración Cn+2 no está incluida.
La primera derivada de la ecuación 4.1 .1 es

y' = nc1X1- 1 + (n - 1)c2.x'1- 2 + ... +e,, (4.1.13)

~os coeficientes de la primera derivada se pueden calcular con po l yder , cuya sintaxis es:
146 Capítulo 4 Polinomios e interpolación

b = polyder(c)
donde e tiene el mismo significado que antes, mientras que b es el vector de coeficientes
igual a
[nc1,(n - l)c2, ... en] (4.1.14)

Definimos dos polinomios:

Ya= a1x'" + aixn· 1 + ... + amX + a111+1


Yh = b1~ + b~-I + ... + b,.x + bn+I

y suponemos que sus vectores de coeficientes son a y b, respectivamente. La sintaxis de su


suma es:
e = poly_add(a,b)

Para la resta del polinomio b de a:


e= poly_add(a,-b}

El producto de dos polinomios, uno de orden m y el otro de orden n, se convierte en un


polinomio de orden d = m + n:

Ye= YaYh = c1xd + cixd-I + ... + CdX + Cd+I (4.1.15)

La orden de MA TLAB para obtener los coeficientes de Ye es:


e = conv(a,b)

La división de un polinomio Ya entre otro polinomio Yh satisface

Ya = Yq)'h + Yr

donde Yq es el cociente y Yr es el residuo de la división. Los polinomios Yq y Yr se calculan con


deconvcomo

[q,r] = deconv[a,b]
donde q y r representan los coeficientes de yq y de Yr, respectivamente.

4.2 INTERPOLACIÓN LINEAL


La interpolación lineal es la base de muchos métodos numéricos. Por ejemplo, si integramos
la interpolación lineal derivamos el método de integración llamado la regla trapezoidal. Otro
ejemplo es el empleo del gradiente de la interpolación lineal como aproximación a la primera
derivada de una función.
La interpolación lineal es una línea ajustada a-9os puntos de datos (véase la figura 4.1) y
está dada por
a:ción 4.2. Interpolación lineal 147

b-x... x-a
g(x) = b-af(a) + b- af(b) (4.2.1)

forma equivalente, por

g(x) = f(b)- [(a) (x- a)+ f(a)


b-a

ef(a) y f(b) son valores conocidos def(x) en x =a y x = b, respectivamente.

=f(x)

y=g(x)

f(b)

X=8 X=b X
Figura 4.1 Interpolación lineal

error de la interpolación lineal se puede expresar en la forma

e(x) = 0.5(x- aXx- b)f"(e), a~ X~ b, a~ e~ b (4.2.2)

e e (pronunciado "xi") depende de X pero se encuentra en algún punto entre a y b.2 La


ión 4.2.2 es una función dificil de manejar porque no podemos evaluar con exactitud. No
te, a partir de la ecuación 4.2.2 podemos decir que le(x)I está acotado por

je(x)I ~ 0.5 1 (x- a)(x - b)I max lf"Ce>I (4.2.3)


a~x~b

evidente que el error es una función de x, y que desaparece en x = a y en x = b. El máximo


error ocurre aproximadamente en el punto medio xm = 0.5(a + b). Sif"(x) es casi constante
el intervalo,f"Ce) en la ecuación 4.2.2 puede aproximarse conf"(xm).

2
Véase Nakamura, Applied Numerical Methods in C, Prentice-Hall, 1992.
148 Capítulo 4 Polinomios e interpolación

MATLAB cuenta con un comando para Ja interpolación lineal. El comando interpl


determina el valor funcional de una abscisa especificada denotada por xi interpolando lineal-
mente a partir de Ja tabla de Ja función. En interpl se aplica interpolación lineal a cada
intervalo de datos. La abscisa xi también puede ser un vector de valores de x especificados.
La sintaxis es:

yi = interpl(x, y, xi)

Aquí, x es un arreglo de columna de los valores x de Jos datos; y es un arreglo de columna de


los valores y de Jos datos. Ambos arreglos, x y y, deben tener el mismo número de filas, pero
y puede tener más de una columna. xi es un escalar o un arreglo de valores de x para Jos cuales
queremos evaluar los valores de y por interpolación lineal. Como alternativa, in terpl puede
escribirse así:

yi interpl(x, y, xi, 'linear')


yi interpl(x, y, xi, 'spline')
yi interpl(x, y, xi, 'cubic')

En el segundo formato, puede escogerse el método de interpolación entre los siguientes: (i)
interpolación lineal, (ii) spline cúbica e (iii) interpolación cúbica. Todos los métodos requieren
que x sea monotónica. La interpolación cúbica requiere que x esté equiespaciada. En el
capítulo 9 se darán más detalles sobre la interpolación cúbica y de spline.

Ejemplo 4.1

Dos propiedades materiales del monóxido de carbono se dan en la siguiente tabla:

T Beta Alfa
300 3.33e3 0.2128e4
400 2.50e3 0.3605e4
500 2.00e3 0.5324e4
600 1.67e3 0.7190e4

donde Tes Ja temperatura en kelvin, Beta (o J3) es el coeficiente de expansión térmica


(l/K) y Alfa (o ex) es la difusividad térmica (m 2/s). Obtenga con MATLAB las
propiedades para T=321, 440 y 571, respectivamente.

Solución
El siguiente guión responde a Ja pregunta:
Temp = (300, 400, 500, 600] ';
Beta= 1000* (3.33, 2.50, 2.00, 1.67) ';
Alfa= 10000* [ 0.2128, 0 . 3605, 0.5324, 0.7190] ';
Ti=[321, 440, 571] ';
Propdad = interpl(Temp, [Betq, Alfa] , Ti, 'linear');
[Ti, Propdad]
n 4.3. Interpolación polinómica con forma de serie de potencias 149

resultados son
ans =
1.0e+03 *
0.3210 3. 1557 2.4382
0.4400 2.3000 4.2926
o. 5710 1.7657 6.6489

de la primera columna es la temperatura, la segunda es Beta y la tercera es Alfa.

E"emplo 4.2

nga que una relación funcional y= y (x) está dada en forma tabular como
X y
o 0.9162
0.25 0.8109
0.50 0.6931
o. 75 o. 5596
l . 00 0.4055
donde y (x) es una función monotónicamente decreciente de x. Encuentre los valores
dex que satisfacen y= 0.9, 0.7, 0.6 y 0.5, respectivamente, utilizando MATLAB.

Solución
Éste es un problema inverso; es decir, se considera que x es función de y, es decir,
x =/(y). La solución se calcula con el siguiente guión:
x = [O.O, 0.25, 0.5, 0.75, 1.0)';
y= [0.9162, 0.8109, 0.6931, 0.5596, 0.4055) 1
;

yi = [0.9, 0.7, 0.6, 0.5) 1


;

xi= interpl (y, x, yi, 'linear');


[yi, xi]

Los resultados son:


ans
0.9000 0.0385
o. 7 000 0.4854
0.6000 0.6743
0.5000 0.8467

.3 INTERPOLACIÓN POLINÓMICA CON FORMA DE SERIE DE


POTENCIAS
unque ya vimos como ajustar un polinomio a un conjunto de puntos de datos con polyf i t,
esta sección abordaremos de nuevo el problema desde un punto de vista más fundamental.
150 Capítulo 4 Polinomios e interpolación

y1
Función y(x)
y Interpolación cúbica

y• y(x)

x2

Figura 4.2 Graficación de un conjunto de datos

Un polinomio de interpolación puede expresarse en varias formas alternativas, que se


pueden transformar entre sí. Entre ellas están las series de potencias, la interpolación de
Lagrange, la interpolación hacia adelante de Newton y Ja interpolación hacia atrás de Newton.
Sea cual sea la fórmula de expresión, todas las fórmulas de interpolación de polinomios
ajustadas a Jos mismos datos son matemáticamente equivalentes.
Suponga que n + 1 puntos de datos se dan como

Xl Xn+l
Y1 Yn+1

donde x1, x2, ... , son abscisas de los puntos de datos y se suponen en orden creciente. El
incremento entre dos valores consecutivos de x es arbitrario. El polinomio de orden n que pasa
por los n + 1 puntos de datos puede escribirse como una serie de potencias así:

g(x) = c1x" + c2X"- 1 + ... + Cn+I (4.3.1)

donde los e; son coeficientes. Si hacemos g(x;) =y; para cada uno de Jos n + 1 puntos de datos,
obtenemos n + 1 ecuaciones lineales, que se expresan en notación de matrices como

Ac=y (4.3.2)

donde

:l·
n-1
[ x• l XI X1

[,::J
xn n-1
X2 X2
A =
xL n-1
Xn+I Xn+I
1 ..
e
y=
[y::,i (4.3.3)
Sección 4.3. Interpolación polinómica con forma de serie de potencias 151

Si resolvernos la ecuación 4.3.2, los coeficientes quedarán determinados. También podernos


eterminar los coeficientes con polyf i t (x, y, n), corno se explicó en la sección 4.1. La
-gura 4.2 ilustra un polinomio ajustado a cuatro puntos de datos tornados de una función y(x).

Ejemplo 4.3

Determine el polinomio que pasa por los tres puntos de datos: (O, 1), (1, O. 75) y (2, O),
donde el primer número de cada par es el valor x de cada punto de datos y el segundo
número es el valor y.

Solución
El orden de un polinomio ajustado a tres puntos de datos es 2, así que lo primero que
hacernos es escribir el polinomio de segundo orden corno

g(x) = c1x2 + cix + c3

Si ajustarnos el polinomio a cada uno de los puntos de datos tenernos

c¡(0)2 + c2(0) + c3 = 1
c1(l)2 + c2(l) + c3 =0.75
c1(2) 2 + c2(2) + c3 =O

De la primera ecuación obtenernos c3 = 1. De la segunda y la tercera ecuaciones


obtenernos c2 =O y el = -0.25. Entonces, el polinomio es

g(x) = -0.25.x2 + 1

Ejemplo 4.4

Un conjunto de cuatro puntos de datos está dado por

X (1.1, 2.3, 3.9, 5.1]


y= (3.887, 4.276, 4.651, 2.117]

Encuentre los coeficientes del polinomio de interpolación ajustado al conjunto de


datos resolviendo la ecuación 4.3.2 y luego determine el valor de y para x = 2.101 y
4.234 mediante la fórmula de la interpolación. Grafique el polinomio junto con los
puntos de datos.

Solución
He aquí un guión en MA TLAB:
152 Capítulo 4 Polinomios e interpolación

4.5
o
¡,;
..,.2., 4

..,
G>

~ 3.5
e::::J
a.
.•: 3
E
ca
2.5

1.5 2 2.5 3 3.5 4 4.5 5 5.5


X

Figura 4.3 Trazado del polinomio de interpolación

Listado 4.1
clear,clf,hold off
X= (1.1, 2.3, 3.9, 5.1)';
y= (3.887, 4.276, 4.651, 2.117)';
n=length(x)-1;
a (: ,n+l)=ones (x);
a(: ,n)=x;
for j=n-1:-1:1
a ( : , j ) =a ( : , j +1 ) . * x ;
end
coef=a\y %Solución de la ecuación lineal.
xi=(2.101, 4.234);
yi=zeros(size(xi))
for k=l:n+l
yi = yi + coef(k)*xi. • (n+l-k)
end
yi
% graficación
xp=l.1:0.05:5.1;
yp=zeros(size(xp));
for k=l:n+l
yp = yp + coef(k)*xp. • (n+l-k);
end
plot(xp,yp, x,y, 'o')
xlabel ( 'x')
ylabel('g(x) :-,puntos de datos: o')

La respuesta es
coef
-0.2015 1.4385 -2.7477 5.4370
-ección 4.4. Polinómio de interpolación de Lagrange 153

ans =
4.14574.3007

El polinomio de interpolación determinado se graficó en la figura 4.3.

Comentario: El guión anterior puede escribirse de forma mucho más compacta


utilizando polyf i t y polyval o Lagran_ .

La unicidad del polinomio de interpolación de orden n ajustado a n + 1 puntos de datos


de demostrarse como sigue: Suponga la hipótesis contraria, es decir, que la interpolación
g(x) no es única. En tal caso, debe existir otro polinomio k(x) de orden n que pasa por los
smos n + 1 puntos de datos. La diferencia entre los polinomios de interpolación g(x) y k(x)
· definida por

r(x) = g(x) - k(x)

be ser un polinomio de orden n o menor porque tanto g(x) como k(x) son polinomios de
en n. Por otro lado, como tanto g(x) como k(x) coinciden en los n + 1 puntos de datos, r(x)
ser cero en dichos puntos. Esto significa que r(x) tienen+ 1 ceros, de modo que r(x) debe
un polinomio de orden n + 1. Esto contradice la hipótesis de que r(x) es un polinomio de
n no menor, y demuestra que la hipótesis era incorrecta.

4 POLINOMIO DE INTERPOLACIÓN DE LAGRANGE


fórmula de interpolación de Lagrange es una alternativa a la fonna de serie de potencias
los polinomios de interpolación, y tiene dos ventajas importantes: (1) con la fórmula de
rpolación de Lagrange no hay necesidad de resolver ecuaciones lineales y (2) las fórmulas
interpolación de Lagrange permiten la interpolación incluso cuando los valores funcionales
expresan con símbolos porque no se conocen los valores numéricos. Gracias a la primera
taja, la eficiencia computacional de la interpolación de Lagrange es mayor que la de la
a de serie de potencias, sobre todo cuando el número de puntos de datos es grande;
ás, es menos susceptible a los efectos de los errores de redondeo. Gracias a la segunda
taja, es posible expresar un polinomio en términos de ordenadas no determinadas de los
tos de datos.
Consideremos una fórmula de interpolación polinómica que pasa por los puntos de datos:

Xl X2 Xn+l
Yl Y2 Yn+l

de presentar el principio básico de la fórmula de Lagrange, consideremos el producto de


ores

u1(x) = (x-x2)(x-x3) ... (X-Xn+1) (4.4.1)


154 Capítulo 4 Polinomios e interpolación

que está relacionado con los n + 1 puntos de datos mostrados en la sección anterior. La función
u¡ es un polinomio de orden nen x, y es cero para x = x2, x3, ... , Xn+l pero no O para x =xi. Si
dividimos u1(x) entre u1(x1), la función resultante

U¡ (x) = U¡ (x) = (x-x2)(X-X3) ... (X-Xn+I)


(4.4.2)
u1 (x1) (x1 -x2) (x1 -x3) ... (x¡ -Xn+I)

satisface v1(x1) = 1 y v¡(x;) =O para i = 2, 3, ... , n + 1. De forma similar,

u (x) = u2(x) = (x-x1)(x-x3) ... (X-Xn+I)


2
u2(x2) (x2-x1) (x2-x3) ... (x2-Xn+1)

satisface vi(x2) = 1 y vi(x;) =O para toda i excepto i = 2. En términos más generales, podemos
escribir v; así:
n+l
u;(x)=--=
U¡(x) rr (X -X¡)
- (4.4.3)
u; (x;) j-1,j.-i (x; - Xj)

La función v;(x) es un polinomio de orden n que satisface v;(x;) = 1 y v;(xj) =O para toda},,_ i.
Decimos que v;(x) es un polinomio de coeficientes o una función de forma. Las funciones de
forma se ilustran en la figura 4.4, donde n = 7 y se supone que el espaciado de las abscisas es
la unidad.
Si multiplicamos v1(x), vi(x), ... Vn+i(x) por y1,yi, ... ,yn+l, respectivamente, y sumamos
los resultados, la sumatoria se convierte otra vez en un polinomio de orden n que es igual a y;
para cada x =x;. Las funciones v;(x) se ilustran en la figura 4.4. La fórmula de interpolación de
Lagrange de orden n se escribe así:
n+I
g(x) = ~ u;(x)y; (4.4.4)
1-1

Paran= 3, por ejemplo, la ecuación anterior se escribe de forma más explícita como
(x-x2)(x-x3)(x-x4)
()
g x = (x1 -x2) (x1 -x3) (x1 -x4) y¡
(x -x¡) (x-x3) (x-x4)
+ Y2
(x2-x1) (x2-x3) (x2-x4)

(x-x¡) (x-x2) (x-x4)


+ Y3
(x3-x1) (x3-x2) (x3 -x4)

(x-x¡) (x-x2) (x-x3)


+ Y4
(x4 - x1) (x4 -x2) (x4 -x3)
- ión 4.4. Polinómio de interpolación de Lagrange 155

v1(x) v2(x)

>-
o

-0.5 -0.5
2 4 6 8 2 4 6 8
X X
v3(x) v4(x)
2

-1

-2~~-~--~-~ -2~~-~--~--'
2 4 6 8 2 4 6 8
X X

Figura 4.4 Ilustración de funciones de forma

Ejemplo 4.5

(a) A continuación damos la densidad del sodio a tres temperaturas:

Temperatura Densidad
i T; Pi
1 94ºC 929kg/m 3
2 205 902
3 371 860
Escriba la fórmula de interpolación de Lagrange que se ajusta a los tres puntos de datos.
(b) Obtenga la densidad para T = 251 ºC mediante la interpolación de Lagrange.

Solución
(a) Puesto que el número de puntos de datos es~. el orden de la fónnula de inter-
polación es 2. La interpolación de Lagrange se convierte en:
156 Capítulo 4 Polinomios e interpolación

(T)= (T-205)(T-371) (929 )+ (T-94)(T-371) ( 902 )+ (T-94)(T-205) (& 60)


p (94 - 205)(94 - 371) (205 - 94)(205 - 371) (371 - 94)(371 - 205)

(b) Si hacemos T= 251 en la ecuación anterior, obtenemos

g(25 l) = 890.5 kg/m 3

La función La gran_ que está en FM 4.4 realiza la interpolación de Lagrange. Su sintaxis


es:
yi = Lagran_(x, y, xi)

donde x y y son, respectivamente, vectores de abscisas y ordenadas del conjunto de datos, xi


es el vector de valores de x para los cuales se deben evaluar los valores de y por interpolación,
y yi es el resultado de la interpolación. El listado 4.2 ilustra la aplicación de la función
La gr a n_ con los datos del ejemplo 4.4.

Listado 4.2
cl e ar
X= (1.1, 2 . 3, 3.9, 5 . 1);
y= [ 3.887, 4.276, 4.651, 2.117];
xi = (2.101, 4.234];
yi = Lagran_(x, y, xi)

Los resultados son:

yi
4.1457 4.3007

4.5 ERROR EN POLINOMIOS DE INTERPOLACIÓN


A fin de ver cómo ocurren errores en la interpolación polinómica, escribamos una aproxi-
mación por interpolación de y = sen(x) en O ~ x ~ n con cinco puntos equiespaciados. El
polinomio de interpolación es un polinomio de cuarto orden que pasa por los puntos de datos
dados por
7t 7t 37t
x =[O, 4°' 2• 4• 7t)

7t 7t 37t
y= [O, sen(-¡). sen( ), sen(-¡-). sen(7t)]
2
El error está definido por
Sección 4.5. Error en polinomios de interpolación 157

e(x) = s'en(x) - g(x)

donde g(x) es el polinomio de interpolación ajustado a los cinco puntos de datos. En la figura
.5 se grafican el error multiplicado por 100 y la función sen(x). Podemos observar que el error
oscila y que su magnitud es mayor en los intervalos cercanos a los extremos. Este comporta-
miento del error es típico de todas las interpolaciones polinómicas con puntos equiespaciados,
aunque la forma real de la distribución del error cambia dependiendo de la función interpolada
_. del tamaño del intervalo de interpolación, lb - al.
Para poder analizar el error de las interpolaciones, necesitamos expresarlo en una forma
más sistemática. De hecho, el error de una fórmula de interpolación polinómica (para las
-armas tanto de series de potencias como de interpolación de Lagrange) está dado por

e (x) = f(x)- g(x) = L (x)/11 +!) (~) (4.5.1)

X¡ =a ~ ~~ b = Xn+ ¡ (4.5.2)

nde n + 1 es el número de puntos de datos,¡< 11 + 1>es la (n + 1)-ésima derivada de/(x) y

L(x) = (x-xi) (x-x2) ... (x-x 11 ) (x-x 11 +¡)


(4.5.3)
(n + l )!

En la ecuación 4.5.1,~depende de x pero está entre a y b. Sif(x) es un polinomio de orden


o menos, la (n + 1)-ésima derivada de/(x) desaparece, de modo que el error es cero. Si
el error no desaparece, tenemos el mismo problema que teníamos en la ecuación 4.2.2,

0.8
sen(x)
1
8 0.6
...
X
)(0.4
"¡)
.
..!.. 0.2
)(

eI>
el)

-02t) 0 .5 1.5 2 2.5 3 3.5

Figura 4.5 Aproximación por interpolación de la función seno


158 Capítulo 4 Polinomios e interpolación

porque~ depende dex pero se desconoce. Sin embargo, de la ecuación 4.5.1 podemos deducir
que

1e(x)1 ~I L (x) 1 max l/n+l (~) 1 (4.5.4)


a~~~h

El miembro derecho de la ecuación 4.5.4 ofrece una estimación máxima del error para
cualquier valor de x. El segundo término es una constante para todo el dominio, así que la
distribución del miembro derecho depende deL(x). En la figura 4.6a se muestra una gráfica de
L(x) para la interpolación con cinco puntos equiespaciados. Si comparamos la figura 4.6a
con la figura 4.5, veremos que los picos de los errores en los intervalos cercanos a los extremos
(en la figura 4.5) se deben a picos locales de IL(x)I cerca de los extremos.

(a) 5 puntos, O<x<pi (b) 5 puntos, O<x<pi/2

><
:r .~g
-0.005 -0.005

-0.010 -0.010
2 3 4 0.5 1.5 2
X X

(e) 7 puntos, O<x<pi (d) 7 puntos, O<x<pi


0.01 0.01

Abcisas con espaciado variable


0.005

.:r
)(

~
.:r
)(

~
o
-0.005 -0.005

-0.010 -0.010
2 3 4 2 3 4
X X

Figura 4.6 L(x) y los efectos de lb - al y el número de puntos

Naturalmente, nos interesa averiguar cómo pueden reducirse los errores de los polinomios
de interpolación. Podemos obtener dos respuestas inmediatas a partir de un análisis de L(x). La
primera consiste en reducir el dominio de la inter.polación, es decir, b - a. Por ejemplo, si
interpolamos sen(x) en O ~ x ~ 0.51t, L(x) será aproximadamente 1/30, como se graficó en la
Sección 4.5. Error en polinomios de interpolación 159

- gura 4.6b. La segunda consiste en aumentar el número de puntos. La figura 4.6c muestra una
gráfica de L(x) con 7 puntos para el intervalo original de O ~ x ~ 7t. En comparación con la
• gura 4.6a, el error se ha reducido a aproximadamente 1/40. Un mecanismo adicional para
:educir los errores de interpolación consiste en utilizar puntos de datos con espaciado variable,
:orno se ilustra en la figura 4.6d, donde se usan los puntos de Chebyshev que describiremos
:on mayor detalle en la sección 4. 7.
Aunque la reducción del error al aumentar el número de puntos de datos es notable, como
5e vio en el párrafo anterior, no se debe exagerar. Esta precaución es necesaria porque, si las
ordenadas de los puntos de datos tienen errores o incertidumbres, el error del polinomio de
terpolación se hace grande y aumenta rápidamente al aumentar el número de puntos. En otras
Jabras, si los datos tienen errores, la exactitud disminuye al aumentar el número de puntos.
Los errores en los datos pueden provenir de muchas fuentes distintas, incluidos errores
umanos, errores de redondeo y errores experimentales.
Ahora veremos cuál es el efecto de los errores en los datos. Supongamos que los datos se
presan mediante

f¡ =/;,exacto + e¡

nde/;,exacto es el valor exacto de/; y e¡ es un error. Entonces, el error en la interpolación de


Lagrange debido al error de los datos está dado por
n+I
ed(X) = E
i•I
v;(x)e; (4.5.5)

e está en la misma forma que la ecuación 4.4.4 excepto que se sustituye g por ed y f; por e¡.
Para fines de ilustración, consideramos la interpolación de la función sen(x) en O ~ x ~ 7t igual
que antes, con diversos números de puntos. Supongamos que todos los datos son exactos
excepto que el punto medio de cada conjunto de datos tiene un error del 1%; es decir, e¡ = O
excepto em = 1% de error, donde m es el índice del punto medio. Entonces, la ecuación 4.5.5
se convierte en

(4.5.6)

La figura 4. 7 muestra una gráfica de la ecuación anterior. Los errores con 5 y 7 puntos
véanse las figuras 4. 7a y b) son comparables con el error en el punto medio; en cambio, el
error con 11 puntos (figura 4. 7c) se amplifica por un factor de aproximadamente 5 en el primer
y último intervalos, y el error con 21 puntos (figura 4.7d) se amplifica por un factor de
aproximadamente 1250.
En síntesis, (1) se recomienda el empleo de polinomios de interpolación en un dominio lo
más pequeño posible y (2) la exactitud de la interpolación aumenta al aumentar el número de
puntos de datos sólo hasta cierto número.
160 Capítulo 4 Polinomios e interpolación

(a) 5 puntos, O<x<pi (b) 7 puntos, O<x<pi


10 10

5 5
.... ....
g o
g
Q) Q)
~
o o~

-5 -5

-10 -10
o 2 3 4 o 2 3 4
X X

(e) 11 puntos, O<x<pi (d) 21 puntos, O<x<pi


10

5
olt)
N
1::
g -
Q)

";!.
-5 -5

-10~-~--~--~-~ -10
o 2 3 4 o 2 3 4
X X

Figura 4. 7 Efectos de errores en los datos

4.6 DIFERENCIACIÓN E INTEGRACIÓN DE LA FÓRMULA DE


INTERPOLACIÓN DE LAGRANGE
Así como podemos aproximar una función mediante un polinomio de interpolación, también
podemos aproximar la derivada y la integral de una función con la derivada y la integral,
respectivamente, del polinomio de interpolación. De hecho, éste es el principio básico para la
deducción de métodos numéricos de diferenciación e integración. En esta sección no entrare-
mos en los detalles de la diferenciación o integración numéricas, ya que éstos son los temas de
los capítulos 5 y 6, respectivamente. Lo que sí trataremos es la forma de evaluar la derivada y
la integral de un polinomio de interpolación, en particular las de la fórmula de interpolación de
Lagrange.
Al diferenciar la ecuación 4.4.4, podemos escribir la primera derivada de la interpolación
de Lagrange como
n+I
g'(x) = L \{ (x)y; (4.6.1)
i=l
-ección 4.6. Diferenciación e integración de la fórmula de interpolación de Lagrange 161

'....! función de fonna v; está dada por Ja ecuación 4.4.3 en fonna factorizada. Para poder evaluar
. primero Ja expresamos en fonna de serie de potencias.
Tenga presente que v¡ en Ja ecuación 4.4.3 es un polinomio de orden n ajustado a los puntos
datos:

X= [x¡, X2, ... , Xn+I]


y= [1, O, ... , O]
:>e fonna similar, V2 es para
x = [x¡, x2, ..., Xn+I]
y= [O, 1, O ... , O]
_ en ténninos más generales, v; es para

X= [Xj]
y= [yj], con Yj = O excepto y;= 1
r tanto, el polinomio v; puede expresarse en fonna de serie de potencias ajustando un
linomio de orden n a Jos datos.
La fonna de serie de potencias de v;(x) para toda i se puede calcular con shape_ pw, cuyo
tado aparece en FM 4.6. Su sintaxis es
p = shape_pw (X);

ndex es un vector de puntos de abscisas y pes una matriz en la que la i-ésima fila representa
coeficientes de las potencias para v;(x).
A fin de verificar shape _pw, en el listado 4.3 presentamos un guión para evaluar la
terpolación de Lagrange para x;:
Listado 4.3
clear
X= (1.1, 2.3, 3.9, 5.1];
y= (3 . 887, 4.276, 4.651, 2.117];
xi = (2 .101, 4 . 234];
np = length(x)
p=shape pw(x)
for inp~1:2
for i=l:np
Temp = polyval(p(i, :) ,xi(inp))
v (i) = Temp
end
yi (inp )=v*y';
end
yi

La respuesta es:
162 Capítulo 4 Polinomios e interpolación

yi
4.1457 4.3007

La solución anterior coincide con la del ejemplo 4.4.


Para calcular al primera derivada del polinomio de interpolación de Lagrange, cada fila de
p se convierte en el vector de coeficientes de la primera derivada mediante polyder. El
siguiente guión calcula la primera derivada en los puntos de abscisas del conjunto de datos del
ejemplo 4.4:

Listado 4.4
clear
X= (1.1, 2.3, 3.9, 5.1);
y= (3.887, 4.276, 4.651, 2.117);
xi = [2.101, 4.234);
np = length (x);
p=shape pw (x) :
for i=1:np
pd(i,:) = polyder (p(i,:));
end
for inp=l:length(xi)
for i=l:np
vd(i) = polyval(pd(i, :),xi(inp));
end
yi (inp) =vd*y';
end
yi
La respuesta es:

yi =
0.6292 -1.4004

En el guión anterior, p ( i, : ) es la i-ésima fila de p y contiene los coeficientes de potencias de


v¡(x), y pd ( i, : ) contiene los coeficientes de potencias de x/(x). Los valores de yi son los
valores de primera derivada de la interpolación de Lagrange evaluados para x = 2.1O1 y 4.234,
respectivamente. 3

4.7 INTERPOLACIÓN CON PUNTOS DE CHEBYSHEV Y LEGENDRE


Las figuras 4.6a-c nos muestran que los picos de error locales de la interpolación de Lagrange
empleando puntos equiespaciados son mínimos en la parte media, pero aumentan hacia los

30tra forma de obtener el primero es encontrar el penúltimo elemento del vector devuelto por c=po 1yf i t ( x-
4. 234, y, length(x)-1); el segundo se obtiene, igualmente de c=polyfit(x-2.101, y,
length (x) -1) . Si desea mayores detalles, véase la sección 6.1.
Sección 4.7. lnerpolación con puntos de Chebyshev y Legendre 163

tremos del dominio. El problema es cómo-reducir el error máximo de una interpolación. Esto
• ede hacerse redistribuyendo los puntos de modo que el tamaño de intervalo sea mayor en la
e media y menor en los extremos. Sin embargo, la distribución óptima de los puntos
uepende del propósito del polinomio de interpolación.
Si estamos interpolando para aproximar una función, los puntos determinados pdr un
linomio de Chebyshev son óptimos, ya que la distribuciónL(x) se vuelve más uniforme. Otra
taja es que los errores en los datos no se extienden ni amplifican como en el caso de los
tos equiespaciados.
En esta sección también veremos los puntos de Legendre, que son similares a los de
byshev pero se utilizan principalmente para la integración numérica. Cuando la interpola-
se emplea como un mecanismo intermedio para derivar una fórmula de integración
érica, los puntos determinados por el polinomio de Legendre son óptimos porque el error
la fórmula de integración se minimiza.

Polinomios de Chebyshev y puntos de Chebyshev: Los polinomios de Chebyshev están


os por

To(x) =1
T1(x)=x-l
T2(X) = 2x2 - 1
3
TJ(x) = 4x - 3x

Tk(x) = 2xTk-1(x) - Tk-2(x) (4.7.1)

la figura 4.8 graficamos los polinomios de Chebyshev paran= O, 1, 2, 3, 5 y 8.


Los coeficientes de un polinomio de Chebyshev en forma de serie de potencias pueden
ularse con la función Cheby_pw, cuyo listado aparece en FM 4.5. La sintaxis es
p = Cheby_ pw(n)

den es el orden del polinomio de Chebyshev y p es un arreglo de fila de los coeficientes.


Las raíces de Chebyshev pueden calcularse con
sort(roots(Cheby_pw(n)))

-tilizamos sor t para listar las raíces en orden ascendente. Por ejemplo, si n = 5, la orden
terior produce:
sort(roots(Cheby_ pw(S)))
ans
-1.446744735887175e+OO
-8.105119796664001e-Ol
164 Capítulo 4 Polinomios e interpolación

TO(x) T1(x) T2(x)

>-o >-o

-1 -1

-1 o -1 o
X X

T3(x) TS(x) T8(x)

-1 -1

-1 o -1 o -1 o
X X X

Figura 4.8 Gráficas de polinomios de Chebyshcv

o
8.105119796664000e-Ol
1.446744735887175e+OO

El polinomio de Chebyshev de orden k también puede escribirse como

Tk(x) = cos(kcos- 1 (x)), -1 ~ x ~ 1 (4.7.2)

La ecuación 4.7.2 tiene k raíces, todas las cuales están en [-1, l]. Las raíces también pueden
calcularse con
k + 0.5 - i .
x; = cos( k 7t ), z = 1, 2, ... k (4.7.3)

que produce los mismos resultados que roots (Cheby _pw (n) ) . Si el intervalo de interpola-
ción es [a, b], las raíces dadas por la ecuación 4.7.3 se convierten al intervalo [a, b] mediante

1 [(b - a ) cos(k + o.k5 - i 7t ) + a + b] , z. -- 1, 2 ,. ..k


x; -- 2 (4 .7 .4)

La figura 4.9 muestra la distribución de L(x) con nueve puntos de Chebyshev y también
con nueve puntos equiespaciados para el intervalo de interpolación O ~ x ~ 5. La altura de los
Sección 4.7. lnerpolación con puntos de Chebyshev y Legendre 165

":. os locales de L(x) es unifonne y el valor máximo de IL(x)I es aproximadamente la quinta


~e del valor correspondiente con puntos equiespaciados.

(a) Nueve puntos de Chebyshev y L(x)

2 3 4 5
X

(b) Nueve puntos equiespaciados y L(x)

-0.5

·1

• .5.

2 3 4 5
X
Figura 4.9 L(x) de puntos de Chebyshev

Además de que los puntos de Chebyshev reducen el error máximo, otra ventaja significa-
. ·a es que el error de los datos no se amplifica, como sucede con los puntos equiespaciados.
En la figura 4.1 O graficamos el porcentaje de error de la interpol~ción debido al error de
datos del 1% en el punto de datos medio. Si comparamos la figura 4.1 O con cada una
e las partes de la figura 4. 7, veremos que la influencia del error de los datos se limita a las
inmediaciones de ese punto de datos. Aunque hemos ilustrado el efecto del error de los datos
en el punto central, podemos sacar las mismas conclusiones para los errores de datos en
· erentes puntos.
166 Capítulo 4 Polinomios e interpolación

(a) 5 puntos, O<x<pi (b) 7 puntos, O<x<pi


10 10

5 5
... ...
g o
eQj o
Q)

:.!!
o :.!!
o

-5 -5

-10 -10
o 2 3 4 o 2 3 4
X X

(e) 11 puntos, O<x<pi (d) 21 puntos, O<x<pi


10 10

5 5
... ...
eQj eQj
:.!!
o :.!!
o

-5 -5

-10 -10
o 2 3 4 o 2 3 4
X X

Figura 4.10 Efectos del error de los datos con puntos de Chebyshev

Puntos de Lobatto: Los puntos de Lobatto son raíces de la primera derivada de un


polinomio de Chebyshev más x = -1 y x = l. Para un intervalo [a, b], el polinomio de
Chebyshev de orden k genera k + 1 puntos de Lobatto, a saber,

1 k- i .
x; = i[(b- a) cos(-k-7t) +a+ b], i =O, 1, ... k (4.7.5)

Los puntos de Lobatto, así como L(x) basado en ellos, se grafican en la figura 4.11. El valor
máximo deL(x) en la figura 4.11 es más alto que con los puntos de Chebyshev en la figura 4.9a,
pero significativamente menor que con puntos equiespaciados como en la figura 4.9b.

Puntos de Legendre: Los puntos de Legendre pocas veces se utilizan únicamente para
fines de interpolación, pero son importantes porque el método de integración numérica llamado
cuadratura de Gauss-Legendre (véase la sección 5.3) se basa en la integración del polinomio
de interpolación empleando los puntos de Legendre.
Los polinomios de Legendre están dados por
Po(x) =1
: ección 4.7. lnerpolación con puntos de Chebyshev y Legendre 167

Diez puntos de Lobatto y L(x) "'

3~~~~~~~~~~~~~

o 0.5 1.5 2 2.5 3 3.5 4 4.5 5


X
Figura 4.11 L(x) con puntos de Lobatto

P1(x) = x

P2(x) -!<3 2 - 1)
=

P3(x) = -!<s 3 - 3x)

Pj(X) = 4J [(2}- l)xPj-l(X)-(}- 1) Pj-2(x)]


coeficientes del polinomio de Legendre de orden n pueden calcularse con Legen_pw; por
plo,

p Legen_ pw(6)

uce
p =
14.4375, o, -19.6875, o, 6.5625, o, -0.3121

Las raíces de un polinomio de Legendre pueden calcularse con roots. Por ejemplo, para
=6:
sort(roots(Legen_pw(6)))
ans
-9.324695142031516e-01
-6.612093864662646e-01
-2.386191860831969e-Ol
2.386191860831969e-01
6.612093864662645e-01
9.324695142031515e-01

nde utilizamos sor t para listar los puntos en orden ascendente.


168 Capítulo 4 Polinomios e interpolación

4.8 INTERPOLACIÓN DE HERMITE CÚBICA


Podemos ajustar un polinomio no sólo a valores funcionales sino también a derivadas. Los
polinomios ajustados a valores tanto funcionales como de derivada se denominan polinomios
de interpolación de Hermite o polinomios osculantes. Consideraremos aquí el polinomio de
Hermite cúbico,
3 2 (4.8.1)
f(s) = c1s + c2s + CJS + C4

que se ajusta a dos valores funcionales y a dos derivadas. Consideremos el intervalo entre dos
puntos, s1 y s2, y supongamos que los valores funcionales y las primeras derivadas se
especifican en los puntos 1 y 2 (véase la figura 4.12). Las cuatro ecuaciones se escriben así:

f(sl) = c¡sI+ c2sr+ c3s1 + c4 =f¡

f' (s1) = 3cis1+ 2c2s1 + c3 =fí


(4.8.2)
f(S2) = C¡S ~+ c2s ~+ C3S2 + C4 =Ji
f' (s2) = 3c1s ~+ 2c2s2 + c3 = fí

La ecuación 4.8.2 tiene cuatro ecuaciones lineales con cuatro coeficientes por determinar.

l(s1) l(s2)

f'(s1) f'(s2)

I< h
~1
S=S1 s2

t=O l=h

Figura 4.12 Intervalo para la interpolación de Hcnnite cúbica

Ejemplo 4.6

Determine una curva que pase por el punto A y el punto Ben las coordenadas x-y (véase
la figura 4.13) con las siguientes condiciones:
Sección 4.8. Interpolación de Hermite cúbica 169

A: x= 1,y= 1, dyldx= O
B: x=4,y= 2, dxldy= O

2.4 (x=4, y=2)


2.2 dx/dy=O
B: S=1

1.8

1.8
>
1.4

1.2
A: s=O
<>---~~--'"""-~- - - - - - - -
(x=1, y=1)
0.8
dy/dx=O
o.e 1.5 2.5 3.5
X

Figura 4.13 Condiciones para la curva deseada

Solución
Como tanto y (x) como x(y) presentan una singularidad en uno de sus extremos, no es
posible ajustar y en función dex ni x en función de y. Al ajustar una curva geométrica,
como en el presente ejemplo, es común introducir un parámetros y expresar cada x y
y como x(s) y y (s). Suponemos s"" O en el punto A y s = 1 en el punto B. Cada x y y
se expresará como un polinomio cúbico de s:

x = x(s) = c¡s3 + c2s2 + CJS + c4 (A)

(B)

Las condiciones de frontera parax(s) y y(s) pueden escribirse así:

s =O: x(O) = 1, dxld'> =a; y(O) = 1, dy/d., =O (C)

s = 1: x(l) = 4, dx/ds =O; y(l) = 2, dy/ds = b (D)

donde a y b son parámetros arbitrarios. Si eliminamos ds, se satisfacen las condiciones


de extremo originales

s =O: dy/dx = O
s = 1: dxldy=O
170 Capítulo 4 Polinomios e interpolación

Si introducimos las ecuaciones (A) y (B) en las (C) y (D), respectivamente, obtenemos

C4 = 1
c3 =a
c1 + c2 + c3 + c4 = 4
3c1 + 2c2 + c3 = O
d4 = 1
d3 =o
d¡ + d2 + d3 + d4 = 2
3d¡ + 2d2 + d3 = b

Las constantes a y b son arbitrarias, pero afectan la forma de la curva en cierto grado.
Después de algunos ensayos, escogemos los siguientes valores: a= b = 3. He aquí un
guión que determina los coeficientes resolviendo las ecuaciones anteriores:
a 3;
b 3;
e [0,0,0,1; 0,0,1,0; 1,1,1,1; 3,2,1,0]\[l; a; 4; O]
d [0,0,0,l; 0,0,1,0; 1,1,l,1; 3,2,1,0)\[l; O; 2; b]
s 0:0.01:1;
x polyval(c,s); y= polyval(d,s); plot(x,y)
El resultado es
e =
-3.0000
3.0000
3.0000
1.0000
d
1
o
o
1
En la figura 4.14 se muestra una gráfica de la curva de interpolación de Hermite cúbica.

La implementación de la interpolación de Hermite cúbica se puede simplificar si se


aproximan las condiciones de frontera de la derivada mediante una fórmula de diferencias
finitas, porque entonces la interpolación de Hermite puede implementarse por medio de la
interpolación de Lagrange. Esta estrategia sólo es una aproximación, pero el margen de error
práctico puede ser insignificante. Las condiciones de frontera dadas por la ecuación 4.8.2
pueden aproximarse con

(4.8.3)
: a::ción 4.8. Interpolación de Hermite cúbica 171

1.9

1.8

1.7

1.6

>-1.5

1.4

1.3

1.2

1.1

11 1.5 3 3.5 4

Figura 4.14 Curva detenninada por interpolación de Hennite

s s
de es un parámetro elegido al azar que satisface << s2 - s¡. Entonces, podemos
rminar un polinomio de tercer orden que se ajuste a las condiciones de la ecuación 4.8.3
iante interpolación de Lagrange.

Ejemplo 4.7

Repita la tarea del ejemplo 4.6 con polyfi t.

Solución
Si aplicamos la ecuación 4.8.3, establecemos cuatro puntos de datos como sigue:

s = O: X = 1, y = 1,
S = s: X = 1 + as, y = 0

s = 1- bs= x = 4, y = 2 - bs
s= 1: x=4, y=2

El valor de ses una cantidad positiva arbitrariamente pequeña, así que escogemos
s = 0.01. Sin embargo, si es demasiado pequeña habrá errores de redondeo al
determinar los coeficientes. Los parámetros a y ben las ecuaciones anteriores desem-
peñan papeles similares a los que tuvieron en el ejemplo 4.6.
El listado 4.5 es un guión que determina los coeficientes de polinomios cúbicos.
172 Capítulo 4 Polinomios e interpolación

Listado 4.5
clear,clf,hold off
z=0.01; a=3; b=3;
s(l) O; x(l) 1; y (1) 1;
s(2) = z; x(2) l+z*a; y(2) 1;
s(3) = 1 - z; x(3) 4; y (3) 2 - z*b;
s(4) = 1; x(4) 4; y(4) 2;
c=polyfit(s,x,length(s)-1)
d=polyfit(s,y,length(s)-1)
ss=0:0.1:1;
xp = polyval(c,ss);
yp = polyval(d,ss);
plot (xp, yp)

El resultado es:
e =
- 3.0921 3.1231 2.9691 1.0000
d
1.0307 -0.0309 0.0002 1.0000

valores que son similares a los coeficientes determinados en el ejemplo 4.6. La curva
graficada en la figura 4.15 coincide aceptablemente con la de la figura 4.14.

1.9

1.8

1.7

1.6

>1 .5

1.4

1.3

1.2

1.1

11 1.5 2 3 3.5 4

Figura 4.JS Curva de Hennite detenninada aproximadamente mediante interpolación de Lagrange

4.9 INTERPOLACIÓN BIDIMENSIONAL


Interpolación bilineal: Los datos de una tabla de-función bidimensional pueden interpolarse
utilizando dos veces la interpolación lineal.
Sección 4.9. Interpolación bidimensional 173

La tabla de función bidimensional es un 'arreglo de valores funcionalesfiJ =f (Xi,Yj) en una


-etícula rectangular, (Xi, Yj). Supongamos que debernos estimar el valor funcional en un punto
tuado en un dominio rectangular definido por Xi-1 ~ x ~Xi y Yj-1 ~y~ Yj, como se muestra en
figura 4.16. Por interpolación lineal en la dirección y, encontrarnos que los valores en E y F
50n, respectivamente,
_ Yi -y Y-Yi-1
f E - )'.''}- )'.''j-1 Íi-1,j-1 + )'.''}- )'.')-1
' Íi-1,j

Entonces, la interpolación lineal de fE y fF produce

x;-x f x-x;-1 Ji
,y = X¡-Xi-1
(X ) E+
g X¡-Xi-1 F

Si combinamos los dos pasos en una ecuación, podernos escribir la interpolación bilineal corno

g(x,y) = } X
(x;-X;-1) (yj-Yj-1)

[(x; -x) (yj-y)fi-1.j-I + (x; -x) (y-Yi-IÍi-1,j


+ (x -X;-1) (yj-y)fi.j-1 + (x -X;-1) (y-yj-IÍi,j] (4.9.3)

En MATLAB, la interpolación bilineal se realiza con table2, cuya sintaxis es:

f = table2(tab,x,y)

Aquí, f equivale ag{xJI) de la ecuación 4.9.3, tabes una tabla de datos bidimensional. La
rirnera columna de tab es el arreglo de valores de Xi y la primera fila es el arreglo de valores
de Yj, ambos en orden ascendente. El resto de las columnas y filas está ocupado por fiJ· Las x
: y son coordenadas para las cuales se evaluará la interpolación, y pueden ser escalares,
·ectores o matrices.
Doble interpolación de Lagrange: La doble interpolación de Lagrange consiste en aplicar
dos veces el método de interpolación de Lagrange en dos dimensiones; por tanto, la fórmula
de interpolación puede utilizar todos los puntos de datos de la tabla. Suponga que la tabla de la
función tiene M columnas y N filas. Las coordenadas de los puntos se denotan por (xm, Yn) y
los valores funcionales por F(xm, Yn). Entonces, la doble interpolación de Lagrange está dada
por M N
F(XJI) = L L 4>111 (X)'Vn(y)F(XmJ'n) (4.9.4)
m=I n=I
174 Capítulo 4 Polinomios e interpolación

Y¡+1

~ . 174]

E o F
(x,y)


Figura 4.16 Interpolación bilineal
en un dominio bidimensional

donde <l>m y 'V n son funciones de forma dadas por

<j>,,,(x) =

(4.9.5)
N
'VnÚ') = n y-y*
k•l)"n Yn - Yk

Observe que <l>m(X)'lfn(y) es una función de forma bidimensional que se hace cero en todos los
puntos de datos excepto en (xm, Yn). Cuando M = N = 2, la ecuación 4.9.4 se reduce a la
interpolación bilineal, ecuación 4.9.3. Podemos utilizar los puntos de Chebyshev o de Lobatto
para seleccionar Xm y Yn·

4.10 INTERPOLACIÓN TRANSFINITA


La interpolación transfinita es un método de interpolación para un espacio bidimensional en el
que se conocen los valores funcionales a lo largo de las fronteras externas, así como los valores
a lo largo de las líneas verticales y horizontales dentro de las fronteras. El método de doble
interpolación de la sección 4.9 es aplicable cuandQ_se conocen los valores funcionales sólo en
las intersecciones de las líneas verticales y horizontales. En contraste con la doble interpola-
Sección 4.1 O. Interpolación transfinita 175

ción, la interpolación transfinita ajusta a funciones continuas especificadas a lo largo de las


líneas horizontales y verticales.
, C~m.? ejemplo de aplicación de la in.ter¡_>olación transfinita, imagine a un arquitecto que
esta d1senando un techo curvo para un ed1fic10 rectangular cuya vista superior satisface

~ .cJ)c.2'1.C..b.3.t"-12'.C.C).».c.a..d.o).a f.o,..;m.a oc).a )}.oc.a de} /echo.a )o h-37.0 de .Jos cua/r.o bordes'°7.ed/a .m 'c
.:2tro funciones analíticas que expresan la altura del techo a lo largo de los bordes. Estas cuatro
::. ciones son continuas a su paso por las esquinas, con objeto de que no haya un cambio
:-:pentino de altura en ninguna de las esquinas del techo. El arquitecto necesita crear una
perficie continua que se ajuste a las alturas de borde especificadas por su cliente.
La tarea puede enunciarse como sigue: dctcnnine una función continua F(x, y) que
isfaga las condiciones de frontera dadas por

F(XJJI) = fiv(y)
F(x2J1) = fE(y)
(4.10.1)
F(xJ11) = fs(x)
F(XJ12) = fN(X)

e el miembro derecho de cada ecuación es una función analítica que el cliente proporcionó
arquitecto. Es evidente que no existe una solución única para este problema, ya que no hay
fonna única de interpolar los datos dados. No obstante, hay varias formas de encontrar una
ión semejante, entre las cuales podemos citar (1) la resolución de una ecuación de Laplace

V2 F(x,y) =O (4.10.2)

las condiciones de frontera y (2) la interpolación transfinita.


La interpolación transfinita para este problema puede escribirse así:

2 2
F(XJI) = L <l>m(x)F(xm,y) + L 'Vn(y)F(x,yn)
m=l n= I

2 2
- m=I
L n=I
L cj>,,,(X)'Vn(y)F(XmJln) (4.10.3)

nde
176 Capítulo 4 Polinomios e interpolación

x2-x
<l>1(x)=--
x2-x1

X-X¡
<!>2(x)=--
x2-x1

'VJÚ') = Y2 -y
yi-y¡

La interpolación transfinita es continua y satisface las condiciones de frontera.


La interpolación anterior puede generalizarse para incluir funciones especificadas a lo
largo de múltiples líneas. Consideremos un dominio rectangular dividido mediante líneas
verticales y horizontales, como se muestra en la figura 4.1 7. La línea vertical de la extrema
izquierda es la frontera izquierda, y la de la extrema derecha, la frontera derecha. Las líneas
verticales están indizadas por m, con m = 1 para la de la extrema izquierda y m = M para la de
la extrema derecha. Asimismo, las líneas horizontales están indizadas por n, con n = 1 para la
frontera inferior y n = N para la superior. Suponga que se conocen los valores de F(x, y) a lo
largo de todas las líneas horizontales y verticales. La función dada a lo largo de la m-ésima
línea vertical, F(xm, y), se hace igual a la función conocida; la función dada a lo largo de la
n-ésima línea horizontal, F(x,yn), también se hace igual a la función conocida correspondiente.

Figura 4.17 Dominio para las interpolaciones transfinitas

Nuestra tarea ahora es encontrar una F(x, y) que satisfaga estas condiciones a lo largo de
las líneas verticales y horizontales. El problema puede enunciarse también así: encontrar una
función continua F(x, y) que satisfaga '
ºón 4.10. Interpolación transfinita 177

F(x, y)= F(xm, y), en x = Xm (m-ésima ijnea vertical)


(4.10.4)
F(x, y)= F(x, Yn), en y= Yn (n-ésima línea horizontal)

12 interpolación transfinita que satisface las condiciones dadas es


M N
F(x,y) = E <j>,,,(x)F(x,,,, y) + E 'lfn(y)F(x, Yn)
m=l n=I

M N
- E E <j>,,,(X)'lfn(y)F(x,,,,y,,) (4.10.5)
m=I 11=!

nde
M
X-Xk
<j>,,,(x) = TI
1.-1, kT-m Xm - Xk

(4.10.6)
N
y-yk
'Vn(y) = TI
J.=I, k"-m Yn - Yk

Podemos ver que el primer ténnino de la ecuación 4.10.5 es la interpolación de Lagrange


• la coordenada x de las líneas verticales, mientras que el segundo es la interpolación de
Lagrange en la coordenada y de las funciones dadas a lo largo de las líneas horizontales. El
rcer ténnino es una doble interpolación de Lagrange dada por la ecuación 4.9.4. La interpo-
ión transfinita satisface todas las condiciones de frontera en las fronteras externas y también
a lo largo de las internas.
Con el fin de analizar la relación entre el método de interpolación transfinita y la doble
· terpolación de Lagrange con mayor claridad, supongamos que sólo se conocen los valores
de Fen las intersecciones (m, n). En este caso, F(x,yn) y F(xm,y) se pueden expresar mediante
terpolación de Lagrange como sigue:
M
F(x,y) = E <j>,,,(x)F(x,,,, Yn)
m=I
(4.10.7)
N
F(x,,,,y) = E 'lfn(y)F(x,,,, Yn)
n=O

Al introducirse las ecuaciones anteriores en la 4.10.5, Jos tres ténninos del miembro derecho
se hacen idénticos, excepto por su signo, así que dos de ellos se cancelan y la interpolación
transfinita se reduce a la doble interpolación de Lagrange dada por la ecuación 4.9.4.
178 Capítulo 4 Polinomios e interpolación

Aunque hemos supuesto que las funciones a lo largo de las líneas verticales y horizontales
son analíticas, el método puede aplicarse a una función definida de forma discreta, como se
ilustra en el ejemplo 4.8.

Ejemplo 4.8

En la tabla 4.1 se dan los valores funcionales a lo largo de ciertas columnas y filas.
Llene los huecos mediante la interpolación transfinita.

TABLA 4.1 Tabla de datos dada para F(x¡, Yj)


j i=l 2 3 4 5 6 7 8 9 lO 11
1 0.2955 0.3894 0.4794 0.5646 0.6442 0.7174 0.7833 0.8415 0.89 12 0.9320 0.9636
2 0.4794 0.8415 0.9975
3 0.6442 0.9320 0.9917
4 0.7833 0.8415 0.8912 0.9320 0.9636 0.9854 0.9975 0.9996 0.9917 0.9738 0.9463
5 0.8912 0.9996 0.8632
6 0.9636 0.9738 0.7457
7 0.9975 0.9996 0.9917 0.9738 0.9463 0.9093 0.8632 0.8085 0.7457 0.6755 0.5985

Solución
La tabla llenada con la interpolación transfinita se presenta en la tabla 4.2.

TABLA 4.2 Resultados de la interpolación transfinita, A(i,j)


j i=l 2 3 4 5 6 7 8 9 10 ll
l 0.2955 0.3894 0.4794 0.5646 0.6442 0.7174 0.7833 0.8415 0.8912 0.9320 0.9636
2 0.4794 0.5647 0.6443 0.7174 0.7834 0.8415 0.8912 0.9320 0.9635 0.9854 0.9975
3 0.6442 0.7174 0.7834 0.8415 0.8912 0.9320 0.9635 0.9854 0.9974 0.9995 0.9917
4 0.7833 0.8415 0.8912 0.9320 0.9636 0.9854 0.9975 0.9996 0.9917 0.9738 0.9463
5 0.8912 0.9320 0.9635 0.9854 0.9975 0.9996 0.9917 0.9739 0.9464 0.9094 0.8632
6 0.9636 0.9854 0.9974 0.9995 0.9916 0.9738 0.9464 0.9094 0.8633 0.8086 0.7457
7 0.9975 0.9996 0.9917 0.9738 0.9463 0.9093 0.8632 0.8085 0.7457 0.6755 0.5985

4.11 ARCHIVOS M
FM 4.1 Integración de un polinomio
Objetivo: Encontrar los coeficientes del polinomio integrado.
Sintaxis: py = poly i tg (p)
p: coeficientes del polinomio por integrar. "
py: coeficientes del polinomio ya integrado.
-~cción 4.11. Archivos M 179

: _ltg.m
: _~ct ion py = poly itg(p)
-=_ength (p)
.,._ = [p.*[n:-l:l].·(-1),0]

_l 4.2 Suma de dos polinomios


~etivo: Sumsi.r dos polinomios.
taxis: b = poly add (pl, p2)
pl, p2: arreglos de coeficientes de los dos polinomios.
b: arreglo de coeficientes después de la suma .

• _add.m
=-~ct ion p3 = poly add (pl,p2)
-:=length(pl); n2 ~ length (p2);
: nl==n2 p3 = pl + p2; end
- nl>n2 p3 pl + [zeros(l,nl-n2), p2] ;end
_: nl <n2 p3 = [zeros(l,n2-nl), pl] + p2; end

_ 4.3 Interpolación de Lagrange


~etivo: Interpolar datos mediante la interpolación de Lagrange.
taxis:yi = Lagran (x,y,xi)
x, y: tabla de datos en fonna de arreglo.
xi : arreglo de abscisas para las cuales se calculará el valor de y.
y i : arreglo de valores y calculados mediante interpolación de Lagrange.

n_.m
~-~ct ion fi = Lagran (x, f, xi)
::=zeros(size(xi));
=;::=length(f);
!:::: i=l:npl
z=ones(size(xi));
:ar j=l:npl
if i-=j, z = z.*(xi - x(j))/(x(i)-x(j)) ;end
end
:i=f i+z*f (i);
--:i
::e:ur n

_ 4.4 Función de forma en forma de serie de potencias


~etivo: Expandir la interpolación de Lagrange a una serie de potencias.
taxis: e = shape pw (x)
e: coeficientesde potencias de todas las funciones de forma. Laj-ésima fila contiene
los coeficientes de potencias de laj-ésima función de forma.
x: abscisas de la tabla de datos en fonna de arreglo.
180 Capítulo 4 Polinomios e interpolaciór

shape_pw.m
f unction p = shape pw(x)
np = length (x);
f ar j=l:np
y= zeros(l,np); y(j) = 1;
p(j, : )=polyfit(x,y,np-1);
end

FM 4.5 Polinomio de Chebyshev en forma de serie de potencias


Objetivo: Expandir los coeficientes de potencias de un polinomio de Chebyshev.
Sintaxis: e = Cheby _pw
e: coeficientes de potencias en fonna de arreglo.
n: orden del polinomio de Chebyshev.

Cheby_pw.m
function pn = Cheby pw(n)
pbb=[l]; if n==o, pn=pbb; break; end
pb=[l O); if n==l, pn=pb;break; end
far i=2:n;
pn= 2*[pb,O) - [O, O, pbb) ;
pbb--pb; pb=pn;
end

FM 4.6 Polinomio de Legendre en forma de serie de potencias


Objetivo: Encontrar los coeficientes de potencias del polinomio de Legendre.
Sintaxis: e = Legen_pw (n)
e: coeficientes de potencias en fonna de arreglo.
n: orden del polinomio de Lcgendre.
Legen_pw.m
function pn = Legen pw(n)
pbb=[l) ;if n==O, pn~bb; break; end
pb=[l O); if n==l, pn=pb;break; end
for i=2:n;
pn = ((2*i - l)*[pb,O) - (i - 1)*[0, O, pbb))/i;
pbb=pb; pb=pn;
end

PROBLEMAS
(4.1) Escriba los siguientes polinomios en forma agrupada:

4
y =X - 3x3 + 2.x2 +X + 2
5
y = 3x + 2.x3 +) + 7
'
""1:::::1="""""'"""' ""'"'o~"''""'""' ~-,.,.\:)'ffi'>\:)~ =i.""\\:)Tma "t.e ~ene "t.e 1fü'L-ent.'>a'!> eTnj5'1eanuo \'i) poJ.:)> 'í \'i'i)
- _; : i t.

y= 5(x- 3)(x-4)(x + l)(x + 3)


y= 4x(x - 2)(x - l )(x + 3)(x +5)

- uentre e\ polinomio que se ajusta a \os puntos de datos 2, 3, 4 'Y 5 de \a siguiente tab\a:

k Xk f(xk)
l o 0.9162
2 0.25 0.8109
3 0.5 0.6931
4 0.75 0.5596
5 1.0 0.4055

(b) Escriba el polinomio a forma agrupada. (c) Escriba el polinomio a forma factorizada.
(4.S) Convierta el siguiente polinomio en una serie de potencias empleando polyfi t:

v(x) = (x - 1)(x - 2.5)(x - 4)(x - 6.1 )(x - 7.2)(x - 10)


(5- 1)(5-2.5)(5-4)(5-6.1)(5 - 7.2)(5- 10)

(4.6) Repita el problema 4.5 empleando poly.


(4.7) Un polinomio tiene tres raíces: -2, 1y2. Si el polinomio y se convierte eny (O)= 1, determine
el polinomio en forma de serie de potencias.
(4.8) Determine el polinomio en forma de serie de potencias que pasa por cada uno de los
siguientes conjuntos de datos:
(a) (0,1), (2,0)
(b) (1,1), (2,0), (4,2)
(c) (-1,2), (0,2.5), (1,1), (2,-1)
Trabaje primero con la ecuación 4.3.3 y luego verifique los resultados con polyf i t.
(4.9) Detennine el polinomio en forma de serie de potencias que pasa por cada uno de los
siguientes conjuntos de datos:
(a) (-1,1), (1,4)
(b) (-2,2), (0,-1 ), (2, 1)
(c) (-1,-1), (0,0), (1,2), (2,5)
Trabaje primero con la ecuación 4.3.3 y luego verifique los resultados con polyf i t.
e mas 181

(4.2) Escriba los polinomios del problema 4.1 en forma factorizada.


(4.3) Escriba los siguientes polinomios en forma de serie de potencias empleando (i) poly y (ii)
polyfi t.

y= 5(x - 3)(x - 4)(x + l)(x + 3)


y= 4x(x - 2)(x - 1)(x+3)(x +5)

(4.4) (a) Encuentre el polinomio que se ajusta a los puntos de datos 2, 3, 4 y 5 de la siguiente tabla:

k Xk f(xk)
1 o 0.9162
2 0.25 0.8109
3 0.5 0.6931
4 0.75 0.5596
5 1.0 0.4055

(b) Escriba el polinomio a fonna agrupada. (c) Escriba el polinomio a forma factorizada.
(4.5) Convierta el siguiente polinomio en una serie de potencias empleando polyfi t :

v(x) = (x - 1)(x - 2.5)(x - 4)(x - 6. 1)(x - 7.2)(x - 1O)


(5 - 1) (5 - 2.5) (5 - 4) (5 - 6.1) (5 - 7.2) (5 - 1O)

(4.6) Repita el problema 4.5 empleando poly.


(4.7) Un polinomio tiene tres raíces:-2, 1y2. Si el polinomio y se convierte eny (O)= 1, determine
el polinomio en forma de serie de potencias.
(4.8) Determine el polinomio en forma de serie de potencias que pasa por cada uno de los
siguientes conjuntos de datos:
(a) (O, 1), (2,0)
(b) (1,1), (2,0), (4,2)
(c) (- 1,2), (0,2.5), (1,1), (2,- 1)
Trabaje primero con la ecuación 4.3 .3 y luego verifique los resultados con polyf i t .
(4.9) Determine el polinomio en fonna de serie de potencias que pasa por cada uno de los
siguientes conjuntos de datos:
(a) (-1,1), (1,4)
(b) (-2,2), (0,-1), (2,1)
(e) (-1,-1), (0,0), (1,2), (2,5)
Trabaje primero con la ecuación 4.3 .3 y luego verifique los resultados con polyf i t .
182 Capítulo 4 Polinomios e interpolación

(4.10) Escriba una fónnula de interpolación lineal que aproxime sen(x) en el intervalo de O~ x ~ rt/4
utilizando los valores en x - O y x - x/4. Grafique el error para detenninar el error máximo
de la interpolación y en qué x ocurre.
(4.11) Sabiendo que maxif"I • --0.3827 en O ~ x ~ 7t I 4, prediga el error máximo posible de la
interpolación lineal determinada en el problema 4.1 O, utilizando la ecuación 4.2.3.
(4.12) (a) Encuentre el polinomio en forma de serie de potencias ajustado a los puntos de datos
k,. 2, 3 y 4 dados en la siguiente tabla:

k Xk f(XJ.)
1 o 0.9162
2 0.25 0.8109
3 0.5 0.6931
4 0.75 0.5596
5 1.0 0.4055

(b) Evalúe el polinomio para x • 0.6.


(4.13) Encuentre el polinomio ajustado a los puntos de datos 2, 3, 4 y 5 del problema 4.12 en forma
de serie de potencias.
(4.14) Con la tabla de datos dada en el problema 4.12, estime los valores de x que satisfacenj{x) =
0.4137, 0.7233 y 0.8501, utilizando interpl para las interpolaciones lineales.
(4.15) (a) Escriba el polinomio y(x) en fonna de serie de potencias ajustado a los siguientes puntos
de datos:

k Xk f(x1.)
1 o 1.21
2 0.5 1.32
3 2.0 1.05
4 2.5 0.97

(b) Evalúe la derivada del polinomio en x - 1. 75.


(4.16) (a) Escriba la interpolación de Lagrange que pasa a través de los siguientes puntos de datos.

X o 0.4 0.8 1.2


f 1.0 l.491 2.225 3.320

(b) Conociendo /""(0.6) = 1.822, estime el error en x • 0.2, 0.6 y 1.0 utilizando
ecuación 4.5.4 con!;;) xm. (Si se desconoce/"'', puede calcularse una aproximación óe
/"" mediante una aproximación de diferencias si se cuenta con un punto de datos más en
tabla funcional.)
(c) Dado el hecho de que la tabla de datos se obtuvo de/ (x) - exp(x), evalúe el error de
fórmula de interpolación en x • 0.2, 0.6 y 1.0 mediante e(x) - f (x) - g(x) - exp(x)- g(x
4>blemas 183

(4.17) Repita el problema 4.15 con Ja interpolación de Lagrange ajustada a todos Jos puntos de
datos.
(4.18) Ajuste x sen(x) en O S x it/2 con el polinomio de interpolación de Lagrange de orden 4,
utilizando puntos equiespaciados. Calcule el error de cada fórmula de interpolación en cada
incremento de it/16 y grafique.
(4.19) (a) Escriba un programa que evalúe Ja interpolación de Lagrange para y = x cos(x) en
O S x S 2 con seis puntos de retícula equiespaciados con h = 0.4.
(b) Calcule el error del polinomio de interpolación en cada incremento de 0.1 de x. Grafique
Ja distribución del error.
(4.20) Ajuste sen(x) en OS x S 21t mediante el polinomio de interpolación de Lagrange de orden 4
y 8 utilizando puntos equiespaciados (5 y 9 puntos, respectivamente). Grafique los polino-
mios de interpolación junto con sen(x) y las distribuciones del error.
(4.21) (a) Escriba Ja fórmula de interpolación de Lagrange ajustada a:

X 0.5 1.0 1.5 2.0


y YI Y2 Y3 Y4

donde Yk representa valores desconocidos. (b) Convierta la fórmula de interpolación en una


serie de potencias. (c) Deduzca la primera derivada del polinomio.
(4.22) Aproxime

J+x
y=---~

1+2x + 3x2

en O S x S 5 mediante Ja interpolación de Lagrange de orden 4 y evalúe el error según e(x) =


y-g(x). Proceda siguiendo estos pasos: (a) determine los puntos, (b) escriba la interpolación
de Lagrange, (c) calcule el error para cada incremento de 0.2 en x y (d) grafique la
distribución del error.
(4.23) Si una interpolación de Lagrange se ajusta a cuatro puntos de datos en x; = 1, 2, 3 y 4,
aparecen Jos siguientes polinomios cúbicos en Ja fórmula de interpolación de Lagrange:

(x - 2) (x - 3) (x - 4)
(1-2)(1-3)(1-4)
(x- l)(x-3)(x-4)
(2 - 1)(2- 3)(2-4)
(x- l)(x-2)(x-4)
(3 - 1)(3 - 2)(3 - 4)
(x- l)(x- 2)(x - 4)
(4-1)(4-2)(4-3)
Grafique las cuatro funciones anteriores y comente las implicaciones de la fonna de cada una.
184 Capítulo 4 Polinomios e interpolación

(4.24) La interpolación de Lagrange de orden N ajustada a N + 1 puntos de una funciónj{x) se hace


exacta si/(x) es un polinomio de orden No menos. Explique de dos formas diferentes por
qué es cierto esto.
(4.25) Utilice Ja ecuación 4. 7.1 para derivar los siguientes polinomios de Chebyshev y grafiquelos:
T4, Ts, T6.
(4.26) (a) Desarrolle una aproximación de interpolación de Lagrange para Joge(x) en 1 ~ x ~ 2 utili-
zando cuatro puntos de Chebyshev. (b) Calcule el error real mediante e(x) = Joge(x)- g(x) )
grafique para x = 1, 1.2, 1.3, .. ., 1.9 y 2.0

l
(4.27) Los polinomios de Legendre satisfacen Ja relación de ortogonalidad:

f l
_ 1 Pm(x)Pn(x)dx =
[ O, si m "" /1
_2_, si m = /1
2n + 1

Verifique Ja relación anterior calculando

0111,11 = f _: Pm(x)Pn(x)dx

para m = 1 hasta 5 y /1 = 1 hasta 5. Sugerencia. Utilice poly i tg, que se explicó en la


sección 4.1.
apítulo 5

étodos de integración numérica nos penniten integrar funciones que están definidas
_._ ..·, ..,amente o que se presentan en forma tabular. El principio básico de los métodos de
_ ción numérica consiste en ajustar un polinomio a puntos de datos funcionales y luego
lo. Así, podemos derivar muchos métodos de integración distintos modificando la
ución de las abscisas de los puntos de datos. En este capítulo comenzaremos con dos
os sencillos pero muy utilizados, llamados la regla trapezoidal y la regla de Simpson, y
uaremos con una deducción más general de las fónnulas cerradas de Newton-Cotes y de
ratura de Gauss. También estudiaremos el cálculo numérico de integrales impropias y

REGLA TRAPEZOIDAL
~ 0 latrapezoidal es un método de integración numérica que se basa en la integración de la
la de interpolación lineal. Supongamos que se evalúa

(5.1.1)

ximamos/(x) mediante una interpolación lineal


b-x x-a
g(x) = b-af¡ + b-afi (5.1.2)

/¡ = f(a)
Ji= f(b)

ces, la ecuación 5.1.1 se convierte en


[b [b h
I =la J(x)dx ~la g(x)dx = 2U1 + h) (5.1.3)

185
184 Capítulo 4 Polinomios e interpolaciór-

(4.24) La interpolación de Lagrange de orden N ajustada a N + 1 puntos de una función.f(x) se ha


exacta si/(x) es un polinomio de orden No menos. Explique de dos fonnas diferentes
qué es cierto esto.
(4.25) Utilice la ecuación 4. 7. l para derivar los siguientes polinomios de Chebyshev y grafiquelos-
T4, Ts, T6.
(4.26) (a) Desarrolle una aproximación de interpolación de Lagrange para loge(x) en l ~ x ~ 2 uti
zando cuatro puntos de Chebyshev. (b) Calcule el error real mediante e(x) = loge(x)- g (x) .
grafique para x = l, 1.2, 1.3, ... , 1.9 y 2.0
(4.27) Los polinomios de Legendre satisfacen la relación de ortogonalidad:

J_: P,,,(x)Pn(x)dx= [l~is~1; ~


211 + 1
11 ]

Verifique la relación anterior calculando

Gm,n = f _: Pm(x)Pn(x)dx

para m = 1 hasta 5 y 11 = 1 hasta 5. Sugerencia. Utilice p o ly i tg, que se explicó en la


sección 4.1 .
apítulo 5

Integración numérica

métodos de integración numérica nos penniten integrar funciones que están definidas
·camente o que se presentan en forma tabular. El principio básico de los métodos de
_ ción numérica consiste en ajustar un polinomio a puntos de datos funcionales y luego
lo. Así, podemos derivar muchos métodos de integración distintos modificando la
bución de las abscisas de los puntos de datos. En este capítulo comenzaremos con dos
os sencillos pero muy utilizados, llamados la regla trapezoidal y la regla de Simpson, y
tinuaremos con una deducción más general de las fónnulas cerradas de Newton-Cotes y de
:.:adratura de Gauss. También estudiaremos el cálculo numérico de integrales impropias y

1 REGLA TRAPEZOIDAL
-egla trapezoidal es un método de integración numérica que se basa en la integración de la
uta de interpolación lineal. Supongamos que se evalúa

I = ¡b J(x)dx (5.1.1)

ximamosf(x) mediante una interpolación lineal


b- x x-a
g(x) = b-af¡ + b-afi (5.1.2)

de
f¡ =f(a)
Ji= f(b)

~·onces, la ecuación 5.1.1 se convierte en


rb rb h
I =la J(x )dx ~la g(x )dx = 2U1 + h) (5.1.3)

185
186 Capítulo S Integración numérica

con
h=b-a (5.1.4)

La ecuación 5.1.3 es la regla trapezoidal, que puede reescribirse como

lb h (5.1.5)
I =la f(x)dx = 2U1 + h) +E
donde E representa el error por truncado. La regla trapezoidal se ilustra gráficamente en la
figura 5.1. El área bajo la interpolación lineal, g(x), es igual a la integral calculada por la regla
trapezoidal, mientras que el área bajo y = f(x) es el valor exacto. Por tanto, el error de la
ecuación 5.1.3 es igual al área entre g(x) y f (x), y es aproximadamente

E = - _l_h3j" (5.1.6)
12

''
''
''
' y =f(x)
g(x)' '
'
'
''
''
'

X1•8 x2•b
X Figura 5.1 Regla trapezoidal

Este término de error se puede verificar fácilmente como sigue: Primero, hacemos una expa.n
sión de Taylor de f(x) alrededor de un punto escogido, digamos x = a. Si integramos
expansión de Taylor, expresaremos la integral exacta en forma de serie de potencias. Por o
lado, el resultado de la regla trapezoidal también puede expresarse en forma de serie
potencias si expandimosJi a una serie de Taylor alrededor del mismo puntox =a. Si restara
esta integral de la primera y conservamos el término inicial, obtendremos la ecuación 5.1.6.
La ecuación 5.1.5 puede extenderse a múltiples intervalos. Si la función integrada _.
representa mediante n + 1 puntos de datos con puntos de abscisa igualmente espaciados,
ecuación 5.1.5 puede aplicarse repetidamente a cada intervalo. La ecuación así obtenida
la regla trapezoidal extendida y se escribe así:
· ' n 5.1. Regla trapezoidal 187

''
'' 13

x1 x2 x3 X4 X

Figura S.2 Regla trapezoidal extendida

lb h
l =la J(;c)dx = 2,(f¡ + 2/2 + ··· + 2fn + Ín+i) +E (5.1.7)

h=(b-a)/n
X¡ = a + (i - 1)h
/; =f(x;)
i = 1, 2,.., n + 1

·no de error de la regla trapezoidal extendida está dado por

(5.1.8)

fonna equivalente, por


E .. - (b - a)3 J" (5.1.9)
12n2

e/" es la media def"(x) en a< x < b. La ecuación anterior indica que el error es inver-
ente proporcional a n 2.
188 Capítulo 5 Integración numérica

Supongamos que f es un arreglo de f¡ para puntos de abscisas equiespaciadas con un


tamaño de intervalo de h. La regla trapezoidal extendida puede escribirse en MA TLAB como

I = h*(sum(f) - 0.S*(f{l) + f{length(f))))

Una forma más cómoda de aplicar la regla trapezoidal es utilizar trapez _ v, trapez_r.
o trapez_g, que se listan en la sección 5.7. La sintaxis de trapez_ves

I = trapez_ v(f, h)
donde f es un vector de las ordenadas del integrando y hes el tamaño de intervalo. La sintaxis
de trapez_n y trapez_g es

I trapez n('nombre f', a, b, n)


I trapez=g('nombre=f', a, b, n)

donde nombre_ f es el nombre de la función que se desea integrar, a y b son los límites de
integración y n es el número de intervalos empleados en la regla trapezoidal extendida. Se
puede utilizar un archivo M de función definido por el usuario como nombre_ f.

Ejemplo 5.1

Un automóvil de masa M = 2000 kg viaja a una velocidad de 30 mis. La transmisión


se pone en neutral en t =O s. Suponga que la ecuación de la desaceleración después de
t= Oes

du 2
2000 u cú = -8.lu - 1200 (A)

donde u es la velocidad y x es la distancia lineal recorrida por el automóvil desde el


lugar en el que se encontraba en t =O. El miembro izquierdo es la fuerza de aceleración,
el primer término del miembro derecho es la resistencia aerodinámica, y el segundo,
la resistencia al rodado. Calcule la distancia que recorre el automóvil antes de que la
velocidad se reduzca a 15 mis.

Solución
Reescribimos la ecuación (A) así:
2000 udu = cú
-8. lu 2 - 1200

Después de integrar, tenemos

{30 2000 udu . ¡x


lis 8.lu 2 + 1200 =Jo dx' = x (B,
. : .::cción 5.1. Regla trapezoidal 189

donde el signo de miembro izquierdo de la ecuación (B) se cambió invirtiendo los


límites de la integración. Utilizamos la regla trapezoidal extendida para evaluar la
integral del miembro izquierdo. Si tomamos 15 intervalos (o 16 puntos de datos), u;
recibe inicialmente los valores

U¡= 15 + (i - 1).6.u, i = 1, 2, ..., 16


donde .6.u = (30 - 15)/15 = 1. Si definimos
200 U¡
f¡ = 8.1u~+1200
1

y aplicamos la integración trapezoidal, la ecuación (A) se convierte en

He aquí un guión para calcular la ecuación anterior:


Listado 5.1
clear
n_puntos=16; i = l:n puntos;
h=(30-15)/(n puntos-l); u= 15 + (i-l)*h;
f 2000*u./(8.l*u. ·2 + 1200);
x = trapez_v(f ,h)

El resultado es

X
127.50

Compare esto con la solución exacta, 127.51 m (el error es del 0.005%).

Ejemplo 5.2

Sabiendo que la respuesta exacta es 1 = 4.006994, analice el efecto del número de


intervalos, n, sobre el error de la regla trapezoidal aplicada a la siguiente integral:

I = fo
2
J1 + exp(x)dx
Solución
Escribimos el siguiente guión para responder a la pregunta:
190 Capítulo 5 Integración numérica

Listado 5.2
clear; Iexacta = 4.006994;
a = O; b=2;
fprintf('\n Regla Trapezoidal Extendida\n');
fprintf('\n n I Error\n');
n = 1;
for k=1:6
n 2*n;
h = (b-a)/n; i = l:n+l;
x =a+ (i-l)*h; f = sqrt(l + exp(x));
I = trapez v(f,h);
fprintf (' %3. Of %10. Sf %10. Sf\n', ...
n, I, Iexacta - I);
end
El resultado es:
Regla Trapezoidal Extendida
n I Error
2 4.08358 0 . 07659
4 4.02619 0.01919
8 4.01180 0.00480
16 4.00819 0.00120
32 4.00729 0.00030
64 4.00707 0.00008

Al duplicarse n, el error disminuye por un factor de 4 (véase la ecuación 5.1.9).

El ejemplo 5.2 indica que los errores de la regla trapezoidal extendida se reducen a
aproximadamente la cuarta parte cada vez que se duplica el número de intervalos. La tendencia
puede verificarse con la ecuación 5.1.9. Conociendo este comportamiento de los errores,
podemos eliminar al menos una buena parte de los mismos. Si denotamos del resultado de la
regla trapezoidal extendida con n intervalos con In y aquél con 2n intervalos con hn, entonces
In - hn debe ser aproximadamente igual a tres veces el error de hn. Si restamos el error así
estimado, el resultado deberá hacerse mucho más exacto. La fórmula basada en este principio
se llama integración de Romberg y se escribe como
1
I = hn -t<In -hn) (5.1.1 0)

Por otro lado, este resultado es idéntico a la regla 1/3 de Simpson empleando 2n intervalos
(véase la sección 5.2).

5.2 REGLAS DE SIMPSON


Hay dos reglas de Simpson, las reglas 113 y 3/8, que se complementan mutuamente. s_
consideramos una vez más la evaluación de la ecuación 5.1.1, podemos determinar un
polinomio de interpolación cuadrático (de segundo orden) COn tres puntos de datos en X¡ = a.
:CCCión 5.2. Reglas de Simpson 191

-- = (a+ b)/2 y x3 = b. Denotamos los valores funcionales en los puntos de datos confi,Ji y jj.
:..._ regla 1/3 de Simpson se deduce sustituyendo este polinomio cuadrático por f(x) en la
~ción 5.1.1:

(5.2.1)

e
h=(b-a)/2

- incluimos el término del error, la ecuación 5.2.1 puede escribirse así:


h
1 = 3 (ji + 4fi + jj) + E (5.2.2)

de E es el término del error dado por

E Id .!ti""
00 (5 .2 .3)

que indica que el error es proporcional a h5• El error desaparece si/(x) es un polinomio de
3 o menor. La ecuación 5.2.3 puede verificarse como sigue. La integral exacta puede
resarse en forma de serie de potencias integrando la expansión de Taylor de/(x) alrededor
x - a. Por otro lado, Ji y jj en la ecuación 5.2.1 se pueden expandir a una serie de Taylor
edor de x = a. Después de expresar tanto la integral exacta como la regla 1/3 de Simpson
forma de series de potencias, restamos la segunda de la primera y conservamos sólo el
nmino inicial.

El "8a bajo la curva punteada H Igual al


y rHultado da la regla da Simpson da 1/3.

1
=f(x)
,,
f2

x1=a x2 x3=b X Figura 5.3 La regla de Simpson 1/3


utiliza tres puntos ajustados a un
polinomio cuadrático

La regla 1/3 de Simpson extendida es una aplicación repetida de la ecuación 5.2.1 a un


· io dividido en un número par de intervalos. Si denotamos el número total de intervalos
n (par), la regla 1/3 de Simpson extendida se escribe así:
192 Capítulo 5 Integración numérica

(5.2.4)

donde

f¡=f(a+(i-l)h) (5.2.5)

con

h=(b-a)/n (5.2.6)

El término del error está dado por

E= -(b-a)_!L f..,-;;-; (5.2.7)


180

dondef"" es la media de/"" en a< x < b.

Ejemplo 5.3

Evalúe otra vez la integral del ejemplo 5.2 utilizando la regla 1/3 de Simpson extendida
con n = 2, 4, 8 y 16.

Solución
El siguiente guión responde a la pregunta:
Listado 5.3
clear
Iexacta = 4.006994;
a = O; b=2;
fprintf('\n Regla Simpson 1/3 Extendida\n');
fprintf('n I Error\n');
n = 1;
for k=1:4, n = 2*n;
h = (b- a)/n; i = l:n+l;
x =a+ (i-l)*h; f = sqrt(l + exp(x));
I = (h/3)*( f(l)+ 4*sum(f(2:2:n)) + f(n+l));
if n>2, I = I+ (h/3)*2*sum(f(3:2:n)); end
fprintf('%3.0f %10.Sf %10.Sf\n', n,I,Iexacta-I);
end

Los resultados son:


, QGICo

r!~
Sección 5.2. Reglas de Simpson 193
e
/.¡¡
<ttf-
v5 ~0o
Regla
n
simpson 1/3
I
Extendida
Error ~. \ ~J~
- e
~-
.~,)
r''.) ~'-v ~-f
2 4.00791 0.00092
4 4.00705 0.00006
8 4.00700 0.00000 .si ----"'¡ .o
/\;¡ _,,., \~
16 4.00699 0.00000 "Quito''

La regla 3/8 de Simpson se basa en el polinomio de interpolación de tercer orden y está


dada por:

l = 83h (f¡ + 3fi + 3/3 + fi) + E (5.2.8)

donde h = (b- a)/3,f¡ = f(a + (i - l)h) y E representa el error. El término del error está dado
por:
E"" - 38~ f"" (5.2.9)

La expresión anterior para el error puede deducirse mediante la expansión de Taylor de forma
-irnilar a como se hizo con la regla 1/3 de Simpson.
Al tratar de integrar datos en puntos equiespaciados, no podremos aplicar la regla 1/3 de
Simpson extendida si el número de intervalos es impar. En este caso se aplica la regla 3/8 a los
tres primeros o a los tres últimos intervalos, y luego aplicamos la regla 113 extendida al resto
de los intervalos. Puesto que el orden del error en la regla 3/8 es el mismo que en la regla
1
1/3, las dos reglas se combinan naturalmente sin pérdida de orden de exactitud.
Podemos usar dos funciones, simps _ v y simps _ n para integrar una función. La sintaxis
de la primera es

I = Simps_v(f ,h)

donde f es el vector que contiene las ordenadas del integrando con un tamaño de intervalo
equiespaciado h. El número de intervalos es arbitrario, excepto que debe ser cuando
menos 2. Si el número de intervalos es impar, se aplica primero la regla 3/8 y luego se aplica
la regla 1/3 al resto de los intervalos, como se explicó en los párrafos anteriores. La sintaxis de
si mps_n es

I = Simps_n('nombre f', a, b, n)

donde nombre f es el nombre de la función (o archivo M de función) del integrando, a y b


son los límites de integración y n es el número de intervalos utilizados en la regla extendida.
En la sección 5. 7 se darán más detalles de estas funciones.

1
Si se combina la regla de Simpson con la regla trapezoidal, el orden de exactitud del método combinado está
determinado por el de la regla trapezoidal.
194 Capítulo 5 Integración numérica

Ejemplo 5.4

Un tanque de agua esférico con radio de 5 m está lleno hasta el tope. Se va a drenar
agua por un agujero de radio b = 0.1 m en el fondo, comenzando a t = Os. Si no hay
fricción, ¿cuánto tiempo tardará el nivel del agua en llegar a 0.5 m, medido desde el
fondo?

Solución
La velocidad del agua que drena por el agujero está determinada por la ecuación de la
energía:

(A)

donde u es la velocidad, z es el nivel del agua medido desde el centro de la esfera, R


es el radio del tanque y ges la aceleración debida a la gravedad y es igual a 9 .81 rn/s 2 •
Considere el cambio en el nivel del agua dz durante el intervalo de tiempo dt. El
volumen de agua en dz es igual a rr.x2dz, donde x es el radio de la superficie circular de
agua en la altura z. Podemos escribir la relación de continuidad de flujo:
u Adt = -rr.x2dz (B)

donde A es el área de sección transversal del agujero de salida, igual a


A= rtb 2 (C)

El radio de la superficie de agua x está relacionado con z por:


Ri =z2 + x2 (D)

Si eliminamos u, x y A de la ecuación (B) mediante las ecuaciones (A), (C) y (D)


obtenemos
2
dt = - R - z2 dz
b2../ 2g(_z + R)

Observe que el nivel del agua en la parte superior del tanque es z = R, mientras que
a 0.5 m del fondo es z = 0.9R. Si integramos desde z = R hasta -0.9R, tenemos
-0.9R R2 _ z2
t= -
l R b2J2g(z + R)
dz

o, después de intercambiar los límites de integración inferior y superior,

t= ¡ R R2- z2
-0.9R b2J2g(z + R)
dz
:::: ción 5.3. Otras cuadraturas 195

Ahora integramos la ecuación anterior mediante la regla de Simpson extendida:


clear
R = 5; g = 9.81; b = 0.1;
zl = -R*0.90; z2 = R; h = (z2 - zl)/20;
z zl:h:z2;
f = (R·2 - z.·2) ./(b.2*sqrt(2*g*(z+R)));
I = Simps_v(f,h)/60/60

El resultado es:
0 . 5145 horas

.>.3 OTRAS CUADRATURAS


mo señalamos anteriormente, se deducen muchas otras cuadraturas numéricas integrando
·erentes polinomios de interpolación en la forma de la interpolación de Lagrange. Explica-
os algunos de ellos.

Fórmulas cerradas de Newton-Cotes: La fórmula cerrada de Newton-Cotes de orden n


liza n + 1 puntos de datos con intervalos equiespaciados. Las abscisas de los puntos de datos

x¡=b-a(i-l)+a, i=l,2, ... ,n+l (5.3.1)


n
ordenadas de dichos puntos son/¡ =/(x;). Entonces, la fórmulas cerradas de Newton-Cotes
en escribirse en forma general así:

I = ¡ª
b
f(x)dx ~ h
n+I
L
i=I
wdi (5.3.2)

de n + 1 es el número total de puntos, las w; son factores de ponderación dados en la


la 5.1 y
h=b-a
n

n = 1, 2 y 3, la ecuación 5.3.2 se convierte en la regla trapezoidal, la regla 1/3 de Simpson


regla 3/8 de Simpson, respectivamente.
A fin de demostrar la deducción de la ecuación 5.3.2, escribimos la fórmula de interpola-
. n de Lagran ge ajustada a/ (x) en a ~ x ~ b con puntos equiespaciados x; como
n+I
g(x) = L. v;(x}f¡ (5.3.3)
i=l
de
196 Capítulo 5 Integración numérica

TABLA 5.1 Factores de ponderación de las fórmulas cerradas de Newton-Cotes


n=l i: o l
w: 0.5000,0000 0.5000,0000
n=2 i: o l 2
w: 0.3333,3333 1.3333,3333 0.3333,3333
n=3 i: o l 2 3
w: 0.3750,0000 1.1250,0000 1.1250,0000 0.3750,0000
n=4 i: o l 2 3
4
w: 0.3111, ll ll 1.4222,2222 0.5333,3333 1.4222,2222
0.3111, l l ll
n=5 i: o l 2 3
4 5
w: 0.3298,6111 1.3020,8333 0.8680.5555 0.8680,5555
1.3020,8333 0.3298,6111
n=6 i: o l 2 3
4 5 6
w: 0.2928,5714 1.5428,5714 0.1928,5714 1.9428,5714
0.1928,5714 1.5428,5714 0.2928,5714
n=7 i: o 1 2 3
4 5 6 7
w: 0.3042,2453 1.4490,1620 0.5359,3749 1.2108,2175
1.2108,2175 0.5359,3749 1.4490,1620 0.3042,2453
n=8 i: o l 2 3
4 5 6 7
8
w: 0.2790,8289 1.6615,1675 -0.2618,6948 2.9618,3421
-1.2811,2874 2.9618,3421 -0.2618,6948 1.6615,1675
0.2790,8289

n+I
V¡(X) = Il (X-X¡) (5.3.4
j=l,f~i (X¡-Xj)

Si aproximamosf(x) con g(x) en la ecuación 5.1.1 obtenemos:

I = ¡a
b
f(x)dx ~ ¡ ª
b
g(x)dx
n+I
=~"!di
i=I
(5.3 .:

donde
b b n+I ( )
"ti= fa
la
v¡(x)dx = fa
la ._
IT ...J. .
x-
(x ¡ -
Xj
Xj)
dx (5.3.6)
J- 1,J-r-'

s=x-an -+l l (5.3. 7)


b-a
.:ección 5.3. Otras cuadraturas 197

..- serve que, para x =X¡, la ecuación 5.3.1 se convierte en s¡ = i, y entonces se utiliza la
:;ación 5.3.1. En términos des, la ecuación 5.3.6 se convierte en

¡n+I n+I ( S-J·)


/i = h }¡ ·-1
rr e ") ds
· _¡. ·
J- ,J..,- i
i - J
(5.3.8)

o que es equivalente,

y¡=hw¡ (5.3.9)

(5 .3.10)

rve en la ecuación 5.3.10 que w¡ sólo está determinado por i y por n. Convertimos el
ndo de la ecuación 5.3.10 en una serie de potencias,
n+l . n+I
rr
j~l,f~i
~

(
")
=
l-J
r.
k=I
a·1, k~+1-k (5 .3.11)

miembro izquierdo de la ecuación 5.3.11 es un polinomio que pasa por los puntos

s = (1, 2, 3, ... , n + 1]
y= [O, O, ... 1, ... O]

e todos los elementos de y son cero excepto el i-ésimo, que es la unidad. Los coeficientes
potencias, a;,k, se obtienen con polyfi t así:

s = l:n+l;
y = eye (n+l);
for i=l:n+l
a ( i, : ) = po 1 y f i t ( s , y ( i , : ) )
end

e la i-ésima fila de a contiene los coeficientes de las potencias, a¡J, para i = 1, 2, ..., n + 1.
troducimos la ecuación 5.3.11 en la 5.3.10 obtenemos
198 Capítulo 5 Integración numérica

n+I [ s"+2-k ] s•n+ 1


= E a¡,1c
k=I n + 2-k
s=I

=E
n+I (n
a¡ k ....
+ on+2-k - 1
______.____ (5.3.12)
k=I ' n + 2-k

Así, los factores de ponderación de la cuadratura Newton-Cotes dados en la tabla 5.1 se


calculan con la ecuación 5.3.12.
Podemos integrar una función analítica con Newt_ i tg. Su sintaxis es

I = Newt_itg('nombre_f', a, b, n)

donde nombre f es el nombre de un archivo M de función que define al integrando; a y b son


los límites inferior y superior, respectivamente; n es el número de intervalos equiespaciados
entre los dos límites de integración.

Cuadratura de Gauss-Legendre: Podemos mejorar significativamente la exactitud de la


integración si utilizamos puntos espaciados a intervalos desiguales. La cuadratura de Gauss-
Legendre utiliza las raíces de un polinomio de Legendre, y su orden de exactitud es el doble
del de la fórmula de Newton-Cotes empleando el mismo número de puntos.
Los polinomios de Legendre están dados por:

Po(x) = 1

P1(x) =x

P2(x) = t 2
(3x - 1)

P3(x) t
= (5x3 - 3x) (5.3.13

2n -1 n-1
Pn (x) = - - X Pn-1(x) - --Pn-2(x)
n n

Los coeficientes de un polinomio de Legendre en forma de potencias,

Pn (x) = c1~ + c:ix"- 1 + ... + Cn+ 1


pueden obtenerse con Legen pw (n) (listado en FM 5-5), que devuelve los coeficientes en -
arreglo, siendo n el orden del polinomio de Legendre. El polinomio de Legendre de orden
tienen raíces, y todas están entre-1y1, como se ilustra en la figura 5.4 paran= 7. Obsen ~
que no hay raíces en los extremos y que el tamaño de los intervalos disminuye hacia las orillai
Primero consideraremos la evaluación de la integral que se extiende de x = -1 ax= 1:
1
I =[ J(;)dx (5.3 .15'
1
_ ., 5.3. Otras cuadraturas 199

Polinomio de Legendre de orden 7


y puntos de Legendre: marcas o

- -1 -0.5 o 0.5
X
Figura 5.4 Polinomio de Legendre
de orden 7 y sus raíces

. .::sadratura de Gauss-Legendre de orden n para evaluar la ecuación 5.3.15 puede enunciarse


·gue: El integrando se aproxima con un polinomio de interpolación ajustado a las raíces
.-.1-..i;·,nomio de Legendre de orden n, y luego se integra. La cuadratura de Gauss-Legendre
--Tiibe así:

I ~ f -l
1 g(x)dx = t
i=I
¡¡/(xi) (5.3.16)

/i = 1-1
f
1
vi(x)dx = 1-1
f
1
Il
·-¡ º.J. '
(x - Xj) dx
(Xi - Xj)
(5.3.17)
J- ,3.,..1

x¡ son las raíces del polinomio de Legendre de orden n. Los valores de y¡ y de x¡ están
•llOOs en la tabla 5.2.
s límites de integración no son -1 y 1, las raíces entre -1 y 1 se proyectan entre los
reales, a y b, mediante una transformación de coordenadas. Para una integral,

I = ¡b f(z)dz (5.3.18)

ra de Gauss-Legendre se escribe así:

n
b-a ~
I,,. - - ¿,,,¿ y¡f(z¡) (5.3.19)
2 i=l
200 Capítulo 5 Integración numérica

donde z; está dado por la transformación:


(b- a)x; +a+ b
Z¡ = (5.3.20
2

y satisface a < z; < b.


Las raíces de un polinomio de Legendre de orden n se pueden obtener con roots (Le-
gen_pw (n)). La cuadratura de Gauss-Legendre puede aplicarse con Gauss _ q, cuya sintaxis
es:

Gauss_q('nornbre_ f', a, b, n_puntos)

donde nombre f es el nombre de un archivo M de función que define al integrando, a y b


los límites infenor y superior, respectivamente; n_puntos es el número de puntos y es igual
al orden del polinomio de Legendre.

TABLA 5.2 Factores de ponderación de la cuadratura de Gauss-Legendre

n=2 x: -0.5773,5027 0.5773,5027


w: 1.0000,0000 1.0000,0000
n=3 x: -0.7745,9667 0.0000,0000 0.7745,9667
w: 0.5555,5556 0.8888,8889 0.5555,5556
n=4 x: -0.8611,3631 -0.3399,8104 0.3399,8104 0.8611,3631
w: 0.3478,5485 0.6521,4515 0.6521,4515 0.3478,5485
n=5 x: -0.0961,7985 -0.5384,6931 0.0000,0000 0.5384,6931
0.9061,7985
w: 0.2369,2689 0.4786,2867 0.5688,8889 0.4786,2867
0.2369,2689
n=6 x: -0. 9324,6951 -0.6612,0939 -0.2386, 1919 0.2386,1919
0.6612,0939 0.9324,6951
w: 0.1713,2449 0.3607,6157 0.4679,1393 0.4679,1393
0.3607,6157 0.1713,2449
n=7 x: -0.9491,0791 -0.7415,3119 -0.4058,4515 0.0000.0000
0.4058,4515 0.7415,3119 0.9491,0791
w: 0.1294,8497 0.2797,0539 0.3818,3005 0.4179,5918
0.3818,3005 0.2797,0539 0.1294,8497
n=8 x: -0.9602,8986 -0.7966,6648 -0.5255,3241 -0.1834,3464
0.1834,3464 0.5255,3241 o. 7966,6648 0.9602,8986
w: 0.1012,2854 0.2223,8103 0.3137,0665 0.3626,8378
0.3626,8378 0.3137,0665 0.2223,8103 0.1012,2854
n=9 x: -0.9681,6024 0.8360,3111 0.6133,7143 -0.3242,5342
0.0000,0000 0.3242,5342 0.6133,7143 0.8360,3111
O. 9681,6024
w: 0.0812,7439 0.1806,4816 0.2606,1070 0.3123,4708
0.3302,3936 0.3123,4708 0.2606,1070 0.1806,4816
0.0812,7439
Sección 5.4. Integración numérica con límites infinitos o singularidades 201

3.4 INTEGRACIÓN NUMÉRICA CON LÍMITES INFINITOS O


SINGULARIDADES
=:n esta sección estudiaremos dos clas~s de integrales que requieren atención especial: por
_"emplo,

I = 1-: 1
exp(-x )dx
1
2
(5.4.1)

I =
1o y'x(exp(x)
1
+ 1) dx (5.4.2)

I = fo x0 ·7 cos(x)dx (5.4.3)

La integración de la ecuación 5.4.1 se extiende sobre un dominio infinito. Las ecuaciones 5.4.2
• 5.4.3 implican una singularidad del integrando enx =O (la función tiende al infinito conforme
z tiende a O). La ecuación 5.4.3 no parece dificil a primera vista, pero no es un problema trivial
n cualquiera de los métodos de integración numérica descritos en las secciones anteriores.
De hecho, si se aplica la regla trapezoidal extendida o la regla de Simpson, la respuesta seguirá
cambiando al duplicarse el número de intervalos. La integración de Romberg no funciona con
esta ecuación porque la función no es analítica en x =O.
Una función es integrable en un dominio infinito o semiinfinito sólo si es significativa-
mente distinta de cero en un dominio pequeño y se aproxima a cero conforme x se aproxima a
"° o --oo. El primer paso para evaluar

(5.4.4)

nsiste en sustituir los límites infinitos por límites finitos:

I = jx-X f(x)dx (5.4.5)

donde X es un valor tan grande que la contribución desde fuera de -X< x <X es insignificante
véase la figura 5.5).

5.4.1 Empleo de la regla trapezoidal extendida


Se ha determinado que el método de integración numérica más eficiente para la ecuación 5.4.5
es la regla trapezoidal extendida, que puede escribirse así:
202 Capítulo 5 Integración numérica

-inf +inf

X=-X x=X

Figura 5.5 Trazo de una función integrable desde -oo hasta oo,
y límites artificiales para la integración numérica

(5.4 .6

donde X¡ = ih y nh = X De hecho, el siguiente ejemplo demuestra que la regla trapezoida:


extendida produce resultados muy exactos con un número relativamente pequeño de puntos:

Ejemplo 5.5

Evalúe

·I =
1
r;;;
¡10 exp( -x 2 )dx
y7r -10

mediante la regla trapezoidal extendida.

Solución
Sustituimos los límites de integración por -1 Oy 1O, que son suficientemente grandes
para el presente problema:
- ·ó n 5.4. Integración numérica con límites infinitos o singularidades 203

I = 1
¡::;;
y 7r
jiº exp( -x )dx
-10
2

La integral anterior evaluada con trapez_v, con n = 10 y 20, por ejemplo, produce

h 11 I
1 10 1.00010344
o. 5 20 1. 00000000

El valor exacto es 1, así que la exactitud es perfecta hasta la octava posición decimal.

Hasta ahora, hemos supuesto que sabemos qué valor de X es el apropiado, pero en general
conoce a priori, así que es necesario realizar algunos ensayos para encontrar X. Si X es
iado grande, no sólo se desperdiciará tiempo de cómputo, sino que también se correrá el
de causar un desbordamiento o una insuficiencia en los cálculos. Por otro lado, si X es
iado pequeño, el resultado de la integración será inexacto. Un valor óptimo de X es tal
1 resulte afectado si X se reduce en un factor de, digamos, 1.5, pero no cambie si X se
enta. Para poder determinar un valor óptimo de X, lo primero que se hace es fijar h en
or razonable. Luego, se evalúa 5.4.6 variando el valor den, aumentándolo aproximada-
e en un factor de 1.5 después de cada prueba. Cuando el valor calculado de I no cambie
mentar n, haga X= n x h. Una vez fijado X, deberá examinarse la sensibilidad de I o h
!ando la ecuación 5.4.6 con el valor de h reducido a la mitad hasta que I deje de cambiar.
ue la detenninación tanto de X como de h mediante ensayos puede parecer laborioso, el
imiento completo no requiere más de diez pruebas.

Transformación exponencial
tinuación consideraremos la integración de una función que es singular en uno o ambos
finitos (véanse las ecuaciones 5.4.2 y 5.4.3, por ejemplo). El dominio de integración
, digamos [a, b], puede transfonnarse en (-00,00] mediante una transfonnación de coor-
~-.J<:i.:.. Una vez que se haya reducido la función a la fonna de la ecuación 5.4.4, se aplicará
la trapezoidal extendida.
Consideremos

I = ¡b f(x)dx (5.4.7)

a y b son límites finitos. La transfonnación puede escribirse así:

z =z(x)

x=x(z) (5.4.8)
204 Capítulo 5 Integración numérica

de modo que
z(a) =-<X>, z(b) = oo

La ecuación 5.4.7 puede entonces escribirse así:

I = ¡ 00

-oo
dx
J(x(z)) dz dz (5.4.9)

Un ejemplo de semejante transformación es la transformación exponencial dada por

x = a+ b + (b- a)tanh(z) (5.4.10)


2
o, lo que es equivalente,

z = tanh- 1 (2x-
b-a
b) ª- (5.4.11

La primera derivada de la ecuación 5.4.1 O está dada por


dx b-a
(5.4.12
dz = 2cosh2(z)

Ejemplo 5.6

(1) Evalúe

1
I = fo J(x )dx (A)

donde
f(x) = exp(-x2)
~
por la regla trapezoidal extendida después de la transformación exponencial empleando
la ecuación 5.4.1 O. Fije los límites de integración en el eje zen ±6 y h = 0.1.

(2) Ilustre gráficamente la transformación entre las coordenadas x y z.

(3) Grafique el integrando f(x) en las coordenadas x-y con los puntos de datos
empleados en la integración numérica.

(4) Grafique el integrando g(z) =f(x)dxldz en el dominio z-x.


_ción 5.4. Integración numérica con límites infinitos o singularidades 205

Solución
Con a= O y b = 1, la transformación de la ecuación 5.4.10 se convierte en
x = 1 + tanh(z)
2
(1) Si dividimos el dominio, -6 ~ z ~ 6, en intervalos equiespaciados de h = 0.2, los
valores de z de los puntos serán

Z¡ = ih, Í = -30 , .. , 30 (B)

A continuación, aproximamos (A) mediante

f1 ¡+= dx j+6
J(x)dzdz~ _ g(z)dz~hiE g(zi)
30
Jo
0
l= J(x)dx= _ (C)
00 6

con
dx
g(z) =f (x(z)) dz (D)

Los valores g¡ en los puntos de datos equiespaciados se calculan con

. = exp(-x¡ 2) 1
g1 (E)
..¡ 1 - xr
2
2cosh (z¡)

donde las x¡ son los puntos correspondientes a z¡ dados por

1 + tanh(z¡)
x¡= 2 (F)

Entonces, el resultado numérico es

I"' h [ _E g¡ - 0.5(g_30 + gJo)] (G)


¡=-30

El cálculo anterior se puede evaluar con trapez _v.

(2), (3) y (4): La figura 5.6 muestra la transformación de los puntos equiespaciados
en el eje x. La figura 5. 7 muestra los puntos de datos a lo largo del integrando. La
figura 5.8 muestra la distribución deg(z) y los puntos de datos empleados en el cálculo
de la regla trapezoidal.
206 Capítulo 5 Integración numérica

&•1 , b-1 , xi • 0.5'11 + tanhlzt\l


N 1

·• •
'ii
e
CD

'
o
~ :; ~

.
~

~ ~ ~ ~ ~ ~ u ~ ~

Puntos determinados en al aja x Figura S.6 Transformación de puntos


equiespaciados en el eje z al eje x

o: puntos da datos en las ooordanadas X·Y


y.exp(·x"2)/aqrt(1 ·X'2)

\ ~ ~ ~ ~ ~ ~ u ~ ~
X
Figura S.7 Integrando y puntos de datos
a Jo largo del eje x

g(z) • (dzidx)exp(·x"2)/(aqrt(1 ·x"2)


0.1

0.1

0.1

Figura S.8 Integrando y puntos de datos


en el dominio z
=edén 5.4. Integración numérica con límites infinitos o singularidades 207

.. 4.3 Transformación doble exponencial


exactitud de la integración numérica depende de la transformación elegida. Se ha propuesto
:ransformación doble exponencial dada por

a+ b + (b - a) tanh(.!!. senh(z))
x= 2 (5.4.13)
2

o una mejor opción que la ecuación 5.4.10. En este caso, dx/dz se convierte en

dx _ ~ (b - a) cosh(z)
(5.4.14)
dz - 4 cosh2q.senh(z))

ucimos las ecuaciones 5.4.13 y 5.4.14 en la ecuación 5.4.9 y aplicamos la regla trapezoi-
extendida. Aquí, los límites infinitos de la ecuación 5.4.9 se sustituyen por límites finitos
-Z y Z, y luego se aplica la regla trapezoidal extendida:

n dx
I= h E
k~n
f(xk) [dz) k
(5.4.15)

deh =Zln y

(5.4.16)

Xk = t[a+ b +(b-a) tanh [ I senh (zk) )] (5.4.17)

dx) n (b- a) cosh(zk)


[dz k = 4 cosh (I senh(zk))
2
(5.4.18)

En la ecuación 5.4.16, la pregunta es qué tan grande debe ser el valor de Z, y puede res-
nderse examinando el denominador de la ecuación 5.4.18. Cuando Zk aumenta, se acerca a
2 1t
cosh ( 2 senh (zk)) -+ 41 exp[21t exp(zk)] (5.4.19)

Este término aumenta de forma doble exponencial y puede causar un desbordamiento. Con
isión sencilla en Fortran o C en estaciones de trabajo típicas, el desbordamiento ocurre
ando
t I
exp ( exp(zk)) > 2 x 10
38
(5.4.20)
208 Capítulo 5 Integración numérica

o, lo que es lo mismo, si Zk es mayor que aproximadamente 4.0. Este criterio determina la Z


máxima posible. Es decir,

Z=nh<4 (5.4.21)

En MATLAB, el valor de punto flotante más alto es aproximadamente +9 .9e307, de modo que
el criterio para Z es

Z=:= nh < 6.1 (5.4.22)

Otro problema es el error de redondeo en la ecuación 5.4.17 que ocurre cuando el término
de tangente hiperbólica se acerca mucho a-1 o 1. A fin de evitar esto, primero observamos que
el término de tangente hiperbólica se puede escribir como

tanh{p) = (s - lis))/ (s + lis) (5.4.23)

dondes= exp{p). Utilizando la ecuación 4.2.23, escribimos la ecuación 5.4.17 como

(5.4.24)

donde

Sk I
= exp ( senh(zk))

Puesto que la ecuación 5.4.24 no tiene operación de resta, se ha eliminado una fuente
importante de errores de redondeo.
El método numérico con la transformación doble exponencial se implementa e
double_ exp, cuya sintaxis es

I = dbl_exp('nombre_f', a, b, n)

donde los argumentos tienen el mismo significado que para Gauss q. En la sección 5. 7 se
darán mayores detalles. -

Ejemplo 5.7

La longitud de la curva de y= g(x), a < x < b se puede calcular con

J = ¡b J1 + (g'(x)) 2dx (.

Calcule la longitud del arco parabólico y2 = 4x que satisface O< x < 2.


Sección S.S. Comandos de MATLAB para integración 209

Solución
Puesto que g(x) = 2 IX, su derivada es g'(x) = llfX. La integral se convierte en

(B)

El integrando de la ecuación anterior es singular en x = O.


El cálculo se realiza con dbl _ exp. Los límites de integración en la coordenada
transformada se fijan en Z = -4 y Z = 4. Los resultados calculados son:

n 1
10 3.600710
20 3.595706
30 3.595706

5.5 COMANDOS DE MATLAB PARA INTEGRACIÓN


La caja de herramientas de MA TLAB cuenta con quad y qua da. La función quad utiliza una
regla de Simpson recursiva, mientras que quada se vale de una cuadratura de Newton-Cotes
ursiva de orden 8. La sintaxis de quad incluye las siguientes tres formas:

quad('nombre f', a, b)
quad('nombre- f', a, b, tol)
quad('nombre=f', a, b, tol, traza)

la primera forma, la tolerancia, tol, tiene el valor por omisión, 0.001. El cálculo de
tura se itera hasta que se satisface la tolerancia. Si se utiliza la tercera forma con un valor
·nto de cero para traza, se trazará en la pantalla una gráfica que muestra el avance de la
gración. La sintaxis de quada es la misma; sólo se cambia quad por quada.

INTEGRACIÓN NUMÉRICA EN UN DOMINIO BIDIMENSIONAL


ideremos un dominio ilustrado en la figura 5.9, donde las fronteras izquierda y derecha
lineas verticales y las fronteras superior e inferior están dadas por funciones analíticas. La
1de/(x,y) extendida sobre este dominio se escribe así:

b ld(x)
I =
1
a c(x)
J(x, y)dy dx (5.6.1)
210 Capítulo 5 Integración numérica

Es común escribir la ecuación 5.6.1 en una fo~ diferente, como

id(¡)dy f ( x, y)
I =
1a
b
dx
c(x)i

o bien

I = j Lf(x, y)dx dy
donde A significa el dominio. En cualquier caso, el problema debe reescribirse en la forma de
la ecuación 5.6.1 antes de proceder con las integraciones numéricas. Si es necesario, intercam-
bie x y y.
5

,., 2 Dominio de integración

o y=c(x)
X=B X=b
2 3 4
X

Figura 5.9 Un dominio bidimensional para integración doble

El principio general de la integración numérica de la ecuación 5.6.1 consiste en reducirla


a una combinación de problemas unidimensionales. Si definimos

G(x) = ¡ d(x)

c(x)
J(x, y) dy (5.6.2

la ecuación 5.6.1 se convertirá en

I = 1b G(x) dx (5.6.3

a la cual puede aplicarse cualquiera de los métodos de integración numérica antes descrito-
Podemos escribir una aproximación numérica de la ecuación 5.6.3 en la fonna:
- :cción 5.6. Integración numérica en un dominio bidimensional 211

n+I
1 "' L w;G(x;) (5.6.4)
i=l

e las w; son factores de ponderación y las x; son puntos del método específico empleado.
=:acemos x = x;, la ecuación 5.6.2 se convierte en '

d(x¡)
G(xi) = j
c(x;)
J(x i, y) dy (5.6.5)

es un problema unidimensional porque la única variable del integrando es y. La ecuación


_ : también se evalúa con un método de integración numérica.

Ejemplo 5.8

Utilice la regla 113 de Simpson para evaluar la doble integral

I = ¡ (ld(x)
a
b
c(x)
sin(x + y)dy) dx (A)

donde los límites de integración son

a=I
b=3
c(x) = ln(x)
d(x) = 3 + exp(x/5)

Solución
Para la regla 113 de Simpson, los puntos de retícula en el eje x son

X¡= 1, X2 = 2 y XJ = 3
Véase en la figura 5.10 el dominio de integración y los puntos. Si aplicamos la regla
113 de Simpson a la primera integral obtenemos

l = ~x [G(x¡) + 4G(x2) + G(x3)] (B)

donde
hx = (b- a)/2 = 1
y
3+exp(x¡/5)
G(xi) =
1. In(x¡)
sin(xi +y) dy (C)
212 Capítulo 5 Integración numérica

y=d(x)
4

o
yze(x) (1,1)

X=8 x..t>
· 1 0~-o~.5--~-~1.~5-~2--2~
.5-~3~-3~.5---'4

Figura 5.10 Retícula para doble integración

El procedimiento completo se puede escribir de forma más explícita así:

l=
f 1
3 (1.3+exp(x/5)
ln(x)
sin(x+y)dy
)
dx

h [1.3+exp(l/5) 1.3+exp(2/5)
~
3
x sin(l +y) dy +4 sin(2 +y) dy
In( 1) In(2)

+ 1.
3+exp(3/5)
In(3)
sin(3 +y) dy
l (D)

= h3x [14.2214
sin(l + y)dy + 4 14.4918 sin(2 +y) dy
o 0.6931

4.8221 ]
+
!1.0986
sin(3 +y) dy

Con la regla 113 de Simpson, la primera integral de la línea anterior se convierte en


·ón 5.6. Integración numérica en un dominio bidimensional 213

¡4.22 14
lo sin(l +y) dy

=2.11070
3
[sen(1+0)+4sen(1+2.11070)+sen(1+4.2214)]
(E)
= (2.11070/3) [0.84147 + (4) (0.03088) + (-0.87322)] = 0.064581

Cálculos similares producen


4.4918

lo
0.6931
sin(2 +y) dy ~ -2.1086

4.8221

!
1.0986
sin(3 +y) dy ~ -0.67454

Así, el valor final de la doble integración es

¡ .. (1/3)[0.064581 + (4)(-2.1086)-0.67454] =-3.0148

El esquema de doble integración se implementó en dbl _ i tg, cuya sintaxis es:

I = dbl itg('nombre f', 'limite inferior', ...


- 'lirñlte_superior1 , a, b, m, n)

nde nombre_ f es el nombre del archivo M de función del integrando, 1 imite_ inferior
el nombre del archivo M de función que define a c(x), limite superior es el nombre del
hivo M de función que define a d(x), a y b son los límites inferior y superior de x y m y n
n el número de intervalos en las direcciones x y y, respectivamente. La función dbl _ i tg
voca a s imps _ v, así que el número de intervalos puede ser cualquier número mayor que 1.
Es posible que las fronteras de algunos dominios, como el de la figura 5.11, no estén
presados por dos curvas y dos líneas verticales. En un dominio así es necesaria una
transformación de coordenadas. Las nuevas coordenadas {e,11) están relacionadas conx y y por

x =x<e.11)
(5.6.6)
y= y(e.11)

Entonces, la doble integral en el dominio (x,y) se convierte en

j fv J(x, y) dydx = j j J(e, r¡)Jdr¡de (5.6.7)

donde res el dominio de integración en el plano e.11. y


214 Capítulo 5 Integración numérica

a (X, y) X- vi: (5 6 8)
J =
a(~,f'I) = xi:v
y I]
-
' V'> • •

2.5

O: dominio de integración

1.5

0 -~~.5---2~--2~
.5--~3--~3.5
_ _____,4

Figura 5.11 Un dominio de integración

Suponga que el dominio está cubierto por una retícula curvilínea, como se ilustra en la
figura 5.12. Si el dominio es simple, puede ser fácil generar una retícula curvilínea; en caso
contrario, puede utilizarse un método numérico de generación de retícula. 2 Con una
transformación de coordenadas, la geometría curva se proyecta sobre un dominio rectangular
en las coordenadas ~. ri. Las líneas de la retícula se denotan con los índices i y j (véase la figura
5.12). La línea de retícula i ~orresponde a~= i y la línea de retícula} corresponde a ri = j en el
dominio ilustrado en la figura 5.13. La retícula en el dominio ~-ri es rectangular y equies-
paciada. ·
En el dominio rectangular ~-ri, la ecuación 5.6.7 se convierte en

j l J(x, y)dydx = lim fin G(~, r¡)dr¡d~ (5.6.9)

donde

G(~,f'I) =f(~.ri)J (5.6.10

2
Véanse las siguientes referencias: [l] J.F. Thompson, "Grid Generation'', en Handbook of Numerical HeaJ
Transfer, W.J. Minkowycz, et al., ed., Wiley Interscience, 1988. [2] S. Nakamura, "Coordinate Transformation anC
Structured Grid Generation'', en Handbook ofFluid and Fluid Machinery, J.A. Schetz, et al., ed., John Wiley, par
publicarse. [3] P. Knupp y S. Stenberg, Fundamentals ofGrid Generation, CRC Press, 1993.
Sección 5.6. Integración numérica en un dominio bidimensional 215

Figura 5.12 Retícula en el dominio de integración

10

6
1 1j) (1, )

(1 ,1) (i,1)

xi

Figura 5.13 Retícula en el dominio computacional

la integración numérica del miembro derecho de la ecuación 5.6.9 se efectúa utilizando la


tícula en el dominio ~-ri ilustrada en la figura 5.13. El principio de la integración numérica
las coordenadas ~-ri es el mismo que para la doble integración en las coordenadas x-y. Los
calores de G;,j se calculan con
(5.6.11)
216 Capítulo 5 Integración numérica

Las derivadas parciales de x en los puntos de retícula se evalúan mediante las siguientes
aproximaciones de diferencia:

(x~)I,j = (-XJ,j + 4x2,j- 3x1,j)/2


(x~)i,j=(x¡+1,j-Xi-l,j)12, 1 <i<m
(x~)m,j = (3xm,j - 4Xm-l,j + Xm-2,j)/2
(xn)i,I = (-x¡,3 + 4x;,2 - 3x;,¡)/2
(5.6.12)

(xn)i,j = (xi,j+I - Xi,j-i)/2, 1 <j < n


(xn)i,n = (3x;,n - 4Xi,n-I + Xi,n-2)12

donde m y n son los valores máximos de i y j, respectivamente. Las derivadas parciales de y


son las mismas que las de la ecuación 5.6.12, excepto que se sustituye x por y.

5.7 ARCHIVOS M
FM 5-1. Regla trapezoidal extendida (1)
Objetivo: Integrar una función mediante la regla trapezoidal extendida.
Sintaxis: I = trapez _ v ( f, h)
f: arreglo de los datos en puntos equiespaciados. La longitud del vector f
es arbitraria, pero debe ser mayor que 1.
h: tamaño del intervalo.
Ejemplo:x=0:0.1:5, y=sin(x); I = trapez_v(y,0.1)

trapez_v.m
function I = trapez v(f, h)
I = h*(sum(f) - (f(i) + f(length(f)))/2);

FM 5-2. Regla trapezoidal extendida (2)


Objetivo: Integrar una función por la regla trapezoidal extendida. La función tr apez _ n utiliz.a
la integración trapezoidal extendida pero no traza una gráfica, mientras que tr a pez _g sí
grafica.
Sintaxis: trapez_n('nombre_f', a, b, n) o trapez_g('nombre_f', a ,
b, n)
nombre f: nombre del archivo M de función del integrando,f(x)
a: límiteinferior de x
b: límite superior de x
n: número de intervalos
Ejemplo: trapez_n('sin', o, pi, 20)
Sección 5.7. Archivos M 217

trapez_n.m
:cmction I = trapez n(f name, a, b, n)
- (b-a)/n;
x a+(O:n)*h; f = feval(f_name, x);
trapez_v(f,h)

trapez_g.m
:anction I = trapez_g(f_name, a , b, n)
::=n;hold off
- (b-a)/n;
x = a+(O:n)*h; f = feval(f_name, x);
: = h/2*(f{l) + f(n+l));
~f n>l I = I + h* sum(f{2:n)); end
-:2 = (b-a)/100;
xc = a+(O:lOO)*h2; fe= feval(f name, xc);
pl ot(xc,fc,'r'); hold on -
=i tle('Regla Trapezoidal'); xlabel('x') ;ylabel('y');
plot(x,f);
plot(x,zeros(size(x)))
:or i=l:n; plot([x(i),x(i)J, [O,f{i)J); end

FM 5-3 Regla de Simpson extendida


Objetivo: Integrar una función en forma tabular mediante la regla de Simpson extendida.
Sintaxis:I = Simps v (f, h) o I = Simps n('nombre f' , a, b, n)
nombre f: nombre del archivo M de función del integrando,f(x)
f: datos-funcionales de abscisas equiespaciadas. El número de puntos de datos es
arbitrario, pero debe ser mayor que 3
h: tamaño de intervalo de las abscisas

Simps_v.m
f unction I = Simps v(f,h)
::1=length(f)-1;
i f n=l,
fprintf('Los datos tienen sólo un intervalo'),return;
end
i f n=2, ...
I = h/ 3 * ( f ( 1) + 4 * f ( 2) + f ( 3) ) ¡
return;end
i f n=3, ...
I = 3/8*h*(f(l) + 3*f(2) + 3*f(3) + f(4));
return;end
I =O;
i f 2*floor(n/2)-=n,
I = 3/8*h* (f (n - 2)- + 3*f (n -1) ...
+ 3*f(n) + f(n+l));
m=n - 3
el se
m=n;
e nd
218 Capítulo 5 Integración numérica

I = I + (h/3)*(f(l) + 4*sum(f(2:2:m)) + f(m+l));


if m>2, I = I + (h/3)*2*sum(f{3:2:m));
end

Simps_n.m
function I = Simps n(f name, a, b, n)
h (b- a)/n;
x a+(O:n)*h; f feval(f_name, x);
I Simps_v(f,h}

FM 5-4 Fórmula cerrada de Newton-Cotes


Objetivo: Integrar una función por la fónnula cerrada de Newton-Cotes. Los factores de
ponderación se calculan automáticamente.
Sintaxis: Newt i tg ('nombre f' , a, b, n)
nombre E nombre de un archivo M de función que define al integrando.
a, b: límites inferior y superior, respectivamente.
n: número de intervalos equiespaciados entre los dos límites de integración.
Ejemplo:Newt_itg('sin', o, pi, 4)

Newt_itg.m
function I = Newt_itg(f_name, a , b, n)
npt=n+l;
if npt<O, break; end
en= npt:-1:1;
X = 1: npt;
for i=l:npt
power 2 ( i) = npt ·en ( i) ; power 1 ( i) 1 ·en ( i) ;
end
for j=l:npt
z = zeros(l,npt); z(j}=l;
al= polyfit(x, z,npt-1);
w(j) = sum(al.*(power 2 - power 1) ./en);
% fprintf(' j=%3.0f w=%12.8f\n', j, w)
end
x=a: (b-a)/(npt-1) :b;
y=feval(f name, x);
I = sum(w~*y)*(b-a)/(npt-1);
fprintf{'\n x y w \n')
for j=l:npt
fprintf('%e %e %e\n', x(j) ,y(j), w(j))
end

FM 5-5 Cuadratura de Gauss-Legendre


Objetivo: Integrar una función mediante la cuadratura de Gauss-Legendre. Los puntos de
Legendre y los factores de ponderación se calculan automáticamente.
Sintaxis:Gauss q('nombre f', a, b, n)
nombre f: nombre de archivo M de función del integrando,f(x)
Sección 5.7. Archivos M 219

a: límite inferior de x
b: límite superior de x
n: número de puntos de Legendre
.=:Jemplo:Gauss_q('sin', o, pi, 8)

uss_q.m
:~1 ction I = Gauss q(f name, a, b, n)
; =:...egen pw (n) ;
roots(p)' ;x = sort(x);
::::i !: j=l:n
y = zeros(l,n); y(j)=l;
p = polyfit(x,y,n-1);
P = poly itg(p);
w(j) = polyval(P,l) - polyval(P,-1);
;o:;. d
= O.S*((b-a)*X +a+ b) i
_=feval(f name, x);
: = sum(w~*y)*(b-a)/2;
: ; n intf (' \n x y w \n')
::ir j=l:n
:~ rintf('%e %e %e\n', x(j) ,y(j), w(j))
e:-id

Legen_pw.m
:·..:.nction pn = Legen_p (n)
; ~b=(l]; if n==o, pn=pbb; break; end
; !:>=(1 O]; if n==l, pn=pb; break; end
: :ir i=2: n;
pn = ((2*i-l)*(pb,O] - (i-1)*[0, O, pbb])/i;
pbb=pb; pb=pn;
=nd

Integración por transformación doble exponencial


Objetivo: Integrar una función por transformación doble exponencial
intaxis:dbl exp('nombre f', a, b, n)
nombr~_f: nombre delarchivo M de función del integrando,f(x)
a: límite inferior de x
b: límite superior de x
n: número de intervalos
Ejemplo: dbl_exp (' fun_dbx', o, 2)

dbl_exp.m
:anction I=dbl exp(f name, a, b, n)
a- limTte inferior de integración
g b limite superior de integración
h : intervalo de retícula
n : número de intervalos
% dxdz : dx/dz
220 Capítulo 5 Integración numéria

% hcos : coseno hiperbólico


% hsin : seno hiperbólico
% I : resultado de la integración
zmax=3 . ; h = 2*zmax/n;
z = -zmax:h:zmax; exz = exp( z); exzi=exz.· (- 1);
hcos = (exz + exzi)/2.; hsin = (exz - exzi)/2.;
s = exp( pi*O.S*hsin ); si=s.·(-1);
x = (b*s + a*si) .*(s + si).· (-1);
p = pi*hsin/2; w = exp( p ) ;
dxdz = (b - a)*pi*hcos.*((w + w . • (-1))/2.0) . • (-2)/4;
g = feval(f name,x) .*dxdz;
I = trapez_v(g,h);
fun_dbx.m
function y = fun dbx(x)
y= sin(x)/sqrt(x);

Doble integración
Objetivo: Doble integración de una función bidimensional,f(x, y)
Sintaxis: ('nom fun', 'c baja', 'c alta' ,a,b,m,n)dbl itg
nom_ fun: nombre del archivo M-del integrando,f (x, y)
c baja: nombre del archivo M de función del límite inferior de y, c(x)
c _al ta: nombre del archivo M de función del límite superior de y, d(x)
a: límite inferior de x
b: límite superior de x
m: número de intervalos en la dirección x (debe ser par)
n: número de intervalos en la dirección y (debe ser par) Ejemplo:
dbl itg('fun dbl', 'lim inf', 'lim sup' ,1,3,6,6)
Las muestras de archivos M defunción se dan después de dbl_i tg en el siguiente listado.
dbl_itg.m
function I=dbl itg(f name, c lo, c hi, a, b, m, n)
% Doble integración por la regla de Simpson
% a: limite inferior de integración sobre x
% b: limite superior de integración sobre x
% c lo: nombre de función para la curva de la cota inferior
% (función de x), c(x)
% d hi: nombre de función para la curva de la cota superior
% (función de x), d(x)
% f name: nombre de función del integrando
% hx, hy: tamaños de intervalo
% I: resultado de la integración
% m,n: número de intervalos en las direcciones x y y, resp.
if m<2 1 n<2
fprintf('El número de intervalos no es válido \n' ) ; return
end
mpt=m+l;npt=n+l; %número de intervalos
hx = (b - a)/m; x = a+(O:m)*hx;
far i=l:mpt
ylo = feval(c_lo, x(i));
lemas 221

y hi = feval(c hi, x(i));


h y = (yhi-ylo)/n;
y( i, :)=ylo + (O:n)*hy;
f(i, :) = feval(f name, x(i), y(i, :)) ;
G (i) = Simps_v(f(i,:), ·hy);

Simps_v(G,hx);

dbl.m
:...::ct ion y fun dbl(x, y)
=sin( x + y li

inf.m
:.:.ct ion y= lim_inf(x)
= log(x);

_sup.m
:_1c tion y = lim sup(x)
= 3 + exp( x/5-);

PROBLEMAS
(5.1) Evalúe la siguiente integral por la regla trapezoidal extendida con 11=2, 4, 8 y 16 intervalos:

r14
(a} lo tan(x) dx
1
(b) fo exp(x) dx

1 1
(c)
1O
- -
2 +X
dx

(5.2) Evalúe

fo,,. 12 sin( x) dx

por la regla trapezoidal extendida con 11 = 2, 4, 8, 25 y 100 intervalos. Luego, determine el


error de los resultados numéricos comparándolos con el valor exacto.
(5.3) Un tanque esférico de agua con 20 m de radio está situado 40 m sobre el suelo. Un tubo de
drenaje vertical recto con radio b = 0.2 m y 40 m de longitud está conectado al fondo del
tanque para drenar el agua al nivel del suelo. El factor de fricción del tubo es/= 0.0016. El
tanque está lleno hasta el tope y el drenado se inicia en t =O. ¿Cuánto tiempo se requiere para
drenar el agua?
222 Capítulo 5 Integración numérica

Sugerencia: La ecuación de la energía para determinar la velocidad del agua en el tubo está
dada por
u2 L u2
gz=-+f--
2 2b 2
donde el primer término del miembro derecho es la energía cinética del agua que sale de
tubo y el segundo término es el efecto de pérdida por fricción. Utilice 20 intervalos.
(5.4) El fondo de un cilindro circular tiene un radio de 0.5 m y es perpendicular al eje, pero la tapa
tiene una inclinación de 45 grados respecto al eje, como se muestra en la figura 5.14. Obtenga
el volumen mediante la regla trapezoidal con 20 intervalos.

Figura 5.14 Un cilindro

(5.5) Con la tabla de función que se da más abajo, evalúe

10.s /(x) dx

por la regla trapezoidal extendida con h = 0.4, h = 0.2 y h = 0.1 .


X f(x)
o.o o
0.1 2.1220
0.2 3.0244
0.3 3.2568
0.4 3.1399
0.5 2.8579
0.6 2.5140
0.7 2.1639
0.8 1.8358
::.rob lemas 223

(S.6) Aplicando la integral de Romberg a Jos resultados de la regla trapezoidal con h = 0.1 y
h = 0.2 del problema 5.5, estime una integral más exacta.
(S. 7) A continuación se da una tabla de función:
Í X; f(x;)
1 o 0.9162
2 0.25 0.8109
3 0.5 0.6931
4 0.75 0.5596
5 1.0 0.4055

(a) Calcule

l=1 1
f(x)dx

por la regla trapezoidal extendida con h = 0.25 y h = 0.5.


(b) Mediante la integración de Romberg de los resultados de la pregunta (a), estime un valor
más exacto de /.
(S.8) Considere tres puntos de datos, (-1,ji), (O,f2), (l,Jj). Ajuste el conjunto de datos por la
fórmula de interpolación de Lagrange. Integrando la fórmula de interpolación de Lagrange,
demuestre que se obtiene la regla 1/3 de Simpson.
Sugerencia: Transforme las funciones de forma en series de potencias con polyf i t. Una
vez que obtenga los coeficientes de las potencias, integre el polinomio con po 1 y_ i tg.
(S.9) La regla 1/3 de Simpson es exacta si se integra un polinomio de orden 3 o menor. Verifique
esto integrando

I = 1
3
3
x dx

por la regla 1/3 de Simpson y analíticamente. Repita utilizando la regla 3/8 de Simpson.
(S.10) Repita el problema (5.1) utilizando el método 1/3 de Simpson.
(S.11) Evalúe las siguientes integrales con la regla 1/3 de Simpson extendida empleando n = 2, 4,
8, 16 y 32:

(a) r
lo
dx
2+cos(x)
(b) [2 log(l + x) dx
11 X

(e) [f dx
lo 1 + sin 2(x)
224 Capítulo 5 Integración numérica

(5.12) Evalúe Ja siguiente integral por Ja regla 1/3 de Simpson extendida empleando 11 = 2, 4, 8, 16
y 32:

(a) 11
x exp(2x )dx

(b) 11
x-x dx

(c) 12
"
2
exp(2x)sin (x)dx

(5.13) Suponga que es un arquitecto y piensa utilizar un arco grande cuya forma parabólica esta
dada por
y= O. lx(30 -x) metros

donde y es Ja altura sobre el suelo y x está en metros. Calcule la longitud total del arco por la
regla de Simpson extendida. (Divida el dominio desde x =O hasta x = 30 m en l O intervalos
igualmente espaciados.)

L= ¡o
30

(5.14) Un automóvil de masa M = 5400 kg viaja a una velocidad de 30 m/s. La transmisión se pone
en neutral repentinamente en t =O s. Suponga que Ja ecuación de desaceleración después
t = Oestá dada por
dv 2
5400 dx = -8.276v - 2000

donde v = v(t) es Ja velocidad (mis) del automóvil en t. El miembro izquierdo represe


Mv(dv/dx) . El primer término del miembro derecho es el arrastre aerodinámico y el segun
término es la resistencia al rodamiento de los neumáticos. Calcule la distancia que recorre ...
automóvil hasta que la velocidad se reduce a 15 mis.
Sugerencia: La ecuación del movimiento se puede integrar como

{x
1 30
15
5400
8.276v2 + 2000 vdv = Jo dx' =x
Evalúe la ecuación anterior utilizando la regla de l/3 de Simpson.
(5.15) (a) Sif(x) es un polinomio de orden 11 o menor, Ja fórmula cerrada de Newton-Cotes de orde:.
n (empleando n + 1 puntos) se hace exacta. Explique la razón. (b) La fórmula cerrada
Newton-Cotes de orden par 11 se hace exacta sifes de orden n + l. Explique por qué.
(5.16) La longitud de una curva definida por x = <j>(t), y= 'l'(t), a < t < b, está dada por
roblemas 225

s= ¡b J[</l(t)]
2+ [t1i'(t)] 2
dt

Utilice la cuadratura de Gauss con 11=2,4 y 6 para encontrar la longitud del cicloide definido
por
x = 3[t- sen(t)], y= 2 - 2 cos(t), O< t < 27t

(5.17) Repita el problema 5. 1 utilizando la cuadratura de Gauss con n = 2, 3, 4, 6 y 8 puntos.


(5.18) Sif(x) es un polinomio de orden 211- 1 o menor, la cuadratura de Gauss empleando 11 puntos
de Legendre se vuelve exacta. Verifique esto calculando la siguiente integral mediante la
cuadratura de Gauss de orden 3 (3 puntos de Legendre):

y=x5 + 3x2

(5.19) Evalúe la siguiente integral impropia con exactitud de seis posiciones decimales mediante la
regla trapezoidal extendida:
exp(-x 2 )
f
00
--'--~-'--dx
_ 00 l +X 2
(5.20) Calcule las siguientes integrales mediante la cuadratura de Gauss de /1 = 6 puntos:

(a) ¡.
0
l
2 + cos(x)
dx

(b) [2 log(l + x) dx
11 X

(c) 1 1
xexp(2x) dx

(d) 1 1
cos(x)log(x) dx

(d) 1 2
log( x) dx

(5.21) Evalúe las siguientes integrales impropias con exactitud de seis posiciones decimales por la
regla trapezoidal extendida, con la transfonnación exponencial dada por la ecuación 5 .4.1 O:

(a) 11 t:~~) dx

(b) ¡1 exp( x)
lo v'f=?
226 Capítulo 5 Integración numérica

(5.22) Calcule la siguiente integral por la regla trapezoidal extendida para cada eje:

l= f: f 0
1
sen(x +y) dydx

(Utilice sólo dos intervalos para cada eje; la función seno está en radianes.)
(5.23) Evalúe Ja siguiente integral por Ja regla 1/3 de Simpson:

J= f f 01 OX ./x +y dydx

(5.24) El área de un círculo unitario es 7t. La exactitud de un método numérico para la doble
integración puede probarse con el problema:

l=J fv dydx

donde D significa que Ja integración se extiende sobre el interior de

que es un círculo unitario. Realice la evaluación numérica de la doble integral anterior por Ja
regla de Simpson extendida en ambas direcciones con 2 x 2, 4 x 4, 8 x 8, 16 x 16, 32 x 32 •
64 x 64 intervalos.
(5.25) Repita el problema 5.24 utilizando la transformación doble exponencial.
(5.26) Por la regla de Simpson extendida con 10 intervalos en cada dirección, evalúe la integra.
doble

f
f
7t sen(x)
l= exp(-x2 -/)dydx
0 0

(5.27) Evalúe la siguiente integral doble por la regla 1/3 de Simpson:

l=f f 1
2

0
2-0.5x
./x + ydydx

(5.28) Repita el problema del ejemplo 5.6 utilizando la cuadratura de Gauss de /1 = 3.

(5.29) Los polinomios de Chebyshev satisfacen la relación de ortogonalidad:

f
1

-!
Tm-1(x)Ti1-1(x) r---'r= n/2, si m =
v 1 --
dx
x-2
X
[ O, si m
1t, SI.
~/111> 1
m = /1 =0
l
Verifique la relación anterior para la combinación de 111 = 1 hasta 7 y /1 = 1 hasta 7 cal cu lande
la matriz de 7 por 7 A= [am,n] donde
blemas 227

am,n = ¡-1
1

Tm-1(x)Tn-1(x) ~
dx
y 1 - x-

Utilice la transformación doble exponencial para la integración.


Capítulo 6

Diferenciación numérica

La diferenciación numérica, o aproximación de diferencia, es un método que sirve para evaluar


las derivadas de una función empleando los valores funcionales en puntos de datos discreto
Si se conocen los valores funcionales en puntos de datos discretos, la función puede expresarse
aproximadamente mediante un polinomio de interpolación. A continuación podemos evaluar
las derivadas derivando el polinomio de interpolación.

6.1 DERIVADAS DE POLINOMIOS DE INTERPOLACIÓN


Supongamos que un conjunto de puntos de datos,

(x;, y;), i = 1, 2, ... n + 1

se ajusta a un polinomio de interpolación en forma de serie de potencias como se explicó en


capítulo 4, y está dado por
g(x) = c1.x11 + c2.x11- 1+ ... + CnX + Cn+i (6.1.

A fin de encontrar la primera derivada de g(x) para x =O, diferenciamos g(x) y hacemos x =
El resultado es g'(O) = Cn. Asimismo, la segunda derivada parax =O es g" = 2c11-I y, en términ -
más generales, la k-ésima derivada es
gCk)(O) = Cn+l-kk!, k =O, 1, 2, ... n (6.1.:

Si eliminamos e; en la ecuación 6.1.1 por la ecuación 6.1.2 e invertimos el orden de l


términos, obtenemos
_
g(x) -g(O) + g (O).x + .úQl
I

2
x2 + ~3
3
! x + ... + ~
n! x11 (6. 1..:

Ésta es la expansión de Taylor de la ecuación 6.1.1 alrededor de x = O o, lo que es lo mis


la expansión de Mclaurin.
Las relaciones anteriores pueden aplicarse al cálculo de derivadas para cualquier vru -
de x. Suponga que desea las derivadas de g(x) en x =a. Entonces, con la transfonnación --
coordenadas,

228
- - cción 6.1. Derivadas de polinomios de interpolación 229

z=x-a
"'Uede escribir g(x) en términos de z como
g(x) = g(z) = d1z'1 + d2z'1-I + ... dnz + dn+I (6.1.4)

tanto, las derivadas g<k>(a) están dadas por

[[ fz rg(z)l=o = k!dn+l-k, k = 0, 1, 2, ... n (6.1.5)

es necesario calcular los coeficientes d¡ a partir de e¡. De hecho, d¡ puede obtenerse directa-
nte ajustando g(z) al conjunto de datos (x¡ - a, y¡), i = 1, 2, .. n + 1; en MA TLAB, esto es
d = polyfit(x-a, y, length(xd)-1)
nde x es un vector de x;, i = 1, 2, .. n + 1 y y es un vector de y¡, i = 1, 2, .. n + l. Podemos
lcular todas las derivadas de un polinomio de interpolación ajustado a un conjunto de datos
ediante poly _ drv, que se lista como FM 6-3 en la sección 6.7.

Ejemplo 6.1

Un conjunto de datos está dado por


xd: O 0.2000 0.4000 0.6000 0.8000 1.0000
yd: 0.3927 0.5672 0.6982 0.7941 0.8614 0.9053
Estime todas las derivadas para x =a= 0.3 con poly _drv y después con polyf i t
como se explicó en esta sección.

Solución
Transfonnamos la coordenadax en z con z = x- a, donde a= 3. Como hay seis puntos
de datos, usaremos un polinomio de quinto orden. Los coeficientes de las potencias del
polinomio de interpolación se obtienen con
xd = [O 0.2000 0.4000 0.6000 0.8000 1.0000)
yd = (0.3927 0.5672 0.6982 0.7941 0.8614 0.9053)
a=0.3;
d = poly_drv(xd,yd,a)
Los resultados son, en orden de derivada creciente,
0.6533 -0.9710 1.0406 -1.3750 1.8750
Una fonna equivalente de realizar los cálculos anteriores es:
eO = polyfit(xd-a,yd,length(xd)-1);
el polyder(eO); polyval(el,O)
e2 polyder(el); polyval(e2,0)
e3 polyder(e2); polyval(e3,0)
e4 p o lyder(e3); polyval(e4,0)
es polyder(e4); polyval(e5,0)
230 Capítulo 6 Diferenciación numérica

o, lo que también es equivalente,


eO polyfit(xd,yd,length(xd)-1);
el polyder(eO); polyval(el,a)
e2 polyder(el); polyval(e2,a)
e3 polyder(e2); polyval(e3,a)
e4 polyder(e3); polyval(e4,a)
e5 polyder(e4); polyval(eS,a)

6.2 APROXIMACIONES DE DIFERENCIA


En la sección anterior vimos que es fácil evaluar todas las derivadas de un polinomio ajustado
a un conjunto de datos. Sin embargo, en los análisis numéricos prácticos usuales no son
necesarias todas las derivadas; lo que con mayor frecuencia se necesita es una o dos derivadas
de orden bajo. Las fórmulas para aproximar derivadas se denominan aproximaciones de
diferencia. En la presente sección derivaremos aproximaciones de diferencia mediante inter-
polación de polinomios.
A fin de ilustrar la deducción de las aproximaciones de diferencia, consideraremos una
función!(x) como la que se representa en la figura 6.1, y supondremos que se desea la primera
derivada def(x) en x = xo. Si conocemos los valores def-1 = f(xo - h),fo = f(xo) y ft =
f (xo + h), donde h es un intervalo entre dos puntos consecutivos sobre el eje x, entonces
podemos aproximarfó = f'(xo) con el gradiente de la interpolación lineal A, B o C, como se

Diferencia Diferencia Diferencia

hacia adelante hacia atrás central

f(x) f(x) f(x)

X X X
~-----

-h o h ·h o h -h o h

Figura 6.1 Explicación gráfica de las aproximaciones


de diferencia paraf'(xo)
Sección 6.2. Aproximaciones de diferencia 231

ilustra en la figura 6.1. Estas tres aproximaciones empleando el gradiente de las líneas A,
B y C se llaman, respectivamente, aproximaciones de diferencia hacia adelante, hacia atrás y
central. Las fórmulas matemáticas de estas aproximaciones son las siguientes:

(a) Aproximación con A (aproximación de diferencia hacia adelante)

I'' ,,,fi - fo (6.2.1)


JO h

(b) Aproximación con B (aproximación de diferencia hacia atrás)

I'' fo-f-¡ (6.2.2)


JO.. h

(c) Aproximación con C (aproximación de diferencia central)

/'' .. fi -f-1 (6.2.3)


JO 2h

Las aproximaciones de diferencia están íntimamente relacionadas con los polinomios de


interpolación. Consideremos p + 1 puntos de abcisas, Xa, Xb, .. . Xg, y las ordenadas correspon-
dientes, fa, Ji,, ... fg. El polinomio de interpolación ajustado a estos puntos de datos puede
expresarse mediante la interpolación de Lagrange. El polinomio de interpolación ajustado a
p + 1 puntos es, cuando más, de orden p; por tanto, podemos evaluar las derivadas hasta la de
p-ésimo orden, inclusive. Las derivadas del polinomio de interpolación en los puntos a, b, ...
g son aproximaciones de diferencia. Dependiendo de para cuál Xa, Xb, ... Xg se evalúe la
derivada, y del orden de la misma, podrán obtenerse muchas fórmulas de aproximación
distintas.

Ejemplo 6.2

(a) Escriba el polinomio de interpolación de Lagrange que pasa por los puntos de
datos x 0 = O, x 1 = h y x 2 = 2h, con ordenadas / 0, / 1 y fi, respectivamente.
Deduzca la aproximación de diferencia para f'(O) diferenciando una vez la
fórmula de interpolación y haciendo x = O. Deduzca también la aproximación de
diferencia para /"(O) diferenciando la fórmula de interpolación dos veces y
haciendo x = O.
(b) Escriba el polinomio de interpolación de Lagrange que pasa por x_ 1 = -h, x0 =O y
x 1 = h, con ordenadasf._ 1,.fo y/¡, respectivamente. Diferenciando la fórmula de
interpolación, obtenga la apro::imación de diferencia para /ó =f'(x 0 ). Deduzca
también la aproximación de diferencia para/0= f"(x 0 ).
232 Capítulo 6 Diferenciación numérica

( c) Repita para los puntos x_2, x_1 y x0 •

Solución

(a) Aproximamos/(x) con el polinomio de interpolación de Lagrange que pasa por


los puntos i = O, 1 y 2:

f(x) ""g(x)
(x - x 1) (x - x 2 ) fc (x - x 0 ) (x - x 2)
= o+ f¡
(x 0 - x 1)(x0 - x 2) (x 1 - x 0) (x 1 - x 2 )
(x-x0 ) (x-x 1) r
+ J2
(x2 -x0 ) (x2 -x 1)

Si diferenciamos y hacemos x =O, tenemos

- '2 + 4(¡ - 31{¡


fó"" -'' ih 'Jl (A)

Si diferenciamos dos veces y hacemos x = O, queda


11 _ji - 2/¡ - fo
1o - h2 (B)

(b) La interpolación de Lagrange que pasa por los puntos i = -1, O y 1 es

f(x) ""g(x)
(x-xo)(X -X¡) (x -X_¡)(X-X¡)
~~~~~~/_¡+ fo
(x_1 -x0 )(x_ 1 -x 1) (x 0 -x_ 1)(x0 -x 1)
(x-x_1) (x-x 0) r
+ JI
(x¡ -X_¡) (X¡ -Xo)

Si diferenciamos una y dos veces, respectivamente, y hacemos x = O, obtenemos

Jo
I ,,.Ji -f--1 (C)
2h

11 _f+I -2fo + f-¡


1 o- h2 (D)

(c) La interpolación de Lagrange que pasa por los puntos en que i = -2, -1 y O es
"ón 6.2. Aproximaciones de diferencia 233

f(x) "'g(x)

(x-x_ 1)(x-x0) f (x-x_2 )(x-x0 )


(x_2 - X_¡) (x_2 - Xo) - 2 + (X_¡ - X_2) (x_I - Xo) J_¡

Si diferenciamos una y dos veces, respectivamente, y hacemos x = O, obtenemos

' .. 3fe - 4f.1 + f-2 (E)


fco 2h

I"" ... fe- 2/-1 + /-2 (F)


Jo h2

Comentarios: (1) Las ecuaciones (A), (C) y (E) son aproximaciones de/'(O), pero utilizan
diferentes puntos de datos. En lo que respecta a la exactitud de la aproximación de diferencia,
resulta útil la información general acerca del comportamiento del error de la interpolación de
Lagrange. Como se explicó en la sección 4.3, la exactitud de una interpolación de Lagrange es
óptima alrededor del punto central. Esto indica que la ecuación (C), que se obtiene evaluando
la derivada de la fórmula de interpolación para el punto central es la más exacta. Las otras dos
ecuaciones, (A) y (E), obtenidas evaluando la derivada en los puntos extremo izquierdo y
extremo derecho, respectivamente, son menos exactas. (2) La ecuación (C) es idéntica a la
ecuación 6.2.3 que se deduzco diferenciando la interpolación lineal que pasa por los dos puntos,
i=-1 y l.

Ejemplo 6.3

Calcule la primera derivada de tan(x) en x = 1 mediante las cinco aproximaciones de


diferencia que dedujimos en esta sección, ecuaciones 6.2.2, 6.2.1, 6.2.3 y las ecuacio-
nes (E) y (A) del ejemplo 6.1, utilizando h = 0.1, 0.05 y 0.02. Después, evalúe el
porcentaje de error de cada aproximación comparándolas con el valor exacto.

Solución
Si sustituimos/¡= /(1 - ih) = tan(l + ih) en las cinco ecuaciones, obtenemos los
resultados de la tabla que está en la siguiente página. Los números que aparecen entre
paréntesis en la tabla son porcentajes de error. Observe que los errores en las dos
primeras aproximaciones disminuyen proporcionalmente con h, mientras que los
errores de las últimas tres aproximaciones lo hacen en proporción a h2• Es evidente que
la rapidez de reducción del error aumenta al aumentar el orden de exactitud.
234 Capítulo 6 Diferenciación numérica

h=O. l h =0.05 h =0.02


[f(l)-f(l - h)]lh 2.9724 (13.2) 3.1805 (7.1) 3.3224 (3.0)
[f(l + h)-f(l)]lh 4.0735 (-18.9) 3.7181 (-8.5) 3.5361 (-3.2)
[f(l + h)-f(l - h)]/2h 3.5230 (-2.8) 3.4493 (-0.69) 3.4293 (-0.11)
[3f(l)-4f(l - h) +f(1 - 2h]/2h 3.3061 (3.5) 3.3885 ( 1.08) 3.4186 (0.20)
[-f(I + 2h) + 4f(l + h)- 3f(l)]/2h 3.0733 ( 10.3) 3.3627 ( 1.83) 3.4170 (0.25)

6.3 MÉTODO DE EXPANSIÓN DE TAYLOR


El método de expansión de Taylor es una forma alternativa de obtener aproximaciones de
diferencia. Este método no sólo deduce las fórmulas de diferencia sistemáticamente, sino que
también deduce los términos de error.
Para una derivada de orden p, el número mínimo de puntos de datos requeridos para
deducir una aproximación de diferencia es p + 1. Por ejemplo, una aproximación de diferencia
para la primera derivada de una función precisa de por lo menos dos puntos.
Consideremos la deducción de la aproximación de diferencia paraf;' = f'(x;) en ténninos
de/¡= f(x;) y /i+1 =f(x;+¡). La expansión de Taylor de/¡+1 alrededor de x; es

r. = r. + h·f' + h2 /;" + h3 fj!" + !{Ji"" + (6.3 .1


J ¡+ 1 Jl ';/ i 2 l 6 1 24 1 •••

Si resolvemos la ecuación 6.3.1 para/;' obtenemos

í .' =
)1
/i+ 1 -
h
fi - ÍI¡'.'
2 1
+ h2 /;"' -
6 1 ••• (6.3.2

Si ignoramos todos los términos con excepción del primero del miembro derecho, obten-
dremos la aproximación de diferencia, misma que se mostró ya como la ecuación 6.2.1. Los
ténninos que se ignoran constituyen el error de truncado, representado por el término inicial
-{h/2)[['. Los demás ténninos desaparecen más rápidamente que el inicial cuando h disminuye.
La aproximación de diferencia hacia adelante, con el error de truncado incluido, se expresa
como

(6.3 .3

donde
Sección 6.3. Método de expasión de Taylor 235

El término E indica que el error es aproximadamente proporcional al intervalo de retícula h. El


error también es proporcional a la segunda derivada,/".
La aproximación de diferencia hacia atrás para la primera derivada empleando fi-1 y fi se
obtiene de fonna similar. La expansión de Taylor defi- 1 es

/'. =JI/'. - hif,.' + h2 I'-" - h3 I'.'" + ~ /'."" + (6.3.4)


Jl-1 1 2 Jt 6 Ji 24Ji "'

Si resolvemos la ecuación 6.3.4 paraj;' obtenemos la aproximación de diferencia hacia atrás,


que es

(6.3.5)

donde

E .. _ft I'.''
2J1

Podemos deducir la aproximación de diferencia central empleandofi+1 y fi-1 mediante las


expansiones de Taylor defi+1 y fi-1, que ya se presentaron como las ecuaciones 6.3. l y 6.3.4,
respectivamente. Si restamos la segunda de la primera, obtenemos

/'. /'.
Ji+l -Ji-1 - - 2hif,'i + 31 h3Ji1"" + .. . (6.3.6)

nde se ha eliminado automáticamente el términoj;". Al resolver para/¡', obtenemos

j;' =fi+121zfi-1 i h2j;'" + ... (6.3.7)

o el término de error incluido, la aproximación de diferencia se expresa como

"'=fi+1-fi-1 +E (6.3.8)
Ji 2h

de

E"" - h2 I'."'
6 Ji

Resulta interesante que, gracias a la cancelación del término/", el error de la aproximación


diferencia central es proporcional a h2, no a h. Al reducirse h, el error disminuye con mayor
idez que con las otras dos aproximaciones. ·
Como ya se explicó, una aproximación de diferencia de/;(p) requiere al menos p + 1 puntos
datos. Si se aumenta el número de puntos de datos, puede obtenerse una aproximación de
erencia más exacta. A fin de ilustrar esto, deduciremos una aproximación de diferencia para
236 Capítulo 6 Diferenciación numérica

/;' utilizando/¡,/;+1 y /;+2. Puesto que el número mínimo de puntos de datos para/' es dos,
tenemos un punto más del mínimo requerido. Las expansiones de/;+1 y fi+2 se escriben así:

f; +1 =/;1 + h·f.'
'Ji
+ h2
2 JiI"." + h3 h4 í."" + ...
6 Jií."' + 24Ji (6 .3.9)

2 3 4
f; +2 =[;1 + 2h·1'.'
'Ji
+ 4h /'." + 8h /'."' + l6h /'."" +
2 Ji 6 Ji 24 Ji ••• (6.3.10)

Con estas dos ecuaciones es posible cancelar los términos de la segunda derivada, de modo que
el término inicial de los errores de truncado es el término de la derivada de tercer orden. Por
otro lado, si se eliminaran los términos de la tercera derivada de las ecuaciones 6.3.9 y 6.3.10
en lugar de los de la segunda derivada, la aproximación de diferencia obtenida sería menos
exacta porque el término de error inicial sería de segundo orden en lugar de tercero.
Si multiplicamos Ja ecuación 6.3.9 por cuatro y Je restamos Ja ecuación 6.3. l O obtenemos

3
2
4/;+1 - /;+2 = 3/¡ + 2hf/ + ; + /;'" + ... (6.3.11 )

La resolución de Ja ecuación anterior para// produce

' = -/;+2 + 4/;+1 - 3/¡ E


f;. 2h + (6.3.12)

donde el término del error está dado por

E .. h2 f."'
3 Ji
La ecuación 6.3.12 es la aproximación de diferencia hacia adelante de tres puntos, igual a la
ecuación (E) del ejemplo 6.2. Su error es del mismo orden que el de Ja aproximación de
diferencia central.
Análogamente, la aproximación de diferencia hacia atrás de tres puntos puede deducirse
utilizando/;,/i-1 y fi-2:

¡;¡' = 3[; - 4/;-1 + fi-2 + E


2h (6.3.13)

donde
E ... h2 í!"
3 J•

Las aproximaciones de diferencia para la segunda derivada se deducen aplicando el mismo


principio. El principio básico consiste en eliminar la primera derivada y el mayor número
posible de derivadas de orden 2 o superior.
'.)e<:ción 6.3. Método de expasión de Taylor 237

Como ilustración, deduciremos la aproximación de diferencia para/;" en ténninos de/;+ 1,


• Yfi-1. Las expansiones de Taylor de/;+1 y fi-1 están dadas por las ecuaciones 6.3.1 y 6.3.4. Si
_umamos estas dos ecuaciones, obtenemos

f; +I +f¡i- 1 =:Ji+
2>r. h2p1 h4 /""" + .. .
Ji +12+Ji

. de forma equivalente,

2>r.i +f¡i- 1= h2r11


f; +¡-:J Ji
h4
+12+Ji
I""" + .. .

Entonces, si truncamos después del ténnino/" y reacomodamos los términos tendremos

(6.3.14)

La ecuación anterior es la aproximación de diferencia central para/", y es igual a la ecuación


D) del ejemplo 6.2. El error está representado por

Ji!..
E "' 12Jir""

Podemos deducir otra aproximación de diferencia paraf;" en términos de/;,/;-1 y fi- 2 (el
úmero mínimo de puntos de datos para p = 2 es 3). Si multiplicamos por 2 la expansión de
Taylor defi- 1 y la restamos de la defi-2, el resultado será

- f; + h2 Ji/"" - h3 Ji/"'" + ...


f;-2- 2'f;1-1--,

on

E"' hf;'"

La ecuación 6.3.15 es la aproximación de diferencia hacia atrás para f;", que ya se había
deducido en el ejemplo 6.1. El orden de su error de truncado es menor que el de la aproximación
de diferencia central dada por la ecuación 6.3.14. La mayor exactitud de la aproximación de
diferencia central es lo que predijimos en la sección 6.2 a partir del hecho de que la exactitud
de la interpolación de Lagrange es óptima en el centro.
Podemos obtener de forma similar aproximaciones de diferencia para derivadas superiores,
pero la deducción se hace cada vez más laboriosa al aumentar tanto el número de ténninos como
el orden de la derivada. Aquí es donde radica la utilidad de un programa de computadora que
238 Capítulo 6 Diferenciación numérica

encuentre automáticamente la aproximación de diferencia para un conjunto de datos dado; su


algoritmo se describirá en la sección 6.3.
En la tabla 6.1 se presentan las aproximaciones de diferencia de uso más frecuente.
TABLA 6.1 Aproximaciones de diferencia

Primera derivada
}~~· ~)Aproximaciones de diferencia hacia adelante:

,.-·~S,:1.,~
~~,~· ,,\
-,- ~
', ,
/;' =
/
fi+ 1 - fi + E E .. _ lh"!'
h > 2 'JI
, .. t I 1 Ci
+ 4f; 1 - 3~
(ftf' •'
~ ~.-~t
'• ' ··- · -
J; i
_;,
1-
f;!I = -fi
¿+ 2 ¿+
2h
J +E E
'
1 2
=-h
3 JI1'.'"
·-V'. ·-
\-'- ; ~. } t /\'!
1 ::-: •· ¡ __.
.,,...: 1 .~. ,,; !,.1 n = 2./i+3 - 9fi+2 - 18./i+ 1- 1lfi +E E .. _ lh31'.""
, ~!.t.~o' JI 6h ' 4 Ji
·:Quito"
----""'
(b) Aproximaciones de diferencia hacia atrás:

f! =fi-1-1 +E, E .. thf;"


/;I.' = 3fi - 4fi-1
2h
+fi-2 + E E ., lh2I'."'
' 3 Ji

/;.' = 1lfi - l 8./i- 16h


I
+ 9./i-2 - 2./i-3 E E .. lh3"·""
+ > 4 Ji

(c) Aproximaciones de diferencia centrales:


I'! =fi+1 -fi-1 +E E.,_ h2 I'!"
JI 2h ' 6JI

, = -./i+2 + 8./i+ 1 - 8./i-1 +fi-2 E E .. _1h4'f~v>


/; 12h + > 30 I

Segunda derivada
(d) Aproximaciones de diferencia hacia adelante:

¡;I!' =fi+2 - 2fi+1 + fi +E E"' -h"·"'


h2 ' 'Ji

¡;." = -/¡+3 + 4fi+2h2-


I
5/¡+1 + 2fi +E E .. llh2I'." "
> 12 Ji

(e) Aproximaciones de diferencia hacia atrás:

¡;." =fi- 2fi-1


h2
+fi-2 +E E .. hl'."'
' 'Ji
Sección 6.4. Algoritmos para automatizar la derivación 239

,,, = 2[;- 5f;+2 + 4fi+ 1 - f; + E E ,,. llh21'.""


Ji h2 ' 12 Ji

(t) Aproximaciones de diferencia centrales:

f;" =f;+1 -2fi


h2
+ fi-1 +E E,,. _1h2'!'"
' 12 Ji
f."= -f;-2 + 16[;+¡ - 30[; + 16fi-I -fi-2 +E E,,. _1h4r.(vi)
Ji l 2h 2 ' 90 J 1

Tercera derivada
(g) Aproximaciones de diferencia hacia adelante:

"" = f;+3 - 3f;+2 + 3f;+ 1 - f; +E E .. _ 1.h2t.""


Ji h3 ' 2 Ji
(h) Aproximaciones de diferencia hacia atrás:

(i) Aproximaciones de diferencia centrales:

f;" = f;+2 - 2/¡+ 1 + 2fi-1 - 2fi-2 + E E .. _ _!_h2r.(v)


2h3 ' 4 Ji

6.4 ALGORITMOS PARA AUTOMATIZAR LA DERIVACIÓN


El objetivo de esta sección es describir dos algoritmos que deducen automáticamente una
aproximación de diferencia empleando un conjunto dado de puntos de datos. El primero se
asa en la diferenciación de la fórmula de interpolación de Lagrange y el segundo se basa en
a expansión de Taylor.
Supongamos que se usan L puntos de datos y que se numeran así: i = ex, J3, .. ., A. como se
muestra en la figura 6.2. Suponemos que L ~ p + 1, donde pes el orden de la derivada. Las
abscisas de los puntos de datos son X¡ =ah, J3h, .. ., Ah, con i = ex, J3, .. ., A., donde h es una
constante dada. Si i = ex, J3, .. ., A. son enteros consecutivos, h se convierte en el tamaño del
intervalo entre dos puntos consecutivos. En general, i = ex, J3, ... tienen que estar en orden
ascendente pero no tienen que ser enteros.

6.4.1 Algoritmo 1
El algoritmo funciona fácilmente en MATLAB empleando shape_pw y polyder, que
describimos en la sección 4.6. La interpolación de Lagrange ajustada a los puntos de datos Xa,
.rp, .. ., XA. con valores funcionales correspondientes/a,/p, ../A. es
240 Capítulo 6 Diferenciación numérica

Puntos no equiespaciados:
Número total de puntos • L

X=O

i=a i=~ i=O i=A.

Ejemplo con 6 puntos equiespaciados:


(L=6)

X x_1 XQ x1 x2 x3
-2

i=-2 i=-1 i=O i=1 i=2 i=3

Figura 6.2 Ilustración de puntos de retícula

g(x) = 1.=a ,Lp, ... , l.. v;(x}fi (6.4.1)

donde v; es un polinomio de x dado por

- ._ n
v;(x) -
(x-x¡)
( .
·-
·)' for z - a, ~' ... , A. (6.4.2)
1-a, p, ..., l.. X1 - X1
j" I

La p-ésima derivada de g(x) se escribe así:

g(p)(x) =. n
1=a , p, ... ,I..
v<¡\x}fi (6.4.3)

Podemos obtener una fórmula de aproximación de diferencia asignando ax uno de los x; =ah,
~h, .. Ah en la ecuación 6.4.3. En la sección 4.6 se explica la evaluación de v~).
1

6.4.2 Algoritmo 2
La aproximación de diferencia para la p-ésima derivada de f (x) en ténninos de fa , fp , ..., j~
puede escribirse en Ja fonna:
Sección 6.4. Algoritmos para automatizar la derivación 241

f.(p) = aafa. + apfp + ... + aif>.. + E (6.4.4)


O hP
donde aa., ... , aA. son L coeficientes no determinados.fa.= f(xa.) a/A.= f{xA.) son ordenadas de
los datos que se van a utilizar y E es el error dado por

(6.4.5)

En la ecuación 6.4.5 ignoramos el segundo término si el primer coeficiente e¡ es distinto de


cero. Si e¡ es cero, el error estará representado por el segundo término.
El meollo del algoritmo consiste en sustituir las expansiones de Taylor de/¡ en la ecuación
6.4.4 y determinar los coeficientes no determinados a fin de minimizar el error o, lo que es
equivalente, hacer que el orden de E sea lo más alto posible.
Con objeto de simplificar la explicación subsecuente, supongamos p = 1, L = 3, a.= O,
~ = 1 y y = .2. Entonces, la ecuación 6.4.4 se convierte en

fó = ao[o + a t + aifz + E (6.4.6)

donde ao, a¡ y a2 son tres coeficientes no determinados y xo =O, x¡ = h y x2 = 2h son abscisas


e los puntos de datos. Si sustituimos en la ecuación 6.4.6 las expansiones de Taylor defi y Ji
alrededor de x = O obtenemos

I"' - ªº'fe
Jo-¡:¡o

+ E.![fc + hrf' + h2 I"" + h3 I""' + ]


h O O 2JO 6JO •••

2 3
+ a2[fc + 2h·'' + 4h ,,, + 8h ,,,, + ] +E
h O ':JO 2 JO 6 JO •••

bien, después de reorganizar los términos,

fó =fo[ao +a¡ + a2] *


+ fó [O + a¡ + 2a2]

+ /ó' [O + a 1 + 4a2] ~
~
2

+ /ó" [O+ a1 + 8a2]

+ /ó"' [O+ a¡ + l6a2] ~~


+ ... +E (6.4. 7)
242 Capítulo 6 Diferenciación numérica

La ecuación anterior tiene tres coeficientes no detenninados, que se pueden detenninar


imponiendo tres condiciones. A fin de minimizar el error, asignamos O, 1 y Oa los coeficientes
de/0 ,/ó y fó', respectivamente:

ao +a¡+ a2 =O
O+ a¡+ 2a2 = 1 (6.4.8)
O+ a¡+ 4a2 =O

Una vez resueltas las ecuaciones anteriores, los tres coeficientes no determinados son ao = -3/2,
a¡= 2 y a2 =-112.
Los términos de orden superior de la ecuación 6.4.7 que no desaparecen constituyen el
error, esto es,

E"' -fó"(O +a¡ + 8a2ff-/0"(0 +a¡+ l6a2~ + ... (6.4.9)

Si comparamos la ecuación 6.4.9 con la 6.4.5, tenemos que e¡ y c2 en esta última son
1
e¡ =- (a¡ + 8a2>6

1
c2 =-(a¡+ l6a2>2¡

que, al sustituir a¡= 2 y a2 = -112, dan

C¡ =-(2--)-=-
8 1 1
2 6 3
16 1 1
c2 = - (2 - - ) - = -
2 24 4

Puesto que el primer término de la ecuación 6.4.5 no es cero, ignoramos el segundo término y
escribimos el ténnino de error como

(6.4.10)

Si el primer término de la ecuación 6.4.5 se hace cero, el segundo término representará el error.
El resultado final de la presente deducción es

/ _ -3/o + 4fi -Ji (6.4.11)


fo- 2h +E

donde E está dado por la ecuación 6.4.10.


Sección 6.5. Aproximación de diferencia para derivadas parciales 243

En términos más generales, si utilizamos L puntos de datos podemos determinar los L


coeficientes no determinados de la ecuación 6.4.4. Así, el término de error se hace proporcional
al (L + 1)-ésimo término, o lo que es lo mismo, la L-ésima derivada, siempre que su coeficiente
no sea cero; si lo es, el orden del término de error aumentará en uno.
Este algoritmo funciona incluso cuando los índices de la retícula, ex, ~ •... no son enteros.
Esto significa que con este algoritmo puede deducirse la aproximación de diferencia en una
retícula no equiespaciada. El algoritmo se implementa en diff_fnd (véase FM 6-1 en la
sección 6. 7)

6.5 APROXIMACIÓN DE DIFERENCIA PARA DERIVADAS PARCIALES


Las fónnulas de aproximación de diferencia para derivadas parciales de funciones multidimen-
sionales son esencialmente iguales a las de diferenciación numérica de funciones unidimensio-
nales.
Consideremos una función bidimensional/(x, y). La aproximación de diferencia para la
derivada parcial con respecto ax, por ejemplo, puede deducirse fijando y en un valor constante
yo y considerando f (x, yo) como una función unidimensional. Por tanto, las aproximaciones de
diferencia hacia adelante, central y hacia atrás para estas derivadas parciales se pueden escribir,
respectivamente, como
r f(xo + ilx, yo) - f(xo, yo)
JX"'
ilx
r .,. f(xo + ilx, yo) - f(xo - Ax, yo)
JX 2Llx (6.5.1)

r f(xo, yo) - f(xo, - ilx, yo)


JX"'
ilx

donde fx es la derivada parcial de f con respecto ax, o lo que es lo mismo,

r
JX
=El
OX (6.5.2)

Las aproximaciones de diferencia central para las segundas derivadas def(x,y) en (xo,yo)
están ilustradas por:
r f(xo + ilx, yo) - 2/(xo, yo) + f(xo - ilx, yo)
JXX "' '-----"------....---~'-----"-
iÍ.X
¡; .., f(xo, yo+ Ay) - ~f(xo, yo) + f(xo, yo - Ay)
(6.5.3)
Y.Y A
h "'f(xo + ilx, yo + Ay) - f (xo, - ilx, yo + Ay)
xy ilxAy
+ - f(xo + ilx, yo - Ay) + f(xo - ilx, yo - Ay)
ilxAy
244 Capítulo 6 Diferenciación numérica

dondefxx,fYy y fxy son notaciones abreviadas para

respectivamente.

6.6 EVALUACIÓN NUMÉRICA DE DERIVADAS DE ORDEN SUPERIOR


Las aproximaciones de diferencia que analizamos en las secciones anteriores resultan útiles
para evaluar derivadas de orden bajo, hasta tres o cuatro cuando más. Al aumentar el orden de
la derivada, Ja exactitud de las aproximaciones de diferencia se deteriora rápidamente debido
a los errores tanto de truncado como de redondeo.
Para una derivada de orden alto se recomienda la integral de Cauchy, que funciona con
exactitud para derivadas tanto de orden bajo como de orden muy alto. La integral de Cauchy
está dada por

¡(k)(zo) = k! .
2rri
r
le (z -
f( z )
zo)k+t
dz (6.6.1)

donde z es una variable compleja. La integral sigue una curva cerrada C en el plano complejo,
en el cualf(z) es analítica y zo está contenido. La integración a lo largo de C se efectúa en Ja
dirección contraria al giro de las manecillas del reloj. La integración en el plano complejo es
fácil con MA TLAB. La fonna de la curva Ces arbitraria, así que la forma más conveniente
es un círculo.
El círculo centrado en zo con radio r en el plano complejo es

z = reine + zo, o ~ e <27t (6.6.2)

donde e es el ángulo. Si sustituimos Ja ecuación 6.6.2 en la 6.6.1 obtenemos

k t lo27r f (re i1rB + zo) d()


¡(k)( zo) = -'.
2n o ei(k+l)7rB (6.6.3)

Aplicando la regla trapezoidal, una integración numérica de la ecuación 6.6.3 es

N
¿ f (reine. + zo) (6.6.4)
ei(k+ l)n6.
n=I

donde ~e =27t/N y N es el número de intervalos elegido para la integración numérica a lo largo


del círculo. La ecuación 6.6.4 puede evaluarse con cauchy_ d, cuya sintaxis es

y = Cauchy_d('nombre_ f', zO, k)


Figura LC-1
Barras de color

Figura LC-2
Fractal
Figura LC-3 Figura LC-4
Mohius Trilogy por Ralph Williams Closet Loop Dr{fter por Ralph Williams

Figura LC-5 - - - - - - - - - - - Figura LC-6


Tres discos Tres discos después de procesamiento de imágenes

FiguraLC-7 _ _ _ _ _ _ _ _ _ _ _ _ __ Figura LC-8 - - - - - - - - - - - - -


Escena de Mystery (A) Escena de Mystery (B)
FiguraLC-9
Rotor de ventilador

Figura LC-10 - - - - - - - - - - - - - -- -- - - - - - - - - - - - - - -
Tubos espirales
: :=: •:·:: :::·=..=· .;:: : ;::·
i 1:.:•••••••• ••.:········..!!!! .• ••••
:. . = = .• =· ...
·: : : :. =· .
::. i ~ :: e .:5. •: : :n •
i: ===• =.=.· . :;:::::::::::•.:=' .;·:•• :•
!!!!:.
:= !:...•··..• •.
·.··:• ·.• =··• ..• •
1 ·==::;;.......·:. • !:
•..::===···.... ·. :.· .•.···=:. :..:.·.!. • ••
\.'\. :r=· .:::::..:..::s;:....··:.·:==
. . . 11 ' : • • :• • ':.. •• ..

Figura LP-11
Diversas gráficas de un flujo de cavidad con impulso
Sección 6.6. Evaluación numérica de derivadas de orden superior 245

donde nombre_ f es el nombre de la función o del archivo M que define la función por
diferenciar, zO es zo y k es el orden de la derivada. Los valores de r y N se escogen por omisión.
Probaremos primero cauchy _ d para las derivadas primera a décimoquinta de sen(x) para
x =O con el siguiente guión:

for k=1:15
fd = Cauchy d('sin', O, k);
fprintf(' k-= %2d, real(fd) =%12.5e, imag(fd) =%12.5e\n', ...
k, real (fd), imag (fd))
end

Los resultados son:

k 1, real (fd) 1.00000e+OO, imag(fd) 2.29794e-18


k 21 real(fd) -2.20268e-16, imag (fd) 6.81320e-17
k 31 real ( fd) -1.00000e+OO, imag (fd) 1.32406e-16
k 41 real ( fd) -4.62064e-16, imag (fd) - 1. 07 57 8e-15
k 5, real(fd) 1.00000e+OO, imag (fd) -3.36210e-15
k 6, real (fd) -4 • 88113e-14 t imag (fd) 6.23025e-16
k 7t real (fd) -1.00000e+OO, imag (fd) 4.09464e-13
k 8, real(fd) -2.89743e-12, imag(fd) 5. 30509e-13
k 9, real ( fd) 1.00000e+OO, imag (fd) -2 .77223e-12
k =10, real (fd) -1.41163e - 10, imag (fd) 1.83930e-10
k =11, real (fd) -1.00000e+OO, imag ( fd) 3.93545e-09
k =12, real(fd) 3.88622e-09, imag (fd) -1.12962e-08
k =13, real ( fd) l.OOOOOe+OO, imag (fd) - 1.52099e-07
k =14, real ( fd) -4 • 06359e-07 I imag (fd) 1.61043e-06
k =15, real (fd) -9.99906e-Ol, imag (fd) -3.76529e-03

donde real ( fd) e imag ( fd) son las partes real e imaginaria de la derivada, respectivamente;
la segunda debe ser cero si el error del cálculo es cero. Para k = 1, la derivada calculada es
correcta. Aunque la parte imaginaria calculada no es cero, representa un error de redondeo
insignificante. Para el orden 2, el valor exacto de la derivada de la función seno es cero. El valor
calculado tiene un error de redondeo aceptable. Si continuamos nuestra evaluación de fonna
similar, veremos que los valores calculados de las derivadas son buenos hasta el orden 13,
aunque más allá de este orden los errores al parecer aumentan rápidamente al aumentar el orden
de la derivada.
La exactitud de la integral de Cauchy depende de la r elegida y del número de puntos (en
la regla trapezoidal), valores ambos que están fijos en cauchy _d. Se recomienda al lector
investigar este efecto, sobre todo si se necesita calcular una derivada de muy alto orden.
También debemos recordar que la integral de Cauchy no es válida si hay una singularidad
dentro del círculo.
246 Capítulo 6 Diferenciación numérica

Ejemplo 6.4

Las expansiones de Taylor de tan(x) alrededor de x =a se escriben así:

h2 h3 hn
tan(x) =tan (a)+ htan' (a)+ 2 tan" (a)+ 6 tan"'(a) + ... n! tan(n) (a)+ ...

La serie de Taylor truncada

x2 x3 xk (k)
gk (x) = tan(a) + xtan'(a) + 2 tan" (a)+ 6 tan"' (a)+ ... k! tan (a)

es un polinomio de Taylor de orden k. A fin de investigar la convergencia de los


polinomios de Taylor, haga a= Oy grafique la serie para k = 4, 6 y 8, para el intervalo
de-n/2 <x <n/2. Grafique también e(x) = tan(x)- gk(x).

0.5

0.4

:g 0.3
j I
I
1 0.2 I
I
I
)('
k=4 ·' M
~ 0.1 , '
e o
·o
·¡¡;

!·0.1

~ -0.2
g
w -0.3
-0.4

-0.50 0.2 0.4 0.6 0.8 1.2 1.4 1.6


X

Figura 6.3 Error de una serie de Taylor truncada


Sección 6.7. Archivos M 247

Solución
Utilizamos cauchy_ d para encontrar las derivadas de tan(x) para x =O:

Orden de Derivada
la derivada para x=O
o o
1 1
2 o
3 2
4 o
5 16
6 o
7 272
8 o
9 7936
10 o

La figura 6.3 ilustra el error de la serie de Taylor truncada con k = 4, 6 y 8.

6.7 ARCHIVOS M
FM 6-1 Localizador de diferencia de aproximación
Objetivo: encontrar una fórmula de aproximación de diferencia.
Sintaxis: f i f f fnd
El programa solicita todos los datos de entrada.

flff fnd.m

% Localizador de diferencia de aproximación


while 1
::lear, clg, ele
fprintf('\n===========================================\n');
fprintf('Localizador de diferencia de aproximación \n');
while 1
km= input('** ¿Número de puntos?');
if km>l break; end
fprintf(' La entrada no es válida: Repita.\n')
end
%
while 1
fprintf('Introduzca los indices de puntos en forma de')
fprintf('vector de fila, como [x x ... x) '); el=input(' ');
if length(el) ==km; break; end
fprintf(' El núm. de puntos no coincide con los indices')
248 Capítulo 6 Diferenciación numérica

fprintf(' Introduzca otra vez sus índices.')


end
kdr =input('** ¿Orden del esquema de diferencia por deducir?');
z = 1.0; for i = l:kdr;z = z*i; end
for k = l:km+2; a(k, :) =el.· (k-1); end
M = a(l:km, l:km);
rs = zeros (km,l); rs (kdr+l) = z;
% kmp2 = km + 2;
y M• (-1) *rs;
c = a*y;
u= abs(y);
for k = l:km+2
if k<=km; if u(k)<0.000001, u(k) = lOOO;end; en~
if ( abs(c(k))0.00000001) c(k) = O;end
end
f min = min (u) ;
- cf = y/f min;
fprintf('\nEsquema de Diferencia:\n');
for k = l:km
finv = 1.0/f min;
fprintf(' +(%8.Sf/( %8.Sf hA%1.0f))*', cf(k), finv, kdr)
fprintf('f( %3.lfh) \n', el(k));
end
fprintf('\nTérmino de error\n');
dd = 1.0;
for k = l:km
dd = dd*k;
end
for k = km+l:km+2,
cm = -c (k) ;
%krnl = k - 1;
nh = k-1 - kdr;
if (k == km+ 1 & cm -= O)
fprintf(' (%7.3f/%7.3f)h•%1.of f', cm, dd, nh);
for (i=l:k-1) fprintf( ' ' ' ) ;
end
break
end
if (k == km + 2),
fprintf('\n+(%7.3f/%7.3f)h.%1.0f f' ,cm,dd,nh);
for i=l:k-1
fpr intf ( ' ' ' ) ;
end
end
dd = dd*k;
end
fprintf('\n============================================')
kont =input( 'Teclee 1 para continuar, O para terminar:');
if kont == O, break; end
end
Problemas 249

FM 6-2: Diferenciación por Ja integra) de Cauchy


Objetivo: Calcular los valores de las derivadas de una función.
Sintaxis: Ca uchy d ( ' nombre f ' , x, k)
nombre_ E nombre de lafunción por diferenciar
x: la abscisa de la función
k: el orden de la derivada

Cauchy_d.m
:unction f d = Cauchy d(f name, zO, k)
.·=2480 + k*10; r=l;
dth = 2*pi/N;
~h=O:dth:2*pi-dth;
z = r*exp(i*th) + zO;
~f=l; for m=l:k, kf=kf*m; end
: sum = dth*sum(feval(f name, z) ./exp(i*k*th));
:-d kf/(2*pi)*f sum/r"k;

FM 6-3 Todas Jas derivadas de una interpolación polinómica


Objetivo: calcular todas las derivadas de una interpolación polinómica.
Sintaxis: poly drv (xd, yd, a)
xd: las abscisas de los puntos de datos ajustados por interpolación
yd: las ordenadas de los puntos de datos ajustados por interpolación
a: x=a donde se evaluarán las derivadas

poly _drv.m
function der = poly drv(xd,yd,a)
m = length(xd)-1;
d = polyfit(xd-a, yd, m);
e = d(m:-1:1);
fact(l)=l; far i=2:m; fact(i)=i*fact(i-1) ;end
der = c.*fact;

PROBLEMAS
(6.J) Se da una tabla de puntos de datos para la función y(x):
j x;m y;m
o o.o 0.0000
1 0.2 8.6964
2 0.4 10.6800
3 0.6 8.7440
4 0.8 4.7727
s 1.0 0.0000
250 Capítulo 6 Diferenciación numérica

Evalúe todas las derivadas que pueda en x =O y x = 0.5.


(6.2) La distribución de velocidad de un fluido cerca de una superficie plana está dada por

i y;mm u;mm
o o 0.0000
1 2 9.8853
2 4 15.4917
3 6 18.2075
4 8 19.0210

Evalúe todas las derivadas de u(y) que pueda en y= O.


(6.3) Evalúe la primera derivada de y(x) = sen(x) para x = 1 utilizando los tres métodos
distintos:
(a) y'(l)-=[y(I +h)-y(l)]/h
(b) y'(l)-=[y(l)-y(l-h)]/h
(c) y'(I)"' [y(I + h)-y(I - h)]/h
Evalúe los errores con h = 0.1, 0.05, O.O 1, 0.005 y 0.001 comparando con los valores
exactos.
(6.4) Calcule df(x)ldx, donde/(x) =IX, para x = 1, utilizando las aproximaciones de diferencia
hacia adelante, hacia atrás y central con h = 0.1, 0.05 y 0.025. Evalúe el error de cada
resultado (i) por comparación con el valor exacto y (ii) utilizando el término de error que se
muestra en la tabla 6.1, es decir, -( 1/2)hf", ( 1/2)hf" y -( 1/6)h 2/"', respectivamente.
(6.5) Puede derivarse una fónnula de aproximación de diferencia diferenciando una fórmula de
interpolación de Lagrange, como se explicó en la sección 6.2. Suponga que tenemos/-2,/-1,
fo con un intervalo equiespaciado h. Elabore un guión en MA TLAB que encuentre los
coeficientes en la aproximación de diferencia. Suponga que el tamaño de intervalo entre dos
puntos consecutivos es igual a h. (Cada término de la interpolación de Lagrange puede
transformarse en una forma de potencias con el comando polyf i t. Después, encuentre los
coeficientes de la derivada del polinomio.)
(6.6) Deduzca una aproximación de diferencia y el término de error para// en términos de (i).fi-1
y /;+2. (ii) .fi-1, f¡ y .fi+2 y (iii) .fi-2 y fi+2. Suponga que los puntos de retícula están equies-
paciados.
(6.7) Deduzca una aproximación de diferencia y el ténnino de error para//' en términos defi,.fi-1
Y.fi-2 (aproximación de diferencia hacia atrás de tres puntos para/!').
(6.8) Repita el problema 6.4 con las aproximaciones de diferencia hacia adelante y hacia atrás con
exactitud de segundo orden:
(a) .f'(I)"' [-/(1+2h) + 4f(I + h)- 3/(1)]/2h
(b) J'(I)-= Pf(l)-4((1-h) +f(l -2h)]l2h
Problemas 251

y evalúe los errores mediante una comparación con el valor exacto de.f'(l).
(6.9) Calcule la primera derivada .f'(l) para f(x) = sen(x) utilizando las aproximaciones de
diferencia hacia adelante y hacia atrás con exactitud de segundo orden utilizadas en el
problema 6.8 para h = 0.1, 0.05, 0.025 y 0.001. Después, evalúe el error de cada aproxima-
ción numérica comparándola con el valor exacto. Grafique el resultado. Si observa un
incremento del error al reducirse h, explique la razón.
(6.10) Se quiere deducir una aproximación de diferencia paraf'" en ténninos def-2,.f-1,.fo,.f1 y f2
diferenciando la fónnula de interpolación de Lagrange. Escriba un guión en MA TLAB que
realice esta tarea. (Cada término de la interpolación de Lagrange puede transformarse a una
forma de potencias con polyf i t. Después, encuentre los coeficientes de la derivada del
polinomio.)
(6.11) Evalúe la segunda derivada de tan(x) en x = 1 con Ja fónnula de diferencia central empleando
h = 0.1, 0.05 y 0.02. Evalúe el error mediante comparación con el valor exacto y demuestre
que el error es proporcional a h2.
(6.12) (a) Conociendo el ténnino de error de

f;' .. (fi- fi-1)/h

estime el término de error para

f¡' .. (fi - fi-2)12h

(b) La exactitud de una aproximación de diferencia puede mejorarse con una combinación
lineal de dos aproximaciones de diferencia con objeto de eliminar el error de truncado de
orden más bajo de cada aproximación. Detennine Ja siguiente aproximación tal que se
optimice la exactitud:

.f¡' .. o.(fi-.fi-1)/h + (1 - o.) (fi-.fi-2)/2h

(6.13) Determine el valor óptimo de o. para Ja siguiente ecuación:

2
ff' "'o.(fi+I - 2/¡ +.fi-1)/h2 + (1 - o.) ([;+2- 4fi +.fi-2)/(2h)

Sugerencia: Elimine el error inicial tanto de

2
([;+¡ - 2/¡ +fi- 1)/h
como de
2
([;+2 - 4fi + fi-2)/(2h)

(6.14) Deduzca las aproximaciones de diferencia más exactas para/¡' y.f¡'' en términos defi-2,fi-1 ,
.fi.. fi+¡ Y.fi+2. Suponga que los puntos de datos están equiespaciados.
252 Capítulo 6 Diferenciación numérica

(6.15) Aplicando la expansión de Taylor, deduzca las aproximaciones de diferencia paraf¡' y JI' en
ténninos def¡,/¡+1,/¡+2 y /¡+3 con la mayor exactitud posible para cada una. Suponga que el
espaciado de la retícula es constante.
(6.16) Una tabla de función está dada por

X f
-0.I 4.157
o 4.020
0.2 4.441

(a) Deduzca la mejor aproximación de diferencia para calcular/' (O) con los datos dados
aquí.
(b) ¿Cuál es el ténnino de error para la aproximación de diferencia?
(c) Calcule/' (O) por la fónnula que dedujo.
(6.17) Evalúe el error de truncado de la siguiente fórmula de diferencia:

f'(x) ""(-/¡+3 + 9f¡+¡ - 8f¡)/6h

(6.18) Dos aproximaciones de diferencia para la cuarta derivada están dados por

f¡"" =f¡+4--4f¡+3+6fi+2--4[;+¡+f¡ + O(h)


l h4

//"' = {¡+2 - 4{¡+ 1 + 6{¡- 4(¡_¡ +{¡-2 + O(h2)


l h4

Utilice la expansión de Taylor para encontrar los ténninos de error.


(6.19) La distribución de velocidades de un fluido cerca de una superficie plana está dada por

j y;(m) u; (mis)
o O.O o.o
1 0.001 0.4171
2 0.003 0.9080
3 0.006 1.6180

donde y es la distancia desde la superficie y u es la velocidad. Suponiendo que el flujo es


laminar y queµ = 0.001 Ns/m 2, calcule el esfuerzo de corte eny =O utilizando datos en los
siguientes puntos:
(i) j =o y 1
(ii) i =O, 1 y 2
(6.20) A continuación se da tabla de función def(x,y):
0 roblemas 253

ylx O.O 0.5 1.0 1.5 2.0


O.O 0.0775 0.1573 0.2412 0.3309 0.4274
0.5 0.1528 0.3104 0.4767 0.6552 0.8478
1.0 0.2235 0.4547 0.7002 0.9653 1.2533
1.5 0.2866 0.5846 0.9040 1.2525 1.6348

(i) Evalúe a¡ /ay en x = 1.0 y y= O empleando la aproximación de diferencia hacia


adelante con un error de orden h2 donde h = 0.5.
(ii) Evalúe a 2¡ /ax 2 en X= 1.0 y y= 1.0 empleando la aproximación de diferencia
central con un error de orden h 2 donde h = 0.5.
(iii) Evalúe a2¡ 1axay en x =O y y= O empleando la aproximación de diferencia hacia
adelante con un error de orden h2 donde h = 0.5.
Raíces de ecuaciones no lineales

Las soluciones de una ecuación escalar, f (x) = O, se llaman ceros o raíces de f (x). En esta
sección estudiaremos los métodos, como el gráfico, el de la bisectriz, el de iteración de Newton,
el de la secante y el de la sustitución sucesiva, para obtener las raíces reales de ecuaciones no
lineales. Si/(x) es un polinomio, podemos utilizar roots, que se explicó en el capítulo 4, pero
incluso en este caso los métodos descritos en este capítulo a menudo resultan útiles cuando se
desea una exactitud muy elevada.
También estudiaremos la aplicación de la sustitución sucesiva y la iteración de Newton a
las ecuaciones simultáneas no lineales.

7.1 MÉTODO GRÁFICO


Supongamos que deseamos encontrar una raíz positiva de

f(x) =O (7.1.1)

donde

f(x) = x sen(l/x) - 0.2 exp(-x) (7.1.2)

Si le pedimos a un matemático que encuentre la solución inmediatamente, tal vez estudiará


la ecuación durante unos momentos. Después de percatarse de que, al aproximarse x a O desde
el lado positivo de x, sen(l/x) oscila con frecuencia creciente y se vuelve singular en x =O, el
matemático comenzará a bosquejar x sen(l/x) y 0.2 exp(-x). Después de algunos ensayos,
dibujará una gráfica clara, incluso si lo hace a mano en una hoja de papel en blanco. De la
figura, el matemático deducirá que sólo hay una raíz, misma que se encuentra cerca de 0.4.
Después de esto, el matemático tal vez utilice un programa de computadora para encontrar
un valor más exacto; sin embargo, la parte más crucial de la solución se logró con el método
gráfico. Sabiendo el comportamiento de la función, el número de raíces y su valor aproximado,
el resto puede hacerse fácilmente con una computadora, o incluso con una calculadora de
bolsillo.

254
Sección 7.1. Método gráfico 255

0.8
y= x.*sin(x."(-1))

0.6

0.4

y= 0.2*exp(-x)

·0.4 ' - - - - ' - - - ' - - - - - ' - - - ' - - - ' - - - ' - - - ' - - - J _ _ - ' - - - - '
o 0.2 0.4 0.6 0.8 1.2 1.4 1.6 1.8 2

Figura 7.1 Trazado de dos funciones

La estrategia del matemático es exactamente la que seguiremos con los gráficos de


MATLAB. De hecho, podemos graficar fácilmentex sen(l/x) y 0.2 exp(-x) como se ilustra en
figura 7.1. Como alternativa, podemos graficardirectamente/(x) =x sen(l/x)-0.2 exp(-x),
mo en la figura 7.2. Las figuras indican que la raíz es aproximadamente 0.38. También
os obtener un valor más exacto con el método gráfico si amplificamos la gráfica; sin
embargo, sería más eficiente aplicar uno de los métodos que analizaremos en las siguientes
secciones.

Ejemplo 7.1
Las frecuencias de vibración naturales de una viga uniforme sujeta en un extremo es
la solución de la siguiente ecuación:

cos(x) cosh(x) + 1 =O (A)

donde
X pro 2L/EJ
L = longitud de la viga (m)
(1) frecuencia (s- 1)
El = rigidez ante la flexión (Nm 2)
p = densidad del material de la viga (kg/m 3)
256 Capítulo 7 Raíces de ecuaciones no lineales

0.8

0.6

0.4
y= x.*sin(x.A(-1))-0.2*exp(-x)

0.2 0.4 0.6 0.8 1.2 1.4 1.6 1.8 2


X

Figura 7.2 Trazado de la función combinada

Detennine valores aproximados de las tres raíces positivas más bajas utilizando el
método gráfico.

Solución
Primero escribimos

f (x) = cos(x) cosh(x) + 1 (B)

Como no sabemos mucho acerca de la función, primero la graficamos sin límites de y


para O ~ x ~ 20. La curva trazada se muestra en la figura 7 .3 (en el listado 7 .1 se da el
guión que produce esta gráfica). Esta figura nos dice que una raíz es aproximadamente
x = 17.5, pero que también es posible que existan otras raíces en O~ x < 15.

Listado 7.1
clg; clear
X= 0:0.1:20;
y = cos (x) . *cosh
(x) + 1;
plot(x,y, x, zeros(x));
xlabel('x'); ylabel('y = cos(x)*cosh(x)+l')
Sección 7.1 . Método gráfico 257

12• 107

10

I
je
"~4
...
11

·2o 5 10 15 20
X

Figura 7.3 Trazado de y = cos(x)cosh(x) + 1

20

15

10

~ 5

j o
E
§
... ·5
11

·10

·15

-200 5 10 15 20
X

Figura 7.4 Gráfica amplificada de y= cos(x)cosh(x) + 1

Sin borrar la figura trazada por el guión anterior, podemos modificar los límites de la
gráficaconelcomandoaxis.Porejemplo,axis( [O 20 -10 20)) cambialagráficaalaque
se muestra en Ja figura 7.4.
La figura 7.4 nos dice que las tres raíces positivas más pequeñas son x = 1.8, 4.6 y 7.8,
aproximadamente.
258 Capítulo 7 Raíces de ecuaciones no lineales

Como es evidente por el ejemplo que acabamos de describir, el método gráfico no carece
de dificultades ni peligros. Un problema es que en algunos casos es probable que una gráfica
tenga una representación muy deficiente. Por ejemplo, la calidad de una gráfica disminuye
considerablemente en las inmediaciones de una singularidad. Si no tenemos cuidado al trazar
una gráfica, podrían quedar ocultas características especiales, como puntos singulares, y en
ocasiones confundirse con raíces. Si se sospecha que existe una singularidad, amplifique la
gráfica y determine si la función es realmente singular. Como ejemplo adicional, si se grafica
una función con intervalos equiespaciados, es posible que no se capture una oscilación rápida
y que la curva trazada difiera significativamente de la función verdadera. Por tanto, es
aconsejable graficar la función varias veces con diferentes amplificaciones y focos hasta
entenderla bien.

7.2 MÉTODO DE LA BISECTRIZ


El método de la bisectriz es un método numérico sencillo pero muy versátil para encontrar una
raíz real en un intervalo dado en el que se sabe que existe una raíz. Su singular ventaja consiste
en que funciona incluso con funciones no analíticas; sin embargo, sólo debe utilizarse e
método después de un análisis gráfico.
Supongamos que hay una raíz def(x) =O en un intervalo entre x =a y x =e, denotado por
[a, e] o, de fonna equivalente, por a~ x ~c. El método de la bisectriz se basa en el hecho de
que, cuando un intervalo [a, e] tiene una raíz, el signo de y(x) en los dos extremos es distinto
o sea,f(a)f(c) <O (véase la figura 7.5). El primer paso de este método consiste en bisecar e
intervalo [a, e] en dos mitades: [a, b] y [b, e], donde b =(a+ c)/2 (véase la marca 1 en la
figura 7.5). Si verificamos los signos de f(a)f(b) y f(b)f(c), sabremos en qué mitad de
intervalo se encuentra la raíz. De hecho, sif(a)f(b) ~ O, sabremos que el intervalo [a, b].
que incluye x =a y x = b, contiene a la raíz; de lo contrario, la raíz estará en el otro intervalo,
[b, e]. A continuación, bisecamos de nuevo el intervalo que contiene a la raíz. Al repetir este
procedimiento, el tamaño del intervalo que contiene a la raíz se hará cada vez más pequeño.
En cada paso se toma el punto medio del intervalo como la aproximación más actualizada a la
raíz. La iteración se detiene cuando el tamaño de la mitad del intervalo es menor que una
tolerancia dada.
El tamaño del intervalo después de n pasos de iteración es

co-ao
(7.2.1)
211
donde ao y co son valores iniciales a a y e, de modo que el numerador es el tamaño de intervalo
inicial. La ecuación 7.2.1 también representa el máximo error que puede haber cuando se
aproxima la raíz con el n-ésimo punto medio. Por tanto, si la tolerancia del error es T, el número
de pasos de iteración necesarios es el entero n más pequeño que satisface

(7.2.2)

o, de fonna equivalente,
Sección 7.2. Método de la bisectriz 259

Método de la bisectriz
20
f(b)

Solución final
10

o
3 L
X=8 =C

~-10

·20

-30

-400
2 3 4 5 6 7

Figura 7.5 Método de la bisectriz (graficado con bisec_g)

log[~)
n ~ log(2) (7.2.3)

nde Tes la tolerancia. Por ejemplo, si co- ao = 1 y T = 0.0001, entonces n = 14.


Podemos usar dos funciones, bi sec _g y bi sec_ n, para cálculos de bisección. La primera
uestra gráficamente el avance de la iteración de bisección; en la figura 7 .5 se ilustra la gráfica
al que se obtiene. La segunda función no traza gráficas, pero es más rápida.
La sintaxis de bisec_g es la siguiente:
bisec_g('nombre_f', a, e, xmin, xmax, n_puntos)
nde nombre f es el nombre de la función que define la ecuación por resolver, a y e son los
tremos del intervalo inicial, xmin y xmax son los valores mínimo y máximo de x en la gráfica,
. ::_puntos es el número de puntos que se usarán para graficar la función. La tolerancia es
= 1o--O por omisión.
La sintaxis de bi sec n es
bisec_n('nombre_f', a, e)
260 Capítulo 7 Raíces de ecuaciones no lineales

Ejemplo 7.2

Encuentre la intersección de estas dos funciones:

y=./x2 +1
y= tan(x), O< x < 7t/2

Solución
El problema equivale a encontrar el cero de

f= ../ x2 + 1 -tan(x), O<x < 7t/2 (A)

Si graficamos la función, veremos que la raíz es aproximadamentex = 0.9. Para poder


utilizar bisec_n (o bisec_g), escribimos un archivo M de función que defina la
ecuación (A):
function f = fun ex2(x)
f = sqrt(l+x.·2)- - tan(x);

Luego, utilizamos bi sec_ n así:


bisec_n('fun_ex2', 0.8, 1.0)

La salida es:
Método de la bisectriz :
It. a b c f (a) f (b) f (c)
1 0.800000 0.900000 1.000000 0.250986 0.085204 - 0.143194
2 0.900000 0.950000 1 . 000000 0.085204 -0.019071 -0.143194
3 0.900000 0.925000 0.950000 0.085204 0.035236 -0.019071
4 0.925000 0.937500 0.950000 0.035236 0.008660 -0.019071
5 0.937500 0.943750 0.950000 0.008660 -0.005056 -0.019071
6 0.937500 0.940625 0.943750 0.008660 0.001838 - 0.005056
7 0.940625 0.942187 0.943750 0.001838 -0.001600 -0.005056
8 0.940625 0.941406 0.942187 0.001838 0.000122 -Q.001600
9 0.941406 0 . 941797 0.942187 0.000122 -0.000738 -0 . 001600
10 0.941406 0.941602 0.941797 0.000122 -0.000308 -0.000738
11 0 . 941406 0.941504 0.941602 0.000122 -0 . 000093 -0.000308
12 0.941406 0.941455 0.941504 0.000122 0.000014 -0.000093
13 0.941455 0.941479 0 . 941504 0.000014 -0.000040 -0.000093
14 0.941455 0.941467 0 . 941479 0.000014 -0.000013 -0.000040
15 0.941455 0.941461 0.941467 0.000014 0.000001 - 0.000013
16 0.941461 0.941464 0.941467 0.000001 -0.000006 -0.000013
17 0.941461 0.941463 0 . 941464 0 . 000001 -0.000003 - 0.000006
18 0.941461 0.941462 0.941463 0.000001 -0.000001 -0.000003
19 0.941461 0.941462 0.941462 0.000001 0.000000 -0.000001
Se satisface la tolerancia.
Resultado final: Raiz = 0.941462
Sección 7.3. Iteración de Newton 261

7.3 ITERACIÓN DE NEWTON


La iteración de Newton es un método iterativo para encontrar la raíz de una ecuación no lineal.
Puede aplicarse en el dominio complejo para encontrar una raíz compleja, y también puede
extenderse a ecuaciones simultáneas no lineales, como se explica detalladamente en la sección 7.6.

Iteración de Newton

=10
Solución final
10

--10
"
;;:-

-20

-30

1=11

Figura 7.6 Iteración de Newton

La iteración de Newton se deduce de la expansión de Taylor. Supongamos que el problema


consiste en encontrar una raíz def(x) =O. La expansión de Taylor truncada de primer orden
def(x) alrededor de una estimación inicial, xo, se escribe así:

f (x) == f (xo) +f'(xo) (x - xo) (7.3.1)

que se considera como una aproximación de f(x). Si igualamos la ecuación 7.3.1 a cero,
obtenemos la siguiente aproximación:

.&J1l
x¡ = xo - f'(xo)

Repetimos el mismo proceso con


- - - f(x,,- 1) (7.3.2)
.X,, - .X.11- I - f'( .x,,_¡
. )
262 Capítulo 7 Raíces de ecuaciones no lineales

El algoritmo se ilustra gráficamente en la figura 7.6. Para el valor inicialxo, se traza la línea
que pasa tangencialmente por (xo,Jo) . La intersección de la línea tangencial con el eje x es x ¡.
A continuación, se traza la línea que pasa tangencialmente por (x1,Ji). Este procedimiento se
repite utilizando el valor más actualizado como estimación para el siguiente ciclo de iteración.
La deducción de la primera derivada de una función dada podría ser laboriosa o incluso
1
imposible. En un caso así, podría evaluarseJ (x) de la ecuación 7.3.2 con una aproximación de
1
diferencia en lugar de analíticamente. Por ejemplo, podemos aproximarJ (X11-1) con

1 _ f(Xn-l + h) - [(X11-l)
J 11- l - h (7.3.3

o bien
1 _J(Xn- 1)-J(Xn- I - h)
J 11- l - h (7.3.4

donde h es un valor pequeño (como h = 0.001 para la generalidad de los ejercicios). Las
ecuaciones 7.3.3 y 7.3.4 son las aproximaciones de diferencia hacia adelante y hacia atrás,
respectivamente. Errores pequeños en la aproximación de diferencia no tienen un efecto
perceptible en la rapidez de convergencia de la iteración de Newton. La exactitud del resultado
final no se ve afectada por el error de una aproximación de diferencia; sin embargo, en los casos
en que hay una singularidad cerca de la raíz hay que tener mucho cuidado al utilizar la
aproximación de diferencia.

Ejemplo 7.3

Deduzca un esquema iterativo para encontrar la raíz cúbica de un número con base en
la iteración de Newton. Encuentre la raíz cúbica de a = 155 con el esquema que
deduzca.

Solución
El problema consiste en encontrar el cero de

J(x) =x3 -a
La iteración de Newton se escribe así:

2 a
= - x11+p
3 XII

Asignamos a= 155 y utilizamos como estimación inicial xo = 5. La iteración procede así:


Sección 7.3. Iteración de Newton 263

Listado 7.la
n X
o 5
1 5. 4
2 5.371834
3 5. 371686 (exacta)
La solución exacta se obtiene después de apenas tres pasos de iteración. Lo intentamos
otra vez con una estimación inicial mucho más alejada del valor real, xo = 1O:
Listado 7.Ib
n X
o 10
1 7.183334
2 5.790176
3 5.401203
4 5.371847
5 5.371686 (exacta)
Se obtiene el valor exacto de la raíz cúbica con cinco pasos de iteración.

Dos funciones, Newt g y Newt n (listadas en la sección 7. 7), resuelven ecuaciones no


lineales por iteración de Newton. Laprimera exhibe gráficamente el avance de la iteración,
mientras que el segundo sólo realiza los cálculos. Las sintaxis son:
Newt g('nombre f', xO, xmin, xmax, n puntos)
Newt=n('nombre=f', xO) -
donde nombre_ f es el nombre del archivo M de función que define la ecuación por resolver
y xo es una estimación inicial de la raíz. El significado de xmin, xmax y n_puntos es el
mismo que tienen en bisec_g.
Como ilustración, definimos la ecuación por resolver así:

y= (O.Olx + 1) sen(x)-(x-0.01)/(x2 + 1)-0.0096

La ecuación anterior se escribe en un archivo M llamado eqn_ 1. m que se lista en FM 7-3.


Luego, ejecutamos Newt _ n (' eqn_ 1' , 4) . La salida es:

Iteración de Newton
Teclee el nombre de la función (encerrada en apóstrofos):
'eqn_ 1'
f na me
eqn 1
Teclee la estimación inicial de la raíz: 4
n= 1, x= 2.36795e+OO, y -1.031e+OO, yd -6.319e-Ol
n= 2, x= 2.92631e+OO, y 3.488e-Ol, yd -6.247e-Ol
n= 3, x= 2.82370e+OO, y -9.467e-02, yd -9.226e-Ol
n= 4, x= 2. 82171e+OO, y -1.774e-03, yd -8.895e-Ol
n= 5, x= 2. 82170e+OO, y -4.498e-06, yd -8.888e-Ol
n= 6, x= 2.82170e+OO, y -9.553e-09, yd -8.888e-Ol
Respuesta final 2.82170e+OO
264 Capítulo 7 Raíces de ecuaciones no lineales

La salida de Newt g es idéntica a la de Newt n, sólo que la primera traza una gráfica de
avance. De hecho, la figura 7 .6 se graficó con Newt g ( ' eqn l ' , 4 , o , 7 , so) para
este ejemplo. - -

Ejemplo 7.4

Imagine una pared de tabique con un espesor de 0.05 m. La temperatura en el lado


interior de la pared, To, es de 625 K, pero se desconoce la temperatura del lado exterior.
La pérdida de calor de la superficie exterior se efectúa por convección y por radiación.
La temperatura T¡ está detenninada por la ecuación

f(T¡) =!(T1 - To)+ w(Tj- T!) + h(T1 - T¡) =O (A)

donde

k: conductividad térmica de Ja pared, 1.2 W /mK


E: emisividad, 0.8
To: temperatura del lado interior de la pared, 625 K
T¡: temperatura del lado exterior de la pared (desconocida), K
Too: temperatura del entorno, 298 K
T¡. temperatura del aire, 298 K
h: coeficiente de transferencia de calor, 20 W /m 2K
u: constante de Stefan-Boltzmann, 5.67 x 10-8 W/m 2 K4
Ax: espesor de la pared, 0.05 m
Detennine T¡ por iteración de Newton.

Solución
Resolveremos el problema con Newt _g. La ecuación por resolver se escribe en un
archivo M de función como se muestra:

Listado 7.2
function f =cal pared(Tl)
k = 1.2; e= 0.8; Tinf = 298;
Tf = 298; h = 20; T0=625:
sig = 5.67E-8; espesor = O.OS;
f = k/espesor*(Tl-TO) + e*sig*(Tl. ·4 -Tinf.4}
+ h*(Tl - Tf);

Después de guardar el archivo M de función anterior, ejecutamos el siguiente comando:

Newt_g('cal_pared', 550, 400, 600, SO)


Sección 7.4. Método de la secante 265

Iteración de Newton
12000

10000

8000

8000
~
<l-000
Solución final
2000
j
o
·2000

Figura 7.7 f(T1) vs T1

El resultado es:
Iteración de Newton
n= O, x= 5.50000e+02, y= 7.03301e+03
n= 1, x= 4.55199e+02, y= 6.58551e+02
n= 2, x= 4.44423e+02, y= 6.44623e+OO
n= 3, x= 4.44316e+02, y= 6.27680e-04
n= 4, x= 4.44316e+02, y= S.70253e - 10
ans =
444.3157
La respuesta final es T1 = 444.3 K. La salida gráfica se muestra en la figura 7. 7, donde
x y y denotan T1 y f (T1), respectivamente.

-.4 MÉTODO DE LA SECANTE


método de la secante es una variante de la iteración de Newton. Hemos utilizado una
ximación de diferencia para evaluar/' en la iteración de Newton; sin embargo, también
emos evaluar/' aproximadamente utilizando los dos valores anteriores consecutivos def
esquema iterativo basado en este concepto se escribe así:
Xn-1 - Xn-2
Xn = Xn-1 - ¡,1-l f,n-1 - f,n-2 , n = 2, 3, ...

Para iniciar la iteración, tenemos que especificar xo. El valor de x1 puede fijarse arbitraria-
te en x1 = x1 + .6.x, donde .6.x es un número arbitrariamente pequeño, como 0.01, por
plo. Entonces, podemos continuar la iteración hasta satisfacer una tolerancia.
266 Capítulo 7 Raíces de ecuaciones no lineales

Ejemplo 7.5

Una bala de M = 0.002 kg se disparó verticalmente en el aire y está descendiendo a su


velocidad terminal. 1 La velocidad tenninal está dada por gM = Farrastre, donde g es Ja
aceleración debida a Ja gravedad y M es Ja masa. Después de evaluar todas las
constantes, Ja ecuación se escribe así:

(0.002)(9.81)= 1.4 X 10-5 u1. 5 + 1.15 X 10-5 u2 (A)

donde u es la velocidad terminal, mis. El primer término del miembro derecho


representa el arrastre por fricción, y el segundo, el arrastre por presión. Determine la
velocidad terminal por el método de la secante. Una estimación burda sería u .. 30 mis.

Solución
La tarea consiste en encontrar la raíz de

f(v) = (0.002)(9.81)-1.4 x 10-\,1. 5 + 1.15 x 10-5 u2 (B)

Asignamos uo = 30 y u 1 = 30.1, con base en la estimación burda dada, y calculamos


fo y f¡ con la ecuación (B). A continuación se muestra la solución iterativa:

n V f(v)
o 30.00000 1.9620001E-02
1 30.10000 6.8889391E-03
2 30.15411 6. 8452079E- 03
3 38.62414 -8.9657493E-04
4 37.64323 9.0962276E-05
5 37.73358 9.9465251E-07
6 37.73458 -1.8626451E-09

Así, la velocidad terminal es u= 37.7 mis.

7.5 MÉTODO DE SUSTITUCIONES SUCESIVAS


El término método de sustituciones sucesivas se refiere a una clase amplia de esquemas de
resolución iterativos para ecuaciones no lineales. La iteración de Newton y el método de la
secante pueden considerarse aplicaciones de Ja sustitución sucesiva. Puesto que la sustitución
sucesiva se emplea en muchos algoritmos numéricos para resolver ecuaciones no lineales,
incluidas ecuaciones diferenciales y ecuaciones simultáneas no lineales, presentaremos
algunos de sus aspectos fundamentales en esta sección.

1
Por favor, no dispare balas al aire; muchas personas son heridas cada año por balas disparadas al azar.
Sección 7.5. Método de sustituciones sucesivas 267

Si la ecuación por resolver, f(x) =O se puede escribir en la fonna

X= g(x) (7.5.1)

entonces podrá escribirse un esquema iterativo así:

Xn = g(Xn-1) (7.5.2)

donde n es el número de pasos de iteración y xo es una estimación inicial. Este método se


denomina de sustituciones sucesivas, o de iteración de punto fzjo.
La ventaja de este método es su sencillez y la flexibilidad para escoger la fonna de g(x).
Por otro lado, tiene la desventaja de que la iteración no siempre converge para una fonna de
g(x) elegida arbitrariamente. Si queremos asegurar la convergencia de la iteración, deberemos
satisfacer la siguiente condición:

1g'(x)I<1 (7.5.3)

La figura 7.8 ilustra la fonna en que g'(x) afecta la convergencia del método iterativo.
Puede verse que la convergencia es asintótica si O< g' < 1, y oscilatoria si -1 < g' <O. En caso
contrario, la iteración diverge. Por añadidura, puede demostrarse fácilmente que la rapidez de
convergencia aumenta confonne g' se aproxima a cero.

Ejemplo 7.6
Se sabe que la función

(A)

tiene dos raíces, una negativa y una positiva. Encuentre la raíz más pequeña por
sustitución sucesiva.

Solución
Si verificamos el signo de y en x = -1 y x =O (a saber, y(-1) = 2.367 y y(O) = -1),
localizaremos la raíz más pequeña en -1 < x <O. Reescribimos la ecuación dada así:

(B)

Después, escribimos el siguiente esquema iterativo:

Xn = g(Xn-1) (C)

La primera derivada de g(x) satisface la ecuación 7.5.3 en el intervalo-1 < x <O, así
que el esquema es convergente. He aquí los resultados de la iteración:
268 Capítulo 7 Raíces de ecuaciones no lineales

Convergente: -1 <g'<O Convergente: O<g'<1


2.---~~~~~~~~~,.-------,

El: estimación inicial


y=g(x)

>- o >-
o Y=X
-1
-1
1
=X El
-2
-2 o o 2 3 4
X X
Divergente: g'<-1 Divergente: 1<g'

y=g(x) 10
2
- ·- ·- - ·- ·- 1
: 1 1 ~-__:--:_--_- 1
>- o 11
1 · 11
1.
. 1
1
1 .
ji 1 i 1 i 1
-1
¡11.:._-¡:=_.:._-=.-:-=.-:_1 1
·- ·- ·- ·- ·- ·-
-2 Y=X 1

.3~~~~~~~~~~~~
i El
4 ~ o 2 o 5 10
X X

Figura 7.8 Convergencia del método de sustituciones sucesivas.


(El denota una estimación inicial.)

Núm. iteración Aprox. sucesivas


n x(n)
o O (estimación inicial)
1 -0.333333
2 - 0.390786
3 -0.390254
4 -0.390272
5 -0.390272

Las siguientes son ecuaciones alternativas:

X = - ..¡ 3x - ¿ +2 (D)

y
Sección 7.5. Método de sustituciones sucesivas 269

x=./ 3x-e" + 2 (E)

Sin embargo, las ecuaciones (D) y (E) tienen discontinuidades en las inmediaciones
de la raíz más pequeña. Además, las primeras derivadas de ambas ecuaciones violan
la condición de la ecuación 7.5.3. Por tanto, ninguna de estas ecuaciones funciona .

Una fonna sistemática de encontrar una fonna de g(x) consiste en establecer

g(x) = x - a.f(x) (7.5.4)

de modo que el esquema iterativo se convierte en

X,,= X11- I - q((x,,_¡) (7.5.5)

donde a. es una constante. La constante a. se puede detenninar como sigue: al sustituir la


ecuación 7.5.5 en la 7.5.3 se observa que la iteración converge cuando

- 1< 1 - a.f'(x) < 1 (7.5.6)

o. lo que es lo mismo,

O < a.f'(x) < 2 (7.5.7)

La ecuación anterior indica que, primero, debe tener el mismo signo que/' y, segundo, que la
rapidez de convergencia es óptima cuando a."" l/f'.
El presente esquema se reduce a la iteración de Newton si se asigna al valor de Ilf'(x,,)
ara cada iteración.

Ejemplo 7.7

El tamaño crítico de un reactor nuclear está detenninado por una ecuación de criticali-
dad. Suponga que una versión simplificada de la ecuación de criticalidad está dada por

tan(O. lx) = 9.2e-x (A)

La solución que tiene significado fisico es la raíz positiva más pequeña que satisface
3 < x < 4. Detennine la raíz positiva más pequeña.

Solución
Aplicamos el esquema iterativo de la ecuación 7.5.5 a

f (x) = tan(O. lx) - 9.2e-x (B)


270 Capítulo 7 Raíces de ecuaciones no lineales

Estimamos un valor aproximado de/' en 3 < x < 4 con

l ={(
!' .. f( 4 3
) = 0.40299 (C)

Luego, asignamos el siguiente valor al parámetro :


1
(D)
ª = 0.40299
La iteración de la ecuación 7.5 .5 converge como sigue:
Número de Solución
in ter ación iterati va
n X
o 4.00000
1 3.36899
2 3.28574
3 3.29384
4 3.28280
5 3.29293
6 3.29292
7 3.29292

7.6 ECUACIONES SIMULTÁNEAS NO LINEALES


La necesidad de resolver ecuaciones simultáneas no lineales se presenta con bastante
frecuencia. Aquí presentaremos dos métodos para resolver ecuaciones simultáneas no lineales

Iteración con sustituciones sucesivas: Si el sistema de ecuaciones no lineales dado


representa un fenómeno natural o un sistema de ingeniería, es común que las ecuaciones se
vuelvan lineales si la magnitud de la solución es pequeña. Un sistema no lineal de este tipo
puede escribirse en la misma forma que el sistema lineal excepto que los coeficientes dependen
de la solución.
La resolución iterativa de un sistema no lineal con base en sustituciones sucesivas puede
escribirse así:

An-!Xn =y (7.6. 1

donde An-1 es una matriz que representa los coeficientes y que se calcula a partir de la solución
anterior; Xn es la n-ésima solución iterativa y y es un ténnino no homogéneo que también puede
ser función de la solución.
Inicialmente, la matriz de coeficientes se calcula utilizando una estimación inicial de la
solución. Una vez determinada la matriz, la ecuación se resuelve como un sistema lineal. Ya
Sección 7.6. Ecuaciones simultáneas no lineales 271

que se obtiene la solución, la matriz de coeficientes se actualiza y se resuelve una vez más la
ecuación. Si se presenta una inestabilidad durante la iteración, utilizamos sub-relajación:

Xn = roA;;~¡ y+ (1 - ro)Xn- 1 (7.6.2)

donde ro de un parámetro de sub-relajación que satisface O< ro < 1.

Ejemplo 7.8

Se conectan elementos de calefacción eléctricos como se muestra en la figura 7.9. La


resistencia delj-ésimo elemento es una función de la temperatura y está dada por

(A)

donde aj, bj y Cj son constantes y 1j es la temperatura delj-ésimo elemento, en Kelvin.


La temperatura de cada elemento de calentamiento está determinada por:

l]Rj =Aj a(I¡4- T.!)+ Ajh(lj- Too) (B)

donde Too es la temperatura del entorno. En el ejemplo 7.4 se explican las demás
notaciones. La ecuación (B) es una ecuación de energía que incluye los efectos del
calor generado y la transferencia de calor por convección y por radiación. Explique
cómo podría resolverse este problema.

R1 R2

11 -7 12-7

100V R3 R4

l__________ Figura 7.9 Circuito de elementos de calentamiento

Solución
Las corrientes eléctricas 11 eh satisfacen
272 Capítulo 7 Raíces de ecuaciones no lineales

(C)

Las ecuaciones anteriores no son lineales porque cada resistencia es una función de la
temperatura, en tanto que la temperatura es, a su vez, una función de la corriente y de
la resistencia. Si la temperatura es baja, los efectos no lineales desaparecen y las
ecuaciones se hacen lineales. Por tanto, puede desarrollarse el algoritmo como sigue.
Se resuelve primero la ecuación de la corriente eléctrica con valores fríos de las
resistencias. Se resuelve la ecuación (B) para la temperatura. Se calcula la resistencia
de cada resistor en función de la temperatura con la ecuación (A). Se repite la
resolución de la ecuación (C) utilizando los valores actualizados de las resistencias. Se
repite todo el procedimiento hasta que se logra la convergencia de la solución para
todas las cantidades.

Iteración de Newton: Las ecuaciones no lineales pueden hacerse lineales mediante una
expansión de Taylor. Supongamos que el sistema de ecuaciones tiene la fonna

f¡(x1, x2, .. , x,,) =O, i = 1, 2, .. n (7.6.3

donde/¡ es una función no lineal de lasx1. Si tenemos una estimación inicial de la solución, ésta
puede escribirse así:

(7.6.4

donde Xj es la estimación inicial y D..x¡ es una corrección desconocida. Si expandimos la


ecuación 7 .6.3 para obtener un polinomio de Taylor truncado de primer orden alrededor de X¡.
obtenemos
~Efj_ !:::.x.•.--
L. - f,:" /\ .. .x,,)
(x¡, x2, /\ (7.6.5)
1
j ax¡

donde las derivadas parciales se evalúan con las estimaciones iniciales. La ecuación 7.6.5
puede escribirse en fonna de matriz así:

J!:::.x: = - f (7.6.6)

donde J es la matriz jacobiana dada por

(7.6.7)

y
Sección 7.6. Ecuaciones simultáneas no lineales 273

~X= ~~2
[
~X¡
~Xn
l f =
[
!1(x1, x2, ... xn)l
h(x1, ~~' ... xn)

f n(x¡, x2, ... xn)


(7.6.8)

Las derivadas parciales pueden evaluarse con una aproximación de diferencia, por ejemplo,

~r.
OJI /;(" "·+ CJXJ,. •• .Xn
1 X¡, .. ., X) ") - /;(" ". ... Xn
1 X¡, ... ,XJ, ")
- "'-------'----'--------"--- (7.6.9)
OXj CJXj

donde CJXj es un valor pequeño elegido arbitrariamente.

Ejemplo 7.9

Utilice el método descrito en esta sección para encontrar las soluciones de

f¡(x,y) = fi(x,y) =O
donde

!1 (x, y) = x exp(xy + 0.8) + exp(y2) - 3

fi(x, y)= x 2 - / - 0.5 eXip(xy)

y se satisface x > O.

Solución
Primero graficamos.fi(x, y)= O y fi(x,y) =O en la figura 7.10 con el siguiente guión
basado en la técnica de graficación descrita en la sección 2.3.

Listado 7.3
clear, clg, hold off
Xl = 0:0.1:2;
yl = -2:0.1:2;
[x,y] = meshgrid(xl,yl);
fl = f fl(x,y);
f2 = f-f2 (X, y) ¡
contour(fl, [o.oo, o.oo], xl,yl)
hold on
contour(f2, [0.00, 0.00], xl,yl)
xlabel (x) ylabel (y)
f fl.m
function f f fl(x,y)
f = x.*exp(x.*y+0.8) + exp(y. ·2) - 3;
274 Capítulo 7 Raíces de ecuaciones no lineales

1.5

0.5

... o
-0.5

-1

-1.5

-20 0.5 1.5 2

Figura 7.10 Solución gráfica del ejemplo 7.9

f_f2.m
function f = f f2(x,y)
f = x. ·2 - y. ·2 - O.S*exp(x.*y);
Las curvas de la figura 7.1 O indican que hay dos raíces en el dominio positivo de x;
una es aproximadamente (x = 0.8, y= 0.2) y la otra es (x = 1, y= - 0.8). Obtendremos
soluciones más exactas con la iteración de Newton. En el listado 7.4 se presenta un
guión.
Listado 7.4
% Iteración de Newton 20
clear, clg, fprintf('\n')
dx = 0.01; dy = 0.01;
x = input('¿Estimación inicial de x? ');
y= input('¿Estimación inicial de y? ');
for n=l:SO
s = [x,y);
xp = x + dx;
yp =y + dy;
J(l,1) (f fl(xp, y) - f fl(x,y))/dx;
J(l,2) (f-fl(x, yp) f fl(x,y))/dy;
J(2,1) (f-f2(xp, y) f-f2(x,y))/dx;
J .( 2 , 2) ( C f 2 (X 1 yp) Cf2(x,yll/dy;
f (1) f fl(x,y);
f(2) = f-f2(x,y);
ds = - J\f';
X= X+ ds(l) i
y = y + ds (2);
fprintf('n=%2.0f, x=%12.5e, y=%12.5e', n,x,y)
fprintf('f(1)=%10.2e, f(2)=%10.2e\n, f(l), f(2))
Sección 7.7. Archivos M 275

if (abs(f(l))<l.Oe-9 & abs(f(2))<1.0e-9), break; end


end
La salida de la iteración de Newton es:
¿Estimación inicial de x? 1
¿Estimación inicial de y? 1
n=l, x= 9. 237e-Ol, y= S.828e-Ol f (l}= S .77e+OO, f(2}=-l.36e+OO
n=2, x= 8.086e-Ol, y= 3.295e-Ol f(l)= l.93e+OO, f(2)=-3.43e-Ol
n=3, x= 7.754e-Ol, y= 2.009e-Ol f(l)= 4.64e-Ol, f(2)=-l.07e-Ol
n=4, x= 7.748e-Ol, y= l.729e-Ol f(l)= S.8le-02, f(2)=-2.33e-02
n=S, x= 7.749e-Ol, y= l. 716e-Ol f (1) = l.92e-03, f(2)=-l.26e-03
n=6, x= 7.749e-Ol, y= 1. 716e-Ol f(l)= 2.24e-OS, f(2)=-l.82e-OS
n=7, x= 7.749e-Ol, y= l.716e-Ol f (l)= 2.69e 07, f(2)=-2.30e-07
n=8, x= 7.749e-Ol, y= l.716e-Ol f(l}= 3.3le-09, f(2)=-2.87e-09
n=9, x= 7.749e-Ol, y= 1. 716e-Ol f (l)= 4.lOe-11, f(2)=-3.58e-ll

¿Estimación inicial de x? 1
¿Estimación inicial de y? -1
n=l, x= 9.863e-Ol, y=-8.815e-Ol f(l}= 5.37e-Ol, f (2)=-l.84e-Ol
n=2, x= 9.69Se-Ol, y=-8.489e-Ol f(l)= 9.53e-02, f (2)=-l.38e-02
n=3, x= 9.687e-Ol, y=-8.476e-Ol f(l)= 3.43e-03, f (2)=-3.75e-04
n=4, x= 9.687e-Ol, y=-8.477e-Ol f (l)=-6.65e-OS, f (2)= l.98e-OS
n=S, x= 9.687e-Ol, y=-8.477e-Ol f (l}= l.45e-06, f (2)=-3.67e-07
n=6, x= 9.687e-Ol, y=-8.477e-Ol f(l}=-3 14e-08, f(2)= 8.20e-09
n=7, x= 9.687e-Ol, y=-8.477e-Ol f(l)= 6.82e-10, f(2}=-l.77e-10
La solución es, en síntesis:
X 0.7749, y= 0.1716
X= 0.9687, y =-0.8477

7.7 ARCHIVOS M
rn 7-1: Bisección
Objetivo: Encontrar una raíz de una función
intaxis:bisec_n('nombre_f', a, b)
nombre f: el nombre de la función entre apóstrofos
a y b: extremos del intervalo inicial
Ejemplo:bisec_n('eqn_w3', o, 1.3)

c_n.m
:..:nct ion bisec_n(f_name, a,c)
: name
a a, c : extremos del intervalo inicial
tolerance : tolerancia
it limit limite del número de iteraciones
Y a, Y c : valores y de los extremos actuales
fun f(x) : valor funcional en x
:printf('Método de la bisectriz:\n\n');
276 Capítulo 7 Raíces de ecuaciones no lineales

tolerance = 0.000001; it limit = 30;


fprintf ( • It. a E
fprintf ( • fc=f(c) abs(fc-fa) \n');
c fa=f (a) ) ; .
it = O;
Y a= feval(f name, a); Y c = feval(f_name, c);
if (Y a * Y c-> O) -
fprintf(•\n \n Detenido porque f(a)f(c) > O \n');
el se
while 1
it = it + l;
b = (a+ c)/2; Y_b = feval(f_name, b);
fprintf('%3.0f %10.6f, %10.6f', it, a, b);
fprintf('%10 6f, %10.6f, %10.6f' c, Y a, Y_c);
fprintf{' %12.3e\n', abs((Y c - Y a)));
if ( abs(c-a)/2<=tolerance f -
fprintf(' Se satisface la tolerancia. \n' ) ;break
fprintf{'\n Cambie a o by ejecute otra vez.\n' ) ;
end
i f ( it>it limit )
fprintf( 7 Se excedió limite de iteraciones.\n'); break
end
if ( Y a*Y b <= O ) c b; Y c Y_b;,
el se a = b; Y a Y_b;
end
end
fprintf('Resultado final: Raíz %12 . 6 f \n • , b) ;
end
eqn_w3.m
function y= eqn w3(x)
y= sqrt(x"2- + 1) - tan(x);

FM 7-2: Método de la bisectriz con gráficas


Objetivo: Encontrar una raíz de una función y exhibir el proceso iterativo.
Sintaxis:bisec g('nombre f', a, c, xmin, xmax, n puntos)
nombre f: el nombre de la función -
a y b: extremos del intervalo inicial
xmin, xmax: coordenadas x mínima y máxima de la gráfica
b puntos: número de puntos utilizados para trazar la curva
Ejemplo:bisec_g('dem_bs', 2, 6, o, 7, 100) (véaselafigura7.5).
bisec_g.m
function bisec g(f name, a,c, xmin, xmax, n_points)
f name - -
%- a, c : extremos del intervalo inicial
% tolerance : tolerancia
% it limit limite del número de iteraciones
% Y a, Y c valores y de los extremos actuales
% fun f(x) valor funcional en x
clg, hold off
Sección 7.7. Archivos M 277

clear Y a, clear Y c
wid x =-xmax - xmin; dx = (xmax - xmin)/n p o ints;
xp=xmin:dx:xmax; yp=feval(f name, xp);
plot xp, yp); xlabel ( 'x') ;ylabel(' f (x) ');
title('Método de la bisectriz'), hold on
ymin=min(yp); ymax=max(yp); wid y = ymax-ymin;
yp=O.*xp; plot(xp,yp) -
fprintf('Método de la bisectriz:\n\n');
tolerance = 0.000001; it limit = 30;
fprintf(' It. a -b c fa=f{a) ');
fprintf(' fc=f(c) abs(fc-fa) \n');
it = O;
Y a= feval(f name, a); Y c = feval(f name, c);
plot([a,a], [Y-a,O]); text(a, - 0.l*wid y,'x=a')
plot ( [c, c], [Y- c, O]); text (c, -O. 1 *wid-y, 'x=c')
i f (Y a*Y c >-O) fprintf(' f(a)f(c) ~O \n');
else - -
while 1
it = it + l¡
b = (a+ c)/2; Y b = feval(f name, b);
plot([b,b],(Y b,O],':'); plot(b,O,'o')
i f it<4, text(b, wid y/20, [num2str(it)J), end
fprintf('%3.0f %10.6f, %10.6f', it, a, b);
fprintf{'%10.6f, %10.6f, %10.6f' c, Y a, Y c);
fprintf(' %12.3e\n', abs((Y c - Y a) -)) ; -
if ( abs(c - a)<=tolerance) - -
fprintf(' Se satisface la tolerancia. \n' ) ;break
end
i f ( it>it limit )
fprintf{ 7 Se excedió limite de iteraciones.\n'); break
end
if ( Y a*Y b <= O ) c b; Y c
el se a b; Y a
end
end
fprintf('Resultado final: Raíz %12 • 6 f \n' b) j I

e:!d
x=b ;
:-:'..o t ( [x x], [O. OS*wid y O. 2*wid y])
~e xt(x, 0.2S*wid y, 'solución final')
_.:.o t([x (x-wid x*0.004)), [O.OS*wid y 0 . 09*wid y])
_.:.o t([x (x+wid=x*0.004)], [O.OS*wid=y 0.09*wid=y])
lirm_bs.m
=~~ ctiony= dem bs(x)
= (1 - x.*cos(x)) .*x;

_f 7-3: Iteración de Newton sin gráficas


~ etivo: Resolver una ecuación no lineal por iteración de Newton.
taxis:Newt_n('nombre_f', xO)
nombre f: nombre de la función que define la ecuación no lineal
xo: estimación inicial
278 Capítulo 7 Raíces de ecuaciones no lineales

Ejemplo: Newt_n ( 'eqn_l', 2)


Newt n.m
function x = Newt n(f name, xO)
% Iteración de Newton-sin gráficos
x = xO; xb=x-999;
n=o; del x = 0.01;
while abs(x-xb)>o.000001
n=n+l; xb=x;
if n>300 break; end
y=feval(f name, x);
y driv=(feval(f name, x+del_x) - y)/del_x;
x-= xb - y/y drTv ;
fprintf(' n=%3.0f, x=%12.5e, y= %12.5e, ' n,x,y)
fprintf(' yd = %12.5e \n', y_driv)
end
fprintf('\n Respuesta final= %12.6e\n', x);
eqn_l.m
function y= eqn l(x)
y= (O.Ol*x + l)~*sin(x)
- (x - 0.01) .*(x. ·2 + 1). • (-1) - 0.0096;

FM 7-4 Iteración de Newton con gráficas


Objetivo: Resolver una ecuación lineal por iteración de Newton.
Sintaxis: Newt g ('nombre f' , xo, xmin, xmax, n puntos)
nombre- f: nombre dela función que define la ecuación no lineal
xo: esthnación inicial
xmin, xmax: coordenadas x mínima y máxima de la gráfica
b _puntos: número de puntos utilizados para trazar la curva
Ejemplo:Newt_g('eqn_l', 2, o, 5, 50)
Newt_g.m
function x = Newt g(f name, xo , xmin, xmax, n_points)
clg, hold off - -
% Método de Newton con ilustración gráfica
del x=0.001;
wid-x = xmax - xmin; dx = (xmax- xmin)/n points;
xp=xmin:dx:xmax; yp=feval(f name, xp); -
plot(xp,yp); xlabel('x'); ylabel('f(x) ');
title('Iteración de Newton'), hold on
ymin=min(yp); ymax=max(yp); wid y= ymax-ymin;
yp=O.*xp; plot(xp,yp) -
x = xO; xb=x+999; n=O;
while abs(x-xb)>0.000001
if n>300 break; end
y=feval(f narne, x); plot([x,x], [y,O]); plot(x,O, 'o')
fprintf('-n=%3.0f, x=%12.5e, y=%12.5e\n', n,x,y);
xsc = (x-xmin)/wid x;
i f n>4, text (x, wid y /20, [num2str (n) l), end
y_driv (feval(f_name, x+del_x) y)/del_x;
Problemas 279

xb=x;
x = xb y/y driv; n=n+l;
P 1 Ü t ( [ Xb / X] / 1 Y / 0] )
end
;>lot ( [x x], [O. OS*wid y O. 2*wid y])
cext(x, 0.2*wid y, 'Solución final')
plot( [x (x-wid x*0.004)], [O.Ol*wid y 0.09*wid y])
plot ( [x (x+wid=x*O. 004)], [O. 01 *wid=y o. 09*wid=y])

PROBLEMAS
(7.1) Determine valores aproximados de las soluciones de las siguientes ecuaciones empleando el
método gráfico:

(a) 0.5 exp(x/3)- sen(x) =O, x >O


(b) log(I + x)-x2 =O

(7.2) Encuentre de forma aproximada todas las soluciones positivas de las siguientes ecuaciones
utilizando el método gráfico:

(a)tan(x)-x+ 1 =O,O<x<3n
(b) sen(x)- 0.3ex =O, x >O
(c) O. lx 3 - 5x2 - x + 4 + e-x =O
(d) log(x)- o.2x2 + 1 =o
(e) x + x2 + 3x" 1 - 40 =O

(7.3) Calcule tan- 1(3.5) en el intervalo [O,n] por el método de la bisectriz. (Sugerencia: resuelva
tan(x) = 3.5, O~ x ~ n)
(7.4) Repita el problema 7.1 con el método de la bisectriz.
(7.5) La configuración superficial del ala NACA 0012 con cuerda de 1 m de longitud y espesor
máximo de 0.2 m está dada por

y(x) = ±[0.2969/X -0.126x- 0.3516x2 + 0.2843x 3 - 0.1015x4 ]

donde los signos +y - se refieren a las superficies superior e inferior, respectivamente. El


ingeniero de diseño necesita obtener la siguiente información:

(a) La coordenada x en la que el espesor del ala es máximo.


(b) Las coordenadas x y y del ala en las que el espesor es la mitad del máximo.

Encuentre las respuestas por el método de la bisectriz.


280 Capítulo 7 Raíces de ecuaciones no lineales

(7.6) Un ingeniero de diseño necesita encontrar las coordenadas de las intersecciones de la


superficie de ala NACA 0012 (dada en el problema anterior) y la curva dada por

y(x) = 0.2x(x - 0.6)

Calcule el valor con el método que prefiera.


(7.7) Un kilogramo mol de CO está contenido en un recipiente a T= 215 K y p = 70 bar. Calcule
el volumen del gas utilizando la ecuación de estado de van der Waals para un gas no ideal,
dada por

[P+ : 2 ]<u-h)=RT
donde R = 0.08314 bar m 3/(kg mol K), a= 1.463 bar m 6 /(kg mol) 2 y h = 0.0394 m 3/kg mol.
Determine el volumen específico v (m 3/kg mol) y compare el resultado con el volumen
calculado por la ecuación de los gases ideales, Pu = RT. Puede elegir cualquier método de
resolución.
(7.8) Encuentre las raíces positivas de las siguientes funciones por iteración de Newton:

(a) f (x) = 0.5 exp(x/3) - sen(x), x >O


(b) f(x) = Jog(I + x)-x2
(c) f(x) = exp(x)- 5x2
(d) f(x)=x 3 +2x-I
(e) f(x)=IX+2-x

(7.9) La siguiente ecuación tiene dos raíces positivas, una de las cuales está muy cerca de un punto
singular:
y= exp(x)- J/sen(x)

(a) Encuentre ambas raíces positivas por iteración de Newton empleando Ja derivada
diferenciada analíticamente.
(b) Repita (a) utilizando la aproximación de diferencia dada por la ecuación 7.3.3 o
Ja 7.3.4.
(c) indique qué se necesita con ambas estrategias para encontrar las dos raíces
correctas.

(7.10) Dos elipses tienen entre cero y cuatro intersecciones,2 como se ilustra en la figura 7.11. Las
siguientes ecuaciones representan dos elipses. Encuentre las coordenadas de las interseccio-
nes, primero con un método gráfico y luego por iteración de Newton. Sugerencia: Eliminex
o y y trabaje con una sola incógnita.
2
(x - 2) = + (y- 3 + 2 x) 2 = 5
2(x - 3)
2
+ (y/3) 2 = 4
2Este problema fue proporcionado por el profesor S. V. Sreenivasan de la University ofTexas, Austin, Texas.
Problemas 281

Par A Par B

Figura 7.11 Dos elipses

(7.11) Las frecuencias de vibración naturales de una viga unifonne sujeta en un extremo y libre en
el otro son soluciones de
tan(~) tanh(~) + 1 =O (A)

donde
~ = pro 2LIEl
L = longitud de la viga, m
ro =frecuencia, s- 1
El= rigidez ante la flexión, Nm 2
p =densidad del material de la viga, kg/m 3
Investigue primero con el método gráfico los valores de que satisfacen la ecuaciqn (A) y
luego detennine por iteración de Newton los tres valores más bajos de que satisfacen la
ecuación.
(7.12) Una mezcla equimolar de monóxido de carbono y oxígeno debe alcanzar el equilibrio
a 3000 K y una presión de 5 bar. La reacción teórica es
CO + (1/2)02 ...... C02
La reacción química real se escribe así:
CO + 02--> xCO + (1/2)(1 + x)02 + (1 -x)C02
La ecuación de equilibrio químico para detenninar la fracción de CO restante, o sea x, está
dada por

Kp= (l-x~ O<x< 1


xff+X../ PIPo '

donde Kp = 3.06 es la constante de equilibrio para CO + ( 1/2)02 = C02 a 3000 K, P = 5 bar


y Po= 1 bar. Detennine el valor de x por iteración de Newton.
282 Capítulo 7 Raíces de ecuaciones no line

(7.13) Considere la misma reacción química del problema anterior, excepto que ocurre en pre
de Nz a presión atmosférica. La reacción es:

La ecuación de equilibrio es
. =(1-x}l10.52 +X
3 06
xlT+X
Determine el valor de x por iteración de Newton.
(7.14) La ecuación x2 - 2x - 3 =O puede reformularse para el método de sustituciones suce
como sigue:
(a) x = (x2 - 3)/2
(b) X = { 2x + 3
(c) X= (2x + 3)/.fX
(d) x = x- 0.2(x 2 - 2x- 3)

Las raíces de la ecuación son x = 3 y x = -1. Determine gráficamente cuáles de las fórm
anteriores convergen cuando se utilizan para encontrar la raízx = - 1 por sustitución suce •
Verifique los resultados del enfoque gráfico con el criterio de la ecuación 7.5.3. Repita
análisis para x = 3.
(7.15) Encuentre todas las soluciones de la ecuación del problema 7.2 utilizando sustitu
sucesiva en la forma
x=x-a..f(x)

Sugerencia: Detennine utilizando el gradiente de la interpolación lineal ajustada a los


extremos del intervalo hallados en el problema 7.4.
(7.16) El factor de fricción/para los flujos turbulentos en una tubería está dado por

llamada correlación de Colebrook, donde Re es el número de Reynolds, e es la aspereza


la superficie de la tubería y D es el diámetro de la tubería. 3 (a) Escriba un programa
computadora que resuelva la ecuación para/utilizando el método de sustituciones sucesi\
(b) Evalúe/ejecutando el programa para los siguientes casos:

1. D = 0.1 m, e= 0.0025 m, Re= 3 x 104


2. D = 0.1 m, e= 0.0001 m, Re= 5 x 10 6

3 Véase Fox y McDonald, J11troductio11 to Fluid Mechanics, 4a. ed., John Wiley, 1992.
"roblemas 283

Sugerencia: Reescriba primero la ecuación en la siguiente fonna:

e 9.35
f= 1.14-21og 10 D+RelJ
[ (
JJ-2
Sustituya/del miembro derecho por una estimación inicial. Sustituya otra vez la/calculada
en el miembro derecho y repita esta iteración hasta que f converja. La estimación inicial
puede ser cero. Puede verificar los resultados de los cálculos con un diagrama de Moody
que puede encontrar en un libro de texto sobre mecánica de fluidos.
Capítulo 8

Ajuste de curvas a datos


de mediciones

Ajustar una curva implica ajustar una función g(x) a un conjunto de datos dado, (x;, y;), i = 1,
2, .:., L. La función g(x) puede ser un polinomio, una función no lineal o una combinación lineal
de funciones conocidas. La función g(x) elegida para ajustar una curva debe tener cierto
número de coeficientes no determinados. En general, el número de puntos de datos por ajustar,
L, es mucho mayor que el número de coeficientes no determinados, k; por tanto, el método para
determinar los coeficientes se basa en la minimización de las discrepancias entre la función
determinada y los puntos de datos, y recibe el nombre de método de mínimos cuadrados. En el
caso especial de L = k, el ajuste de la curva se reduce a un problema de interpolación porque la
curva ajustada pasa por los puntos de datos.

8.1 AJUSTE DE LÍNEAS RECTAS


Supongamos que nos interesa ajustar una función lineal al conjunto de datos ilustrado en la
tabla 8.1. La línea ajustada a un conjunto de datos se denomina línea de regresión.

TABLA 8.1 Conjunto de datos de muestra

i X y
1 0.1 0.61
2 0.4 0.92
3 0.5 0.99
4 0.7 1.52
5 0.7 1.47
6 0.9 2.03

La función lineal se expresa con

g(x) = c¡x + c2 (8.1.1)

284
Sección 8.1. Ajuste de líneas rectas 285

donde e¡ y c2 son constantes no determinadas. Puesto que el número de puntos de datos es


mayor que 2, la línea no puede ajustarse a todos los puntos, pero se determina minimizando las
discrepancias entre la línea y los datos. La desviación de la línea respecto de los puntos está
definida por

r¡ =y;- g(x¡) =y;- (c¡x¡ + c2), i = 1, 2 ... L (8.1.2)

donde L es el número total de puntos de datos ( 6 en este ejemplo) y e¡ y c2 son las constantes
por determinar.
La suma de las desviaciones elevadas al cuadrado es
L L
R = .E rf = .E (y; - c1x; - c2)2 (8.1.3)
i=l i=l

El mínimo de R ocurre cuando las derivadas parciales de R respecto de e¡ y c2 son cero:

L
aR =-2 L X¡(y¡-C¡X¡-c2)=0
ac¡ i=I
(8.1.4)
L
aR -- - 2 ~
LJ (y ; - c¡x¡ - c2 ) =O
ac¡ n=I

La ecuación 8.1.4 puede reescribirse así:

[:::: :::~] [~: ] [:: ] (8.1.5)

donde

L
a1,1 = LX~l
i=I
L
a1,2 = a2,1 = .E Xi
i=I
L
a2,2 = .E l=L
i=l
L
z¡ = .E x¡y¡
i=I
286 Capítulo 8 Ajuste de curvas a datos de mediciones

La solución de la ecuación 8.15 es

c1 = (a2,2z1 - a1 ,2z2)/(a1,1a2,2 - a1,2a2,1)


c2 = (a1,1z2 - a2,1z1)/(a1,1a2,2 - a1,2a2,1)

Una fonna equivalente de determinar los coeficientes es considerar el problema como una
ecuación lineal sobredeterminada, como se explicó en la sección 3.4. Por ejemplo, si todos los
puntos de datos de la tabla 8.1 satisfacen la ecuación 8.1.1, escribimos

CJX¡ + C2 =y;, i = 1, 2, ... L


o bien
Ac=y (8.1.6)

donde
0.1 1 0.61
0.4 1 0.92

~~] ,
0.5 1 0.99
A= e= [ y=
0.7 1 1.52
0.7 1 1.47
0.9 1 2.03

Se dice que la ecuación 8.1.6 es una ecuación lineal sobredetenninada porque el número de
ecuaciones, L, es mayor que el número de incógnitas. Para obtener la solución, premultiplica-
mos la ecuación 8.1.6 por la transpuesta de A:

(8.1. 7)

Puesto queA 1A se convierte en una matriz cuadrada de 2 por 2 y A 1y se convierte en un vector


de longitud 2, la ecuación 8.1 .7 es un problema normal de 2 por 2 (de hecho, es idéntico a la
ecuación 8.1.5. La solución se obtiene con

e= (A'*A)\(A'*y)
La solución anterior concuerda con la ecuación 8.1.6.
También podemos resolver una ecuación sobredeterminada en MATLAB con sólo

e = A\y

Lo mismo puede lograrse también con polyfi t. Supongamos que x y y son los conjuntos de
datos por ajustar; entonces,
Sección 8.1. Ajuste de líneas rectas 287

e= polyfit(x,y,1)

devolverá los coeficientes c1 y c2 en el vector e, donde el tercer argumento, 11


1 11 , es el orden
del polinomio ajustado y que en el caso de una línea recta es la unidad.

Ejemplo 8.1
Detennine la línea de regresión para los datos de la tabla 8.1(i) resolviendo la ecuación
8.1.5 y (ii) utilizando el comando polyf i t . Una vez obtenida la línea de regresión,
examine la desviación de la línea respecto de los datos.

Solución
Calculamos los coeficientes de la ecuación 8.1.5 como sigue:

a21 z2 a11 ZJ

i X¡ Yi x?1 x;y¡

1 0.1 0.61 0.01 0.061


2 0.4 0.92 0.16 0.368
3 0.5 0.99 0.25 0.495
4 0.7 1.52 0.49 1.064
5 0.7 1.47 0.49 1.029
6 0.9 2.03 0.81 1.827
Total 3.3 7.54 2.21 4.844

De la tabla anterior, obtenemos

a1,1=2.21, a1,2 = 3.3, z1=4.844


a2,1 = 3.3, a2,2 = 6, z2 = 7.54

Así, la ecuación 8.1.5 se convierte en

4.844] (A)
[ 7.54

La solución es
CJ = 1. 7645, C2 = 0.2862

La línea de regresión es entonces


g(x) = 1. 7645x + 0.2862 (B)

En la figura 8.1 se grafica la ecuación (B) con los puntos de datos.


Ahora resolveremos el mismo problema utilizando el comando polyfi t. El
guión sólo tiene tres líneas:
288 Capítulo 8 Ajuste de curvas a datos de mediciones

2 y: 1.7648x + 0.2862

1.5

>

X
0.5

ºo 0.2 0.4 0.6 0.8


X

Figura 8.1 La línea ajustada a los datos

X = (0.1, 0.4, 0.5, 0 . 7, 0.7, 0.9]


y= (0.61, 0.92, 0.99, 1.52, 1.47, 2.03]
e= polyfit(x,y,l)

El resultado es:
e =
1.7646 0.2862

que es idéntico a los coeficientes de la ecuación (B).


La desviación de la línea ajustada se analiza así:

i x(i) y(i) g=c1x+c2 Desviación


1 .1 .61 0.4626 0.14738
2 .4 .92 0.9919 -0.07198
3 .5 .99 1.1684 -0.17844
4 .7 1.52 1.5213 -0.00135
5 .7 1.47 1.5213 -0.05135
6 .9 2.03 1.8742 0.15574

8.2 AJUSTE DE CURVAS NO LINEALES CON UNA FUNCIÓN DE


POTENCIA
Con ciertos tipos de datos, puede ser adecuado ajustar la función de potencia dada por

(8.2.1)
Sección 8.2. Ajuste de curvas no lineales con una función de potencia 289

donde a y 13 son coeficientes no detenninados. Para determinar los coeficientes, primero


obtenemos el logaritmo de la ecuación 8.2.1:

log(g) = a log(x) + log(f3) (8.2.2)

Con las definiciones


G= log(g) (8.2.3)
C¡ =a (8.2.4)
c2 = log(f3) (8.2.5)
X= log(x) (8.2.6)

La ecuación 8.2.2 se convierte en

G=c1X+c2 (8.2.7)

Entonces, el problema se reduce a una regresión lineal, que ya vimos en la sección 8.1. La
ecuación 8.2. 7 se ajusta al conjunto de datos (log(y;), log(x;)).
1
Ejemplo 8.2

Un conjunto de datos (graficado en la figura 8.2) está dado por


X= (0.15, 0.4, 0.6, 1.01, 1.5, 2.2, 2.4, 2.7,
2.9, 3.5, 3.8, 4.4, 4.6, 5.1, 6.6, 7.6)
y [4.4964,5.1284,5.6931,6.2884,7.0989,7.5507,7.5106,8.0756,
7.8708,8.2403,8.5303,8.7394,8.9981,9.1450,9.5070,9.9115]
Ajuste los datos con la función de potencia.

Solución
Podemos escribir el guión en MA TLAB así:
Listado 8.1
X= (0.15, 0.4, 0.6, 1.01, 1.5, 2.2, 2.4,
2. 7, 2. 9, 3. 5, 3.8, 4.4, 4.6, 5.1,
6. 6, 7. 6)
y [4.4964,5.1284,5.6931,6.2884,7.0989,7.5507,7.5106,
8.0756,7.8708,8.2403,8.5303,8.7394,8.9981,9.1450,
9 .5070,9 .9115)
e= polyfit(log(x), log(y), 1)
El guión produce:
e =
0.2093 1.8588

1
Este ejemplo fue proporcionado por el profesor Y. Guezennec de la Ohio State University.
290 Capítulo 8 Ajuste de curvas a datos de mediciones

12

10

>-
6

X
4

ºo 2 4
X
6 8 10

Figura 8.2 Graficación de los puntos de datos

Las constantes de Ja función de potencia son

a = CJ = 0.2093
13 = exp(c2) = exp(l.8588) = 6.4160
Por último, la forma de potencias es

g(x) = J3xª = 6.4 l 60x0 ·2093

El conjunto de datos y la curva ajustada se grafican de tres formas distintas en Ja


figura 8.3 .

8.3 AJUSTE DE CURVAS CON UN POLINOMIO DE ORDEN


SUPERIOR
El principio de Jos mínimos cuadrados puede extenderse al ajuste de un polinomio de orden
superior a Jos datos de mediciones. Escribimos un polinomio de orden n así:

g( X) -- CJX11 + C2X11- l + •.. + Cn+I (8.3.1)

La desviación de Ja curva respecto de cada punto de datos es

r; =y; - g(x;), i = 1, 2, ... L (8.3.2)

donde L es el número de puntos de datos. La suma de las desviaciones elevadas al cuadrado es


Sección 8.3. Ajuste de curvas con un polinomio de orden superior 291

2 (a) Trazado loglog de y vs x (b) Trazado lineal de log(y) vs log(x)


10 .--------~----~
2.2

->- 2
~1.8
1.6

10º~--~~~-~~~ 1.4"'-'-----~~---_..__,
10·1 10º 101 -2 o 2
X log(x)
(e) Trazado lineal de y vs x

4
2~~-~-~-~-~
2 4 6 8 10
X

Figura 8.3 Función ajustada y puntos de datos (graficada en tres fonnas distintas)

L
R=L rf (8.3.3)
i=l

A fin de minimizar R, igualamos a cero las derivadas parciales de R respecto de Cj:

. 1, 2, ... ,n + 1
aR =O , 1= (8.3.4)
ªCj

o, lo que es lo mismo,
n+I L L
L ( E x[n+ 2-j-k ) Cj= L .xj'+l-ky¡, k = 1, 2, ... n + 1 (8.3.5)
j=I i=l i=I
292 Capítulo 8 Ajuste de curvas a datos de mediciones

que también puede escribirse en forma de matrices así:

L L L L
L Xln L xfn-1 'L xf 'L xfyi
i=I i=I i=I i=I
L L L
L xfn-1 ¿ X·n-1 L xr- 1Yi (8.3.6)
'
i=I
L
'L xf
i=I
L
2: x?
[c:U i=I
L
L Yi
i=I i=I i =I

Una forma equivalente de deducir la ecuación 8.3.6 es partir de una ecuación sobredeter-
minada. La fonna matricial de la ecuación es

Ac=y (8.3.7)

donde

Cuando L > n + 1, la ecuación está sobredeterminada porque el número de ecuaciones es mayor


que el número de coeficientes no detenninados. Si premultiplicamos ambos miembros por A 1
obtenemos

(8.3.8)

que es igual a la ecuación 8.3.6 y se puede resolver como problema normal con

e= (A'*A)\(A'*y)

En MATLAB, podemos obtener la solución de la ecuación 8.3.7 simplemente con

e = A\y
Como se mencionó en la sección 8.1, otra fonna equivalente pero más sencilla de encontrar
los coeficientes de un polinomio ajustado a un conjunto de datos consiste en utilizar polyf i t:
e= polyfit(x,y,n)

Ejemplo 8.3

Ajuste el siguiente conjunto de datos a un polinomio cuadrático:


Sección 8.3. Ajuste de curvas con un polinomio de orden superior 293

X= (0.1, 0.4, 0.5, 0.7, 0.7, 0.9);


y= [0.61, 0.92, 0.99, 1.52, 1.47, 2.03);
y grafique tanto el conjunto de datos como la curva ajustada.

Solución
Encontramos los coeficientes del polinomio cuadrático con el comando po 1 y f i t y
luego trazamos la curva. El siguiente guión produce la respuesta:
Listado 8.2
clear, clg
X= (0.1, 0.4, 0.5, 0.7, 0.7, 0 9);
y= [0.61, 0.92, 0.99, 1.52, 1.47, 2.03];
ce polyfit(x,y,2)
xx = x(l) :0.l:x(length(x))
yy = polyval(cc,xx)
plot(xx,yy); hold on
plot(x,y,'x')
axis([O, l, O, 3))
xlabel ('X')
ylabel ('Y')
La gráfica del resultado se muestra en la figura 8.4.

2.5

>-1.5

0.5

X
Figura 8.4 Gráfica del polinomio
cuadrático ajustado

Las ecuaciones lineales obtenidas por ajuste de curvas pueden quedar mal acondicionadas.
Esto sucede si (1) las abscisas de los puntos de datos incluyen números tanto muy pequeños
como muy grandes o (2) si el orden del polinomio es elevado. No es deseable un polinomio de
orden elevado porque puede oscilar; la razón es la misma por la cual no es deseable un
polinomio de orden superior para una interpolación.
294 Capítulo 8 Ajuste de curvas a datos de mediciones

8.4 AJUSTE DE CURVAS CON UNA COMBINACIÓN LINEAL DE


FUNCIONES CONOCIDAS
Al ajustar una función a puntos de datos, podemos utilizar una combinación lineal de cuales-
quier funciones conocidas, incluidos polinomios:

g(x) = c¡f1(x) + qfi(x) + c3f3(x) + ... + Ckfk(x) (8.4.1)

donde Ji, Ji, ... son funciones prescritas, c1, c2, ... son coeficientes no detenninados y k es el
número total de funciones prescritas. Si ajustamos la ecuación 8.4. l a cada punto de datos,
podremos escribir una función sobredetenninada así:

Ac =y (8.4.2)

con

Ík(x1)
Ík (x2)
l
Ík(XL)

e=['.]
Y=

donde L > k. Los coeficientes están detenninados por


r:l
e = A\ y

Podemos utilizar cualquier función en lugar de f de la ecuación 8.4.1. Los conocimientos, la


experiencia y los ensayos ayudan a elegir funciones apropiadas para la combinación lineal.

Ejemplo 8.4
Determine los coeficientes de la función

g(x) = c1 + cix + c3 sen(x) + c4 exp(x)


ajustado a los datos de la siguiente tabla:
Sección 8.3 . Ajuste de curvas con una combinación lineal de funciones conocidas 295

X y
0.1 0.61
0.4 0.92
0.5 0.99
0.7 1.52
0.7 1.47
0.9 2.03

Solución
El algoritmo de resolución se implementa en el listado 8.3. La curva detenninada se
grafica en la figura 8.5.
Listado 8.3
ele; elear; elg
data= [ 0.1 0.61;
0.4 0 . 92;
0.5 0.99;
0.7 1.52;
0.7 1.47;
0.9 2.03]
x = da ta ( : , 1) ; y = da ta ( : , 2) ;
A(:,l)=ones(x); A(:,2)=x; A(:,3)=sin(x); A(:,4)=exp(x);
e = A\y
XX= 0:0.01:1;
g=e(l)*ones(xx) + e(2)*xx + e(3)*sin(xx) + e(4)*exp(xx);
axis (' square') ;
plot(x, y,'*', xx, g); xlabel('x'); ylabel('y')

2.5

>-1 .S

o.s

0.2 0.4 0.8 0.8

Figura 8.5 Gráfica de las funciones combinadas linealmente


296 Capítulo 8 Ajuste de curvas a datos de mediciones

PROBLEMAS

(8.1) Detennine una línea ajustada al siguiente conjunto de datos por el método de míni
cuadrados. (Haga primero los cálculos a mano y verifiquelos después con polyf i t.)

i Xi Yi

1 1.0 2.0
2 1.5 3.2
3 2.0 4.1
4 2.5 4.9
5 3.0 5.9

(8.2) Utilice MATLAB para detenninar una función lineal ajustada al siguiente conjunto de datos
resolviendo una ecuación lineal sobredeterminada. Verifique el resultado con polyfi t.

i Xi Yi

1 0.1 9.9
2 0.2 9.2
3 0.3 8.4
4 0.4 6.6
5 0.5 5.9
6 0.6 5.0
7 0.7 4.1
8 0.8 3.1
9 0.9 1.9
JO 1.0 1.1

(8.3) El conjunto de datos que se da en seguida debe ajustarse a

y= aexp(Px)

Detennine las constantes. Grafique la curva con los datos en una escala lineal y también en
una escala logarítmica.
Problemas 297

X y
0.0129 9.5600
0.0247 8. 1845
0.0530 5.2616
0. 1550 2.7917
0.3010 2.2611
0.4710 1.7340
0.8020 1.2370
1.2700 1.0674
1.4300 1.1171
2.4600 0.7620

(8.4) Demuestre que la ecuación 8.1 .7 equivale a la 8.1.5.


(8.5) (a) Ajuste un polinomio cuadrático al siguiente conjunto de datos utilizando el comando
po l yf i t . (b) Grafique el polinomio detenninado junto con los datos.

i Xi Yi

1 o o
2 1 2.3
3 2 4.2
4 3 5.7
5 4 6.5
6 5 6.9
7 6 6.8

(8.6) Repita el problema anterior con polinomios de primer y tercer orden.


(8.7) Ajuste polinomios de orden 1, 2 y 3 al siguiente conjunto de datos y compare las desviaciones
de los tres polinomios. Grafique cada polinomio junto con los datos.

Xi Yi

o o
.002 0.618
.004 1.1756
.006 1.6180
.008 1.9021

(8.8) Ajuste un polinomio cúbico a los siguientes datos. Grafique el polinomio con Jos datos.

i Xi Yi

1 o o
2 0.2 7.78
3 0.4 10.68
4 0.6 8.37
5 0.8 3.97
6 1 o
298 Capítulo 8 Ajuste de curvas a datos de mediciones

(8.9) Ajuste

g(x) =e¡+ czx + c3 sen(xx) + c4 sen(2xx)

a los siguientes datos. Grafique g(x) junto con los datos.

i x(i) y(i)
1 .1 0.0000
2 .2 2.1220
3 .3 3.0244
4 .4 3.2568
5 .5 3.1399
6 .6 2.8579
7 .7 2.5140
8 .8 2.1639
9 .9 1.8358
Capítulo 9

Funciones de splines e interpolación


no lineal

En este capítulo presentamos tres temas: b-splines, e-splines e interpolación no lineal. La


función e-spline consiste en polinomios cúbicos fragmentarios que se ajustan a puntos de datos
dados. La función b-spline cúbica consiste en polinomios cúbicos fragmentarios que no se
ajustan a los puntos de datos con exactitud, pero que tienen el objetivo de generar curvas
continuas que sean agradables a la vista. Los métodos de interpolación no lineal resultan útiles
cuando se desea un comportamiento exponencial de la función ajustada.

9.1 INTERPOLACIÓN DE e-SPLINE


Un incentivo para desarrollar la interpolación de e-spline (spline cúbica) se ilustra con la
pregunta: ¿Cómo podemos ajustar a una curva continua un gran número de puntos en el plano
x-y como los que se muestran en la figura 9.1?
Los intentos por ajustar un solo polinomio a un conjunto de datos grande fracasarán. La
razón es que, al aumentar el número de puntos, el error de la interpolación de Lagrange
aumenta rápidamente.
La esencia de la interpolación de e-spline consiste en aplicar un polinomio cúbico a cada
intervalo entre dos puntos de datos consecutivos. Por otro lado, también se requiere que la
primera y segunda derivadas de los polinomios cúbicos sean continuas en cada punto de datos.
Por tanto, tanto el valor funcional como la primera y la segunda derivadas son continuas en
todo el dominio. Sin embargo, para determinar los coeficientes del polinomio cúbico de cada
intervalo es preciso determinar simultáneamente los coeficientes de todos los intervalos.
En el ajuste de una función e-spline f (s) a los puntos de datos (s;, /¡) intervienen las
siguientes cantidades:

s;, i = 1, 2, ... , n conocidas


f¡, i = 1, 2, ... , n conocidas
f;', i = 1, 2, ... , n por determinar

299
300 Capítulo 9 Funciones de splines e interpolación no lineal

/¡", i = 1, 2, ... , n : por detenninar

0.11

0.8

0.4
o o o o o o o
0.2
o
... e o

.0.2 o o
--0.4 o o
o
.o.e

.o.a

·1
-1 , .o.5 o 0.5 1.5 2 2.5 3 3.5
X

Figura 9.1 Puntos que se desea conectar con una curva suave

Consideremos un intervalo, s; < s < s;+1 con h; = s;+1 - s;, como se muestra en la figura 9.2.
Si utilizamos la coordenada local t = s - s¡, podemos escribir un polinomio cúbico para un
intervalo así:

f(t) =a+ bt +e?+ et3 (9.1.l)

f.1 fi+l
f'.1 f'¡+l
<----- h¡ ----->
1
--
S¡_¡ S·1 Si+! Si+2
t=O t = h¡

Figura 9.2 Intervalo entre dos puntos de datos para e-spline


Sección 9.1. Interpolación de e-spline 301

donde O ~ t ~ h;.
Primero necesitamos que/(t) sea igual al valor conocido de la función/(t) en t =O
y t= h;:

f;=a (9.1.2)
fi+1 =a+ bh; + ch7 + eh1 (9.1.3)

Las dos ecuaciones anteriores no bastan para detenninar las cuatro constantes a, b, e y e, pero
si especificamos dos condiciones más contaremos con suficientes ecuaciones para determinar
las constantes. Estas condiciones surgen del requisito de que/" y/' sean continuas en cada
uno de los puntos. Si logramos esto, toda la curva será continua en la función ajustada, la
primera derivada y la segunda derivada.
La segunda derivada de la ecuación 9 .1.1 es

f"(t) = 2c + 6et (9.1.4)

que en los puntos i e i + 1 se convierte, respectivamente, en

f;" = 2c (9.1.5)
f;'.; 1 =2c + 6eh; (9.1.6)

donde/¡" y f;'.; 1 son valores de/" en i e i + 1, respectivamente, y que deberemos determinar.


Las dos ecuaciones anteriores pueden escribirse así:

e= f;"/2 (9.1. 7)
r" f;"
e=1;+1-; (9.1.8)
6h;

El coeficiente a ya está dado por la ecuación 9.1.2. El coeficiente b se detennina eliminando


a, e y e en la ecuación 9.1.3 mediante las ecuaciones 9.1.2, 9.1. 7 y 9.1.8,

(9.1.9)

Así, el polinomio cúbico de la ecuación 9 .1.1 está expresado por:

f; f; r" + 2 r" J /," f ;' J;" t3


f(t)=f;+ ,.~;- '_1;+1 6 :1; h; t+Tt2+~+~~j (9.1.10)
[

Diferenciamos la ecuación 9 .1.1 O e igualamos la primera derivada de f en t = O y t = h; a


f¡' y 1;:1 , respectivamente,
302 Capítulo 9 Funciones de splines e interpolación no lineal

f;' = - ~ ~~! + 2/¡" ) + ~¡ {f;+¡ -fi) (9.1.11 )

Ji+ 1= ~ ( 2/¡~¡ + 2/¡" ) + ~¡ {f;+ 1 - fi) (9.1.12)

Para el intervalo adyacente de s;-1 < s < s;, la ecuación 9 .1 .12 se convierte en

f' = h~1 ( 2/¡"+ /¡'.:.¡ ) + h:-1 ([;- fi- 1) (9.1.13)

donde h;-1 = x; - x;-1. Para que haya continuidad, la/¡' de la ecuación 9 .1.3 debe ser igual a la
de la ecuación 9 .1.11. Si eliminamos f;' de las dos ecuaciones tenemos
h;- 1/¡'.:_¡ + (2h;_¡ + 2h;)f;" + h/¡~¡

1 1 1
= 6 -fi-1-(-+-)fi
h;_¡ h¡_¡ h;
1
+-/¡+¡
h;
J (9.1.14)
(

donde toda la ecuación se multiplicó por 6.


Podemos escribir la ecuación anterior para todos los puntos excepto los dos extremos. Es
decir,/¡" hay n - 2 ecuaciones, mientras que el número de no detenninadas es n. Por tanto,
necesitamos dos ecuaciones para determinar todas las no determinadas /¡", y podemos
obtenerlas de las condiciones de frontera. A continuación explicamos tres formas de espe-
cificar condiciones de frontera en los extremos.

(a) Especificar enf;" los extremos: Si prescribimos los valores de/¡" en los dos extremos, i = l
e i = n, el conjunto de ecuaciones se convierte en

(2h1 + 2h2)f;' + h2f~'

= 6 ( ~lf¡-(~l + ~2 )Ji+ ~2/3 )-hif;'


h;- 1/¡~¡ + (2h;-J + 2h;)f¡" + h;f;~'¡

= 6 -1f i - 1 - (1- +-)/¡+-/¡+¡


1 1 J (9.1.15 )
( h;_¡ h;_¡ h; h;

=6(-h}fn- 2-(-h} +-hl )f11- I +-h}j,,)-h11-If~'


11-2 11-2 11-I 11-l

Las ecuaciones anteriores constituyen n - 2 ecuaciones para n - 2 incógnitas,/¡". Si


escribimos las ecuaciones en fonna de matriz, la matriz de coeficientes se convertirá en una
Sección 9.1. Interpolación de e-spline 303

fonna especial, llamada matriz tridiagonal, en Ja que todos los elementos son cero excepto por
las tres líneas diagonales. Aunque la ecuación puede resolverse mediante Ja solución estándar
para ecuaciones lineales, el método de resolución tridiagonal que se explica en la sección 11.3
es mucho más eficiente. Aunque en la mayor parte de las situaciones no se conocen las/" en
los extremos, podemos adoptar la estrategia de suponer/" =O en los extremos. Geométrica-
mente, esto equivale a suponer que la curva se convierte en una recta hacia los extremos.

(b) Extra/" polar desde dentro: La extrapolación de/;' a partir de/~ y J;' se escribe así:

! 1" = (1 + &)f"
h2 2
_&f"
h2 3
(9 .1. 16)

Si hacemos i = 2 en la ecuación 9 .1.14 y eliminamos con la ecuación 9 .1.16, obtenemos

(9.1.17)

La ecuación anterior sustituye a la primera ecuación de 9.1.15. Podemos escribir una


ecuación similar para el punto n - 1, que sustituye a Ja última ecuación de Ja ecuación 9.1.14.
El sistema de Ja ecuación tiene Ja misma fonna que la 9.1.15, con la excepción de unos cuantos
coeficientes. Por tanto, el conjunto de ecuaciones puede resolverse con el mismo método que
en (a).

(c) Condición de frontera cíclica: La condición de frontera cíclica se aplica si el primer dato
y el último son idénticos y las derivadas en estos puntos de datos también son idénticas. Esto
ocurre si el conjunto de datos completo representa un ciclo de una curva que se repite. Por
ejemplo, podemos ajustar con las condiciones de frontera cíclicas una curva cerrada en un
plano.

El comando de MATLAB interpl realiza una interpolación de e-spline (véase la


sección 4.1 ). Su sintaxis es

interpl(x,y,xi,'spline')

donde x y y son puntos de datos en fonna de vector y xi es un vector de abscisas para las cuales
se realiza la interpolación. Por tanto, el comando devuelve los valores y interpolados para xi.
No se requieren condiciones de frontera en el argumento, pero se supone la condición de
frontera tipo (b) que acabamos de explicar. Aunque el manual de referencia de MA TLAB no
explica esto, podemos verificarlo examinando el resultado de spline aplicado con un
conjunto de datos de prueba. Estos datos son:
304 Capítulo 9 Funciones de splines e interpolación no lineal

X [O, O. 5, 2' 3 . 5' 4)


y [O, 2, -2' 2' O)

A fin de encontrar la función spline para O ~ x ~ 4, también hacemos

xi= 1:0.05:4

que son mucho más finos que los datos de prueba. Denotamos Ja función de e-spline para xi
con yi. La segunda derivada de la función spline puede calcularse a partir de yi con la
aproximación de diferencia de segundo orden. En la figura 9.3 se grafican la función spline
(curva continua) y su segunda derivada (curva punteada) calculadas a partir de la función
spline. Observe que la segunda derivada es lineal entre x = O y x = 2, lo que abarca dos
intervalos de datos. Lo mismo sucede con los últimos dos intervalos. Esto no ocurriría si la
segunda derivada de cada extremo no se extrapolara linealmente en spline. En el listado 9.1
se presenta el guión utilizado para trazar la figura 9.3 .
Listado 9.1
c lear, c lf, hold o ff
x=0:4;
x(2) = 0.5; x(4)=3.5;x
y = [O 2 - 2 2 O)
xp=Q:0.0 5 :4; % puntos finos para lo s cua l es se
% cal c ulará la función spline
h = xp(2)-xp(l)
yp = spline(x,y,xp);
n=length(xp)
for i=2:n-1

2.5
o: puntos de datos - (2a. deriv.) por (1/10)
2

,.
,
, '
,..

-0.5

·1

·1.5

·2¡) 2 3 4
X

Figura 9.3 Investigación de B.C. (La spline BC


en MATLAB es extrapolación)
Sección 9.1. Interpolación de e-spline 305

ypd(i) = (yp(i - 1) - 2*yp(i) + yp(i+l))/h.2;


end
ypd(l)=ypd(2)*2 - ypd(3); % sólo para gráficos
ypd(n)=ypd(n-1)*2 - ypd(n-2); % sólo para gráficos
plot(xp,yp, xp,ypd/10, '--')
hold on
plot(x,y, 'o')
xlabel ('X')
ylabel ('Y')
set(gca, 'Fontsize', (18])
text(l,1.5, •e-spline', 'FontSize', (18])
text(0.3,2.3 'o: puntos de datos - - (2a. deriv.) por (1/10)', ...
'FontSize', (18])
Al igual que en la interpolación de Lagrange, los errores de la interpolación de e-spline
pueden presentar un comportamiento oscilatorio. Si es posible elegir libremente las abscisas
de los puntos de datos, conviene utilizar intervalos más pequeños cerca de los extremos y en
los puntos en los que la curvatura es elevada.

Ejemplo 9.1
Los puntos de datos de la figura 9.1 están dados por
XX =
[-1.0000 - 0.8660 -0.5000 - 0.0000 0.5000 0.8660
1.0000 1.0000 1.0402 1.1500 1.3000 1.5400
1.8280 2. 17 36 2.5883 3.0860]
yy =
[ 0.0000 - 0.2500 -0.4330 -0.5000 -0.4330 -0.2500
-0.0000 0.0000 0.1500 0.2598 0.3000 0.3000
0.3000 0.3000 0.3000 0.3000]
Detennine la función spline que se ajusta a los datos.
Solución
Utilizamos s como parámetro y ajustamos funciones spline por separado ax y y como
funciones de s. En el listado 9.2 se proporciona un guión, y en la figura 9.4 se muestra
el resultado.
Listado 9.2
clear, clf, hold off
XX = ...
(-1.0000 - 0.866 -0.5000 -0.0000 0.5000 0.8660 1.0000 ...
1.0000 1.0402 1.1500 1.3000 1.5400 1.8280 2.1736 ...
2.5883 3.0860]
yy = ...
(0.0000 -0.2500 -0.4330 -0.5000 -0.4330 -0.2500 -0.0000
0.0000 0.1500 0.2598 0.3000 0.3000 0.3000 0.3000
0.3000 0.3000]
s=l:length(xx) ;sp=l: (length(xx)/100) :length(xx);
xp=spline(s,xx,sp);
yp=spline(s,yy,sp);
306 Capítulo 9 Funciones de splines e interpolación no lineal

o
o.

...
o.
o --------0

-~1 -0.5 o 0.5 1.5 2 2.5 3 3.5



Figura 9.4 Curva de e-spline en el plano x-y

clg
plot(xp,yp); hold on
plot(xx,yy, 'o') ;xlabel('x'); ylabel('y');
hold off

9.2 8-SPLINE CÚBICA


La función b-spline consiste en polinomios fragmentarios determinados por una serie de puntos
de control, (s;,p¡), i = 1, 2, ... , n. La función b-spline basada en polinomios cúbicos se denomina
b-spline cúbica y pertenece a la familia de la e-spline que estudiamos en la sección anterior
pero con un carácter diferente. Llamamos a los (s;, p;) puntos de control, porque la b-spline no
pasa por ellos excepto en condiciones especiales. La función b-spline resulta útil para generar
curvas suaves en aplicaciones de diseño y gráficas en las que la impresión artística o una curva
agradable a la vista es más importante que un ajuste estricto. En el resto de esta sección
analizaremos la expresión matemática y el comportamiento de la b-spline cúbica.
Un segmento de la b-spline cúbica se determina con cuatro puntos de control consecutivos.
(s¡_¡,p¡-1), (s;,p;), (s;+1,p;+1) y (s¡+2,p;+2), mediante

f(s) = i[(l - t) 3 p;-1 + (3f - 6i2 + 4) p;

+(-3f + 3r + 3t + 1) p;+1 + fp;+2], O~ t ~ 1 (9.2.1


Sección 9.2. B-spline cúbica 307

6 Caso A 6 Casos
o
4 4
Va ~
2 2
o o o

ºo 2 4 6 ºo 2 4 6
8 8

6 CasoC 6 Caso O

4 o 4 o
~
v
2 2
o o

ºo 2 4 6 ºo 2 4 6
8 8

Figura 9.S Fragmentos de b-spline detenninados por cuatro puntos de control

donde t = s - Si es una coordenada local y Si= i. Paras =Si y s =Si+ 1 (o lo que es equivalente,
t =O y t = 1, respectivamente),/,/' y/" tienen los siguientes valores:

!(s,·) = pi-1 + 4pi +pi+ 1 /'(


6 '
·) =pi+ 1 - pi-1 /"( ·) =pi+ 1 - 2pi
s, 2 ' s, 2
+ Pi-1

(9.2.2)

. ) = pi-1 + 4p;+1 + p;+2 , /'(Si+I


!(Si+I . ) = p;+2 -p; /"( . ) = p;+2 -
2 , S1+I
2p;+1 +Pi
2
6

Las curvas b-spline cúbicas determinadas por cuatro puntos de control se ilustran en la
figura 9.5, donde se da as los valores 1, 2, 3 y 4 y los valores de p varían de un caso a otro.
Puede verse que/ (s) no pasa por los puntos de control en los casos A y B. Sin embargo, si tres
ordenadas consecutivas son idénticas, como en el caso C, o si las tres ordenadas consecutivas
cambian linealmente, como en el caso D, la curva pasa por el punto intermedio de los tres.
Si el número de puntos de control es mayor que 4, una serie de curvas b-spline cúbicas se
convierte en una sola curva, como se ilustra en la figura 9.6. Tanto la función b-spline como
su primera y su segunda derivadas se vuelven continuas.
La curva de la figura 9.6 no pasa por ninguno de los puntos de frontera. En cambio, si
repetimos/= 1 tres veces al principio de los puntos de control y repetimos/= 2 tres veces al
308 Capítulo 9 Funciones de splines e interpolación no lineal

o
6

o
9

-3

o
10

o o
3 7

Figura 9.6 Función b-spline detenninada por 1O puntos de control

final de los puntos de control, la curva satisfará estas condiciones de frontera, como se ilustra
en la figura 9.7. El guión utilizado para trazar la figura 9.7

Con 3 puntos repetidos en los bordes


6

5 o
6

"
-3

2 o o
10 11 12

o o o
1 2 3 7

?2 o 2 8 8 10 12 14
" 8

Figura 9.7 La función b-spline que satisface las condiciones de frontera


Sección 9.2. B-spline cúbica 309

se da en el listado 9.3.
Listado 9.3
clear; clg; hold off
f = [ 1 1 1 2 3 5 1 2 4 2 2 2 J; m = length(f)
s=l:m;
plot([-2 14), [O 6), '.'); hold on
xlabel('s'); ylabel('f'); plot(s,f, 'o')
far k=l:m
z=int2str (k); sk = s (k); fk=f (k); text (sk+O. 2, fk-0. 2, z)
end
t = o : o . 1 : 1; t2=t .• 2; t3=t .• 3;
far i=2:m-2
fb = 1/6*((1-t) .·3*f(i-1)+(3*t3 - 6*t2+ 4)*f(i) +
(-3*t3+3*t2 + 3*t + l)*f(i+l) + t3*f(i+2));
plot(s(i)+t,fb)
end
title(' Con 3 puntos repetidos en los bordes')

La regla de repetir las mismas ordenadas tres veces también se aplica a un punto de con.trol
en la parte media. Es decir, si la curva debe pasar por un punto de control que está en la parte
media, repetimos ese punto tres veces en el vector de puntos de control.
Ahora aplicaremos la b-spline cúbica en el plano x-y. Los puntos de control están dados
por
(x,y): (0,0), (0.2,1), (1,1), (2,0), (2.8,0), (3,1)

Supongamos que la curva debe pasar por el primer punto (o , o) y también por el último
( 3 , 1) . Cada x y y debe detenninarse como una función del parámetro s. Por tanto, los puntos
de control del espacio s-x y los del espacios-y, se igualan a

s = (1, 2, 3, 4, 5, 6, 7 / 8, 9, 10)
X = (O o, o, o. 2, 1, 2 / 2.8,3, 3, 3)
I

s = ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
y (O, o, o, 1, 1, o, o, 1, 1, 1)

El valor x=o y y=o se repite tres veces al principio de los vectores de puntos de control,
mientras que x=3 y y=1 se repite tres veces al final de dichos vectores. El trazado de la curva
en el plano x-y se muestra en la figura 9.8. Observe que la curva pasa por x=y=o en el extremo
izquierdo y por x=3 y y=1 en el derecho. El guión para trazar la figura 9.8 se presenta en el
listado 9.4.
Listado 9.4
Clear; clg; hold off
y = [O O O 1 1 O O 1 1 l];
X= [O O O 0.2 1 2 2.8 3 3 3];
m = length(y); plot( [-1 4], [-1 2], ' . ' ) ; hold on
xlabel('x'); ylabel('y'); plot(x,y,'o')
for k=l:m
310 Capítulo 9 Funciones de splines e interpolación no line

Curva b-apline cúbica en el plano x·y

8,9, 10

,.. 0.5

o 08 07

·0.6

·!,---~o---~---2~--~3--~.

Figura 9.8 La curva b-spline que pasa por los dos extremos

z=int2str(k); xk = x(k); yk=y(k); text(xk+O.l,yk,z)


end
t = 0:0.2:1; t2=t.•2; t3=t.•3;
far i=2:m-2
yb = 1/6*((1-t). •3•y(i - l) + (3*t3-6*t2+4)*y(i) + ...
(-3*t3 + 3*t2 + 3*t + 1 ) *y (i+l) + t3 *y (i+2));
Xb = 1 / 6 * ( ( 1 - t ) . • 3 *X ( i -1 ) + ( 3 * t 3 - 6 * t 2 + 4 ) *X ( i ) +
(-3*t3 + 3*t2 + 3*t + l)*x{i+l) + t3*x{i+2));
plot(xb, yb)
end
title(' Curva b-spline cúbica en el plano x - y ')

Ejemplo 9.2
El archivo de datos car . da t especifica un perfil de vista lateral de un automóvil.
Grafique los datos sin modificación alguna. Luego, suavice el perfil con b-spline.

Solución
Los dos perfiles trazados por el listado 9.5 se muestran en la figura 9.9.
Listado 9.S
clear, clf, hold off
load car.dat
Sección 9.2. B-spline cúbica 311

Graficación del perfil

Graficación con b·spline

Figura 9.9 Perfiles de un automóvil antes y después de usar b-spline

x=car ( : , 1) ' ; y=car ( : , 2) ' ;


subplot(2,l,l)
hold on
plot(x,y) % trazado del perfil del auto
dth=pi/10;
th=O:dth:2*pi; xt=l.2*cos(th); yt=l.2*sin(th);
plot(xt+3.7, yt+0.45) % rueda delantera
plot(xt+l4.3, yt+0.45) % rueda trasera
title('Trazado del perfil de diseño burdo')
axis( (-0,20, -0.9,6.0)); axis('off')
disp 'Pulse return para trazar el perfil ya suavizado'
pause
subplot(2,l,2)
hold on
m = length(y); plot( (-1 4), . (-1 2), '.');
X = [X ( 1 ) , X, X ( m) l ; y= [y ( 1 ) , y , y (m) l ;
m=length (x) ;
t = 0:0.25:1; t2=t.·2; t3=t.•3;
for i=2:m-2
yb = 1/6*((1-t) .·3*y(i-l) + (3*t3-6*t2+4}*y(i) + ...
(-3*t3 + 3*t2 3*t + l)*y(i+l) + t3*y(i+2} ) ;
xb = 1 j 6 * ( ( 1 - t ) . • 3 *X+ ( i -1 ) + ( 3 * t 3 - 6 * t 2 + 4 ) *X ( i ) + . . .
(-3*t3 + 3*t2 + 3*t + l}*x(i+l} + t3*x{i+2} ) ;
plot (xb, yb)
end
plot(xt+3.7, yt+0.45), plot(xt+l4.3, yt+0.45) % ruedas
title('Trazado después del ajuste con b-spline'); hold off
314 Capítulo 9 Funciones de splines e interpolación no lineal

o si dividimos todo entre exp(bx1),

exp{b(x2 -x1)} -1 _ exp{b(x3 -x1)} -1


(9.3.6)
Ji-f¡ - f3-f¡
La constante b se determina resolviendo la ecuación no lineal anterior con uno de los métodos
descritos en el capítulo 7. Una vez conocida b, se evalúa a con la ecuación 9.3.3 y e con una
de las ecuaciones de la ecuación 9.3.2; por ejemplo,

e= f¡ - a exp(hx1) (9.3. 7)

Ejemplo 9.4
Una barra de longitud L debe cortarse en siete secciones tales que los tramos cambien
monotónica y suavemente de una sección a la siguiente. La primera sección debe ser
1112 de la longitud total L. Determine la longitud de cada sección.

Solución
El problema puede enunciarse como sigue: Detennine una función continua y mono-
tónica
f(s)IL =a exp(hs) +e (A)

dondes es un parámetro que satisface O~ s ~ 7,/ es la longitud de la barra medida


desde el extremo izquierdo, de modo que para s = 7, fes igual a L; a, b y e son
constantes no determinadas. Resumimos las condiciones de/así:

s=O:/(O)=O
s = 1:/(1) = L/12 (B)
s = 7:/(7) =L
La sustitución de las tres condiciones anteriores en la ecuación 9.3.1 produce
a+c=O
a exp(b) +e= 1112 (C)
a exp(7 b) + e = 1

La eliminación de a y e produce

exp(b)- 1 = ( b)- 1
1112 exp 7 (D)

Aplicando la iteración de Newton, vemos que bes 0.16229, así que


Sección 9.3. Interpolación con una función no lineal 315

a=0.472931, b =0.16229, c=--0.472931 (E)


La función exponencial detenninada se grafica en la figura 9 .12. La longitud de cada
segmento es la siguiente:
Sección# Longitud relativa
1 0.083333
2 0.098017
3 0.115288
4 0.135602
5 0.159496
6 0.187601
7 0.220657

0.9
.g
"'0.8
N

E o.7
g06
~
'i 0.5
"5
~ 0.4
"O 0.3
.~
g>o2
.3
0.1 ----

2 3 4 5 6 7
Número de S"ección
Figura 9.12 Graficación de/

Listado 9.6
% Guión para graficar la figura 9.12
clear, hold off, clg
b 0.162294
e= 1/12/(1- exp(b))
a = -e
X= 0:0.1:7;
y a*exp(b*x) + e;
plot(x,y)
xlabel (' s')
ylabel('f(s)/L')
yl = a*exp(b) + e
hold on
plot([l,1], [O,yl), '--')
plot([O,l], [yl,yl], '--')
316 Capítulo 9 Funciones de splines e interpolación 110 lineal

Ejemplo 9.5

Ajuste la función
y= ae-yx + beyx +e

a los siguientes datos:


xl =O, x2 = 0.01, x3 = 0.95, x4 1
yl =o, y2 = 0.01, y3 = 0.8, y4 1

donde a, b, e y y son constantes no detenninadas.

Solución
Primero definimos
f(x) = ae-yx + beyx +e-y (A)

Si escribimos la ecuación (A) para cada punto de datos, obtenemos cuatro ecuaciones:

f¡=.f(x1) =a + b + e= O
h = f(x2) = ae--0.0ly + be o.Oly + e - O.O 1 = O
h =f(x3) = ae--0.95Y + be º· 95Y + e - 0.8 = O
fa= f(x4) = ae-y +he Y +e - 1 = O
Las ecuaciones anteriores, cada una de las cuales puede considerarse como una
función de a, b, e y y, pueden escribirse así:

fi (a + ba, "b + M, e + be, y+ by) = O,


/\ /\ /\
k = 1~ 4 (B)

y
donde ~. b, ~ y son estimaciones, en tanto que ba, bb, be y by con correcciones
desconocidas, y a = ~ + ba, h = b + M, e = ~ + be y y = ~ + by. Suponiendo que las
correcciones son pequeñas, la aproximación de primer orden (empleando la expansión
de Taylor) puede escribirse así:

La ecuación (C) puede resolverse como un sistema lineal, después de lo cual la


solución se actualiza con a=~+ ba, b = b + bb, e = ~+ be y y= y+ by. El proce-
dimiento se repite utilizando a, b, e y y como nuevas estimaciones hasta que oa, Ob,
be y by se vuelven todas cero.El problema se resuelve con el guión que sigue. La
función detenninada se graficó en la figura 9.13.
Sección 9.3. Interpolación con una función no lineal 317

0.9

0.8

0.7

0.6

>-0.5

0.4

0.3

0.2

0.1

ºo 0.2 0.4 0.6 0.8

Figura 9.13 Función no lineal correspondiente a cuatro puntos de datos

Listado 9.7
clear, clf, hold off
a=l;
b=l;
c=l; g = 1;
xl = 0.01; yl 0.01; x2 0.95; y2 0.8;
for it = 1:20
A=zeros(4);
A ( 1 , 1) =1; A ( 1, 2) =1; A ( 1, 3) =1; A ( 1, 4) = O;
y(l) =-(a+ b +e);
A(2,1) = exp(-g*xl); A(2,2) = exp(g*xl); A(2,3)=1;
A(2,4) = a*(-xl)*A(2,l) + b* (xl)*A(2,2);
y(2) = -(a*A(2,l) + b*A(2,2) +e - yl);
A(3,1) = exp(-g*x2); A(3,2) = exp(g*x2); A(3,3)=1;
A(3,4) = a*(-x2)*A{3,1) + b*{x2)*A{3,2);
y(3) = -(a*A(3,l ) + b*A(3,2) +e - y2);
A(4,1) = exp(-g); A(4,2) = exp(g); A(4,3)=1;
A(4,4) = a*(-l)*A(4,l) + b*(l)*A(4,2);
y(4) = - {a*A{4,1) + b*A{4,2) +e - 1) ;
da=A\y'
a= a+da(l); b = b+da(2); c=c+da(3); g=g+da(4);
if s um(abs(da)) < 0.00001, break;end
end
X =0.0.05:1;
yy = a*exp{-g*x) + b*exp(g*x) + e;
clg
plot (x,yy)
ylabel('y'), xlabel('x')
318 Capítulo 9 Funciones de splines e interpolación no lineal

Si necesitamos dividir una longitud en un número especificado de segmentos tales que la


longitud del primer y último segmento estén prescritas y pese a ello las longitudes de los
segmentos cambien de un extremo al otro de la forma más gradual posible podemos utilizar la
1
función de estiramiento de Vinokur, cuyo algoritmo es el siguiente:
Consideremos un arco de longitud L. Un punto en el arco está determinado por la longitud
del arcos desde un extremo. Suponga también que se desea distribuir un total de n puntos a lo
largo del arco, con uno en s = O y otro en s = L. Suponemos que los puntos están numerados
con el índice i y que el valor de s en los puntos está denotado por s;, con i = 1, 2, ... , n. Si el
incremento deseado des entre i = 1 e i =2 es igual a Asa, mientras que la longitud deseada entre
i = n -1 e i = n es igual a A..vh, entonces los valores des; estarán determinados por
Lu;
s;=-----
A+(l-A)u;

donde
¡
d .=0 5 1 +
u, ·
tan~ f> ( ~ -
tanh(f>/2)
o.s)J]

En las ecuaciones anteriores satisface

senh(f>) =Bf>

con
B= L
(n - 1)./ A..vaA..Vh

Las ecuaciones anteriores se caluclan con stret_, que está listado como FM 9-2. Suponga
que quiere dividir una línea de longitud unitaria en 19 intervalos, el primero de los cuales debe
tener aproximadamente 0.01 de largo, y el último, aproximadamente 0.02. Entonces,
x = stret_(20, 1, 0.01, 0.02)

produce
X =
o 0.0117 0.0277 0.0491 0.0776 0.1147 0.1620
0.2206 0.2907 0 . 3711 0.4587 0.5495 0.6385 0.7212
0.7942 0.8560 0.9064 0.9462 0.9768 1.0000

Las longitudes de los segmentos se grafican en la figura 9.14.

1
M. Vinokur, "On the Stretching Functions for Finite-Difference Calculations'', J. Comput. Phys., SO, 215
(1983)
Sección 9.3. Interpolación con una función no lineal 319

0.1

0.09
- - -
0.08 - -
~ 0.07 - ~

~0.08 - -
:
..,..,
~
.. 0.05

0.04
-
- -
-
"g>
o
...J
0.03 - --
0.02 -
0.01
n[ 6 8 10 12 14 16 18 20
Longitud de número

Figura 9.14 Longitudes de segmentos detenninadas por la función de estiramiento

Ejemplo 9.6

Se dan los siguientes puntos a lo largo de la superficie superior de un prototipo de ala:


x_af=[l.0000 0.6638 0.4397 0.2900 0.1896 0.1221
0.0765 0.0455 0.0243 0.0099 o l
y_af=[o.0021 0.0668 0.0939 0.1000 0.0946 0.0836
0.0705 0.0569 0.0431 0.0282 o l

Estos puntos comienzan en el borde saliente y están en orden contrario al giro de


las manecillas del reloj. La longitud de la cuerda del ala se iguala a la unidad
(adimensional). El fabricante desea dividir la superficie superior dedl ala en 15
intervalos de modo que la longitud de arco del intervalo que está en el borde de ataque
sea de 0.05 y la longitud del intervalo en el borde de salida sea de aproximadamente
0.1; la longitud de arco de los segmentos debe cambiar lo más gradualmente posible.
Determine los puntos en que el ala se corta en fragmentos e indique la ubicación de los
cortes en una gráfica del perfil del ala. Suponga que el ala es simétrica alrededor de la
cuerda.
Solución
Aunque sólo se dan puntos de datos para la superficie superior, podemos graficar todo
el perfil porque el ala es simétrica. La figura 9.15 ilustra el ala con puntos de datos a
lo largo de la superficie superior. A continuación se calculan las longitudes de arco en
los puntos medidos a partir del borde de salida. Las coordenadas x y y se expresarán
como funciones de la longitud del arco s. La longitud de arco total desde el borde de
320 Capítulo 9 Funciones de splines e interpolación no linea

o: puntos de datos dados

x: puntos para cortar la superficie

Figura 9.15 Perfil del ala

salida hasta el borde de ataque se denotará por L. Las longitudes de arco que satisfacen
las necesidades del fabricante se detenninan con s tr et , que divide la longitud Len
15 segmentos. Las coordenadas, X y y, de los puntos sedeterminan por e-spline. El
listado 9.9 es un guión que realiza los cálculos.
Listado 9.9
clear,clf
x_af=[l.0000 0.6638 0.4397 0.2900 0.1896 0.1221
0.0765 0.0455 0.0243 0.0099 o l;
y_af=[0.0021 0.0668 0.0939 0.1000 0.0946 0.0836
0.0705 0.0569 0.0431 0.0282 o l;
m=length(x af);
x = [x af,-x af(m-1:-1:1)); % Perfil completo del ala
y= [y-af, -y af(m-1:-1:1));
plot(x-;-y+0.3)-
hold on
plot(x af,y af+0.3, 'or')
ax i S ( e= o • 1 , -1 • 1 o •6 o •6 ) )
I - I

n=length(x);
arc(l}=O; % longitud de arco medida desde borde de salida
far i=2:n
are ( i) =are ( i - 1) +sqr t ( (x ( i) - x ( i-1) ) • 2 + (y ( i) -y ( i-1) ) • 2) ;
end
L = are (m);
s = stret (15+1, L, 0.02, 0.02);
xcut=interpl(arc, x, s, 'spline'); % e-spline
ycut=interpl(arc, y, s, 'spline'); % e-spline
plot (x,y-0.3)
plot(xcut,ycut-0.3, 'x')
ax i s ( [ - o . 2 1 . 1
I o.6 o.6 l )
I - I

text(O, 0.1, 'o: puntos de datos dados', 'Fontsize', (18))


Sección 9.4. Archivos M 321

text(0,-0.5, 'x: puntos para cortar la superficie', 'Fontsize•, (18])


axis ( ' off ' )

El arco del ala con los puntos determinados es la segunda gráfica de la figura 9.15.

9.4 ARCHIVOS M
FM 9-1 Juego de rueda de alfarero
Objetivo: Reunir datos de puntos, ajustarlos por b-spline y dibujar una vasija de cerámica
Sintaxis: k _ whee l. Siga las instrucciones de la pantalla.

k wheel.m
% simulación de rueda de alfarero
clear; clg; hold off
axis((O, 1.25, o, 1.2])
text (1. 02, 1.14 ,'Haga clic aqui ','Color', 'r')
text(l.02,1.09,'para terminar' ,'Color', 'r')
hold on
axis('off')
plot((l,1.25,1.25,1,1], (1,1,1.2,1.2,1])
plot((0,1,1,0,0], (0,0,1,1,D])
text(0,1.2, 'Haga clic en varios puntos del cuadro de abajo.', ...
'Color· , 'g •)
text(0,1.15,'Luego haga clic una vez en el cuadrito de la derecha', ...
'Color' ' 'g' )
text(D,1.10,'Siga las instrucciones de la pantalla de comandos.', ...
'Color', 'g')
for n=l:lOO
(xg,yg] = ginput(l);
i f xg>0.99 & yg>0.99, break; end
x(n)=xg; y(n)=yg;
text(x(n) ,y(n), 'x')
end
m = length (y) ;
xlabel('x'); ylabel('y'); plot(x,y,'o')
f or k=l:m
z=int2str(k); xk = x(k); yk=y(k); text(xk+0.1,yk,z)
end
~ = 0:0.25:1; t2=t.•2; t3=t .• 3;
: t = length(t); ltm=lt - 1;
r s= ( ] ; z s= ( l ;
:or i=2:m-2
yb 1/6* ( (1-t) .• 3*y (i-1) + (3*t3-6*t2+4) *y (i) + ...
(-3*t3 + 3*t2 + 3*t + l)*y(i+l) + t3*y(i+2));
xb 1 / 6 * ( ( 1 - t ) . • 3 *X ( i - 1 ) + ( 3 * t 3 - 6 * t 2 + 4 ) *X ( i ) + . . .
322 Capítulo 9 Funciones de splines e interpolación no linea

(-3*t3 + 3*t2 + 3*t + l)*x(i+l) + t3*x(i+2));


plot(xb,yb)
rs = [rs,xb(l:ltm)];
zs = [zs,yb(l:ltm)];
end
r s= [ r s, xb (1 t) ] ;
. zs=[zs,yb(lt)];
title(' Curva b-spline cúbica en el plano x-y ')
fprintf('Pulse RETURN para continuar')
pause
clg
dth=pi/10;
th=O:dth:2*pi;
far i=l:length(th)
zz(i, :}=zs;
xx(i,: }=rs.* (cos(th(i)) + 0*0.2*cos(5*th(i)));
yy ( i, : ) =r s. * (sin ( th ( i 1) + o* o . 2 *sin ( 5 * th ( i) ) ) ;
end
mesh(xx,yy,zz,zz)
colormap default
caxis([-0.5, 1.5))
shading interp
fprintf ('Pulse RETURN para continuar')
pause
sur f 1 (xx , yy , z z , [ 3 O, 3 o] )
fprintf('Pulse RETURN para continuar')
pause
caxis( (-1,3))
fprintf('Pulse RETURN para continuar')
pause
clg
colormap default
[nx,ny,nz] =surfnorm(xx,yy,zz);
r=specular (nx,ny,nz, [30,30), [50,10));
r=diffuse(nx,ny,nz, [-50,10]);
surface(xx,yy,zz,r*0.3+0.l*zz)
view( [-30,30])
shading interp
colormap jet
caxis ((-o, l])
pause
clg

FM 9.2 Estiramiento y agrupamiento


Objetivo: distribuir puntos con estiramiento y agrupamiento
Sintaxis: stret (n,L,dsO,dsl)
n: número total de puntos incluidos los extremos
L: longitud total
dso: tamaño deseado del primer intervalo
dsl: tamaño deseado del último intervalo
Ejemplo:stret_(20,1,o.01,. 0.1)
Sección 9.4. Archivos M 323

stret .m
% Distribución de puntos con función de estiramiento
function s=stret (n,L,dsO,dsl)
A=sqrt(dsl/dsO) ;-
B=L/(n-1) /sqrt(dsO*dsl);
if (B<l.O), fprintf('B es menor que 1') ,pause; end
DL= del ta (B) ;
if DL==O,-return, end
for I=l:n
X=DL*(I-1)/(n-l) - .S*DL;
U=.S*(l+tanh(X)/tanh(DL/2.));
s(I)=U*L/( A+ (1.-A)*U);
end

delta .m
% Resuelve sinh(delta)=B*delta por iteración de Newton
function DELTA = delta (B)
i f (B<l. O), -
fprintf('B ES MENOR QUE l. PROGRAMA DETENIDO EN SUB. DELTA')
B=O.O;
return
end
DELTA=O;
K=O;
X=sqrt(6*B-6.);
XB = O;
x=6.0;
if (B< 3) x=B; end
if (B>=3 & B< 80) x=7. ;end
if (B>=BO & B<lOO) x=7.3;end
if (B>=lOO & B<200) x=B. ;end
if (B>=200 & B<300) x=B.65;end
if (B>=300) x=B.86;end
X = x;
flag = o;
while abs (X-XB)>O.OOOOOl*abs(X),
XB=X;
XP = exp(X);
XM=l. /XP;
F=XP-XM - B*2.0*X;
FD=XP+XM - B*2.0;
X = XB-F/FD;
K=K+l
i f (K>40)
fprintf(' LÍMITE DE ITERACIONES EXCEDIDO. PARÓ EN SUB.
DELTA')
flag = l;return
end
if flag==l; return ,end
end
DELTA=X;
324 Capítulo 9 Funciones de splines e interpolación no linea

PROBLEMAS
(9.1) Determine la curva e-spline que pasa por los siguientes puntos utilizando las condiciones de
extrapolación de frontera. Grafique la curva con los puntos de datos:
x: o -0.5 o 1 2 3 3.5 3
y: o 1 2 2 2 2 1 o
(9.2) Determine una curva e-spline cerrada que pase por los siguientes puntos. La curva debe ser
continua en los extremos. Trace la curva con los puntos de datos:
x: o 1 2 3 3.5 3.7 3.5 3 2 1 o
y: o 1 1.5 1.5 1 o -1 - 1. 5 - 1.5 -1 o
(9.3) Determine una curva b-spline utilizando los siguientes puntos de control. Grafique la cul"\a
con los puntos de datos:
x: o o 1 1 2 2 4 4
y: o 1 1 0.5 0.5 2 2 o
La curva debe pasar por los extremos de los datos anteriores.
(9.4) Determine la función

.f(x) =a exp(hx) +e
que pasa por
x: o 1 5
y: o 2 4

(9.5) La vasija de la figura 9.11 tiene un agujero como el de una maceta, el cual puede verse si -
utiliza un ángulo de perspectiva distinto. Explique cómo podría cerrar el agujero.

(9.6)
Determine la función
y= ae-yx + heyx + e

que pasa por


x: o 1 4 5
y: o 0.5 3.5 4

(9. 7) Divida una barra de longitud unitaria en 11 segmentos tales que la longitud del pri1
segmento sea de 1/20 y la del último 1/15. Las longitudes de los segmentos deben variar .
más gradualmente posible. Determine la longitud de los 11 segmentos con s tret_.
Capítulo 1O

Problemas de valor inicial de


ecuaciones diferenciales ordinarias

El comportamiento dinámico de los sistemas es un tema importante. Un sistema mecánico


plica desplazamientos, velocidades y aceleraciones. Un sistema electrónico implica voltajes,
orrientes y derivadas respecto al tiempo de estas cantidades. En general, las ecuaciones que
" utilizan para descri~ir Ja dinámica incluyen incógnitas tales como desplazamiento o
rriente eléctrica y sus derivadas.
Una ecuación en Ja que intervienen una o más derivadas ordinarias de Ja función
cógnita se denomina ecuación diferencial ordinaria y se abrevia EDO. El orden de Ja
uación está detenninado por el orden de la derivada más alta. Por ejemplo, si la primera
""'nvada es la única derivada, se dice que la ecuación es una EDO de primer orden. Igualmente,
a más alta derivada es Ja de segundo orden, Ja ecuación es una EDO de segundo orden.
Los problemas de resolución de EDO se clasifican en problemas de valor inicial y
rob lemas de valor en la frontera, dependiendo de cómo se especifican las condiciones en los
xtremos del dominio. Todas las condiciones de un problema de valor inicial se especifican en
1 punto inicial. Por otro lado, el problema se convierte en uno de valor en la frontera si las
ndiciones se extienden entre los puntos inicial y final. Las EDO en el dominio del tiempo
- n problemas de valor inicial, así que todas las condiciones se especifican en el momento
icial, como t =O. El tema de este capítulo es la resolución de problemas de valor inicial; los
e valor en Ja frontera se tratarán en el siguiente capítulo.

10.1 EDO DE PRIMER ORDEN


E problema de valor inicial de una EDO de primer orden puede escribirse en Ja fonna

y'(t) = f(y, t), y (O) =yo (10.1.1)

def (y, t) es una función de y y t, y la segunda ecuación es una condición inicial sin la cual
es posible determinar Ja solución. En la ecuación anterior, la primera derivada de y se da en

325
326 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

función de y y t, y queremos calcular la función desconocida y integrando numéricamente


f (y, t). Si/fuera independiente de y, el cálculo sería una de las integraciones directas que vimos
en el capítulo 5. El hecho de que/ es función de y hace que la integración sea distinta. Si/ es
una función lineal de y, por ejemplo

f=ay+b

donde a y b son constantes o funciones de t, la ecuación 10.1.1 es una EDO lineal. Si/es una
función no lineal de y, la ecuación es una EDO no lineal. Es posible encontrar la solución
analítica de algunas EDO, pero la mayor parte de las EDO no lineales carecen de solución
analítica. Ésta es una de las razones por las que los métodos numéricos son importantes.
Podemos resolver incluso las EDO lineales con métodos numéricos, sobre todo cuando las
EDO están acopladas.
Es de esperar que el lector ya haya trabajado con ecuaciones diferenciales. Para quienes
se encuentran con ellas por primera vez, ilustramos a continuación deducciones de algunas
EDO.

Ejemplo 10.1

El carbono 11 es un radioisótopo que se desintegra a razón de 3.46 %/min, lo que


equivale a una vida media de 20 minutos. La rapidez de desintegración se expresa
mediante la llamada constante de desintegración, A.= 0.0346 min- 1 A.= 2.076 s- 1• La
densidad de número atómico inicial en t = O está dada por No átomos/cm 3. Deduzca
una ecuación diferencial para la densidad de número atómico.

Solución
Si denotamos la densidad de número atómico a los t s por N(t), N(t + dt) será

N(t + dt) = N(t)- A.N(t)dt (A)

donde dt es un intervalo de tiempo infinitesimalmente corto. La ecuación anterior


puede escribirse así:

~~ = -AN(t) (B)

con la condición inicial

N(O) =No

donde No es la densidad de número atómico en t =O.


Comentario: La ecuación (B) es una de las EDO más sencillas; su solución analítica está dada
por N(t) • exp(-A.t)No. En la práctica no hay necesidad de resolver la ecuación (B) numérica-
Sección 10.1. Edo de primer orden 327

mente; sin embargo, a menudo utilizaremos ecuaciones de este tipo para investigar la
exactitud de los métodos numéricos.

Ejemplo 10.2

Un paracaidista de masa M kg salta desde un avión en t = O. Suponemos que la


velocidad vertical inicial del paracaidista es de cero en t = Oy que la caída es vertical.
Si el arrastre aerodinámico está dado por Faire = Cv2, donde Ces una constante y ves
la velocidad vertical (positiva hacia abajo), deduzca una EDO para detenninar la
velocidad vertical del paracaidista.

Solución
Si aplicamos la primera ley de Newton, el equilibrio de fuerzas satisface

M dv(t)
d ---Fm,.+
.
gM (A)
t
donde v es la velocidad del paracaidista en m/s (positiva hacia abajo) y g es la
aceleración debida a la gravedad, 9.8 m/s 2. La ecuación (A) puede escribirse así:

d~t) = - z v2 + g, v(O) = O (B)

o, lo que es lo mismo,

v' = f(v,t), v(O) =O (C)

con
f(v,t) =- s~b Mv2 + g (D)

Comentario: La ecuación puede reescribirse en términos de y(t), que es la distancia recorrida


por el paracaidista en su caída. La relación entre la velocidad y la altura es v "' y'. Si
sustituimos esto en la ecuación (B) tenemos

d2v<..t>
~--y'2+g e
dt2 M
que es una EDO de segundo orden con condiciones iniciales y (O)= O y y '(O)= O.

Ejemplo 10.3

Considere el circuito eléctrico que se muestra en la figura 10.1. El interruptor está


cerrado en t = O. Escriba una ecuación para la corriente i(t).

Solución
La primera ley de Kirchhoff dice que el total de los voltajes en un circuito cerrado es
cero; es decir,
328 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

l
l(t) -

_[
L_
R

s Figura 10.1 Circuito eléctrico

EL+ ER +Es= O (A)

donde Es es el voltaje de la fuente y puede depender del tiempo, Eres el voltaje a través
del inductor y ER es el voltaje a través del resistor. Los voltajes Er y ER están dados,
respectivamente, por

Er =-Ldl(t)
dt
ER = - Rl(t)

donde L es la autoinductancia y R es la resistencia. Por tanto, la ecuación (A) se


convierte en

(B)

La ecuación anterior es una EDO de primer orden y su condición inicial es 1(0) =O.

10.2 MÉTODOS DE EULER


Los métodos de Euler son procedimientos sencillos para resolver EDO de primer orden que se
pueden programar con gran fac ilidad precisamente por su sencillez, si bien su exactitud no es
muy alta. Los métodos de Euler incluyen tres versiones, a saber, (a) hacia adelante, (b
modificado y (c) hacia atrás. Estudiaremos estos métodos principalmente para entender los
conceptos básicos de la resolución numérica de problemas de valor inicial.
Sección 10.2. Métodos de Euler 329

10.2.1 Método de Euler hacia adelante


El método de Euler hacia adelante para y' =f (y, t) se deduce reescribiendo la aproximación
de diferencia hacia adelante,

(y,,+1 -y,,)/ h "'y;, (10.2.1)

así:
Y11+I =y,,+ ~f(y,,,t,,) (10.2.2)

donde utilizamos y,; = f(yn.t,,). A fin de avanzar en incrementos de tiempo, aplicamos


recursivamente la ecuación 10.2.2 así:

y1 =yo+ hyó= yo+ lf(yo,to)


)'2= YI + hf(y1,t1) '
Y3 = y2 + ~f (y2,t2) (10.2.3)

Y11 = Y11-I + lf (y,,-1,ln-I)

Ejemplo 10.4

Encuentre la velocidad del paracaidista del ejemplo 10.2 y grafique la solución para t
~ 20 s después de que el paracaidista salta del avión. Suponga M = 70 kg y C = 0.27
kg/m. Utilice h = 0.1 s.

Solución
El siguiente guión resuelve la ecuación (C) del ejemplo 10.2 por el método de Euler
hacia adelante:
Listado 10.1
clear, clf, hold off
t = O; n=O; v=O;
C = 0.27; M = 70; g = 9.8; h 0.1;
t rec(l)=t; v rec(l) = v;
while t<=20,
n=n+l;
V= V+ h*{-C/M*v*v + g);
t = t+h;
v rec{n+l) v;
t-rec(n+l) = t;
end
plot(t_rec, v rec)
330 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

xlabel('tiempo (s) ')


ylabel('velocidad (m/s) ')

Los resultados aparecen en la figura 10.2.

50

40

10 12 14 18 18 20

tiempo {s)

Figura 10.2 Velocidad del paracaidista

Ejemplo 10.5

(a) Resuelva

y, = f(y,t), y (0) = 5 (A)

donde

J(y,t) = -20y + 7exp(--0.5t) (B)

utilizando el método de Euler hacia adelante con h = 0.01 para O< t ~ 0.02. Haga los
cálculos de esta parte a mano.
(b) Repita para O< t ~ 0.1conh=0.01, 0.001y0.0001paraO~+~0.1 utilizando
MA TLAB. Evalúe los errores de los tres cálculos comparándolos con la solución
analítica dada por .
y= 5e-20t + (7 - 19.5) (e--0.St - e-20t) (C)

Solución
(a) Los primeros dos incrementos de tiempo de los cálculos con h = 0.01 son
Sección 10.2. Métodos de Euler 331

to= O, yo= y(O) =O


!1=0.01, y1 =yo+ hyó = 5 + (0.01) (-20(5) + 7 exp(O)) = 4.07
t2 = 0.02, Y2 = y1+hy;=4.07 + (0.01) (-20(4.07) + exp(-0.01))
= 3.326
(b) En la tabla que sigue se muestran los resultados de los cálculos para valores
selectos de t con tres valores distintos de h:

t y(t) y porcentaje de error entre paréntesis


h=0.01 h=0.001 h=0.0001
0.01 4.07000 (8. 71 O) 4.14939 (0.771) 4.15634 (0.076)
0.02 3.32600 (14.099) 3.45438 ( 1.261) 3.46574 (0.125)
0.03 2.73080(17.117) 2.88650 ( 1.54 7) 2.90044 (0.153)
0.04 2.25464 (18.474) 2.42251 ( 1.687) 2.43771 (0. 167)
0.05 1.87371 (18.693) 2.04339 ( 1. 725) 2.05893 (0.171)
0.06 1.56897 ( 18.158) 1. 73362 ( 1.693) 1. 74887 (0.168)
0.07 1.32518(17.150) 1.48052 ( 1.616) 1.49507(0.161)
0.08 1.13014(15.868) 1.27372 (1.510) 1.28732 (0.150)
0.09 0.97411 (14.453) 1.10474 (1.390) 1.11726 (0.138)
0.10 0.84929 (13 .002) o. 96668 ( 1.263) 0.97805 (0.126)

Comentario: La exactitud del método de Euler hacia adelante aumenta al reducirse el tamaño
del incremento h. Se observa que la magnitud de los errores es aproximadamente propor-
cional a h. Los errores (en porcentaje) se deben al truncado asociado al método de Euler hacia
adelante. Pese a ello, no resulta provechoso reducir más h, porque el tiempo de cálculo
aumenta demasiado y puede aumentar el error de redondeo. 1

Aunque el método de Euler hacia adelante es sencillo, debemos tener cuidado al emplearlo
porque implica dos tipos de errores. El primero es el error de truncado que se mencionó en el
ejemplo 10.5; el segundo es la inestabilidad, la cual se presenta cuando la constante de tiempo
de la ecuación es negativa (la solución tiende a cero si se elimina la fuente) pero el incremento
de tiempo h no es lo suficientemente pequeño. Una ecuación típica con constante de tiempo
negativa es y'= ay, con y(O) =yo> O y ex< O (véase el ejemplo 10.1). La solución exacta es
00
y= yoe • El método de Euler hacia adelante para este problema es

Y11+I = (1 + cxh)y,,

Si O> ah> -1, la solución numérica es positiva y tiende a cero, pero si ah <-1 el signo
de la solución alterna al avanzar n. Además, si ah > 2, la magnitud de la solución aumenta
después de cada incremento en tanto que el signo alterna hasta llegar un momento en que la
solución diverge. Este comportamiento irregular de la solución es a lo que nos referimos al
hablar de la inestabilidad del método.

1
Véanse los capítulos 1 y 9 de Nakamura, Applied Numerical Metlwd.1· in C, Prentice-Hall, 1992
332 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

10.2.2 Método de Euler modificado


El método de Euler modificado tiene dos ventajas: es más exacto y más estable que el método
hacia adelante.
El método de Euler modificado se deduce aplicando la regla trapezoidal a la solución de
Y' =f(y, x):
h
Yn+I = Yn + 2[f(y,,+1,fn+I) +f(yn,ln)] (10.2.4 )

Si/es una función lineal dey, es fácil resolver la ecuación 10.2.4 paray,,+1 en forma cerrada.
Por ejemplo, sea

f (y, t) =ay+ cos(t)

entonces, la ecuación 10.2.4 se convierte en


h
Yn+I =Yn + 2[ay11+1 + cos(t11+1) + ayn + cos(t,,)]

Por tanto, al resolver paray,,+1 obtenemos

1 + ah/2 h cos(t,,+ 1 + cos(tn)


Yn+I = 1-ah/2 yn + 1-ah/2 2 (10.2.5

Si/ es una función no lineal de y, la ecuación 10.2.4 se convierte en una función no lineal
de Yn+1, por lo que debemos aplicar un algoritmo para resolver la ecuación no lineal. Un método
muy utilizado es el de sustituciones sucesivas, que se escribe así:
(k) - .!.! (k- 1)
Yn+l -yn + 2[f(yn+I , ln+I) +f(yn,ln)] (10.2.6)

donde y,~~1 es la k-ésima aproximación iterativa para Yn+I y y,~~)1 es una estimación inicial
de Yn+I. La iteración tennina cuando [y,\~1 es menor que y,\i¡ ) 1 una tolerancia especificada. Si
1

tomamos como estimación inicial Yn, el primer paso de la iteración será idéntico al método de
Euler hacia adelante. Si sólo se emplean dos pasos de iteración, el método se convierte en e
método de Runge-Kutta de segundo orden.
El siguiente ejemplo muestra una aplicación del método de Euler modificado a una EDO
no lineal de primer orden.

Ejemplo 10.6
(a) Detennine y (O. l) para el siguiente problema de valor inicial

y' = -y1. 5 + 1, y (O) = 10 (A)


Sección 10.2. Métodos de Euler 333

por el método de Euler modificado con h = 0.1 . Establezca como tolerancia de la


convergencia 0.00001.
(b) Continúe el cálculo avanzando incrementos de tiempo hasta llegar a t = 0.5.
(c) Elabore un guión de MATLAB que calcule Ja solución para O< t ~ 1 por los
métodos de Euler hacia adelante y modificado y grafique los resultados.

Solución
(a) El esquema de Euler modificado se escribe así:

Yn+I = Yn + (h/2)[-(yn+I)l. 5 - (y11 )1. 5 + 2] (B)

y su solución iterativa basada en sustituciones sucesivas es:

(k) -
Y11+1-y11+ (h/2)[- (y,(k-1))1.5
n+I - (y /1 )1.5 + 2] (C)

donde k es el número de iteración. La iteración para y¡ comienza con la estimación


inicial y<~)= y(O) = 10, y continúa así:

y\1) = 10 + (0.1/2)(-(10)1.5 - (10)1.5 + 2] = 6.93 772


y\2) = 10 + (0.1/2)[-(6.93772)1. 5 -(10)1.5 + 2] = 7.60517
y\3) = 10 + (0.1/2)[-7.60517)1.5 - (10)1. 5 + 2] = 7.47020
y\4 ) = 10 +(O. l/2)[-7.47020)1. 5
- (10)1. 5 + 2] = 7.49799
5
y\ >= 10 + (0.1/2)[-7.49799)1. 5
-(10)1. 5
+ 2] = 7.49229

5 5
y¡= 10 +(O. l/2)[-7.49326)1. - (10)1. + 2] = 7.49326
(b) Los resultados calculados para cinco incrementos de tiempo son:

t y
o.o 10.0000
0.1 7.4932
0.2 5.8586
0.3 4.7 3 45
0.4 3.9298
0.5 3.3357

(c) El listado 10.2 es un guión de MATLAB para obtener las soluciones. En el guión,
la solución del método de Euler hacia adelante se denota con yf, mientras que Ja del
método modificado es ym. La ecuación de Euler modificada se resuelve iterativamente
por el método de sustituciones sucesivas con el número de iteraciones limitado a 10
como máximo. Si el número de iteración rebasa 9, se imprime un mensaje.
334 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

Listado 10.2
clear, clf, hold off
%===== Euler hacia adelante
yf(l) = 10; t(l) =O; h = 0.1; n=l;
while t (n) <1
n = n+l; t(n) = t(n-1) + h;
yf(n) = yf(n-1) + h*( - yf(n-1)·1.s + 1);
end
%==== Euler modificado
ym(l) = 10; t(l) =O; h = 0.1; n=l;
while t(n)<l
n = n+l; t(n) = t(n-1) + h;
ym(n) = ym(n-1) + h*( - ym(n - 1)·1.5 + 1);
for k=l:lO % Iteración de sustitución sucesiva
ymb = ym(n);
ym(n) = ym(n-1)
+ 0.5*h*(-ym(n)·l.5 - ym(n-1).1.5 + 2);
if abs(ym(n) - ymb) < 0.00001, break
end
i f k>9'
disp 'La iteración no converge después de k=9'
end
end
end
plot(t,yf, '--' t,ym, '-')
xlabel('t'); ylabel('y');
text(O.l, 1.2, ' ... Euler hacia adelante - Euler modificado '

Los resultados se muestran en la figura 10.3

'
6 ''
'
y
4

... Euler hacia adelante - Euler modificado

Figura 10.3 Comparación de los resultados de los métodos de Eulcr hacia adelante y modificado
Sección 10.2. Métodos de Euler 335

10.2.3 Método de Euler hacia atrás


El método de Euler hacia atrás se basa en la aproximación de diferencia hacia atrás y se escribe
así:
Yn+I =y,,+ hf(y,,+1,t11+1) (10.2.7)

El orden de exactitud de este método es el mismo que el del método de Euler hacia adelante.
Además, si/es una función no lineal dey, es preciso emplear un método iterativo (sustituciones
sucesivas) en cada paso igual que en el método de Euler modificado. Por otro lado, las ventajas
de este método son que (a) es incondicionalmente estable y (b) se garantiza Ja positividad de
Ja solución cuando ésta debe ser positiva.

10.2.4 Exactitud de los métodos de Euler


¿Por qué la exactitud del método de Euler modificado es mayor que la de los métodos hacia
adelante o hacia atrás? Para detenninar analíticamente Ja respuesta a esta pregunta considere-
mos la ecuación de prueba y' = ay. Entonces, la ecuación 10.2.4 puede escribirse para este
problema así:
1
Yn+I =Yn + 2 ah(yn+I + Yn) (10.2.8)

o, lo que es Jo mismo,
1 + lah
2
Yn+I = l -lahYn
2

La expansión de la ecuación anterior produce

1 a ¡2
Yn+ 1 = ( 1 + a h + 2( 1 h3
1) + ¡(a ) + · · · )y,, (10.2.9)

Aquí suponemos que conocemosyn. Por otro lado, la expansión de Taylor de la solución exacta
(yn+ 1)exacta = ex p( ah )Yn es
1 2 1 3
(yn+J)cxact = (1+ah+2_(ah) + f,(ah) +···)y,, (10.2.10)

La discrepancia entre la ecuación 10.2.9 y la 10.2.10 se debe al error generado en t,, < t < 111+1,
llamado error local. Las dos ecuaciones coinciden hasta el ténnino de segundo orden y la
discrepancia está en el orden h 3• Por tanto, el método de Euler modificado tiene una exactitud
de segundo orden; los errores se acumulan confonne avanzan los incrementos de tiempo. Si
suponemos que se utiliza repetidamente un intervalo de tiempo fijo, h, el orden del error
total acumulado durante cierto periodo de tiempo, digamos t, es igual al número de
intervalos de tiempo multiplicado por h3 , es decir, (t/h)h 3 = h2t. El total de los errores
336 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

acumulados se denomina error global. Por tanto, el orden del error global es uno menos que e
del error local.
Podemos aplicar un análisis similar a los métodos de Euler hacia adelante y hacia atrás
La tabla que sigue resume los errores locales y globales de los tres métodos de Euler:

Euler hacia Euler Eulerhacia


adelante modificado atrás
Orden del error local h2 h3 h2
Orden del error global h h2 h

10.2.5 EDO de segundo orden


Si Ja derivada más alta de una EDO es la de segundo orden, se dice que la ecuación es una EDO
de segundo orden. Las EDO de segundo orden pueden escribirse así:

u"(t) + au'(t) + bu(t) = s(t), u(O) = uo, u'(O) = u0 (10.2.11

donde a, b y s son constantes o funciones de t, u y u' y la segunda y tercera ecuaciones son


condiciones iniciales. Observe que una EDO de segundo orden requiere dos condiciones
iniciales, dadas para u(O) y u'(O). Si a, b y s son independientes de u, la ecuación anterior es
una EDO lineal. Por otro lado, si a, b os es función de u o de u', o de ambas, la ecuación no
es lineal. En esta subsección estudiaremos la forma de resolver las EDO de segundo orde
por el método de Euler hacia adelante. También aprenderemos a escribir guiones de MATLAB
que realicen esta tarea, mismos que podemos extender con facilidad a un método más exacto.
como uno de Runge-Kutta de cuarto orden.
Un paso importante que debe preceder a la aplicación de un método de Euler consiste e
descomponer la EDO de segundo orden en un par de EDO de primer orden. Definimos

v=u'

lo que nos pennite escribir la ecuación 10.2.11 así:

v'(t) + av(t) + bu(t) = s(t), v(O) = uó

Aquí, la condición inicial en ténninos de la nueva variable v proviene de la segunda condición


inicial de la ecuación 10.2.11. La ecuación 10.2.11 puede ahora expresarse con el siguiente
conjunto de EDO de primer orden:

u'= f¡(u, v, t), u(O) = uo


(10.2.12
v' =f2(u, v, t), v(O) = uó
Sección 10.2. Métodos de Euler 337

donde
f¡(u, V, t) =V

fz(u, v, t) = -av - bu+ s

He aquí un cálculo paso a paso para los primeros incrementos de tiempo:

t= h,
u¡= uo + hf¡(uo, vo, O)= hvo
u1 = uo + hfz(uo, vo, O)= h(-avo- buo + s(O))

t= 2h,
u2 =u¡+ ~(¡(u¡, v¡, h) = hv¡
v2 = v¡ + hfz(u¡, v¡, h) = h(-av¡ - hu¡+ s(h))

En MA TLAB, el cálculo de cada incremento de tiempo puede escribirse en forma


matricial. Primero definimos y y f, respectivamente, como

(10.2.13)
entran ecuaciones
(10.2.14)

Entonces, el conjunto de la ecuación 10.2.12 se puede escribir como una sola ecuación así:

y'= f(y, t)

El método de Euler hacia adelante para la ecuación anterior se escribe así:

Y11+1 = Y11 + hf(y11,t11) (10.2.15)

que es igual a la ecuación 10.2.2 con la excepción de que y y f son vectores.

Ejemplo 10.7
Un objeto cúbico de masa M = 1O kg se fija al extremo inferior de un sistema de
amortiguador de resorte (véase la figura 10.4). El extremo superior del resorte se fija
a una estructura en reposo. La fuerza del amortiguador es R = -Blu'lu', donde Bes una
constante y u es el desplazamiento con respecto a la posición inicial en metros. La
ecuación del movimiento es

Mu" + Blu'lu' + ku = O, u(O) = O, u'(O) = 1 (A)


2 2
donde k es la constante del resorte, igual a 200 N/m, y B = 50 Ns /m .
338 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

(a) Calcular u(t) para O < t ~ 0.1 utilizando el método de Euler hacia adelante con
h = 0.05 y cálculos manuales.
(b) Calcular u(t) para O< t ~ 5 con MATLAB empleando el método de Euler hacia
adelante con h = 0.05. Grafique los resultados.

B =50 Ns"2/m"2 k=200 N/m

u(O)=O ¡ M=10 kg

u(t) Figura 10.4 Un sistema


resorte-masa

Solución
La ecuación (A) puede escribirse así:
u' = v, u(O) = O
(B)
v' = -alvlv - cu, v (O) = 1

donde a= BIM= 5 y e= k/M= 20.


(a):
t= O,
uo= u(O) =O
vo = u'(O) = 1
t = 0.05,
u¡= uo + hvo
=o+ (0.05)(1) = 0.05
v¡ = vo + h(-alvolvo- cuo)
= 1+(0.05)[-5111(1)-(20)(0)]=0.75

t = 0.1,
u2 =u¡+ hv1
= 0.05 + (0.05)(0.75) = 0.0875
Sección 10.2. Métodos de Euler 339

z2 = v¡ + h(-alv1 lv1 - cu¡)


= 0.75 + (0.05) [-510.751(0.75)-(20)(0.05)] = 0.5594

o.e

o.e

0.4

>
>. 0.2
>-
V, desplyamiento
V, velocidad
-0.2

-0.4

3
tiempo (s)

Figura 10.S Solución de Euler hacia adelante del problema de resorte-masa

(b ): La forma más fácil de crear un guión en MA TLAB es escribir las ecuaciones en


forma de vectores:
y'= f(y, t) (C)

donde
y=
[;]
f = [-ay~ v +e]
El método de Euler hacia adelante para la ecuación anterior se escribe así:

Yn+I = Yn + hf(yn, In) (D)

El listado 10.3 es un guión para obtener la solución. Los resultados se muestran en la


figura 10.5.

Listado 10.3
clear, clf, hold off
h = 0.05; t max=S; n = 1;
y( : ,1) =ro; 1J;
t(l) =O;
340 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

wh ile t(n)< t max


y(:,n+l} = y(:,n) + h*f _ d e f(y(:,n),t); yb=y ;
t(n+l} = t(n)+h;
n=n+l;
end
ax is ([O 5 - 1 1))
plot ( t, y ( l, : ) , t, y ( 2 , : ) , ' : ' )
xlabe l('tiempo (s) '); y labe l('Y y V')
L=length(t);
t e xt(t(L), y(l,L), 'Y, d e splazami e nto')
text(t(L), y(2,L), 'V, velocidad')
f def.m
function f = f_d e f(y, t)
a 5 ; c =20;
f = [y(2); (-a*abs(y(2))*y(2) - c *y(l)));

Comentario: En vista de lo sencillo del cálculo, podríamos sentirnos tentados a aplicar el guión
anterior al caso en que B = O. Si lo hacemos, obtendremos resultados un tanto extraños. Para
B = O, la solución debe ser puramente armónica; en otras palabras, la oscilación debe ser un
movimiento senoidal sostenido. Sin embargo, el resultado computacional del método de Euler
hacia adelante con h = 0.05 muestra una oscilación que diverge lentamente debido a errores
numéricos. A fin de reducir el error, necesitamos un valor mucho más pequeño de h, lo cual
no sólo prolongaría considerablemente el tiempo de cómputo sino que también podría
introducir una cantidad significativa de errores de redondeo. Ésta es una de las razones por las
que es conveniente utilizar métodos más exactos como el de Runge-Kutta de cuarto orden
que describiremos en la sección 10.3.

10.2.6 EDO de orden superior


Los métodos descritos en las subsecciones anteriores pueden extenderse a EDO de orden
superior. Por ejemplo, consideremos

y""(t) + ay'"(t) + hy"(t) + cy'(t) + ey (t) = g (t) (10.2.16)

donde a, b, e, e y g son constantes o funciones conocidas de t si la ecuación es una EDO lineal.


Si la ecuación no es lineal, al menos una de las cantidades a, h, e, e o ges función de una o más
de las siguientes: y, y', y" o y'". Las condiciones iniciales dadas son:

y(O) =Yo, y'(O) =Yo·


y"(O) =y~, y'"(O) =y~'

dondey0 ,y0,y0, y y 0' son valores prescritos.


Si consideramos cada una de las funciones y, y', y" o y'" como una variable desconocida,
podemos escribir la ecuación 10.2.16 como un conjunto de cuatro ecuaciones diferenciales
ordinarias de primer orden:
Sección 10.2. Métodos de Euler 341

y' = u, y (O) =yo


u' = V, u (O) =Yo (10.2.17)
v' = w, V (O) =Yo
w' = g - aw - bv - cu - ey - , w(O) = y 0'

La ecuación 10.2.16 también puede escribirse en fonna vectorial como

y'= f(y,t) (10.2.18)

donde

y= rn
J
entra fónnula A

f = [g - aw - b~ - cu _

La expresión del método de Euler hacia adelante para la ecuación 10.2.18 es la misma que para
la ecuación 10.2.15.
Los métodos numéricos también pueden aplicarse a ecuaciones íntegro-diferenciales. Por
ejemplo, consideremos

y
" + ay + Jo¡t y( s )ds = e, y(O) =Yo, y'(O)=y~ (10.2.19)

Definimos u y v como

u=y '
(10.2.20)
v= fot y(s)ds
la segunda de las cuales, una vez diferenciada, también puede escribirse así:

v' =y, v (O) = O

Entonces, la ecuación 10.2.19 se convierte en


342 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

y' = u, y (O) =yo


u' =-ay - v + e, u (O) = YÓ (10.2.21)
VI =y, v(O) = o

La ecuación anterior puede escribirse en forma vectorial así:

y I = f{y,t) (10.2.22)

donde

entra fónnula A

Una vez más, el método de Euler hacia adelante para la ecuación 10.2.22 es el mismo que para
la 10.2.15.

Ejemplo 10.8
La corriente eléctrica del circuito que se muestra en la figura 10.6 satisface la ecuación
íntegro-diferencial

L di(t) + R 1º(t) + q(t) = E(t) t >O (A)


dt e ·
q(t) = fot i(t')dt' + q(O) (B)

donde q(t) es la carga del condensador (coulombs), el interruptor está cerrado en t =O,
i = i(t) es la corriente (amperes) y las constantes están dadas por
R= 100 Q
L=200 mH
C= 10 µF
E=l V
Las condiciones iniciales son q(O) = O (carga inicial del condensador) e i(O) = O.
Calcule la corriente para O< t ~ 0.025 s con h = 0.00025 s.

Solución
La diferenciación de la ecuación (B) produce:
Sección ·1 'J.2. Métodos de Euler 343

L=200mH
i(t) ___,.

A= 100 O

=-e-----< s C=10 1i
Figura 10.6 Circuito eléctrico

d~~t) = i(t), q(O) = O (C)

Reescribimos la ecuación (A) así:


di(t) = _ !i;(t) __1 q(t) + E(t) i(O) = O (D)
dt L LC . L '
Entonces, la fonna vectorial de la ecuación es
y' = f(y, t) = My + S (E)

donde

Los cálculos se realizan con el siguiente guión; los resultados se grafican en la


figura 1O.7.
Listado 10.4
clear, clf, hold off
R 100; % ohm
L 200e-3; % H
e lOe-6; % F
E 1;
h 0.25e-3;
n=l;
t ( 1 ) =O ; y ( : , 1 ) = [ O ; O] ;
M=[0,1;-1/(L*C), -R/L]; S = [O;E/L];
while n<lOl
y(:,n+l) = y(:,n) + h*(M*y(:,n)+S);
t(n+l) = n*h;
n=n+l;
344 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

"
,' ' '
, ''
3 : '
.,
, ''
~2 :
o , '
\
~ 1 ~'.a.100 __
5. f \ ," ',

- \ f '
o \ ' ' ..
'
·1

¡, '
·2

- 3 ~--~--~--~--~---'
o 0.005 0.01 o 015 0.02 0.025 Figura 10.7 Gráfica de los
tiempo (s) resultados calculados

e nd
pl o t (t, lOO*y (1,:), t,y ( 2 ,:), 1 - - 1 )
text(t( 3 0), 119*(y(l,30)), 'QxlOO')
te x t ( t (28), y( 2 , 3 0), 'I')
x labe l('tiempo ( s ) ')
yl abe l ( ' I (A) y Q (A* s )')

10.3 METODOS DE RUNGE-KUTTA


Una desventaja importante de los métodos de Euler es que el orden de exactitud es bajo. Si
queremos mantener un orden de exactitud elevado necesitamos una h muy pequeña, lo que no
sólo aumenta el tiempo de cómputo sino que también causa errores de redondeo.
En los métodos de Runge-Kutta, el orden de exactitud se incrementa mediante el empleo
de un método de integración numérica de más alto orden. La mayor exactitud implica que e
resultado calculado es más exacto y también que los errores se reducen con mayor rapidez al
reducirse h.
Consideremos una ecuación diferencial ordinaria

y' = f(y,t) , y (O) =yo (10.3 .1

Si queremos calcular Yn+l con un valor conocido de Yn, integramos la ecuación 10.3.1 en e
intervalo ln ~ t ~ ln+l para obtener
t n +I
Yn+I = Yn + 1tn
f ( y , t )dt (10.3 .2
Sección 10.3. Métodos de Runge-Kutta 345

Los métodos de Runge-Kutta se deducen aplicando un método de integración numérica al


miembro derecho de la ecuación anterior. En el resto de esta sección explicaremos los métodos
de Runge-Kutta de primer, segundo, tercero y cuarto orden.

10.3.1 Método de Runge-Kutta de segundo orden


Aquí examinaremos la aplicación de la regla trapezoidal al miembro derecho de la ecuación
10.3.2:

(10.3.3)

donde h = 111 +¡ - tn. En la ecuación anterior se desconoce Y11+1, así que el segundo ténnino se
aproxima conf (j,;+ 1,!11+1), donde Y,1+1 es una estimación calculada por el método de Euler hacia
adelante. El esquema que se deduce de esta fonna se denomina método de Runge-Kutta de
segundo orden y se escribe así:

Y11+I =y,,+ l!f(y,,,t,,)


h
Y11+I =y,,+ 2lf(y11,f11) + fGJ,1+1,l11+!)]

o, en una fonna más convencional:

k1 = hf (y,,,t,,)
k2 = hf(y,, + k1,l11+1) (10.3.4)
1
Y11+I = Yn + 2(k1 + k2)

El método de Runge-Kutta de segundo orden equivale al método de Euler modificado con sólo
dos pasos de iteración.

Ejemplo 10.9

El circuito que se muestra en la figura 10.8 tiene una autoinductancia de L = 50 mH,


una resistencia de R = 20 Q y una fuente de voltaje de E= 10 V. Si se cierra el
interruptor en t =O, la corriente J(t) satisface

Ldld(t) + RJ(t) =E, 1(0) =O (A)


t

Encuentre el valor de la corriente para O < t < 0.02 s mediante el método de


Runge-Kutta de segundo orden con h = 0.0001.

Solución
Primero reescribimos Ja ecuación (A) así:
346 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

L=50 mH
l(t) --7

R=20 n

s Figura 10.8 Un circuito eléctrico

dl
dt =f(l,t) (B)

donde
R E
f(l,t)=- L l+ L
Entonces, el método de Runge-Kutta de segundo orden se convierte en

Mostramos los cálculos para los dos primeros pasos:

t= o,
lo= O
t = 0.0001,
k¡ = 0.0001((-400)(0) + 200] = 0.02
k2 = 0.0001((-400)(0 + 0.02) + 200] = 0.0192
11 =lo+ (1 / 2)(k1 + k2) =O+ (1 I 2)(0.02 + 0.0192) = 0.0196
t=0.0002,
k¡ = 0.0001((-400)(0.0196) + 200] = 0.019216
kz = 0.0001((- 400)(0.0196 + 0.019216) + 200] = 0.018447
Sección 10.3. Métodos de Runge-Kutta 347

h=J¡ +(l /2)(k1 +k2)=0.0196+(1 /2)(0.019216+0.018447)


= 0.038431
El resto del cálculo se realiza con MATLAB (véase el listado 10.5) y el resultado final
se grafica en la figura 10.9.

0.5,---~---===~-~---,

0.4

0.005 0.01 0.015 0.02


tiempo (s)

Figura 10.9 Corriente eléctrica

Listado 10.S
clear, clf, hold off
R = 20; %ohm
L = soe-3; %H
E = 10 ¡ %V
y ( 1) =O ¡ t ( 1) =O ;
h = O.le-3;
n=l;
y rec(l)=y; t rec(l)=O; t=O;
RL = R/L; EL=E/L;
while t(n)<0.02
kl = h*fnlO 9(y(n), RL, EL);
k2 = h*fn10-9(y(n)+kl, RL, EL)¡
y(n+l} y(i1) + O.S*(kl+k2);
t(n+l} = n*h;
n=n+l;
end
plot(t,y)
xlabel('tiempo (s) ')
ylabel (' I (A) ')
fn10_9
function f=fnlO 9(I, RL, EL)
f=-RL*I + EL -
348 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

Ejemplo 10.1 O

Una placa delgada a 200ºC (473 K) se coloca repentinamente en una habitación que
está a 25 K, en la cual se enfría por transferencia de calor natural tanto por convección
como por radiación. Se dan las siguientes constantes flsicas:

p = 300 kg/m 3 (densidad)


3
V= 0.001 m (volumen)
2
A= 0.25 m (área superficial)
C = 900 J/kgK (calor específico)
he= 30 J/m2 K (coeficiente de transferencia de calor)
e= 0.8 (emisividad)
8 2 4
a= 5.67 x 10- W/m K (constante de Stefan-Boltzmann)

Suponiendo que la distribución de temperatura en el metal es unifonne, la ecuación


para la temperatura es

~~ = p~V [ w(2974 - I4) + he (297 - T) J, T(O) = 4 73 (A)

donde Tes la temperatura en Kelvin. Encuentre la temperatura para O < t < 180 s
utilizando el método de Runge-Kutta de segundo orden con h = 1 s.

Solución
El método Runge-Kutta de segundo orden se implementa en el listado 10.6. Si el
miembro derecho de la EDO es una función no lineal, como es el caso en el presente
problema, es recomendable escribir un archivo M de función para calcular el miembro
derecho.

Listado 10.6
clear, clf, hold off ,
ro=300; V=0.001; A= 0.25; e 900;
hc=30;
epsi=0.8; sig=S.67e - 8; n=l;
h = 1; T(1)=473; t(l)=O;
Arcv = A/(ro*C*V); Epsg = epsi*sig;
while t(n)<180
kl = h*fnlO lO(T(n) ,Arcv,Epsg,hc);
k2 = h*fnlO-lO(T(n)+kl,Arcv,Epsg,hc);
T(n+l) = T(n) + O.S*(kl + k2);
t(n+l)=t(n) + h;
n=n+l;
end
plot(t,T); xlabel('tiempo (s) '), ylabel('T (K) ')
fnlO 10
function f = fnlO lO(TB,Arcv,Epsg,hc)
y=Arcv*(Epsg*(297"4 - TB'4) + hc*(297-TB));
Sección 10.3. Métodos de Runge-Kutta 349

360

340

320

300

20 40 60 80 100 120 140 160 160 Figura 10.10 Temperatura


tiempo (s)
de la pieza metálica

Los resultados se grafican en Ja figura 10.1 O.

10.3.2 Exactitud del método de Runge-Kutta de segundo orden


La exactitud del método de Runge-Kutta de segundo orden puede analizarse mediante Ja
ecuación de prueba
y'= f(y,t) =ay (10.3.5)

Si conocemos Yn. la solución exacta para Y11+ 1 es obviamente

(10.3.6)

La expansión de Taylor de la ecuación anterior es

(yn+I)encta = [l +ah + 21 (ah2 1 3


) + 6 (ah) ... ] Yn (10.3.7)

Por otro lado, si aplicamos la ecuación 10.3.4 a la 10.3.5 obtenemos:


1 2
(10.3.8)
Yn+I = [l +ah+ 2(ah) ]Y11

Si comparamos la ecuación 10.3.8 con la 10.3.7, vemos que la primera tiene una exactitud
de orden h2 y que la discrepancia (el error generado en un paso) es proporcional a h 3•
Observe que el método de Runge-Kutta de segundo orden es idéntico al método de Euler
modificado dado por la ecuación 10.2.6 con dos pasos de iteración. Sin embargo,
350 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

encontramos que el orden de exactitud del método de Runge-Kutta de segundo orden es


idéntico al del método de Euler modificado que requiere convergencia iterativa. Esto indica
que la iteración más allá del segundo paso en el método de Euler modificado no incrementa
el orden de exactitud. (De hecho, el empleo del método de Runge-Kutta de segundo orden
con una h más pequeña es mucho más eficaz para mejorar Ja exactitud que la convergencia
iterativa estricta.) Podemos analizar más formalmente la exactitud sin utilizar una ecuación de
prueba. 2

10.3.3 EDO de orden superior


La aplicación del método de Runge-Kutta de segundo orden a una ecuación diferencial
ordinaria de orden superior es similar a la del método de Euler hacia adelante. Por ejemplo,
consideremos la ecuación diferencial de segundo orden:

u'+ au' +bu= q(t), u(O) = 1, u'(O) =O (10.3.9)

donde a, b y q son constantes o funciones de t, u y u'. Si definimos

v(t) = u'(t) (10.3.10)

podemos reducir la ecuación 10.3.9 a un conjunto de ecuaciones diferenciales de primer orden


acopladas:

u'=f(u, v, t) = v, u(O) = 1
(10.3.11
v' = g (u, v, t) = -av - bu + q, v (O) = O

El método de Runge-Kutta de segundo orden para las ecuaciones anteriores se escribe así:
2
Dado el valor de y,,, la solución de y' = f(y, t) puede expresarse mediante la expansión de Taylor de y,,...;
alrededor de tn así:
2
(yn+l)exacta =Y11 + h¡+ (h / 2)[/t + fyf]
(F l
+ (h 3 / 6)[/t1 + 2/tyf+fj,.J 2 +Ji fy +fj,2 f] + O(h 4)

donde todas las derivadas de y se expresan en términos defy las derivadas parciales def en t,,.
A continuación, expandimos la tercera ecuación de la ecuación 10.3.4 en una serie de Taylor:

Yn+I =Yn + h¡+ (h 2 / 2)[Ji + fyf]


(F2
+ (h 3 / 4)[Ji, + 2/tyf+ fyyf 2] + O(h4)

Si comparamos la ecuación (F2) con la (Fl) vemos que la ecuación 10.3.4 es exacta hasta el término de orden h:;
en otras palabras, el orden del error local es h3•
Sección 10.3. Métodos de Runge-Kutta 351

k¡= hf(un,Vn,tn) = hvn


m¡ = hg(u,,,vn,tn) = h(-av,, -bun + qn)
ki = hf(un + k¡, Vn + m1,tn+1) = h(vn + m¡)
m2 = hg(Un + k1,Vn + m¡,tn+I)
(10.3.12)
= h(-a(vn + m1)-b(un+ k1) + q,,+¡)
1
Un+I =Un+ 2(k¡ + kz)
1
V11+1 = Vn + 2(m1 + m2)

Para la implementación en MATLAB, escribimos las EDO en forma vectorial como

y'=f (10.3.13)
donde
y= [:]

f= [~] = [-av-vbu+q]
Entonces, el esquema de Runge-Kutta de segundo orden se convierte en

k¡ = hf(un,tn)
kz = hf(un + k1,tn+1) (10.3.14)
1
Y11+! = Yn + 2 (k1 + kz)
Si a, by q son constantes o funciones exclusivamente de t, la ecuación 10.3.13 puede escribirse
así:
y'=Mf+S
donde
s = [~]
Entonces, una forma equivalente de escribir la ecuación 10.3.14 es:

k1 = h [My1 + S]
kz = h [M(y1 + k1) + S] (10.3.15)
1
Y11+l = Yn + 2 (k1 + kz)
352 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

Ejemplo 10.11

Una caja rectangular de masa M = 0.5 kg se fija al extremo inferior de un sistema de


resorte-amortiguador sin masa, como se ilustra en la figura 10.11. El extremo superior
del resorte se fija a una estructura en reposo. El amortiguador ejerce una fuerza de
R = -Bdu/dt sobre la caja, donde Bes la constante de amortiguación. La ecuación del
movimiento es

Mu"+ Bu'+ ku =O, u(O) = 1, u '(O)= O (A)

donde u es el desplazamiento respecto de la posición estática, k es la constante del


resorte, igual a 100 N/m, y B = 10 Ns/m.
(a) Calcule u(t) para O < t ~ 0.05 s utilizando el método de Runge-Kutta de
segundo orden con h = 0.025 s y realizando los cálculos a mano.
(b) Calcule u(t) para O< t ~ 1 sutilizando el método de Runge-Kutta de segundo
orden con h = 0.025 s.

B=10 Ns/m k=100 N/m

u(O)=O M=0.5 kg

u(t)

Figura 10.11 Sistema de resorte-masa

Solución
La ecuación (A) puede escribirse así:

u'= J= v, u(O) = 1
v' = g"" -{BIM)v - (k/M)u, v(O) =O

Si sustituimos a= BIM = 20 y b = k/M = 200, el método de Runge-Kutta de segundo


orden para la ecuación (A), en la fonna de la ecuación 10.3.14, se convierte en:
Sección 10.3. Métodos de Runge-Kutta 353

(a):
t=O,
uo = u(O) = 1
vo= u '(O) =O
t = 0.025,
k1 = ~f(uo,vo,to) = hvo = 0.025(0) =O
m¡= hg(uo,vo,to) = h(-20vo-200uo)
= 0.025(-20(0)- 200(1)) = -5
k2 = hf(uo + k1, vo + m1,t1) = h(vo + 1111)
= 0.025(0 - 5) = -0.125
m2 = hg(uo + k1, vo + m1,t1)
= h[-20(vo + 1111)- 200(uo + k1)]
= 0.025(-20(0 - 5) - 200(1 +O)]= -2.5
U¡= UQ + (1/2)(0 -0.125) = 0.9375
V¡ = VQ + (l/2)(-5 - 2.5) = -3. 75
t = 0.05,
k1 = lf(u1,v1,t1) = hv1=0.025(-3.75) = -0.09375
mi= hg(u1,v1,t1) = h(-20v1 - 200u1)
= 0.025(-20(-3.75)- 200(0.9375)] = -2.8125
k2 = hf(u¡ + k1, v¡ + m1, t2) = h(v¡ + 1111)
= 0.025(-3.75 - 2.8125) = -0.16406
1112 = hg(u¡ + k¡, V¡+ 111¡, t2)
= h[-20(v1 + m1) - 200(u1 + k1)]
= 0.025(-20(-3.75 - 2.8125) - 200(0.9375 - 0.09375)]
=-0.9375
U2 =U¡+ (l/2)(-0.09375 -0.16406) = 0.80859
U2 =V¡+ (1/2)(-2.8125 -0.9375) =-5.625

(b ): Para los cálculos en MA TLAB, reescribimos las ecuaciones como

y'=Mf
donde

y=[:J. Mf = [ -b
O 1 ]'
-a

El guión del listado 1O.7 se elaboró con base en la ecuación 10.3.14 aplicada a la
ecuación anterior. Los resultados se grafican en la figura 10.12.
Listado l O. 7
clear, clf, hold off
M = 0.5; k = 100; B=lO; a = B/M;
b = k/M; n = 1; h = 0.025;
y(:,l) = [l;O); t(l)=O; % condición inicial
354 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

1
~lazamiento, u
o
-1

!>
-2
Velocidad, v

>- -3

::J -4

-5

-6

0.2 0.4 0.6 o.e


t (s)

Figura 10.12 Respuestas dinámicas del sistema resorte-masa

M=[0,1; -b,-a];
while t (n) <=1,
kl = h*M*y (:, n) ;
k2 = h*M*(y(:,n)+kl);
y(:,n+l) =y(:,n) + O.S*(kl + k2);
t(n+l) = n*h;
n = n+l;
end
plot ( t I y ( 1, : ) / I - I 1 t I y ( 2 I : ) I I : I) ;
xlabel('t (s)'); ylabel('u (m) y v (m/s)');
text(0.1, 0.8, 'Desplazamiento, u', 'Fontsize', [18))
text(0.2,-1.8, 'Velocidad, v', 'Fontsize', [18))

Comentario: Este problema se repetirá en el ejemplo 10.14 utilizando el método de Runge-


Kutta de cuarto orden con aplicación al caso en que B • O.

Ejemplo 10.12

El movimiento de un electrón en un campo electromagnético uniforme está dada por3

dV
m-;¡¡ = eV x B + eE (A)

donde V es el vector de velocidad, Bes el vector del campo magnético, E es el vector


del campo eléctrico, m es la masa del electrón y e es la carga del electrón:
3
Este ejemplo fue proporcionado por el profesor Y. Funato del Suzuka College ofTechnology, Japón.
Sección 10.3. Métodos de Runge-Kutta 355

Condición inicial: V= (-1 O, 2, 0.1) x 105 mis


Posición inicial del electrón: R =(O, O, O) m
Vector del campo magnético: B = (O, O, 0.1) T
Vector del campo eléctrico: E= (O, 2, O) x 104 V/m
Masa del electrón: m = 9 .1 X 10-31 kg
Carga del electrón: e= 1.6 x 10- 19 c

Resuelva la ecuación (A) por el método de Runge-Kutta de segundo orden con h =


0.5 X 10- 11 s, para o< t ~ 2 X 10º9 S, y dctennine la posición del electrón. Grafique la
trayectoria del electrón en una vista tridimensional y grafique los componentes de
la velocidad como funciones del tiempo, lo mismo que en el espacio de fase tridi-
mensional.

Solución
Podemos elaborar un guión de fonna directa utilizando vxv_, que es una función para
calcular el producto de dos vectores. Las soluciones calculadas por el siguiente guión
se muestran en la figura 10.13.

Listado 10.8
clear,clf,hold off
e=1.6e-19; % Carga del electrón, coulombs
m=9.le-31; % Masa del electrón, kg
B=[O;O;O.l)*e/m; % Fuerza del campo magnético, teslas
E=[0;2e4;0)*e/m; % Fuerza del campo eléctrico, volts/metro
h=O.Se-11; % Incremento de tiempo, segundo
V ( : , 1) =1e5 * ( -10; 2; 0 . 1) ;
% Velocidad inicial del electrón, m/s
t(l)=O; % Inicialización del tiempo, segundos
xyz (: , 1) = [O; O; O) ;
epm=e/m;
for i=2:400
t(i)=h*i;
kl=h*(vxv (v(: ,i-1) ,B) +E);
k2=h*(vxv-(v(: i-l}+kl,B) +E);
v(:,i)=v{-;-,i-1) + 0.5*(k1+k2);
xyz= ( : , i) =xyz ( : , i - 1) +o. 5 * (v ( : , i -1) +v ( : , i) ) *h;
end
figure(l)
p 1ot3 ( xy z ( 1 , : ) , xy z ( 2 , : ) , xy z ( 3 , : ) )
axis( [-5,5,-1,2,0,0.3)*1e-4)
xlabel('X'); ylabel('Y'); zlabel('Z');
figure(2)
plot3(xyz(1,:), xyz(2,:), xyz(3,:))
xlabel('X'); ylabel('Y'); zlabel('Z');
view([0,0,1))
figure(3)
356 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

141110..

1
X 10' 12

10
2.5

N1 .5

0.5

X 10-4
tfr x 10-4
>- •

·~1;---------,;---;---------,;---;---,______,
5
·1 ·5
X 10-4

4
x 10
1.0001

1.0001
.,"' 03

~
.,
"O
:g
()
o
o
Ql
> -0.5
'
º·- 2
-1
1
X 10
1
x 10
·2 ·1 .50
Vy ·2 0.5 1.5 2
V•
X 10..

Figura 10.13 Trayectoria y velocidad del electrón

pl o t 3 (v ( 1, : ) , v ( 2 , : ) , v ( 3, : ) )
xlabel('Vx'); ylabel('Vy'); zlabe l('Vz');
figur e (4)
plot(t,v(l, : ) ,t, v(2, :) ,t, v(3, :)*100)
xlabe l('t'); ylabe l('Veloc idades ');
text( t (lO),v(l,10), 'Vx')
text(t(30),v(2,30), 'Vy')
text(t(200) ,v( 3 , 2 00)*100, 'Vz*lOO')

vxv_.m
function c=vtv (a,b)
% [e) = [a) x [b]
% a, b, e: vectores
c=[a(2)*b(3)-a(3)*b(2);
-a ( 1) *b ( 3) +a ( 3) *b ( 1) ;
a(l)*b(2) - a(2)*b(l)];
Sección 10.3. Métodos de Runge-Kutta 357

10.3.4 Método de Runge-Kutta de tercer orden


El método de Runge-Kutta de tercer orden se deduce aplicando un esquema de integración
numérica de orden superior al segundo término de la ecuación 10.3.2. Si utilizamos la regla 1/3
de Simpson, la ecuación 10.3.2 puede escribirse así:

Yn+I = Yn + ~[f(yn,ln) + 4f(Yn+l/2,ln+Il2) + f(Yn+J,ln+I)] (10.3.16)

donde)in+I/2 y Jln+I son estimaciones porque no se conocen ni Y11+112 y Yn+J.


La estimación )in+ 112 se obtiene por el método de Euler hacia adelante así:

Jin+I/2=Yn+1f(y11,f11) (10.3.17)

La estimación )in+ 1 puede obtenerse por

Yn+I = Yn + h¡(yn,fn)
o bien

Yn+I = Yn + hf(Yn+J/2,ln+I/2)

o por una combinación lineal de ambas:

Yn+I =Yn + h[8f(yn,ln) + (1 - 8)/(Yn+l/2,ln+l/2)] (10.3.18)

Aquí e es un parámetro no detenninado que se detenninará a fin de maximizar la exactitud del


método numérico. Con la ecuación 10.3 .18, el esquema completo se escribe en la siguiente
forma:

1
k2 = hf(y11 + 2k1,t11+112)

k3 = hf (yn + 8k1 + (l - 8)k2,!11+I)


1
Yn+I = Yn + 6(k1 + 4k2 + kJ) (10.3.19)

Con objeto de analizar la exactitud y optimizar e, aplicamos las ecuaciones anteriores a nuestra
ecuación de prueba, la ecuación 10.3.5, para la cual la ecuación 10.3.19 se convierte en
358 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

1
k2 = ha{l + 2ha)yn
1 (10.3.20)
kJ = ha [ 1 + 0ha + (1 - 0)ha(l + 2ha)] Yn

1
Yn+I = 1 +ha+ t<ha) +
(1- 0) 2
(ha) Yn 3]
[ 12

Si comparamos lo anterior con la expansión de (yn+I)exacta dada por la ecuación 10.3.7,


encontramos que el valor óptimo es de e = -1.
Por tanto, el método de Runge-Kutta de tercer orden se escribe así:

k1 = hf (y11,t11)
k2 = hf(yn + k1/2,t11+1!2)
kJ = hf(yn - k¡ + 2k2,t11+I)
1
Yn+I = Yn + 6(k¡ + 4k2 + kJ) (10.3.21 )

Las ecuaciones anteriores también pueden deducirse sin suponer una ecuación modelo espe-
cífica.4

10.3.5 Método de Runge-Kutta de cuarto orden


La deducción del método de Runge-Kutta de cuarto orden es similar a la del método de tercer
orden, excepto que se incluye un paso intermedio adicional de evaluación de la derivada
Disponemos de varias alternativas al elegir el esquema de integración numérica que se aplica
a la ecuación 10.3.2. El método de Runge-Kutta de cuarto orden es exacto hasta el término de
cuarto orden de la expansión de Taylor, de modo que el error local es proporcional a h5•

4
Las expansiones de Taylor de k1, k1 y kJ de la ecuación 10.3. 18 son
k¡ =hf (F3 a
k1 = lif + (l/2)'1\/¡ + fj.J)
(F3
1 3 2
+ 8/¡ (/11 + ~[,_,.¡ + fj.J )

k3 = lif + h2(f, +jj./)


(F3
+ 2'11 3 [ftt + 2 Jiyf + jj,.¡ 2 + ( 1 - 6)(/t + fj.J)fy]
donde/y sus derivadas se evalúan en t11 • Sustituimos la ecuación (F3) en la 10.3.20 y comparamos el resultado
el valor exacto de y 11+1 en la serie de Taylor que se escribió en la nota al calce 2. Es evidente que la ecuación 10.3-
coincide con la expansión de Taylor de la solución exacta hasta el término de tercer orden si e = -1.
Sección 10.3. Métodos de Runge-Kutta 359

A continuación presentamos las dos versiones del método de Runge-Kutta de cuarto orden
más utilizadas. La primera versión se basa en la regla 113 de Simpson y se escribe así:

k1 = hf(y,,,t,,)
k2 = hf(y,,+ k1/2,ln+ll2)
kJ = hf(y,, + k2/2,fn+Jl2)
/(4 = hf(y,, + kJ,ln+I)
1
Yn+I = Yn 6(k1 + 2k2 + 2k3 + /(4) (10.3.22)

La segunda versión se basa en la regla 3/8 de simpson y se escribe así:

k1 = hf(y,,,t,,)
k2 = hf(y,, + ki/3,t11+113)
kJ = hf(y,, + k1/3 + k2/3,tn+2!3)
/(4 = hf(y,,+ k1 - k2 + kJ,ln+I)
1
Yn+I =Yn ¡(k1 + 3k2 + 3k3 + /(4) (10.3.23)

Ejemplo 10.13
Calcule y( 1) para

y'= -11(1 +y), y(O) =1

utilizando el método de Runge-Kutta de cuarto orden con h = 1.

Solución
Establecemos
f(y,t) = -11(1 +y)
con yo = 1 y to = O. Puesto que sólo tenemos un intervalo, la respuesta se obtiene con

k1 = hf(yo,to) = -11(1 + 1) = --0.5


k2 = hf(yo+ k1/2,t112) = - 1/(1 +(O. 75) 2) = --0.64
kJ = hf(yo+ k2/2,t112) = - 11(1 + (0.68) 2) = --0.6838
360 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

ki = hf(yo + kJ,t1) = -1/(1 + (0.3161) 2) = --0.9091


1
Y1 =yo+6[k1 +2k2+2k3+k.i]

= 1 + ir--0.s - 2(0.64)- 2(0.6838)-o.90911 = o.3238

La aplicación del método de Runge-Kutta de cuarto orden a un conjunto de ecuaciones


diferenciales ordinarias es muy similar a la del método de Runge-Kutta de segundo orden . Con
objeto de simplificar la explicación, consideraremos un conjunto de dos ecuaciones:

u'= f (u,v,t)
(10.3.24)
v' = g(u,v,t)
El método de Runge-Kutta de cuarto orden para el conjunto de dos ecuaciones se convierte en

k¡ = hj(u11,V11,f11)
m¡ = hg(u11,V11,f11)
k1 = hf(un + k¡/2, Vn + m¡/2,tn+l/2)
m2 = hg(un + k¡/2, Vn + m¡/2,tn+l/2)
k3 = hf(un + k112, Vn + m212,tn+l!2)
m3 = hg(un + k112, Vn + m212,t11+112)
k4 = hf(u11 + kJ,V11 + m3/2,t11+1)
m4 = hg(un + k3,Vn + m3/2,tn+l)
1
Un+l = Un+ 6(k¡ + 2k2 + 2k3 + 4) (10.3.25
1
Vn+l = V11 + -¿cm1+2m2+2m3 + m4)

Si escribimos la ecuación 10.3.24 en fonna vectorial,

y'= f(y,t)

donde

y= [ ~]
f = [;]

entonces, el esquema de Runge-Kutta de cuarto orden se escribe así:


Sección 10.3. Métodos de Runge-Kutta 361

k¡ = hf(Yn,ln)
k2 = hf (Yn + k1/2,tn+ll2)
kJ = hf(Yn + k2/2,tn+Il2)
1(4 = hf(Yn + kJ,fn+i)
1 (10.3.28)
Yn+I = Yn 6(k¡ + 2k2 + 2k3 + 14)

Podemos elaborar guiones en MATLAB que implementen el método de Runge-Kutta de


cuarto orden utilizando la fonna de la ecuación 10.3.28; sin embargo, si es posible escribir la
ecuación 10.3.26 en fonna lineal como

y'=My+S

entonces la ecuación 10.3.28 se escribe así:

k1 =h[My+ S]
k2 = h[M(y + k1/2) + S]
kJ = h[M(y + k2/2) + S)
1(4 = h[M(y + kJ) + S]
1
Yn+I = Yn 6[(k¡ + 2k2 + 2k3 + kJ)] (10.3.29)

Ejemplo 10.14

(a) Repita el inciso (a) del problema del ejemplo 10.11 utilizando el método de
Runge-Kutta de cuarto orden. (b) Repita el inciso (b) del ejemplo 10.11 para B = O,
utilizando MA TLAB.

Solución
(a): Con referencia al ejemplo 10.11, las ecuaciones por resolver son:

u ' =fa v, u(O) =1


v' = g a -(BIM)v - (k/M)u, v(O) =O

Si establecemos a= BIM = 20 y h = k/M = 200, el método de Runge-Kutta de


cuarto orden para la ecuación (A) del ejemplo 10.11 adopta la forma de la
ecuación 10.3.25.
362 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

t= O,
uo = u(O) = 1
vo= u'(O) =O
t=0.025,
k1 = hf(uo,vo,to) = hvo = 0.025(0) =O
m1= hg(uo,vo,to) = h(-20vo-200uo)
= 0.025(-20(0)- 200(1)) = -5
k2 = hf(uo + k112, vo + m112,to + h/2) = h(vo + m1/2)
= 0.025(0 - 5/2) = -0.0625
m2 = hg( uo + k112, vo + m 112, + h/2)
= h[-20(vo + m1/2)- 200(uo + k1/2)]
= 0.025[-20(0- 5/2)- 200(1 + 0/2)] = -3.75
kJ = hf(uo + k2/2, vo + m2/2, to+ h/2) = h(vo + m1/2)
= 0.025(0 -3. 75/2) = --0.046875
m3 = hg(uo + k212, vo + m2/2, to+ h/2)
= h[-20(vo + m2/2) - 200(uo + k2/2)]
= 0.025[-20(0-3.75/2)-200(1 -0.0625/2)J=--3.9062
h.= hf(uo + kJ, vo + m3, to+ h) = h(vo + m3)
= 0.025(0 - 5/2) = -0.09765
m4 = hg(uo + kJ, vo + m3, to+ h)
= h[-20/vo + m3/2) - 200/uo + kJ/2)]
= 0.025[-20(0- 3.90625)-200(1 -0.046875)] = -2.8125
U¡= UO + (1/6)(0 + 2(-0.0625) + 2(-0.046875) - 0.097656
= 0.947266
V¡= VO + (1/6)(-5 + 2(-3.75) + 2 (-3.9062)-2.8125)
=-3.8541
t= 0.05,
k1 = hf(u1,v1,t1) = hv1=0.025(-3.85416) = -0.096354
m¡ = hg(u1,v1,t1) = h(-20v1 - 200u1)
= 0.025(-20(-3.8541)-200(0.947265)) = -2.8092
k2 = hf(u¡ + k112, v¡ + m¡/2, t¡ + h/2) = h(v¡ + m1/2)
= 0.025(-3.8541666-2.809244/2) = -0.1314697
m2 = hg(u¡ + k112, v¡ + m112, t1 + h/2)
= h[-20(v¡ + m1/2) - 200(u1 + k¡/2)]
= 0.025[-20(-3.85416-2.809244/2)- 200(0.947266-0.96354/2)]
=-1.866054
kJ = hf (u¡ + k212, v¡ + m212, t¡ + h/2) = h(v¡ + m2/2)
= 0.025(-3.85416-1.866054/2) =-0.1196797
m3 = hg(u¡ + k2/2, vo + m2/2, t¡ + h/2)
= h[-20(v¡ + m2/2) - 200(u¡ + k2/2)]
= 0.025[-20(-3.85416- 1.866054/2)-200(0.947266- 0.1314697/2)]
=-2.014058
h.= hf(u¡ + kJ, v¡ + m3, 1! + h) = h(v1 + m3)
Sección 10.3. Métodos de Runge-Kutta 363

= 0.025(-3.85416- 2.014058) =--0.146706


m4 = hg(u1 + kJ, v1 + m3, t¡ + h)
= h[-20(v¡ + m3) - 200(u¡ + kJ)]
= 0.025[-20(-3 .85416-2.014058)-200(0.947266-0.1196797)]
= -1.203821
U2 =U¡+ (1/6)(--0.0963541+2(--0.131469) + 2(--0.119679)
-0.146705) = 0.823039
V2 =V¡+ (1/6)(-2.809244 + 2(-1.866048) + 2(-2.014058)
-1.203816) =-5.816375

(b ): Para los cálculos en MA TLAB, reescribimos las ecuaciones en la siguiente forma:


y'=My

donde

y= [ ~]
entra fónnula B
M = [ ~b, ~a]
El listado 10.9 se elaboró con base en la ecuación 10.3.29 aplicada a las ecuaciones
anteriores. El resultado se muestra en la figura 10.14.

10

e$p~miento, u

-5

·1 0

Velocidad, v
15
· 0 0.1 0.2 o.3 o.• o.5 o.e 0.1 o.e o.e 1 Figura 10.14 Respuestas dinámicas
t (s) del sistema resorte-masa

Listado 10.9
clear, clg
M=0.5; k = 100; B=O; a= B/M;
b = k/M; n=O; t=O; h = 0.025;
364 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

y(:,l) = [l;O]; t(l)=O; % condición ini c ial


M=[0,1; -b, - a];
while t<=l
n=n+l;
kl h*M*y(:,n);
k2 = h*M* (y (: ,n) +kl/2);
k3 = h*M*(y(:,n)+k2/2);
k4 = h*M* (y (: ,n) +k3);
y(:,n+l) = y(:,n) + (kl + 2*k2 + 2*k3 + k4)/6;
t(n+l) = n*h;
end
plot ( t, y ( 1, : ) , ' - ' , t, y ( 2, : ) , ' : ' ) ;
xlabel('t (s) '); ylabel('u y v')
text(t(5),y(l,5)+0 . 3 'Desplazamiento, u','FontSize', [18])
text(t(7) ,y(2,7), 'Velocidad, v', 'Fo ntSize', (18])
axis ( [o, 1, -15, 15] )

Comentario: La parte B es un problema sencillo pero no necesariamente trivial (véanse los


comentarios al ejemplo 10.7). Por otro lado, dado que se conoce la solución analítica, este
problema es un buen nivel de referencia para examinar un método de resolución.

Ejemplo 10.15

En la figura 10.15 se muestra un sistema de tres masas.5 Los desplazamientos de las


masas satisfacen las ecuaciones dadas por

Miyí' + Biyí + Kiyi -B1yí-K1y2 =F1(t)


-B1yí-K1y1 + Mzy'; + B1yí+ (K1 +K2)y2-Kzy3 =O
-Kzy2 + MJy 3' + B3y 3+ (K2 + KJ)y3 = FJ(t)

donde y¡ , y2 y y3 son desplazamientos. Las constantes y las condiciones iniciales son:

K1 = Kz = KJ = 1 (constantes de los resortes, N/m)


M1 = lef2 = MJ = 1 (masa, kg)
F1(t) = 0.01, FJ(t) =O (fuerza, N)
B1 = B3 = 0.1 (coeficientes de amortiguación, Ns/m)
y1(0) = YÍ (O)= y2(0) =O (desplazamiento inicial, m)
Yí(O) = y 3(0) = y)(O) =O (velocidad inicial, m/s)

Resuelva las ecuaciones anteriores con el método de Runge-Kutta de cuarto orden para
O~ t ~ 30 s con h = 0.1 s.

5
Este ejemplo fue proporcionado por el profesor Doebelin de la Ohio State University.
Sección 10.3. Métodos de Runge-Kutta 365

diag_resorte_masa
diag_resorte_masa

F1 F3

entra figura 10.15 M1

91 93

y1 y2 y3

Figura 10.15 Sistema de masa-resorte

Solución
Definimos

(B)

Entonces la ecuación (A) se escribe como un conjunto de seis EDO de primer orden:

YÍ = Y4
YÍ =ys
y]=y6 (C)
Y4 = [-B1y4-K1y1 + B1ys + Kzy2 + F1]IM1
y 5= [B1y4 + K1y1 - B1ys - (K1 + K2) Y2 + Kzy3]/M2
yf, = [Kzy2 -BJY6 - (K2 + KJ)y3 + FJ]/M3

La ecuación (C) puede escribirse en fonna matricial como

y'= f(y,t) (D)


366 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

donde


Y2
y= Y3
Y4
Ys
Y6
o o o 1 o o o
o o o o 1 o o
o o o o o 1 o
f = ~! & o - Bi +-ª-1. o y+
M1 M1 M1 F¡/M¡
fu
M1
_ K'ti;<2 &
M1
-ª-1.
M1
-Bi
M1
o o
o _K2+K3 o o
~
-B3 F3/M3
M3 M3

Los resultados de los cálculos se muestran en Ja figura 10.16 .

. 1~-~--~--~-~--~-~
o 5 10. 15 20 25 30
tiempo (s}

Figura 10.16 Resultados de los cálculos

Listado 10.10
clear, clg
Ml 1; M2 = 1; M3 1;
Kl = 1; K2 = 1; K3 1;
Fl = 0.01; F3 = O; F = [O, O, O, Fl/Ml, O, F3/M3) ';
Bl = 0.1; B3= 0.1;
y(:,l)=[O; O; O; O; O; O); t(l) =O; n = 1;
Sección 10.3. Métodos de Runge-Kutta 367

h 0.1;
e [O, O, O, 1, o, O;
o, o, o, o, 1, O;
o, o, o, o, o, 1;
-Kl/Ml, K2/Ml, O, -Bl/Ml, 81/Ml, O;
Kl/M2,-(Kl+K2)/M2, K2/M2, Bl/M2, -Bl/M2, O;
O, K2/M3, -(K2+K3)/M3, O, o -B3/M3] I

while t<=30
kl h*F3m(y(:,n), C, F);
k2=h*F3m(y(:,n)+kl/2, C, F);
k3 = h*F3m(y(:,n)+k2/2, e, F);
k4 = h*F3m(y(:,n)+k3, C, F);
y(:,n+l) = y(:,n) + (1/6)*(kl + 2*k2 + 2*k3 + k4);
t(n+l) = n*h;
n=n+l;
end
plot ( t y ( 1: 3 / : ) )
I

text(t(70), y(l,70), 'yl')


text(t(70), y(2,70), 'y2')
text(t(70), y(3,70), 'y3')
xlabel('tiempo (s) ')
ylabel('Desplazamientos, yl, y2, y y3')
F3m.m
function f = F3m(y,C,F)
f = C*y + F;

Ejemplo 10.16
El comportamiento de un circuito eléctrico cambia significativamente dependiendo de
los valores de los componentes empleados. Considere el circuito que se muestra en la
figura 10.17, para el cual las ecuaciones diferenciales son:
La Rb
A

12(1) -----?

B
e(t)

f
e
Lb

5
Figura 10.17 Circuito eléctrico

La~: + Ra (i¡ -ii) + qg) = e(t)


368 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

- q(t)
e - R a(.l J - .)
12 +
R .
hl2 +
L dii
hdt =O
con
q(t) = fot(i1(t') - iz(t'))dt' + q(O)

donde e(t) =O excepto e(t) = 1 cuando O< t < 0.01 s, q(t) es la carga del condensador,
i1(t) e ii(t) son corrientes; el significado de las demás notaciones y unidades se indica
en la figura 10.17. Las condiciones iniciales son i 1(O) = iz(O) = q(O) = O en todos los
casos. A fin de investigar los efectos de los componentes, resuelva las ecuaciones para
los cuatro conjuntos de constantes siguientes:
(a) La= 0.01; Lh = 0.5; Ra = 200; Rb = 20; C= 0.002
(b) Igual que (a) excepto que La= 0.1
(c) Igual que (a) excepto que Lh = 0.25
(d) Igual que (a) excepto que Ra = 20

Solución
Las soluciones se obtienen con el listado 10.11. Los resultados se muestran en la figura
10.18.
Listado 10.11
clear;clg
subplot(221)
for k=1:4
e=l;
if k==l; subplot(221);
La=0.01; Lb=0.5; Ra=200; Rb=20; C=0.002; end
if k==2 subplot(222);
La=0.1; Lb=0.5; Ra=200 Rb=20; C=0.002; end
if k==3; subplot(223);
La=0.01; Lb=0.25; Ra=200 Rb=20; C=0.002; end
if k==4; subplot(224)
La= 0.01; Lb=0.5; Ra=20 ; Rb=20; C=0.002; end
M=[ -Ra/La, Ra/La, -1/(La*C);
Ra/Lb, -(Ra+Rb)/Lb, 1/(Lb*C};
1/C, - 1/C, O
S= [ O; O; O) ; x= [O ; O; O) ;
h=0.00005;
for n=l:lOl
t={n-l}*h;
%S=[ sin(t*600)*exp(-t*600)/La; O; O);
%S= [ cos (t*600) /La; O; O);
S=[l/La; O; O);
i f t >o . oo1 , s= [o ; o ; oJ ; end
kl=h* (M*x+S) ;
k2=h*(M*{x+kl/2}+S};
k3=h*(M*(x+k2/2}+S};
Sección 10.3. Métodos de Runge-Kutta 369

X 10·3 (B)
4

3
4
a- 2
~
~
1

o
-2~-------~ -1
o 2 4 6 o 2 4 6
X 10.3 X 10·3
(C) (D)
0.02

0.01
a-
~

-0.01

-0.02
2 4 6 o 2 4 6
X 10.3 X 10.3

Figura 10.18 Comportamiento del circuito

k4=h*(M*(x+k3}+S};
x=x+(kl+k2* 2 +k 3 * 2+ k4)/6;
x r (:, n)=x;
t-r(n)=t;
end-
p lo t ( t r, x r ( 1: 2, : ) , t r, x r ( 3, : ) )
xlabel('t')~ylabel('il,I2,q')
L= length(t r)
text(t r(L/lO), x r (l,L/10), 'il')
text(t=r(L/2), x_ r( 2 ,L/2), 'i2')
text(t r(L*0.8),x r(3,L*0.8), 'q')
if k==l;title(' (Al') ;end
i f k==2;title(' (B) ') ;end
i f k==3;title(' (C) ') ;end
i f k==4;title(' (D) ') ; e nd
end

10.3.6 Error, estabilidad y optimización por intervalo de tiempo


Los métodos de Runge-Kutta están sujetos a dos clases de errores: errores de truncado e
inestabilidad. Como se explicó antes, el error de truncado puede determinarse como Ja
370 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

discrepancia entre la expansión de Taylor del método numérico y la de la solución exacta. La


magnitud del error disminuye con mayor rapidez al disminuir h conforme aumenta el orden del
método. Por otro lado, la inestabilidad es un efecto acumulado de los errores locales.
A fin de analizar la estabilidad de un método de Runge-Kutta, consideremos nuestra
ecuación modelo

y'= ay (10.3.30)

donde a< O. Para un valor dado de Yn, el valor exacto de Yn+I está dado analíticamente por

(10.3.31 )

Observe que, como a< O, l(yn+I)exactal disminuye confonne se incrementan (o el tiempo).


La solución numérica de la ecuación 10.3.30 por el método de Runge-Kutta de cuarto
orden (ecuación 10.3.22) se convierte en

k¡ = a.hyn
1
k1 = ah(yn + k112) = ah(l + 2ah)y,,
1 1
kJ = ah(y,, + k112) = ah(l + 2ah(l + 2ah))Yn
1 1
~ = ah(y + k3) = ah(l + ah(l + 2ª~(1
11 + 2ah)))Yn

Yn+I = [ 1 +ah+ ~ah)2 + icah) 3 + -itah)4 Jy,, (10.3.32)

La ecuación 10.3.32 es igual a los primeros cinco términos de la expansión de Taylor del
miembro derecho de la ecuación 10.3.31 alrededor de tn. El factor de amplificación

y= 1 +ah+ ~ah)2 + i<ah) 3 + irah) 4 (10.3.33)

de la ecuación 10.3.32 es una aproximación de exp(ah) de la ecuación 10.3.31, así que tanto
el error de truncado como la estabilidad de la ecuación 10.3.23 tienen su origen en esta
aproximación.
En la figura 10.19 graficamos juntas la ecuación 10.3.33 y exp( ah) para poder comparar-
las. La figura indica que si a< Oy el módulo (valor absoluto) de ah aumenta, la desviación de
y con respecto a exp( ah) se incrementa; esto es, el error del método de Runge-Kutta aumenta.
En particular, si ah~ -2.785, el método se vuelve inestable porque el módulo de la solución
numérica aumenta en tanto que el módulo de la solución verdadera disminuye por un factor de
exp(ah) en cada paso.
Sección 10.3. Métodos de Runge-Kutta 371

4
'
'
35 !~.estable Estable
'
'
''
2.5
LO
' co
,.._
y ',
C\i
' i1
1.5 -s
exp( cti)

0.5

~ -3 -2 ·1
ah
Figura 10.19 Dominio de estabilidad

En las aplicaciones prácticas del método de Runge-Kutta, se puede determinar un intervalo de


tiempo óptimo de la siguiente manera: supongamos, para fines de ilustración, que deseamos
mantener el error local del método de Runge-Kutta de tercer orden por debajo de~ . El error
local de este método para un intervalo de prueba hes proporcional a h4 , así que expresamos el
error local en la forma

(10.3.34)

donde B es una constante que depende del problema en cuestión. Si aplicamos el mismo
método de Runge-Kutta en dos pasos con intervalo de tiempo h/2, el error será proporcional a
2(h/2)4 , donde el factor 2 se debe a la acumulación de errores en dos pasos:

2E1r12 = 2B(h/2)4 = (l/8)Bh4 (10.3.35)

Si restamos la ecuación 10.3.35 de la 10.3.34 obtenernos

E1r - 2Eh!2 = Bh4 - (l/8)Bh 4 = (7 /8)Bh 4 (10.3.36)

El miembro izquierdo de la ecuación anterior puede evaluarse con un experimento


numérico; es decir, ejecutando el esquema dos veces partiendo del mismo valor inicial. En la
primera ejecución sólo se avanza un incremento de tiempo utilizando un valor de prueba para
h como intervalo de tiempo. Denotamos el resultado de este cálculo por [y¡]¡,. En la segunda
ejecución se calcula (yi]1r12 en dos incrementos de tiempo utilizando el intervalo de tiempo h/2.
1 os valemos de los resultados de estos dos cálculos para evaluar el miembro izquierdo de la

ecuación 10.3.36 como

(10.3.37)
372 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

Si eliminamos el miembro izquierdo de la ecuación 10.3.36 por la ecuación 10.3.3 7


despejamos B obtenemos

B = (8/7)((y¡]h - [vi]h12)/h 4 (10.3 .3

Una vez determinado B, encontramos el h máximo (u óptimo) que satisface el criterio JEhJ ~ e
tomando el valor absoluto de la ecuación 10.3.35 e igualando JEhl = ~:

(10.3.39

Este enfoque recuerda un poco la integración de Romberg que explicamos en la sección 5.1.

Ejemplo 10.17

Suponiendo que se aplica un método de Runge-Kutta de cuarto orden a

y'= -y/(1 + r), y(O) = 1

encuentre un intervalo de incremento óptimo que satisfaga JEhl ~ 0.00001.

Solución
Para el método de Runge-Kutta de cuarto orden, el error local se expresa mediante

Eh =Bh 5 (A)

La estrategia es muy similar a la de las ecuaciones 10.3.34 a 10.3.39 excepto que el


orden del error es de 5. El error acumulado en dos pasos empleando h/2 es 2fü12 =
2B(h/2) 5 . La diferencia entre los errores de los cálculos de uno y dos pasos, esto es,
Eh - 2Eh12, se evalúa numéricamente con

(B)

En la ecuación anterior, [y1]h es el resultado del método de Runge-Kutta de cuarto


orden para un solo paso (incremento) con h, y [y2]h12 es el resultado de lo mismo para
dos pasos con h/2. Si sustituimos la ecuación (A) en la (B) y despejamos B, tenemos

B = (16/15)((yi]h- [yi]h12)/h 5 (C)

A continuación ejecutamos realmente el método de Runge-Kutta de cuarto orden para


un solo paso con h = 1 comenzando con la condición inicial dada, y luego para dos
pasos con h/2 = 112. Los resultados son:
Sección 10.4. Método de prueba y error 373

[y1]1=0.4566667 (un solo intervalo)


[y2]112 = 0.4559973 (dos intervalos)

De la ecuación (C) obtenemos B como

B = (16/15)(0.4566667 -0.4559973) / (1) 5 = 6.3 X 10- 4 (D)

Si sustiuimos esto en la ecuación (A), el error local para cualquier h se expresará así:

E¡,= 6.3 X 10- 4 h5

La h máxima que satisface e\ criterio dado, \E (h)\ < 0.00001, es

h = [ 0.00001 4 J 115 = 0.44 (E)


6.3 X 10-

10.4 MÉTODO DE PRUEBA Y ERROR


Los métodos numéricos para problemas de valor inicial pueden servir para resolver problemas
de valor en la frontera. Este enfoque se denomina método de prueba y error.
Consideremos una EDO de segundo orden

d2y(x) +a dy(x) + bu(x) =O (10.4.1)


dx2 dx .T

con
y (O)= O,y (1) = 1

La ecuación anterior nada tiene de nuevo en comparación con las EDO de segundo orden que
hemos visto en este capítulo, con la excepción de que la segunda condición no es una condición
inicial. Puesto que las condiciones de extremo están distribuidas entre los puntos inicial y final,
se dice que la ecuación es un problema de valor en la frontera.
Si queremos aplicar cualquier método numérico para problemas de valor inicial a la
ecuación 10.4.1, tenemos que considerar dicha ecuación como si fuera un problema de valor
inicial. Estimaremos la segunda condición inicial de forma provisional y veremos si se
satisface la segunda condición de frontera de la ecuación 10.4.1. Si no es así, haremos una
nueva estimación y probaremos de nuevo. El proceso se repetirá hasta que la condición final
se satisfaga. Desde luego, después de algunos ensayos aprenderemos a estimar con mayor
precisión la condición inicial, como cuando disparamos un rifle a un blanco.
374 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

Ejemplo 10.18
Una varilla de 0.2 m de longitud se coloca en una corriente de aire a 293 K. La
temperatura en el extremo izquierdo (x =O) está fija en 493 K, pero el extremo derecho
está aislado. El calor se elimina de la superficie mediante transferencia de calor por
convección. Utilizando las siguientes constantes, determine la distribución de tempe-
ratura en la dirección axial:

k = 60 W/mK (conductividad térmica)


he= 20 W/m2K (coeficiente de transferencia de calor)
A= 0.0001 m 2 (área de sección transversal)
P = 0.01 m (perímetro de la varilla)

Solución
La ecuación de conducción de calor en la dirección axial x es:
d2T
-Ak dx2 + Phc (T- 293) =O, O <x <0.2m (A)

con las condiciones de frontera

T(O) = 493 K, T' (0.2) =O

El problema en cuestión es uno de valor en la frontera (se especifican condiciones


de frontera en x = O y en x = 0.2 m), pero puede resolverse como problema de valor
inicial con el método de prueba y error. Si definimos

y¡(x) = T(x)
yi(x) = T'(x)

La ecuación (A) puede reescribirse como un conjunto de dos EDO de primer orden así:

y Í = yi(x)
(B)
yí= (Phc!Ak)(y¡(x)-293)

Sólo se conoce una condición inicial, y1(0) = 493, a partir de las condiciones en la
frontera (se desconoce yi(O)). Por tanto, resolvemos la ecuación (A) con valores de
prueba para y2(0) hasta satisfacer la condición de frontera para el extremo derecho, a
saber, y2(0.2) = T'(0.2) = O. El listado 10.12 es un guión de MA TLAB escrito para
realizar el cálculo. Al ejecutarse, el programa pide el valor de y2(0) y luego grafica la
distribución de temperatura calculada. Si examinamos la gráfica de y2(x), podremos
determinar la siguiente estimación.
Sección 10.4. Método de prueba y error 375

Utilizamos el método de Runge-Kutta de cuarto orden. Después de varias secuen-


cias de prueba y error, encontramos que yi(O) = -2813.57 satisface la segunda
condición de frontera exactamente, como se muestra en la figura 10.20.

400
n para y2(0)-2814
300

' 200

~ 100

,.. o

-100 y:-y v/10:...

-200 Estimación para y2(0)-2814 y2(0.2¡..o.02382

0.02 0.04 0.06 0.06 0.1 0.12 0.14 0.16 0.18 0.2
X (a)

Figura 10.20 Resultados calculados del método de prueba y error

Listado 10.12
clear, clg
while 1
y2 = input('Teclee gradiente, y2(0); o -99999 para salir: ')
if y2 < -88888, break, end
A= 0.0001; P=0.01; he= 120; k = 60; b=293;
a=P*hc/A/k;
n=l; x(l)=O; h = 0.01;
y(:,1) = [493;y2];
while x<=O. 3,
kl h*f shoot(y(:,n), x(n) a,b);
k2 h*f-shoot(y( : ,n)+kl/2, x(n)+h/2, a,b);
k3 h*f-shoot(y(:,n)+k2/2, x(n)+h/2, a,b);
k4 h*f-shoot(y(:,n)+k3, x(n)+h, a,b);
y(:,n+l)-= y(:,n) + (1/6)*(kl + 2*k2 + 2*k3 + k4);
x(n+l) = n*h;
if (x(n)-0.2001)*(x(n)-0.1999)<0
y2 end = y(2,n+l), break,
end -
n=n+l;
end
% y2 end=(y(l,n+l) - y(l,n) )/h;
plot(x,y(l,:), '-', x,y(2,:)/10, ':');
xlabel('x (s) '); ylabel(' y: - y v/10: ... ')
text(0.15, -200, ['y2(0.2)=', num2str(y2 end)])
text(0.02, -200, ['Estimación para y2(0);;', num2str(y2 )])
376 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

text(x(lO), y(l,10)-20, 'yl(x)')


text(x(lO), y(2,10)/10-20, 'y2(x)/10')
axis ( [O, O . 2, - 3 OO, 5 OO] )
end
f_sm
function f = f shoot(y,x,a,b)
f = [y(2); a*(y(l)-b)];

Comentario: Aunque resulta fácil escribir un programa empleando el método de prueba y


error, se requiere mucha paciencia para determinar la condición inicial que satisface la
condición de frontera en el extremo. El problema de valor en la frontera de este ejemplo se
puede resolver con mucha mayor facilidad y eficiencia utilizando el método que describiremos
en el capítulo 11.

10.5 MÉTODO DE LÍNEAS


El método de líneas es otra aplicación de los métodos numéricos para problemas de valor inici
a los problemas de valor en la frontera. El método de líneas es apropiado sobre todo para EDP
parabólicas.
Consideraremos una ecuación de conducción de calor no estacionaria:
2
aT(x,t) = a a T(x,t) o <X <H (10.5.l
at ax2 '

con la condición inicial

T(x, O)= To

y condiciones en Ja frontera

T(O, t) = Ti, T(H, t) = TR

donde a es una constante (difusividad ténnica).


Para deducir un algoritmo de resolución, dividimos el dominio de O ~ x ~ H en K +
intervalos equiespaciados, de modo que el tamaño de la malla es ~ = Hl(K + 1). Los puntos
se indizan con i y el valor de la temperatura en el punto i se denota por

T¡ (t) = T (x¡, t)
Podemos escribir una aproximación de semidiferencia para la ecuación 10.5.l así:

aT¡ (t) = _<1•2 (T¡_ 1(t)-2T¡(t) + T¡+1(t)), 1 ~ i ~ K (10.5.2


at ~

con condiciones de frontera


Sección 10.5. Método de líneas 377

To(t) =Ti, TK+1(t) = TR

Ahora podemos expresar Ja ecuación 10.5.2 en forma vectorial con

T'=MT+S (10.5.3)

donde

T2
T= T3

TK
-2 1 o o TL
a
1 -2 1 o a
o
M=--2
~X
o 1 -2 o S=--2
~X
o (10.5.4)
o
o o o -2 Tn
La ecuación anterior puede resolverse con uno de los métodos de Runge-Kutta.

Ejemplo 10.19

La temperatura de una barra de hierro perfectamente aislada de 50 cm de longitud es


inicialmente 200ºC. La temperatura del borde izquierdo se reduce repentinamente y se
fija en OºC en t =Os, pero la temperatura del extremo derecho se mantiene en 200ºC.
Grafique la distribución de temperatura en cada incremento de 200 s hasta llegar a
1000 s. Las propiedades del material son:

k = 80.2 W/mK (conductividad térmica)


p = 7870 kg/m 3 (densidad)
e = 44 7 kJ/kgK (calor específico)

Solución
Primero dividimos Ja barra en diez intervalos (véase la figura 10.21). La difusividad
térmica se calcula con

P
= _!_ = 8 2 º·
pC (7870)( 44 7)
= 2.28 X } o-S
La ecuación por resolver está dada por Ja ecuación 10.5.3 con K = 9. Los valores de
TL y TR de la ecuación 10.5.4 se fijan en TL = O y TR = 200, respectivamente. En el

/
378 Capítulo 1O Problemas de v~inicial de ecuaciones diferenciales ordinarias

o- o ~0-200
'< .~~
x-o · x=10 cm
1

Figura 10.21 Una barra aislada

listado 10.13 se muestra un guión en MA TLAB que utiliza el esquema de Runge-Kutta


de cuarto orden con el vector dado por la ecuación 10.3.29. Los resultados se grafican
en la figura 10.22.

180

160

140

4 5 6 10
Número de punto. i
Figura 10.22 Resultados del método de líneas

Listado 10.13
clear, clg, hold off
k=80.2; ro=7 870; c=447; TL=O; TR=200;
alpha = k/ro/c; Dx=. 05;
A=(-2 1 o o o o o o o;
1 -2 1 o o o o o O;
o 1 - 2 1 o o o o o;
o o 1 -2 1 o o o O;
o o o 1 - 2 1 o o O;
o o o o 1 - 2 1 o O;
o o o o o 1 -2 1 O; ...
o o o o o o 1 -2 1;
o o o o o o o 1 -2]*alpha/Dx"2;
Problemas 379

S=[TL; O; O; O; O; O; O; O;TR)*alpha/Dx·2;
T=[40;40;40;40;40;40;40;40;40);
T=200*ones(T);
n=O; t=O; h=20; m=O;
%
axis ([O, 10, O, 220))
j=[O,l:length(T),length(T)+l];
T plot=[TL, T' ,TR];
plot (j, T plot)
text ( j (2), T plot (2), [' t=', int2str (t), 's'))
xlabel('Número de punto, i')
ylabel ( 'T (grados C) ')
%
for k=l:S
for m=l:lO
n=n+l;
kl h*(A*T + S);
k2 h*(A*(T+kl/2) + S);
k3 = h*(A*(T+k2/2) + S);
k4 = h*(A*(T+k3) + S);
T = T+(kl + 2*k2 + 2*k3 + k4)/6;
t=h*n;
end
hold on
j=[O,l:length(T),length(T)+l);
T plot=[TL, T' ,TR);
plot (j, T plot)
text( j (k+l), T_plot(k+l) ,int2str(t))
end

PROBLEMAS
(10.1) Resuelva los siguientes problemas en O~ t ~ 5 utilizando el método de Euler hacia adelante
con h = 0.5, calculando manualmente. Repita con h =O.O 1 en MA TLAB. Evalúe los errores
comparando con las soluciones exactas que se muestran más adelante.

(a) y'+ ty = 1, y (O)= 1


(b) y'+3y=e-1, y(O)= 1
(c) y'=(t2-y), y(0)=0.5
(d) y , + YI YI = O, y (O) = l
(e) y'+ IYI 112 = sen(t), y(O)= 1

Solución exacta:
380 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

Caso (a) (b) (c) (d) (e)


t y y y y y
o 1.0000 1.0000 0.5000 1.0000 l.0000
1 l.3313 0.2088 0.4482 0.5000 0.6147
2 0.7753 0.06890 1.7969 0.3333 0.7458
3 0.4043 2.4955E-2 4.9253 0.2500 0.4993
4 0.2707 9.16IOE-3 9.9725 0.2000 --0.2714
5 0.2092 3.3692E-3 16.980 0.1666 -2.2495

Sugerencia: La solución de (b) puede oscilar con h = 0.5, pero se recomienda a Jos estudiantes
intentarlo de todos modos.
(10.2) Resuelva
y" (t)- 0.05y' (t) +O. 15y (t) =O, y'(O) =O, y (O)= 1

y encuentre los valores de y ( 1) y y (2) utiliz.ando el método de Euler hacia adelante con h = 0.5.
(10.3) Resuelva los siguientes problemas en O~ t ~ 5 utilizando el método de Euler hacia adelante
con h =O. 1 y h =O.O 1 (escriba su propio programa en MA TLAB). Evalúe los errores con las
soluciones exactas que se muestran más adelante.

(a) y" + 8y =O, y (O)= 1, y' (O)= O


(b) y"--O.Ol(y') 2 +2y=sen(t), y(O)=O, y'(O)=l
(c) y"+2ty'+ty=O, y(O)= J, y'(O)=O
(d) (e 1 +y)y"=t, y(O)=l, y'(O)=O

Solución exacta:

Caso (a) (b) (c) (d)


t y y y y
o 1.0 0.0000 1.0000 1.0000
l --0.9514 0.8450 0.8773 1.0629
2 0.8102 0.9135 0.5372 1.3653
3 --0.5902 0.1412 0.3042 1.8926
4 0.3128 --0.7540 0.1763 2.5589
5 --0.0050 --0.9589 0.1035 3.2978

(10.4) Resuelva las siguientes ecuaciones para O < t < 5 utilizando el método de Euler modificado:

4y' = -3y + 7z + 2t, y (O)= 1

7z' = -2y + 8z, z (O)= O

Utilice tanto h =O.O 1 como h = 0.001.


Problemas 381

(10.5) Un tanque cónico contiene agua hasta una altura de 0.5 m desde el fondo. El tanque tiene un
agujero de 0.02 m de radio en el fondo. El radio del tanque en y está dado por r=0.25y, donde
r es el radio y y es la altura medida desde el fondo . La velocidad del agua que sale por el
agujero está dada por v2 = 2gy, donde g = 9.8 m/s 2 . Utilice el método de Euler hacia adelante
(con h = 0.001 s) para averiguar cuántos minutos tardará el tanque en vaciarse.
(10.6) Un circuito, que se muestra en la figura 10.23, tiene una autoinductancia de L = 100 mH, una
resistencia de R = 20 k.Q y una fuente de voltaje de OC de JO V. Si el interruptor se cierra
en t =O, la corriente, /(t) cambia según

L d~~) + l(t)R = E, 1(0) = O

(a) Determine Ja corriente J en t = 1, 2, 3, 4 y 5 ms por el método de Euler hacia adelante


con h =O.O! ms.
(b) Evalúe el error comparando Ja solución numérica con la solución analítica dada por
J(t) = (EIR)( 1 - exp(-Rt!L)).
(c) Investigue el efecto de h repitiendo los cálculos anteriores con h = 0.1 ms.

L= 100mH

R=20k O

t_v_~
s

(10.7) Un tubo en U de 0.05 m de radio está lleno inicialmente con agua, pero separado con una
partición de modo que el nivel del agua en la rama vertical izquierda está 0.2 m más alto que
el nivel del agua en la rama vertical derecha. En t = Ola partición se retira repentinamente.
El nivel del agua en Ja rama vertical izquierda, y A, medido desde el plano medio entre dos
superficies, satisface

L~" =-2~

donde Les la longitud total de agua en el tubo (se supone que es 1 m) y g = 9.8 m/s 2. Ignore
Ja fricción en el tubo y calcule el nivel del agua por el método de Euler hacia adelante
para O < t < 1O s y encuentre en qué momentos YA alcanza mínimos y máximos. Utilice
h=0.1 s.
382 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

(10.8) Repita el problema anterior suponiendo que hay fricción en el tubo, de modo que la ecuación
del movimiento está dada por

donde ~ = 0.8 mis. Utilice h = 0.001 s.


(10.9) La densidad numérica (número de átomos por cm 3) del radioisótopo yodo-135 satisface

dN; (t) = -'A.N (t)


dt l l

donde N(t) es la densidad numérica del yodo-135 y 'A.; es su constante de desintegración, igual
a 0.1044 h- 1• Si N¡ (O) = 105 átomos/cm 3 en t = O, calcule N; (t) en t = 1 h por el método de
Euler modificado. Utilice h = 0.05 h.
(10.10) El producto de la desintegración del yodo-135 (considerado en el problema anterior) es
xenón-135, que también es radiactivo. La constante de desintegración del xenón-135 es
Ax= 0.0753 h- 1. La densidad numérica del xenón-satisface

dNx (t)
---¡¡¡- = -'A.xNx (t) +A¡ N; (t)

donde Nx es la densidad numérica del xenón y N; es la densidad numérica del yodo definida
en el problema anterior. Suponiendo que Nx (O) = O, escriba un programa para calcular N; y
Nx con base en el método de Euler modificado. (Puesto que las ecuaciones diferenciales son
lineales, utilice soluciones de forma cerrada para cada incremento de tiempo.) Encuentre la
solución para O< t ~ 50 h y grafique. Utilice h = 0.1 h.
(10.11) Encuentre y (1) para la siguiente ecuación empleando el método de Runge-Kutta de
segundo orden con h = 0.5:

y' = ..-l:'.-, y (0) = 1


t + y2

(10.12) Calcule y (2) para la siguiente ecuación utilizando el método de Runge-Kutta de segundo
orden con h = 1:

y"+ 0.2y' + 0.003y sen(t) = O, y (O)= O, y '(O)= 1

(10.13) Encuentre el valor de y (1) resolviendo

y" -0.05y' +O. l 5y =O, y (O)= 1, y '(O)= O

Utilice el método de Runge-Kutta de segundo orden con h = 0.5.


Problemas 383

(10.14) Resuelva la siguiente ecuación diferencial

2y" + (y ') 2 +y= O, y (O) =O, y '(O) = 1

por.el método de Runge-Kutta de segundo orden con h = 0.5 y evalúe y (I) y y '(I).
(10.15) Un problema de valor inicial de una ecuación diferencial ordinaria está dado por

y"'= -y, y (O)= 1, y '(O)= y "(O)= O

Utilice el método de Runge-Kutta de segundo orden con h = 0.2 para calcular y(0.4).
(10.16) (a) Un tanque de 50 gal lleno de agua contiene sal a una concentración de 10 oz/gal. Con
objeto de reducir el contenido de sal, se agrega agua dulce a razón de 2 gal/min. Si el tanque
se mezcla bien y el agua sale del tanque con la misma velocidad de flujo, el contenido de sal
satisface
y j(t) = -(2/50)y1

dondey1(t) es la concentración de sal en oz/gal y tes el tiempo en minutos. Aplique el método


de Runge-Kutta de segundo orden con h = 1 min para averiguar cuánto tardará la concentra-
ción de sal en llegar a 1/1 Ode su valor inicial.
(b) El agua que sale del tanque ingresa en otro con capacidad de 20 gal, en el cual también
se vierte agua dulce con una velocidad de 3 gal/min, mezclándose bien. La concentración de
sal en este tanque satisface

y Í (t) = -(5120)y2(t) + (2!20)y¡ (t), y2(0) =O

donde y1(t) es la concentración de sal en el tanque de 50 gal del inciso anterior. Utilice el
método de Runge-Kutta de segundo orden para averiguar en qué momento la concentración
de sal en el tanque de 20 gal llega a su máximo. Suponga que el agua del segundo tanque es
dulce en t = O.
(10.17) Calcule y ( 1) resolviendo la siguiente ecuación por el método de Runge-Kutta de cuarto
orden con h = 1:
y' = -yl(t + y2), y (O) = 1

(10.18) Encuentre la solución de

y'(t)=-1/(1 +y2), y(O)= 1

para t = 1 y t = 2 empleando el método de Runge-Kutta de cuarto orden con h = 0.5


y h =J.
384 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

(10.19) Se dispara una bala al aire con un ángulo de 45 grados respecto del suelo a u= v = 150 mis,
donde u y v son las velocidades horizontal y vertical, respectivamente. Las ecuaciones del
movimiento están dadas por
u' =-cVu, u (O)= 150 mis
(A)
v' = -g - e Vv, v (O) = 150 mis

donde u y v son funciones del tiempo, u = u (t) y v = v(t), y

~ = u2 + v2
e= 0.005 m- 1 (coeficiente de arrastre)
2
g = 9.8 mls (aceleración debida a la gravedad)

Las ecuaciones del movimiento pueden resolverse por uno de los métodos de Runge-Kutta.
La trayectoria de la bala puede calcularse integrando
x'=uyy'=v

o bien
X = fot u(t')dt'
(B)
y= fot v(t')dt'
A continuación listamos un guión basado en el método de Euler hacia adelante que resuelve
la ecuación (A) y evalúa la ecuación (B):
clear; clg
u= 150; v=150; h=.1; c=0.005; t=O;
ub=u; vb=v;
y=O; x=O; n=l;
u rec(l}=u; v rec(l)=v; t_rec(l)=t;
x-rec(l)=x; y-rec(l)=y;
while y>=O -
vell = sqrt(ub*ub + vb*vb);
kl = h*(-c*vell*ub);
11 = h*(-9.8-c*vell*vb);
u=ub+kl; v=vb+ll;
x=x+h*(ub+u}/2; y=y+h*(vb+v)/2;
ub=u; vb=v;
n=n+l; t=t+l;
u rec(n)=u; v rec(n)=v; t_rec(n)=t;
x-rec(n)=x; y-rec(n)=y;
end- -
plot(x rec, y rec)
xlabel('x'); ylabel('y')
Problemas 385

(a) Ejecute el guión y grafique la trayectoria de la bala. (b) Reescriba el guión utilizando el
método de Runge-Kutta de cuarto orden en una fonna vectorial. Encuentre, con un error de
menos del 0.1 %, la distancia horizontal que alcanza la bala.
(10.20) Se muestra la solución de y'= -1 ( 1 + y2) por el método de Runge-Kutta de segundo orden
para dos valores de h distintos:

h =0.1 h=0.2
t y y
O.O 1.0000000 1.0000000
0.1 0.9487188
0.2 0.8946720 0.8947514

(a) Estime el error local de y (0.2) con h = 0.1.


(b) Estime un valor más exacto de y (0.2).
(c) Si el error local debe satisfacer !Eh! < 0.00001, estime h.

(10.21) Para la ecuación dada por

y'= 3y + exp(l - t), y(O) = 1

encuentre un incremento de tiempo óptimo para el método de Runge-Kutta de segundo orden


que satisfaga IEhl < 0.0001. (Ejecute el método de Runge-Kutta de segundo orden para un
intervalo con un valor de h y vuelva a ejecutarlo para dos intervalos con h/2.)
(10.22) Repita el problema 10.21 para el método de Runge-Kutta de cuarto orden.
(10.23) Repitiendo el análisis de las ecuaciones 10.3.33 a 10.3.39, deduzca la ecuación que
corresponde a la ecuación 10.3.38 para el método de Runge-Kutta de tercer orden.
(10.24) Si se aplica el método de Runge-Kutta de tercer orden a y' = -ay, detennine en qué
intervalo de h el método es inestable.
(10.25) La temperatura inicial de una pieza de metal es de 25ºC. La pieza se calienta internamente
mediante una corriente eléctrica a razón de Q = 3000 W. La ecuación para la temperatura es:

-dT = - 1 [Q- rnA(1...t· - 2984 )- hcA(T - 298)] , T(O) = 298K


dt Vpc

donde Testá en kelvin y


k= 60 W/mK (conductividad térrr.ica)
o= 5.67 x 10-8 W/m 2K4 (constante de Stefan-Boltzmann)
A= 0.25 m2 (área superficial)
386 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias

V= 0.001 m(volumen)
e= 900 J/kgK (calor específico)
p = 3000 kg/m 3 (densidad)
he= 30 J/m 2 K (coeficiente de transferencia de calor)
E= 0.8 (emisividad)
Calcule la temperatura para O < t < 1O min por el método de Runge-Kutta de cuarto orden
con h = 0. 1 min.
(10.26) El movimiento del sistema resorte-masa ilustrado en la figura 10.24 está dado por:

y"+ 2~wy' + w 2y = F(t)IM, y (O)= y '(O)= O

donde
112
w = (k/M) (frecuencia natural no amortiguada, s- 1)
~ = 0.5 (factor de amortiguación)
k = 3.2 (constante del resorte, N/m)
M = 5 (masa, kg)
F(t) =O (fuerza, N)

k-3.2 Nlm

y(0)-0 M-Skg

y(t)

F(I)

Figura 10.24 Sistema de resorte-masa

Si F(t) = 1 para O~ t ~ 1 s y F(t) =O para t> 1 s, detennine el movimiento de la masa para


O< t < 1Os utilizando el método de Runge-Kutta de cuarto orden.
(10.27) Detennine la respuesta del sistema resorte-masa del problema anterior sujeto a un pulso de
fuerza triangular:
Problemas 387

F(t) = 2Fot, O ~ t ~ 1 s
= 2Fo( 1 - t), 1 ~ t ~ 2s
=O, t > 2 s

donde Fo= 1 N. Utilice el método de Runge-Kutta de cuarto orden y grafique el resultado.


(10.28) Repita el problema del ejemplo 10.16, pero cambie e(t) a

e(t) =sen( l 200t)exp(-1200t)

y resuelva para O < t < O.O1 s.

(10.29) Resuelva el siguiente problema por el método de prueba y error con base en el método de
Runge-Kutta de cuarto orden:

Ak df- + Pa(T 4 - 273 4 ) = AQ O< x < 0.5


dx 2 '
T(O) =O
T'(0 .5) =o
donde A y P se dan en el ejemplo 10.18 y a= 5.67 x 1o-8 W/m 2 K4 .
Sugerencia: Cambie T'(0.5) por prueba y error hasta que se satisfaga T'(0.5) =O.
Capítulo 11

Problemas de valor en la frontera de


ecuaciones diferenciales ordinarias

11.1 INTRODUCCIÓN
En el caso del problema unidimensional de valor en la frontera de ecuaciones diferenciales
ordinarias, la solución debe satisfacer condiciones de frontera en ambos extremos del dominio.
La definición de las condiciones de frontera es una parte importante de todo problema de valor
en la frontera. Por ejemplo, consideremos una varilla metálica delgada de longitud H con cada
uno de sus extremos conectado a una fuente de calor distinta (véase la figura 11.1 ). Si el calor
escapa de la superficie de la varilla al aire únicamente mediante transferencia de calor por
convección, la ecuación de la temperatura es:

d
-Adxk(x) dx
!!Ihl +hcPT(x)=hcPToo+AS(x) (11.1.1)

donde T(x) es la temperatura a una distancia x del extremo izquierdo, A es el área de sección
transversal constante de la varilla, k es la conductividad ténnica, Pes el perímetro de la varilla,
he es el coeficiente de transferencia de calor por convección, Too es la temperatura global del
aire y Ses la fuente de calor. Las condiciones de frontera son:

T(O) = Tr
(11.1.2)
T(H) = TR

donde Tr y TR son temperaturas conocidas en los extremos izquierdo y derecho, respecti-


vamente.
Si 8 definimos como
8 = T- Too

podemos escribir la ecuación 11.1 .1 como


d d8(x)
- d/(x) dx + a8(x) = S(x) (11.13)

388
Sección 11.1. Introducción 389

donde a= hcPIA y la ecuación se dividió entre A. El primer término representa la conducción


de calor, el segundo es la eliminación de calor por convección hacia el aire y el miembro
derecho es la fuente de calor.

Perímetro P

~- --+- H -·

Figura 11.1 Una aleta conectada


a dos fuentes de calor

Otro ejemplo de EDO en una forma similar es la ecuación de difusión de neutrones dada
por
d ,dw(x)
- dxD(x~ + r.a'V(X) = S(x) (11.1.4)

donde 'V es el flujo de neutrones, Des el coeficiente de difusión y Ses la fuente de neutrones.
El primer ténnino representa la difusión de neutrones, mientras que el segundo representa la
eliminación por absorción.
En el resto del capítulo consideraremos la ecuación

-fx p (x) d~x) + q(x)<j>(x) = S(x) (11.1.5)

o ecuaciones similares en coordenadas cilíndricas o esféricas. El primer ténnino es el de


difusión, el segundo es el de eliminación y el miembro derecho es el término de la fuente.
Debemos hacer hincapié en que la ecuación 11 .1.5 es una ley de conservación de la
difusión. De hecho, si integramos la ecuación en [a, b], obtenemos

Z(b)- Z(a) + ¡b q(x)<f>(x)dx = ¡b S(x)dx (11.1

donde

Z(x) = -p(x)dPJ;x)
390 Capítulo 11 Problemas de valor en la frontera de ecuaciones diferenciales ordinaria_

es el flujo de calor en x si estamos considerando la conducción de calor, o la corriente de


neutrones si estamos considerando la difusión de neutrones. En todos los casos, el primer ~
segundo términos de la ecuación anterior representan, respectivamente, el flujo que entra y e
flujo que sale de la cantidad fisica asociada a cj>, el tercer término es Ja eliminación total en
[a, b] y el miembro derecho es la fuente total en [a, b]. Así pues, la ecuación 11.1 .6 representa
la conservación de la cantidad fisica en [a, b].
Si la ecuación 11.1. l fuera un problema de valor inicial, se especificarían dos condiciones
de frontera en una sola frontera, y Ja resolución numérica podría proceder de ese extremo hacia
el otro mediante un método numérico como por ejemplo el de Runge-Kutta de cuarto orden.
Aunque podemos utilizar los métodos de resolución de problemas de valor inicial para resolver
problemas de valor en la frontera, como se ilustró en el capítulo 1O, únicamente funcionan bajo
un sistema de prueba y error (véase el ejemplo 10.18). Una ventaja del método de prueba ~
error es que se puede aprovechar un programa existente para problemas de valor inicial. Sin
embargo, el método de prueba y error a menudo fracasa a causa de Ja inestabilidad numérica.
Además, su aplicación se dificulta mucho si el orden de la EDO es mayor que dos.
Una forma más general de resolver problemas de valores en la frontera consiste en (a)
deducir ecuaciones de diferencia y (b) resolver todas las ecuaciones de diferencia simultánea-
mente. En este capítulo estudiaremos primero la deducción de aproximaciones de diferencia
para problemas de valor en la frontera y su resolución simultánea.

11.2 PROBLEMAS DE VALOR EN LA FRONTERA PARA VARILLAS


Y PLANCHAS
En esta sección deduciremos ecuaciones de diferencia finita para ecuaciones difcrenciale
ordinarias de segundo orden con condiciones en la frontera.
Con objeto de explicar el principio del método, consideremos la ecuación

4j>"(x) + q cj>(x) = S(x), O< x < H (11.2.1)

con las condiciones de frontera

cj>'(O) =O (C.F. izquierda)


(11.2.2)
cj>(H) = <!>R (C.F. derecha)

donde q es un coeficiente constante. Si dividimos el dominio en N intervalos equiespaciados


obtenemos una retícula (véase Ja figura 11 .2) cuyos intervalos son h = HIN. Si aplicamos la
aproximación de di fcrencia central (véase ( f) de la tabla 6.1) al primer ténnino de la ecuación
11 .2.1, deducimos la ecuación de diferencia para el punto i:

-<J>¡_¡ + 2<J>¡- cj>¡+¡


h2
th -
+ q.,,; -
si (11.2.3 )
Sección 11 .2. Problemas de valor en la frontera para varillas y planchas 391

donde <j>; = <j>(x;) y S; = S(x;) y q se supone constante. Si multiplicamos la ecuación 11.2.3 por
h2 obtenemos

-<l>;-1 + (2 + w)<j>;-<j>;+1 = h2S; (11.2.4)

donde w = h2q. La ecuación anterior se aplica a todos los puntos de la retícula excepto i = 1 e
i=N+ l.

+'•O
•••
!R
..... ol h• •2h •3h
x•-h • • • 11. • Nh•H
i•O l 2 3 4 N N+l

Figura 11.2 Retícula unidimensional para una plancha

La condición de frontera izquierda dada por la ecuación 11.2.2 equivale a una condición
de frontera de simetría llamada condición de frontera adiabática en el área de transferencia de
calor. Si consideramos un punto de retícula hipotético i =O situado en x =-h, la ecuación 11.2.4
para i = 1 se convierte en

(11.2.5)

En la ecuación anterior, podemos igualar <!>o = <!>2 porque Ja condición de frontera izquierda
puede interpretarse como

"'' "'<!>2 -<l>o = 0


'!'¡ 2h

Si entonces dividimos la ecuación resultante entre 2 obtenemos

(11.2.6)

Puesto que <!>N+l = <j>(H) = <!>R en Ja frontera derecha, Ja ecuación 11.2.4 para i = N se escribe
así:

(11.2. 7)

donde todos los ténninos conocidos quedan en el miembro derecho.


El conjunto de ecuaciones 11 .2.5, 11 .2.4 y 11.2. 7 se puede agrupar así:
392 Capítulo 1 1 Problemas de valor en la frontera de ecuaciones diferenciales ordinarias

(1 + w/2)4>1 -<!>2 = h2S1/2


- <!> 1 + (2 + w)4>2 - <j>3 = h2S2
-<j>l + (2 + w)<j>3 -<!>4 = h2S3 (11.2.8)

o, Jo que es lo mismo, como las matrices

1 + w/2 - 1
-1 2+w -1
-1 2+ w -1

-1 2+w
(11.2.9)

La matriz de coeficientes de la ecuación 11.2.9 contiene únicamente ceros excepto a lo largo


de las tres líneas diagonales. Esta forma especial de matriz se denomina matriz tridiagonal y
aparece con mucha frecuencia en Jos métodos numéricos para problemas de valor en Ja
frontera. La ecuación 11.2.9 se resuelve mediante Ja solución tridiagonal que describiremos en
la sección 11.3.

TABLA 11.1 Tres tipos de condiciones de frontera

Tipo Explicación Ejemplos

Condición de frontera
de valor fijo Se da el valor funcional
(tipo Dirichlet) de la solución. <!>(O) = O, o <j>(O) = 1

Condición de frontera
derivada Se da la derivada <j>'(O) =O, o <j>'(O) = 1
(tipo Neumann) de Ja solución.

Condición de El valor funcional


frontera mixta está relacionado <j>'(O) + a<j>(O) = p
(tipo mixto) con la derivada.
Sección 11.2. Problemas de valor en la frontera para varillas y planchas 393

Las condiciones de frontera se clasifican en tres tipos, como se aprecia en la tabla 11.1.
Con objeto de analizar la implementación de una condición de frontera de tipo mixto,
supongamos que ambas condiciones de frontera de la ecuación 11.2.1 son de tipo mixto, a
saber:
- <j>(O) +.fL<j>(O) = gL (11.2.10)
<j>'(H) + jR<t>(H) = gR (11.2.11)

donde/L,/R, gL y gR son constantes. Consideraremos la retícula que se muestra en la figura 11.3


(que es la misma que la de la figura 11.2, excepto que el último punto de retícula tiene el
número Nen lugar de N + 1).


X=O

h
• •3h •
2h
• • • •H
i=1 2 3 4 N-1 N

Figura 11.3 Retícula unidimensional

La ecuación de diferencia, 11.2.4, no cambia para i = 2 hasta i = N- 1, pero es necesario


modificarla para i = 1 e i = N debido a las nuevas condiciones de frontera. Consideraremos
primero la frontera izquierda. Si utilizamos la aproximación de diferencia hacia adelante
basada en un intervalo de h/2 con la ecuación 11.2.1 en x = O obtenemos
<j>'(h/2)-<j>'(O) + ,i- _ S
- h/2 q't'J - 1 (11.2.12)

Aquí, <l>(h/2) se sustituye por la aproximación de diferencia central,

<l>'(h/2) = (<!>2 -<!>1)/h

y <!>(O) puede eliminarse mediante la ecuación 11.2.1 O, con lo cual obtenemos

_(<!>2-<!>1)/h+gi-/L<l>1 +""- =S
h/2 o't'I 1

o, lo que es lo mismo,

(11.2.13)

donde w = qh 2 y todos los términos conocidos están en el miembro derecho.


394 Capítulo 11 Problemas de valor en la frontera de ecuaciones diferenciales ordinarias

La ecuación de diferencia para la frontera derecha se deduce por un procedimiento similar:

(11.2.14)

El conjunto de ecuaciones 11.2.13, 11.2.4 y 11.2.14 fonna un conjunto de ecuaciones


tridiagonal.

Ejemplo 11.1

Deduzca ecuaciones de diferencia para el siguiente problema de valor en la frontera:

- 2y"(x) + y(x) = exp(- 0.2x) (A)

con las condiciones de frontera

y (O)= 0.1
y'(IO) = - y(lO)
Suponga que la retícula tiene espaciado unitario.

• L
9 x•lO

9 10

Figura 11.4 Retícula para el ejemplo 11 . 1

Solución

Consideramos la retícula que se muestra en la figura 11.4. Las ecuaciones de diferencia


para i = 2 hasta 9 son:

2(-Yi-I + 2y¡- 2y¡+ 1) +y¡= exp(- 0.2i) (B)

donde se utiliza X¡ = i.
Para i = 1, se sustituye la condición de frontera yo= y(O) = 1 en la ecuación (B) para dar

5y1 - 2y2 = exp(-0.2) + 0.2 (C)

Para i = 10, aproximamos primero la ecuación (A) con


Sección 11.3. Solución de la ecuación tridiagonal 395

2[y '(10)- y '(9.5)] (10) - ( 2) (D)


- 1/2 +y -exp-

Si utilizamos la aproximación de diferencia central, el ténnino y '(0.95) se convierte en

y'(9.5) =[y (10) -y (9)]/l (E)

Si sustituimos la ecuación (E) y la condición de frontera derecha y '(1 O) =-y (1 O) en


la ecuación (D) tenemos:

-2y9 + 4.5y10 = 0.5 exp(-2) (F)

Para resumir las ecuaciones de diferencia obtenidas escribimos

.fy; -~ = exp(-{}:?) +a2


-2y¡_¡ + 5y; - 2y;+¡ = exp(-0.2.x;), para i = 2 a 9 (G)
-1:y<i + <\."::>)>\\\ = l;.)."::i e'k\l\-'l)

donde se utiliza x; = i. Los resultados numéricos se muestran en el ejemplo 11.2.

11.3 SOLUCIÓN DE LA ECUACIÓN TRIDIAGONAL


Escribimos la ecuación tridiagonal deducida en la sección 11.2 en la fonna

B1 C1
A2 B2 C2 </>1 D1
A3 B3 C3 </>2 D2
<f>3 D3
(11.3.1)
Ai Bi ci </>i Di

AN EN <f>N DN

A continuación presentamos el algoritmo de resolución, llamado solución tridiagonal y que es


una variante de la eliminación de Gauss.

(a) Inicializar las dos variables nuevas:

Bí = B1, y D'1= D'1

1 '¡ )
} t - /,
.~
396 Capítulo 11 Problemas de valor en la frontera de ecuaciones diferenciales ordinarias

(b) Calcular repetidamente las siguientes ecuaciones en orden de i creciente, hasta


llegar a i = N:

R =A;!Bj_ 1
Bf =B; -RC;-1 (11.3.2)
DI= D;- RDj_ 1

para i = 2, 3, ... , N.
(c) Calcular la solución para la última incógnita con

(11.3.3)

(d) Calcular la siguiente ecuación en orden de i decreciente:

<j>; = (Df - C;<j>;+1)/Bj, i = N- 1, ... ,2,1 (11.3.4)

En un programa para computadora no es necesario distinguir las variables primas de Bí y Dj,


respectivamente, porque Bí y D,' se almacenan en el mismo lugar que B; y D; en la memoria.
Por tanto, el paso (a) no es necesario en la programación práctica.
En el listado 11.1 se presenta un archivo M de función, tri_diag. m que resuelve la
ecuación tridiagonal.

Listado 11.1
tri_diag.m
functian f = tri diag(a,b,c,d,n)
far i=2:n
r=a(i)/b(i-1)
b(i)=b(i)-r*c(i-1)
d(i)=d(i)-r*d(i - 1)
end
d(n)=d(n)/b(n)
far i=n-1:-1:1
d(i)=(d(i)-c(i)*d(i+l))/b(i)
end
f=d;

Una vez completado el cálculo de la función, la solución se devuelve en el arreglo f.

Ejemplo 11.2

Resuelva la ecuación (D) del ejemplo 11.1 y grafique los resultados.


Sección 11.4. Coeficientes variables y espaciado de retícula no uniforme 397

P=P;. 1 P=P;
Q=Q¡.1 Q=Q¡
S = S;._, S = S;

h1·1 __.....__ h¡

i-1 a b i+1

Figura 11.5 Gráfica de la solución

Solución

La respuesta se calcula con el siguiente guión; la solución se grafica en la figura 11.5.

clear, clg, y0=0.1;


b(l)=S; c(l)=-2; s(l)=exp( - 0.2) + yO;
far i=2:9
a(i)=-2; b(i)=S; c(i)=-2; s(i)=exp(-0.2*i);
end
a(l0)=-2; b(10)=4.5; s(lO)=O.S*exp(-2);
y=tri diag(a,b,c,s,10)
plot (O: 10, [yo, y))
xlabel('x'); ylabel('y')

11.4 COEFICIENTES VARIABLES Y ESPACIADO DE RETÍCULA


NO UNIFORME
En muchos problemas, los coeficientes de Ja ecuación diferencial dependen del espacio. Por
ejemplo, se utilizan retículas no equiespaciadas cuando la geometría consiste en capas de
diferentes propiedades.
La ecuación diferencial ordinaria de segundo orden para Ja geometría de plancha con
coeficientes variables se escribirá aquí así:

-(p(x)<j>'(x))' + q(x)<j>(x) = S(x) (11.4.1)

con las condiciones de frontera dadas por las ecuaciones 11.2.9 y 11.2.1 O. El espaciado de la
retícula entre x; y Xi+I se denotará por h;. Suponemos que p, q y Sen cada intervalo de retícula
son constantes y están denotadas por p;, q; y S;, respectivamente, como se muestra en la
figura 11.6.
400 Capítulo 11 Problemas de valor en la frontera de ecuaciones diferenciales ordinarias

(11.4.12)

La <!>' del segundo término del miembro derecho de la ecuación 11.4.11 se elimina con la
~cuación 11.2.1 O. Por tanto, la ecuación 11.4.11 se convierte en

- ¡
a
b I I
(p</>) dx ~ -p¡
</>2 - </>¡
h
1
+ p¡ (-gL + fL</>1) ~
(11.4.13)

El segundo término y el miembro derecho de la ecuación 11.4.2 se convierten, respecti-


vamente, en
rb q¡h¡
la q(x)</>(x)dx ~ - 2-</>1 (11.4.14)

fb S(x )dx ~ S1h1 (11.4.15)


la 2
Si sustituimos las ecuaciones 11.4.12 a 11.4.15 en la ecuación 11.4.2 obtenemos

(P..!.+ PifL + ~)<1>1-~2 = S¡h¡ + pigL (11.4.16)


h1 2 h1 2

que se puede reescribir de forma más compacta como

(11.4.17)

La ecuación de diferencia para el punto de frontera derecho puede deducirse de forma


similar, y se escribe así:
(11.4.18)

El conjunto de ecuaciones de diferencia así deducido, a saber, las ecuaciones 11.4.17, 11.4.9 y
11.4.18, adopta exactamente la forma de la ecuación 11.3 .1.
Siempre que se impongan condiciones de frontera fisicamente correctas y que el coefi-
ciente del término de eliminación no sea negativo, la matriz de coeficientes de las ecuaciones
de diferencia en la forma de conservación tendrá las siguientes propiedades:

(a) la matriz de coeficientes de la ecuación 11.3.1 es simétrica,


(b) todos los coeficientes diagonales son positivos,
(c) todos los A¡ y C¡ son negativos,
(d) los coeficientes de cada fila satisfacen

B¡~-A¡-C¡

con desigualdad estricta en al menos una fila, y


Sección 11.5. Cilindros y esferas 401

(e) ninguna parte de la ecuación puede resolverse con independencia de las demás partes.

El inverso de la matriz que satisface todas las condiciones anteriores resulta ser una matriz
positiva; es decir, todos los elementos de la matriz inversa son positivos. Esto implica que, si
S; ~ O con desigualdad estricta para por lo menos una i, la solución es positiva en todos los
puntos.

11.5 CILINDROS Y ESFERAS


La deducción de ecuaciones de diferencia para ecuaciones diferenciales ordinarias de
segundo orden para geometrías cilíndricas y esféricas es muy similar a la que explicamos
en la sección 11.4. Las ecuaciones de diferencia para estas dos geometrías tienen la forma de
la ecuación 11.3.1.
La ecuación diferencial ordinaria de segundo orden para geometrías cilíndricas y esféricas
puede escribirse así:

1 d d
- - -d p (r) r 111 -d <P (r) + q(r)<j>(r) = S(r) (11.5.1)
r 111
r r

donde

m = 1 para un cilindro
m = 2 para una esfera

Observe también que la ecuación se reduce a la 11.4.1 para el caso de una plancha cuando
m=O.
Considerando coeficientes dependientes del espacio y una retícula no equiespaciada, como
hicimos en la sección anterior, deducimos aproximaciones de diferencia por el método de
integración. Esto es, integramos la ecuación dentro de un volumen de control cilíndrico o
esférico, dependiendo de la geometría.
A continuación presentamos la deducción de ecuaciones de diferencia empleando las
notaciones para h, p, q y S definidas en la figura 11.6, donde se supone que p, q y S son
111
constantes entre dos puntos consecutivos. Multiplicamos la ecuación 11.5.1 por r e integra-
mos desde a = n-112 hasta b = r;+112, que son los puntos medios de [r;-1, r¡) y [r;, r;+¡],
respectivamente:

(11.5.2)

Aquí, en el caso de una geometría cilíndrica (m = 1),r 111 dr representa un elemento de volumen
infinitesimal dividido entre 2rtL, donde Les la altura del cilindro circular. En el caso de una
geometría esférica, r"dr representa un elemento de volumen infinitesimal dividido entre 4rt.
El primer término de la ecuación 11.5 .2 se convierte en
402 Capítulo 1 1 Problemas de valor en la frontera de ecuaciones diferenciales ordinarias

(11.5.3 )

Si ahora utilizamos la aproximación de diferencia para las derivadas obtenemos:


111 <1>1 -<l>i-1 111 cj>¡+1 -Q>¡
p;-1r;-112 h·1- - p;-1r;+112 h·1 (11.5.4 )
I

Para la geometría cilíndrica, el primer término multiplicado por 2rrL es el flujo total de la
cantidad fisica a través de la superficie cilíndrica en a= r;-1 12, y el segundo es lo mismo para
b = r;+112. Para la geometría esférica, el primer término multiplicado por 4n es el flujo total.
El segundo término de la ecuación 11.5.2 se puede aproximar con

(11.5.5 )

y representa la eliminación total de la propiedad fisica en [n-112, r;+1 12], donde, para /11 = 1,

vr = ~[ry - (r;- h~i )2] = h~i (r;- h~i) (11.5.6)

1
VR=2[(r¡+ 2)
h· 2
-r¡]=
2
2(r¡+ h·4)

(11.5.7 )

y para m = 2,

(11.5.8 )

(11.5.9

Observe aquí, para 111=1, que vr multiplicado por 2nl es el volumen de la celda cilíndrica entre
r = r;-112 y r = r;, mientras que VR es el volumen análogo entre r; y r¡+1 12. El tercer término de la
ecuación 11.5.2 puede aproximarse de fonna similar con

(11.5 .10

Si reunimos todos los ténninos, la aproximación de diferencia para la ecuación 11.5.1 adopta
la fonna tridiagonal.
Las ecuaciones de diferencia deducidas en esta sección están en la forma de conservación.
La matriz de coeficientes para un cilindro tiene exactamente las mismas propiedades matemá-
ticas que para la geometría de plancha (véase la sección 11.4), de modo que tiene una matriz
inversa positiva.
Sección 11.6. Ecuaciones diferenciales ordinarias no lineales 403

11.6 ECUACIONES DIFERENCIALES ORDINARIAS NO LINEALES


Una ecuación diferencial ordinaria es no lineal si la incógnita aparece en fonna no lineal o si
su(s) coeficiente(s) depende(n) de la solución. Por ejemplo, la ecuación de conducción del
calor para una aleta de enfriamiento se hace no lineal si interviene transferencia de calor desde
la superficie por radiación. La ecuación de difusión de una especie química es no lineal si tiene
un término de eliminación cuyo coeficiente depende de la densidad de la especie. En un reactor
nuclear, las propiedades de los materiales se ven afectadas significativamente por la población
de neutrones cuando el nivel de energía es elevado, de modo que la ecuación que gobierna el
flujo de neutrones se vuelve no lineal.
La resolución de problemas de valor en la frontera no lineales requiere aplicaciones
iterativas de un método de resolución para problemas de valor en la frontera lineales. Analiza-
remos dos métodos generales, considerando una ecuación de difusión no lineal dada por

-<!>" + 0.01<!> 2 = exp(- x), O< x < H (11.6.1)

donde
<j>(O) = <j>(H) =O

Cabe señalar algunos aspectos peculiares de los problemas de valor en la frontera no


lineales. En primer lugar, a diferencia de los problemas de valor en la frontera lineales, no se
garantiza la existencia de una solución. En segundo lugar, un problema de valor en la frontera
no lineal puede tener más de una solución. De hecho, es posible obtener diferentes soluciones
con estimaciones iniciales distintas en el caso de un algoritmo iterativo. Por tanto, al obtener
una solución numérica debemos analizarla para detenninar si tiene un significado fisico.

11.6.1 Sustitución sucesiva


Reescribimos la ecuación 11.6.1 como sigue:
-<!>" + a(x)<j>(x) = exp(-x) (11.6.2)

donde
a(x) = O.Ol<j>(x)

El método que explicamos aquí es una extensión del método de sustituciones sucesivas que
describimos en el capítulo 3, y procede como sigue:

(a) Igualar a(x) a una estimación; por ejemplo, a(x) = 0.01.


(b) Resolver la ecuación 11.6.2 numéricamente como un problema de valor en la frontera
lineal (como a está fija, la ecuación es lineal).
(c) Actualizar a(x) = O.Ol<j>(x) con el valor de <j>(x) obtenido en (b).
(d) Repetir (b) y (c) hasta que <j>(x) en dos soluciones sucesivas coincidan dentro de una
tolerancia preestablecida.
404 Capítulo 11 Problemas de valor en la frontera de ecuaciones diferenciales ordinarias

11.6.2 Iteración de Newton


Si denotamos una estimación de <!>(x) por 'V(x), la solución exacta puede expresarse así:

<!>(x) = 'V(x) + O'Jf(x) ( 11.6.3)

donde O'J'(x) es una corrección de la estimación. Si sustituimos la ecuación 11.6.3 en la 11.6. 1


obtenemos

(11.6.4)

Si ignoramos el ténnino de segundo orden (O'J') 2 tenemos

- O'J'" + 0.02'JfO'V = 'V" - O.O l 'Jf 2 + exp(-x) (11.6.5)

que puede resolverse como un problema de valor en la frontera lineal. Entonces, se obtendrá
una solución aproximada de la ecuación 11.6.1 con 'V(x) + O'Jf(x). La solución puede mejorarse
todavía más si se repite el procedimiento utilizando el resultado más actual como nueva
estimación. Este procedimiento es una extensión de la iteración de Newton descrita en el
capítulo 3.

Ejemplo 11.3
Deduzca ecuaciones de diferencia linealizadas basadas en la iteración de Newton
para la ecuación 11.6.1 en el dominio O < x < 2 con las condiciones de frontera
<!>(O)= <1>(10) =O utilizando 10 intervalos de retícula. Resuelva las ecuaciones.

Solución
La fonna linealizada de la ecuación 11.1.1 está dada por la ecuación 11.6.5. Con el
espaciado de retícula h = 2/10 = 0.2, las ecuaciones de diferencia para la ecuación
11.5.5 se escriben así:

-O'J';-1+20'Jf;-O'Jf;+1+0.02h 2'Jf;O'Jfi
='Vi-1 - 2'J'; + 'Vi+I -0.01h 2'V¡ + h2exp(-ih) (11.6.6)

i = 1,2,. .. 9

donde i =O para x =O y la ecuación se multiplicó por h2 . La ecuación anterior puede


escribirse en la fonna de la ecuación 11.3. l si definimos
Sección 11.6. Ecuaciones diferenciales ordinarias no lineales 405

A;=-1
B; = 2 + 0.02h2 '1'i
C;=-1
D; = 'l'i-1 - '1'l + h2exp(-ih)
2'1f; + 'l'i+ 1 - O.O 1h2

Comenzamos Ja iteración de Newton estableciendo una estimación de 'l'i = O para


todos los puntos de retícula. A continuación resolvemos las ecuaciones de diferencia
para i = 1, 2, 3, ... , 9 por la solución tridiagonal. He aquí Ja solución iterativa para los
primeros cinco puntos de retícula:

Número de Puntos de retícula


iteración i=l i=2 i=3 i=4 i=5
---------------------- --------
1 0.0850 0.1406 0.1720 0.1837 0.1792
2 0.0935 0.1546 0.1891 0.2019 o. 197 o
3 0.0943 0.1560 0.1908 0.2038 0.1988
4 0.0944 0.1561 0.1910 0.2040 0.1990

Ejemplo 11.4

La ecuación de capa límite de Blasius está dada por

f"' + 0.5/f" = o (A)

con condiciones en Ja frontera,

/(O)= O, f'(O) =O, /'( 00 ) = 1

La tercera condición en la frontera puede sustituirse por /'(10) = l. Aproxime la


ecuación mediante Ja aproximación de diferencia finita y resuélvala como problema
de valor en la frontera.

Solución
La ecuación (A) puede reducirse a un problema de valor en la frontera de segundo
orden definiendo

g(11) = /'(11) (B)

o, lo que es equivalente,

f(r¡) = fori g(r)dr (C)


406 Capítulo 11 Problemas de valor en la frontera de ecuaciones diferenciales ordinarias

0.9

0.8

0.7

0.6
f'=g

->.
:-....
0.5

0.4

0.3 f"=g'
0.2

0.1

6 9 10
Figura 11.7 Solución de la ecuación
de capa límite de Blasius

que satisface la condición de frontera.f (O)= O. Sustituyendo la ecuación (B) en la (A)


obtenemos

g" + 0.5.fg' = o (D)

con condiciones en la frontera

g(O) =O, g(lO) = 1

La ecuación (D) es un problema de valor en la frontera no lineal de segundo orden y


puede resolverse mediante sustitución sucesiva como sigue. La aproximación de
diferencia para la ecuación (D) puede escribirse así:

g¡_¡ - 2g; + g;+¡ + 0.5/i g;+¡ - g¡_¡ =o (E)


(,1)2 . 2ó. T]
donde
i
f;= I, (F)
i=I

En la ecuación (F) se aplicó la regla trapezoidal congo= O. La ecuación (E) se resuelve


iterativamente como sigue:

(a) Suponer una distribución inicial de g; y calcular.(; con la ecuación (F).


(b) Resolver la ecuación (E) con.el esquema tridiagonal.
(c) Actualizar f; sustituyendo lag; que se acaba de calcular en la ecuación (F).
Problemas 407

(d) Repetir (b) y (c) hasta que la solución converja.


Los resultados calculados por el listado 11.2 se muestran en la figura 11. 7.
Listado l J.2
blasius.m
clear,clf
ni=200;
h=lO/ni; h2inv = 1/h/h; hinv=l/h;
eta=h*(l:ni); f=enes(l,ni);
fer k=1:9
fer i=l:ni
a(i) h2inv - 0.25*f (i)*hinv;
b(i) = -2 *h2inv;
c(i) = h2inv + 0.25*f(i)*hinv;
s (i) =O;
end
s(ni) = -c(ni);
g=tri diag(a,b,c,s,ni);
f(l)=0.5*g(l)*h;
fer i=2:ni
f ( i) =O . 5 * ( g ( i) + g ( i -1 ) ) * h + f ( i -1) ;
end
end
if k==l held en, end
axis ( [O, 1 O, o, 2] )
fddO = (-g(2) + 4*g(l) )/2/h
fdd(l)= (g(2) -0 )/h/2;
fer i=2:ni-1
fdd(i)=(g(i+l)-g(i - 1))/h/2;
end
fdd(ni) = (3*g(ni) - 4*g(ni-1) + g(ni-2))/h/2;
plet([O,eta], [O,g], [O,eta), [fddO,fdd))
[ [O,eta(20:20:ni)] ', [O,g(20:20:ni)] ', [fdd0,fdd(20:20:ni)] ']
text(2.2, 0.63, 'f'=g', 'Fentsize', [18])
h=text(2.2, 0.3, 'f"=g", 'Fentsize', [18])
text(5, -0.05, 'h', 'FentNarne', 'Syrnbel', 'Fentsize', [18])
text(-1.0,0.4, 'f' y f ' " , 'Fentsize',[18],'Retatien',[90])

PROBLEMAS
(11.l) Deduzca ecuaciones de diferencia para i= 1 e i= 1O en el ejemplo 1 1.1, suponiendo que las
condiciones de frontera cambian a y'( 1) =y ( 1) y y'( 1O)= O.
(11.2) Deduzca ecuaciones de diferencia para

-(p(x)<j>'(x))' + q(x)<j>(x) = S(x), O< x < H


408 Capítulo 11 Problemas de valor en la frontera de ecuaciones diferenciales ordinarias

P = Pa P=~
q = qa q = Clti
s = 1. S=O
1 1
i=1 2 3 4 5
X=O H/2 H

Figura 11.8 Retícula y constantes (Pl 1.2)

cj>'(O) = cj>(H) =O

La geometría, retícula y constantes se muestran en la figura 1 1.8. El espaciado de la retícula


es h = H/4 para todos Jos intervalos.
(11.3) Repita el problema anterior suponiendo que el espaciado de retícula para Jos primeros dos
intervalos es h¡ y para los últimos dos intervalos es h2.
(11.4) La ecuación diferencial para un cable flexible de 50 m de longitud, fijo en Jos dos extremos,
está dada por

y"(x) = -w(x)IT, y(O) = y(50) =O

donde x está en metros, y (x) es el desplazamiento del cable medido desde el nivel de los
extremos (positivo hacia abajo), Tes la componente horizontal de la tensión (5000 kg) y w(x)
es Ja distribución de cargas dada por

w(x) = 20( 1 + exp(x/25)) kg/m

Determine la fonna del cable. (Utilice 1O intervalos de retícula.)


(11.5) Considere una aleta de enfriamiento con área de sección transversal variable y perímetro
variable. Suponiendo que la temperatura a través de cualquier sección transversal perpendi-
cular al eje es unifonne, la temperatura en Ja dirección axial es la solución de la ecuación

-{kA(x)T '(x))' + P(x)hcT(x) = P(x)hcToo

donde k es Ja conductividad térmica, P(x) es el perímetro, A(x) es el área de sección


transversal y Too es la temperatura del entorno. Las condiciones de frontera están dadas por

T(O) = IOOºC

-kT'(H) = hc(T(H)- Too)


Problemas 409

donde H es Ja longitud de Ja aleta y he es el coeficiente de transferencia de calor por


convección . Resuelva el problema anterior suponiendo las siguientes constantes:

H = o. 1m, k = 100 w/mK, T"° = 2o·c

2
A(x) = (0.005)(0.05)- 0.25x)m

P(x) = A(x)/0.005+O.O1 m

(Utilice 1O intervalos de retícula .)


(11.6) La condición de frontera en la forma de Ja ecuación 11.2. 1O se vuelve numéricamente
equivalente a cj>(O) =O si gL se hace igual a O yfL se hace igual a un valor muy grande, como
10 10 . ¿Qué valores para gL y fL hacen a Ja ecuación 11 .2. I O equivalente a cj>(O) = 2?
(11.7) Considere una celda unitaria cilíndrica en un reactor nuclear de agua ligera que consiste en
una varilla de combustible y moderador, como se muestra en la figura 11.9:

uei Agua
0=0.2 o= 0.1 cm
r.a = 0.9 'a= 0.02 cm·•1
l S=O
l S= l 1
cm-3s· _

r=O
' 0.5 1 cm
Figura 11.9 Celda unitaria (P 11 .7)

El flujo ténnico de neutrones en la celda satisface Ja ecuación de difusión de neutrones dada por

1 d d
- - - Dr -d cj> (r) + Ea cj> (r) = S(r)
r lr
1 r

donde Des el coeficiente de difusión, Ea es Ja sección transversal de absorción y Ses la fuente


de neutrones. Las constantes para el U02 y el H20 se muestran en la figura . Las
condiciones de frontera son

cj>'(O) = cj>'(J) =O

(a) Utilice cinco puntos de retícula para todo el dominio con un intervalo constante de
0.25 cm y deduzca ecuaciones de diferencia para cada punto de retícula .
(b) Resuelva las ecuaciones de diferencia deducidas en (a) por Ja solución tridiagonal.
410 Capítulo 11 Problemas de valor en la frontera de ecuaciones diferenciales ordinarias

(11.8) Se tiene un material en plancha con espesor de 0.2 cm. El lado izquierdo está perfectamente
aislado, pero la temperatura de la superficie derecha está fija en OºC. La plancha tiene una
fuente de calor distribuida. La ecuación de temperatura está dada por -T"(x) = q(x)lk.
Elabore un programa para calcular Ja distribución de temperatura empleando 1O intervalos
de retícula. Suponiendo que la conductividad ténnica es k = 30 W/m 2 K, ejecute el programa
para las dos siguientes distribuciones de Ja fuente de calor:
(a) q(x) = 200 kW/m 3
(b) q(x) = lOOexp(-!Ox) kW/m 3
Compare Jos resultados con las siguientes soluciones analíticas:
(a) T(x) = ( 10/3)(0.04 -x2)
(b) T(x) = 0.033(e-2 + 2- IOx-e-IOx)
(11.9) La ecuación de difusión para una geometría cilíndrica está dada por

1
- - (p(r)r<j>'(r))' + q(r)<j>(r) = S(r)
r

Considerando Jos tres puntos de retícula que se muestran en Ja figura 1 1. 1O, podemos deducir
ecuaciones de diferencia integrando Ja ecuación desde el punto medio entre i - 1 e i hasta el
punto medio entre i e i + 1. Suponiendo que los coeficientes son constantes, como se ilustra
en la figura, y el espaciado de la retícula no es unifonne, deduzca las ecuaciones de diferencia
integrando en el volumen entre a y h.

P = P;.1 p = P;
q = Q¡.1 q = Q¡
S=S¡. 1 S=S;

h,. 1 h¡
-++--
r=a r=b
i-1 i+1

Figura 11.1 O Geometría cilíndrica (PI 1.9)

(11.10) La ecuación para el desplazamiento de una membrana circular sometida a una presión
constante P (véase la figura 11. 1 1) está dada por

1
y"(r) + - y'(r) = -PIT, 0.2 m ~ r ~ 0.5 m
r

donde r es la coordenada radial, y es el desplazamiento de la membrana (positivo hacia


abajo), Tes la tensión (400 kg/m) y Ja presión se da como P = 800 kg/m2. Las condiciones
de frontera son y (0.2) =y (0.5) = O. Determine el desplazamiento de la membrana, y (r).
Problemas

Vista superior

Figura 11.11 Una membrana sometida a presión


•t t • Presión
Vista lateral

(11.11) El cuerpo esférico de un material de radio 0.05 m se calienta con una fuente de calor
distribuida por

S(r) = 300 exp[20(r- 0.05)]

donde res el radio en metros y las unidades de S son W/m 3 . La superficie de la esfera está
expuesta al aire. El calor escapa al aire circundante por convección con el coeficiente de
transferencia de calor he= 20 W/m 2 K. En el estado estacionario, la distribución de tempera-
tura es la solución de la ecuación,

1 d 2 d
- - - r k- T(r) = S(r)
r2 dr dr

Las condiciones de frontera son


T'(O) =O
k' =he( Too - T(R)), Too= 20 oC

(a) Escriba las ecuaciones de diferencia para la temperatura utilizando cuatro intervalos de
retícula equiespaciadqs.
;,:

(b) Resuelva las ecu'~~iones de diferencia por la solución tridiagonal.


(11.12) Un extremo de una aleta de enfriamiento rectangular de longitud H = 0.1 m está conectada
a una fuente de calor a 200ºC. La aleta transfiere calor tanto por radiación como por
convección al entorno que está a 20ºC. Suponiendo que tanto la aleta como el entorno son
cuerpos negros, la temperatura de la aleta satisface la ecuación de difusión no lineal

-AkT"(x) + Phe (T(x)- T ~) + Pa(T (x)- T~) =O


4

donde
k = 120 W/mK (conductividad ténnica)
2
A= I.5xl0-4 m (área de sección transversal de la aleta)
P = 0.106 m (perímetro de la aleta)
2
he= 100 W/m K (coeficiente de transferencia de calor por convección)
8 2 4
u= 5.67x10- W/m K (constante de Stefan-Boltzmann)
412 Capítulo 11 Problemas de valor en la frontera de ecuaciones diferenciales ordinarias

Too= 293 K (temperatura del entorno)


Las condiciones de frontera están dadas por

T(O) = 500 + 273 K


T'(J-1) =O

si se supone que el extremo derecho de la aleta está perfectamente aislado.


(a) Deduzca una ecuación de diferencia para la ecuación diferencial anterior empleando
1O intervalos de retícula igualmente espaciados.
(b) Resuelva la ecuación de diferencia mediante sustituciones sucesivas.
(c) Repita (b) utilizando la iteración de Newton.

(11.13) Resuelva la siguiente ecuación por iteración de Newton:

--<j>"(x) + [2 + sin(<j>(x))]<j>(x) = 2, <j>(O) = <!>(2) =O (11.6.7)

Utilice 20 intervalos de malla.


(11.14) En un reactor químico, la densidad de un material se rige por

-<l>"(x) + 0. 1<l>'(x) = exp( 1 +O.OS<!>), O< x < 2 (11.6.8)

Las condiciones de frontera son - (O) = O y <1>'(2) = O. Con JO intervalos de retícula


equiespaciados, resuelva la ecuación por ( 1) sustituciones sucesivas y (2) iteración de
Newton.
Apéndice A

Colores

Un color puede definirse mezclando tres colores básicos: rojo, verde y azul, y expresarse
mediante una tripleta (r, g, b), donde r, g y b representan las intensidades relativas de los
colores básicos rojo, verde y azul, respectivamente. El valor más alto es 1 y el más bajo O para
cada color básico. A continuación damos diez ejemplos de definiciones de colores con
tripletas:

r g b
blanco 1 1
rojo o o
amarillo 1 l o
verde o o
turquesa o 1
gris 0.5 0.5 0.5
rojo oscuro 0.5 o o
azul o o
aguamarina 0.5 0.83
negro o o o

Mapa de color: Un mapa de color es una matriz den por 3. Cada fila es una tripleta de los
tres colores. El valor por omisión den en MA TLAB es 64. La primera fila corresponde al valor
mínimo del eje de color, y la última fila, al máximo. Al definir diferentes distribuciones de
intensidad de los tres colores básicos, se crean distintos mapas de color. Algunos de los mapas
de color predetenninados de MA TLAB son

hsv, cool, hot, jet, gray, flag

donde hsv representa el conjunto de color de valor de saturración del matiz.


El mapa de color hsv se ilustra en la tabla A.1. Podemos exhibir un mapa de color en fonna
gráfica con rgbplot. En la figura A. l se grafican las intensidades de tres colores en hsv. Los
colores reales de varios mapas de color se ilustran en láminas a color similares a la figura A .2.
Si quiere asignar un mapa de color a una figura, utilice colormap; por ejemplo, colormap
jet o colormap (jet) hace que el mapa de color actual sea jet.

413
414 Colores

Eje de color: El eje de color es una coordenada unidimensional con un mínimo y


un máximo, los cuales pueden predeterminarse con caxis ( [cmin, cmax]). El valor míni-
mo del eje de color apunta a la primera fila (o al primer índice) del mapa de color y el valor
máximo del eje de color apunta a la última fila (o al último índice). Si no se especifican cmin
y cmax con caxi s, el índice de color más bajo se ajusta automáticaticamente al valor mínimo
de los datos de color en mesh, sur fa ce y órdenes similares.

TABLA A.l El mapa de color rgb

------------------------------------------
Índice de Intensidades
color Rojo Verde Azul
------------------------------------------
1 1.0000 o o
2 1.0000 0.0938 o
3 1.0000 o. 187 5 o
4 1.0000 0.2812 o
5 1.0000 0.3750 o
6 1.0000 0.4688 o
7 1.0000 0.5625 o
8 1.0000 0.6562 o
9 1.0000 0.7500 o
10 1.0000 0.8438 o
11 1.0000 0.9375 o
12 0.9688 1.0000 o
13 o. 87 so 1.0000 o
14 o. 7 812 1.0000 o
15 o. 687 5 1.0000 o
16 0.5938 1.0000 o
17 0.5000 1.0000 o
18 0.4062 1.0000 o
19 0.3125 1.0000 o
20 0.2188 1.0000 o
21 0.1250 1.0000 o
22 0.0312 1.0000 o
23 o 1.0000 0.0625
24 o 1.0000 0.1562
25 o 1.0000 0.2500
26 o 1.0000 0.3438
27 o 1.0000 0.4375

59 1.0000 o 0.5625
60 1.0000 o 0.4688
61 1.0000 o 0.3750
62 1.0000 o 0.2812
415

63 1.0000 o o. 1 87 5
64 1 . 0000
0 . 0938 o
------------------------------------------

1.2

ROJO VERDE AZUL ROJO


~ - - - - - - - - - /~ - ------- - - - ...
1

o 0.8
<{
o
üi 1

¡¡¡ 06 1

1-
~
0.4

0.2

o
10 20 30 40 50 60
ÍNDICE DE COLOR

Figura A.I Gráfica RGB del mapa de color HSV

HO:f

:111111111111111
PRISM

11111111111

<---Índice de color---> 64

Figura A.2 Ban-as de color (véase una versión a color en las láminas de color)
418 Dibujo de objetos tridimensionales

x=x
y = cos(0)y - sen(0)z (B.3)
z = sen(0)y + cos(0)z
Rotación alrededor del eje y: Si el sistema local se gira en sentido antihorario grados
alrededor del eje y, las nuevas coordenadas serán:

x = sen(8)z + cos(8)x
y=y (B.4)
z = cos(0)z - sen(8)x

Rotación alrededor del eje z: Si el sistema local se gira en sentido antihorario grados
alrededor del eje z, las nuevas coordenadas serán:

x = cos(8)x - sen(8)y
y= sen(8)x + cos(8)y (B.5)
z=z
Tres funciones para girar un sistema son:

ListadoB.1
rotx_.m
function[xd,yd,zd]=rotx (x,y,z,th)
cosf=cos(th*pi/180) ;sinf=sin(th*pi/180);
xd =x;
yd = cosf.*y - sinf .*z;
zd = sinf.*y + cosf .*z;

roty_.m
function[xd,yd,zd]=roty (x,y,z,th)
cosf=cos(th*pi/180) ;sinf=sin(th*pi/180);
yd =y;
xd = cosf.*x + sinf.*z;
zd = -sinf.*x + cosf .*z;

rotz_.m
function[xd,yd,zd] =rotz (x,y,z,th)
cosf=cos(th*pi/180) ;sinf=sin(th*pi/180);
xd = cosf *x - sinf *y;
yd = sinf *x + cosf *y;
zd = z;
419

Ejemplo B.1 Rotor de ventilador


La figura B.1 ilustra un rotor de ventilador que consiste en un eje cilíndrico y seis aspas. En el
listado B.2 se crea una malla para una aspa mediante un arreglo de perfiles de sección. El perfil
de sección transversal de las aspas se crea primero en b _des i gn . m. La mal la para una aspa
se expresa mediante una tripleta de x, y y z.
A continuación, puede construirse el rotor copiando el aspa en otras cinco posiciones
después de rotaciones. El eje se crea como un cilindro hueco.

1.5

0.5

-0.5

·1

·1.5

o
\-1.-5-~----\o-.5----,;-o--~-0--.5-----.;-·-:--1----;,·1.5
·1

Figura B.1 Rotor de ventilador

Listado B.2
fan_rot.m
% dibuja un rotor de ventilador (Fig.B.1)
clear,clg % ref: t blade.m
colormap jet
r=0.601:0.1:2;
imax=length(r);
dth=pi/16;
th=-2*dth:dth:2*dth;
[th,zb]=b_design;
jmax=length (th);
% minz=-0.5, maxz=0.1
% minth=-0.4, maxth=0.4
for i=l:imax
for j=l: jmax
x(i,j)=r(i)*cos(th(j));
420 Dibujo de objetos tridimensionales

y(i,j)=r (i) *sin(th(j));


z ( i, j) =zb ( j) ;
end
end
zc=z;
for i=imax-l:imax
for j=l:jmax
x (i, j) =r (imax-2) *cos (th (j));
y ( i, j) =r ( imax-2) *sin ( th (j)) ;
if i==imax, z(i,j)={zb(j)+zb(jmax+l-j))*0.5;, end
zc (i, j) =1;
end
end
hold on
for k=1:6
angl=60*k
[xb,yb,zb) = rotz (x,y,z,angl);
mesh(xb,yb,zb,zc)
end
axis ( [ -1 . 5, 1 . 5, -1. 5, 1 . 5, -1 . 5, l. 5) )
[xc,yc,zc)=cylinder(0.595,80);
xc ( 2 , : ) =xc ( 1 , : ) ;
yc(2, :)=yc(l, :) ;
zc(l, :)=-ones(size(xc(l, :)))*0 .7;
zc(2, :)=ones(size(xc(l, :))) *0.7;
colr=0.7*ones(size(zc));
mesh(xc,yc,zc, colr*0.6)
mesh(xc*0.95,yc*0.95, zc, colr*0.99)
view ( [-100, 20))

b_design.m
function [thb,zb]=b design
% Diseño analítico de sección aerodinámica
minz =-0.5;
maxz=0.1;
minth=-0.4;
maxth=0.4;
r=0.4;
dth=pi/32;
th=O :'dth: 2*pi;
x=r *cos ( th) ;
y=r*sin(th) .*(x+0. 5) .*( 5-x)/15
- (x+0.4) .*(x-0.4)+(0.6/0.8)*(x)-0.2 ;
thb=x;
zb=y;

Ejemplo B.2 Tubo espiral


Podemos construir un tubo conectando un arreglo de círculos (véase la figura B.2). Como todos
los círculos son idénticos excepto por su colocación y orientación, pueden dibujarse trasladando
y girando un círculo de referencia dibujado en el origen en el plano x-y. El círculo unitario de
421

referencia en el plano x-y se expresa mediante puntos en el círculo. El círculo se gira primero
alrededor del eje x y luego alrededor del eje z. El tubo se dibuja con el listado B.3.

Trazado con ·mesh" y "colormap hsv"

3.5
3
2.5
2

1.5

0.5
o
-0.5
-2
-1
o

2
-2

Figura B.2 Tubo espiral

Listado B.3
pipe_.m
clear,clf,hold off
%-------Construcción de sección transversal básica (circulo)
dth=pi/10;
th=O:dth:2*pi;
x=0.25*cos(th) ;y=0.25*sin(th) ;z=0.25*zeros(size(x));
%-------Forma espiral del eje del tubo
ths=O:dth:pi*3.5;
xs=2*cos(ths) ;ys=2*sin(ths) ;zs=zeros(size(xs))+ 0.3*ths;
m=length(xs);
%-------Construcción de sección de tubo en dirección axial
for i=2:m
xn=xs(i)-xs(i-1);
yn=ys(i)-ys(i-1);
zn=zs (i) -zs (i-1);
rn=sqrt(xn·2+yn·2+zn•2);
el=acos(zn/rn)*180/pi;
az=O;
rxy=sqrt(xn·2+yn•2);
if xn==O, xn=le-lO;end
az=atan2(yn,xn)*180/pi;
422 Dibujo de objetos tridimensionales

[xd,yd,zd]=rotx_(x, y, z, -el);
b=-(az+90);
[xp(i, :) ,yp(i, :) ,zp(i, :)] = rotz (xd,yd,zd,b);
xp ( i, : ) =xp ( i, : ) +xs ( i) ; -
yp ( i, : ) =yp ( i, : ) +ys ( i) ;
zp(i, :)=zp(i, :)+zs(i);
end
%-----------La estructura del tubo ya está en xpp,ypp,zpp
xav=sum(xp(2,:)) /length(xp(2,:));
yav=sum(yp(2, :))/length(yp(2, :));
zav=sum (zp (2,:)) /length (zp (2,:));
xp ( 1, : ) =xav* O. 2 + xp ( 2, : ) *O. 8;
yp(l, :)=yav*0.2+ yp(2, :)*0.8;
zp(l, :)=zav*0.2+ zp(2, :)*0.8;
j=m-1;
xav=sum (xp (j, : )) /length (xp (j,:));
yav=sum(yp(j, :))/length(yp(j, :)) ;
zav=sum (zp (j,:)) /length (zp (j,:));
xp(m, :)=xav*0.2+ xp(j, :)*0.8;
yp(m, :)=yav*0.2+ yp(j, :)*0.8;
zp(m, :)=zav*0.2+ zp(j, :)*0.8;

xpp=xp;
ypp=yp;
zpp=zp;
%------------------------ - -------
colormap hsv
mesh(xpp,ypp,zpp)
view( (70, 30])
axis((-2.5, 2.5, -2.5, 2.5, -.5,3.5])
title('Trazado con "mesh" y "colormap hsv" ')

Ejemplo B.3 Avión


Creamos el armazón de un avión (véase la figura B.3) armando cinco piezas. Primero se crea
el fuselaje con un arreglo de círculos. Un lado del ala principal se crea con la función wing_ 2d,
que utiliza el ala NACA0012 (véase el problema 7.5). La cola y el estabilizador son en esencia
copias del ala principal después de cambios de escala, rotación y traslación.

Listado B.4
plane_.m
clear, clg % La parte que sigue crea el fuselaje
dth=pi/16; fuselen=6; thf=pi:-dth:pi/2;
xa = 0:0.5:fuselen
xt=fuselen+0.25:0 . 25:fuselen+2;
dxt = 1.4/(length(xt)-O);
yt = -l+dxt:dxt:0.4;
length (yt)
xft=[cos(thf) ,xa,xt]
yft= [sin (thf) - O. 3*sin (2*thf). ·4, ones (size (xa)), ...
ones (size (yt))];
423

Avión de pasajeros

o
-2

-4

-6

4
8
2
o
-2
-4
-6 -2

Figura B.3 Avión

xfb=[cos(thf) ,xa,xt]
yfb=[-sin(thf) ,-ones(size(xa)) ,yt];
k=length( [thf, xa])
yfb(k)=(yfb(k-l)+yfb(k+l))/2
xc = (xfb+xft)/2;
ye= (yfb+yft)/2;
L=length(xc);
for i=l:L
if xc(i)<O yc(i)=O; end
end

a=0.5; b=0.5;
dth=pi/8; th=O:dth:2*pi; jmax=length(th);
xr=cos(th); yr=sin(th);
L=length(xc);
for i=l:L
xr=cos(th);
yr=sin(th);
a= (yft(i)-yc(i))/(-yfb(i) + yc(i));
b = (-yfb(i) + yc(i));
for j=l: jmax
y(i,j)=yr(j)*b+yc(i);
i f th(j)<pi y(i,j)=yr(j)*b*a + yc(i); end
x(i,j)=xr(j)*b;
z ( i , j ) =xc ( i) ;
424 Dibujo de objetos tridimensionales

end
end
mesh(z,x,y)
axis( [-2 8 -6 6 -6 6])
hold on
[xw,yw,zw] = wing_2d % Perfil de sección de ala
F = 1. 7;
xw=F*xw; yw=F*yw; zw=F*zw;
[xl,yl,zl] rotz (xw,yw,zw,90);
[x2,y2,z2] = rotx=(xw,yw,zw,180);
[x2,y2,z2] = rotz_(x2,y2,z2,270);
mesh(x1+2,yl-0.5,zl+ 0.7);
mesh(x2+2,y2+0 5,z2+ 0.7);
mesh(0.8*xl+6.6,0.S*zl-0,-0.3*yl+l.2)
pause
mesh(0.7*x1+6.6,0.3*yl-0.7,0.9*zl+ 0.7);
mesh(0.7*x2+6.6,0.3*y2+0.7,0.9*z2+ 0.7);
caxis([-3,1])
axis((-2 8 -6 6 -6 6])
title(' Avión de pasajeros')
caxis( [-2, 2])
colormap(hsv)

wing_2d.m

function [zw,xw,yw] naca0012


x=0:0.1:1;
n=length (x) ;
for k=1:30
for i=2:n-1
X ( i ) =O . 5 *X ( i -1 ) + 0 . 4 *X ( i + 1 ) ;
end
end
for i=2:n
x(n+i-l)=x(n-i+l);
end
y=0.2969*sqrt(x) - 0.126*x - 0.3516*x.·2 + ...
0.2843 *X. •3 - 0.1015*x.•4;
for i=n+l:length(y)
y ( i) =-y ( i) ;
end
jmax=lS
for j=l:jmax
for i=1:2*n-1
xw ( i, j ) =x ( i ) ;
yw ( i, j ) =y ( i ) ;
zw ( i, j ) =O . 3 * ( j -1) ;
end
end
yw (:, jmax) =zeros (size (yw (:, jmax)));
zw ( : , j max) =zw ( : , j max-1) ;
425

Ejemplo B.4 Lóbulo de un chorro líquido oscilante


Se crea y exhibe una vista tridimensional de un lóbulo de chorro líquido oscilante utilizando la
orden sur f l. El guión aparece en el listado B.5 y la vista se grafica en la figura B.4.

Lado de la tobera

Dirección del flujo

Figura B.4 Lóbulo de chorro líquido oscilante

Listado B.5
lobe .m
% Grafica un lóbulo de chorro líquido.
clear, clf
hold on
dth=2*pi/40;
th=O:dth:2*pi;
r = ones(size(th));
colormap gray
far n=1:51
b=n-1;
x (n, : ) =cos ( th) * ( 1-0. 25*cos (b*O . 3)) ;
y(n, :)=sin(th)*(l+0.25*cos(b*0.3));
z(n, :)=n*0.3*ones(size(th));
m=n+9;
if floor(m/2)*2 == m
plot3(z(n,:), x(n,:), y(n,:)-5)
end
end
surfl (z,x,y+2, [-10, 60])
axis([O 13 -5 15 -10 5])
426 Dibujo de objetos tridimensionales

shading flat
view ( [10 -10 10))
text(S.2,8.4,3, ' Dirección del flujo')
text(-5, 8, 'Lado de la tobera')
xd= [ 5, 1 O, 9] ;
yd= [ 5 ' 5 ' 4 . 5] ;
zd= [3, 3, 3);
plot3(xd, yd, zd)
axis ('off')
text(l0,-15, -2,'Secciones transversales del chorro')
hold off
Apéndice C

Cine

La exhibición de fenómenos que dependen del tiempo es una aplicación natural del cine. El
cine también puede servir para mostrar objetos complicados desde varios ángulos y con
diferentes acercamientos. El principio del cine es sencillo: mostrar una serie de figuras o
imágenes. Este apéndice muestra como crear y reproducir cine, con una ilustración.
Hacer cine en MATLAB es sencillo y muy divertido. En esencia, se requieren sólo tres
órdenes, getframe, moviein ymovie. Sin embargo, si queremos ajustar el ejede la ventana
de gráficos de la cual se toman los cuadros y la ventana en la cual se exhibe la animación
necesitaremos unos cuantos comandos más. Puesto que el cine es una secuencia de figuras o
imágenes, debemos pensar en cómo preparar dichas imágenes.

ÓRDENES DE MATLAB PARA CREAR CINE


Obtención de cuadros: getframe captura un cuadro de cine del eje actual de una figura.
El cuadro se escribe en un vector de columna. La orden tiene uno de los siguientes formatos:
getframe
getframe(h)

Con el primer formato, se captura todo el eje actual. En el segundo formato, h es el mango de
la raíz, una figura o los ejes. Por tanto, getframe (h) obtiene un cuadro del objeto (o la
ventana del mango) h.
Inicialización de cine: M = moviein (n) inicializa una matriz Mpara que contengan
cuadros de una animación basada en la ventana de figura actual. La matriz Mtiene suficientes
filas para almacenar n copias de la salida de getframe, un cuadro en cada columna. M =
mov i e in (n, h) inicializa la matriz Mcon base en la ventana del mango h.
Cine: movie (M) exhibe una vez la animación almacenada en la matriz M; también puede
adoptar uno de los siguientes formatos:
movie(M,n)
movie (M, n, fps)
movie (h, M, n, fps)

427
428 Cine

rnovie(h,M,n,fps,loc)

El comando rnovie (M, n) exhibe la animación n veces. Sin< O, la animación se exhibe


n veces, pero la reproducción en las veces pares es hacia atrás. El parámetro fps del segundo
formato especifica el número de cuadros por segundo; sin fps, la velocidad por omisión es de
un cuadro por segundo. El parámetro h es el mango de la figura o el eje donde se debe
reproducir la animación. El parámetro loe del cuarto formato es un vector de longitud 4 que
especifica la posición de la animación con respecto a la esquina inferior izquierda de la ventana
actual. Sólo se utilizan los primeros dos elementos; el primero es el número de pixeles contando
desde la izquierda y el segundo es el número de pixeles contando desde abajo.

Ejemplo C.1 Pelota en rotación


La superficie colorida de una pelota gira alrededor de su eje x. El listado C.1 ilustra el guión.

Listado C.1
movie 1.m
clear clf
h=figure(B)
fprintf('AJUSTE MANUALMENTE EL TAMAÑO DE su PANTALLA')
fprintf(' (Se sugiere un cuadrado de B cm por lado.)\n')
fprintf(' Pulse RETURN después de ajustar\n')
pause
M=moviein(lO,gcf);
dth=pi/10; th=O:dth:pi; fi=O:dth:2*pi;
nk=length(th); nj = length(fi);
for j=l:nj
for k=l:nk
x(k,j) sin(th(k)) *cos(fi(j));
y(k,j) sin(th(k))* sin(fi(j));
z (k, j) = cos(th(k);
end
end
[xd, yd, zd] = rotx_(x, y, z, 30);
axis((-1.5 1.5 -1.5 1.5 -1 l])
c=zd;
for k=l:ll
kk=36*k;
[xd,yd,zd] = rotx (x,y,z, kk);
surf(xd,yd,zd,c)
M(:,k) = getframe(gcf);
end
n=lO; fps=lO; save m ball M n fps

Para exhibir la animación:


gcf;cla;clf
load rn ball
loc=[30,30,0,0];
rnovie(gcf,M,n,fps,loc)
Apéndice D

Procesamiento de imágenes

IMÁGENES EN MATLAB
Una imagen en MATLAB 1 es una matriz m por n de mosaicos de color, que se define mediante
una matriz de imagen m por n. Las entradas de la matriz de imagen son números de color
(índices de color) del mapa de color. Por ejemplo, consideremos una matriz 3 por 3:
W=[l 2 3; 2 3 2; 3 2 l]

y un mapa de color asociado de longitud 3:


mapa = (1 o O; O 1 O; o o l]
donde la primera fila (primera tripleta) es rojo, la segunda verde y la última azul. Entonces,
W=[l 2 3; 2 3 2; 3 2 l]
mapa = (1 O O; O 1 O; O O l]
image(W)
colormap(mapa)
producirá un patrón de mosaicos de color de 3 por 3 así:
rojo verde azul
verde azul verde
azul verde rojo
Aquí, el orden de los mosaicos es el mismo que en la matriz (el primer índice de wse incrementa
hacia abajo). Cabe señalar, empero, que si está vigentehold on, el orden vertical de la imagen
se invierte (el primer índice se incrementa hacia arriba).
La imagen también puede exhibirse con pcolor. A continuación daremos más detalles
sobre image y pcolor.

Imagen: image exhibe una imagen en la ventana de figura. Sus formatos son:

1
El procesamiento de imágenes, tal como se describe en este apéndice, no requiere la MATLAB Image
Processing Toolbox. Por tanto, la información básica sobre los comandos pertinentes puede encontrarse en la
MATLAB Reference Cuide así como en The Student Edition ofMATLAB. Version 4 U1·er's Cuide, Prentice-Hall
1995. Por otro lado, si dispone de la Image Proccssing Toolbox, consulte C. M. Thompson y L. Shure, MATLAB
lmage Processing TOOLBOX, The Math Works, 1995.

429
430 Procesamiento de imágenes

image(W)
image(x,y,W)
h=image(W)

El primer formato, Image (W), exhibe la matriz w como una imagen. Cada elemento de w
especifica el color de un mosaico rectangular de la imagen.
El segundo formato, image (x, y, W), sólo resulta útil si es necesario imprimir marcas de
escala con valores de coordenadas, donde x y y son vectores y especifican la rotulación de los
ejes x y y. Sólo se utilizan el primero y el último elementos de x y y para los límites del eje.
Los comandos image (W) e image (x, y, W) producen exactamente la misma imagen excepto
que las marcas de escala son alteradas por la segunda.
El tercer fonnato, h=image (W), devuelve un mango de objetos asociados a image. Si
desea ver una lista de las propiedades de los objetos de imagen y sus valores actuales, ejecute
set (h) . Es posible añadir parámetros para especificar propiedades adicionales de la imagen
colocándolos después de w en los argumentos del comando image. Este comando utiliza un
ángulo de perspectiva especial de [O, 90]; es decir, el primer índice de w ( i, j ) se incrementa
verticalmente hacia abajo, y el segundo lo hace horizontalmente. Sin embargo, si está vigente
hold on, el primer índice se incrementará hacia arriba.
Los comandos shading y caxis no funcionan con image.

Pseudocolor: El comando pcolor grafica con un patrón de tablero de ajedrez (pseudoco-


lor). Los formatos son:

pcolor(W)
pcolor(x,y,W)
h=pcolor(W)

El comando peo 1 or ( w) exhibe una gráfica en pseudocolor o "tablero de ajedrez" de la matriz


w. La primera fila de w se convierte en la base de la figura (el inverso de image (W) a menos
que se utilice hold on). Si se aplica view (o, - 9 o), el orden vertical será idéntico al de
image. Los valores de los elementos de wespecifican el color de cada celda de la gráfica. Los
comandos shading y caxis son aplicables a pcolor. De hecho, shading faceted es el
modo por omisión, en el que cada celda tiene un color constante y no se utilizan ni la última
fila ni la última columna de w. Además, los mosaicos quedan separados por líneas negras. Si
el tamaño de los mosaicos es pequeño, las líneas negras podrían dominar la imagen y
oscurecerlas. Las líneas negras pueden eliminarse con shading f la t . Con otra opción,
shading interp, los colores de un mosaico cambian continuamente por interpolación
bilineal, de modo que la imagen se suaviza. Con el modo por omisión de caxi s, a los
elementos más pequeño y más grande de w se les asigna el primero y el último de los colores
de la tabla de colores; los colores para el resto de los elementos de w se determinan mediante
una búsqueda de tabla en el resto del mapa de colores. Sin embargo,el comando caxi s permite
cambiar el intervalo de colores.

He aquí una fonna fácil de experimentar con image y pcolor: trazar una imagen de una
matriz aleatoria ejecutando el siguiente guión:
431

Listado D.1
rand_im.m
% Traza la imagen de una matriz aleatoria
m=input ( 'm = ') ;
n=input ( 'n = ') ;
W = ceil(64*rand(m,n));
% Genera una matriz aleatoria de m por n.
colormap(hot)
image (W);

La multiplicación de la matriz aleatoria por 64 es necesaria porque los números aleatorios


producidos por rand están entre O y 1, mientras que los índices de color están entre 1y64. La
operación ce i 1 ( 6 4 * r and (m, n) ) sirve para producir una matriz de números aleatorios entre
1 y 64. Pruebe con un número pequeño de mosaicos, digamos 5 por 5 (m = n = 5) o 20 por 30
(m = 20, n = 30) primero, y luego con una mayor, digamos 50 por 50. Si tiene una versión
profesional de MATLAB, intente 200 por 300. Una vez que haya tenninado de experimentar
con el mapa de color hot, puede cambiarlo por cualquier otro mapa de color. Pruebe
colormap jet, colormap cool, colormap hsv y colormap flag desde la ventana
de comandos. A diferencia de pcolor, los comandos caxi s, shading f la t y shading
interp no pueden aplicarse a image.
Una vez que entienda lo que funciona y lo que no con image, cambie este comando a
pcolor en el listado D. l y ejecútelo. A diferencia de image, los comandos caxi s, shading
y view sí funcionan. Por ejemplo, view (o, -9 o) invierte horizontalmente la imagen de
pcolor.Porotrolado,caxis( (-100, 100]) reducelaamplituddelagamadecolordela
imagen. Aplique shading in terp y también shading f la t. Con este último comando
observará que las líneas negras que separan los mosaicos desaparecen y la imagen queda
mucho más brillante que con la opción por omisión shading faceted. Con shading
interp, la imagen se suaviza.

CÓMO GUARDAR Y CARGAR IMÁGENES EN FORMATO ESTÁNDAR


Los datos estándar de imágenes en MA TLAB consisten en una matriz de imagen wy un mapa
de color asociado map. Para guardar una imagen en el formato estándar, escriba

save nombredearchivo W mapa

Si desea cargar el archivo, escriba

[W, mapa] = load nombredearchivo

EXPORTACIÓN E IMPORTACIÓN DE ARCHIVOS DE IMÁGENES


Podemos tener muchas razones para transportar archivos de imágenes entre MA TLAB y otro
software. He aquí algunos ejemplos comunes de ellas:
432 Procesamiento de imágenes

(a) Necesitamos reprocesar con MATLAB imágenes de pintura, dibujo o fotográficas


creadas con otro software.
(b) Las figuras o imágenes creadas con MA TLAB pueden exhibirse o reprocesarse con
otro software. Podemos desarrollar la geometría de los objetos con MATLAB,
aprovechando las múltiples opciones de funciones matemáticas y herramientas de
interpolación. Por otro lado, editar una imagen existente o retocarla con colores
puede ser más fácil en alguna otra aplicación de software.
(c) En muchos programas no es posible capturar gráficos en formato postscript. Podría-
mos importar imágenes en MATLAB con objeto de crear un archivo postscript.
(d) En algunas situaciones la impresión de imágenes puede ser más fácil con otro
software de procesamiento de imágenes o de pintura que directamente desde
MATLAB.
A menos que se utilice la Image Processing Toolbox, el único formato en que podemos
importar y exportar archivos de imagen de y a otro software es el formato de imagen en bruto.2
La imagen en bruto puede introducirse a MA TLAB con imr ead. El programa Alchemy
puede realizar conversiones entre casi cualquier formato de imagen y el formato en bruto. Un
archivo gi f, digamos imagen04 . gi f, se puede convertir al formato en bruto con
alchemy -r -e 128 -z 4 imagen04.gif
que crea el archivo image04. raw, donde
- r: produce un archivo "en bruto";
- e 12 s: limita la longitud del mapa de color a 128 colores;
-z 4: ordena el mapa de color por luminancia.
La imagen de este archivo puede exhibirse en MA TLAB con
[W,map] = imread('imagen04 . raw');
colormap(mapa)
image(W)
Si puede obtener acceso a Alchemy directamente desde MA TLAB (mediante una trayectoria
apropiada), los procesos anteriores se pueden combinar en un solo guión:
alchemy -r -e 128 -z 4 image04.gif
[W,map] = imread('image04.raw');
colormap(mapa)
image(W)

2
Los archivos de imágenes en bruto se producen con el programa Image Alchemy creado por Handmade
Software, Inc. Este programa permite realizar conversiones entre muchos formatos distintos, incluidos TARGA,
ADEX, FOP, EPS, GIF, Gem VDI, ILBM, Vivid IMG, JPEG, HP, RTL, PBM, Stork, PALette, AutoLogic,
Macintosh PICT, MTV, SGI, QDV, PCX, PCL, HSI Raw, Erdas Image, Sun RASter, Grasp, TIFF, QRT Raw, Utah
RLE, Windows BMP y WPG.
El precio de Image Alchemy varía, dependiendo de la plataforma. Su precio para la PC es el más bajo y es
comparable con el precio de la edición estudiantil de MATLAB. La dirección es Handmade Software, Inc., 15951
Los Gatos Blvd., Suite 7, Los Gatos, CA 95032; teléfono: (408)358-1292; Fax: (408)358-2694; Internet: hsi@net-
com.COM.
433

El inverso de irnread es imwr i te. Podemos convertir datos de imagen de MATLAB


en un archivo gif con
[W,mapa] = load datos_imagen
imwrite(W,mapa, 'nomarchv.raw')
!alchemy - g nomarchv.raw nomarchv.gif
% convierte a GIF

Ejemplo D.1 Imagen de una cámara digital


Las fotografías de la figura D.1 muestran las esculturas intituladas Mobius Trilogy (izquierda) 3
y Closed Loop Dr~fter (derecha) por Ralph Williams, que se tomaron con Quick100 4 y se
cargaron en una PC. El formato de las imágenes de Ja cámara digital era qtk, que primero se
convirtió al fonnato tif con el software de QuicklOO y luego al fonnato de imagen en bruto
con Alchemy. Por último, las imágenes se exhibieron con MATLAB (véanse también las
láminas a color).

Figura D.l Mobius Trilogy (izquierda) y Closed Loop Drifter


(derecha) por Ralph Williams

Ejemplo D.2 Una imagen de una videograbadora


Las imágenes de la figura D.2 se obtuvieron del programa Mystery de PBS. 5 El programa se
había grabado en cinta con una videograbadora casera. Las imágenes se capturaron de la cinta
y se digitalizaron en Macintosh en el formato pi e, luego se convirtieron al formato g i f para
PC utilizando PhotoShop en la Macintosh y finalmente al fonnato en bruto con lmage
Alchemy.
3
El matemático alemán A.G.R. Mobius fue el primero en describir una superficie que se tuerce de tal modo que
su lado superior es continuo con su lado inferior por lo que, de hecho, sólo tiene un lado.
4
Una cámara digital fabricada por Apple que toma fotografiasen forma electrónica. El Sr. R. Williams autorizó
la rerroducción de estas fotografias.
Se obtuvo autorización de WGBH, Boston, MA.
434 Procesamiento de imágenes

Figura D.2 Escenas del programa PBS Mystery Theater (véanse


también las láminas a color)

ELEMENTOS DEL PROCESAMIENTO DE IMÁGENES


Como una imagen consiste en una matriz de índices de color y un mapa de color asociado, la
imagen puede alterarse de muchas fonnas modificando la matriz y el mapa de color. El cambio
de color y el cambio de contraste son las operaciones de proceso de imágenes más elementales.
El solo cambio del esquema de color puede proporcionar infonnación distinta del mismo
archivo de imagen. La lmage Processing Toolbox cuenta con muchas herramientas para
procesar imágenes. En el resto de esta sección describiremos aspectos fundamentales de unas
cuantas técnicas elementales de procesamiento de imágenes.

Ejemplo D.4 Extracción de bordes y difusión


La figura D.3 muestra una imagen de círculos de color traslapados trazada con el listado D.2.

Figura D.3 Tres discos

Listado D.2
disk.ptn.m
% disk ptn,m Dibuja tres discos con pcolor.
clear ;clf
map=jet;
435

colormap (map)
disp 'Para usuarios de la Edición Estudiantil, ni < 25'
%ni=input('ni = 'I
ni=lOO;
nj= ni*l.20;
icl=ni/2; ic2=ni/2; ic3=ni/2;
jcl=nj/4; jc2=nj/2; jc3=nj/4*3;
W=ones(ni,njl;
ni20=ni/4;
for i=l:ni
for j=l:nj
rl = sqrt ( (i-icll ·2 + (j-jcll ·21;
r 2 = sqr t ( ( i- ic21 • 2 + ( j - j c21 • 21 ;
r3 = sqrt( (i-ic31 ·2 + (j-jc31 ·21;
if rl < ni20, W(i,jl=20; end
if r2 < ni20, W(i,jl=40; end
if r3 < ni20, W(i,jl=60; end
if rl< ni20 & r2 < ni20, W(i,jl=30; end
if r2< ni20 & r3 < ni20, W(i,jl=SO; end
end
end
pcolor (WI;
shading flat;
save disksda W map; axis('off'I
text(ni/10,ni/10, 'Patrón de discos', 'FontSize', (18) 1

Los bordes de los discos pueden identificarse por cambios repentinos del índice de color
en la matriz de la imagen w. Por ejemplo,

c(i,j) =[w(j,i) - w(j- l,i)] 2 + [w(j,i)- w(j + l,i)]2


+[w(j,i) - w(j,i -1)]2 + [w(j,i)- w(j,i + 1)]2

será cero si el mosaico (i,j) no está adyacente a un borde, y distinto de cero si lo está. La imagen
ilustrada en la figura D.4 se dibujó con el listado D.3

Figura D.4 Bordes de tres discos


436 Procesamiento de imágenes

Listado D.3
disk_cdg.m
% disk edg.m Traza los bordes extraidos de tres discos.
clear 'clf
load disksda % lee W and map
[ni, nj) =size (W) ;
colormap(map)
e= zeros(size(W));
for i=2:ni-1
for j=2:nj-1
c(i,j)=(W(i-l,j)-W(i,j))•2 + (W(i+l,j)-W(i,j))•2
+ (W(i,j-l)-W(i,j))•2 + (W(i,j+l)-W(i,j))•2;
i f e ( i , j ) > O , e ( i , j ) = 5 5 ; end
end
end
image(c) ;axis('off')
text (ni/10, ni/10, 'Bordes extra idos ' , ' FontSize', [ 18))
save edgeda e map

El patrón de los bordes puede hacerse difuso aplicando un operador de difusión, o bien
resolviendo la siguiente ecuación:
(4 + a.)dj,i = dJ- 1,; + dj+l,i + dj,i- 1 + dj,i+l + c(.i,i) (0.1)

donde a. es un parámetro para controlar el alcance del efecto de difusión. Cuanto más alto sea
a., más corta será la distancia de difusión. El siguiente es un esquema de resolución iterativo
basado en el método de Gauss-Seidel:
(t) (1) (t-1) (t) (1- 1)
(4 + a.)dj,; = dj- 1,i + dj+l,i + dj,i- 1 + dj,i+I + c(.i,i) (D.2)

donde t es el número de iteración. En el caso del procesamiento de imágenes no es necesaria


una convergencia estricta. De hecho, un número reducido de pasos de iteración logra el efecto
de difusión.
Una variante del procesamiento anterior es el efecto de d(fitsión convectiva producido por
(/) (1-1) (1- 1)
(2 + a)dj,; = dj+I + dj,;+1 + c(j,i) (0.3)

El esquema anterior difunde la imagen sólo en una dirección a partir de los bordes. El listado
0.4 exhibe el patrón difuso de la figura 0.5. La versión coloreada se encuentra en las láminas
de color.

Listado D.4
edge_dif.m
% edge dif.m Bordes difusos de tres discos.
clear 'clf
load edgeda
[ni, nj) = size (e);
d=c;
437

Figura D.5 Tres discos después de difusión

colormap(rnap)
for iter=1:7
for i=2:ni-1
for j=2: nj-1
d(i,j) = (d(i-1,j)+d(i,j) + d(i,j-l)+d(i,j) + c(i,j))/(4+0.1);
end
end
end
irnage(d)

text(ni/10,ni/10, 'Después de un proceso de difusión', 'FontSize', (18])


axis('off')

Ejemplo D.5 Fractal


La figura D.6 muestra una imagen fractal trazada con el listado D.4 que se basa en el modelo
de Henon: 6
X11+I =ax,, - h(y,, -X~)
Yn+I = hx,, - a(y,, -x~)
donde a= 0.24 y h = 0.9708.
La misma imagen fractal cambia significativamente si se altera el esquema de color, como
se ilustra en las láminas a color.

Listado D.S
fractal .m
%fractal .m Imagen fractal trazada por modelo de Henon.
clf,clear, W=ones(201,201)*64; colormap(hot)
hold on

6
1-I. Lauwerier, Fractal.,·, Princcton Univcrsity Press, 1991.
438 Procesamiento de imágenes

Figura D.6 Un fractal por el modelo de Hcnon

L=l;
for y=0.1:0.01:1
L=L+lO;
for x=0.1:0.01:1.2;
L=L+l; if L>64, L=l; end
a=0.24; b=0.9708; alph=76.1135;
for n=l:lOO
xb=x;yb=y;
x=a*xb-b*(yb-xb•2)
y=b*xb + a*(yb-xb•2)
if abs(x)>lO 1 abs(y)>lO break;end
nx = fix ((real (x) +1) *100);
ny = fix((real(y)+l)*lOO);
if nx<l nx=l; end; if nx>200, nx 200; end
if ny<l ny=l; end; if ny>200, ny 200; end
W(nx,ny) = L;
end
end
end
image(W) axis( [l,200,1,200]) axis ('off' ) hold off
Apéndice E

Interfaz gráfica con el usuario

Es muy probable que el lector haya utilizado software controlado por menús en más de una
ocasión. Casi todos los programas que se escriben con fines comerciales operan con menús.
Microsoft Windows es un ejemplo. Todos los programas de Macintosh son controlados por
menús. MATLAB mismo está controlado por menús. La interfaz gráfica con el usuario (GUI,
por sus iniciales en inglés, Graphical user interface) 1 hace que un programa sea fácil de usar.
El objetivo de este apéndice es presentar una introducción sencilla a las interfaces gráficas que
pueden programarse con MA TLAB. MA TLAB GUI también puede ayudar a los programado-
res en Fortran y C porque los programas escritos en estos lenguajes pueden operarse desde
MATLAB GUI. 2
En este apéndice se describe la fonna de crear una GUI. Los guiones de demostración de
este apéndice no sólo ayudarán al lector a entender las explicaciones, sino que también le
pueden servir como plantilla para crear sus propios programas basados en GUI.
El panel GUI se crea en una ventana de figura y consta de los siguientes componentes:
(a) Menú de interfaz con el usuario.
(b) Dispositivos de control de interfaz con el usuario.
(c) Ejes para exhibir gráficas o imágenes.

FLUJO DE OPERACIONES CON GUI


Con una GUI, el flujo de cómputo está controlado por las acciones en la interfaz. Mientras que
en un guión el flujo de comandos está predetenninado, el flujo de operaciones con una GUI no
lo está. Los comandos para crear una interfaz con el usuario se escriben en un guión, pero una
vez que el guión se ejecuta la interfaz con el usuario pennanece en la pantalla aunque se haya
completado la ejecución del guión. La interacción del usuario con la interfaz comienza allí y
continúa hasta que se cierra la interfaz.
En la figura E. l se ilustra el concepto básico de la operación del software con una GUI.
Cuando se elige una opción de un menú, el programa registra el valor de esa opción y ejecuta
1
Véase MATLAB: Building a Graphical U1·er Inte1face por MathWorks.
2
Puede obtener más detalles sobre la vinculación de Fortran y C con MATLAD en MA TLAB Externa/ lnte1face
Guide por MathWorks.

439
440 Interfaz gráfica con el usuario

los comandos prescritas en la cadena de invocación. Los menús de interfaz con el usuario, los
botones, los menús desplegables, los controles deslizantes y el texto editable son dispositivos
que controlan las operaciones del software.
Al completarse la ejecución de las instrucciones de la cadena de invocación, el control
vuelve a la interfaz para que pueda elegirse otra opción del menú. Este ciclo se repite hasta que
se cierra la GUI.
La cadena de invocación consiste en un solo comando de MA TLAB o una secuencia de
comandos, o en una llamada a una función. Es preferible utilizar llamadas a funciones, sobre
todo cuando se requieren más de unos cuantos comandos en la cadena de invocación.
El lector sólo necesita entender cinco comandos para poder escribir una GUI: uirnenu,
uicontrol, get, set y axes. No obstante, lo que hace relativamente complicadas a estos
comandos es el gran número de formas de uso que tienen. Es imposible describir todos los tipos

Panel de interfaz gráfica con el usuario

Menú de Menú Control Texto Texto Botón de


interfaz desplegable deslizante editable pulsar o de
con el radio
usuario

Opción de Opción de Opción de Impresión Ingreso de Opción de


menú valor de valor de de texto texto o valor de
parámetro parámetro estático datos por parámetro
el usuario

Acción de Acción de Acción de Acción de Acción de


invocación invocación invocación invocación invocación

f'igura E.l Flujo de operaciones con una GUI


441

de situaciones, pues requeriría demasiado espacio y sería muy laborioso leerlo. Por tanto, en
este apéndice sólo trataremos de explicar los elementos básicos de una GUI a través de
ejemplos. Los lectores que deseen información más detallada sobre los comandos deberán
consultar MA TLAB : Building a Graphica/ User interface.
He aquí una sugerencia para facilitar la comprensión de las GUI. Ejecute primero uno o
dos guiones de GUI de muestra de este apéndice. Esto será fácil si los archivos M del disquete
correspondiente a este libro ya están instalados en su computadora. Luego trate de entender los
comandos del guión . Un método excelente para aprender rápidamente consiste en tratar de
alterar los guiones. Este apéndice contiene 18 programas de demostración . Si desea ejecutar
un programa de este apéndice, teclee su nombre en la ventana de comandos (suponiendo que
todos los archivos M del disquete se instalaron en la computadora, o ejecute el programa
directamente desde el disquete):

Gu iDm n

donde n = 1, 2, ..., 18.

MENÚ DE INTERFAZ CON EL USUARIO


El menú de interfaz con el usuario es un menú o un grupo de menús que se encuentra en la
parte superior de una ventana de figura. El menú se desenrolla hacia abajo cuando se hace clic
en él con el ratón y muestra una lista de opciones. Cuando se elige una opción de la lista, es
posible que se desenrolle otro nivel de menús (si el menú se diseñó para ello).
Los menús de interfaz con el usuario se especifican con uimenu , cuya sintaxis es la
siguiente:

ml ui menu (gcf , . . .
' Label ', • cadena de rótulos l ' ,
'Position' [número de prioridad (entero)) ,
' Backg r oundColor' [r,g , b) , .. .
' CallBac k' ' cadena de invocación')
m2 = u imenu(gcf , ...
' Labe l', ' cadena de rótulos 2 ',
• Position' [número de priori d ad (entero) ],
' Bac k groundColor ' [r , g,b) , . . .
'Cal l Back ' ' cadena de invocación')
m3 = ui menu (gcf , . . .
' Label ', • caden a de rótulos 3 ',
• Posi tio n • [n úme r o de prioridad (entero) ) ,
' Bac k grou ndCo l or ' [r, g , b ) , . . .
' Ca l lBac k' ' cadena de invocación ' )

Aquí estamos suponiendo que hay tres menús en una ventana de figura . En los comandos, ml ,
m2 , ... son mangos de los menús que a menudo son necesarios en ca l l Bac k y otros comandos.
Los argumentos que siguen a gcf son las propiedades del menú y tienen el siguiente
significado:
442 Interfaz gráfica con el usuario

(a) 'Label, 'cadena de rótulos' especificaelrótuloqueapareceráenelmenú.


(b) 'Posi tion' , k detennina la posición secuencial del rótulo en el menú, donde k
es un entero que indica el orden de prioridad.
(e) 'BackgroundColor' , [r, g, bl especifica el color de segundo plano del
menú.
(d) 'CallBack' , 'cadena de invocación' especifica los comandos que se
ejecutarán cuando se seleccione el rótulo.

En la sintaxis anterior es posible omitir las líneas correspondientes a Po si tion y a Back-


groundcolor si son aceptables los valores por omisión. Además, Cal lBack no es necesario
cuando el menú va seguido de una lista de opciones que se abre cuando se hace clic en el menú.
También podemos especificar otras opciones; sin embargo, la mejor fonna de aprenderlas
es ejecutando el comando get (mango) después de ejecutarse el comando uimenu, donde
mango debe ser como ml o m2 de la explicación de sintaxis anterior. El comando get (mango)
devuelve las propiedades actuales del menú, que en su mayoría se establecen por omisión pero
que pueden modificarse en los argumentos del enunciado del comando uimenu.
Si una opción del menú tiene subopciones, éstas también se especifican con uimenu. Si
consideramos la lista de opciones para el primer menú cuyo mango es ml, la sintaxis con tres
opciones sería la siguiente:

mlsA = uimenu(ml,
'Label', 'Opción A',
'CallBack', 'cadena de invocación')
mlsB = uimenu(ml, ...
'Label' ,'Opción B',
'CallBack', 'cadena de invocación')
mlsC = uimenu(ml, ...
'Label', 'Opción C',
'CallBack', 'cadena de invocación')

Las tres opciones pertenecen al primer menú con mango ml. Se omitieron las propiedades
Posi tion y BackgroundColor, pero pueden incluirse si se desea.
La propiedad callBack es importante aquí si uicontrol es para el nivel tenninal del
menú. La cadena de invocación es una cadena que consiste en un comando, un conjunto
de órdenes o una llamada de función. En esta cadena se especifican todas las tareas de cómputo
que deben ejecutarse al elegirse la opción. Las instrucciones pueden ser un solo comando o
varios; sin embargo, a fin de simplificar la programación es recomendable no escribir más de
unos cuantos comandos o más de una llamada de función en la cadena de invocación. Todos
3
los detalles de los cálculos se pueden escribir en un archivo M.

3
El archivo M puede ser o no de función. En cualquier caso, 'cadena de invocación' es reemplazado
por 'nombre de archivo M' . La diferencia entre utilizar un archivo M de función y uno no de función es la
443

Figura E.2 Menú de interfaz con el usuario

En la figura E.2 se ilustra un programa sencillo controlado por menús que grafica y =
4
sen(x). El usuario puede modificar el estilo, el color y el ancho de línea de la curva desde el
menú.

GuiDm 1.m
% GuiDm 1.m Ilustra un menú de interfaz con el usuario.
close, clear
figure(l)
set(gcf, 'Position', (100,300,300,220],
'NumberTitle', 'off',
'Name' ,'GuiDm 1')
x=0:0.1:10; y=sfn(x);
p=plot(x,y) ;xlabel('x');ylabel('y=sin(x) ');
stl = uimenu(gcf,
'Label' ,'Estilo de línea',
'BackgroundColor', (0.8, 0.8, 0.8],
'Position', 2);
clr = uimenu (gcf,
'Label', 'Color de línea',
'BackgroundColor', [0.8, 0.8, 0.8],
'Po si tion' 1) ;
lw = uimenu (gcf,
'Label', 'Ancho de línea',
'BackgroundColor', [0.8, 0 . 8, 0.8],
siguiente. Si se emplea un archivo M de función, es necesario proporcionar como argumentos las variables
necesarias para el archivo M de función, pues de lo contrario éste no podría ver las variables del archivo M que
invoca. Por otro lado, si se utiliza un archivo M no de función, todas las variables del archivo M invocado estarán
visibles. Si desea mayor información, repase la explicación de los archivos M en el capítulo l.
4
El ancho de línea no cambió en la versión de MATLAB que utilizó el autor.
444 Interfaz gráfica con el usuario

'Position', 3);
solid = uimenu(stl,
'Label' 'Continua',
'CallBack', 'set (p,' 'LineStyle' ' , ' ' - '') ')
dotted = uimenu(stl, ...
'Label' 'Punteada', . ..
'CallBack' 'set(p,''LineStyle'','':'')')
yellow = uimenu(clr, ...
'Label', 'Amarillo', ...
'BackgroundColor', (0.9, 0.9, 0.1], ...
'CallBack', 'set(p,' 'Color'',' 'y'')')
green= uimenu(clr, .. .
'Label', 'Verde', .. .
'BackgroundColor', (0.1, 0.9, 0.1), ...
'CallBack', 'set (p,' 'Color'',' 'g' ') ')
red= uimenu(clr, ...
'Labe 1' , 'Rojo' , ...
'BackgroundColor', (0.9, 0.1, 0.1], ...
'CallBack', 'set(p,''Color'',''r'')')
solid = uimenu(lw, .. .
' Labe 1 ' , ' O . 5 ' , .. .
'CallBack', 'set(p,' 'LineWidth'' ,0.5) ')
dotted = uimenu(lw,
' La be 1 ' , ' 1 . o ' , ...
'CallBack', 'set(p, ''LineWidth'' ,1.0) ')

Observe que los textos en las cadenas de invocación deben quedar encerrados en dobles
apóstrofos.
Otro ejemplo, GuiDm _ 2, grafica una de las siguientes funciones, que el usuario elige del
menú:

(a) y= sen(x)
(b) y= exp(-x)
(c) y= cos(x2)
2
(d) y= exp(-x )

La figura E.3 se trazó con GuiDm_2 (no se pudo mostrar el menú abierto).

GuiDm 2.m
%GuiDm 2 Demostración de elección de ecuación del menó.
close, clear
fg=figure(l)
set ( fg, 'Posi tion', [150 150 350 250) ,
'NumberTitle', 'off',
'Name', 'GuiDrn_2')
x=0:0.1:10; y=sin(x);
p=plot(x,y) ;xlabel('x') ;ylabel('y=sin(x) ');
stl = uimenu(gcf, ...
445

Figura E.3 Selección por menú

'Label', 'Escoger Ecuación', ...


'BackgroundColor', (0.8, 0.8, 0.8))
Fl = uimenu (stl,
' La be 1 ' , 'y=s in ( x) ' , ...
'CallBack', ...
'plot(x,sin(x)) ;xlabel(' 'x' ') ;ylabel(' 'y=sin(x) '') ')
F2 = uimenu(stl,
'Label', 'y=exp(-x)', ...
'CallBack', ...
'plot (x,exp(-x)) ;xlabel (' 'x' ') ;ylabel (' 'y=exp( - x)' ') ')
F3 = uimenu (stl,
' La be 1 ' , ' y=cos ( x · 2) ' ,
'CallBack', ...
[
'plot(x,cos(x.·2)) ;', ...
'xlabel (' 'x' ' ) ; y label (' 'y=cos (x. • 2) ' ' ) '
l)
F4 = uimenu (stl, ...
'Label', 'y=exp(-x. '2) ',
'CallBack', ...
[
'plot (x,exp( - x. ·2));',
'xlabel (' 'x' ' ) ; y la bel (' 'y=exp ( - x. • 2) ' ' ) '
l)

El lector podría combinar los dos guiones anteriores en uno solo como ejercicio.
446 Interfaz gráfica con el usuario

CONTROLES DE LA INTERFAZ CON EL USUARIO


Los controles de la interfaz con el usuario en MATLAB se especifican con la orden uicon -
trol. Estos controles tienen mucho en común con los menús de la interfaz con el usuario, pero
los primeros tienen muchos estilos. La sintaxis de uicontrol es
k=uicontrol( 'Style' ,'especificación de estilo',
'String', 'cadena para exhibir',
'Value', [valor], ...
'BackgroundColor, [r, g, b] , ...
'Max', [valor], ...
'Min', [valor], ...
'Position', [ izq, base, ancho, alto], ...
'Callback', 'cadena de invocación')

donde 'especificación de estilo' esunadelassiguientescadenas:


popup
push
radio
checkbox
slider
edi t (texto editable)
text (texto estático)
frame

Las propiedades de uicontrol son similares a las de uimenu. Las propiedades que aparecen
aquí por primera vez son:
(a) 'Val ue' , valor: especifica el valor por omisión del ajuste. En el caso de
interruptores de encendido/apagado, valor es O o 1. En el caso de un control
deslizante (slider), puede ser cualquier valor entre el mínimo y el máximo.
(b) 'Min', valor: establece el valor mínimo. Su significado difiere dependiendo del
estilo.
(c) 'Max', valor: establece el valor máximo. Su significado difiere dependiendo del
estilo.
Hay muchas más propiedades que pueden incluirse en los comandos uicontrol, tal como
sucede con las propiedades de uimenu, aunque al programar conviene minimizar el número
de propiedades a fin de simplificar el guión. Si desea saber más acerca de las propiedades
adicionales, investigue utilizando el comando get.
En las subsecciones siguientes explicaremos los estilos con mayor detalle.

Texto estático
Un texto estático puede exhibir símbolos, mensajes o incluso valores numéricos en una GUI,
y puede colocarse en el lugar deseado. El texto estático no tiene cadena de invocación. A
continuación mostramos un ejemplo de texto estático:
447

kl=uicontrol('Style', 'text',
'String', 'texto estático exhibido',
'Position',(20, 50, 140, 30])

El contenido de un texto estático exhibido puede modificarse si es necesario. Esto se hace con
el comando set. Por ejemplo, ejecute el comando que sigue desde la ventana de comandos
mientras está vigente el ejemplo anterior de orden uicontrol:

set(kl, 'String', 'Ahora aparece un texto modificado.')

Si desea exhibir valores numéricos como texto estático, escriba num2 s tr ( n), donde n es
un valor numérico, en lugar de' texto estático exhibido' después de' String'. La
salida de GuiDm_3 es la mitad superior de la figura E.4.

GuiDm 3.m
close; clg
hl=figure (1);
set(hl, 'Position', (300,300,400,200],
'NumberTitle', 'off', ...
'Name', 'GuiDm 3: Valor Numérico')
kl=uicontrol( 7 Style' ,'text', ...
'String' ,num2str(pi),
'Position', [ 20,50,140,30])

Figura E.4 Resultados de GuiDm_3.m y GuiDm_4.m

Si desea exhibir varias cadenas como una cadena combinada, utilice corchetes. Por ejemplo,
la segunda mitad de la figura E.4 se produjo con GuiDm _ 4.
448 Interfaz gráfica con el usuario

GuiDm_4.m
% GuiDm 4 Cadenas combinadas en texto.
close; clg
hl=figure(l);
set(hl, 'Position', [300,300,400,100], ...
'NumberTitle', 'off', ...
'Name', 'GuiDm 4: Cadenas combinadas')
kl=uicontrol ('style', 'text', ...
'String', ['pi=' ,num2str(3.14159)],
'Position', (20,10,140,30])

Menú desplegable
Los menús desplegables difieren de los menús de interfaz con el usuario en que pueden
aparecer en cualquier punto de la ventana de figura, mientras que los menús de interfaz con el
usuario sólo se localizan en la parte superior.
Supongamos que un menú desplegable ofrece las opciones A, B, C y D. GuiDm_5.m
ilustra cómo debe escribirse uicontrol para el menú desplegable. También se necesita una
función task_1 para ejecutar el guión.
Cuando se ejecuta GuiDm_5, se abre una ventana de figura con un rótulo blanco
pequeño en la esquina superior izquierda de la ventana (véase la figura E.5). Si se hace clic con
el ratón mientras el apuntadorr está en el cuadro blanco, se desplegará un menú en la parte
media de la ventana de figura. Haga clic en A, B, c o D para que aparezca un mensaje corto
como
se escogió c
en la ventana de comandos . A fin de simplificar la ilustración, no se realizará ninguna otra
operación, pero ta sk_ 1 puede ser mucho más larga. Pueden elegirse otras opciones hasta que
se escoja Cerrar del menú.

GuiDm 5.m
%GuiDm 5 Demostración de menó desplegable.
clg
hl=figure(l)
set(hl, 'Position', (100,100,300,200],
'NumberTitle', 'off', ..
'Name', 'GuiDm 5: Demo de menó desplegable')
kl=uicontrol ( 'Style-;, 'Popup', ...
'String', 'AIBICIDICerrar', ...
'Value', l, ...
'Position', (20,150,140,30],
'CallBack', 'task_l(hl,kl) ')

task l.m
% task 1.m
function task l(h,k)
val= get(k, 'Value');
449

i f val l, fprintf ( ' Se escogió A\n')


e l seif va 1 2 ' fpr intf ( ' Se escogió B\n ' )
e l seif val 3' fpr intf ( ' Se escogió C\n ' )
e l seif val 4 ' fpr intf ( ' Se escogió D\n ' )
elseif val 5 ' close(h)
e nd

El significado de los argumentos de uicontro l en GuiDm_5.m es el siguiente:

(a) ' s ty l e ' , ' Popup ': el estilo de control de usuario es el de menú desplegable.
(b) ' Str ing ', ' A 1B 1c 1D1Cerrar ': las cadenas del menú son A, B, c, o y Ce rrar.
(c) ' va 1 ue ' , 3: selecciona la tercera opción, C, como opción por omisión.
(d) 'Position ', [20 ,1 so , 140 , 3o J:elmcnúapareeeen(20, 150)enunidadesde
pixeles en la ventana de figura; el tamaño del menú es de 140 por 30 unidades de
pixcles.
(e) ' ca ll Bac k' , ' task_1 (hl , kl) ':cuando se selecciona una opción del menú, se
ejecuta el comando task 1 , donde tas k_l es el archivo M de función.

Al seleccionarse una opción del menú (por ejemplo, suponemos que se eligió C), se entra en
la función task_ 1 y se obtiene el valor va l. En los argumentos de task_ 1, h y k son
mangos de la figura actual y de u icontro l, respectivamente. El comando va l
ge t ( k, 'va 1 u e ' ) captura el valor elegido en la ventana de menú, y va 1 adquiere los valores
1 para A, 2 para B, cte. En este ejemplo, se exhibe el mensaje ' s e escogió c ' en la ventana
de comandos . Si v a l=s , se cierra la ventana de figura (del mango h) y la GUI desaparece. En
caso contrario, el programa vuelve a la interfaz con el usuario y se puede repetir el procedi-
miento.
La ventana de figura en el ejemplo anterior (véase la figura E.5) no es ideal. De hecho, el
tamaño de la ventana de figura es excesivo para contener únicamente el menú, y sería bueno
exhibir más mensajes para el usuario. A fin de mejorar la ventana de figura, creamos GuiDm_ 6.
Reducimos el tamaño de la ventana y cambiamos el color de segundo plano a verde. El
ui contr o l con el mango j exhibe un mensaje arriba del menú desplegable. Ejecute
GuiDm_ 6 si desea ver las mejoras (véase la figura E.6).

GuiDm_6.m
% GuiDm 6 Mu estra las mejoras de Gu iDm 5.
hl = f i gur e (2)
set(hl , ' Position ' , (30 , 50,280 , 100 ), .. .
' Co l or ', [0 , 0.5 , 0.5 ), ' Narne ', ' GuiDm_6 ' ) ;
j=u icon t r ol ' ( ' Posit i on ' , [ ' 0 , 60 , 250 , 30) ,
' Stri ng ', ' Escoja entre A, B, C, Do Cerra r' ) ;
k=ui con t ro l ( ' Sty l e ', ' Popup ' , .. .
'S t r i n g ' ,' AIBIC IDICerrar ', . . .
' Position' , [0 , 30 , 100 , 30 ) , . . .
' Callback', ' task l(hl , k) ');
450 Interfaz gráfica con el usuario

Figura E.5 Menú desplegable (1)

Figura E.6 Menú desplegable (2)

En los dos ejemplos anteriores, la cadena de invocación es task_ 1, pero es posible escribir
el contenido de task_l directamente en la cadena de invocación. He aquí un ejemplo:

GuiDm_7.m
%GuiDm 7 Ilustra una cadena de invocación larga.
clg
hl=figure(2)
set (hl, 'Position', (30, 50, 280, 100], ...
'Color', (0,0.5,0.5], 'Name', 'GuiDm 7',
'NumberTitle', 'off') -
j=uicontrol('Position', (0,60,250,30],
'Style','text', ...
'String' ,'Escoja entre A, B, c, Do Cerrar')
k=uicontrol( 'Style' ,'Popup', ...
'String' ,'AIBICIDICerrar', ...
'Position', [0,30,100,30],
'Cal lback' ,
[ ...
451

'val = get (k,' 'Value' ');', ...


if val 1, fprintf(''Se escogió A\n'') ,', .. .
'elseif val 2, fprintf(''Se escogió B\n'') ,', .. .
'elseif val 3, fprintf(''Se escogió C\n'') ,', .. .
'elseif val 4, fprintf(''Se escogio D\n'') ,', .. .
'elseif val 5, close(hl),', ...
'end'
l)

En el ejemplo anterior, observe que la cadena de invocación se escribe en un vector de fila de


cadenas,

Botón de pulsar
GuiDm_ 8 ilustra la aplicación de un botón de pulsar; su resultado se muestra en la figura E. 7.

GuiDm_8.m
%GuiDm 8 Botón de pulsar
close;-clg
hl=figure(l)
set (hl, 'Position', [130, 550, 280, 100),
'Color' , [o, o. 5, o. 5) , ...
'Name', 'GuiDm 8: Botón de pulsar', ...
'NumberTitle'~'off')
j=uicontrol('Position', [0,60,250,30), ...
'Style' ,'pushbutton', ...
'String' ,'Pulse aquí para graficar sin(x) ',
'Callback', ...
[
'h2=figure(2) ;x=O:O.l:lO;plot(x,sin(x));,',
'xlabel(''x' ') ,ylabel(' 'y''),' ...
'set(h2,' 'Position'', [130,310,280,200))'
l)

Al ejecutarse este guión, primero se abre la ventana en la parte de arriba de la figura E. 7. Si


entonces se hace clic en el botón de pulsar, se abrirá una nueva ventana de figura (segunda
ventana de la figura E. 7) con una gráfica de y = sen(x). Si desea salir de la interfaz, teclee
e lose en la ventana de comandos.

Casilla de verificación
Las casillas de verificación están diseñadas para realizar operaciones de encendido/apagado.
El siguiente guión grafica la función seno y crea una casilla de verificación pequeña en la parte
de arriba de la gráfica (véase la figura E.8). La casilla activa o desactiva la aparición de los
ejes. Las posiciones de encendido/apagado se registran en Value que puede examinarse con
ge t ( handl e, ' va 1ue' ) . Los comandos axis on y axis off se escriben en la cadena de
invocación.
452 Interfaz gráfica con el usuario

Figura E.7 Botón de pulsar

GuiDm 9.m
%GuiDm 9 Casilla de verificación
close; clg
hl=figure(2)
set(hl, 'Position', [130,450,300,200], ...
'Color', [0,0.5,0.5], 'Narne', 'GuiDrn 9',
'NurnberTitle' ,'off') -
hold on
x=O:O.l:lO;plot(x,sin(x))
j=uicontrol('Position', (5,0,250,15],
'Style', 'checkbox', ...
'Value',l, .. .
'String','Pulse aquí para activar/desactivar eje', ...
'Callback', ...
[
'if get(j, ''Value'')==O, axis off; ',
'elseif get(j,' 'Value' ')==l, axis on, end'
l)
453

1desaclivar eje

Figura E.8 Casilla de verificación

Botón de radio
Cuando sólo se usa un botón de radio, no existe diferencia funcional alguna respecto a una
casilla de verificación. Por otro lado, los botones de radio en grupo son mutuamente exclusivos
(es decir, si un botón está encendido, todos los demás botones se apagan), mientras que las
casillas de verificación son independientes entre sí. Sin embargo, esta característica exclusiva
de los botones de radio sólo puede implementarse mediante la programación del usuario en las
cadenas de invocación (véase MA TLAB: Building a Graphical U'>er lnte1face).

Control deslizante
El control deslizante es un dispositivo analógico que sirve para modificar un parámetro. El
guión de GuiDm_lO ilustra Ja aplicación de los controles deslizantes (véase la figura E.9).
El guión sirve para demostrar el efecto sobre un color RGB de cambios en la intensidad de los
tres componentes, R, G y B. Las intensidades se modifican mediante controles deslizantes.

GuiDm_lO.m
%GuiDm 10 Demostración de color RGB
clf, clear
h6=figure(l);
clf
R=O;G=0.4,B=O;
set(h6, 'Position', [60,300,380,380),
'Name' ,'GuiDm 10: Demo de RGB', ...
'NumberTitle'~'off', ...
'Color', [O . o.o o.))
ah=axes('Position', (0.4 0.1, 0.55 0.50),
, Box, , , on, , ...
'Color',[R,G,8], ...
454 Interfaz gráfica con el usuario

iDm_10: Demo de RGB

Figura E.9 Control deslizante

'XColor', [O,O,O], 'YColor', [0,0,0])


%=============================
tl = uicontrol(gcf, 'Style', 'text',
'String', ...
'El color RGB consta de rojo, verde y azul. '
'HorizontalAlignment', 'Left', . . .
'Position', [30, 360, 320, 20], ...
'BackgroundColor', [0.8 0.8 0.8]);
t2 = uicontrol (gcf ,' Sty le', 'text ', .. .
'String', ...
'Moviendo los deslizadores, puede cambiar la', ...
'HorizontalAlignment' ,'Left', ...
'Position', [30,340,320,20], ...
'BackgroundColor', [O. 8 O. 8 O. 8]);
t3 = uicontrol(gcf,'Style', 'text',
'String', ...
'intensidad de cada color. El color RGB que '
'HorizontalAlignment', 'Left', ...
455

'Position', [30,320,320,20], ...


'BackgroundColor', [0.8 0.8 0.8])
t4 = uicontrol(gcf, 'Style' ,'text',
'String', ...
'resulta se puede ver en el cuadrado.
'HorizontalAlignment', 'Left',
'Position', [30,300,320,20), ...
'BackgroundColor', [O. 8 O. 8 O. 8));
%=============================Deslizador para Azul
bl = uicontrol(gcf,'Style', 'text',
'String', 'Intensidad Azul',
'Position', (10, 50, 110, 20), ...
'BackgroundColor', [O 6,0.6,0.8))
b2 = uicontrol(gcf, 'Style', 'text',
'String', 'O . . . . . . . . . . . . 1',
'Position', (10, 30, 110, 20));
b3 = uicontrol(gcf,
'Style', 'slider',
'Min', O, 'Max', 1,
'Position', (10,10,110,20],
'Value', B,
'CallBack',
'B=get(b3,' 'Value' ') ;set(ah,' 'Color'', [R,G,B]) ')
%=============================Deslizador para Verde
gl = uicontrol(gcf, ' Style', 'text',
'String' ,'Intensidad Verde',
'Position', (10,150,110,20), ...
'BackgroundColor', [O 6, o. 8, o. 6));
g2 = uicontrol(gcf, 'Style', 'text',
'String', 'O . . . . . . . . . . . . 1',
'Position', (10,130,110,20));
g3 = uicontrol(gcf,
'Style', 'slider',
'Min', O, 'Max', 1,
'Position', (10,110,110,20],
'Value', G,
'CallBack',
'G=get (g3,' 'Value' ');set (ah,' 'Color'', [R,G,B]) ');
%=============================Deslizador para Rojo
rl = uicontrol(gcf, 'Style', 'text',
'String', 'Intensidad Rojo',
'Position', (10,250,110,20), ...
'BackgroundColor', [O 8,0.6,0.6));
r2 = uicontrol(gcf,'Style', 'text',
'String', 'O . . . . . . . . . . . . 1',
'Position', [10,230,110,20));
r3 = uicontrol(gcf,
'Style','slider',
456 Interfaz gráfica con el usuario

'Min' , o, ' Max' , 1 , ...


'Position', (10,210,110,20),
'Value', R, .. .
'CallBack', .. .
'R=get (r3,' 'Value' ') ;set(ah,' 'Color'', [R,G,B)) ');

Observe que los valores de los controles deslizantes se capturan utilizando ge t con
'Value'.

Texto editable
El dispositivo de texto editable permite al usuario teclear una cadena de entrada. Se pueden
escribir valores numéricos en forma de vector o matriz como una cadena mediante el mismo
dispositivo; esta cadena se convertirá posterionnente en valores numéricos con el comando
str2num.
Un ejemplo de uicontrol para texto editable es:
edl = uicontrol(gcf, 'Style', 'edit',
'Position', (10,260, 110,20), ...
'CallBack', 'inp_txt=get(edl,' 'String' ') ')

Las palabras clave en el comando anterior son ' s ty 1 e', 'edi t' y ge t (mango, 's tr ing' )
que captura el texto introducido. El siguiente programa (GuiDm _ 11) lee del texto editable una
matriz introducida por el usuario (véase la figura E. l O) y calcula los valores propios de la
matriz, mismos que se exhiben en la ventana de comandos.

GuiDm 11.m
% GuiDm 11 Texto editable
close, clg
hl=figure(2)
set(hl, 'Position', [130,450,480,150),
'Color',[0,0.5,0.5), 'Narne','GuiDrn 11: Texto editable')
edO = uicontrol(gcf, 'Style', 'text', -
'Position', [110,60, 260,40), ...

Figura E.10 Introducción de números a través de texto editable


457

'String', ...
'Modifique la matriz 3 x 3 y pulse return. ')
ed2 uicontrol(gcf, 'Style', 'edit', ...
'Position', [110,20, 210,40),
' S tri ng' , ' [ 1 3 5 ; 5 - 2 1 ; 3 1 7) ' ,
'CallBack', [' inp txt=get (ed2, ''String' ' ) , ' ,
'eigenvalues=eig(str2num(inp_txt)) '])

Con el guión modificado, GuiDm_12, los valores propios se exhiben como texto estático
dentro de la GUI (véase la figura E.11 ).

Figura E.11 Exhibición de resultados en texto estático

CuiDm 12.m
% GuiDm 12 Resultados como texto estático
close,clg
hl=figure(2)
set(hl, 'Position', (130,350,480,210], ...
'Color', (0,0.5, 0.5), 'Name', 'GuiDm.12: Resultados en texto'
'NumberTitle', 'off')
axis('off'); hold on
edO = uicontrol(gcf, 'Style', 'text',
'Position', [110,150, 260,40], ...
'String', ...
'Edite la matriz de 3 x 3 y pulse return.')
edl = uicontrol(gcf, 'Style' ,'text', ...
'Position', (110,50, 260,40]' ...
'String' ,'Valores propios')
ed2 = uicontrol(gcf, 'Style','text', ...
'Position', (110,20, 260,40], ...
'String',' ')
ed3 = uicontrol(gcf, 'Style','edit', ...
458 Interfaz gráfica con el usuario

'Position', [110,110, 210,40], ...


'String',' [1 3 5; 5 -2 l; 3 7] ', ...
'CallBack', ...
['axis off; inp txt=get (ed3,' 'String' ' ) ; ' , ...
'eigen=eig(str2num(inp txt)) ;', ...
'ans=[num2str(eigen(l)l,'' ' ' ,'
'num2str(eigen(2)),'' ' ' ,'
'num2str (eigen (3))];', ...
'set(ed2,''String'',ans) '])

Marcos
El estilo f r ame puede servir para agrupar dispositivos como los botones de radio o las casillas
de verificación.

MÚLTIPLES EJES
Al crear una interfaz gráfica con el usuario, a menudo hay necesidad de trazar una o más
gráficas dentro de la interfaz. Podemos usar el comando subplot para este fin, pero el
comando axes es más flexible y ofrece opciones versátiles a los programadores.
El comando axes abre un eje en un punto especificado dentro de una ventana de figura.
Aunque podemos abrir varios ejes en una ventana de figura con axes, primero consideraremos

Figura E.12 Ilustración de graficación con axes (1)


459

únicamente uno. Como se aprecia en la figura E.12, el siguiente guión traza una gráfica en la
esquina inferior izquierda de la ventana de figura:

GuiDm_13.m
% GuiDm 13: Ilustra la orden axes.
close,hl=figure(l) ,clf
set(hl, 'Position', [300,300,350,300], ...
'NumberTitle', 'off', ...
'Name' ,'GuiDm_l3: Uso de la orden axes')
x=0:0.1:10;
axes('Position', [0.1, 0.1, 0.5, 0.5]);
plot (x, sin (x) )

La ubicación y el tamaño de los ejes se especifica mediante un vector que sigue a Posi tion.
Los valores del vector tienen el mismo significado que en uicontrol, excepto que los valores
están en la escala normalizada (el máximo es la unidad). La ubicación y el tamaño pueden
modificarse utilizando diferentes valores en los parámetros de posición.
La verdadera utilidad de el comando axes radica en que puede abrir múltiples ejes en
posiciones selectas. Aunque subplot puede hacer lo mismo, no es posible modificar libre-
mente el tamaño y la ubicación de las subgráficas.
GuiDm_l4 grafica sen(x) en el nivel medio del lado izquierdo y exp(-x) en la esquina
inferior derecha (véase la figura E.13).

Figura E.13 llustración de graficación con axes (2)


460 Interfaz gráfica con el usuario

GuiDm_l4.m
%GuiDm:14: Ilustra móltiples ejes.
close,hl=figure(l) ,clf
set(hl, 'Position', [300,300,350,350],
'NumberTitle', 'off', ...
'Name', 'GuiDm_14: Empleo de móltiples ejes')
x=0:0.1:10;
axes('Position',[0.1, 0.3, 0.3, 0.3]);
plot (x, sin (x)) ;
axes('Position', [0.55, 0.1, 0.4, 0.4]);
plot(x,exp(-x))

¿Cómo podemos reactivar el primer eje como eje vigente para poder modificar la gráfica
agregando más curvas o borrando y rcdibujando? Podemos hacerlo utilizando el comando
subplot para indicar el eje deseado. Para ello, debemos usar el mango asignado a cada eje.
El guión GuiDm_l5 grafica dos funciones en cada eje, como se ilustra en la figura E.14.

Figura E.14 Ilustración de graficación con axes (3)

GuiDm_lS.m
% GuiDrn 15 Empleo de subplot con axes.
close, hl=figure (.ll, clf
461

set(hl, 'Position', [300,300,3S0,3SO], ...


'NumberTitle', 'off', ...
'Name', 'GuiDm_lS: Empleo de subplot con axes')
x=0:0.1:10;
hl=axes (' Posi tion' , [O. 1, O. 3, O. 3, O. 3] ) ;
plot (x, sin (x)) ;
h2=axes('Position', [O.SS, 0.1, 0.4, 0.4]);
plot(x,exp(-x))
%
subplot (hl)
hold on; plot(x,cos(x),' :'); hold off
%
subplot(h2)
hold on; plot(x,sin(x.*x),' :'); hold off

APLICACIONES
Ilustraremos tres aplicaciones de GUI que incorporan combinaciones de diferentes dispo-
sitivos.

Aplicación E.1
Aquí elaboraremos un guión GuiDm_16 que exhibe una esfera (véase la figura E.15) con
opciones para:

Mapa de color: hsv, flag, jet y cool


Tipo de presentación: mesh, sur fa ce y sur f 1
Sombreado: faceted, f late in terp

GuiDm 16.m
%GuiDm 16 GUI para exhibir gráficas en 3D
clf, clear
h6=figure(l);
set(h6, 'Position', (60, 300, 380, 380], ...
'Color', [O. o.o O.], .. .
'NumberTitle', 'off', .. .
'Name','GuiDm_16: Gráficas en 3D')
[x,y,z]=sphere(lO);
axes('Position', (0.4 0.2, O.SS O.SS],
'Box', 'on', 'Color', 'k')
surf(x,y,z,-z);
%=============================Control deslizante
txt sll = uicontrol (gcf, ...
'Style','text', ...
461

set(hl, 'Position', [300,300,350,350], ...


' Numbe r Ti t 1 e ' , ' off ' , ...
'Name' ,'GuiDm_15: Empleo de subplot con axes')
x=0:0.1:10;
hl=axes('Position', [0.1, 0.3, 0.3, 0.3]);
plot (x, sin (x));
h2=axes('Position', [0.55, 0.1, 0.4, 0.4]);
plot (x, exp (-x))
%
subplot (hl)
hold on; plot(x,cos(x),' :'); hold off
%
subplot(h2)
hold on; plot(x,sin(x.*x),' :'); hold off

APLICACIONES
Ilustraremos tres aplicaciones de GUI que incorporan combinaciones de diferentes dispo-
sitivos.

Aplicación E.1
Aquí elaboraremos un guión GuiDm_l6 que exhibe una esfera (véase la figura E.15) con
opciones para:

Mapa de color: hsv, flag, jet y cool


Tipo de presentación: mesh, sur fa ce y sur f 1
Sombreado: faceted, f late in terp

GuiDm 16.m
%GuiDm 16 GUI para exhibir gráficas en 3D
clf, clear
h6=figure(l);
set(h6, 'Position', [60, 300, 380, 380], ...
'Color', [O. O.O O.], .. .
'NumberTitle' ,'off', .. .
'Name', 'GuiDrn_16: Gráficas en 3D')
[x,y,z]=sphere(lO);
axes('Position', [0.4 0.2, 0.55 0.55],
'Box', 'on', 'Color', 'k')
surf{x,y,z,-z);
%=============================Control deslizante
txt_sll = uicontrol (gcf, ...
'Style','text', ...
462 Interfaz gráfica con el usuario

Figura E.15 Gráfica tridimensional en una GUJ

'String', 'Tamaño malla:', ...


'Position', [10,50,110,20));
txt sl2 = uicontrol(gcf, .. .
'Style', 'text', .. .
'String', '10 . . . . . . . . . . . . 50',
'Position', [10, 30, 110, 20]);
txt sli = uicontrol (gcf, .. .
'Style','slider', .. .
'Min', 10, 'Max', 50, .. .
'Posi tion', [10, 10, 110, 20),
'Value', -30, .. .
'CallBack', .. .
[' clear x y z; ' , .. .
[x,y,z]=sphere(ceil (get(txt-sli, ''Value' ')));', ...
463

'surf(x,y,z,-z)'. ..
l);
%~===~========~=~~====== Selección de sombreado
pushO=uicontrol(gcf, ...
'Style', 'text', ...
'Position', [10, 140, 110, 20), ...
'String' ,'Sombreado: '
'Value',O);
sym(l)=uicontrol(gcf, ...
'Style', 'push', ...
'Position', [10,80,110,20),
'String' ,'Interpolado',
'CallBack', 'shading interp ');
sym(2)=uicontrol(gcf, 'Style', 'push',
'Position', [10,100,110,20),
'String', 'Plano', ...
'CallBack' ,'shading flat');
sym(3)=uicontrol(gcf, 'Style', 'push',
'Position', [10,120, 110,20),
'String', 'Facetas', ...
'CallBack', 'shading faceted ');
%=====~========~============= Selección de mapa de color
push3=uicontrol(gcf, 'Style' ,'push',
'Position', [10,170, 110,20],
'String', 'jet', ...
'CallBack' ,'colormap(jet) ');
push2=uicontrol(gcf, 'Style' ,'push',
'Position', [10 190, 110,20),
'S tr ing' , 'flag' , ...
'CallBack', 'colormap(flag) ');
pushl=uicontrol(gcf, 'Style' ,'push',
'Position', [10,210, 110,20),
'String', 'hsv', ...
'CallBack' ,'colormap(hsv) ');
pushO=uicontrol(gcf, 'Style' ,'text',
'Position', [10,230, 110,20),
'String', 'Mapa de color:',
'CallBack' ,'dummy=O');
%=====~========~=====~=~=== Escoger perspectiva
edtxO=uicontrol(gcf, 'Style' ,'text',
'Position', [10,280 110 20), ...
'String' ,'Perspectiva [ , ) ');
edtxl=uicontrol('gcf', 'Style', 'edit',
'Position', [10,260, 110,20] ',
'String',' [-20,30) ',
'CallBack', ...
['v_ang=str2num(get(edtxl,' 'String' ')) ;',
'view(v_ang) '));
464 Interfaz gráfica con el usuario

%===~==========~============= Activar/desactivar ejes


ckbox=uicontrol(gcf, 'Style', 'checkbox', ...
'Position', [10,310, 110,20],
'String', 'Ejes sí/no', ...
'CallBack' , ...
['ckv= get(ckbox,' 'Value''); if ckv~1, ', ...
'axis on, elseif ckv==o, axis off, end ']);
%===============~~========== Título superior
title=uicontrol(gcf, 'Style', 'text', ...
'Position', (60,345, 310,20], 'String',
'Demo de interfaz de usuario: GuiDm 16');

Aplicación E.2
Recordemos el circuito eléctrico del ejemplo 10.16 y reorganicemos el guión utilizando una
GUI. Los valores de La, Lb y Ra se detenninan mediante controles deslizantes, mientras que
Rb y e se seleccionan de un menú desplegable. El diagrama de circuito y las soluciones de las
EDO se exhiben en la GUI (véase la figura E.16).

Figura E.16 Análisis de circuitos guiado por GUI

GuiDm_17.m
% GuiDm 17 Análisis de circuito eléctrico
465

clf, clear
h6=figure (1);
clf
R=O;G=0.4,B=O;
set(h6, 'Position', [60,300, 680,380],
' Name' , ' RGB _ demo' , .. .
'NumberTitle', 'off', .. .
'Color', [O. O.O O.])
ah=axes('Position', [O.OS 0.2S, 0.4 O.SO],
' Box' , ' on' , ...
'Color', [R,G,B], ...
'XColor', [0,0,0], 'YColor', [0,0,0])
ah2=axes('Position', [O.SS 0.3, 0.42 O.SO],
' Box' , ' on' , ...
'Color',[R,G B], ...
'Xcolor', [0,0,0], 'Ycolor', [0,0,0])
subplot(ah); APE_ circ %llamando a APE circ (diagrama)
La=0.01; Lb=O.S;Ra=200;Rb=20;C=0.002;
subplot(ah2); APE_rk(La, Lb, Ra, Rb ,C);
%llamando a RK 2do orden
%=============================
tl = uicontrol(gcf, 'Style', 'text',
'String',
['La=', num2str (La)], ...
'HorizontalAlignment', 'Left',
'Position', [30,360,100,20], ...
'BackgroundColor', [O. 8 O. 8 O. 8]);
tlB = uicontrol(gcf, 'Style'~ 'text',
'String', ...
['Lb=' ,num2str(Lb)], ...
'HorizontalAlignment', 'Left',
'Position', [130,360,100,20), ...
'BackgroundColor', [0.8 O 8 0.8]);
t2 = uicontrol(gcf, 'Style', 'text',
'String', ...
['Ra=' ,num2str(Ra)J, ...
'HorizontalAlignment', 'Left',
'Position', [30,340,100 20], ...
'BackgroundColor', (O. 8 O. 8 O. 8]);
t2B = uicontrol(gcf, 'Style', 'text',
'String', ...
('Rb=' ,num2str(Rb)], ...
'HorizontalAlignment', 'Left',
'Position', (130,340,100,20], ...
'BackgroundColor' (0.8 0.8 0.8]);
t3 = uicontrol(gcf, 'Style', 'text',
'String',
466 Interfaz gráfica con el usuario

[ • C=', num2str (C)), ...


'HorizontalAlignment' ,'Left',
'Position', (30,320,100,20), ...
• BackgroundColor •, [O. 8 o. 8 o. 8));
%-----~--~----~--------~--control deslizante para La

bl = uicontrol(gcf,'Style', •text',
'String', 'La', ...
'Position', (10,50,110,20), ...
'BackgroundColor', (0.8,0.8,1));
b2 = uicontrol(gcf,'Style' ,'text•,.
'String', '0.01 . . . . . . . . . . . . 0.1',
'Position•, (10,30,110,20))
b3 = uicontrol(gcf,
• Style', • slider •
'Min', 0.01, 'Max•, 0.1,
'Position', (10,10,110,20),
'Value', La,
• CallBack • ,
['cla;La=get(b3,' 'Value'') ;',
'set (tl,' 'String' ', [''La='•, num2str (La)));'
l)
%=============================Control deslizante para Lb
gl = uicontrol(gcf,'Style' ,'text',
'String', 'Lb', ...
'Position', (130,50,110,20), ...
'BackgroundColor •, [O. 8, l. O. 8));
g2 = uicontrol(gcf,'Style' ,'text',.
'S tr ing • , • O. 1 . . . . . . . . . . . . O . 5 • ,
'Position', (130,30,110,20));
g3 = uicontrol(gcf,
'Style', 'slider•
'Min' , O . 1, 'Max' , O . 5,
'Position•, (130,10,110,20),
'Value', Lb,
'CallBack',
[' cla; Lb=get (g3,' 'Value • ') ; ',
'set (tlB,' 'String'', [•'Lb='', num2str (Lb)));',
l)
%~---~----------------------control deslizante para Ra
rl = uicontrol(gcf,'Style' ,'text•,
'String','Ra', ...
'Position', (250,50,110,20), ...
'BackgroundColor', (1, O. 8, O. 8));
r2 = uicontrol(gcf,'Style', 'text',.
'String','20 . . . . . . . . . . . . 200',
'Position', (250, 30, 110, 20));
r3 = uicontrol(gcf,
'Style' ,'slider'
467

' Mi n' , 2 o , ' Max' , 2 Oo , . . .


'Position', [250,10,110,20),
'Value', Ra, . . .
'CallBack', .. .
['cla;Ra=get(r3,' 'Value' ' ) ; ' , .. .
'set(t2,' 'String' ', [' 'Ra='' ,num2str (Ra)));', ...
) )
% Botón de pulsar
rl = uicontrol(gcf,'Style' ,'Push', . ..
'String', 'Pulse para iniciar RK',
'Position', (380,10,110,60), .. .
'CallBack', ...
'disp([La,Lb,Ra,Rb,C)) ;APE_rk(La,Lb,Ra,Rb,C) ');

APE_circ.m
% APE circ.m Dibuja un diagrama de circuito eléctrico
cla
hold off
%axis (' square')
axis( [-0.3,4,-0.5,2 . 5));
hold on
%battery_(0.1, 0.2, [O.O, O), [O . O, 2));
text(0-0.2, o, 'B')

text(0-0.2, 2, 'A')
switch (0.5, 1, [O,O], (2,0));
capacitor_(0.1, 0.3, [2,0), (2,1))
resist_(6, 0.5, 0.2, [2,1), (2 2));
coil_(6,0.4, 0 . 07, [0,2), (2.,2));
%coil_trad(4, 0.3, [0.8,2), [2.2,2));
line_( [2,0), (3.5,0))

resist (6,0.5, 0.1, (2,2), [3.5,2));


coil_(6,0 . 4, 0 . 07, [3.5,2), (3.5,0));
text(2+0.19, 0 . 5, 'C')
text(2+0.19, 1.5, 'Ra')
text(0.8,-0.3, 'S')
text(3.7,1, 'Lb')
text ( 1., 2. 2, 'La')
text(2.7, 2.2, 'Rb')
text(-0.2, 1.0, 'e(t)')
text(0.5,2 . -0 . 2, 'il(t) ');
arr ow_ (o . 4 , [ 1 . 2, 2- O . 2) , [ 1 . 6 , 2-0 . 2) )
text(2.3,2.-0.2, 'i2(t)');
arr ow_ (o . 4 , [ 2 . 9 , 2-0 . 2) , [ 3 . 3, 2-0 . 2) )
axis('off')

line_([O,O), [0,0.8))
468 Interfaz gráfica con el usuario

line_([0,1.2], [0,2])
ellip_(O, l, 0.3, 0.2)

Figura E.17 Análisis aerodinámico de una tobera guiado por GUI

Aplicación E.3
En muchos dispositivos aerodinámicos se emplean toberas para flujos de gas; por ejemplo, los
motores a reacción, los cohetes y los túneles de viento. Aquí consideraremos ):is toberas
convergentes-divergentes para producir un flujo supersónico.
Quienes hayan estudiado dinámica de fluidos deberán saber cómo calcular los números de
Machen la tobera empleando la tabla de aire isentrópico y la tabla de choque nonnal. El guión
469

GuiDm_18 simula el flujo de aire en una tobera convergente-divergente empleando una GUI
(véase la figura E.17). Aunque la configuración de la tobera está incluida en la codificación del
guión, puede cambiarse fácilmente modificando el archivo M. La única entrada del usuario es
la retropresión de la tobera, que se especifica mediante una ventana de texto editable. Tan
pronto como se introduce la retropresión y se pulsa la tecla RETURN, se exhiben los resultados
gráficos.
Índice

A box , 73, 85
abs, 23 break, 10
agradable (a la vista), 299
ajuste de curvas, 285 e
Alchemy, 432 c-sp l ine, 299
archivo M, 2, 26 cadena, 16,45
archivo MAT, 2 CallBack, 443
archivo MEX, 2 capad t , 73. 83
argumento cargar, 431
arreglo, 22 carita feliz, 69
complejo, 22 Cauchy d, 244, 247
arreglo, 13 caxis, 67-;-414
operador aritmético de, 14 ceil, 23
operador de potencia de, 14, 18 cell da, 78
variable de, 13 cerO, 253
arrow , 73, 88 Cheby pw,163.179
arrow-dot, 88 Chebyshev
ASCII,31 interpolación de, 142, 163
a tan255D,62 puntos de, 159
automóvil, 188 circle , 73, 83
avión,422 clabel~52
axes,39,40,49,459 ele, 11
clear, 11
B clf, 39
b-splines, 299, 306 clock, 3
bala, 266 e lose, 452
bisec g, 258, 274 coil a,73,83
bisección, 257 color rgb, 413
Blasius, 405 color, 38, 413
borrar curva, 39 eje de, 67
botón de pulsar, 441, 452 colormap, 65, 413
botón de radio, 454 combinación lineal, 293
botón comentario, 26
de pulsar, 441, 452 complejo
de radio, 454 argumento, 22

470
Índice 471

plano, 37 diff fnd, 247


variable, 8 diffuse, 65
condición de frontera mixta, 392 Dirichlet, 392
conj,23 disk edg, 435
contour, 39, 52 disk- ptn, 434
control deslizante, 441, 454 disp-;-7, 9, 27
conv, 146 división inversa, 5
convección natural, 348 doble
convección, 262 exponencial, 207
cool, 413 integral, 211
coordenadas Lagrange, 173, 177
locales, 41 7
transfonnación de, 214 E
copia impresa, 50 echo,26
correlación de Colebrook, 281 ecuación integral-diferencial, 341
Cray, 21 ecuación sobredetenninada, 104, 286
cuadratura de Gauss-Legendre, 167 ecuación subdetenninada, 104
cuadro de verificación, 452 ecuación tridiagonal, 303, 392, 395
cubic, 148 ecuación
curva vectorial, 55 no lineal, 269, 299
curva, borrado de, 39 sobredetenninada, 104, 286
subdetenninada, 104
D tridiagonal, 303, 392, 395
damper , 73, 84 edge dif, 437
date, 8- editor-
dbl exp, 209, 230 emacs, 26
dbl-itg, 213, 230 jot, 26
deconv, 146 vi,26
delta ,323 EDO de orden superior, 340, 350
dem bs,276 ED0,325
demo,4 de orden superior, 340, 350
depuración, 30 eig, 133
derivada parcial, 239 electromagnético, 354
derivada, 146, 238 elemento de calentamiento, 270
descomposición LU, 126 eliminación
det, 112 de Gauss, 117
detenninante, 11 O de Gauss-Jordan, 122
diary,3 hacia adelante, 117
dibujo, 68 ellip , 73
diferencia central, 231, 238, 390, 399 elseif, 7
diferencia emacs, editor, 26
aproximación de, 261 end/for, 8
central, 231 eps, 8, 21
hacia adelante, 231 épsilon de la máquina, 20
hacia atrás, 231 eqn 1, 277
diferenciación, 228 eqn-w3,275
de interpolación de Lagrange, 160 errorde truncado, 234
472

error global, 336 mixta, 392


error, 369 problema de valor en la, 326, 373, 388
de interpolación, 156 fuente, 47
de truncado, 234 fun dbl, 221
global, 336 fun-dbx,230
local, 335 fun-es, 32
escala, 417 fun- ex2, 259
escape, 4 fun-xb, 34
espagueti, regla del, 111 función, 28
estirar, 318 implícita, 39
exp, 23 potencia, 288
expansión function, 29
de Mclaurin, 34, 218
de Taylor, 218, 260, 349, 358 G
exponencial, 201 g cont,58,81
exportar imagen, 432 Gauss
eye, 101 eliminación de, 117
-Jordan, eliminación, 122
F -Legendre, 167, 198
f av, 29 -Seidel, 130
f-fl,271 Gauss q, 219
f-f2,273 GC interp, 81
f3m , 367 gcf, 47, 442
fac~ted, 68 get, 457
fan rot, 419 getframe,427
feval, 30 getnev, 3
figure,48 gif, 432
e lose, 452 ginput, 75
fix, 3, 23 grado, l
flag, 65, 413 gray, 413
fontname,47 grid on/off,40
for/end, 8 gtext, 46
forma, función de, 154 .guardar en disco, 431
format long, 9 GUI,440
forma t shor t, 10 GuiDm_n, 441
formato corto, 1O
formato largo, 9 H
formato, 12 hacia adelante
Fortran, ix, 21 diferencia, 231, 238
fplot, 39 eliminación, 117
fprintf,11 método de Euler, 329, 357
frontera adiabática, 391 hacia atrás
frontera diferencia, 231, 238
capa de, 405 método de Euler, 335
condición de, 302 sustitución, 11 7
de Dirichlet, 392 haz,254
de Neumann, 392 help, 2
Índice 473

Hermite, interpolación de, 167 intervalo de tiempo, 369


hilb, 101 inv, 101
Hilbert, matriz de, 1O1, 116 inversión de una matriz, 122
hold,35,43,68,429 inverso, 122
hot, 413 irreducible, 130
HP DeskJet, 50 iteración
hsv, 60, 413 de Newton, 271, 314, 404
human_, 73, 86 de punto fijo, 266
solución, 130
1
if, 6, 18 J
imag, 23 Jacobi, método iterativo de, 130
image,429 jet, 413
imagen bruta, 432 jot, editor, 26
imaginario, 8
implícito, 39, 54 K
importar imagen, 432 k wheel, 321
impresora, 50 kidsl, 89
HP Deskjet, 50
Postscript, 51 L
inf, 8, 21 Lagran , 156, 179
input, 11 Lagrange, interpolación de, 142, 153
insect , 70, 73, 89 LaTex, xi, 50
int2str, 45 lectura, 11
integración de Romberg, 190, 201 Legen pw, 167, 179,219
integración numérica, 326 Legendre
integración polinomio de, 198
de Cauchy, 244 puntos de, 166
de Lagrange, 160 length, 16, 145
de Romberg, 190, 201 level, 53
método de, 398 line , 73, 84
numérica, 326 línea, color de, 38
integral de Cauchy, 244 línea, tipo de, 38
interfaz gráfica con el usuario, GUI, 440 linear, 148
interp,shading,65 líneas, método de, 376
interpl, 147 liquid j,425
interpolación bilineal, 173 load, 1f:30
interpolación transfinita, 142, 173 Lobatto, puntos de, 166
interpolación lag, 23
bilineal, 173 loglO, 23
de Chebyshev, 142, 163 loge, 1
de Hermite, 167 loglog,40
de Lagrange, 142 low_lim, 221
doble de Lagrange, 177
doble, véase table2 M
error de, 153 Macintosh, 1
transfinita, 142, 173 mal acondicionado, 113
474

marca de continuación, 5 Newt n, 262, 276


marco,458 Newton, iteración de, 260, 271, 314, 404
matriz de identidad, 96, 102 niveles de contorno, 53
matriz nula, 96 no lineal
matriz positiva, 401 ecuación, 269, 299
matriz transpuesta, 96 ED0,403
matriz, 96 norma-dos, 114
de Hilbert, 116, 117 nueva línea, 12
inversión de una, 122 num2str, 45
positiva, 401 número aleatorio, 25
singular, 109 número condicionado, 1 14
triangular, 126 números en MA TLAB, 20
tridiagonal, 392
max, 25 o
Mclaurin, expansión de, 34, 218 operador and, 6
mean st, 29 operador primo, 13
membrana, 411 operador
menú desplegable, 441, 448 aritmético de arreglos, 14
menú,441 de potencia de arreglos, 14, 18
mesh, 59 primo, 13
meshc,63 optimización, 369
meshgr id, 52 or, 6
método oscilación armónica, 135
de Euler, 335
de Gauss-Seidel, 130 p
de integración, 398 paracaidista, 327
de líneas, 376 path,3
de prueba y error, 390 pcolor, 430
de Runge-Kutta, 344 permutación, 111
gráfico, 254 de matrices, 96
iterativo de Jacobi, 130 phi da, 80
SOR, 130 pi,8
min, 25 pipe ,421
mínimos cuadrados, 11 O, 285, 290 pivotáñte, 119, 128
movei 1, 428 pivote, 118
movie~427 plot, 35
moviein, 427 plot3, 50
múltiples curvas, 42 point da,78
múltiples ejes, 459 polar~40
polinomio cuadrático, 20
N polinomio osculante, 167
\n, 11 polinomio
NACA 0012, 278, 422 cuadrático, 20
NaN, 8,22 de Chebyshev, 163
Neumann, 392 de Legendre, 198
Newt g, 262, 277 de Taylor, 246
Newt=itg,198,218 osculante, 167
Índice 475

poly, 133 retrol lamada, 441


poly add, 146, 179 rgbplot, 413
poly-drv,218,247 roots, 143, 163
poly-itg,145,178 rotación, 71, 417
polyder, 145, 162,239 rotor de ventilador, 419
polyfit, 145, 162, 171,218,286 rotx ,417
polyval, 145 roty-, 417
Postscript, xi, 432 rotz-,417
impresora, 5 1 round, 23
potencia Runge-Kutta, método de, 344
coeficiente de, 143
función de, 288 s
serie de, 149 save, 11,30
precisión, 20 semilogx,41
problema sin solución, 107 semilogy, 41
problema shading, 65, 68, 430
de valor en la frontera, 326, 373 shape pw, 161, 179, 239
de valor inicial, 325 sign, 23
sin solución, 107 símbolo griego, 47
propiedades, 442 Simps n, 193, 218
prueba y error, 373, 390 simps-v, 193,214,217
punto y coma, 15 Simpson, regla de, 190, 359
puntos de control, 307 singularidad, 201
size, 16
Q sobrerelajación sucesiva, 130
quad,209 SOR, 130
quit, 2 sor t, 24, 22, 163
quiver,55 specular,65
spline, 148
R spr ing , 73, 85
radiación, 262 sqrt,2f
radián, 1 str2mat, 19
radioisótopo, 326 stret , 318
raíz cúbica, 261 subplot, 35, 48, 459
raíz, 142, 253 sum, 25
Ralph Williams, 433 surf, 65
rand, 25 sur fe, 65
rand im, 431 sur f 1, 65, 424
ratón,46, 52, 75, 442 sur fnorm, 65
reactor nuclear, 268 sustitución hacia atrás, 117
regla trapezoidal, 146, 186, 20 l, 245 sustitución sucesiva, 254, 265, 269, 332, 403
regresión, línea de, 285 switch , 73, 85
resist , 73, 84 symbol~47
retícula éürvilínea, 56
retícula T
curvilínea, 56 table2,173
triangular, 56
476

Taylor V
expansión de, 218, 234, 260, 349, 358 valor característico, 133
polinomio de, 246 valor inicial, problema de, 325, 390
td data, 58, 81 valor propio, 132
text, 45 van der Vaals, 280
texto editable, 441, 457 variable, 7
texto, 45 compleja, 8
editable,441 de arreglo, 13, 17
tic, 3 velocidad de la tenninal, 265
ti tle, 45 version, 2
tobera, 469 vi, editor, 26
toe, 3 vida media, 326
tol,209 view, 61
trace, 209 Vinokur, 318
transfonnación (coordenada), 214 vxv_, 356
trapez g, 188, 217
trapez-n, 188,217 w
trapez-v, 188,217 wall ht, 262
traslación, 71, 417 what~2
tri con t, 56, 79 while, 21
tri-diag, 396 who,2
tri-gr id, 56, 76 Windows, 1
triangular
matriz, 112, 128 X
retícula, 56 xlabel, 37, 61
tubo espiral, 420
two_eyes, 73, 87 y
ylabel, 37, 61
u
uicontrol,447 z
uimenu, 443 zeros, 101
Unix, 1 zlabel,61
upp_ lim, 221

También podría gustarte