Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Analisis Numerico y Visualizacion Grafica Con Matlab 4 PDF Free
Analisis Numerico y Visualizacion Grafica Con Matlab 4 PDF Free
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
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
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
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
A Colores 413
C Cine 427
IX
X Prefacio
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.
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.
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
MARCAS REGISTRADAS
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
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
»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 .
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.
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
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.
Listado 1.la
r = 2;
vol= (4/3)*pi•r•3;
Listado 1.lb
r = 2;
vol= (4/3)*pi*rA3
r = 2, vol= (4/3)*pi*rA3
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
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
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
se expresa como
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.
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.
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
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
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
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
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
ele
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:')
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:
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
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
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
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] ';
z =
o
0.1
0.2
0.3
0.4
0.5
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;
X=
2 3
lo que devuelve
X=
2 3 5
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
w
3
7
la consulta
length(x)
recibe la respuesta
ans
4
ans =
3 1
ans =
1 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']
que es
Sección 1.2. Variables de arreglo 17
g
1
a
e
i
a
r
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;
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 'equidna'
b 'tapir'
e 'albatross'
d 'petrel'
debemos escribir
a 'equidna
b 'tapir
b 'albatross'
d 'petrel
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
(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
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
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á
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
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)
produce
Sección 1.4. Funcio~es matemáticas en MATLAB 23
ans
1.0472
ans
o + 1.7627i
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
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
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)
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.
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
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
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
Si sólo desea guardar ciertas variables, escriba sus nombres después de nombre archivo;
por ejemplo, -
save nombre archivo a b c
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
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
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')
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))
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
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!
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.
35
36 Capítulo 2 Gráficas con MATLAB
>-
0.1
-0.1
-0.20 5 8 10
X
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
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:
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,'--')
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
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
X
• 10
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
(véase la figura 2.4). Los ejes de coordenadas y las marcas de escala pueden omitirse con
axis ('off')
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')
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
2
X
• ' 10
Gr6flc:ll polar
'°1
Listado 2.7
t = .1: .1:3;
x = exp (t);
y= exp(t.*sinh(t));
loglog(x,y)
gr id
xlabel ( 'x') ;ylabel ('y')
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
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.
'
i .e
i 1.5
1.4
12
1.1
\ ~ ~ ~ U M M ~ M ~
M, número de Mach
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.
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) ')
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,
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
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)
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')
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
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
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,
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)
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
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.
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');
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
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
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
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
o.
o.
o.
N
-0.
-0.
-O~
2
o
y
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');
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
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í:
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
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í.
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)
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)
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
donde
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
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.
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
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)
10
8
...
4
o
8
4
o 1
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.
I
I
I
,....... y
I ••••, ángulo el
,' ···...
J:
z .. ···
I :
y
I
I
X
Figura 2.23 Posición del ojo en (x, y, z)
y
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
[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
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
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
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).
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
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
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
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.
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
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
X=cx-dy+f
(2.7.1)
Y=dx+cy+g
X¡ = CX¡ - dy¡ +f
f¡ = dx1 + cy¡ + g
(2.7.2)
x=CX-DY+F
(2.7.4)
y=DX+CY+G
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.
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
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
[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
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
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
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
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
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
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
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
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
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
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
larm2=90
larm1=30
Leyenda
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
= sen(x) , 0 ~ x ~ 4 7t
y 1 + cos(x)
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:
(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= 1f70<x~ 1
l -x2
(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.9) Utilce con tour para graficar la función implícitaf(x, y)= O donde
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.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.
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.
[ 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]
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.
A = [~ ~], At = [i ~] (3.1. 7)
(3.1.8)
B = [;] , Bt = [1 7]
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,;]
Ejemplo 3.1
[! 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:
[!=~
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
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)
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
(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)
= [ 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)
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•
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 = 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)
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
A = [1 6] B = [-0.0714 0.2143 ]
5 2 ' 0.1786 -0.0357
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)
entonces,
B inv(A)
produce
Sección 3.4. Ecuaciones lineales 103
B =
-0.0714 0.2143
0.1786 -0.0357
A*B
ans
1.0000 0.0000
0.0000 1.0000
B*A
ans
1.0000 o.o
0.0000 1.0000
(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)
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)
Casol:m=n
Caso 2: m<n (ecuación subdeterminada)
Caso 3: m>n (ecuación sobredeterminada)
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
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.
3ohms
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)
L: Íaj =O (B)
j=b,c,..k
( .
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,
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
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
( - 1, 1; - 2, 2) \ [1;2]
La respuesta de MA TLAB es
(-1, 1)\(1)
ans =
-1
o
Caso (B): El comando de MA TLAB es
y la respuesta es
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
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,
(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)
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.
~(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
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)
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)
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:
X¡= 14.7403
y¡ =0.23942
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.
B '
(3.7.3)
cond(A)
3
Esto no es posible con MATLAB.
116 Capítulo 3 Álgebra lineal
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
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
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
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í:
donde
a';,j = a;,j-(a;, 1la1 ,1)a1 ,j
y'¡= y; - (a;,1/a1,1)y1
(11 - J) (11 - J)
Q11.11 X11=y11
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
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
(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
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
:!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)
Ux=z (3.10.3)
Lz= y (3.10.4)
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
FA= U (3.10.5)
~ -3 ·
~3] [~o o~ ~]1 (3.10.6)
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
FA=U (3.10.5)
1
3 -3] [o1 o
2
-3
' 1
o o
º]o
1
(3.10.6)
-3
0.5l[
1.5714
' 1
0.5
~ ~1
- 1.4286 0.1428
l (3.10.7)
(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)
[l,u,p) = lu(A)
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)
PAx=Py (3.10.11)
• luego
LUx=Py (3.10.12)
. 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
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
x(t)
t
= (y·- ~
t L..,¡ ai·,J·x(t-I))
J
/a i,i
·· (3.11.4)
j =l,#i
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
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
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)
e= poly(A)
emos calcular de fonna más directa los valores propios de la matriz A con
eig(A)
Ejemplo 3.14
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)
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
m1
··I y1 (desplazamiento)
m2
. . T y2(desplazamiento)
Solución
Para las oscilaciones armónicas, la solución puede escribirse como
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
[
(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
(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
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
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
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
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
donde n es el orden del polinomio y los e¡ son coeficientes. El polinomio puede expresarse
también en la forma agrupada
o en la forma factorizada
142
Sección 4.1. Comandos de MATLAB para polinomios 143
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.
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
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
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
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
= onces
a polyfit(x,y,length(x) - 1)
uce
a =
-0.2015 1.4385 - 2 . 7477 5.4370
Y= f Ydx =
e¡
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
~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)
Ya = Yq)'h + Yr
[q,r] = deconv[a,b]
donde q y r representan los coeficientes de yq y de Yr, respectivamente.
b-x... x-a
g(x) = b-af(a) + b- af(b) (4.2.1)
=f(x)
y=g(x)
f(b)
X=8 X=b X
Figura 4.1 Interpolación lineal
2
Véase Nakamura, Applied Numerical Methods in C, Prentice-Hall, 1992.
148 Capítulo 4 Polinomios e interpolación
yi = interpl(x, y, xi)
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
T Beta Alfa
300 3.33e3 0.2128e4
400 2.50e3 0.3605e4
500 2.00e3 0.5324e4
600 1.67e3 0.7190e4
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
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
;
y1
Función y(x)
y Interpolación cúbica
y• y(x)
x2
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í:
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
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
c¡(0)2 + c2(0) + c3 = 1
c1(l)2 + c2(l) + c3 =0.75
c1(2) 2 + c2(2) + c3 =O
g(x) = -0.25.x2 + 1
Ejemplo 4.4
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
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
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.
Xl X2 Xn+l
Yl Y2 Yn+l
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
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)
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
Ejemplo 4.5
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
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)
yi
4.1457 4.3007
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
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
X¡ =a ~ ~~ b = Xn+ ¡ (4.5.2)
0.8
sen(x)
1
8 0.6
...
X
)(0.4
"¡)
.
..!.. 0.2
)(
eI>
el)
porque~ depende dex pero se desconoce. Sin embargo, de la ecuación 4.5.1 podemos deducir
que
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.
><
:r .~g
-0.005 -0.005
-0.010 -0.010
2 3 4 0.5 1.5 2
X X
.:r
)(
~
.:r
)(
~
o
-0.005 -0.005
-0.010 -0.010
2 3 4 2 3 4
X X
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¡
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
5 5
.... ....
g o
g
Q) Q)
~
o o~
-5 -5
-10 -10
o 2 3 4 o 2 3 4
X X
5
olt)
N
1::
g -
Q)
";!.
-5 -5
-10~-~--~--~-~ -10
o 2 3 4 o 2 3 4
X X
'....! 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= [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
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
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.
To(x) =1
T1(x)=x-l
T2(X) = 2x2 - 1
3
TJ(x) = 4x - 3x
-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
>-o >-o
-1 -1
-1 o -1 o
X X
-1 -1
-1 o -1 o -1 o
X X X
o
8.105119796664000e-Ol
1.446744735887175e+OO
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
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
2 3 4 5
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
5 5
... ...
g o
eQj o
Q)
:.!!
o :.!!
o
-5 -5
-10 -10
o 2 3 4 o 2 3 4
X X
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
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
3~~~~~~~~~~~~~
P1(x) = x
P2(x) -!<3 2 - 1)
=
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
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í:
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
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
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
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:
(B)
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.
(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
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
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
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)
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]
Y¡
E o F
(x,y)
X¡
Figura 4.16 Interpolación bilineal
en un dominio bidimensional
<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·
~ .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)
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¡
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
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
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.
Solución
La tabla llenada con la interpolación transfinita se presenta en la tabla 4.2.
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]
• _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
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
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
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
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.
- 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:
(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 :
(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
k Xk f(x1.)
1 o 1.21
2 0.5 1.32
3 2.0 1.05
4 2.5 0.97
(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:
J+x
y=---~
1+2x + 3x2
(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
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
0111,11 = f _: Pm(x)Pn(x)dx
é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)
/¡ = f(a)
Ji= f(b)
185
184 Capítulo 4 Polinomios e interpolaciór-
Gm,n = f _: Pm(x)Pn(x)dx
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)
de
f¡ =f(a)
Ji= f(b)
185
186 Capítulo S Integración numérica
con
h=b-a (5.1.4)
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
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
(5.1.8)
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
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
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
du 2
2000 u cú = -8.lu - 1200 (A)
Solución
Reescribimos la ecuación (A) así:
2000 udu = cú
-8. lu 2 - 1200
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
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
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).
-- = (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
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.
1
=f(x)
,,
f2
(5.2.4)
donde
f¡=f(a+(i-l)h) (5.2.5)
con
h=(b-a)/n (5.2.6)
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
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''
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)
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)
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
t= ¡ R R2- z2
-0.9R b2J2g(z + R)
dz
:::: ción 5.3. Otras cuadraturas 195
El resultado es:
0 . 5145 horas
I = ¡ª
b
f(x)dx ~ h
n+I
L
i=I
wdi (5.3.2)
n+I
V¡(X) = Il (X-X¡) (5.3.4
j=l,f~i (X¡-Xj)
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-'
..- 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
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
=E
n+I (n
a¡ k ....
+ on+2-k - 1
______.____ (5.3.12)
k=I ' n + 2-k
I = Newt_itg('nombre_f', a, b, n)
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
- -1 -0.5 o 0.5
X
Figura 5.4 Polinomio de Legendre
de orden 7 y sus raíces
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)
n
b-a ~
I,,. - - ¿,,,¿ y¡f(z¡) (5.3.19)
2 i=l
200 Capítulo 5 Integración numérica
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)
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).
-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
Ejemplo 5.5
Evalúe
·I =
1
r;;;
¡10 exp( -x 2 )dx
y7r -10
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)
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
I = ¡ 00
-oo
dx
J(x(z)) dz dz (5.4.9)
z = tanh- 1 (2x-
b-a
b) ª- (5.4.11
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.
(3) Grafique el integrando f(x) en las coordenadas x-y con los puntos de datos
empleados en la integración numérica.
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
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)
. = exp(-x¡ 2) 1
g1 (E)
..¡ 1 - xr
2
2cosh (z¡)
1 + tanh(z¡)
x¡= 2 (F)
(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
·• •
'ii
e
CD
'
o
~ :; ~
.
~
~ ~ ~ ~ ~ ~ u ~ ~
\ ~ ~ ~ ~ ~ ~ u ~ ~
X
Figura S.7 Integrando y puntos de datos
a Jo largo del eje x
0.1
0.1
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)
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
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
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
(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
J = ¡b J1 + (g'(x)) 2dx (.
Solución
Puesto que g(x) = 2 IX, su derivada es g'(x) = llfX. La integral se convierte en
(B)
n 1
10 3.600710
20 3.595706
30 3.595706
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.
b ld(x)
I =
1
a c(x)
J(x, y)dy dx (5.6.1)
210 Capítulo 5 Integración numérica
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
o y=c(x)
X=B X=b
2 3 4
X
G(x) = ¡ d(x)
c(x)
J(x, y) dy (5.6.2
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)
Ejemplo 5.8
I = ¡ (ld(x)
a
b
c(x)
sin(x + y)dy) dx (A)
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
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
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
¡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
lo
0.6931
sin(2 +y) dy ~ -2.1086
4.8221
!
1.0986
sin(3 +y) dy ~ -0.67454
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)
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
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
donde
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
10
6
1 1j) (1, )
(1 ,1) (i,1)
xi
Las derivadas parciales de x en los puntos de retícula se evalúan mediante las siguientes
aproximaciones de diferencia:
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);
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
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
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}
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
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
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
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
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
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.
10.s /(x) dx
(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
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
{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
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
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
l=f f 1
2
0
2-0.5x
./x + ydydx
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-
Diferenciación numérica
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.:
2
x2 + ~3
3
! x + ... + ~
n! x11 (6. 1..:
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)
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
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
X X X
~-----
-h o h ·h o h -h o h
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:
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
Solución
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)
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)
Jo
I ,,.Ji -f--1 (C)
2h
(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)
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
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
í .' =
)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
(6.3.5)
donde
E .. _ft I'.''
2J1
/'. /'.
Ji+l -Ji-1 - - 2hif,'i + 31 h3Ji1"" + .. . (6.3.6)
"'=fi+1-fi-1 +E (6.3.8)
Ji 2h
de
E"" - h2 I'."'
6 Ji
/;' 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 )
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:
donde
E ... h2 í!"
3 J•
f; +I +f¡i- 1 =:Ji+
2>r. h2p1 h4 /""" + .. .
Ji +12+Ji
. de forma equivalente,
(6.3.14)
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á
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
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:
Segunda derivada
(d) Aproximaciones de diferencia hacia adelante:
Tercera derivada
(g) Aproximaciones de diferencia hacia adelante:
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
X x_1 XQ x1 x2 x3
-2
- ._ n
v;(x) -
(x-x¡)
( .
·-
·)' for z - a, ~' ... , A. (6.4.2)
1-a, p, ..., l.. X1 - X1
j" I
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
(6.4.5)
I"' - ªº'fe
Jo-¡:¡o
2 3
+ a2[fc + 2h·'' + 4h ,,, + 8h ,,,, + ] +E
h O ':JO 2 JO 6 JO •••
+ /ó' [O + a 1 + 4a2] ~
~
2
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,
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¡
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
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
respectivamente.
¡(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
N
¿ f (reine. + zo) (6.6.4)
ei(k+ l)n6.
n=I
Figura LC-2
Fractal
Figura LC-3 Figura LC-4
Mohius Trilogy por Ralph Williams Closet Loop Dr{fter por Ralph Williams
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
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
h2 h3 hn
tan(x) =tan (a)+ htan' (a)+ 2 tan" (a)+ 6 tan"'(a) + ... n! tan(n) (a)+ ...
x2 x3 xk (k)
gk (x) = tan(a) + xtan'(a) + 2 tan" (a)+ 6 tan"' (a)+ ... k! tan (a)
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
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
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
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;
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
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
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
(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:
2
ff' "'o.(fi+I - 2/¡ +.fi-1)/h2 + (1 - o.) ([;+2- 4fi +.fi-2)/(2h)
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:
(6.18) Dos aproximaciones de diferencia para la cuarta derivada están dados 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
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.
f(x) =O (7.1.1)
donde
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
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:
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)
Detennine valores aproximados de las tres raíces positivas más bajas utilizando el
método gráfico.
Solución
Primero escribimos
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
20
15
10
~ 5
j o
E
§
... ·5
11
·10
·15
-200 5 10 15 20
X
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.
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
log[~)
n ~ log(2) (7.2.3)
Ejemplo 7.2
y=./x2 +1
y= tan(x), O< x < 7t/2
Solución
El problema equivale a encontrar el cero de
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
Iteración de Newton
=10
Solución final
10
--10
"
;;:-
-20
-30
1=11
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)
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
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.
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
donde
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);
Iteración de Newton
12000
10000
8000
8000
~
<l-000
Solución final
2000
j
o
·2000
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.
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
Solución
La tarea consiste en encontrar la raíz de
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
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
X= g(x) (7.5.1)
Xn = g(Xn-1) (7.5.2)
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)
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
>- 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
X = - ..¡ 3x - ¿ +2 (D)
y
Sección 7.5. Método de sustituciones sucesivas 269
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 .
o. lo que es lo mismo,
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
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
l ={(
!' .. f( 4 3
) = 0.40299 (C)
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:
Ejemplo 7.8
(A)
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
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
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 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)
(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)
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
Ejemplo 7.9
f¡(x,y) = fi(x,y) =O
donde
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
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
¿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
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;
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:
(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
[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:
(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
(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
(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)
3 Véase Fox y McDonald, J11troductio11 to Fluid Mechanics, 4a. ed., John Wiley, 1992.
"roblemas 283
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
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.
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
284
Sección 8.1. Ajuste de líneas rectas 285
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
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
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
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
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)
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)
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¡
4.844] (A)
[ 7.54
La solución es
CJ = 1. 7645, C2 = 0.2862
2 y: 1.7648x + 0.2862
1.5
>
X
0.5
El resultado es:
e =
1.7646 0.2862
(8.2.1)
Sección 8.2. Ajuste de curvas no lineales con una función de potencia 289
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
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
a = CJ = 0.2093
13 = exp(c2) = exp(l.8588) = 6.4160
Por último, la forma de potencias es
->- 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
. 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
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
(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)
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
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
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=
Ejemplo 8.4
Determine los coeficientes de la función
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
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
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
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
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
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
299
300 Capítulo 9 Funciones de splines e interpolación no lineal
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.1 fi+l
f'.1 f'¡+l
<----- h¡ ----->
1
--
S¡_¡ S·1 Si+! Si+2
t=O t = h¡
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;" = 2c (9.1.5)
f;'.; 1 =2c + 6eh; (9.1.6)
e= f;"/2 (9.1. 7)
r" f;"
e=1;+1-; (9.1.8)
6h;
(9.1.9)
Para el intervalo adyacente de s;-1 < s < s;, la ecuación 9 .1 .12 se convierte en
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)
(
(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
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)
(9.1.17)
(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.
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
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
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
clg
plot(xp,yp); hold on
plot(xx,yy, 'o') ;xlabel('x'); ylabel('y');
hold off
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
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:
(9.2.2)
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
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
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
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
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
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
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)
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)
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
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í:
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í:
0.9
0.8
0.7
0.6
>-0.5
0.4
0.3
0.2
0.1
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
donde
¡
d .=0 5 1 +
u, ·
tan~ f> ( ~ -
tanh(f>/2)
o.s)J]
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
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
Ejemplo 9.6
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
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
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
(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
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
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
Solución
Si denotamos la densidad de número atómico a los t s por N(t), N(t + dt) será
~~ = -AN(t) (B)
N(O) =No
mente; sin embargo, a menudo utilizaremos ecuaciones de este tipo para investigar la
exactitud de los métodos numéricos.
Ejemplo 10.2
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í:
o, lo que es lo mismo,
con
f(v,t) =- s~b Mv2 + g (D)
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
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
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)
(B)
La ecuación anterior es una EDO de primer orden y su condición inicial es 1(0) =O.
así:
Y11+I =y,,+ ~f(y,,,t,,) (10.2.2)
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
50
40
10 12 14 18 18 20
tiempo {s)
Ejemplo 10.5
(a) Resuelva
donde
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
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
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
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
Solución
(a) El esquema de Euler modificado se escribe así:
(k) -
Y11+1-y11+ (h/2)[- (y,(k-1))1.5
n+I - (y /1 )1.5 + 2] (C)
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 '
'
6 ''
'
y
4
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
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.
o, lo que es Jo mismo,
1 + lah
2
Yn+I = l -lahYn
2
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:
v=u'
donde
f¡(u, V, t) =V
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))
(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)
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
(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.
u(O)=O ¡ M=10 kg
Solución
La ecuación (A) puede escribirse así:
u' = v, u(O) = O
(B)
v' = -alvlv - cu, v (O) = 1
t = 0.1,
u2 =u¡+ hv1
= 0.05 + (0.05)(0.75) = 0.0875
Sección 10.2. Métodos de Euler 339
o.e
o.e
0.4
>
>. 0.2
>-
V, desplyamiento
V, velocidad
-0.2
-0.4
3
tiempo (s)
donde
y=
[;]
f = [-ay~ v +e]
El método de Euler hacia adelante para la ecuación anterior se escribe así:
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
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.
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í:
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
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
donde
"
,' ' '
, ''
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 )')
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
(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í:
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
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
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
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
0.5,---~---===~-~---,
0.4
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:
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
(10.3.6)
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
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:
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
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
u(O)=O M=0.5 kg
u(t)
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
(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
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
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))
Ejemplo 10.12
dV
m-;¡¡ = eV x B + eE (A)
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..
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
Jin+I/2=Yn+1f(y11,f11) (10.3.17)
Yn+I = Yn + h¡(yn,fn)
o bien
Yn+I = Yn + hf(Yn+J/2,ln+I/2)
1
k2 = hf(y11 + 2k1,t11+112)
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
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
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 )
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)
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
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
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)
y'= f(y,t)
donde
y= [ ~]
f = [;]
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)
y'=My+S
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:
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
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
Ejemplo 10.15
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
91 93
y1 y2 y3
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
donde
y¡
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
. 1~-~--~--~-~--~-~
o 5 10. 15 20 25 30
tiempo (s}
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
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
- 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
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
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 )
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
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
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
(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:
(10.3.37)
372 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias
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
Solución
Para el método de Runge-Kutta de cuarto orden, el error local se expresa mediante
Eh =Bh 5 (A)
(B)
Si sustiuimos esto en la ecuación (A), el error local para cualquier h se expresará así:
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:
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)
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
400
n para y2(0)-2814
300
' 200
~ 100
,.. o
0.02 0.04 0.06 0.06 0.1 0.12 0.14 0.16 0.18 0.2
X (a)
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
T(x, O)= To
y condiciones en Ja frontera
T¡ (t) = T (x¡, t)
Podemos escribir una aproximación de semidiferencia para la ecuación 10.5.l así:
T'=MT+S (10.5.3)
donde
T¡
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
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
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.
Solución exacta:
380 Capítulo 1O Problemas de valor inicial de ecuaciones diferenciales ordinarias
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.
Solución exacta:
(10.4) Resuelva las siguientes ecuaciones para O < t < 5 utilizando el método de Euler modificado:
(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= 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 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:
(10.12) Calcule y (2) para la siguiente ecuación utilizando el método de Runge-Kutta de segundo
orden con h = 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
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
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.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
~ = 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
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:
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)
F(t) = 2Fot, O ~ t ~ 1 s
= 2Fo( 1 - t), 1 ~ t ~ 2s
=O, t > 2 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:
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
388
Sección 11.1. Introducción 389
Perímetro P
~- --+- H -·
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
donde
Z(x) = -p(x)dPJ;x)
390 Capítulo 11 Problemas de valor en la frontera de ecuaciones diferenciales ordinaria_
donde <j>; = <j>(x;) y S; = S(x;) y q se supone constante. Si multiplicamos la ecuación 11.2.3 por
h2 obtenemos
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
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
(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)
1 + w/2 - 1
-1 2+w -1
-1 2+ w -1
-1 2+w
(11.2.9)
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.
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)
•
X=O
•
h
• •3h •
2h
• • • •H
i=1 2 3 4 N-1 N
_(<!>2-<!>1)/h+gi-/L<l>1 +""- =S
h/2 o't'I 1
o, lo que es lo mismo,
(11.2.13)
(11.2.14)
Ejemplo 11.1
y (O)= 0.1
y'(IO) = - y(lO)
Suponga que la retícula tiene espaciado unitario.
• L
9 x•lO
9 10
Solución
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
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
1 '¡ )
} t - /,
.~
396 Capítulo 11 Problemas de valor en la frontera de ecuaciones diferenciales ordinarias
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)
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;
Ejemplo 11.2
P=P;. 1 P=P;
Q=Q¡.1 Q=Q¡
S = S;._, S = S;
h1·1 __.....__ h¡
i-1 a b i+1
Solución
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)
(11.4.17)
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:
B¡~-A¡-C¡
(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.
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 )
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,
1
VR=2[(r¡+ 2)
h· 2
-r¡]=
2
2(r¡+ h·4)
h·
(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
donde
<j>(O) = <j>(H) =O
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:
(11.6.4)
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
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
Ejemplo 11.4
Solución
La ecuación (A) puede reducirse a un problema de valor en la frontera de segundo
orden definiendo
o, lo que es equivalente,
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
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 = Pa P=~
q = qa q = Clti
s = 1. S=O
1 1
i=1 2 3 4 5
X=O H/2 H
cj>'(O) = cj>(H) =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
T(O) = IOOºC
2
A(x) = (0.005)(0.05)- 0.25x)m
P(x) = A(x)/0.005+O.O1 m
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
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
(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
Vista superior
(11.11) El cuerpo esférico de un material de radio 0.05 m se calienta con una fuente de calor
distribuida por
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
(a) Escriba las ecuaciones de diferencia para la temperatura utilizando cuatro intervalos de
retícula equiespaciadqs.
;,:
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
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
413
414 Colores
------------------------------------------
Í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
o 0.8
<{
o
üi 1
¡¡¡ 06 1
1-
~
0.4
0.2
o
10 20 30 40 50 60
ÍNDICE DE COLOR
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
1.5
0.5
-0.5
·1
·1.5
o
\-1.-5-~----\o-.5----,;-o--~-0--.5-----.;-·-:--1----;,·1.5
·1
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
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;
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.
3.5
3
2.5
2
1.5
0.5
o
-0.5
-2
-1
o
2
-2
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" ')
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
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
Lado de la tobera
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.
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)
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
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]
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.
pcolor(W)
pcolor(x,y,W)
h=pcolor(W)
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);
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
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,
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
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)
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
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)
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
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
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.
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
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
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
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
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
El lector podría combinar los dos guiones anteriores en uno solo como ejercicio.
446 Interfaz gráfica con el usuario
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:
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])
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
(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
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
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)
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
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
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
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), ...
'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 ).
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
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
ú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).
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.
GuiDm_lS.m
% GuiDrn 15 Empleo de subplot con axes.
close, hl=figure (.ll, clf
461
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:
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
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:
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
'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
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).
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
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
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))
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)
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
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