Вы находитесь на странице: 1из 126

DEPARTAMENT DE MATEMÀTIQUES

UNIVERSITAT JAUME I

FUNDAMENTOS
MATEMÁTICOS
DE LA INGENIERÍA

Prácticas de Laboratorio con Mathematica

Cristina Chiralt
Fernando Casas
Jorge Galindo
Sergio Macario
Manuel Sanchis
Prefacio
El presente manual está destinado a la realización de las prácticas de laboratorio
correspondientes a las asignaturas de Fundamentos Matemáticos de la Ingenierı́a I
y II de la Ingenierı́a Industrial en la Universitat Jaume I. Cada una de ellas tiene
asignado 1 crédito (equivalente a 10 horas lectivas) dedicado a la realización de
prácticas con el ordenador. Esas 10 horas se reparten en cuatro sesiones de 2.5 horas
cada una, a razón de dos sesiones en cada cuatrimestre. Las prácticas se desarrollan
utilizando el programa Mathematica, y el objetivo de las mismas es doble. Por una
parte, se trata de afianzar e ilustrar la materia impartida en el aula (clases de
teorı́a y de problemas) y por otra de cubrir aquellos aspectos del programa que
difı́cilmente pueden desarrollarse durante dichas clases, como es todo lo relativo al
cálculo numérico. En este sentido, se ha considerado importante dedicar una sesión
entera a los aspectos gráficos que el programa Mathematica ofrece.
El manual se ha dividido en ocho capı́tulos o prácticas, cada uno de los cuales
corresponde aproximadamente al material impartido en cada sesión de 2.5 horas.
Como complemento, se ha incluido un apéndice con material relativo a ecuaciones
diferenciales no lineales, haciendo especial hincapié en los aspectos cualitativos de la
teorı́a. Este capı́tulo adicional se incluye por completitud y también porque puede
darse el caso de que la primera práctica (una introducción genérica a Mathematica)
pueda reducirse al mı́nimo si los estudiantes ya disponen de conocimientos previos
sobre el programa.
Cada práctica dispone de una pequeña introducción teórica, siendo ésta más
amplia cuando el material tratado en la misma no se ha impartido previamente
en el aula de teorı́a. Esto es especialmente relevante en el caso de la práctica 4
(interpolación y aproximación de funciones) y la práctica 5 (integración numérica).
Se ha intentado que el desarrollo de cada práctica esté suficientemente detallado
en los cálculos y pasos intermedios, puesto que el objetivo es que el estudiante en-
tienda cabalmente todo el proceso, ası́ como representar gráficamente los resultados,
para que la asimilación de los conceptos sea más sencilla.
Esperamos que este manual sea una herramienta útil para nuestros estudiantes
en su proceso de aprendizaje de los Fundamentos Matemáticos de la Ingenierı́a.

Los autores
Índice general

1. Introducción a Mathematica 1
1.1. Convenios sobre notación . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. El Front End y el Núcleo . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3. Notación matemática de Mathematica . . . . . . . . . . . . . . . . . 3
1.4. Corchetes, paréntesis y llaves . . . . . . . . . . . . . . . . . . . . . . 6
1.5. Funciones incorporadas . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.6. Definiendo funciones no incorporadas . . . . . . . . . . . . . . . . . . 8
1.7. Listas y matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.8. Resolución de ecuaciones . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.9. Reglas de sustitución . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.10. Ayudas incorporadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.11. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2. Álgebra Lineal 16
2.1. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.1. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2. Cónicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3. Gráficas en dos y tres dimensiones 28


3.1. Gráficas en dos dimensiones . . . . . . . . . . . . . . . . . . . . . . . 28
3.1.1. Gráficas en coordenadas cartesianas . . . . . . . . . . . . . . 28
3.1.2. Gráficas en coordenadas polares . . . . . . . . . . . . . . . . 32
3.1.3. Gráficas de funciones implı́citas . . . . . . . . . . . . . . . . . 33
3.2. Gráficas en tres dimensiones . . . . . . . . . . . . . . . . . . . . . . . 35
3.2.1. Gráficas 3D en coordenadas cartesianas . . . . . . . . . . . . 35
3.3. Animación de gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.4. Gráficas bidimensionales en coordenadas paramétricas . . . . . . . . 38

4. Interpolación y aproximación de funciones 42


4.1. Polinomio interpolador de Lagrange . . . . . . . . . . . . . . . . . . 42
4.2. Polinomio interpolador de Newton . . . . . . . . . . . . . . . . . . . 44
4.3. Cota de error en la interpolación . . . . . . . . . . . . . . . . . . . . 45
4.3.1. El efecto Runge . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.4. Interpolación con un splin cúbico . . . . . . . . . . . . . . . . . . . . 46
4.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

i
Fundamentos Matemáticos de la Ingenierı́a II ii

5. Integración numérica 50
5.1. Reglas de cuadratura . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.2. Obtención de reglas de cuadratura . . . . . . . . . . . . . . . . . . . 52
5.2.1. El método interpolatorio . . . . . . . . . . . . . . . . . . . . . 52
5.2.2. El método de coeficientes indeterminados . . . . . . . . . . . 53
5.3. Error de cuadratura . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.4. Reglas compuestas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.4.1. Errores en las reglas compuestas . . . . . . . . . . . . . . . . 55
5.5. Algoritmo de los métodos en Mathematica . . . . . . . . . . . . . . . 56
5.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

6. Sucesiones y series 60
6.1. Sucesiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.2. Series de números reales . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.3. Series de Taylor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

7. Ecuaciones diferenciales con Mathematica 74


7.1. Tratamiento analı́tico . . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.1.1. Ecuaciones diferenciales de primer orden . . . . . . . . . . . . 74
7.1.2. Ecuaciones diferenciales lineales de segundo orden . . . . . . 79
7.1.3. Sistemas de ecuaciones diferenciales . . . . . . . . . . . . . . 82
7.2. Métodos numéricos para la resolución de ecuaciones diferenciales . . 86
7.2.1. Resolución numérica con Mathematica . . . . . . . . . . . . . 88
7.2.2. Algoritmo de los métodos numéricos en Mathematica . . . . . 89
7.2.3. Sistemas de ecuaciones diferenciales . . . . . . . . . . . . . . 91
7.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

8. Derivadas parciales. Extremos en funciones de varias variables 95


8.1. Derivadas parciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
8.2. Extremos libres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
8.3. Extremos condicionados. Multiplicadores de Lagrange . . . . . . . . 100

A. Sistemas de ecuaciones diferenciales no lineales 101


A.1. Estudio geométrico: campos de direcciones . . . . . . . . . . . . . . . 102
A.2. Estudio cualitativo. Retrato de fases . . . . . . . . . . . . . . . . . . 105
A.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Práctica 1

Introducción a Mathematica

Mathematica es un sistema general de software usado para llevar a cabo cálculos


técnicos en ciencia, ingenierı́a, matemáticas y áreas computacionales. La primera
versión fue anunciada en 1988, y la más reciente hasta la fecha (la versión 7) fue lan-
zada el 18 de noviembre de 2008, encontrándose disponible para una gran variedad
de sistemas operativos. Aunque se considera comúnmente como un sistema de álge-
bra computacional, Mathematica es también un poderoso lenguaje de programación
de propósito general.
El lenguaje de programación de Mathematica está basado en re-escritura de
términos (que se identifica también como computación simbólica), y soporta el uso
de programación funcional y de procedimientos (aunque en general, la programa-
ción funcional es más eficiente). Está implementado en una variante del lenguaje de
programación C orientado a objetos, pero el grueso del extenso código de librerı́as
está en realidad escrito en el lenguaje Mathematica, que puede ser usado para ex-
tender el sistema algebraico. Usualmente, también es posible añadir nuevo código
en forma de paquetes de Mathematica.
Mathematica es un lenguaje interpretado, es decir, lee expresiones, evalúa el
resultado y luego lo muestra en pantalla. Al ser interactivo, es más fácil de usar que
los lenguajes compilados como C o FORTRAN.
Mathematica dispone de una gran cantidad de funciones ya definidas (funciones
incorporadas) con las que se pueden cubrir los aspectos más generales de las inge-
nierı́as. Además, como hemos comentado, Mathematica es programable; cualquier
función no disponible la puede escribir uno mismo.

1.1. Convenios sobre notación


Para introducirnos en el lenguaje de Mathematica, en cada práctica veremos
algunos ejemplos que muestran las posibilidades de este programa. Para comenzar
con Mathematica es conveniente probar con los ejemplos propuestos.
Las expresiones escritas en letra mecanografiada corresponden al input y se
deben escribir tal y como aparecen en los ejemplos; las correspondientes al output
no se tienen que escribir: es la respuesta de Mathematica. Las palabras y sı́mbolos
escritos en cursiva se deben reemplazar por expresiones introducidas por el usuario.

1
En el siguiente ejemplo la expresión 2 + 2 corresponde al input, y por tanto se
debe escribir tal y como aparece, mientras que la expresión 4 (de color más claro)
corresponde al output, y no se debe escribir en pantalla.
2+2

En este otro ejemplo la expresión ?+ corresponde al input y la respuesta de Mat-


hematica no va precedida por Out[n] , puesto que es información y no un resultado
propiamente dicho.
?+

x + y + z represents a sum of terms. ‡

En el apartado 1.10 se explicará el significado del sı́mbolo ?


Hay que poner atención en la diferencia entre mayúsculas y minúsculas, el tipo
de paréntesis o llaves, la cantidad de espacios y la puntuación (comas, puntos y
comas).

Mathematica diferencia entre mayúsculas y minúsculas y, por tanto, Sin[x]


es distinto de sin[x].

Los nombres de todas las funciones incorporadas empiezan con mayúscula y


tienen sus argumentos (variables) entre corchetes.

Cada tipo de paréntesis tiene su propio significado.

No se deben poner espacios en los nombres de las funciones y sı́ entre dos
variables que deben ser multiplicadas. En los demás casos, los espacios no se
tienen en cuenta.

Al igual que con los tipos de paréntesis, cada signo de puntuación tiene también
su propio significado.

1.2. El Front End y el Núcleo


Mathematica consta de dos partes: el Kernel (núcleo) y el Front End (fachada).
El Kernel realiza los cálculos y el Front End interacciona con el usuario. El Kernel
trabaja de la misma forma sobre todo tipo de ordenadores que dispongan de la misma
versión de Mathematica. El Front End, en cambio, es especı́fico de cada ordenador.
El Kernel es un programa C muy extenso que lee los inputs y devuelve los outputs
por medio de dos procesos: llama al código C para hacer los cálculos y usa reglas de
reescritura para dar los resultados en pantalla, cuando proceda.
Sobre muchos ordenadores, el Front End para Mathematica dispone de documen-
tos interactivos sofisticados llamados notebooks. Todos ellos presentan esencialmente
la misma apariencia para el usuario. Estos documentos proporcionan facilidades pa-
ra editar texto y para enviar los inputs al Kernel para su evaluación. Además, en

2
ellos se pueden incluir gráficos. Los documentos realizados en un Front End tipo
notebook se pueden imprimir tal y como aparecen en pantalla.
El Front End y el Kernel están separados. El Front End sólo envı́a un cálculo al
Kernel sólo cuando ası́ se le ordena. Tal petición se efectúa mediante la combinación
de teclas Shift-Return (mayúsculas y retorno de carro)o mediante la tecla Intro
del teclado numérico.
No es necesario que el Front End y el Kernel se encuentren instalados en el mismo
ordenador. Por ejemplo, se puede utilizar la manejabilidad de un ordenador personal
para editar los comandos en un Front End tipo notebook, y mandar a realizar los
cálculos a un Kernel instalado en una estación de trabajo (kernel remoto). Por
supuesto, los outputs aparecen en el ordenador personal de la misma forma que si
el cálculo lo hubiese realizado el Kernel instalado en dicho ordenador (kernel local).
Para ello es preciso que los dos ordenadores estén conectados por medio de una red.

1.3. Notación matemática de Mathematica


Mathematica es un programa interactivo. En las versiones de Mathematica que
utilizaremos con Front End tipo Notebook, cuando introducimos una expresión, co-
mo por ejemplo una operación matemática, no ocurre nada. Al ejecutar esta expre-
sión (cosa que en las versiones actuales puede hacerse presionando simultáneamente
Intro+ Mayúsculas o la tecla de Intro del teclado numérico) Mathematica la proce-
sa, inserta In[n]:= después de que Mathematica haya calculado el resultado y, si
corresponde, muestra el resultado, con una etiqueta de la forma Out[n]= . A con-
tinuación Mathematica muestra un nuevo indicador de input, y el ciclo comienza
otra vez. El número comprendido entre corchetes se va incrementando al introducir
nuevas expresiones. En ningún caso hay que introducir los indicadores In[n]:= y
Out[n]= . En la primera expresión a evaluar n = 1 . Es posible referirse a expresiones
ya introducidas o a resultados ya obtenidos gracias a estos indicadores.
Mathematica tiene incorporados la mayorı́a de los sı́mbolos matemáticos con los
que se trabaja habitualmente. Entre ellos están las operaciones básicas: suma (+),
diferencia (-), producto (*), división (/) y potencia (^). Como se ha indicado en el
apartado 1.1, los nombres de todas las funciones incorporadas de Mathematica em-
piezan con mayúscula. Los nombres de las funciones incorporadas correspondientes
a los sı́mbolos anteriores los podemos ver en la siguiente tabla.

Sı́mbolo matemático Función incorporada


+ Plus
- Minus, Subtract
* Times
/ Divide
^ Power

Los sı́mbolos matemáticos y las funciones incorporadas asociadas, evidentemente,


consiguen el mismo resultado; por ejemplo,

3
2+4

Plus@2, 4D

Una primera operación sencilla que podemos efectuar es 237 .


23 ^ 7

3 404 825 447

Para referirnos a este último resultado se utiliza el carácter %. Ası́, %^2 nos de-
volverá 2314 .
%^2

11 592 836 324 538 749 809

Utilización de resultados obtenidos previamente ( %n): Se puede hacer


referencia a un resultado anterior mediante uno o más signos de porcentaje; es
decir, % se refiere al último resultado, % % al penúltimo, y ası́ sucesivamente. También
nos podemos referir a un resultado concreto mediante %n, donde n es el número de
la lı́nea de output.
Conservación y pérdida de datos del Kernel: Mathematica conserva todos
los datos de entrada y salida ası́ como el valor de todas las variables definidas en
algún momento de la sesión. Si se escribe por ejemplo x = 2, en un Notebook, a
partir de ese momento Mathematica identificará x con 2 (y producirá errores si por
ejemplo escribimos Solve[x+1==7,x]). Cuando se cierra el Kernel (lo que ocurre
siempre al salir del programa, pero también se puede hacer sin salir utilizando Quit
Kernel en la pestaña Kernel ), se pierden los valores de las variables y ya no es
posible referirse a los resultados anteriores mediante %n.
Al combinar varios sı́mbolos matemáticos en un mismo input se deben tener en
cuenta los criterios de prioridad habituales entre ellos, que determinan el orden de
evaluación de la expresión.
2 ^ 3 * 6 + H9 - 1L  4

50

2 ^ H3 * 6L + H9 - 1L  4

262 146

2^3 ´ 6 + 9 - 1  4

227
4

En este último ejemplo hemos utilizado las dos formas alternativas de indicar
una multiplicación en Mathematica(mediante ∗ o bien dejando un espacio en blanco
entre ellos1 ).
1
Mathematica 6 añade, entonces, el aspa.

4
En algunas ocasiones puede ser conveniente asignar un nombre a un resultado
para ser utilizado después. Esta asignación permite trabajar con mayor comodidad
que refiriéndonos al resultado mediante el número de la lı́nea de output. La expre-
sión velocidadDeLaLuz = 300000 hace que Mathematica asocie el valor 300000 al
nombre velocidadDeLaLuz (se entiende que las unidades son Km/s en el vacı́o).
velocidadDeLaLuz = 300 000

300 000

Una vez realizada la asignación, podemos referirnos al valor 300000 por su nom-
bre y podemos, incluso, realizar operaciones usando la variable definida.
velocidadDeLaLuz - 269 000

31 000

Una manera más correcta de expresar este resultado con las unidades correspon-
dientes puede ser la siguiente:
velocidadDeLaLuz "Kms" - 269 000 "Kms"

31 000 Kms

Lı́neas y Celdas: Cada vez que llamamos al núcleo para que procese las órdenes
introducidas, Mathematica ejecuta todas las instrucciones agrupadas en la misma
celda (el corchete que se ve en el extremo derecho del Notebook). Para añadir órdenes
dentro de una celda (cuando se tiene un input demasiado largo, o se desea que ejecute
varias órdenes sucesivamente) se puede continuar en sucesivas lı́neas, basta pulsar
Enter para descender una lı́nea sin cambiar de celda. Para cambiar de celda se
utiliza la flecha ↓ del cursor. Hay que poner atención en lo siguiente: si queremos
truncar una lı́nea de input en una operación matemática, por ejemplo una suma,
debemos comenzar una nueva lı́nea después del signo +, o bien, encerrar el input
entre paréntesis.
De esta forma obtenemos el resultado correcto:
7+4+
5
16

De esta otra, Mathematica entiende que hemos introducido dos inputs:


7+4
+5
11

Abrir un paréntesis en la primera lı́nea y cerrarlo en la última es una manera


conveniente para realizar esa operación.
H7 + 4
+ 5L
16

5
1.4. Corchetes, paréntesis y llaves
Hay varias clases de “paréntesis” que se usan en Mathematica; algunos de ellos
los hemos utilizado en los apartados anteriores. Cada clase de “paréntesis” tiene un
significado diferente.
Los paréntesis ( ) se usan para agrupar expresiones tal y como sucede en la nota-
ción matemática. Como se ha señalado en el apartado 1.3, los paréntesis determinan
el orden de prioridad al evaluar una expresión.
1 + 2*3

H1 + 2L * 3

Los corchetes [ ] se usan para especificar los argumentos de una función. En el


apartado 1.10 pedı́amos información acerca de la función Sin; esta función requiere
un único argumento: un número. El concepto de argumento será aclarado en el
apartado 1.5.
Sin@Pi  2D

Sin@ID

ä Sinh@1D

En este último ejemplo I representa el número imaginario −1.
Las llaves se utilizan para definir conjuntos de elementos de forma similar a la
utilizada en la notación matemática para definir un conjunto por extensión. En no-
tación matemática, el conjunto formado por los cinco primeros números naturales
se puede representar por {1, 2, 3, 4, 5}. En el lenguaje de Mathematica estas entida-
des (conjuntos de elementos definidos por extensión) se llaman listas y también se
utilizan para definir vectores y matrices.
Por último, el texto entre (* y *) no se evalúa. Estos paréntesis se utilizan para
hacer comentarios en el notebook.
v = 87, 3, -1< H* Aqui v es un vector *L

87, 3, -1<

1.5. Funciones incorporadas


El Kernel de Mathematica reconoce más de 1100 funciones. Estas funciones se
llaman funciones incorporadas (built-in functions). En los apartados anteriores he-
mos usado algunas de ellas: Sin, Plus, Pi, y otras han aparecido en el output: Sqrt,
I, Sinh. Con el nombre genérico de funciones incorporadas se consideran: funciones,
variables, constantes y opciones. Dentro del primer grupo estarı́an Sin, Plus, Sqrt y
Sinh; por una variable se entiende una función como velocidadDeLaLuz (apartado

6
1.3); dentro de las constantes están las funciones Pi y I; ejemplos de opciones los
daremos más adelante.
Los nombres de las funciones incorporadas consisten en palabras inglesas com-
pletas o abreviaciones matemáticas estándar, de forma que la primera letra de cada
palabra se escribe con mayúscula. Por ejemplo, para utilizar la función arco-seno de-
bemos escribir ArcSin, de modo que si queremos obtener arc sen 1/2, introducimos:
ArcSin@1  2D
Π
6

Las funciones propiamente dichas son el equivalente a las funciones que emplea-
mos en matemáticas, en el sentido de que no tienen por qué tomar siempre un valor
constante. La función trigonométrica sin(x) es una función no constante; la letra x
decimos que es su variable. En la notación de Mathematica la función seno hemos
visto que se representa por Sin, de forma que cuando queremos calcular sin(π/2)
escribimos Sin[Pi/2]. El concepto análogo al concepto matemático de variable en
la terminologı́a de Mathematica es el término argumento.
Evidentemente, no todas las funciones requieren un único argumento. Cuando
una función requiere más de un argumento, estos van separados por comas. Aquı́ cal-
culamos la derivada de x2 :
D@x ^ 2, xD

2x

Hay funciones que no requieren ningún argumento. La función TimeUsed da el


número total de segundos de tiempo de CPU usados hasta ese momento en la sesión
de Mathematica. Hay que tener en cuenta que el resultado puede variar dependiendo
en qué máquina se esté usando Mathematica.
TimeUsed@D

0.23

Si una función es invocada con más, o menos, argumentos de los requeridos


Mathematica devuelve un mensaje de error y como output la expresión sin evaluar.
Sin@2, 3D

Sin::argx : Sin called with 2 arguments; 1 argument is expected. ‡


Sin@2, 3D

Otras funciones, en cambio, pueden tener un número variable de argumentos.


Plus@2, 5, -3, 7D

11

Existen funciones que pueden tomar un número de argumentos opcionales. Por


ejemplo, la función Expand requiere un único argumento: una expresión.
Expand@Hx ^ 2 + x + 1L ^ 2D

1 + 2 x + 3 x2 + 2 x3 + x4

7
En cambio la siguiente expresión no puede expandirla:
Expand@Sin@2 xDD

Sin@2 xD

Esta función admite un argumento opcional, Trig -> True, que permite tratar
las funciones trigonométricas como funciones racionales de exponenciales, y expan-
dirlas de acuerdo con esto.
Expand@Sin@2 xD, Trig ® TrueD

2 Cos@xD Sin@xD

La función incorporada Trig es un ejemplo de función de las catalogadas como


opciones.
Las funciones de Mathematica tienen también una series de propiedades, al igual
que sucede con las funciones matemáticas. Estas propiedades se denominan atribu-
tos. Al pedir información adicional respecto a la función Sin, además de obtener
información acerca de para qué sirve esta función, Mathematica indica qué propie-
dades posee esa función. Se puede saber qué atributos tiene una función a partir de
la función Attributes.
Attributes@SinD

8Listable, NumericFunction, Protected<

Una función con el atributo Listable aplica la función a cada elemento de una
lista.
Sin@80, Pi  6, Pi  4, Pi  3, Pi  2<D

:0,
1 1 3
, , , 1>
2 2 2

El atributo Protected previene que sea modificada esa función.


Sin = 1

Set::wrsym : Symbol Sin is Protected. ‡


1

1.6. Definiendo funciones no incorporadas


Como se ha indicado en la introducción, Mathematica es programable y, por
tanto, podemos añadir funciones a Mathematica. Un ejemplo muy sencillo es definir
una función que eleve al cuadrado su argumento.
f@x_D = x ^ 2;

El carácter _ (referido como blanco) en la parte de la izquierda es muy impor-


tante. No hay que poner un blanco en la parte de la derecha de la definición.
Ahora, basta substituir la variable por un valor para obtener el resultado

8
f@2D

Una función puede tener más de un argumento. Aquı́ definimos la función g(x, y) =
xy y la evaluamos en (2, 3):
g@x_, y_D = x y;

g@2, 3D

Definición aplazada de funciones: En ocasiones deseamos definir una función


o asignar un valor a una variable, pero no deseamos que la definición se procese de
inmediato, sino cuando vaya a ser usada. En este caso el signo igual (=) debe ir
precedido por dos puntos (:=). Veamos por ejemplo la diferencia entre la definición
inmediata y aplazada de una función como f (x) = x2 , cuando previamente hemos
definido x = 4. Con definición inmediata:
x = 8;
f@x_D = x ^ 2;
f@5D
64

Con definición aplazada:


x = 8;
f@x_D := x ^ 2;
f@5D
25

Son muchas las situaciones en las que podemos necesitar una definición aplazada.
Por ejemplo, cuando definimos la función factorial.
factorial@0D = 1;
factorial@x_D := x Factorial@x - 1D
factorial@4D

24

1.7. Listas y matrices


Una lista es un conjunto de datos (constantes, funciones, otras listas, etc.) dis-
puesto en la forma:
{dato1, dato2, . . . ...}
Las listas contituyen una de las estructuras más importantes de Mathematica.
Hay que señalar que el concepto de lista en Mathematica es más extenso que el
concepto matemático de conjunto. Una lista puede tener elementos repetidos.
81, 2, 1, 3, 1, 4, 1, 5<

81, 2, 1, 3, 1, 4, 1, 5<

9
Como se ha señalado antes, los elementos de una lista no tienen por qué ser
números reales.
82, x + 1, 2 x ^ 2 + 3 x + 7<

92, 1 + x, 7 + 3 x + 2 x2 =

Los vectores y las matrices también se representan mediante listas. En el ejemplo


anterior se ha dado un vector cuyas componentes son polinomios.
Con una lista se pueden efectuar operaciones aritméticas básicas (elemento a
elemento) o bien utilizarlas como argumento de una función para obtener una lista
de valores:
81, 2, 3< ^ 4

81, 16, 81<

Sin@80, Pi  6, Pi  4, Pi  3, Pi  2<D

:0,
1 1 3
, , , 1>
2 2 2

Una matriz es una lista de listas. Cada uno de los elementos de esta lista es otra
lista que representa los vectores fila de la matriz. Ası́, la matriz
 
0 −1 3
a=
7 2 −4

en el lenguaje de Mathematica se representa como


a = 880, -1, 3<, 87, 2, -4<<

880, -1, 3<, 87, 2, -4<<

Extracción de datos de una lista: Los dobles corchetes se utilizan para extraer
un elemento de una lista. Por ejemplo, dado el vector v = {7, 3, -1} el primer
elemento de esta lista es 7.
v = 87, 3, -1<

87, 3, -1<

v@@1DD

En general, el elemento i-ésimo de una lista v es v[[i]].


También podemos extraer los elementos de una matriz.
a@@1DD@@2DD

-1

Una forma alternativa más cómoda es:


a@@1, 2DD

-1

10
Generación de listas: Una forma de generar listas es mediante la función Table.
Table@i, 8i, 1, 5<D

81, 2, 3, 4, 5<

Mediante esta función también se puede generar una matriz.


Table@i * j, 8i, 1, 3<, 8j, 1, 4<D

881, 2, 3, 4<, 82, 4, 6, 8<, 83, 6, 9, 12<<

Las operaciones básicas con matrices son:

A+B: Suma de las matrices A y B.

A-B: Diferencia de las matrices A y B.

c A: Producto de las matriz A por el escalar c.

A.B: Producto de las matrices A y B.

Det[A]: Determinante de la matriz A.

Inverse[A]: Inversa de la matriz A (si existe).

MatrixPower[A,n]: Potencia n-ésima de A, An .

Transpose[A]: Traspuesta de la matriz A.

IdentityMatrix[n]: Matriz identidad de orden n.

DiagonalMatrix[lista]: Matriz diagonal con los elementos de lista en la diago-


nal.

Minors[A,k]: Sub-matrices de orden k × k de la matriz A.

Producto de matrices: Es importante observar que para multiplicar matrices no


se utiliza el asterisco ∗. El sı́mbolo ∗ (o la yuxtaposición de matrices) es utilizado para
obtener el producto “aritmético” (elemento a elemento). Para obtener el producto
matricial se utiliza el punto .
p = 881, 3<, 80, -1<<;
q = IdentityMatrix@2D;

El producto matricial debe dar la matriz p. Ası́,


p.q

881, 3<, 80, -1<<

Mientras que p∗q proporciona el producto elemento a elemento:


p*q

881, 0<, 80, -1<<

11
1.8. Resolución de ecuaciones
Una función que se requiere en muchas ocasiones es la de resolver ecuaciones. El
comando Solve intenta resolver la ecuación que se le plantea. Debemos indicar la
ecuación o ecuaciones a resolver y cuáles son las incógnitas. Salvo que le indiquemos
lo contrario, Mathematica puede utilizar funciones inversas cuando las ecuaciones
no son polinómicas. En estos casos alguna solución (o quizá una cantidad infinita de
ellas) pueden no aparecer explı́citamente.
Solve@Sin@x + y - x ^ 2D Š 1  2, yD

Solve::ifun : Inverse functions are being used by Solve, so


some solutions may not be found; use Reduce for complete solution information. ‡

::y ® - x + x2 >>
Π
6

Observemos que otras soluciones son posibles, como por ejemplo y = 2π + π6 −


x + x2 . Observemos que el resultado del comando Solve es una tabla y como tal
podemos usarlo, ası́ por ejemplo podemos definir una lista con las soluciones de una
ecuación para utilizarlas más adelante.
Si una ecuación o sistema de ecuaciones no tiene solución la respuesta es {}.
En el ejemplo que sigue se define una ecuación con una incógnita y un parámetro;
utilizamos la definición aplazada porque sólo nos interesa resolver la ecuación para
algunos parámetros.

Ejemplo 1.1. Encontrar algún b > 0, b ∈ Z, tal que la ecuación x3 + x + b = 0


tenga solución con parte real menor que −2,5. Hallar esta solución.

Antes de resolver el problema definimos la ecuación (recordemos que el resultado


es una lista con tres entradas) y hacemos algunas pruebas con b = 0 para ver la forma
que tiene la lista formada por las soluciones. Extraemos a continuación diversas
partes de la solución:
ecu@b_D := Solve@x ^ 3 + x + b Š 0, xD;
ecu@0D
ecu@0D@@1DD H*Nos dará la primera solución que será también una lista*L
ecu@0D@@2DD
ecu@0D@@1DD@@1DD
ecu@0D@@2DD@@1DD@@2DD
88x ® 0<, 8x ® -ä<, 8x ® ä<<

8x ® 0<

8x ® -ä<

x®0

Ahora ya estamos preparados para comprender lo que sigue.


Utilizaremos el comando While para ir rastreando las soluciones de la ecuación,
While[test,cuerpo;b++] va ejecutando “cuerpo”(en este caso no hace más que

12
almacenar el valor de b sin hacer nada), mientras “test” sea verdadero. Cada vez b
aumenta en una unidad y cuando “test” es falso, para. En este momento b tendrá el
valor deseado:
ecu@b_D := Solve@x ^ 3 + x + b Š 0, xD;

b = 0;
While@Min@Re@ecu@bD@@1DD@@1DD@@2DDD,
Re@ecu@bD@@2DD@@1DD@@2DDD, Re@ecu@bD@@3DD@@1DD@@2DDDD > -2.5, b; b ++D
Print@"La primera solución con parte real mayor que -2.5 se obtiene con b igual a: ", bD
Print@"Esta parte real es: ", N@
Min@Re@ecu@bD@@1DD@@1DD@@2DDD, Re@ecu@bD@@2DD@@1DD@@2DDD, Re@ecu@bD@@3DD@@1DD@@2DDDDDD
Print@"que corresponde a la solución: ", N@ecu@bDDD
La primera solución con parte real mayor que -2.5 se obtiene con b igual a: 19

Esta parte real es: -2.54358

88x ® -2.54358<, 8x ® 1.27179 - 2.41916 ä<, 8x ® 1.27179 + 2.41916 ä<<


que corresponde a la solución:

1.9. Reglas de sustitución


En muchas situaciones realizamos manipulaciones simbólicas que posteriormente
deseamos concretar para valores determinados, o queremos sustituir determinadas
expresiones por otras. Se utiliza entonces el comando /. que aplica una regla o una
lista de reglas de sustitución. En el ejemplo siguiente resolvemos la ecuación x+t = 0
con t como parámetro y a continuación le asignamos el valor 2 al parámetro:
Solve@x + t Š 0, xD

88x ® -t<<

% . t ® 2

88x ® -2<<

También podemos usar las reglas de sustitución con fines simbólicos. A conti-
nuación por ejemplo las utilizamos para escribir una función en coordenadas polares
(englobamos todo el cálculo con el comando Simplify para obtener un resultado
simplificado); conviene observar que al ejecutar más de una sustitución es necesario
agrupar la lista de sustituciones con unas llaves.
Simplify@x Hx ^ 2 + y ^ 2L  Hx ^ 4 + y ^ 4 - 2 x ^ 2 y ^ 2L . 8x ® r Cos@tD, y ® r Sin@tD<D

Cos@tD Sec@2 tD2


r

1.10. Ayudas incorporadas


Mathematica proporciona varios mecanismos para obtener ayuda e información
sobre las más de 800 funciones incorporadas, ası́ como de las introducidas por el
usuario.
Esto da información acerca de la función incorporada Sin.

13
? Sin

Sin@zD gives the sine of z. ‡

Ası́, ahora sabemos cómo calcular el seno de π/4


Sin@Pi  4D

Mediante ?? obtenemos información adicional acerca de sus argumentos y atri-


butos.
?? Sin

Sin@zD gives the sine of z. ‡

Attributes@SinD = 8Listable, NumericFunction, Protected<

En el apartado 1.5 se explica el significado de Attributes.


En otras ocasiones podemos estar interesados en saber qué funciones incorpora-
das comienzan por Si. Para ello utilizamos el carácter ∗.
? Si*

System`

SiegelTheta SingleLetterStyle

Sign SingularValueDecomposition

Signature SingularValueList

SignPadding SingularValues

Simplify Sinh

Sin SinhIntegral

Sinc SinIntegral

SingleEvaluation SixJSymbol

SingleLetterItalics

El carácter ∗ puede ir en cualquier lugar después del signo ? Por ejemplo, ?∗Sin
nos dará información acerca de todas las funciones que terminen en Sin.
? *Sin

System`

ArcSin Sin

También se puede pedir información de un sı́mbolo concreto. Por ejemplo el


sı́mbolo

14

x  y or Divide@x, yD is equivalent to x y^-1. ‡

Hay que poner atención al pedir información acerca del sı́mbolo ∗, ya que en-
trando ?∗ obtendremos como salida el nombre de todas las funciones incorporadas,
ası́ como los nombres de las funciones definidas por el usuario. Para solventar este
problema hemos de entrar ?\*. La información solicitada acerca del operador ∗ nos
da una forma alternativa de indicar la multiplicación en Mathematica: dejando un
espacio en blanco entre los factores.

1.11. Ejercicios

Ejercicio 1.1. Definir una función gam tal que gam( 21 ) = π, gam(0) = 1 y

x x−2 x−4x−6 1 √
gam( ) = · · · · · π,
2 2 2 2 2
si x es impar y tal que gam(n) = (n − 1)!, si n es entero. ¿Podremos obtener
gam[1/3]? Si x ∈ Z?. ¿Qué ocurre si definimos gam sin utilizar definiciones apla-
zadas?.

Ejercicio 1.2. Plantear y resolver cuatro ecuaciones de modo que haya alguna con:

una solución.

doce soluciones.

ninguna solución.

infinitas soluciones.

Ejercicio 1.3. Obtener una lista con todos los valores sin(k 2 ) para k ∈ {1, . . . , 50}.
x3 + x
Ejercicio 1.4. Definir la expresión p = . A continuación
(x + a)(x3 − 3x2 + x − 3)
resolver la ecuación Denominadordep = 0, cuando a = 2. Obtener el valor numérico
de p cuando x = 2, a = 2. Descomponer p como suma de fracciones simples. A con-
tinuación hacer denominador común en la suma de fraccciones obtenida; comparar
con p (simplificar p puede ayudar). Escribir una lista con las raı́ces del denominador
de p cuando a = {0, 1, 2, . . . , 20}2 , utilizar la ayuda (F1) para conocer su sintaxis.

Ejercicio 1.5. Calcular numéricamente el determinante de la matriz A = (aij ), de


tamaño, 5 × 5 cuyas entradas son aij = sin(ij).

Ejercicio 1.6. Encontrar el primer número x tal que la ecuación x2 + 12x + a = 0


tenga soluciones con parte real mayor que 3.

2
Aquı́ será necesario utilizar algunos comandos que no hemos introducido aún como: Apart,
Together, Denominator.

15
Práctica 2

Álgebra Lineal

En esta práctica analizaremos algunas de las posibilidades que ofrece Mathema-


tica para resolver problemas de álgebra lineal. Comenzaremos en la primera sección
por proporcionar los comandos básicos necesarios y mostraremos ejemplos que ilus-
tren su utilización. Con los comandos que se estudian en esta sección se estará en con-
diciones de resolver la mayorı́a de los problemas elementales que se pueden plantear
en un primer curso de álgebra lineal. En la segunda sección daremos una aplicación
al estudio de las cónicas.

2.1. Matrices
Como ya hemos visto, en Mathematica los vectores se representan mediante
listas, y las matrices, como listas de listas. Por ejemplo, la lista de listas {{a,b},
{c,d}} representa la matriz 2 × 2 cuyas filas corresponden a cada una de las filas de
la matriz: (a, b) y (c, d).

Algunas de las funciones incorporadas que Mathematica utiliza para construir


matrices son las siguientes:

DiagonalMatrix[lista]

genera una matriz diagonal con los elementos de lista en la diagonal;

IdentityMatrix[n]

genera la matriz identidad n × n.

El comando

MatrixForm[matriz]

imprime la matriz en forma de tablero bidimensional, haciendo ası́ más clara su


estructura. Por otra parte, Mathematica dispone de algunas órdenes para hacer
referencia a los elementos de la matriz:

16
m[[i, j]] proporciona el elemento i, j de la matriz m;
m[[i]] o Part[m, i] da la fila i-ésima de m.

Como ya se ha dicho, una matriz es una lista de vectores, representando cada


una de sus filas. Para que se tenga una matriz válida, todas las filas han de tener la
misma longitud, de manera que los elementos de la matriz formen efectivamente un
tablero rectangular.

Operaciones con matrices y vectores.


La suma de dos vectores se lleva a cabo elemento a elemento, siempre que ambos
tengan la misma longitud. De hecho, Mathematica admite las operaciones del álgebra
matricial (suma, producto, producto por escalar) siempre que las dimensiones sean
las correctas. Ası́, si m1 y m2 son dos matrices dadas y c es un escalar, tiene sentido
escribir

m1+m2, c m1, m1.m2

De igual modo, si v denota un cierto vector, tienen sentido las operaciones

v.v, v.m1, m1.v

debiendo tener cuidado con estas dos últimas operaciones, pues aunque se represen-
tan de igual forma, proporcionan resultados muy diferentes.

El comando Inverse[m] calcula la inversa de la matriz cuadrada m. Obsérvese


que Mathematica supone implı́citamente que el determinante es no nulo. Cuando
se introduce una matriz cuyos elementos son números enteros o sı́mbolos, el pro-
grama proporciona la inversa exacta. Ahora bien, si en la matriz de entrada algu-
nos elementos son números reales aproximados, Mathematica obtiene un resultado
numérico aproximado; en ese caso, como en cualquier otro cálculo numérico, se puede
controlar el número de cifras significativas a manejar.

Otros comandos que se utilizan habitualmente al trabajar con matrices son:

Transpose[m]

para calcular la traspuesta de la matriz m,

MatrixPower[m, k]

para calcular la potencia k-ésima de m y, para calcular el determinante de una matriz


cuadrada se utiliza
Det[m].

17
Sistemas de ecuaciones lineales
Para resolver un sistema de ecuaciones lineales dado, varias son las alternativas
que Mathematica ofrece. En primer lugar, puede ser conveniente escribir todas y
cada una de las ecuaciones explı́citamente, y después resolverlas usando el comando
Solve. En muchos casos, sin embargo, puede resultar más adecuado convertir el
sistema en una ecuación matricial, y aplicar después operaciones matriciales para
resolverlo, sobre todo si el número de ecuaciones y de incógnitas es elevado.

Un sistema de ecuaciones lineales se puede escribir en forma matricial como

m · x = b,

donde x es el vector incógnita, m es la matriz de coeficientes y b es la matriz de


los términos independientes. Como el estudiante ya está familiarizado con la teorı́a
general de los sistemas de ecuaciones lineales, procederemos directamente con los
comandos involucrados y analizaremos en detalle algunos ejemplos.

Las funciones incorporadas que Mathematica ofrece para resolver este tipo de
sistemas de ecuaciones son los siguientes:

LinearSolve[m,b]

da un vector x que es solución de la ecuación matricial m · x = b;

NullSpace[m]

proporciona un conjunto de vectores cuyas combinaciones lineales satisfacen la ecua-


ción matricial m · x = 0, esto es, proporciona una base del núcleo de la aplicción
lineal cuya matriz asociada en las bases canónicas es m;

RowReduce[m]

transforma la matriz m en otra reducida por filas, mediante combinaciones lineales


de las filas, coincidiendo, por tanto, el rango de la matriz con el número de filas no
nulas de esta matriz.

Se puede obtener también el número de ecuaciones redundantes correspondientes


a una matriz particular calculando

Length[NullSpace[m]]

Con los comandos anteriores y el teorema de Rouché–Frobenius, estamos en


disposición de analizar (y resolver en su caso) sistema de ecuaciones lineales.

18
Valores y vectores propios
Como es bien sabido, los valores propios de una matriz m son los valores λi para
los cuales existen vectores xi no nulos, llamados vectores propios, tales que m · xi =
λi xi . El cálculo de los valores propios de una matriz n × n supone, en principio,
resolver una ecuación polinómica de grado n. Si n ≥ 5 no es posible obtener, en
general, soluciones algebraicas explı́citas de una ecuación tal; Mathematica dispone
de los siguientes comandos para abordar este problema:

Eigenvalues[m]

proporciona una lista de los valores propios de la matriz m;

Eigenvectors[m]

proporciona una base de cada subespacio propio;

Eigensystems[m]

calcula al mismo tiempo los valores y los vectores propios y proporciona una lista
de valores propios y de vectores propios asociados. Por otra parte,

Eigenvalues[N[m]]

proporciona una aproximación numérica de los valores propios. Por tanto, Mathe-
matica nos puede proporcionar una aproximación numérica de los valores propios.

La función Eigenvalues da siempre una lista de n valores propios para una


matriz n × n, pudiendo estar alguno de ellos repetidos, mientras que Eigenvectors
da una lista de vectores propios linealmente independientes; si el número de tales
vectores propios es menor que n, entonces Eigenvectors añade vectores nulos a la
lista hasta completarla con n vectores. Como es bien sabido, los valores y vectores
propios de una matriz juegan un papel muy importante a la hora de analizar si es,
o no, diagonalizable. En el caso general, dada una matriz m, siempre será posible
encontrar una matriz c tal que c−1 mc = j, donde j es la llamada forma canónica de
Jordan (que en el caso de ser m diagonalizable no es más que una matriz diagonal tal
que los elementos de su diagonal principal son los valores propios de m). La función
que lleva a cabo esta descomposición es JordanDecomposition, la cual proporciona
una lista con las matrices c y j.

2.1.1. Ejercicios
Ejercicio 2.1. (1) Dadas las matrices
   
3 −4 5 10 −6 −9
A= 8 0 −3  , B= 6 −5 −7 
5 2 1 −10 9 12

calcula A + B, B − 4A, (AB)−1 , ((A − B)B)T , A2 , det(B 3 ) y las raı́ces del


polinomio caracterı́stico de A.

19
(2) Resolver el sistema 
x + 5y = a
2x + y = b
dependiente de dos parámetros. El método más eficiente es usar LinearSolve.

(3) ¿Qué ocurre si intentas resolver el sistema



x + 2y = a
x + 2y = b

con Mathematica ?

(4) Estudia y resuelve el sistema




 x + 2y + 3z = 6
x + 3y + 8z = 19


 2x + 3y + z = −1
5x + 6y + 4z = 5

(5) Estudia y resuelve, según los valores de a, el sistema formado por las ecuacio-
nes 
 ax + y + z = 1
x + ay + z = a
x + y + az = a2

(6) Forma una matriz cuyas filas sean los vectores

(−1, −1, 2, 0, −1), (−2, 2, 0, 0, −2), (2, −1, −1, 0, 1),


(−1, −1, 1, 2, 2), (1, −2, 2, −2, 0)

y otra con

(2, 3, −1, 3, 0), (1, 2, 1, −2, 1), (2, 1, −7, 17, −4),

hallando sus rangos y una base de su núcleo.

(7) Dado el conjunto de vectores

{(2, 3, 4, −1, 1), (3, 4, 7, −2, −1), (1, 3, −1, 1, 8), (0, 5, 5, −1, 4)},

obtén la dimensión y una base del subespacio lineal que engendran.

(8) Dado el conjunto de vectores

{(1, 0, 0), (1, 0, 1), (1, 1, p)}

estudia si forman una base de R3 para cualquier valor de p.

20
(9) Dada la aplicación lineal cuya matriz asociada en unas ciertas bases viene
dada por  
0 −3 −1 −3 −1
A =  −3 3 −3 −3 −1 
2 2 −1 1 2
encuentra una base de su núcleo. Halla también la imagen de los vectores
(4, 2, 0, 0, −6) y (1, 2, −1, −2, 3).

(10) Consideremos la aplicación lineal f en R3 dada por f (a, b, c) = (a+b, b+c, a+


c). Halla la matriz asociada a f en la base canónica. Idem a f 5 .

(11) Diagonaliza la matriz simétrica cuyas filas son los vectores

(3, −1, 0), (−1, 2, −1), (0, −1, 3) .

Halla la matriz de paso P , comprueba el resultado y verifica que los valores


propios de la matriz de partida son los elementos de la diagonal de la matriz
semejante a la dada.

(12) Diagonaliza la matriz cuyas filas vienen dadas por los vectores

(7, −2, 1), (−2, 10, −2), (1, −2, 7) .

2.2. Cónicas
La circunferencia, la elipse y la parábola son curvas planas de todos conocidas.
Estas curvas aparecı́an ya en la geometrı́a griega y fueron denominadas secciones
cónicas ya que los griegos de la época de Platón consideraban que tales curvas
procedı́an de la intersección de un cono con un plano tal como muestra la figura:

21
Cuando los matemáticos de los siglos XVI y XVII estudiaron los trabajos griegos,
empezaron a comprobar la falta de generalidad de los métodos de demostración, lo
que llevó a sustituir la visión puramente geométrica de las secciones cónicas por otra
que incorporaba la nociones de coordenadas y distancia. Esto llevó a la definición de
estas curvas como lugares geométricos que verifican ciertas propiedades en términos
de distancia. Finalmente se estableció una teorı́a algebraica general que engloba
todas estas curvas y las describe como curvas cuadráticas. En esta teorı́a está basada
la presente práctica.

Curvas cuadráticas
Una cónica es el lugar geométrico de los puntos del plano que satisfacen una
ecuación de segundo grado en dos variables:

a11 x2 + a22 y 2 + 2a12 xy + 2a01 x + 2a02 y + a00 = 0

que podemos expresar en forma matricial

X t AX + BX + a00 = 0 (EG)

donde
!
a11 a12
 
 x
A= , B = 2a01 2a02 , X= .
a12 a22 y

A partir de la ecuación general (EG) de una cónica vamos a estudiar tres pro-
blemas: (1) Obtener su ecuación reducida, (2) obtener sus elementos geométricos, y
(3) analizar sus invariantes métricos.

22
Ecuación reducida de una cónica
Diremos que la ecuación de una cónica

X t AX + BX + a00 = 0 ,

es una ecuación reducida si

1. La matriz A es diagonal.

2. Si 0 no es valor propio de A, entonces B = 0.

3. Si 0 es valor propio de A, entonces de entre los elementos a0i hay a lo más uno
no nulo.

El problema que tratamos de resolver a continaución es el de obtener, a partir


de una ecuación general de una cónica, una ecuación reducida realizando un cambio
de sistema de referencia mediante un movimiento rı́gido en el plano que equivale a
un giro más una traslación.

Puesto que el primer requisito para tener una ecuación reducida es que la matriz
de la cónica sea diagonal, dada una ecuación

X t AX + BX + a00 = 0

trataremos de sustituir A por una matriz diagonal. Puesto que A es simétrica, en-
tonces es diagonalizable por semejanza ortogonal, es decir, existen D diagonal y P
ortogonal (que puede elegirse con det P = 1) tales que P t AP = D. Entonces, la
expresión

X = PZ con Z = (u, v)

representa una rotación en el plano en la que el origen queda fijo. Sustituyendo en


la ecuación de la cónica queda

(Z)t D (Z) + BP (Z) + a00 = 0 (E)

con lo que la primera condición de ecuación reducida se verifica.

Una vez la matriz de la cónica ya es diagonal, el siguiente paso es eleminar los


términos u e v (si los dos valores propios son no nulos) o al menos uno de ellos (si
algún valor propio es nulo); para ello realizaremos un nuevo cambio de sistema de
referencia en el que sólo cambia el origen (es decir, una traslación). El método que
utilizaremos consiste en completar cuadrados, esto es, si tenemos términos en u2 y
u sustituirlos por un cuadrado más un término independiente:

23
u2 + 2b1 u = (u + b1 )2 − b21

y de forma similar

v 2 + 2b2 v = (v + b2 )2 − b22 .

Mediante la sustitución
(
t = u + b1
s = v + b2

quedan eleminados los términos de grado 1 de la ecuación. En el caso de ser uno


de los valores propios 0, sólo puede realizarse la completación de cuadrados para
una de las variables. Después, la otra variable puede ser modificada para obtener un
término independiente nulo.

Tenemos ası́ un proceso que nos permite pasar de una ecuación cualquiera de
una cónica a una ecuación reducida mediante la composición de dos movimientos
rı́gidos: una rotación y una traslación. Es un cambio de sistema de referencia en el
que no varı́an las propiedades geométricas, sólo lo hace la ecuación.

Ejercicio 2.2. Calcular la ecuación reducida de la cónica

x2 − 6xy − 7y 2 + 10x + 2y + 9 = 0 .

Para realizar el Ejercicio 2.2 realizaremos los siguientes pasos utilizando algunos
de los comandos de Mathematica estudiados en la Práctica 1:

PASO 1: Hallar los valores propios de la matriz de la cónica.

PASO 2: Hallar una base ortonormal de vectores propios.

PASO 3: Escribir la ecuación P de paso a la matriz diagonal.

PASO 4: Escribir la ecuación (E) de la cónica.

PASO 5: Realizar el producto de las matrices que aparecen en la ecuación (E) para
obtener una nueva ecuación cuadrática de la cónica.

Si todos los pasos han sido realizados correctamente se debe haber obtenido la
ecuación:

16 28
−8u2 + 2v 2 + √ u − √ v + 9 = 0
10 10

24
donde u y v son las nuevas coordenadas tras realizar el giro.

Tenemos ya una ecuación de la cónica que satisface la condición 1 de la ecuación


reducida, es decir, hemos realizado un giro. Ahora vamos a obtener la ecuación
reducida realizando una traslación.

PASO 6: Realizar una traslación para eleminar los términos de grado 1:


 
2
−8 u − √ u = −8 u− ??? )2 − ???
2

10

 
14
2
2 v − √ v = 2 v− ??? )2 − ???

10

Tras los cálculos anteriores, las nuevas coordenadas tras realizar la traslación
son:
1

 t = u − √10

7
 s=v−√ .


10

PASO 7: Escribir la ecuación reducida de la cónica.

El comando ImplicitPlot permite dibujar la gráfica de funciones expresadas


en forma implı́cita. Busca en Help de Mathematica este comando y analiza cómo se
usa. Utilı́zalo para realizar el siguiente ejercicio:

Ejercicio 2.3. Dibujar la cónica del ejercicio anterior, primero utilizando la ecua-
ción x2 − 6xy − 7y 2 + 10x + 2y + 9 = 0, luego la ecuación (E) y luego la ecuación
reducida. Compara las gráficas obtenidas.

Ejercicio
√ 2.4. Hallar la ecuación reducida de la cónica x2 + y 2 + 2xy + 6 2 x −
2 2 y + 26 = 0. Dibujar la gráfica de esta cónica, primero usando la ecuación
anterior, luego la ecuación (E) y luego la ecuación reducida, comparando las gráficas
obtenidas.

Cálculo de los elementos geométricos


Una ecuación reducida X 00 = C + P t X de una elipse, hipérbola o parábola
significa que el nuevo sistema de referencia R00 tiene como origen el centro de la
cónica (si es una elipse o una hipérbola) o el vértice (si se trata de una parábola)
y como ejes de coordenadas los ejes de la cónica (en el caso de una elipse o de una
parábola) o el eje y la tangente en el vértice (en el caso de una parábola).

25
Puesto que las coordenadas del origen de R00 respecto de R00 son (0, 0), entonces
el centro (en el caso de la elipse o de la hipérbola) o el vértice (en el caso de la
parábola) es la solución del sistema:

0 = C + P tX

Para calcular los ejes basta con recordar que la nueva base está formada por los
vectores propios de la matriz de la cónica y, por tanto, estos vectores son los vectores
directores de los ejes de la cónica. En el caso de la parábola, el vector propio asociado
a λ = 0 nos da la dirección del eje y el otro vector propio proporciona la dirección
de la tangente en el vértice.

De forma similar al cálculo del centro se pueden obtener los focos de la cónica,
la directriz de la parábola, las ası́ntotas de la hipérbola, etc.

Ejercicio 2.5. Calcular el centro y los ejes de la cónica

−2xy − 2x + 6y + 5 = 0

Representar gráficamente la cónica e identifica su centro y sus ejes.

Ejercicio 2.6. Calcular el vértice, el eje y la tangente en el vértice de la cónica


√ √
x2 + y 2 + 2xy + 6 2 x − 2 2 y + 26 = 0.

Representar gráficamente la cónica.

Invariantes métricos de las cónicas


A la ecuación de una cónica

a11 x2 + a22 y 2 + 2a12 xy + 2a01 x + 2a02 y + a00 = 0

le asociamos las matrices


 
a00 a01 a02  
a11 a12
Ā = a01 a11 a12  A=
a12 a22
a02 a12 a22

y consideramos los números

I3 = det Ā , I2 = det A , I1 = tr A = a11 + a22

26
Los números I1 , I2 y I3 no varı́an cuando la cónica es afectada por un movimiento
rı́gido y se denominan invariantes métricos. Los invariantes métricos nos permiten
identificar el tipo de cónica según se refleja en la tabla 2.2:

I2 > 0 Elipse I1 I3 < 0 Real


I1 I3 > 0 Imaginaria
I3 6= 0 I2 <0 Hipérbola
(no degeneradas) I2 =0 Parábola
I2 >0 Un punto
I3 = 0 I2 <0 Dos rectas secantes
(degeneradas) I2 =0 Dos rectas paralelas

Cuadro 2.1: Clasificación de las cónicas por invariantes

Ejercicio 2.7. Clasificar la cónica de ecuación

2x2 − 4xy − y 2 − 4x − 8y + 14 = 0 .

Podemos utilizar los invariantes métricos para obtener la ecuación reducida de


una cónica. El método de basa en el hecho de que puesto que I1 , I2 y I3 son inva-
riantes por movimientos rı́gidos, han de coincidir los valores obtenidos a partir de la
ecuación de partida y a partir de la correspondiente ecuación reducida.

En el caso en que I2 6= 0, la cónica dada tendrá una ecuación reducida del tipo

ax2 + by 2 + d = 0

de donde se deduce que I3 = abd, I2 = ab e I1 = a + b. De estas igualdades se deduce


I3
rápidamente que d = , mientras que a y b pueden ser obtenidos como las raı́ces
I2
de la ecuación λ2 − I1 λ + I2 = 0.
Para el caso de la parábola, cálculos similares nos proporcionan una ecuación
reducida y 2 = 2px, donde el coeficiente p se obtiene por la fórmula
r
I3
p= − .
I1
Ejercicio 2.8. Hallar la ecuación reducida de la cónica 3x2 −8xy−12y 2 −30x−64 =
0 y clasificarla.
Ejercicio 2.9. Hallar la ecuación reducida de la cónica 21x2 + 13y 2 + 6xy − 114x +
34y + 73 = 0 y clasificarla.
Ejercicio 2.10. Hallar la ecuación reducida de la cónica 4x2 + 25y 2 − 20xy − 15x −
6y = 0 y clasificarla.

27
Práctica 3

Gráficas en dos y tres


dimensiones

El programa Mathematica dispone de un amplio repertorio de funciones que nos


permiten dibujar gráficas en dos y tres dimensiones. Los comandos básicos son Plot
y Plot3D, con los cuales podemos obtener la representación gráfica de funciones
reales de una o dos variables reales.

3.1. Gráficas en dos dimensiones


3.1.1. Gráficas en coordenadas cartesianas
El comando

Plot[f(x), {x, a, b}]

representa la curva en coordenadas cartesianas y = f (x) en el intervalo cerrado [a, b].


Por ejemplo,

In[12]:= Plot@Sin@xD, 8x, 0, 2 Pi<D


1.0

0.5

Out[12]=
1 2 3 4 5 6

-0.5

-1.0

Si queremos trabajar con varias gráficas a la vez tenemos varias opciones. Una
de ellas es:

Plot[{f(x), g(x),h(x),...}, {x, a, b}];

28
Ejemplo 3.1. Representa gráficamente las funciones f (x) = sin x, f (x) = sin(2x),
f (x) = sin(3x) en el intervalo [0, 2π].

El comando Show también permite combinar varias gráficas de una vez tal y
como vemos a continuación.
Además podemos obtener cada gráfica por separado en una tabla de gráficos;
para ello utilizaremos la opción que detallamos en el siguiente ejemplo.

Ejemplo 3.2. Representamos cuatro polinomios en una tabla.

g1 = Plot@x ^ 2 + 2 x - 3, 8x, -3, 3<, DisplayFunction -> IdentityD;


g2 = Plot@x ^ 3 + 3 x ^ 2 - x - 3, 8x, -3, 3<, DisplayFunction -> IdentityD;
In[13]:=

g3 = Plot@x - 1, 8x, -3, 3<, DisplayFunction -> IdentityD;


g4 = Plot@Hx - 1L ^ 4, 8x, -3, 3<, DisplayFunction -> IdentityD;
Show@GraphicsArray@88g1, g2<, 8g3, g4<<DD

10 25
20
5 15
10
5
-3 -2 -1 1 2 3
-3 -2 -1 1 2 3
Out[17]=
2 140
1 120
100
-3 -2 -1 1 2 3 80
-1 60
-2 40
20
-3
-4 -3 -2 -1 1 2 3

Utilizamos "DisplayFunction->Identity"; esta opción hace que no visualice-


mos la gráfica en la sentencia en la que la introducimos. En ocasiones utilizamos
diversas opciones de Plot y sólo nos interesa ver la gráfica final. En la sentencia que
queramos que se visualice la gráfica basta añadir DisplayFunction->$DisplayFunction
tal y como aparece en los ejemplos siguientes.
g1 = Plot@Sin@xD, 8x, 0, 2 Pi<, PlotStyle -> Red, DisplayFunction ® IdentityD;
g2 = Plot@Cos@xD, 8x, 0, 2 Pi<, PlotStyle -> Green, DisplayFunction ® IdentityD;
In[37]:=

Show@g1, g2, DisplayFunction ® $DisplayFunction, AspectRatio -> AutomaticD

1.0

0.5

Out[39]=
1 2 3 4 5 6
-0.5

-1.0

Si queremos comparar dos o más gráficas, una posibilidad es usar con el comando
Show la opción AspectRatio->Automatic, la cual establece las misma proporción
en los dos ejes coordenados,

29
También podemos obtener lo mismo con la sentencia siguiente, en la que no
consideramos la opción AspectRatio:
In[36]:= Plot@8Sin@xD, Cos@xD<, 8x, 0, 2 Pi<, PlotStyle ® 8Red, Green<D

1.0

0.5

Out[36]=
1 2 3 4 5 6

-0.5

-1.0

Las opciones del comando Plot son muchas y enumerarlas resultarı́a demasiado
extenso. Resulta muy útil utilizar el Help que aparece en el menú del programa o
bien el comando Options[Plot]. Algunas de ellas son:

AspectRatio: establece la razón entre la altura y la anchura de la gráfica de


la pantalla. En particular, AspectRatio->Automatic escala la misma unidad
de medida en el eje x e y.

Thicknes: grosor del trazo de la gráfica.

Dashing: opción para hacer el dibujo con puntos o rayas en vez de un trazo
continuo.

AxesLabel->{etiqueta 1, etiqueta 2}: pone las etiquetas que queramos a


los ejes coordenados.

PlotRange: presenta en pantalla todos los puntos de la curva en el intervalo


pedido.

FilledPlot: rellena el espacio limitado por las gráficas de las funciones y las
ordenadas extremas consideradas.

PlotStyle->{}: nos proporciona opciones del dibujo tales como el grosor, color
y otros.

Si queremos distinguir las diversas gráficas que aparecen en un mismo dibujo


podemos hacerlo dándole colores a cada una de ellas. Podemos identificar los colores
con su nombre, en inglés, si previamente cargamos el paquete <<Graphics‘Colors‘.
Representamos las gráficas del seno de varios ángulos en colores diferentes; cada
color corresponde a una de las gráficas en el orden escrito.

30
Plot@8Sin@xD, Sin@2 xD, Sin@3 xD<, 8x, 0, 2 Pi<, PlotStyle ® 8Red, Blue, Green<D;

1.0

0.5

Out[1]=
1 2 3 4 5 6

-0.5

-1.0

Es importante observar que si no ponemos un punto y coma al final del comando


aparece en pantalla, después de la correspondiente gráfica, -Graphics-; ésta guarda
la información empleada por Plot para representar gráficamente la función.
Una opción que resulta útil en el cálculo de áreas de figuras planas es sombrear la
región que queda entre dos gráficas dadas. Para ello tenemos que cargar el paquete

In[3]:= << Graphics`FilledPlot`

Dibujamos las gráficas y sombreamos la zona entre ambas:


In[13]:= graf1 = FilledPlot@8Sin@x + 1D, x ^ 3 - 3 x + 1<, 8x, -4, 4<D

2
Out[13]=

-4 -2 2 4
-2

-4

-6

Se puede observar que el programa sombrea también zonas que no corresponden,


ello es debido al rango de valores de x que le damos y esto nos puede conducir a
errores. Si queremos que sombree sólo la zona real podemos hacerlo de la forma que
aparece a continuación:

31
FindRoot@Sin@x + 1D == x ^ 3 - 3 x + 1, 8x, -2<D
FindRoot@Sin@x + 1D == x ^ 3 - 3 x + 1, 8x, 2<D
In[2]:=

Out[2]= 8x ® -1.98099<

Out[3]= 8x ® 1.6383<

In[4]:= r1 = -1.980987201443789;
r2 = 1.6382951511934907;

graf1 = FilledPlot@8Sin@x + 1D, x ^ 3 - 3 x + 1<, 8x, r1, r2<, PlotRange ® AllD;


graf2 = Plot@8Sin@x + 1D, x ^ 3 - 3 x + 1<, 8x, -4, 4<D;
In[18]:=

Show@graf1, graf2D
8

2
Out[20]=

-4 -2 2 4
-2

-4

-6

Ejercicio 3.1. Dibuja la función f (x) = sin x + cos 3x en el intervalo [−4π, 4π].

(a) Modifica AspectRatio haciendo que la altura sea dos veces el ancho.

(b) Pon una etiqueta a los ejes x y y utilizando la opción AxesLabel.

(c) Cambia las marcas correspondientes al eje de abcisas, Ticks, sobre el gráfico
de manera que aparezcan sólo múltiplos de π.

(d) Pon nombre al dibujo con la opción PlotLabel.



Ejercicio 3.2. Dibuja las grf́icas de las funciones f (x) = x2 y g(x) = x y sombrea
la región comprendida entre ambas.

3.1.2. Gráficas en coordenadas polares


Para dibujar gráficas en coordenadas polares se requiere el cargar previamente
el paquete <<Graphics‘Graphics‘. El comando para dibujar este tipo de gráficas
es:

PolarPlot[funcion,{variable angular, valor minimo, valor maximo}]

Muchas de las opciones que se pueden utilizar en las gráficas en cartesianas


también las podemos utilizar en polares:

Ejemplo 3.3. Dibujamos una cardiode con bucle interior.

32
In[49]:= PolarPlot@2 Cos@tD - 1, 8t, 0, 2 Pi<, AspectRatio ® AutomaticD

1.5

1.0

0.5

Out[49]=
0.5 1.0 1.5 2.0 2.5 3.0

-0.5

-1.0

-1.5

Ejercicio 3.3. Dibuja una tabla con 4 gráficas, en diversos colores, en las que apa-
rezcan una rosa de tres pétalos de varios tamaños y en varias posiciones diferentes.
Para sombrear las zonas requeridas hay que cargar el paquete
<<Graphics‘FilledPlot‘ y los comandos son:
FilledPlot[expr,{x,xmin,xmax}]:sombrea el espacio entre la curva y el eje
x.

FilledPlot[{expr1,expr2,...},{x,xmin,xmax}]: sombrea el espacio entre


las curvas.

3.1.3. Gráficas de funciones implı́citas


Recordemos que la representación gráfica de una curva en el plano dada de forma
implı́cita viene dada por la relación F (x, y) = 0. Si se verifica el teorema de la función
implı́cita, la variable dependiente y es una función de x pero no la tenemos despejada.
Esto puede ser porque no podemos, como en el caso de y sin y + x3 − cos x = 0; o
bien porque la expresión que obtenemos al tratar de despejarla resulta complicada de
manejar, por ejemplo x y 2 −7x y +cos x−8 = 0. En estos casos Mathematica dispone
de la función ImplicitPlot incluida en el paquete Graphics‘ImplicitPlot‘ que
nos permite dibujar funciones definidas de forma implı́cita. Veamos un ejemplo:
cargamos primero el paquete anterior (basta con hacerlo una vez en la sesión de
Mathematica) y luego dibujamos el Folium de Descartes:

In[54]:= << Graphics`ImplicitPlot`

33
In[56]:= ImplicitPlot@x ^ 3 + y ^ 3 - 3 x y Š 0, 8x, -2, 2<, PlotLabel ® "Folium de Descartes"D

Folium de Descartes

-2 -1 1 2

Out[56]=

-1

-2

-3

La función ImplicitPlot tiene las mismas opciones que las de Plot salvo Compiled,
MaxBend y PlotDivision. Precisemos que para la función ImplicitPlot, la opción
AspectRatio toma el valor Automatic por defecto.

Ejercicio 3.4. Dibuja la elipse x2 + 4y 2 = 4, pon etiqueta a los ejes coordenados,


en color azul y con un grosor 0.01.

En la figura siguiente dibujamos con el comando ImplicitPlot una circunfe-


rencia en coordenadas cartesianas dada por x2 + y 2 = 9 (no volvemos a cargar el
paquete Graphics‘ImplicitPlot‘ porque lo hemos hecho anteriormente).
Notemos que para dibujarla√con el comando Plot
√ tendrı́amos que combinar las
gráficas de las funciones y = 9 − x y y = − 9 − x2 . Comprueba qué ocurre
2

cuando se procede de esta forma.

34
In[58]:= ImplicitPlot@x ^ 2 + y ^ 2 Š 9, 8x, -3, 3<, PlotStyle ® RedD

Out[58]=
-3 -2 -1 1 2 3

-1

-2

-3

3.2. Gráficas en tres dimensiones


3.2.1. Gráficas 3D en coordenadas cartesianas
El programa Mathematica tiene varias opciones para representar gráficamente
superficies; si viene dada en la forma z = f (x, y), el comando que utilizamos es:

Plot3D[f(x,y),{x,a,b},{y,c,d}].

Ejemplo 3.4. Dibujamos la superficie dada por la función de dos variables z =


sin xy

Plot3D[Sin[x y], {x, 0, 5}, {y, 0, 5}];

35
cuya gráfica es la que aparece en el siguiente dibujo:

1
0.5 5
0
4
-0.5
-1 3
0
1 2
2
3 1
4
5 0

La función Plot3D, igual que la función Plot, tiene asociado un conjunto de


opciones gráficas, especificadas por reglas que nos proporcionan diversas formas
de presentar la gráfica. Estas opciones las podemos obtener mediante la función
Options,
In[65]:= Options@Plot3DD

Out[65]= :AlignmentPoint ® Center, AspectRatio ® Automatic, Axes ® True, AxesEdge ® Automatic,


AxesLabel ® None, AxesStyle ® 8<, Background ® None, BaselinePosition ® Automatic,
BaseStyle ® 8<, BoundaryStyle ® Automatic, Boxed ® True, BoxRatios ® 81, 1, 0.4<,
BoxStyle ® 8<, ClippingStyle ® Automatic, ColorFunction ® Automatic,
ColorFunctionScaling® True, ColorOutput ® Automatic, ContentSelectable® Automatic,
ControllerLinking® Automatic, ControllerMethod ® Automatic, ControllerPath ® Automatic,
DisplayFunction ¦ $DisplayFunction, Epilog ® 8<, Evaluated ® Automatic,
EvaluationMonitor® None, Exclusions ® Automatic, ExclusionsStyle ® None,
FaceGrids ® None, FaceGridsStyle ® 8<, Filling ® None, FillingStyle ® Opacity@0.5D,
FormatType ¦ TraditionalForm, ImageMargins ® 0., ImagePadding ® All, ImageSize ® Automatic,
LabelStyle ® 8<, Lighting ® Automatic, MaxRecursion ® Automatic, Mesh ® Automatic,
MeshFunctions ® 8ð1 &, ð2 &<, MeshShading ® None, MeshStyle ® Automatic, Method ® Automatic,
NormalsFunction ® Automatic, PerformanceGoal ¦ $PerformanceGoal, PlotLabel ® None,
PlotPoints ® Automatic, PlotRange ® 8Full, Full, Automatic<, PlotRangePadding ® Automatic,
PlotRegion ® Automatic, PlotStyle ® Automatic, PreserveImageOptions® Automatic,
Prolog ® 8<, RegionFunction ® HTrue &L, RotationAction ® Fit, SphericalRegion ® False,

Ticks ® Automatic, TicksStyle ® 8<, ViewAngle ® Automatic, ViewCenter ® : , , >,


1 1 1

ViewMatrix ® Automatic, ViewPoint ® 81.3, -2.4, 2.<, ViewRange ® All,


2 2 2

ViewVector ® Automatic, ViewVertical ® 80, 0, 1<, WorkingPrecision ® MachinePrecision>

Una de estas opciones es ViewPoint que permite cambiar el punto de vista desde
el que vemos la superficie. Este punto de vista se define con relación a un cubo de
lado unidad centrado en el origen de coordenadas, siendo (1.3,-2.4,2) las coordenadas
del punto de vista por defecto. En el menú Input aparece 3DViewPoint Selector,
el cual permite mover el cubo hasta que tengamos el punto de vista que queremos. A
continuación vamos al comando Plot3D y pondremos al final una coma, volvemos al

36
3DViewPoint Selector y apretamos el comando Paste y aparecen las coordenadas
adecuadas en nuestro comando para que nos dibuje la gráfica desde el punto de vista
deseado. Esto es,
In[67]:= Plot3D@Sin@x yD, 8x, 0, 5<, 8y, 0, 5<, ViewPoint ® 8-1.814, -2.855, -0.093<D
0
2
4
1.0

0.5
Out[67]=
0.0

-0.5

-1.0
0 2 4

Puede ocurrir que al dibujar una superficie dada por z = f (x, y) el dibujo ob-
tenido no nos dé una buena perspectiva de cómo es su gráfica. Por ejemplo, el caso
del paraboloide z = x2 + y 2 ,
8x, -15, 15<, 8y, -15, 15<, ViewPoint -> 83.650, 1.655, 1.023< D;
Plot3D@x ^ 2 + y ^ 2, -10
0
10

400
300
200
100
0
-10
0
10

Para evitarlo tenemos otra opción: utilizar la función CountourPlot3D que dibuja
superficies de nivel. En primer lugar hay que cargar el paquete
<< Graphics`ContourPlot3D`

y escribir la orden
Ejercicio 3.5. Dibuja el cono z 2 = 3x2 + 3y 2 y elimina la malla del gráfico con la
opción Mesh->False.
Ejercicio 3.6. Dibuja una esfera con centro en el origen y radio 4.
p
Ejercicio 3.7. Representa en 3D la superficie z = 10 sin (10 x2 + y 2 ) con x ∈
[−1, 1], y ∈ [−1, 1] y 30 puntos a evaluar, además que no aparezca la caja de los
ejes, ni los cuadrados del dibujo.

3.3. Animación de gráficos


El programa Mathematica tiene una opción para obtener una animación de gráfi-
cos. Para ello seguimos los pasos siguientes:

37
1 0
-1
ContourPlot3D@x ^ 2 + y ^ 2 - z, 8x, -4, 4<, 8y, -4, 4<,
8z,
3 -3, 3<, ViewPoint -> 83.159, 0.980, 0.713<, Axes ® TrueD;

0
-1 0
1

creamos una tabla de gráficos con la función que queremos dibujar,

In[1]:= Table@Plot@Sin@n * xD, 8x, 0, 4 Pi<D, 8n, 1, 7<D

Seleccionamos la celda de cualquiera de los gráficos que obtenemos, vamos


al menú Cell y seleccionamos Animate Selected Graphics o bien, si selec-
cionamos uno de los dibujos, dándole dos veces a la tecla del ratón también
obtenemos el mismo resultado.

Esto mismo sirve para gráficos en tres dimensiones.

3.4. Gráficas bidimensionales en coordenadas paramétri-


cas
Estudiamos ahora la representación gráfica de funciones en las cuales las variables
x e y dependen de una tercera variable t a la que llamamos parámetro. La ecuación

r(t) = (x(t), y(t)), t ∈ [a, b]

recibe el nombre de ecuación paramétrica. Por ejemplo, la ecuación

r(t) = (2 cos t, 2 sin t), t ∈ [0, 2π]

define una circunferencia con centro en el origen y radio 2. Con Mathematica pode-
mos dibujarlas mediante la sentencia

ParametricPlot[{x(t),y(t)}, {t,a,b}]

siendo x(t) y y(t) las componentes primera y segunda de la función paramétrica


definida. También podemos dibujar varias gráficas en paramétricas mediante

ParametricPlot[ { {x(t),y(t)}, {u(t),v(t)}...}, {t,a,b}]

Una sentencia similar nos permite dibujar gráficas de curvas en tres dimensiones
en paramétricas,

38
ParametricPlot3D[{x(t),y(t),z(t)}, {t,a,b}]

Ejemplo 3.5. Dibujamos una circunferencia con centro en (0, 0) y radio 1.


In[59]:= ParametricPlot@8Cos@tD, Sin@tD<, 8t, 0, 2 Pi<D

1.0

0.5

Out[59]=
-1.0 -0.5 0.5 1.0

-0.5

-1.0

t2
 
t
Ejemplo 3.6. Representamos la función paramétrica r(t) = , en
1 + t 1 + t3
3
[0, 4π]

In[62]:= ParametricPlot@8t  H1 + t ^ 3L, t ^ 2  H1 + t ^ 3L<, 8t, 0, 4 Pi<, PlotStyle ® GreenD

0.5

0.4

0.3

Out[62]=

0.2

0.1

0.1 0.2 0.3 0.4 0.5

39
Ejemplo 3.7. Representación gráfica de la circunferencia de radio 1 y centrada en
x2
(0, 0) y la elipse + y 2 = 1, ambas en coordenadas paramétricas.
4
ParametricPlot@88Cos@tD, Sin@tD<, 82 Cos@tD, Sin@tD<<,
8t, 0, 2 Pi<, AspectRatio ® Automatic, PlotStyle ® 8Red, Blue<D
In[63]:=

1.0

0.5

Out[63]=
-2 -1 1 2

-0.5

-1.0

Las opciones para dibujar una gráfica en estas coordenadas son las mismas que
las de Plot.

Gráficas 3D en forma paramétrica


La función ParametricPlot3D nos permite representar superficies dadas en for-
ma paramétrica. En primer lugar hemos de cargar el paquete
<<Graphics‘ParametricPlot3D‘
Por ejemplo, el tronco de cono cuyas coordenadas paramétricas son Φ(u, v) =
(v cos u, v sin u, v) donde 0 ≤ u ≤ 2π, 0 ≤ v ≤ 4. Buscaremos el punto de vista
adecuado,
ParametricPlot3D@8u Cos@vD, u Sin@vD, u<,
8v, 0, 2 Pi<, 8u, 0, 40<, ViewPoint -> 8-2.711, -1.975, 0.447<D
In[2]:=

0 20 40
-40 -20
40

30

20
Out[2]=

10

0
40
20
0
-20
-40

Ejercicio 3.8. Haz la representación gráfica del cono del apartado anterior y asigna
etiqueta a los ejes.
Ejercicio 3.9. Haz la representación gráfica del cilindro con eje de simetrı́a z, de
radio 6 y z ∈ [−2, 2].

40
Representación gráfica de curvas en el espacio
La función ParametricPlot3D nos permite también representar gráficamente
curvas en el espacio, definidas por sus ecuaciones paramétricas ~σ (t) = (x(t), y(t), z(t))
donde a ≤ t ≤ b. Por ejemplo, hacemos la representación gráfica de una espiral de
ecuaciones paramétricas ~σ (t) = (2 cos t, 2 sin t, t), t ∈ [0, 6π],

In[2]:= ParametricPlot3D@82 Cos@tD, 2 Sin@tD, t, Blue<, 8t, 0, 6 Pi<D

Ejercicio 3.10. Representa en un mismo gráfico y en distinto color la curva de


Viviani de ecuaciones paramétricas ~σ (t) = (cos2 t, sin t cos t, sin t), t ∈ [−2π, 2π] y la
~ (t) = (cos t, sin t, 0), t ∈ [0, 2π]. Pon etiqueta a los ejes coordenados.
circunferencia µ

41
Práctica 4

Interpolación y aproximación de
funciones

La interpolación, que es el cálculo de valores para una función tabulada en puntos


que no aparecen en la tabla, es, históricamente, una tarea fundamental. Los nom-
bres de muchos matemáticos famosos están asociados con métodos de interpolación:
Newton, Gauss, Bessel, Stirling, Chebyshev, etc.
Aunque hoy en dı́a, los estudiantes rara vez tiene que interpolar para valores de
senos, logaritmos y demás funciones no algebraicas a partir de tablas, sus calculado-
ras y computadoras usan estas técnicas para calcular esos valores y creemos que es
importante que los estudiantes entiendan cómo funcionan las calculadoras. Además,
estos métodos resultan interesantes ya que constituyen la base para muchos proce-
dimientos que estudiarán, como los de derivación e integración numérica, resolución
de ecuaciones diferenciales, etc. Por otro lado, la interpolación con polinomios sirve
como una excelente introducción para ciertas técnicas de aproximación de curvas
suaves, técnicas que resultan muy útiles a los alumnos de ingenierı́a.

4.1. Polinomio interpolador de Lagrange


En general, dados un entero positivo n, los n + 1 puntos x0 , x1 , ..., xn (llama-
dos nodos), distintos dos a dos, en la recta real y los valores correspondientes
f (x0 ), f (x1 ), ..., f (xn ) de una función, el problema de interpolación polinomial con-
siste en encontrar un polinomio de grado ≤ n, tal que

pn (xi ) = f (xi ), i = 0, 1, ..., n

Este problema tiene solución única; el polinomio que satisface estos requisitos se
conoce como polinomio interpolador o interpolante de Lagrange de la función f en
los puntos x0 , x1 , ..., xn .
Ejemplo 4.1. Calcular el polinomio de interpolación que pasa por (1, 1), (2, 0),
(4, 0), (5, 1), (6, 1.5).
Solución: Un polinomio que pasa por cinco puntos debe ser de grado cuatro,
luego se han de encontrar los valores de ai en el polinomio:

42
y = a0 + a1 x + a2 x2 + a3 x3 + a4 x4
para que pase por los puntos exigidos. Esto es equivalente a resolver un sistema
de ecuaciones lineales, donde ai son las incognitas.
datos = 881, 1<, 82, 0<, 84, 0<, 85, 1<, 86, 1.5<<;
x = 81, 2, 4, 5, 6<;
y = 81, 0, 0, 1, 1.5<;
sol = Solve@Table@y@@iDD Š a0 + a1 * x@@iDD + a2 * Hx@@iDDL ^ 2
+ a3 * Hx@@iDDL ^ 3 + a4 * Hx@@iDDL ^ 4, 8i, 1, 5<D, 8a0, a1, a2, a3, a4<D;
pol@t_D = Sum@sol@@1DD@@iDD@@2DD * t ^ Hi - 1L, 8i, 1, 5<D

1.5 + 0.275 t - 1.09583 t2 + 0.35 t3 - 0.0291667 t4

Se pueden dibujar los puntos y el polinomio interpolador, observando que el


polinomio pasa por todos los puntos.
plot1 =
ListPlot@datos, PlotStyle ® 8Hue@0.0D, PointSize@0.01D<, DisplayFunction ® IdentityD;
plot2 = Plot@pol@tD, 8t, 1, 6<, DisplayFunction ® IdentityD;
Show@plot1, plot2, PlotRange ® AllD
1.5

1.0

0.5

2 3 4 5 6

El método anterior es laborioso. Se puede encontrar el polinomio interpolador P


más fácilmente si en vez de buscarse en potencias de x, se busca como una combi-
nación lineal P (x) = b0 `0 (x) + b1 `1 (x) + · · · + bn `n (x), donde `j (x) son polinomios
de grado n definidos como
(x − x0 ) . . . (x − xj−1 )(x − xj+1 ) . . . (x − xn )
`j (x) = .
(xj − x0 ) . . . (xj − xj−1 )(xj − xj+1 ) . . . (xj − xn )
Se cumple, obviamente, que

`j (xj ) = 1 y `j (xk ) = 0, si j 6= k

de donde se obtiene que bi = f (xi ), para todo i = 0, 1, . . . n. Y ası́,

P (x) = f (x0 )`0 (x) + f (x1 )`1 (x) + · · · + f (xn )`n (x).

Notar que esta construcción no precisa de la resolución de sistemas lineales. Resol-


vemos el ejemplo anterior con este método:

43
datos = 881, 1<, 82, 0<, 84, 0<, 85, 1<, 86, 1.5<<;
x = 81, 2, 4, 5, 6<;
y = 81, 0, 0, 1, 1.5<;
l@j_, t_D :=
Product@Ht - x@@iDDL  Hx@@jDD - x@@iDDL, 8i, Complement@Range@Length@xDD, 8j<D<D
polLagrange@t_D := Sum@y@@jDD * l@j, tD, 8j, 1, Length@xD<D
Print@polLagrange@tDD

H2 - tL H4 - tL H5 - tL H6 - tL +
1
60

H6 - tL H-4 + tL H-2 + tL H-1 + tL + 0.0375 H-5 + tL H-4 + tL H-2 + tL H-1 + tL


1
12
Evidentemente, este polinomio coincide con el calculado anteriormente lo cual se
observa si lo expresamos en potencias de t

Expand@polLagrange@tDD

1.5 + 0.275 t - 1.09583 t2 + 0.35 t3 - 0.0291667 t4

Ejercicio 4.1. La tensión de vapor (en kilopascales) del helio lı́quido a varias tem-
peraturas (en grados Kelvin) es
T P
3.0 24.0
3.1 27.8
3.2 32.0
3.3 36.5
Aproxima la tensión para 3.4 K usando interpolación cuadrática (últimos 3 no-
dos) y cúbica. El valor verdadero es 41.5.

Ejercicio 4.2. Usa la siguiente tabla de valores de la función Γ de Euler para


hallar una aproximación al valor de Γ(1,23) mediante interpolación cúbica. El valor
verdadero es 0.91075.

x Γ(x)
1.0 1.00000
1.1 0.95135
1.2 0.91817
1.3 0.89747

4.2. Polinomio interpolador de Newton


Otra forma de calcular el polinomio interpolador es debida a Newton. La idea
básica es construirlo por recurrencia. Primero se construye el polinomio de grado
6 0 que interpola a la función en el nodo x0 ; a continuación el polinomio de grado
6 1 que interpola en x0 y x1 ; y ası́ sucesivamente. La forma final del polinomio se
expresará

P (x) = c0 + c1 (x − x0 ) + c2 (x − x0 )(x − x1 ) + · · · + cn (x − x0 )(x − x1 ) · · · (x − xn−1 ),

44
donde los coeficientes ci se calcularán mediante las llamadas diferencias divididas,
definidas por recurrencia como sigue:
f [x1 , . . . , xi ] − f [x0 , . . . , xi−1 ]
ci = f [x0 , . . . , xi ] ≡ , i = 0, 1, . . . , n.
xi − x0
La ventaja del polinomio interpolador de Newton es la sencillez de su formu-
lación, junto con el hecho de que al añadir un nodo más, pueden aprovecharse los
cálculos realizados. El comando InterpolatingPolynomial[] utiliza el algoritmo
de diferencias divididas para calcular el polinomio interpolador. Ası́, con los datos
del ejemplo anterior, se obtiene
polNewton@t_D = InterpolatingPolynomial@datos, tD

1.5 + H0.1 + H0.216667 + H-0.0291667 - 0.0291667 H-2 + tLL H-4 + tLL H-1 + tLL H-6 + tL

que al expresarlo en potencias de t coincide con los anteriores.

Ejercicio 4.3. Dada la tabla siguiente para la función f (x) = ex , encuentra los

valores aproximados de 3 e por interpolación lineal y cúbica.

x 0,0 0,2 0,4 0,6


f (x) 1,0000 1,2214 1,4918 1,8221
Ejercicio 4.4. Dados los puntos

x 0,5 −0,2 0,7 0,1 0,0


f (x) −1,1518 0,7028 −1,4845 −0,1494 0,1353

1. Interpolar con un polinomio cúbico que pase por los cuatro primeros puntos y
utilizarlo para calcular f (0,2).

2. Repite el paso anterior, pero utilizando ahora los últimos cuatro nodos. Co-
menta la diferencia.

4.3. Cota de error en la interpolación


Un aspecto importante a considerar es la calidad de nuestra interpolación, es
decir el error que se comete cuando se aproxima un punto distinto de los nodos.

Teorema 4.3.1. Si f ∈ Cn+1 (a, b) y xi ∈ (a, b) para i = 0, 1, ..., n, entonces, para


todo x ∈ (a, b) se verifica

f n+1 (ξx )
f (x) − pn (x) = (x − x0 ) (x − x1 ) ... (x − xn ) , ξx ∈ (a, b)
(n + 1)!

Corolario 1. Con las hipótesis del teorema anterior, si es |f n+1 (t) | 6 K, para todo
t ∈ [a, b], entonces
K
|f (x) − pn (x)| 6 |x − x0 | |x − x1 | . . . |x − xn |
(n + 1)!

45
De la fórmula anterior no se puede deducir que los polinomios de mayor grado
correspondan a una interpolación mejor. De hecho, esta interpolación es peor al
aumentar el grado debido al cáracter oscilatorio de los polinomios de grado alto. El
error tiene una dependencia directa de la derivada de orden n + 1 y de la proximidad
de los puntos a los nodos.

Ejercicio 4.5. Hacer una estimación del error cometido en las aproximaciones de
los ejercicios 4.3 y 4.4.

4.3.1. El efecto Runge


Si se considera la sucesión {pn (x)} de polinomios de interpolación obtenida au-
mentando indefinidamente la cantidad de nodos de interpolación, se observa que al
crecer n, además de aumentar el grado del polinomio y el número de operaciones que
se han de realizar, se acentúa la pérdida de la precisión en los extremos del intervalo
donde se interpola.
1
Ejercicio 4.6. La función f (x) = , se conoce como función de Runge y
1 + x2
fue la utilizada por Runge para demostrar el efecto que lleva su nombre. Calcula
los polinomios interpoladores de grados 4,6 y 10, de dicha función en el intervalo
[−5, 5], con puntos equiespaciados. Dibuja las gráficas de la función y sus polinomios
interpoladores y comenta el resultado.

4.4. Interpolación con un splin cúbico


Una solución al problema de la oscilación de los polinomios de grado alto consiste
en subdividir el intervalo en intervalos más pequeños e interpolar un número menor
de nodos con polinomios de grado menor, se suele utilizar la interpolación mediante
polinomios cúbicos. Pero este método también es problemático porque las uniones
de los polinomios no tienen una pendiente continua. Para impedir este problema son
de utilidad los tipos especiales de polinomios denominados splines.
Por otro lado, el estudio de los splines conduce a algunas otras formas especiales
de polinomios (curvas de Bézier y splines-B) que no se interpolan, es decir, no pasan
exactamente por todos los puntos de la función, pero que son de mucha utilidad para
trazar curvas suaves. Aunque los splines pueden ser de cualquier grado, usaremos
los de grado tres por ser los más conocidos.
El ajuste de una curva mediante splines cúbicos exige la creación de una sucesión
de polinomios cúbicos sobre intervalos sucesivos de los datos con la condición de que
la pendiente de los polinomios debe coincidir en los nodos en que se unen. Ası́, se
escribe la ecuación para un polinomio cúbico, gi (x) , en el i-ésimo intervalo, entre
los puntos (xi , yi ) y (xi+1 , yi+1 ) y la función splin cúbico que se desea es de la forma

g (x) = gi (x) , x ∈ [xi , xi+1 ]

y cumple las condiciones:

1. gi (xi ) = yi , i = 0, 1, ..., n − 1, gn−1 (xn ) = yn ; (interpola los nodos)

46
2. gi (xi+1 ) = gi+1 (xi+1 ) , i = 0, 1, ..., n − 2; (para que sea continua)

3. gi0 (xi+1 ) = gi+1


0 (xi+1 ) , i = 0, 1, ..., n − 2; (para que sea de clase C1 )

4. gi00 (xi+1 ) = gi+1


00 (x
i+1 ) , i = 0, 1, ..., n − 2. (para que sea de clase C2 )

De donde se obtiene

yi+1 = ai (x − xi+1 )3 + bi (x − xi+1 )2 + ci (x − xi+1 ) + di =


= ai h3i + bi h2i + ci hi + di , i = 0, 1, ..., n − 1.

Si se hace Si = gi00 (xi ) y Sn = gn−1


00 (xn ) , los valores de los coeficientes vienen dados
por

Si+1 − Si Si yi+1 − yi 2hi Si + hi Si+1


ai = , bi = , ci = − , di = yi
6hi 2 hi 6
Como los nodos extremos no tienen ninguna condición hay distintas aproxima-
ciones, la más sencilla es la lineal S0 = Sn = 0.
Mathematica tiene esta aproximación incorporada en el paquete
NumericalMath`Spline`

Ejemplo 4.2. Veamos como interpolar mediante un splin cúbico la siguiente tabla
de datos
0 1 2 0
0 0 2 1

Se necesita cargar el paquete NumericalMath1 que puede hacerse con el comando


Needs@"NumericalMath`"D

Introducimos los datos:


puntos = 880, 0<, 81, 0<, 82, 2<, 80, 1<<;

Ahora podemos hacer uso de la función SplineFit que calcula una curva pa-
ramétrica (de clase C 1 ) que interpola los puntos dados. Esta curva está formada
por la unión de polinomios de grado 3 y puede ser representada por el comando
ParametricPlot como se ve a continuación:
spline = SplineFit@puntos, CubicD

SplineFunction@Cubic, 80., 3.<, <>D

1
En la versión 6 de Mathematica el paquete se llama Splines

47
Show@Graphics@Point@puntosDD,
ParametricPlot@spline@tD, 8t, 0, 3<D, Axes ® True, PlotRange ® AllD

2.0

1.5

1.0

0.5

0.5 1.0 1.5 2.0

Observa que no conocemos la expresión de la función interpolante aunque pode-


mos calcular el valor en un nodo, dando valor al parámetro. El valor del parámetro
en 0 es el primer punto, en 1 el segundo y ası́ sucesivamente. Nótese que en este caso
los nodos xi pueden estar repetidos y la curva puede autointersectarse.
spline@2D

82, 2<

spline@1D

81, 0<

Ejemplo 4.3. Veamos un ejemplo de una curva con autointersecciones.


datos = 880, 0<, 81, 0<, 82, 2<, 80, 1<, 82, 1<, 81, 2<<;
spline2 = SplineFit@datos, CubicD;
Show@Graphics@Point@datosDD,
ParametricPlot@spline2@tD, 8t, 0, 5<D, Axes ® True, PlotRange ® AllD

2.0

1.5

1.0

0.5

0.5 1.0 1.5 2.0

48
4.5. Ejercicios
Ejercicio 4.7. Los datos de la siguiente tabla provienen de observaciones astronómi-
cas de un tipo de estrella variable denominada variable cefeida y representan mag-
nitudes en su variación aparente con el tiempo:

Tiempo 0.0 0.2 0.3 0.4 0.5 0.6 0.7 0.8 1.0
Magnitud aparente 0.302 0.185 0.106 0.093 0.240 0.579 0.561 0.468 0.302
Dibujar una curva de interpolación usando

1. un polinomio interpolador,

2. una aproximación de splines cúbicos.

Compara los resultados que se obtienen con las distintas aproximaciones para
t=0.25

Ejercicio 4.8. En un experimento se obtuvieron los siguientes datos

t -1 -0.96 -0.86 -0.79 0.22 0.5 0.930


y -1 -0.151 0.894 0.986 0.895 0.5 -0.306

1. Dibuja los puntos y la curva de interpolación de forma intuitiva.

2. Calcula y dibuja el polinomio de sexto grado que interpola estos puntos.

3. Dibuja una curva de interpolación usando splines cúbicos.

4. Compara los resultados.

5. ¿Qué valores obtienes para t = 0,90 con las distintas curvas de interpolación
obtenidas?

Ejercicio 4.9. Los datos siguientes representan la potencia diaria, en megawatts,


generada por una central eléctrica de servicio regional, durante el mes de agosto de
1998, y la temperatura atmosférica, en grados Fahrenheit, registrada a las 11 a.m.
en una localidad cercana:
Temperatura 95 96 97 99 94
Potencia 153.4 158.5 159.6 160.0 154.0

1. Utiliza tres puntos para calcular un polinomio de interpolación de grado dos


que puedas utilizar para interpolar en T = 98.

2. Utiliza todos los puntos para calcular un polinomio de interpolación de grado


cuatro.

3. Utiliza los dos resultados anteriores para calcular el valor de P cuando T = 98.
¿Qué resultado consideras más correcto?

49
Práctica 5

Integración numérica

Con frecuencia surge la necesidad de evaluar la integral definida de una función


que no tiene una primitiva expresable en términos de funciones elementales, en
cuyo caso es preciso recurrir a técnicas de evaluación aproximadas. En este punto,
varias posibilidades son factibles. Una de ellas es acudir a programas de cálculo
simbólico de propósito general, tales como Mathematica, el cual incorpora también
comandos que evalúan integrales de forma aproximada por medio de algoritmos
normalmente ocultos al usuario. Otra posibilidad consiste en usar las funciones y
programas contenidos en bibliotecas de cálculo numérico, basados en algoritmos
muy eficientes y que ofrecen excelentes prestaciones al usuario, tales como NAG e
IMSL. Una tercera opción es desarrollar, a partir de un algoritmo dado, un programa
propio que implemente dicho algoritmo sobre un ordenador. En esta práctica, por
medio del programa Mathematica consideraremos la tercera posibilidad. Para ello
empezaremos estudiando algunos métodos para el cálculo aproximado de integrales
Z b
I= f (x)dx, (5.1)
a

donde f es una función integrable en el intervalo acotado (a, b). Por razones históri-
cas, el cálculo de integrales se conoce como cuadratura, reservándose el término
integración para la resolución de ecuaciones diferenciales.
¿Por qué usar cuadratura numérica en vez de calcular (5.1) por la regla de Barrow
(teorema fundamental del cálculo)? Varias pueden ser las razones:

Es posible que no se disponga de la expresión analı́tica del integrando f , sino


sólo de una tabla de valores de f o de una subrutina que permita evaluar f en
cualquier punto x.

Aunque se conozca la expresión analı́tica de f y ésta sea una función elemental,


la primitiva de f quizá no sea elemental. Como ejemplo, podemos citar la
función f (x) = exp(−x2 ).

Aunque la primitiva de f sea elemental, encontrarla puede requerir de algún


procedimiento particularmente ingenioso (por ejemplo, un cambio de variable),
no siempre fácil de descubrir.

50
Aunque la primitiva sea elemental y obtenible sin recurrir a ideas más o menos
ingeniosas, encontrar esa primitiva puede ser un proceso largo y tedioso, o
requerir técnicas numéricas más complejas que las que se necesitan para hallar
(5.1) de modo directo. Por ejemplo, si f es una función racional la primitiva
se puede encontrar aplicando técnicas sistemáticas, pero que requieren hallar
todos los ceros del denominador. Ahora bien, esta tarea en general hay que
llevarla a cabo mediante aproximaciones numéricas que son más costosas que
aproximar (5.1) directamente.

5.1. Reglas de cuadratura


La mayor parte de los métodos numéricos aproximan (5.1) por una combinación
lineal de valores de f :
I ≈ IN +1 (f ) = α0 f (x0 ) + · · · + αN f (xN ). (5.2)
Elegidos y fijados N ≥ 0, αi y xi , la expresión (5.2) asocia a cada función f un
número real y constituye lo que se llama una regla de cuadratura. Los xi se llaman
abscisas o nodos de la regla y supondremos que son dos a dos distintos. Los αi se
denominan pesos o coeficientes de la regla.
Hay cuatro reglas particularmente sencillas y que introducimos a continuación.
La regla de los rectángulos
I R (f ) = (b − a)f (a). (5.3)
La regla del punto medio
a+b
I P M (f ) = (b − a)f (c), c= . (5.4)
2
La regla de los trapecios
b−a b−a
I T (f ) = f (a) + f (b). (5.5)
2 2
La regla de Simpson
b−a 4(b − a) b−a a+b
I S (f ) = f (a) + f (c) + f (b), c= . (5.6)
6 6 6 2
Decimos que una regla de cuadratura (5.2) tiene grado de exactitud M ≥ 0 si
halla exactamente la integral de cada polinomio de grado ≤ M (i.e., I(f ) = IN +1 (f )
para cada polinomio de grado ≤ M ), pero no halla exactamente la integral de algún
polinomio de grado M +1. En principio, parece razonable suponer que es conveniente
considerar reglas de grado de exactitud alto.
Es fácil probar que el grado de exactitud de las reglas de cuadratura introducidas
anteriormente es el siguiente:
Regla de los rectángulos. Grado de exactitud: 0.
Regla del punto medio. Grado de exactitud: 1.
Regla de los trapecios. Grado de exactitud: 1.
Regla de Simpson. Grado de exactitud: 3.

51
5.2. Obtención de reglas de cuadratura
Supondremos ahora que en (5.2) hemos elegido N y los nodos xi y tratemos de
determinar de manera razonable los pesos αi . Para resolver este problema, varias
son los procedimientos posibles. Aquı́ analizaremos dos de ellos.

5.2.1. El método interpolatorio


Sustituyamos el integrando f por el polinomio R b P de grado ≤ N que coincide
con él en los N + 1 nodos xi . Podremos tomar a P (x)dx como aproximación al
verdadero valor (5.1), es decir, definir una regla mediante
Z b
IN +1 (f ) = I(P ) = P (x)dx. (5.7)
a

Si expresamos P en la forma del polinomio interpolador de Lagrange (Práctica 4),


tendremos
Z b Z b
IN +1 (f ) = f (x0 ) `0 (x)dx + · · · + f (xN ) `N (x)dx,
a a

con lo que los pesos buscados son


Z b
αi = `i (x)dx, i = 0, . . . , N (5.8)
a

Fijémonos en que el segundo miembro de (5.8) sólo depende de las abscisas y es por
tanto independiente del integrando f . La regla (5.2) con los pesos (5.8) se llama regla
interpolatoria correspondiente a las abscisas xi . El siguiente teorema nos garantiza
una cota inferior para su grado de exactitud.

Teorema 5.2.1. Dados N ≥ 0 y N + 1 abscisas xi dos a dos distintas, la corres-


pondiente regla de cuadratura interpolatoria (5.2), (5.8) tiene grado de exactitud
≥ N.

La demostración de este teorema es sencilla: si el integrando f es un polinomio


de grado ≤ N entonces su polinomio interpolador P es idénticamente f y la igualdad
(5.7) revela que IN +1 (f ) = I(f ).
Es fácil ver que la regla interpolatoria con N = 0 basada en la abscisa x0 = a
es precisamente la del rectángulo (5.3), dado que en este caso el interpolante es la
constante f (a), cuya integral vale
Z b
f (a)dx = (b − a)f (a).
a

Del mismo modo, la regla interpolatoria con N = 0 basada en la abscisa x0 = c =


(a + b)/2 resulta ser la del punto medio.

52
5.2.2. El método de coeficientes indeterminados
Está basado en la observación de que la regla (5.2) tiene grado de exactitud ≥ k
si y sólo si IN +1 (f ) = I(f ) cuando f (x) = 1, x, . . . , xk , es decir,

α0 + α1 + ··· + αN = b−a
α0 x0 + α1 x1 + ··· + αN xN = (b2 − a2 )/2
.. .. .. .. (5.9)
. + . + ··· + . = .
α0 xk0 + α1 xk1 + ··· + αN xkN = (bk+1 − ak+1 )/(k + 1)

Este es un sistema de k + 1 ecuaciones para los N + 1 coeficientes αi . Si se pretende


alcanzar grado ≥ N , al final tendremos tantas ecuaciones como coeficientes. Además,
como la matriz de coeficientes es de Vandermonde con abscisas dos a dos distintas,
el sistema tiene solución única. Ası́ se demuestra el siguiente resultado.

Teorema 5.2.2. Dados N ≥ 0 y N + 1 abscisas xi dos a dos distintas, hay una


única elección de pesos αi para los cuales la regla (5.2) tiene grado de exactitud ≥ N .
Los pesos pueden hallarse resolviendo el sistema (5.9) con k = N .

Teorema 5.2.3. Dados N ≥ 0 y N + 1 abscisas xi dos a dos distintas, la correspon-


diente regla interpolatoria es la única con esas abscisas que tiene grado de exactitud
≥ N . Los pesos pueden hallarse resolviendo el sistema (5.9) con k = N o por la
fórmula (5.8).

5.3. Error de cuadratura


Nos interesa ahora estudiar el error EN +1 (f ) = I(f ) − IN +1 (f ) que se comete al
cambiar el verdadero valor de una integral por la aproximación (5.2). Resumiendo un
tratamiento que excede con mucho los objetivos de este trabajo, podemos concluir
lo siguiente para las reglas de cuadratura que venimos manejando.
La regla de los rectángulos. Si f tiene derivada continua en [a, b], entonces existe
un punto η ∈ [a, b] para el que

(b − a)2 0
E R (f ) = f (η). (5.10)
2
La regla del punto medio. Si f tiene dos derivadas continuas en [a, b], entonces existe
un punto η ∈ [a, b] para el que

(b − a)3 00
E P M (f ) = f (η). (5.11)
24
La regla de los trapecios. Si f tiene dos derivadas continuas en [a, b], entonces existe
un punto η ∈ [a, b] para el que

(b − a)3 00
E T (f ) = − f (η). (5.12)
24

53
La regla de Simpson. Si f tiene cuatro derivadas continuas en [a, b], entonces existe
un punto η ∈ [a, b] para el que

(b − a)5 (iv)
E S (f ) = − f (η). (5.13)
2880
El punto η depende obviamente tanto de la función a integrar f como de la regla
considerada. Obsérvese que el orden de la derivada M + 1 que aparece es una unidad
superior al grado de exactitud M .

5.4. Reglas compuestas


Las reglas que hemos considerado hasta ahora (rectángulos, punto medio, tra-
pecios, Simpson) son de utilidad limitada. Se observa de (5.10)-(5.13) que para que
el error al usarlas sea pequeño es preciso que la longitud b − a del intervalo de inte-
gración sea pequeña con respecto al tamaño de las derivadas del integrando. Ahora
bien, puede ocurrir que, habiendo aproximado una integral por ejemplo con la regla
de Simpson, nos encontremos con que el error es demasiado grande para nuestras
necesidades.
En ese caso, una primera posibilidad (poco útil en la práctica) consistirı́a en
construir por uno de los métodos que vimos anteriormente una nueva regla cuyo
grado de exactitud sea más alto que el de la regla de Simpson.
Otra idea, mucho más fructı́fera, consiste en introducir una partición del inter-
valo,
∆ : a = x0 < x1 < x2 < · · · < xN = b,
escribir Z b Z x1 Z xN
f (x)dx = f (x)dx + · · · + f (x)dx (5.14)
a x0 xN −1

y aproximar cada una de las integrales en los subintervalos por la regla de Simpson.
Ası́ obtendremos una aproximación

x1 − x0 4(x1 − x0 ) x1 − x0
I SC (f ) = f (x0 ) + f (x1/2 ) + f (x1 ) (5.15)
6 6 6
+···
xN − xN −1 4(xN − xN −1 ) xN − xN −1
+ f (xN −1 ) + f (xN −1/2 ) + f (xN )
6 6 6
donde hemos denotado xi−1/2 = (xi−1 +xi )/2, i = 1, . . . , N . A esta regla de cuadratu-
ra la llamaremos regla de Simpson compuesta relativa a la partición ∆. Observemos
que ésta es una regla de la forma (5.2) cuyas abscisas son los puntos de la partición
y los puntos medios de los subintervalos de la partición. Si los puntos de ésta están
igualmente espaciados con longitud h = (b − a)/N y denotando por simplicidad
fi ≡ f (xi ), la regla de Simpson compuesta se puede escribir de forma equivalente
como  
h X X
I SC = f0 + fN + 4 fm + 2 fm 
3 m par
m impar

54
Si en vez de aproximar las integrales del segundo miembro de (5.14) por la regla
de Simpson, lo hacemos por las reglas del rectángulo, punto medio o trapecios,
obtenemos las reglas del rectángulo compuesta, punto medio compuesta o trapecios
compuesta relativas a la partición ∆.

I RC (f ) = (x1 − x0 )f0 + · · · + (xN − xN −1 )fN −1 . (5.16)

I P M C (f ) = (x1 − x0 )f (x1/2 ) + · · · + (xN − xN −1 )f (xN −1/2 ). (5.17)

x1 − x0 x1 − x0
I T C (f ) = f (x0 ) + f (x1 ) (5.18)
2 2
+···
xN − xN −1 xN − xN −1
+ f (xN −1 ) + f (xN )
2 2
En términos de h, ésta última también se escribe como
h
I T C (f ) = (f0 + 2f1 + 2f2 + · · · + 2fN −1 + fN ).
2

5.4.1. Errores en las reglas compuestas


Cuando se usa una regla compuesta el error cometido al cuadrar la integral en
[a, b] es la suma de los errores que se cometen en cada una de las N cuadraturas co-
rrespondientes a los subintervalos [xi−1 , xi ]. Por ejemplo, para la regla del rectángulo
compuesta, restando (5.16) de (5.14) tenemos
Z x1
E RC (f ) = I(f ) − I RC (f ) = f (x)dx − (x1 − x0 )f (x0 )
x0
+ ·Z· ·
xN
+ f (x)dx − (xN − xN −1 )f (xN −1 ).
xN −1

Usando la fórmula (5.10) podemos escribir para integrandos con derivada continua
en [a, b]
(x1 − x0 )2 0 (xN − xN −1 )2 0
E RC (f ) = f (η1 ) + · · · + f (ηN ),
2 2
siendo los ηi puntos de [xi−1 , xi ], i = 1, . . . , N . Se puede demostrar que existe un
η ∈ [a, b] tal que
1
E RC (f ) = [(x1 − x0 )2 + · · · + (xN − xN −1 )2 ]f 0 (η).
2
A partir de esta expresión se puede obtener una cota como sigue. Tomemos valores
absolutos y mayoremos cada (xi − xi−1 )2 por h(xi − xi−1 ), con h = máxi (xi − xi−1 ).
Como
(x1 − x0 ) + · · · + (xN − xN −1 ) = xN − x0 = b − a,
el resultado es
1
|E RC (f )| ≤ (b − a)hK1 , (5.19)
2

55
con K1 una cota del valor absoluto de la derivada de f en [a, b]. De aquı́ se deduce
la convergencia: al hacer la partición más y más fina el error de la cuadratura tiende
a cero. Además, la convergencia es de primer orden: dividir por dos el diámetro de
la partición h divide por dos la cota del error.
De la misma forma, se obtiene para funciones con dos derivadas continuas en
[a, b],
1
|E P M C (f )| ≤ (b − a)h2 K2 , (5.20)
24
1
|E T C (f )| ≤ (b − a)h2 K2 , (5.21)
12
y para funciones con cuatro derivadas continuas en [a, b],
1
|E SC (f )| ≤ (b − a)h4 K4 , (5.22)
2880
siendo Ki una cota del valor absoluto de la derivada i-ésima en [a, b]. Estas fórmulas
muestran la convergencia de las respectivas reglas: cuadrática para la regla del punto
medio y la de los trapecios y cuártica para la regla de Simpson. Obsérvese que en
general la convergencia es de orden M + 1 para una regla compuesta basada en una
simple de grado de exactitud M .

5.5. Algoritmo de los métodos en Mathematica


Utilizando el programa Mathematica es fácil construir procedimientos para cal-
cular integrales de forma numérica aproximada. Por ejemplo, la regla del trapecio
se puede implementar ası́:
trapecios[f_, {var_, a_, b_, n_}] :=
Module[{g, h, x, y},
g = Function[var, f];
h = (b - a)/n;
x = Table[a + i h, {i, 0, n}];
y = Table[g[x[[i]]], {i, 1, n + 1}];
h/2 (y[[1]] + y[[n + 1]] +
2 Sum[y[[i]], {i, 2, n}])
]
En este algoritmo utilizamos la función Module, la cual declara las variables
x, y, h como locales, de forma que si se han empleado en la misma sesión de
Mathematica, sus valores no influyen en el resultado. La función Module tiene dos
argumentos: el primero es una lista de las variables locales y el segundo corresponde
al valor que queremos dar a las variables locales y por último la expresión que
queramos calcular. Las expresiones del segundo argumento deben ir separadas por
punto y coma (;).
A continuación aproximamos, con 20 subintervalos, la integral definida
Z π
sin x dx
0

56
N[trapecios[Sin[x], {x, 0, Pi, 20}]]

También podemos aproximar una integral doble, por ejemplo


Z 1Z 1p
1 − y 2 dy dx
0 x

N[trapecios[trapecios[Sqrt[1 - y^2],
{y, x, 1, 30}], {x, 0, 1, 30}]]

El algoritmo del método de Simpson se puede implementar de la siguiente forma:

simpson[f_, {a_, b_, n_}] :=


Module[{x, y, h},
h = (b - a)/n;
x = Table[a + i * h, {i, 0, n}];
y = Table[f[x[[i]]], {i, 1, n + 1}];
h/3 * ( 2 Sum[y[[i]], {i, 3, n - 1, 2}] +
4 Sum[y[[i]], {i, 2, n, 2}] +
y[[1]] + y[[n + 1]] )
]

Utilizando este algoritmo podemos aproximar cualquier integral definida:

f[x_] = Sin[x];
N[simpson[f, {0, Pi, 20}]

Aquı́ hemos tomado una partición del intervalo [0, π] con 20 subintervalos.
También se pueden aproximar integrales múltiples con la fórmula de Simpson:

g[y_] = Sqrt[1 - y^2];


f[x_] = simpson[g, {x, 1, 30}];
N[simpson[f, {0, 1, 30}]]

Mathematica dispone de la función NIntegrate para aproximar numéricamente


una integral. Esta función utiliza un algoritmo adaptivo, que divide recursivamente
la región de integración de manera que se obtenga una precisión prefijada en el
resultado final.

f[x_] = Sin[x];
NIntegrate[f[x], {x, 0, Pi}]

La función NIntegrate también permite obtener aproximaciones numéricas para


integrales dobles:

NIntegrate[Sqrt[1 - y^2], {x, 0, 1}, {y, x, 1}]

57
5.6. Ejercicios
Ejercicio 5.1. Usar la regla de los trapecios con h = 0,5 para evaluar
Z 2
I= (x2 − 3x + 4)dx
0

y, mediante el cálculo exacto de la integral, examinar la estimación del error dada


por la fórmula (5.21).
Ejercicio 5.2. Utilizar la regla de los trapecios y la regla de Simpson compuestas
con 10 puntos para calcular las siguientes integrales:
Z π
1. sin x dx
0
Z π
sin x
2. dx
π x
2

Ejercicio 5.3. Calcular las integrales siguientes utilizando las reglas de cuadratura
estudiadas.
Z 1Z 1p
1. 1 − y 2 dy dx
0 x
Z 0,5 Z x3
2. ey/x dy dx
0,1 x4

Ejercicio 5.4. Evaluar la integral


Z 1
1
dx
0 1 + x2
(i) usando la regla del trapecio; (ii) usando la regla de Simpson; (iii) usando la regla
del punto medio, todas con 10 puntos. Evaluar también la integral analı́ticamente y
comparar los resultados.
Ejercicio 5.5. Integrar la función
f (x) = x2 (x2 − 2) sin x
entre 0 y π/2 con el método de los trapecios con n = 1, . . . , 14 subdivisiones del in-
tervalo. Comparar con el resultado exacto y hacer una tabla con los errores relativos.
Ejercicio 5.6. Supongamos que queremos integrar la función tabulada que se mues-
tra a continuación:

x f (x) x f (x)
1.6 4.953 2.8 16.445
1.8 6.050 3.0 20.086
2.0 7.389 3.2 24.533
2.2 9.025 3.4 29.964
2.4 11.023 3.6 36.598
2.6 13.464 3.8 44.701

58
sobre el intervalo comprendido entre x =1.8 y x =3.4. Emplead para ello la regla
de los trapecios y el método de Simpson. ¿Dan resultados comparables?

Ejercicio 5.7. Queremos calcular aproximadamente la integral


Z 1
exp(−x2 /2)
√ dx,
0 2π
cuyo integrando carece de primitiva elemental. El resultado verdadero es 0.3413447360.
Usa la regla de los trapecios en una partición uniforme de diámetro h para h = 1/2k ,
k = 1, 2, 3, 4 y muestra los resultados en forma de tabla. Dicha tabla ha de contener
el valor de h, el resultado aproximado obtenido, el error cometido y el error dividido
por h2 . Observa cómo decrece el error al refinar la partición: al dividir entre dos el
diámetro el error se divide aproximadamente por cuatro (ecuación (5.21)).

Ejercicio 5.8. Repite el cálculo, pero ahora con la regla de Simpson. Observa que
no sólo los errores para cada h dado son más pequeños, sino que la reducción del
error con h es ahora mucho más rápida que en la tabla anterior. Al dividir h entre
dos, ¿por cuánto lo hace aproximadamente el error? (ayuda: muestra en la última
columna de la tabla el error dividido por h4 ). ¿Es esto de esperar?

Ejercicio 5.9. Es muy importante observar que en los dos problemas anteriores es
injusto compara los errores de los trapecios y Simpson correspondientes a un valor
de h dado. La regla de Simpson con h = 0,0625 precisa evaluar el integrando en 33
puntos; la de los trapecios con el mismo valor de h sólo evalúa el integrando en 17
puntos, aproximadamente la mitad. Los métodos numéricos deben compararse por
trabajo para un error deseado o por error para un trabajo dado. Una manera ilustra-
tiva de comparar los resultados de las dos tablas anteriores es construir una gráfica
de eficiencia. Se trata de una representación doblemente logarı́tmica: en cada eje, las
sucesivas potencias de 10 aparecen a intervalos de longitud constante. En ordenadas
se representa el error, y en las abscisas el trabajo medido en número de evaluaciones
del integrando. Con las tablas obtenidas en los dos ejercicios precedentes, elabora el
correspondiente diagrama de eficiencia. Has de obtener dos curvas (una para la regla
de los trapecios y otra para la regla de Simpson) que son aproximadamente lı́neas
rectas de pendientes −2 y −4 ¿por qué? Para un trabajo dado, la regla de Simpson
da un error menor que la de los trapecios.

59
Práctica 6

Sucesiones y series

En esta práctica utilizaremos el programa Mathematica para ilustrar mediante


algunos comandos de cálculo de Mathematica, ası́ como con algunos procedimientos
gráficos, los conceptos de lı́mite de una sucesión, y los de polinomio de Taylor y de
serie de Taylor de una función de clase C∞ . En el camino, aprenderemos algunos
comandos y técnicas de Mathematica que tienen interés en sı́ mismo.

6.1. Sucesiones
Para nuestro estudio de sucesiones de números reales necesitamos conocer los
siguientes aspectos de Mathematica:

(1) Definir funciones.

(2) El comando Table.

(3) El comando ListPlot.

(4) El comando FullSimplify.

(5) El comando Limit.

(6) El comando Solve.

1
Ejemplo 6.1. Estudiar la sucesión an = .
n2 +1
Solución. Definimos la sucesión como una función

a[n ]:= 1/(n^2+1)

lo que nos permite obtener cualquier término de la sucesión

1
a[30]=
901

60
y generar una tabla con algunos de sus términos (por ejemplo, los 15 primeros)
mediante el comando Table que podemos utilizar para visualizar el comportamiento
de la sucesión usando el comando ListPlot:

term=Table[a[n],{n,1,15}]
 
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
, , , , , , , , , , , , , ,
2 5 10 17 26 37 50 65 82 101 122 145 170 197 226

ListPlot[term, PlotStyle->PointSize[0.02]]

0.2

0.15

0.1

0.05

2 4 6 8 10 12 14

La representación gráfica de los 15 primeros términos de la sucesión nos sugiere


que la sucesión es monótona decreciente (an+1 < an ) y acotada inferiormente (por
cero). Dado que toda sucesión estrictamente decreciente y acotada inferiormente es
convergente, el estudio gráfico nos sugiere que la sucesión tiene lı́mite (de hecho,
nos hace pensar que el lı́mite es cero). Vamos a ver cómo podemos comprobar estos
propiedades con Mathematica.

(1) Decrecimiento: El programa no puede darnos información directa sobre la


1 1
desigualdad < porque no reconoce n como un número natural.
1 + (n + 1)2 1 + n2
La siguiente instrucción resuelve este problema:

FullSimplify[0<a[n+1]<a[n]<1, Element[n, Integers] && n>0]

True

(2) Acotación: El estudio gráfico sugiere que la sucesión está acotada inferior-
mente por 0 y superiormente por 1. Para comprobar este extremo utilizamos la
sentencia:

FullSimplify[0<a[n]<1, Element[n, Integers] && n>0]

61
True

(3) Cálculo del lı́mite:

Limit[a[n]],n->Infinity]

0
n
Ejemplo 6.2. Estudiar la sucesión an = (−1)n
n+1
Solución. Consideramos la función

a[n ]:=(-1)^n n/(n+1)

y representamos sus 15 primeros términos:

term=Table[a[n],{n,1,15}]

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
{− , , − , , − , , − , , − , , − , , − , , − }
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

ListPlot[term, PlotStyle->PointSize[0.02]]

0.75
0.5
0.25

2 4 6 8 10 12 14
-0.25
-0.5
-0.75

El análisis de la representación gráfica de los 15 primeros términos de la suce-


sión nos dice que la sucesión es oscilante: los términos impares son negativos y los
términos pares positivos (esto es debido a la presencia del factor (−1)n ). Además,
los lı́mites de las subsucesiones {a2n } y {a2n+1 } son diferentes; por tanto la sucesión
{an } no es convergente. Vamos a comprobarlo con Mathematica.
(1) Estudiamos la sucesión de los términos pares:

FullSimplify[a[2n], Element[n,Integers]]

62
2n
2n + 1

Limit[FullSimplify[a[2n], Element[n,Integers], n->Infinity]]

(2) Estudiamos la sucesión de los términos impares:

FullSimplify[a[2n+1], Element[n,Integers]]

1
−1 +
2 + 2n

Limit[FullSimplify[a[2n+1], Element[n,Integers], n -> Infinity]]

−1
Dado que las subsucesiones {a2n } y {a2n+1 } tienen lı́mites diferentes, la sucesión
{an } es divergente.

Ejemplo 6.3. Estudiar la sucesión definida mediante la relación de recurrencia



xn = 1 + xn−1 con x1 = 1.

Solución. Al ser la sucesión recurrente, definimos la sucesión de la siguiente


forma:

x[1]=1; x[n_]:= Sqrt[1+x[n-1]]

lo que nos permite calcular cualquier término de la sucesión, por ejemplo

x[3]
p √
1+ 2

y calcular un valor aproximado

N[x[3],10]

1.553773974

Seguidamente representamos los 15 primeros términos de la sucesión:

63
term=Table[x[n],{n,1,15}];

ListPlot[term, PlotStyle -> PointSize[0.02]]

1.6
1.575
1.55
1.525

2 4 6 8 10 12 14
1.475

Gráficamente se observa que la sucesión es creciente (xn < xn+1 ) y está acotada
superiormente (por ejemplo por 2), lo que implica que la sucesión es convergente. Si
intentamos calcular su lı́mite mediante el comando Limit, Mathematica cae en un
proceso recursivo y no es capaz de darnos el valor del lı́mite. Si lı́mn xn = L, debe
cumplirse la igualdad √
L = 1 + L.
Usando esta igualdad podemos calcular el lı́mite mediante el comando Solve:

Solve[L == Sqrt[1+L], L]

1 √ 
{{L → 1 + 5 }}
2

6.2. Series de números reales


Los siguientes comandos son los que utilizaremos para el estudio del carácter de
una serie y para el cálculo (exacto o aproximado) de su suma:

(1) Limit

(2) Sum

(3) Cálculo de sumatorios

(4) N, NSum

64
(5) EulerSum (hay que cargar el paquete NumericalMath‘NLimit‘


X 1
Ejemplo 6.4. Estudiar el carácter de la serie . En caso de ser conver-
2n2+1
n=0
gente, calcular su suma.

Solución. (1) Estudio del carácter:

Definimos el término general y comprobamos el criterio de Cauchy:

a[n_]:= 1/(n^2+1)

Limit[a[n], n -> Infinity]

Por tanto, la serie puede ser convergente. Como es una serie de términos positivos
aplicamos el criterio del cociente:

Limit[a[n+1]/a[n], n -> Infinity]

El criterio del cociente no decide. Aplicamos el criterio de Raabe:

Limit[ n (1-a[n+1]/a[n]),n-> Infinity]

Al ser el lı́mite mayor que 1, la serie es convergente.

(2) Cálculo de la suma:

Podemos calcular la suma de la serie con el comando Sum:

Sum[a[n],{n,0,Infinity}]

  
π
π 2 sinh √
√π
    2
csch √
2
π cosh 2
+ √
2

2 2

En general, como en el caso que nos ocupa, el resultado obtenido no es útil a efectos
prácticos. No obstante, con Mathematica podemos obtener aproximaciones numéri-
cas de la suma de una serie con una precisión determinada:

N[Sum[a[n],{n,0,Infinity}, 17]]

65
1.6371602671179672

Además del comando N, Mathematica incorpora la instrucción especı́fica NSum


para obtener el valor aproximado de una serie:

NSum[a[n],{n,0,Infinity}]

1.63716

El comando NSum nos da un valor aproximado de la suma con una precisión de


6 dı́gitos.

En el caso de series alternadas es conveniente utilizar el comando EulerSum que


utiliza algoritmos matemáticos más complejos que los anteriores. Para poder usarlo
es necesario cargar el paquete NumericalMath‘‘NLimit".

Ejemplo 6.5. Aplica el criterio de Leibniz para series alternadas para demostrar

X (−1)n
que la serie es convergente. Calcula un valor aproximado de su suma
2n − 1
n=1
mediante el comando EulerSum.

Solución. Tenemos que comprobar dos cosas: (1) el lı́mite del módulo del término
general tiende a cero, y (2) el módulo del término general es una sucesión monótona
decreciente.

a[n_]:= 1/(2n-1)

Limit[a[n], {n,0,n->Infinity}]

FullSimplify[0<a[n+1]<a[n]<2, Element[n, Integers] && n>0]

True

El criterio de Leibniz nos dice que la serie es convergente. Vamos a calcular un valor
aproximado de su suma:

<<NumericalMath‘NLimit‘

EulerSum[a[n],{n,1,Infinity}]

-0.785398

2
Ejercicio 6.1. (1) Dada la sucesión de término general an = , se pide:
3n − 2

66
(a) Escribir los 15 primeros términos y representarlos gráficamente.

(b) Estudiar el crecimiento y la acotación.

(c) Calcular su lı́mite.

(2) Probar que la sucesión de término general an = cos nπ es oscilante, estudiando


las subsucesiones {a2n } y {a2n+1 }.

1 1
(3) Estudiar la sucesión recurrente xn+1 = + x2n para los valores x1 = 1, x1 =
4 2
1
y xn = .
4

X 1
(4) Probar que la serie es convergente y calcular su suma con una
(log n)n
n=2
aproximación de 17 cifras significativas.

X (−1)n
(5) Probar que la serie armónica alternada es convergente. Calcular su
n
n=2
suma con una aproximación de 12 cifras significativas.

X π 
(6) Probar que la serie (−1)n sin es convergente. Hallar el valor de su
n
n=2
suma o, en su defecto, un valor aproximado.

6.3. Series de Taylor


Dada una función f que tiene derivadas de todos los órdenes en un punto a, se

X f (k) (a)
define la serie de Taylor de f en el punto a como la serie de potencias (x−
k!
n=0
a)k . Su suma parcial n-ésima es el denominado polinomio de Taylor de orden n, que
n
X f k (a)
se denota por Tn (f, a)(x) = f (a)+ (x−a)k . Observa que las sumas parciales
k!
k=1
de la serie de Taylor son precisamente los polinomios de Taylor. Recordemos que los
dos problemas fundamentales asociados con la serie de Taylor de una función f
(cuando existe) son: (1) ¿converge la serie de Taylor para algún valor diferente de a,
y si es ası́, (2) ¿su suma es f (x)?
En esta sección vamos a calcular los polinomios de Taylor de algunas funciones
en x = 0 y visualizaremos cómo aproximan a la función en un intervalo centrado en
el origen.

Ejemplo 6.6. Definir una función que calcule los polinomios de Taylor de la fun-
cion f (x) = cos(x) y utilizarla para realizar una animación que muestre cómo se
aproximan a f .

67
Solución. El comando Series[func,x,a,grado] calcula la serie de Taylor en la
variable x centrada en el punto a hasta el término indicado por grado.

Series[Cos[x], {x,0,10}]

x2 x4 x6 x8 x10
1− + − + − + O[x]11
2 24 720 40320 3628800

Al final de la respuesta aparece el término O[x]11 que nos indica el orden de error
que nos indica que los términos que faltan son todos de grado mayor o igual a once.
En realidad, como las derivadas de orden impar del coseno son cero, los términos
de potencias impares son nulos, pero el comando usado no informa a Mathematica
de este detalle. Sin queremos que no aparezca el término del error podemos usar el
comando

Normal[Series[Cos[x], {x,0,10}]]

x2 x4 x6 x8 x10
1− + − + −
2 24 720 40320 3628800
Para realizar la animación que nos muestre la forma en que los polinomios de
Taylor aproximan a la función en un entrono del origen, definiremos una función que
calcule los polinomios de Taylor en el origen:

Table[scos[n_,x_]= Normal[Series[Cos[x],{x,0,n},{n,0,100,2}];

Fı́jate que, como las derivadas de orden impar de la función coseno son nulas en el
origen, hemos hecho que el contador n tome solo los valores pares desde 0 a 100.
Podemos ahora extraer de la tabla el polinomio de Taylor que deseemos entre los
100 primeros:

scos[10,x]

x2 x4 x6 x8 x10
1− + − + −
2 24 720 40320 3628800
scos[12,x]

x2 x4 x6 x8 x10 x12
1− + − + − +
2 24 720 40320 3628800 479001600
Ahora podemos definir una función que realice pero no muestre en pantalla el gráfico
del coseno junto con el de scos[n,x] en un intervalo [a, b]:

graf[n_,a_,b_]:=Plot[{Cos[x],scos[n,x]},{x,a,b}, PlotRange -> {-2,2},


PlotStyle -> {RGBColor[1,0,0], RGBColor[0,0,1]}]

68
Podemos visualizar ahora un polinomio de Taylor de orden dado en un intervalo pre-
fijado. Por ejemplo, podemos ver el polinomio de orden 10 en el intervalo [−2π, 2π]:

graf[10,-2Pi,2Pi]

2
1.5
1
0.5

-6 -4 -2 2 4 6
-0.5
-1
-1.5
-2

Para realizar una animación es necesario hacer todos los cuadros de la animación,
como si se tratara de unos dibujos animados. Para ello definimos la función

animacos[n_, a_, b_] := Table[graf[k, a, b], {k, 0, n, 2}]

Ahora ya podemos realizar la animación, escribe, por ejemplo

animacos[20,-2Pi,2Pi]

Una vez tengas todos los cuadros de la animación, puedes activarla seleccionando uno
cualquiera de ellos y haciendo doble click. Puedes controlar la velocidad utilizando
los botones que habrán aparecido en la esquina inferior izquierda de la pantalla.

Ejemplo 6.7. Dada la función f (x) = log(1 + x), se pide:

(1) Calcula T10 (f, 0) y T20 (f, 0).

(2) Deduce, a partir de los resultados obtenidos en (1), la serie de Taylor T (f, 0)
de f en el origen.

(3) Calcula el radio de convergencia de T (f, 0).

(4) Realiza una animación para visualizar que T (f, 0) representa a f en el inter-
valo de convergencia.

69
(5) Los extremos del intervalo de convergencia son los puntos x = −1 y x = 1.
Comprueba que T (f, 0) converge en ambos puntos. ¿Representa T (f, 0) a f en
x = −1?, ¿y en x = 1?
Solución. (1)
Normal[Series[Log[1 + x], {x, 0,10}]]

x2 x3 x4 x5 x6 x7 x8 x9 x10
x− + − + − + − + −
2 3 4 5 6 7 8 9 10

Normal[Series[Log[1 + x], {x, 0, 20}]]

x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14


x− + − + − + − + − + − + − +
2 3 4 5 6 7 8 9 10 11 12 13 14
x 15 x 16 x 17 x18 x 19 x 20
− + − + −
15 16 17 18 19 20

X xn
(2) La expresión buscada es (−1) n+1 .
n
n=1

(3) Teniendo en cuenta la fórmula que nos proporciona el radio de convergencia


an+1
de una serie de potencias, hemos de calcular lı́m , donde an es el módulo del
n→∞ an
1
término general an = :
n
Limit[(n/(n+1)), n -> Infinity]

Por tanto, el radio de convergencia es 1 y el intervalo de convergencia ] − 1, 1[.

La animación la realizamos siguiendo los pasos del ejemplo anterior. Primero


definimos una función que calcule los polinomios de Taylor en el origen:

Table[slog[n_,x_]=Normal[Series[Log[1+x],{x,0,n},{n,0,100}];

y, a continuación, extraemos de la tabla el polinomio de Taylor que deseemos entre


los 100 primeros:

slog[10,x]

x2 x3 x4 x5 x6 x7 x8 x9 x10
x− + − + − + − + −
2 3 4 5 6 7 8 9 10
que nos proporciona el mismo resultado que en el apartado (1).

El siguiente paso es una función que realice pero no muestre en pantalla el gráfico
de nuestra función junto con el de slog[n,x] en un intervalo [a, b]:

70
grafl[n_,a_,b_]:=Plot[{Log[1+x],slog[n,x]},{x,a,b}, PlotRange->{-2,2},
PlotStyle->{RGBColor[1,0,0],RGBColor[0,0,1]}]

Como antes visualizamos un polinomio de Taylor de orden dado en un intervalo


prefijado. Por ejemplo, podemos ver el polinomio de orden 5 en el intervalo [−1, 1]:

grafl[10,-1,1]

2
1.5
1
0.5

-1 -0.5 0.5 1
-0.5
-1
-1.5
-2

Ya sabemos que para obtener una animación es necesario hacer todos los cuadros
de la animación, como si se tratara de unos dibujos animados:

animalog[n_, a_, b_] := Table[grafl[k,a,b], {k, 0, n}]

Podemos realizar la animación mediante

animalog[10,-1,1]

Recuerda que cuando Mathematica te proporcione todos los cuadros de la animación,


puedes activarla seleccionando uno cualquiera de ellos y haciendo doble click y que
la velocidad de la animación puede controlarse mediante los botones que aparecen
en la esquina inferior izquierda de la pantalla.

(−1)n+1 xn
(5) Estudiamos la serie ∞
P
n=1 en el punto x = −1. Primero calcula-
n
mos su término general sustituyendo la x por −1:

Expand[(-1)^(n+1) (-1)^n/n]

(−1)1+2n
n
a[n_]:= %

71
Se trata de una serie alternada. Aplicaremos el criterio de Leibniz para estudiar su
convergencia:

b[n_]:=Abs[a[n]]

Limit[b[n],{n,0,Infinity}]

FullSimplify[0<b[n+1]<b[n]<2, Element[n, Integers] && n>0]

True
P∞ (−1)n+1 xn
Por tanto la serie n=1 en el punto x = −1 es convergente. Obvia-
n
mente no representa a la función f (x) = log 1 + x en x = −1 porque la función no
está definida en ese punto (¿por qué?).

Veamos que pasa en el punto x = 1.

Expand[(-1)^(n+1) 2^n/n]

(−1)1+n
n
c[n_]:= %

Se trata de una serie alternada. Como antes, aplicaremos el criterio de Leibniz para
estudiar su convergencia:

d[n_]:=Abs[c[n]]

Limit[d[n],{n,0,Infinity}]

FullSimplify[0<d[n+1]<d[n]<2, Element[n, Integers] && n>0]

True
(−1)1+n
Por tanto, la serie ∞
P
n=1 es convergente. Como la función f (x) = log(1 + x)
n
es continua en el punto x = 1, el teorema de Abel nos dice que


X (−1)1+n
log 2 =
n
n=1

Veamos qué nos dice Mathematica cuando calculamos el lı́mite de la serie:

72
Sum[(-1)^(1+n)/n,{n,1,Infinity}]

Log[2]

Ejercicio 6.2. (1) Definir una función que calcule los polinomios de Taylor de la
funcion f (x) = sen(x) y utilizarla para realizar una animación que muestre
cómo se aproximan a f .

(2) Calcular la serie de Taylor en el origen de la función f (x) = ex . Calcular su


radio de convergencia y realizar una animación para visualizar cómo aproxima
la serie de Taylor a la función.

(3) Dada la función f (x) = arctan(1 + x), se pide:

(1) Calcula T10 (f, 0) y T20 (f, 0).

(2) Deduce, a partir de los resultados obtenidos en (1), la serie de Taylor


T (f, 0) de f en el origen.

(3) Calcula el radio de convergencia de T (f, 0).

(4) Realiza una animación para visualizar que T (f, 0) representa a f en el


intervalo de convergencia. Varı́a los intervalos para ver qué sucede en el
intervalo de convergencia y fuera de él.

(5) Analiza la convergencia de la serie de Taylor en los extremos del intervalo.


¿Representa la serie de Taylor a la función f (x) = arctan(x) en los
extremos del intervalo?

73
Práctica 7

Ecuaciones diferenciales con


Mathematica

7.1. Tratamiento analı́tico


El objetivo de esta sección es doble. Por una parte, veremos cómo Mathematica es
capaz de resolver de forma automática la mayorı́a de tipos de ecuaciones diferenciales
que se suelen estudiar en un primer curso sobre la materia con un solo comando.
Por otra parte, ilustraremos las principales técnicas computacionales que se llevan a
cabo con el fin de reproducir en el ordenador la secuencia de cálculos necesarios (la
mayorı́a largos y tediosos) para obtener la solución analı́tica (explı́cita o implı́cita)
de ecuaciones diferenciales de primer y segundo orden. Además, veremos cómo se
usa Mathematica para ampliar nuestro conocimiento acerca de las soluciones de una
ecuación diferencial mediante su representación gráfica.
El comando básico para la resolución analı́tica de ecuaciones diferenciales en
Mathematica es DSolve, cuya sintaxis es la siguiente:

DSolve[{ODE, cond. inic.},y[x],x]

donde cond. inic. representa la condición inicial. Si ésta no aparece, el comando


devuelve una familia n-paramétrica de soluciones.
No pretendemos efectuar un tratamiento en profundidad, sino más bien ilustrar
algunas de las técnicas que se pueden llevar a cabo en diferentes contextos. Para
ello, consideraremos brevemente algunos ejemplos prácticos representativos de los
tipos de ecuaciones que se estudian en la teorı́a y cómo se utiliza Mathematica para
su resolución.

7.1.1. Ecuaciones diferenciales de primer orden


Ecuaciones de variables separables
Ejemplo 7.1. Resuelve la ecuación diferencial

x2 + 8
y0 = .
(x2 − 5x + 6)y 2 cos y

74
En este caso, vamos a obtener una familia 1-paramétrica de soluciones con el
comando DSolve:
ecdif1 = y '@xD Š Hx ^ 2 + 8L  HHx ^ 2 - 5 x + 6L y@xD ^ 2 Cos@y@xDDL

I8 + x2 M Sec@y@xDD
y¢ @xD ==
I6 - 5 x + x2 M y@xD2

DSolve@ecdif1, y@xD, xD

Solve::tdep : The equations appear to involve the


variables to be solved for in an essentially non-algebraic way.

H-2 + xL12
F - 2 Sin@y@xDD + 2 Cos@y@xDD y@xD + Sin@y@xDD y@xD2 == C@1D, 8y@xD<F
H-3 + xL17
SolveB-x + LogB

Esta solución implı́cita se puede obtener también con la siguiente secuencia de


cálculos, que es la que normalmente se lleva a cabo con papel y lápiz:
lhs = y ^ 2 Cos@yD; rhs = Hx ^ 2 + 8L  Hx ^ 2 - 5 x + 6L;

s1 = Integrate@lhs, yD

2 y Cos@yD + I-2 + y2 M Sin@yD

s2 = Integrate@rhs, xD

x + 17 Log@-3 + xD - 12 Log@-2 + xD

solucion = s1 - s2 == c

-x + 2 y Cos@yD - 17 Log@-3 + xD + 12 Log@-2 + xD + I-2 + y2 M Sin@yD == c

Ejemplo 7.2. Resuelve la ecuación

x2
y0 = √
9 − x2 ey cos y

con la condición inicial y(0) = 0.

Análogamente al caso anterior, primero la resolvemos con DSolve:


ec2 = y '@xD Š x ^ 2  HSqrt@9 - x ^ 2D Exp@y@xDD Cos@y@xDDL

y¢ @xD ==
ã-y@xD x2 Sec@y@xDD

9 - x2

DSolve@8ec2, y@0D Š 0<, y@xD, xD

Solve::tdep : The equations appear to involve the


variables to be solved for in an essentially non-algebraic way.
1
SolveB-
2 -9 + x2

-9 x + x3 - ãy@xD 9 - x2 Cos@y@xDD + 9 -9 + x2 LogBx + -9 + x2 F - ãy@xD 9 - x2 Sin@y@xDD ==

+ Log@3D , 8y@xD<F
ä 9 äΠ
- -
2 2 2

75
Obsérvese que el mensaje tiene que ver con el hecho de que Mathematica no puede
despejar explı́citamente y, esto es, que se obtiene una solución implı́cita. Además,
aparecen cantidades complejas, de manera que la expresión final no es ciertamente
muy manejable. Por ello, a continuación procedemos paso a paso, tal como harı́amos
con lápiz y papel al tratar de resolver una ecuación de variables separables. Fijémonos
en que al introducir la condición inicial podemos calcular el valor de la constante
arbitraria, pero que, efectivamente, obtenemos una solución implı́cita. No obstante,
dicha solución también se puede representar gráficamente con relativa facilidad con
el comando ImplicitPlot, cargando previamente el paquete correspondiente.

In[1]:= lhs = Exp@yD Cos@yD; rhs = x ^ 2  Sqrt@9 - x ^ 2D;

In[2]:= s1 = Integrate@lhs, yD

1
Out[2]= ãy HCos@yD + Sin@yDL
2

In[3]:= s2 = Integrate@rhs, xD

1 9 x
Out[3]= - x 9 - x2 + ArcSinB F
2 2 3

In[4]:= sol = s1 Š s2 + c

1 1 9 x
Out[4]= ãy HCos@yD + Sin@yDL Š c - x 9 - x2 + ArcSinB F
2 2 2 3

In[5]:= cval = Solve@sol . y ® 0 . x ® 0, cD

1
Out[5]= ::c ® >>
2

In[6]:= solucion = sol . cval@@1DD

1 1 1 9 x
Out[6]= ãy HCos@yD + Sin@yDL Š - x 9 - x2 + ArcSinB F
2 2 2 2 3

In[7]:= << Graphics`ImplicitPlot`

In[8]:= graf1 = ImplicitPlot@solucion, 8x, - 3, 3<, 8y, - 4, 4<D

76
3

-3 -2 -1 1 2

Out[8]=

-1

-2

-3

-4

Ecuaciones exactas
Ejemplo 7.3. Obtén la solución general de la ecuación

(−1 + exy y + y cos(xy))dx + (1 + exy x + x cos(xy))dy = 0.

Como de costumbre, primero vemos qué solución nos proporciona DSolve.


m@x_, y_D = -1 + Exp@x yD y + y Cos@x yD;
n@x_, y_D = 1 + Exp@x yD x + x Cos@x yD;
ecu = DSolve@m@x, y@xDD + n@x, y@xDD y '@xD Š 0, y@xD, xD

Solve::tdep : The equations appear to involve the


variables to be solved for in an essentially non-algebraic way.

SolveAãx y@xD - x + Sin@x y@xDD + y@xD == C@1D, 8y@xD<E

Observamos que de esta forma se obtiene una familia uniparámetrica de solucio-


nes implı́citas, dependiendo del parámetro C[1].
Para ilustrar el procedimiento usual de resolución de una ecuación diferencial
exacta, presentamos a continuación la secuencia de comandos en Mathematica que
lleva a cabo dicho procedimiento. Lógicamente, se llega al mismo resultado, si bien
esta vez la familia de soluciones depende de la constante arbitraria c.

77
Finalmente, representamos gráficamente en el dominio [−π, π] × [−π, π] algu-
nas de las soluciones obtenidas, considerando diferentes valores del parámetro c ∈
[−10, 10]. Para ello utilizamos el comando ContourPlot.

D@m@x, yD, yD Š D@n@x, yD, xD

True

paso1 = Integrate@m@x, yD, xD

ãx y - x + Sin@x yD

paso2 = D@paso1 + g@yD, yD

ãx y x + x Cos@x yD + g¢ @yD

paso3 = Solve@paso2 Š n@x, yD, g '@yDD

88g¢ @yD ® 1<<

paso4 = Integrate@g '@yD . paso3@@1DD, yD

solucion = paso1 + paso4 Š c

ãx y - x + y + Sin@x yD == c

ContourPlot@solucion@@1DD, 8x, -Pi, Pi<, 8y, -Pi, Pi<, Contours ® 15,


PlotPoints ® 30, PlotRange ® 8-10, 10<, ContourShading ® FalseD
3

-1

-2

-3
-3 -2 -1 0 1 2 3

78
Ecuaciones lineales
Ejemplo 7.4. Obtén la solución general de la ecuación

xy 0 + 3y = x sin x.

En este caso aplicamos directamente DSolve. Fijémonos en que la solución ge-


neral depende del parámetro arbitrario C[1]. A continuación representamos gráfica-
mente algunas soluciones particulares, obtenidas dando valores diferentes al paráme-
tro. En cualquier caso, obsérvese el comportamiento de las mismas para valores de
x positivos grandes. ¿Sabrı́as explicar convincentemente este hecho?
ecli = x y '@xD + 3 y@xD Š x Sin@xD;

sol = DSolve@ecli, y@xD, xD

::y@xD ® >>
C@1D 6 x Cos@xD - x3 Cos@xD - 6 Sin@xD + 3 x2 Sin@xD
+
x3 x3
yy@c_D = Hy@xD . sol@@1DDL . C@1D ® c

c 6 x Cos@xD - x3 Cos@xD - 6 Sin@xD + 3 x2 Sin@xD


+
x3 x3
sols = Table@yy@cD, 8c, -3, 3, 1<D;

Plot@Evaluate@solsD, 8x, 0.1, 2 Pi<, AxesOrigin ® 80, 0<D

1 2 3 4 5 6

-1

-2

-3

7.1.2. Ecuaciones diferenciales lineales de segundo orden


En los ejemplos siguientes vemos cómo Mathematica resuelve las ecuaciones di-
ferenciales lineales de segundo orden y cómo se pueden representar gráficamente sus
soluciones. De hecho, el procedimiento es similar independientemente del orden de
la ecuación.
Aunque con lápiz y papel es relativamente sencillo obtener la solución general
de una ecuación diferencial lineal con coeficientes constantes, Mathematica permite

79
de forma sencilla elaborar una gráfica con las soluciones para diferentes valores de
las constantes arbitrarias, tal como se pone de manifiesto a continuación.

Ejemplo 7.5. Calcula la solución general de la ecuación diferencial

y 00 + 4y 0 + 13y = x cos2 (3x).

solu1 = DSolve@y ''@xD + 4 y '@xD + 13 y@xD Š x Cos@3 xD ^ 2, y@xD, xD

::y@xD ® ã-2 x C@2D Cos@3 xD + ã-2 x C@1D Sin@3 xD +


1
14 652 300
I-86 700 Cos@3 xD2 + 281 775 x Cos@3 xD2 - 6084 Cos@3 xD Cos@9 xD + 129 285 x Cos@3 xD Cos@9 xD +
72 250 Cos@3 xD Sin@3 xD + 375 700 x Cos@3 xD Sin@3 xD + 13 013 Cos@9 xD Sin@3 xD +
28 730 x Cos@9 xD Sin@3 xD - 266 184 Sin@3 xD2 + 974 610 x Sin@3 xD2 - 12 168 Cos@6 xD Sin@3 xD2 +
258 570 x Cos@6 xD Sin@3 xD2 - 13 013 Cos@3 xD Sin@9 xD - 28 730 x Cos@3 xD Sin@9 xDM>>

yy = y@xD . solu1@@1DD;

tograph = Table@yy . 8C@1D ® i, C@2D ® j<, 8i, -5, 5, 5<, 8j, -4, 4, 2<D  Flatten;

Plot@Evaluate@tographD, 8x, -1, 1<, PlotRange ® 8-20, 20<, PlotPoints ® 100D


20

10

-1.0 -0.5 0.5 1.0

-10

-20

Ejemplo 7.6. Calcula la solución general de la ecuación diferencial

e−4x
y 00 − 4y = .
x3

80
sola = DSolve@y ''@xD - 4 y@xD Š E ^ H-4 xL  x ^ 3, y@xD, xD

ã-4 x I1 + 9 ã6 x x ExpIntegralEi@-6 xD - ã2 x x ExpIntegralEi@-2 xDM


::y@xD ® ã2 x C@1D + ã-2 x C@2D + >>
2x
figu1 = Table@y@xD . sola@@1DD . 8C@1D ® i, C@2D ® j<, 8i, -3, 3, 2<, 8j, -4, 4, 2<D  Flatten;

Plot@Evaluate@figu1D, 8x, 0.01, 1<, PlotRange ® 8-15, 15<D

15

10

0.2 0.4 0.6 0.8 1.0

-5

-10

-15

A continuación vemos cómo Mathematica en ocasiones es capaz de resolver una


ecuación diferencial lineal de segundo orden con coeficientes variables.
Ejemplo 7.7. Resuelve la ecuación xy 00 + 2y 0 − xy = sin x.

In[10]:= solu3 = DSolve@x y ''@xD + 2 y '@xD - x y@xD Š Sin@xD, y@xD, xD

ã-x C@1D ãx C@2D Sin@xD


Out[10]= ::y@xD ® + - >>
x 2x 2x

In[11]:= y2 = y@xD . solu3@@1DD . 8C@1D ® 1, C@2D ® 2<

ã-x ãx Sin@xD
Out[11]= + -
x x 2x

In[12]:= Plot@y2, 8x, 0, 4<D


20

15

10

1 2 3 4

Finalmente, consideremos un problema de valor inicial:

81
Ejemplo 7.8. Resuelve
1
2y 00 + 5y 0 + 5y = 0, y(0) = 0, y 0 (0) = .
2

solu4 = DSolve@82 y ''@xD + 5 y '@xD + 5 y@xD Š 0, y@0D Š 0, y '@0D Š 1  2<, y@xD, xD

F
15 x
2 ã-5 x4 SinB
::y@xD ® >>
4

15

Plot@y@xD . solu4@@1DD, 8x, -Pi  4, Pi<D

0.1

1 2 3

-0.1

-0.2

-0.3

7.1.3. Sistemas de ecuaciones diferenciales


El comando DSolve, con la sintaxis habitual, sirve también para resolver ciertos
tipos de sistemas de ecuaciones diferenciales, entre los que se cuentan los lineales
con coeficientes constantes. Analicemos su uso por medio de un ejemplo detallado.

Ejemplo 7.9. Calcula la solución general del sistema

x0 = 5x + 2y
y 0 = −2x + 2y

¿Cómo se resolverı́a este problema con lápiz y papel? Si usamos métodos matri-
ciales, empezarı́amos escribiendo la matriz de coeficientes y calculando sus valores
propios y sus correspondientes subespacios propios. Después, y dependiendo de la
multiplicidad de los valores propios y la dimensión de los subespacios propios, es-
cribirı́amos dos soluciones linealmente independientes, con las cuales formarı́amos
una matriz fundamental del sistema. Naturalmente, esas soluciones independientes
dependerı́an de si los valores propios son reales o complejos. En Mathematica, este

82
proceso se lleva a cabo automáticamente con DSolve:
In[2]:= sol = DSolve@8x '@tD Š 5 x@tD + 2 y@tD, y '@tD Š -2 x@tD + 2 y@tD<, 8x@tD, y@tD<, tD

F
7 t
4 ã7 t2 C@2D SinB
::x@tD ® F+3 F ,
2 1 7 t 7 t
Out[2]= + ã7 t2 C@1D 7 CosB 7 SinB
7 7 2 2

F
7 t
4 ã7 t2 C@1D SinB
F-3 F >>
2 1 7 t 7 t
y@tD ® - + ã7 t2 C@2D 7 CosB 7 SinB
7 7 2 2

La solución general para x(t) se obtiene con sol[[1,1,2]], mientras que y(t) se
obtiene con sol[[1,2,2]]:
In[3]:= x@t_D = sol@@1, 1, 2DD

F
7 t
4 ã7 t2 C@2D SinB
F+3 F
2 1 7 t 7 t
Out[3]= + ã7 t2 C@1D 7 CosB 7 SinB
7 7 2 2

In[4]:= y@t_D = sol@@1, 2, 2DD

F
7 t
4 ã7 t2 C@1D SinB
F-3 F
2 1 7 t 7 t
Out[4]= - + ã7 t2 C@2D 7 CosB 7 SinB
7 7 2 2

A continuación vamos a representar gráficamente la solución para varios valores


de C[1] y C[2] creando primero una tabla de {x[t],y[t]} con C[1] remplazado por
i y C[2] remplazado por j, para i, j = −6, −4, −2, 0, 2, 4, 6. A dicha tabla la llamamos
funarray. Para convertir funarray en una lista de funciones preparada para ser
representadas con ParametricPlot, se usa Flatten para quitar los paréntesis de
funarray. A dicha lista la llamamos tograph.
In[5]:= funarray = Table@8x@tD, y@tD< . 8C@1D ® i, C@2D ® j<, 8i, -6, 6, 2<, 8j, -6, 6, 2<D;

In[6]:= tograph = Flatten@funarray, 1D;

Seguidamente, se usa ParametricPlot para representar gráficamente tograph


en el intervalo [−1, 1], llamándose a dicha gráfica graphuno.
In[7]:= graphuno = ParametricPlot@Evaluate@tographD, 8t, -1, 1<, PlotRange ® 88-1, 1<, 8-1, 1<<D

83
1.0

0.5

-1.0 -0.5 0.5 1.0

-0.5

-1.0

Para determinar la dirección asociada con cada solución, se hace uso del pa-
quete PlotField dentro de Graphics (hasta la versión 5.2 de Mathematica) o
VectorFieldPlots (versión 6), el cual permite dibujar fácilmente el campo de di-
recciones asociado al sistema.
Obsérvese que en un sistema de ecuaciones con dos variables, x0 = X(x, y),
y 0 = Y (x, y), cada solución ha de satisfacer la relación

dy dy/dt Y (x, y)
= = ≡ f (x, y). (7.1)
dx dx/dt X(x, y)

Por consiguiente, el campo de direcciones asociado con el sistema de ecuaciones


diferenciales representa una colección de vectores que son tangentes a la familia de
soluciones del sistema. El campo de direcciones para este ejemplo se dibuja con el
comando PlotVectorField (hasta la versión 5.2) o VectorFieldPlot (versión 6).
Recordemos a este respecto que el campo de direcciones de la ecuación diferencial
(7.1) no es más que la representación gráfica del campo vectorial en el plano:

F~ (x, y) = ~ı + f (x, y)~.

Como estamos trabajando con la versión 6, utilizamos VectorFieldPlot.

In[8]:= << VectorFieldPlots`;

In[10]:= graphdos = VectorFieldPlot@85 x + 2 y, -2 x + 2 y<, 8x, -1, 1<, 8y, -1, 1<D

84
Representando simultáneamente la familia de soluciones con el campo de direc-
ciones precedente, vemos que cada solución está dirigida hacia afuera del origen
conforme se incrementa t.
In[11]:= Show@graphuno, graphdosD
1.0

0.5

-1.0 -0.5 0.5 1.0

-0.5

-1.0

85
7.2. Métodos numéricos para la resolución de ecuacio-
nes diferenciales
Si bien las técnicas analı́ticas vistas en las clases de teorı́a y en la sección pre-
cedente resultan útiles para analizar diversos modelos matemáticos, lo cierto es que
la mayorı́a de las ecuaciones diferenciales que se encuentran en las aplicaciones no
se pueden resolver ni explı́cita no implı́citamente. Por ello, es necesario recurrir a
métodos numéricos para obtener una aproximación de la solución de un problema
de valor inicial. Aquı́ analizaremos, como casos particulares suficientemente ilustra-
tivos y a la vez sencillos, el método de Euler y el método de Runge–Kutta de cuarto
orden.
Dado el problema de valor inicial
y 0 = f (x, y), a ≤ x ≤ b, y(x0 ) = y0 ,
el cual se supone que admite solución única y(x) de clase C2 en [a, b], se plantea
la obtención de una secuencia de valores aproximados y0 , y1 , . . . , yk , . . . de dicha
solución en un conjunto de puntos x0 < x1 < · · · < xk < · · · . Si consideramos estos
puntos como igualmente espaciados sobre el intervalo [a, b], podemos escribir
xi = a + ih, i = 0, 1, . . . , N
para un cierto positivo N , de manera que h = (b − a)/N es el tamaño de paso.
Empecemos escribiendo el desarrollo en serie de Taylor de y alrededor de x0 :
1 00
y(x) = y(x0 ) + y 0 (x0 )(x − x0 ) + y (x0 )(x − x0 )2 + · · · .
2!
Como conocemos el valor de y en el punto inicial x = x0 , usamos este valor para
aproximar y en x1 = x0 + h, el cual está próximo a x0 , de la siguiente manera.
Evaluamos primero la serie de Taylor en x1 = x0 + h para dar
1 00
y(x0 + h) = y(x0 ) + y 0 (x0 )h + y (x0 )h2 + · · · .
2!
Sustituyendo y 0 = f (x, y) en este desarrollo, usando y(x0 ) = y0 y llamando a y(x0 +
h) = y1 , tenemos
1 df
y1 = y(x0 ) + f (x0 , y0 )h + (x0 , y0 )h2 + · · ·
2! dx
1 df
= y0 + f (x0 , y0 )h + (x0 , y0 )h2 + · · ·
2! dx
Ası́ pues, el punto inicial (x0 , y0 ) se usa para determinar y1 . Se obtiene una aproxi-
mación de primer orden a partir de aquı́ simplemente despreciando los términos de
orden h2 y más altos. En otras palabras, determinamos y1 como
y1 = y0 + f (x0 , y0 )h.
A continuación usamos el punto (x1 , y1 ) para aproximar el valor de y en x2 = x1 + h.
Llamando a este valor y2 , tendremos
y2 = y1 + f (x1 , y1 )h

86
y en general tendremos el método de Euler (explı́cito) en la forma

yn+1 = yn + hf (xn , yn ), n = 0, 1, 2, . . .

de donde resulta clara la conexión con los campos direccionales: uniendo los puntos
del plano (xi , yi ) por medio de una poligonal podemos representar gráficamente la
aproximación a la solución y(x) en el intervalo [a, b].
El método de Euler también puede ser deducido integrando la ecuación diferencial
de partida entre xn y xn+1 ,
Z xn+1
y(xn+1 ) = y(xn ) + f (x, y(x))dx
xn

y reemplazando f (x, y(x)) por su valor aproximado f (x, yn ) en el extremo inferior del
intervalo de integración. Como ya se vio en la práctica 5, son posibles aproximaciones
más precisas para esta integral. Ası́, se puede sustituir el integrando por el valor
promedio de sus valores en los puntos extremos, con lo cual se tiene el esquema
1
yn+1 = yn + h[f (xn , yn ) + f (xn+1 , yn+1 )],
2
o bien
1
yn+1 = yn + h[f (xn , yn ) + f (xn+1 , yn + hf (xn , yn ))],
2
llamado método de Euler mejorado (el cual se reduce a la regla del trapecio si
f sólo depende de x y no de y).
Una forma sistemática de obtener métodos más efectivos que el de Euler consiste
simplemente en aplicar el teorema de Taylor a órdenes más altos en h. El método
resultante tiene la propiedad deseable de un error de truncamiento local de orden
tan alto como se desee, pero la desventaja de requerir el cálculo y la evaluación de las
derivadas sucesivas de la función f , lo cual puede ser un procedimiento muy costoso
para gran cantidad de problemas. Para subsanar esta dificultad se introducen los
métodos de Runge–Kutta, los cuales poseen un error de truncamiento local del
mismo orden que los métodos de Taylor sin necesidad de calcular las derivadas de f .
De hecho, el método de Euler mejorado visto anteriormente puede ser considerado
un método de Runge–Kutta de segundo orden. Otro método del mismo orden viene
dado por
yn+1 = yn + h[f (xn + h/2, yn + (h/2)f (xn , yn ))],
llamado método del punto medio.
Uno de los métodos de Runge–Kutta más populares es el de orden 4 dado por el
siguiente esquema recursivo:

xn+1 = xn + h
1
yn+1 = yn + (k1 + 2k2 + 2k3 + k4 ) ,
6

87
donde

k1 = hf (xn , yn )
k2 = hf (xn + h/2, yn + k1 /2)
k3 = hf (xn + h/2, yn + k2 /2)
k4 = hf (xn+1 , yn + k3 ) .

El principal esfuerzo computacional al aplicar los métodos de Runge–Kutta es la


evaluación de f . El método de Runge–Kutta de orden 4 requiere cuatro evaluaciones
de f por paso, pero el error de truncamiento local es O(h5 ). Obsérvese además que
si f no depende de y, entonces este método no es más que la regla de Simpson para
el cálculo de integrales.

7.2.1. Resolución numérica con Mathematica


Mathematica puede resolver numéricamente el problema de valor inicial definido
por una ecuación diferencial por medio de la función intrı́nseca NDSolve. La sintaxis
de NDSolve es casi idéntica a la de DSolve:

NDSolve[{ODE, cond. inic.},y[x],{x,xmin,xmax}]

A continuación ilustramos su uso aplicándolo al problema


x
y0 = , y(0) = 1
(y + x)2

el cual no admite solución analı́tica (¡compruébalo!).

r1=NDSolve[{y’[x]==x/(y[x]+x)^2, y[0]==1},y[x],{x,0,10}]

{{y[x] -> InterpolatingFunction[{{0.,10.}},<>][x]}}

La función y(x) se determina numéricamente por medio de InterpolatingFunction,


la cual interpola listas de datos. Cuando NDSolve resuelve numéricamente una ecua-
ción diferencial, encuentra valores para y(x) sólo en valores especı́ficos de x entre
xmin y xmax, y después usa InterpolatingFunction para interpolar entre estos
valores de x.
La solución aproximada obtenida se puede extraer y representar gráficamente:

s[x_]= y[x] /. r1[[1]];


Plot[s[x],{x,0,10}];

Ahora viene una cuestión importante: ¿cómo podemos saber que la respuesta
proporcionada por NDSolve es correcta? Una forma obvia es sustituir la solución en
la ecuación diferencial y ver si ésta se verifica. Esto se puede hacer de la siguiente
forma:

error[x_]=s’[x] - x/(s[x] + x)^2;


Plot[error[x],{x,0,10}];

88
-6
7.5·10
-6
5·10
-6
2.5·10
2 4 6 8 10
-6
-2.5·10
-6
-5·10
-6
-7.5·10

La figura muestra que el error en la solución es pequeño, pero no cero.

7.2.2. Algoritmo de los métodos numéricos en Mathematica


Utilizando Mathematica, los métodos de Euler y de Runge–Kutta para obtener
la solución aproximada de un problema de valor inicial son fáciles de implementar.
En primer lugar ilustramos el método de Euler sobre un ejemplo.

Ejemplo 7.10. Usa el método de Euler para aproximar la solución del siguiente
problema de valor inicial:
dy
= xy, y(0) = 1
dx
para h = 0,1. Determina también la solución exacta y compara los resultados.

Solución. Empezamos definiendo la función f (x, y) = xy y la condición inicial.


También se da la fórmula recursiva para x e y. Obsérvese que, debido a la manera
como se define y, todos los valores previos de y se almacenan en la memoria.

Clear[f,x,y,h]
f[x_,y_] = x y;
h = 0.1;
y[0] = 1;
x[n_] = n h;
y[n_]:= y[n] = y[n-1] + h f[x[n-1],y[n-1]];

Podemos formar una tabla con los valores aproximados proporcionados por esta
fórmula recursiva ası́:

ytabla = Table[ y[i], {i,0,10} ];

y una lista de pares ordenados como

89
euler = Table[ {x[i-1],ytabla[[i]]}, {i,1,Length[ytabla]}];

Nótese que el ı́ndice de x ha de ser uno más pequeño que el de y, ya que ytabla[[i]]
representa el elemento i-ésimo de la lista, mientras que x[i] sustituye i en la fórmula
que determina x. Estos puntos se pueden representar gráficamente con ListPlot,
de manera que la aproximación se puede comparar con la solución exacta, que en
este caso es
2
y(x) = ex /2 .
La solución aproximada obtenida con el método de Euler y la solución exacta se
dibujan ası́:

plot1 = ListPlot[ euler, PlotJoined -> True,


DisplayFunction -> Identity ];
exactplot = Plot[ Exp[(x^2)/2], {x,0,1},
PlotStyle -> GrayLevel[0.2],
DisplayFunction -> Identity ];
Show[ plot1, exactplot,
DisplayFunction -> $DisplayFunction ];

Damos a continuación el procedimiento correspondiente al método de Runge–


Kutta de cuarto orden.

rungeKutta[{x_, y_}] :=
Module[{k1, k2, k3, k4},
k1 = h * f[x, y];
k2 = h * f[x + h/2, y + k1/2];
k3 = h * f[x + h/2, y + k2/2];
k4 = h * f[x + h, y + k3];
{x + h, y + 1/6 (k1 + 2 k2 + 2 k3 + k4)}
]

Utilizando este algoritmo, vamos a calcular una aproximación de la solución del


problema de valor inicial y 0 = xy, y(0) = 1, con tamaño de paso h = 0,1, en el
intervalo [0, 1].

f[x_, y_] = x y;
h = 0.1;

Para obtener la aproximación de la solución requerida utilizamos la función in-


corporada NestList. La sintaxis de esta función es como sigue

NestList[funcion, expresion, n]

Mathematica, en este caso, devuelve una lista de los resultados de aplicar funcion
sobre expresion desde 0 hasta n .

rk = NestList[rungeKutta, {0, 1}, 10];


ListPlot[rk, PlotStyle -> Thickness[0.01],
PlotJoined -> True];

90
1.6

1.5

1.4

1.3

1.2

1.1

0.2 0.4 0.6 0.8 1


Las opciones PlotStyle -> Thickness[0.01] y PlotJoined -> True las uti-
lizaremos cuando tengamos que comparar dos o más gráficos.

7.2.3. Sistemas de ecuaciones diferenciales


Vamos a ver ahora cómo el método de Runge–Kutta de orden 4 se puede aplicar
también a la resolución de sistemas de ecuaciones diferenciales. Para ello considera-
mos un par de ejemplos sencillos en los que será posible comparar la aproximación
con la solución exacta.
En el primer caso, aproximamos la solución del problema de valor inicial definido
por
x0 = x − y + 1
x(0) = 0, y(0) = 1
y 0 = x + 3y + e−t
utilizando un tamaño de paso h = 0,1. En este caso programamos el método de
Runge–Kutta (con un estilo particularmente ineficiente) por medio de la construc-
ción Module.
In[28]:= xrk@n_D := Module@8k1, k2, k3, k4<,
k1 = f@t@n - 1D, xrk@n - 1D, yrk@n - 1DD; m1 = g@t@n - 1D, xrk@n - 1D, yrk@n - 1DD;
k2 = f@t@n - 1D + h  2, xrk@n - 1D + h * k1  2, yrk@n - 1D + h * m1  2D;
m2 = g@t@n - 1D + h  2, xrk@n - 1D + h * k1  2, yrk@n - 1D + h * m1  2D;
k3 = f@t@n - 1D + h  2, xrk@n - 1D + h * k2  2, yrk@n - 1D + h * m2  2D;
m3 = g@t@n - 1D + h  2, xrk@n - 1D + h * k2  2, yrk@n - 1D + h * m2  2D;
k4 = f@t@n - 1D + h, xrk@n - 1D + h * k3, yrk@n - 1D + h * m3D;
m4 = g@t@n - 1D + h, xrk@n - 1D + h * k3, yrk@n - 1D + h * m3D;
xrk@nD = xrk@n - 1D + Hh  6L * Hk1 + 2 * k2 + 2 * k3 + k4LD

In[29]:= yrk@n_D := Module@8k1, k2, k3, k4<,


k1 = f@t@n - 1D, xrk@n - 1D, yrk@n - 1DD; m1 = g@t@n - 1D, xrk@n - 1D, yrk@n - 1DD;
k2 = f@t@n - 1D + h  2, xrk@n - 1D + h * k1  2, yrk@n - 1D + h * m1  2D;
m2 = g@t@n - 1D + h  2, xrk@n - 1D + h * k1  2, yrk@n - 1D + h * m1  2D;
k3 = f@t@n - 1D + h  2, xrk@n - 1D + h * k2  2, yrk@n - 1D + h * m2  2D;
m3 = g@t@n - 1D + h  2, xrk@n - 1D + h * k2  2, yrk@n - 1D + h * m2  2D;
k4 = f@t@n - 1D + h, xrk@n - 1D + h * k3, yrk@n - 1D + h * m3D;
m4 = g@t@n - 1D + h, xrk@n - 1D + h * k3, yrk@n - 1D + h * m3D;
yrk@nD = yrk@n - 1D + Hh  6L * Hm1 + 2 * m2 + 2 * m3 + m4LD

91
A continuación definimos la ecuación e inicializamos las variables:
In[14]:= f@t_, x_, y_D := x - y + 1; g@t_, x_, y_D := x + 3 y + E ^ H-tL;

In[15]:= h = 0.1; xrk@0D = 0; yrk@0D = 1; t@n_D = h * n;

La solución se da en forma de tabla:


In[16]:= solaprox = Table@8t@iD, xrk@iD, yrk@iD<, 8i, 0, 10<D

880, 0, 1<, 80.1, -0.0226878, 1.46031<, 80.2, -0.10332, 2.06541<,


80.3, -0.265382, 2.85897<, 80.4, -0.540021, 3.8967<,
Out[16]=

80.5, -0.968273, 5.24956<, 80.6, -1.60391, 7.00778<, 80.7, -2.51707, 9.28596<,


80.8, -3.79882, 12.2294<, 80.9, -5.56704, 16.0223<, 81., -7.97379, 20.8975<<

Seguidamente, calculamos la solución exacta y comparamos con los resultados


proporcionados por el método de Runge–Kutta.

de = DSolve@8x1 '@tD Š x1@tD - y1@tD + 1,


y1 '@tD Š x1@tD + 3 y1@tD + E ^ H-tL, x1@0D Š 0, y1@0D Š 1<, 8x1@tD, y1@tD<, tD
In[17]:=

::x1@tD ® - ã-t I4 + 27 ãt - 31 ã3 t + 66 ã3 t tM, y1@tD ® ã-t I-8 + 9 ãt + 35 ã3 t + 66 ã3 t tM>>


1 1
Out[17]=
36 36

In[18]:= xexacta@t_D = de@@1, 1, 2DD; yexacta@t_D = de@@1, 2, 2DD;

In[21]:= comparexrk = Table@8t@iD, xrk@iD, xexacta@t@iDD, yrk@iD, yexacta@t@iDD<, 8i, 0, 10<D;

In[22]:= TableForm@comparexrkD

Out[22]//TableForm=
0 0 0 1 1
0.1 -0.0226878 -0.0226978 1.46031 1.46032
0.2 -0.10332 -0.103346 2.06541 2.06545
0.3 -0.265382 -0.265432 2.85897 2.85904
0.4 -0.540021 -0.540105 3.8967 3.89682
0.5 -0.968273 -0.968408 5.24956 5.24975
0.6 -1.60391 -1.60412 7.00778 7.00806
0.7 -2.51707 -2.51737 9.28596 9.28638
0.8 -3.79882 -3.79926 12.2294 12.23
0.9 -5.56704 -5.56767 16.0223 16.0232
1. -7.97379 -7.97468 20.8975 20.8987

El método de Runge–Kutta también puede ser aplicado para resolver numérica-


mente ecuaciones diferenciales de orden superior al primero. Para ello se ha trans-
formar primero la ecuación diferencial en un sistema de ecuaciones. Ilustramos a
continuación el procedimiento con la ecuación

x00 + sin x = 0, x(0) = 0, x0 = 0.

Empezamos transformando esta ecuación de segundo orden en un sistema de dos

92
ecuaciones de primer orden escribiendo x0 = y, y 0 = x00 = − sin x.
In[23]:= Clear@f, g, h, xrk, yrk, tD

In[24]:= f@t_, x_, y_D := y; g@t_, x_, y_D := -Sin@xD;

In[25]:= h = 0.1; xrk@0D = 0; yrk@0D = 1; t@n_D = h * n;

A continuación ejecutamos de nuevo los procedimientos xrk e yrk anteriores y


representamos tanto la solución aproximada como la exacta. ¿Notas alguna similitud
con el tratamiento sobre integración numérica en la práctica 5?
In[30]:= sols = Table@8xrk@iD, yrk@iD<, 8i, 0, 70<D;

In[32]:= plot1 = ListPlot@sols, AspectRatio ® 1, DisplayFunction ® IdentityD;

plot2 =
ParametricPlot@8Cos@xD, Sin@xD<, 8x, 0, 2 Pi<, AspectRatio ® 1, DisplayFunction ® IdentityD;
In[33]:=

In[34]:= Show@plot1, plot2, DisplayFunction ® $DisplayFunctionD


1.0

0.5

-1.0 -0.5 0.5 1.0

-0.5

-1.0

7.3. Ejercicios
Ejercicio 7.1. Utiliza los algoritmos vistos en esta sección con tamaño de paso
h = 0,1 para obtener una aproximación del problema de valor inicial dado en el
intervalo especificado:

1. y 0 = x + 2y , y(1) = 1/2 en el intervalo [1, 2].

2. y 0 = 3 cos(y − 5x) , y(0) = 0 en el intervalo [0, 1].

Ejercicio 7.2. Compara los resultados obtenidos en el apartado anterior para cada
uno de los métodos. Representa gráficamente cada una de las aproximaciones y com-

93
páralas con la solución del problema de valor inicial dado (si es que se puede calcular
la solución).

Ejercicio 7.3. Usa el método de Runge–Kutta de orden 4 para aproximar la solución


del problema de valor inicial no lineal

y0 = x y, y(1) = 1

con h = 0,1. Determina la solución exacta de esta ecuación y compara los resultados
de la solución aproximada con los de la solución exacta.

Ejercicio 7.4. Haz lo propio con la ecuación


dy
= 2 y 3/2 , y(0) = 1
dx
con h = 0,1.

Ejercicio 7.5. Resuelve los sistemas siguientes:


x0 = 2x − y
1. ,
y 0 = −x + 3y

x0 = 2x
2. , con la condición inicial x(0) = 1, y(0) = 1.
y 0 = 3x + 2y

x0 = x + 4y
3.
y 0 = −2x − y
Ejercicio 7.6. Usa el método de Runge–Kutta de orden 4 para aproximar la solución
del problema de valor inicial definido por

x0 = x − y + 1
y 0 = x + 3y + e−t

y x(0) = 0, y(0) = 1, con h = 0,1. Compara estos resultados con los de la solución
exacta del sistema.

94
Práctica 8

Derivadas parciales. Extremos


en funciones de varias variables

8.1. Derivadas parciales


Las derivadas parciales de una función de varias variables se calculan mediante
el comando D[f[x,y,],{x,n1},{y,n2},...].

Ejemplo 8.1. Si f (x, y, z) = x2 sin(πx) cos(y 2 )/(x + z), obtener:

a) Expresiones para las funciones:

∂3f ∂3f ∂3f


(x, y, z), y .
∂x3 ∂x2 ∂y ∂x∂y∂x

b) El valor de:

∂3f ∂3f ∂3f


(0, 0, 1), (1, 1, 1) y (1, 1, 1).
∂x3 ∂x2 ∂y ∂x∂y∂x

Solución. En primer lugar definimos f :


f!x_, y_, z_" :! x ^ 2 Sin!Π x" Cos!y ^ 2" # $x # z%

A continuación obtenemos las derivadas pedidas en el apartado (a). Utilizamos


el comando FullSimplify para obtener expresiones sencillas:

95
D!f!x, y, z", #x, 3$"

Π3 x2 Cos!Π x" Cos!y2 " # 2 x2 2 (


######## $ 3 Π %
% #################### $ ############ *
* Cos!Π x" Cos!y2 " $
$ &x $ z' &x $ z' $z )
4x
! ################################
################ ! ####################
x$z 3 2 x
#
% (
*
%! #################### * Cos!y2 " Sin!Π x" !
$ &x $ z'4 &x $ z'3 &x $ z'2 )
6 x2 12 x 6
$ #################### ! ####################

# 2x (
% ########x############ $ ########
3 Π2 %! #### *
* Cos!y2 " Sin!Π x"
$ &x $ z'2 x$z )
2

FullSimplify!%"

Cos!y2 " &Π &x $ z' &!6 z2 $ Π2 x2 &x $ z'2 ' Cos!Π x" $ 3 &2 z2 $ Π2 x &x $ z'2 &x $ 2 z'' Sin!Π x"'
&x $ z'4
! ################################
################################
################################
################################
################################
################################
################
################
#######

Finalmente asignamos los valores indicados a las variables:


D!f!x, y, z", #x, 3$" %. #x ! 0, y ! 0, z ! 1$

D!f!x, y, z", #x, 2$, #y, 1$" %. #x ! 1, y ! 1, z ! 1$

3 Π Sin!1"

D!f!x, y, z", #x, 1$, #y, 1$, #x, 1$" %. #x ! 1, y ! 1, z ! 1$

3 Π Sin!1"
 
f (x, y) y
Ejercicio 8.1. Si sabemos que sin = , obtener:
x4 y 2 x

∂2f 1 ∂f ∂f
(1, ), y x (x, y) + y (x, y) − 6f (x, y).
∂x∂y 2 ∂x ∂y

Ejemplo 8.2. Consideramos la función f (x, y) = −2x2 − y 2 . Dibujar el plano


tangente a la gráfica de f (x, y) en el punto (1, 2).

Solución. El plano tangente a la gráfica de f (x, y) en el punto (1, 2) tiene como


ecuación:
∂f ∂f
z= (1, 2)(x − 1) + (1, 2)(y − 2) + f (1, 2).
∂x ∂y
Para obtener la gráfica de f y la del plano tangente, dibujamos ambas gráficas con
el comando Plot3D. Podemos también situar el punto (1, 2) sobre la gráfica para
centrar nuestra atención (se utiliza el comando Graphics3D[Point[]]).
f!x_, y_" :! "2#x ^ 2 " y ^ 2;
planotang ! Plot3D!"4##x " 1$ " 4##y " 2$ " 6, %x, "3, 3&, %y, "3, 3&";
parab ! Plot3D!f!x, y", %x, "4, 4&, %y, "4, 4&";
point ! Graphics3D!%PointSize!0.02", Point!%1, 2, f!1, 2"&"&";
Show!planotang, point, parab"
El resultado obtenido debe ser similar a:

96
20
0 4
-20 2
-40
-4 0
-2
0 -2
2
4 -4

x2 − y 2
Ejercicio 8.2. Consideramos la función f (x, y) = xy .
x2 + y 2
a) Utilizar el comando Plot3D para obtener la gráfica de f . Situar sobre la
gráfica los puntos (0, 0) y (2, 1).

b) Dibujar la gráfica de f junto con su plano tangente en el punto (2, 1).

c) Escribir f (x, y) en coordenadas polares, simplificar y deducir que lı́m f (x, y) = 0.


(x,y)→(0,0)

∂f ∂f ∂2f
d) Obtener utilizando los lı́mites pertinentes (0, 0), (0, 0), (0, 0) y
∂x ∂y ∂x∂y
∂2f
(0, 0).
∂y∂x
e) ¿Admite la gráfica de f plano tangente en (0, 0)?

8.2. Extremos libres


Recordemos que si x̄ = (x1 , · · · , xn ) es un extremo local de una función de n
variables f , entonces ∇f (x̄) = (0, . . . , 0) = 0, es decir, x̄ es un punto crı́tico de f .
No todos los puntos crı́ticos son máximos o mı́nimos. El criterio de la segunda
derivada permite en muchos casos reconocer si un punto crı́tico es o no un extremo
utilizando la matriz hessiana y su determinante, el hessiano. Para funciones de dos
variables el criterio puede enunciarse como sigue: Si f : R2 → R es una función de
dos variables con derivadas continuas de primer y segundo orden en un entorno de
(a, b), consideramos el determinante hessiano de f en (a, b):
2
∂ f ∂2f
∂x2 (a, b) ∂x∂y (a, b)

Hf (a, b) = 2 2
.
∂ f (a, b) ∂ f (a, b)

∂y∂x ∂y 2

El punto (a, b) es entonces:

97
∂2f
Un mı́nimo relativo si, Hf (a, b) > 0 y ∂x2
(a, b) > 0.
∂2f
Un máximo relativo si Hf (a, b) > 0 y ∂x2
(a, b) < 0.

Un punto de silla cuando Hf (a, b) < 0.

Es necesario observar que el criterio no ofrece información alguna cuando Hf ((a, b)) =
0.

Ejemplo 8.3. Clasificar en máximos, mı́nimos y puntos de silla los puntos crı́ticos
de la función: f (x, y) = xy(1 − x2 − y 2 ).

Solución. En primer lugar obtenemos los puntos crı́ticos. Para ello, podemos definir
un gradiente ad-hoc:
f!x_, y_" :! x y"#1 # x ^ 2 # y ^ 2$;
gradf ! %D!f!x, y", x", D!f!x, y", y"&
O podemos definir una función gradiente que luego podamos utilizar repetidas
veces. La función que sigue define la función gradiente de cualquier función g con n
variables cuyas variable vengan escritas como x[1], . . . , x[n]:
grad!g_, n_" :! Table!D!g, x!i"", #i, 1, n$";
¡Atención! esta definición de gradiente únicamente funciona si las variables de las
funciones son de la forma (x[1], x[2], . . . , x[n]) (no podemos usar (x, y, z) o (x1 , x2 , x3 ),
sólo (x[1], x[2], x[3])). Si definimos de esta manera el gradiente grad[g− , n− ], obten-
dremos el gradiente de f en (x, y) escribiendo:
f!x_, y_" :! x y #1 " x ^ 2 " y ^ 2$;
grad!f!x!1", x!2"", 2" %. &x!1" # x, x!2" # y '
Una vez hemos obtenido el gradiente de f , resolvemos el sistema de ecuaciones
(podemos usar el comando Solve) que permite obtener los puntos crı́ticos. De nuevo
podemos definir una función que nos permita obtener los puntos crı́ticos de cualquier
función g con n variables x[1], . . . , x[n]:
cer!n_" :! Table!0, #i, 1, n$"; inc!n_" :! Table!x!i",
#i, 1, n$";
Crit!g_, n_" :! Solve!grad!g, n" !! cer!n", inc!n""
donde las dos primeras lı́neas se han utilizado para crear una lista de n ceros y
la lista de las variables x[1], . . . , x[n].
De este modo, al hacer Crit[f [x[1], x[2]], 2] obtendremos la lista de puntos crı́ti-
cos:
Crit!f!x!1", x!2"", 2"

!"x#1$ ! "1, x#2$ ! 0%, !x#1$ ! " #### , x#2$ ! " #### &, !x#1$ ! " #### , x#2$ ! #### &,
1 1 1 1

"x#1$ ! 0, x#2$ ! 0%, !x#1$ ! #### , x#2$ ! " #### &, !x#1$ ! #### , x#2$ ! #### &,
2 2 2 2
1 1 1 1

"x#1$ ! 1, x#2$ ! 0%, "x#2$ ! "1, x#1$ ! 0%, "x#2$ ! 1, x#1$ ! 0%&
2 2 2 2

Una vez sabido que los puntos crı́ticos son (0, 0), (±1, 0), (±1/2, ±1/2) (siete en
total) se trata de definir la matriz hessiana para poder distinguir los máximos de los
mı́nimos y de los puntos de silla.
El comando que sigue define la matriz hessiana:

98
Hess!f_, n_" :! Table!Table!D!f, x!i", x!j"", #j, 1, n$", #i,
1, n$";
Y podemos extraer el valor del determinante de cada hessiano definiendo
listHess!f_, n_" :! Table!Det!Hess!f, n"" #. Crit!f, n"!!j"",
$j, 1, Length!Crit!f, n""%";
Se puede implementar una definición similar para obtener una lista de valores de
∂2f
en cada punto crı́tico. El resultado final es que (−1/2, 1/2) y (1/2, −1/2) son
∂x2
mı́nimos locales y que los puntos (1/2, 1/2) y (−1/2, −1/2) son máximos locales. El
resto de puntos crı́ticos son puntos de silla.
Se muestra finalmente la gráfica de f con un máximo, un mı́nimo y un punto de
silla marcados sobre ella.

0.2

0.1
Z
0.5
0

-0.1

-0.2

-1 0
Y
-0.5

X 0.5
-0.5

Ejercicio 8.3. Representar gráficamente la función f (x, y) = 32x3 − 27xy + y 3 x, a


continuación obtener sus máximos y mı́nimos locales.
Ejercicio 8.4.

a) Definir una función de una variable con un único máximo local y ningún
otro punto crı́tico. ¿Es este punto un máximo absoluto? ¿Podemos encontrar
alguna función de una variable con único punto crı́tico que sea máximo local
y que no sea máximo absoluto?
2
b) Comprobar que la función f (x, y) = e−y 2x3 − 3x2 + 1 + e−y 2x3 − 3x2
 

tiene un único punto crı́tico y que éste es un máximo.

c) ¿Es el punto obtenido un máximo absoluto de f (x, y)?

Mathematica tiene implementadas las funciones FindMaximum y FindMinimum


para encontrar máximos y mı́nimos locales. Es necesario indicar un punto x0 a
partir del cual pueda buscar.
Ejemplo 8.4. La función f (x, y) = (x2 + y 2 ) tiene un único punto crı́tico que es
un mı́nimo absoluto, el (0, 0). Eelgimos comenzar la búsqueda desde el punto (1, 2),
la función

99
FindMaximum[x2 + y 2 , {x, 1}, {y, 2}] localiza rápidamente el máximo.

Ejercicio 8.5. Repetir el Ejercicio 8.3 utilizando los comandos FindMaximum y


FindMinimum. Será necesario escoger cuidadosamente los puntos de partida.

8.3. Extremos condicionados. Multiplicadores de Lagran-


ge
El método de los multiplicadores de Lagrange consiste en observar que los extre-
mos de la función de n variables f (x1 , . . . , xn ) en aquellos puntos (x1 , . . . , xn ) que
satisfacen las k condiciones g1 (x1 , . . . , xn ) = 0, . . . , gk (x1 , . . . , xn ) = 0 se encuentran
entre los puntos crı́ticos de la función de n + k variables:

L(x1 , . . . , xn , λ1 , . . . , λk ) = f (x1 , . . . , xk ) − λ1 g1 (x1 , . . . , xn ) − · · · − λk gk (x1 , . . . , xn ).

Aunque existen métodos para diferenciar cuáles de los puntos crı́ticos obtenidos
son máximos, cuáles son mı́nimos y cuales son puntos de silla, nos conformaremos
aquı́ con dar una lista de todos los puntos crı́ticos y determinar cuáles son los puntos
máximo y mı́nimo absoluto a partir del valor de la función f en cada punto crı́tico.

Ejercicio 8.6. La temperatura de cada punto (x, y, z) de una caja viene dada por
la función T (x, y, z) = 20 + 2x + 2y + z 2 . ¿Cuál será el punto más caliente en el
cı́rculo que aparece al cortar la esfera x2 + y 2 + z 2 = 11 con el plano x + y + z = 3?

Ejercicio 8.7. Consideramos la parábola y 2 = x − 1. Encontrar el mı́nimo absoluto


de la función f (x, y) = x2 + y 2 en el recinto limitado por esta parábola (es decir
los puntos (x, y) con y 2 − x ≤ 1). Para encontrar el mı́nimo sobre la frontera (los
puntos (x, y) con y 2 = x − 1) utilizaremos dos métodos: en primer lugar reducire-
mos la función f (x, y) a una sola variable; a continuación lo haremos utilizando
los multiplicadores de Lagrange. Dibujar la parábola y deducir cuál es el resultado
correcto.

100
Apéndice A

Sistemas de ecuaciones
diferenciales no lineales

En este apéndice estudiamos los sistemas de ecuaciones diferenciales no linea-


les. No podemos obtener solución analı́tica de las ecuaciones y sistemas no lineales,
pero mediante estudios geométricos y cualitativos es posible determinar su compor-
tamiento. Para realizar este estudio resulta muy útil el programa Mathematica.
Los métodos cualitativos que introducimos nos permiten obtener propiedades de
las soluciones incluso aunque éstas no sean conocidas. De esta manera podremos
obtener una visión del comportamiento de las soluciones sin la expresión analı́tica
de ellas. Cuestiones como estabilidad o comportamiento asintótico de las soluciones
a lo largo del tiempo se investigan con la ayuda de este tipo de métodos.
Consideremos un sistema que depende del tiempo t y de n funciones incógnita
que satisfacen la ecuación diferencial

x0 = f (t, x)

para una cierta función vectorial x = (x1 (t), · · · , xn (t)).


En primer lugar consideraremos sistemas autónomos, es decir, que no dependen
del tiempo explı́citamente,

x0 = f (x), x ∈ Rn .

En caso contrario se denomina no autónomo. Un sistema no autónomo de ecua-


ciones diferenciales de la forma x0 = f (t, x) es equivalente a un sistema autónomo,
obtenido definiendo una nueva variable como sigue

x0 = f (t, x)
t0 = 1.

De esta manera podemos hacer el estudio para sistemas autónomos y extenderlo a los
no autónomos. Centramos dicho estudio en los sistemas de dos ecuaciones llamados
sistemas planos autónomos
 0
x = f (x, y)
(A.1)
y 0 = g(x, y).

101
A.1. Estudio geométrico: campos de direcciones
Un campo vectorial de un sistema de ecuaciones diferenciales

x0 = f (x)

consiste en todos los vectores con origen en los puntos de coordenadas x ∈ Rn


y orientados en la dirección del vector f (x). Podemos imaginar que los vectores
representan la velocidad de un objeto moviéndose en el espacio, estos vectores son
tangentes a su trayectoria.
Aunque dibujamos los campos de direcciones mediante el uso de ordenadores,
hay un aspecto que los hace más difı́ciles de representar gráficamente que los cam-
pos de pendientes (para las ecuaciones). Por definición, los vectores en un campo
vectorial tiene varias longitudes determinadas por el sistema de ecuaciones; algunos
pueden ser muy cortos y otros muy largos. Por tanto, si dibujamos un campo vec-
torial evaluándolo sobre una malla regular del plano, a menudo obtenemos vectores
que se solapan. Para evitar la confusión de los vectores, se escalan los vectores de
manera que todos ellos tengan la misma longitud. La imagen resultante se llama
campo de direcciones asociado al campo de vectores original. Pero se tiene algu-
na pérdida de información ya que la longitud del vector corresponde a la rapidez de
la solución cuando ésta pasa por el punto asociado en el plano. Aun ası́ podemos ob-
tener información de los campos de direcciones sobre la geometrı́a de las soluciones
pero no resulta tan eficiente como en el caso de las ecuaciones de orden uno.
Para ilustrar estos conceptos vamos a analizar en detalle dos ejemplos especial-
mente relevantes por su importancia histórica y sus aplicaciones.
Ejemplo 1: Sistemas depredador-presa
Consideremos la situación en la que una especie (los depredadores) cazan a la
otra especie (la presa), mientras la presa se alimenta de otra fuente de comida.
Por ejemplo, los zorros y los conejos en un entorno cerrado (bosque): los zorros se
alimentan de conejos y los conejos de la vegetación del bosque.
Sean x e y las poblaciones de las presas y los depredadores, respectivamente,
en un tiempo t. Para la construcción de un modelo de interacción, hacemos las
siguientes suposiciones:

En ausencia de depredador la presa crece proporcionalmente a la población


actual, por tanto dx/dt = ax, a > 0, cuando y = 0.

En ausencia de presa, el depredador se extingue, por tanto dy/dt = −cy, c > 0,


cuando x = 0.

El número de encuentros entre depredador y presa es proporcional al producto


de sus poblaciones. Cada encuentro promueve el crecimiento de los depreda-
dores e inhibe el crecimiento de las presas. Por tanto, la tasa de crecimiento
del depredador se incrementa por un término de la forma γxy, mientras que la
tasa del crecimiento de la presa disminuye mediante un término −αxy, donde
γ y α son constantes positivas.

102
Como consecuencia, se obtiene el siguiente sistema de ecuaciones diferenciales,

 dx = ax − αxy

= x(a − αy)
dt (A.2)
dy

 = −cy + γxy = y(−c + γx)
dt
donde a, c, α y γ son constantes positivas; a y c son las constantes de proporcionali-
dad del crecimiento de la presa y la tasa de mortalidad del depredador, respectiva-
mente; α y γ son las medidas del efecto de interacción entre las dos especies. Estas
ecuaciones se conocen como ecuaciones de Lotka–Volterra y caracterizan una
amplia clase de problemas.
Estudiemos el campo de direcciones para el sistema de Lotka–Volterra donde
a = 2, α = 1, c = 3 y γ = 1,

 dx = 2x − xy

 dt

(A.3)

 dy

 = −3y + xy.
dt
En primer lugar, cargamos el paquete que dibuja los campos de direcciones,

In[1]:= << Graphics`PlotField`

La sentencia de Mathematica que dibuja los campos de direcciones viene dada en la


forma,
campdir = PlotVectorField@82 x - x y, -3 y + x y<, 8x, 0, 15<,
8y, 0, 15<, ScaleFunction ® H1 &L, Axes ® TrueD

15

10

5 10 15

103
Los campos de direcciones nos dan una idea de la forma geométrica de las curvas
solución dadas en su forma paramétrica (x(t), y(t)).

Ejercicio A.1. Esboza el campo de direcciones para el oscilador armónico dado por
el sistema 
dx
 dt = v



(A.4)

 dv

 = −x.
dt
Aunque no vamos a ver el estudio de sistemas de tres ecuaciones, resulta intere-
sante ver cómo se representan los campos de direcciones tridimensionales. Para ello
consideramos el sistema
dx


 = 3x



 dt


dy

= x − 4y + 2z (A.5)


 dt


 dz = −4y + z.



dt
El paquete que dibuja los campos de direcciones tridimensionales es el siguiente,
<< Graphics`PlotField3D`

y la sentencia,
campo = PlotVectorField3D@83 z, x - 4 y + 2 z, -4 y + z<, 8x, -4, 4<,
8y, -4, 4<, 8z, -3, 3<, VectorHeads ® True, ViewPoint -> 81.240, -1.521, 2.757<D

Observamos que a veces el resultado no es tan gráfico como en el caso bidimen-


sional.

104
Ejemplo 2. La ecuación de van der Pol
Esta ecuación describe el comportamiento de circuitos eléctricos no lineales como
los que fueron usados en los primeros aparatos de radio. Fue introducida por Lord
Rayleigh en 1883 y B. van der Pol en 1926 la estudió más exhaustivamente como
modelo del voltaje en un circuito eléctrico. Pero esta ecuación también modeliza
otros tipos de fenómenos fı́sicos. Por ejemplo, justo dos años después del artı́culo
de van der Pol, él mismo junto con J. van der Mark propuso esta ecuación como
modelo para los latidos del corazón.
Este tipo de circuito se usaba en los dı́as de los tubos de vacı́o. Los tubos actúan
como una resistencia normal cuando la corriente es elevada, y como una resistencia
negativa cuando la corriente es baja. Por tanto un circuito de este tipo favorece osci-
laciones pequeñas y amortigua las grandes oscilaciones (oscilaciones de relajación).
La ecuación que describe este sistema es:

d2 x dx
2
+ ε(x2 − 1) +x=0
dt dt
siendo ε es un parámetro que mide la no linealidad del sistema. Para ε = 0, el
sistema es un oscilador lineal.
Convertimos la ecuación de orden dos en un sistema plano,

ẋ = y
(A.6)
ẏ = −x − ε(x2 − 1)y.

que estudiamos en el ejercicio siguiente para diversos valores del parámetro.

Ejercicio A.2. Consideramos la condición inicial x(0) = 1, y(0) = 0. Estudia los


campos de direcciones para los valores de ε =0, 0.1, 0.2, 0.5, 0.8, 1. ¿Qué puedes
decir de las soluciones para cada caso? ¿Cómo evoluciona el sistema a medida que
crece el parámetro ε?

A.2. Estudio cualitativo. Retrato de fases


El estudio cualitativo nos permite hacernos una idea de cómo son las soluciones
a partir de las propiedades geométricas de las mismas. Recordemos que podemos
obtener soluciones aproximadas de éstas mediante métodos numéricos que junto con
los otros métodos nos ayudan a conocer las soluciones del sistema y ası́ obtener
conclusiones determinantes del problema planteado,
 0
x = f (x, y)
(A.7)
y 0 = g(x, y).

En el estudio cualitativo lo que dibujamos no son las soluciones en función del tiempo
x(t) y y(t), sino las ecuaciones paramétricas de la curva solución (x(t), y(t)).
Para entender los problemas de este tipo introducimos algunos conceptos. Un
punto (x0 , y0 ) es un punto de equilibrio del sistema si cumple

f (x0 , y0 ) = 0, g(x0 , y0 ) = 0. (A.8)

105
Por ejemplo, dado
x0 = 2x − y


y 0 = −x + 3y
para hallar los puntos de equilibrio hemos de resolver el sistema

2x − y = 0
−x + 3y = 0

obteniendo como única solución el punto (0, 0).


La solución del sistema linealizado sólo aproxima la solución del sistema no lineal,
el comportamiento de las soluciones del sistema no lineal cerca de cada punto de
equilibrio es la misma que la del correspondiente sistema linealizado en muchos casos.
El primer paso para la aproximación de un sistema no lineal cerca de cada punto
de equilibrio es encontrar dichos puntos y la matriz de linearización cerca de cada
punto de equilibrio se define de la forma
 ∂f (x , y ) ∂f (x0 , y0 ) 
0 0
 ∂x ∂y 
. (A.9)
 

 ∂g(x , y ) ∂g(x0 , y0 ) 
0 0
∂x ∂y
Después de determinar la matriz de linearización para cada punto de equilibrio,
tenemos que calcular los valores propios de la matriz. La clasificación de los puntos
de equilibrio se hace según el siguiente criterio:
Sea (x0 , y0 ) un punto de equilibrio del sistema (A.7) y sean λ1 y λ2 los valores
propios de (A.9). Entonces,

Si λ1 y λ2 son no nulos, distintos y positivos, (x0 , y0 ) es un nodo inestable.

Si λ1 y λ2 son no nulos, distintos y negativos, (x0 , y0 ) es un nodo estable.

Si λ1 y λ2 son no nulos y de distinto signo, (x0 , y0 ) es un punto de silla.

Si λ1,2 = α ± βi, β 6= 0 (x0 , y0 ) es un punto espiral estable si α < 0.

Si λ1,2 = α ± βi, β 6= 0 (x0 , y0 ) es un punto espiral inestable si α > 0.

Si λ1,2 = α ± βi, β 6= 0 (x0 , y0 ) es un centro si α = 0.

No estudiamos el caso en que los valores propios son iguales o son cero.
Si (x0 , y0 ) es un punto de equilibrio del sistema, entonces las funciones constantes

x(t) ≡ x0 , y(t) ≡ y0

satisfacen el sistema. Una solución constante del sistema se denomina solución de


equilibrio. Notemos que la trayectoria de la solución de equilibrio se reduce al
punto (x0 , y0 ). Además los puntos de equilibrio son fundamentales para determinar
el comportamiento de otras soluciones del sistema alrededor de ellos. Por una parte,
el teorema de existencia y unicidad establece que por un punto del plano sólo puede

106
pasar una solución. Luego, una solución que pasa por un punto de equilibrio es una
solución constante.
Si el punto inicial (x0 , y0 ) no es un punto de equilibrio, las ecuaciones paramétri-
cas de las soluciones, x(t) y y(t), dadas en la forma (x(t), y(t)) definen una curva en
el plano xy que denominaremos trayectoria del sistema. Distinguimos entre solu-
ciones del sistema y trayectorias, ambos términos no son sinónimos. Por una parte,
una solución del sistema (A.7) es un par ordenado de funciones (x(t), y(t)) tales
que satisfacen simultáneamente las dos ecuaciones de dicho sistema; por otra parte,
una trayectoria de (A.7) es una curva del plano xy de fases que puede ser defini-
da paramétricamente por más de una solución delsistema. Más adelante veremos la
diferencia entre ambos conceptos mediante un ejemplo.
Podemos ver cualitativamente el comportamiento del sistema mediante la cons-
trucción de su retrato de fase (representación en el plano de los puntos de equi-
librio y las trayectorias). El plano xy se denomina plano de fase y el conjunto de
trayectorias es lo que conocemos como retrato de fase.
El comportamiento de las trayectorias próximas a los puntos de equilibrio aisla-
dos resulta de particular interés porque nos permite saber si son estables e inestables.
Sin profundizar más en este tema ya que nos extenderı́amos demasiado veamos cómo
obtener el retrato de fase mediante Mathematica.

Ejemplo A.1. Sea el sistema


 0
x = 60x − 3x2 − 4xy
y 0 = 42y − 3y 2 − 2xy,

que corresponde a un sistema depredador-presa. Calcula y clasifica los puntos de


equilibrio.

Resolvemos el sistema
60x − 3x2 − 4xy = 0


42y − 3y 2 − 2xy = 0,

In[9]:= Solve@860 x - 3 x ^ 2 - 4 x y Š 0, 42 y - 3 y ^ 2 - 2 x y Š 0<, 8x, y<D

Out[9]= 88x ® 0, y ® 0<, 8x ® 0, y ® 14<, 8x ® 12, y ® 6<, 8x ® 20, y ® 0<<

y obtenemos: (0, 0), (0, 14), (12, 6) y (20, 0). Dado que x(t) indica el número de zorros
y y(t) el número de conejos respectivamente, y si ambas poblaciones son constantes se
deduce que las ecuaciones permiten solamente tres posibilidades no triviales: no hay
zorros y hay 14 conejos, o son 20 zorros y ningún conejo, o 12 zorros y 6 conejos. En
particular, el punto crı́tico (12, 6) describe la única posibilidad para la coexistencia
de poblaciones constantes no nulas de ambas especies. Estudiamos la linearización
de este caso.

107
In[16]:= f@x_, y_D = 60 x - 3 x ^ 2 - 4 x y;
g@x_, y_D = 42 y - 3 y ^ 2 - 2 x y;

matlin = 99¶x f@x, yD, ¶y f@x, yD=, 9¶x g@x, yD, ¶y g@x, yD==
. 8x ® 12, y ® 6<

Out[23]= 88-36, -48<, 8-12, -18<<

In[24]:= MatrixForm@matlinD

Out[24]//MatrixForm=
-36 -48
-12 -18
A continuación calculamos los valores propios de la matriz obtenida utilizando
el comando Eigenvalues.
In[26]:= Eigenvalues@matlinD  N

Out[26]= 8-52.632, -1.36799<

Como los valores propios son no nulos, distintos y negativos, el punto de equilibrio
es un nodo estable. La población de zorros y conejos tenderá con el tiempo a este
punto. 2
Cuando consideramos sistemas lineales como por ejemplo
 0
x = 5x + 3y − 4
y 0 = −4x − 3y + 2.

podemos hacer un estudio bastante completo ya que disponemos de las soluciones de


manera explı́cita. Buscamos el punto de equilibrio definiendo las funciones f (x, y) =
5x + 3y − 4 y g(x, y) = −4x − 3y + 2 y resolviendo el sistema,

5x + 3y − 4 = 0
−4x − 3y + 2 = 0

El sistema posee un único punto de equilibrio (2, −2) y calculamos los valores
propios,
Eigenvalues@885, 3<, 8-4, -3<<D

Los valores propios son de distinto signo, luego es un punto de silla. Estudiamos
cómo son las trayectorias alrededor de este punto de silla mediante el comando
DSolve, el cual proporciona las soluciones exactas ya que el sistema es lineal.
In[29]:= sol = DSolve@8x '@tD Š 5 x@tD + 3 y@tD - 4,
y '@tD Š -4 x@tD - 3 y@tD + 2<,
8x@tD, y@tD<, tD  Simplify

::x@tD ® ã-t I8 ãt - 2 C@1D - 3 C@2D + 3 ã4 t H2 C@1D + C@2DLM,


1
Out[29]=
4

ã-t I-4 ãt + 2 C@1D + 3 C@2D - ã4 t H2 C@1D + C@2DLM>>


1
y@tD ®
2

108
Asignamos valores a las constantes C[1] y C[2] creando una tabla de funciones,
reemplazaremos C[1] y C[2] por los parámetros a y b respectivamente y le daremos
valores a estos parámetros. La tabla de funciones solución viene dada con paréntesis
que agrupan las funciones según los valores de los parámetros, con el fin de que las
asignaciones sean más fáciles de hacer quitamos los paréntesis usando Flatten.
tabsol = Table@8x@tD, y@tD< . sol@@1DD . 8C@1D ® a,
C@2D ® b<, 8a, -4, 4<, 8b, -3, 3<D;
In[31]:=

In[32]:= tabgraf = Flatten@tabsol, 1D;

ParametricPlot nos permite dibujar las funciones de la tabla para valores del tiem-
po −2 ≤ t ≤ 2.
grafica = ParametricPlot@Evaluate@tabgrafD, 8t, -2, 2<,
PlotRange ® 88-2, 4<, 8-4, 2<<D
In[34]:=

El gráfico corresponde a las ecuaciones paramétricas de las soluciones para dis-


tintas condiciones iniciales, el retrato de fase caracterı́stico de un punto de silla.
2

-2 -1 1 2 3 4

Out[34]= -1

-2

-3

-4

Comparamos con el campo de direcciones del sistema,


campdir = PlotVectorField@85 x + 3 y - 4, -4 x - 3 y + 2<, 8x, -2, 4<,
8y, -4, 2<, ScaleFunction ® H1 &L, Axes ® TrueD
In[39]:=

109
2

-2 -1 1 2 3 4

Out[39]= -1

-2

-3

-4

y superponemos ambos gráficos,


In[17]:= Show@grafica, campdirD

-2 -1 1 2 3 4

Out[17]= -1

-2

-3

-4
Un estudio similar se puede hacer para los sistemas no lineales aunque no obten-
gamos las soluciones analı́ticas utilizando el teorema siguiente.

Teorema A.2.1. Supongamos que (x0 , y0 ) es un punto de equilibrio del sistema no


lineal  0
x = f (x, y)
y 0 = g(x, y).
Entonces, las relaciones entre los puntos de equilibrio de sistemas lineales y no li-

110
neales aparece en la tabla siguiente.

Sist. lineal Sist. no lineal


Nodo estable Nodo estable
Nodo inestable Nodo inestable
Espiral estable Espiral estable
Espiral inestable Espiral inestable
Punto de silla Punto de silla
Centro ?

Aplicamos este teorema a las ecuaciones de Loka-Volterra,



dx
 dt = 2x − xy



(A.10)
 dy


 = −3y + xy, x(0) = 1, y(0) = 1.
dt
El sistema es no lineal y hay que resolverlo numéricamente mediante el comando
NDSolve.
In[26]:= sol = NDSolve@8x '@tD == 2 x@tD - x@tD y@tD,
y '@tD == -3 y@tD + x@tD y@tD,
x@0D Š 1, y@0D Š 1<, 8x@tD, y@tD<, 8t, 0, 10<D

Out[26]= 88x@tD ® InterpolatingFunction@880., 10.<<, <>D@tD,


y@tD ® InterpolatingFunction@880., 10.<<, <>D@tD<<
Mathematica obtiene una serie de puntos de la trayectoria (x(t), y(t)) utilizando
el método de resolución numérica de ecuaciones diferenciales (Runge–Kutta, Adam–
Basford, Heun,...) que considera adecuado y utiliza una función interpoladora de
dichos puntos, que almacena en su memoria y que nos da como respuesta de NDSolve.
A continuación dibujamos las gráficas de las soluciones x(t) y y(t) y establecemos
la diferencia de éstas con las trayectorias.

111
grafsol = Plot@Evaluate@8x@tD, y@tD< . solD, 8t, 0, 10<,
PlotStyle ® 8Red, Blue<, PlotRange ® 880, 10<, 80, 10<<,
In[11]:=

AspectRatio ® 1, AxesLabel -> 8t, "x HtL,yHtL"<D


x HtL,yHtL
10

Out[11]=

0 t
0 2 4 6 8 10
En la figura siguiente tenemos las gráficas de las soluciones x(t) y y(t) sobre el
mismo sistema de ejes; x(t) que corresponde a la población de presas (aparece por
debajo de la otra) y y(t) corresponde a la población de depredadores. Esta informa-
ción no es tan fácil de ver si las dibujamos en distintos ejes. Notamos que ambas son
funciones periódicas en t, esto explica las fluctuaciones que se observan experimen-
talmente en las poblaciones depredador-presa. Para esta solución particular vemos
que los incrementos en la población depredador están retardados respecto de los
aumentos en la población presa y que la población depredador continúa creciendo
por un corto tiempo después que la población presa comienza a declinar. Tal vez
la observación más importante que podemos hacer sobre esta gráfica es que ambas
poblaciones parecen repetirse con el mismo periodo aunque con cierto desfase.
Observamos que tenemos una gráfica para cada una de las soluciones con variable
independiente t pero tendremos más información sobre el comportamiento dinámico
del sistema mediante de la relación entre ambas soluciones a través del tiempo t.
Dados x(t) y y(t) podemos formar el par (x(t), y(t)) y considerarlo como un punto
en el plano xy para un valor fijo de t. Conforme varı́a t, el par (x(t), y(t)) dibuja una
curva en el plano de fase xy. Las coordenadas de cada punto sobre la curva son las
poblaciones presa y depredador en el tiempo t y el punto inicial (x0 , y0 ). Para cada
condición inicial tenemos una trayectoria en el plano de fase y el conjunto de todas
las trayectorias sobre el mismo plano xy conforma el retrato de fase. Para dibujar
las trayectorias utilizaremos la función ParametricPlot.
La trayectoria es una curva cerrada simple. Si seguimos la trayectoria, comenzan-
do en un punto en que la población de la presa es máxima, vemos que x disminuye y

112
y aumenta hasta que la población depredadora y es máxima. Después ambas dismi-
nuyen hasta que x es mı́nima. Y ası́ sigue la trayectoria hasta llegar al punto inicial.
En particular, vemos que si tanto x0 > 0 como y0 > 0, entonces tanto x(t) > 0 como
y(t) > 0 para todo t, por lo que ambas especies sobreviven en mutua coexistencia.
Si las fluctuaciones son tan amplias que x(t), presa, llegue a estar cerca de cero,
existe la posibilidad de que las últimas pocas presas sean devoradas, resultando su

fase1 = ParametricPlot@Evaluate@8x@tD, y@tD< . solD,


inmediata extinción y la eventual extinción consecuente de los depredadores.

8t, 0, 10<, PlotStyle ® Orange,


In[17]:=

PlotRange ® 880, 10<, 80, 10<<,


AspectRatio ® Automatic, AxesLabel ® 8"x", "y"<D
y
10

Out[17]=

0 x
0 2 4 6 8 10
Podemos mostrar los dos gráficos juntos con la opción GraphicsArray.

113
In[18]:= Show@GraphicsArray@8grafsol, fase1<DD

x HtL,yHtL y
10 10

8 8

6 6
Out[18]=

4 4

2 2

0 t 0 x
0 2 4 6 8 10 0 2 4 6 8 10

Para realizar un estudio completo y obtener el retrato de fase más completo con-
sideramos el sistema dado dejando la condición inicial en términos de un parámetro,

ẋ = 2x − xy
(A.11)
ẏ = −3y + xy; x(0) = 3s, y(0) = 2s

Obtenemos el retrato de fases con un programa sencillo. Este programa resuelve


numéricamente el sistema para el parámetro que aparece en la solución inicial y ob-
tiene las trayectorias sin mostrar el dibujo ya que aparece en términos del parámetro.

In[20]:= soluc@s_D := Module@8solt, y, x, t, ec1, ec2<,


ec1 = x '@tD == 2 x@tD - x@tD y@tD;
ec2 = y '@tD == -3 y@tD + x@tD y@tD;
solt =
NDSolve@8ec1, ec2, x@0D Š 3 s, y@0D Š 2 s<,
8x@tD, y@tD<, 8t, 0, 10<D;
ParametricPlot@8x@tD, y@tD< . solt, 8t, 0, 10<,
Compiled ® False,
DisplayFunction ® Identity, PlotStyle ® BlueD
D

Hacemos una tabla para diversos valores del parámetro s,

In[21]:= graf = Table@soluc@sD, 8s, 1  8, 7  8, 3  40<D;

y las mostramos mediante la función Show.

114
In[7]:= retfase = Show@graf, PlotRange ® All, DisplayFunction ® $DisplayFunctionD

10

6
Out[7]=

2 4 6 8 10 12

Podemos completar el estudio del problema comparando el campo de direcciones


con las trayectorias, superponiendo los gráficos.
In[23]:= Show@retfase, campdir, PlotRange ® 880, 15<, 80, 15<<,
AspectRatio ® 1D

14

12

10

8
Out[23]=

2 4 6 8 10 12 14

Las soluciones oscilan alrededor de una solución centro. Podemos deducir la


relación entre las dos poblaciones presa, x(t), y depredador, y(t): si seguimos un
ciclo en sentido antihorario comenzando cerca del punto (2, 0), podemos observar que
cuando x(t) aumenta, entonces y(t) aumenta hasta que hay sobrepoblación. Como
la población de las presas es demasiado pequeña para alimentar a los depredadores,

115
y(t) disminuye, lo que lleva a un aumento en la población de x(t). Como el número
de depredadores se hace demasiado pequeño para controlar la población de x(t), ésta
aumenta y se repite el ciclo. En este caso diremos que las soluciones son periódicas.
En el ejemplo descrito los valores de la condición inicial estaban relacionados por
el mismo parámetro s. Si queremos hacer un estudio del retrato de fases tomando
valores cualesquiera sólo tenemos que modificar un poco el proceso anterior.

In[25]:= soluc1@a_, b_D := Module@8solt, y, x, t, ec1, ec2<,


ec1 = x '@tD == 2 x@tD - x@tD y@tD;
ec2 = y '@tD == -3 y@tD + x@tD y@tD;
solt =
NDSolve@8ec1, ec2, x@0D Š a, y@0D Š b<, 8x@tD, y@tD<,
8t, 0, 10<D; ParametricPlot@8x@tD, y@tD< . solt,
8t, 0, 10<, Compiled ® False,
DisplayFunction ® Identity, PlotStyle ® BlueD
D

El programa lo construimos para los valores de la condición inicial x0 = a y


x0 = b, en la que no hay relación entre ambos. Aparece en la primera lı́nea el
nombre del programa en función de dos variables a y b. Después construimos la
tabla de soluciones para valores de los dos parámetros.

In[26]:= graf1 = Table@soluc1@a, bD, 8a, 1, 3<, 8b, 1, 3<D;

Y por último el retrato de fases cuya sentencia no difiere en nada de la anterior,

In[27]:= retfase = Show@graf1, PlotRange ® All, DisplayFunction ® $DisplayFunctionD

3
Out[27]=

1 2 3 4 5 6 7

116
A.3. Ejercicios
Ejercicio A.3. Estudia la estabilidad del punto crı́tico (0, 0) del sistema
 0
x = −x − xy 2
y 0 = −y − x2 y.

Ejercicio A.4. Demuestra que el punto crı́tico (0, 0) del sistema


 0
x = −y + xy 2 + 2x3
y 0 = x + x2 y + 3y 3

es inestable.

Ejercicio A.5. Haz un estudio similar para el ejercicioemplo del oscilador armónico

dx
 dt = v


 dv


 = −x.
dt
para diversos valores de la condición inicial x(0) = a, y(0) = b.

Ejercicio A.6. Estudia el sistema de Van der Pol



ẋ = y
ẏ = −x − ε(x2 − 1)y.

para diversos valores del parámetro ε de forma que salgan puntos de equilibrio de
diferente tipo.

Ejercicio A.7. Estudia el retrato de fases del sistema

ẋ = 4x + 2y + 2x2 − 3y 2


ẏ = 4x − 3y + 7xy.

Ejercicio A.8. La modelación de un edificio oscilante mediante la ecuación de un


oscilador armónico es poco realista. Las fuerzas presentes en un edificio en oscilación
no son idénticas a las de un resorte. El oscilador armónico es sólo una primera apro-
ximación a un sistema fı́sico complicado. Para extender la utilidad de este modelo,
debemos considerar otros factores que rigen el movimiento de un edificio oscilante.
Un aspecto del modelo del edificio oscilante que no hemos incluido en el ejemplo
anterior es el efecto de la gravedad. Cuando el edificio sufre pequeñas oscilaciones,
este parámetro no juega un papel importante. Sin embargo, si las oscilaciones son
significativas, entonces la gravedad puede tener un efecto importante. Cuando y(t)
adquiere su valor máximo, una porción del edificio no está directamente arriba de
ninguna otra parte de éste. En consecuencia, la gravedad “estira”hacia abajo dicha
parte del edificio y esta fuerza tiende a flexionar más aún el edificio. Éste es el efecto
“P-Delta” (“Delta” es la distancia en voladizo y “P” es la fuerza de la gravedad).

117
El efecto P-Delta es muy pequeño cuando y es pequeña, mucho más aún que la
fuerza restauradora. cuando y crece, el efecto P-Delta se vuelve muy grande. Como
un primer modelo, podemos suponer que la fuerza proporcionada por el efecto P-
Delta es proporcional a y 3 . Agregar esta fuerza equivale a aumentar un término a
la expresión para la aceleración de y, es decir, añadir un término proporcional a
y 3 al lado derecho de la ED de segundo orden. Para estudiar el comportamiento
cualitativo de las soluciones, suponemos que el coeficiente del término y 3 es 1. Por
tanto, nuestro nuevo modelo es

d2 y dy 3
2 + 0,2 dt + 0,25y = y .
dt
Estudia el comportamiento del sistema.

118
Bibliografı́a

[1] M. L. Abell, J.P. Braselton, Differential Equations with Mathematica, Academic


Press, 1993.

[2] M. L. Abell, J.P. Braselton, Mathematica by Example, 4th Ed., Academic Press,
2008.

[3] R. Barrio, C. López, E. Martı́nez, Cálculo Vectorial. Prácticas con Mathematica


y Maple, Prensas Universitarias de Zaragoza, 1997.

[4] N. Blachman, Mathematica: Un enfoque práctico, Ariel Informática, 1993.

[5] A. Carrillo de Albornoz, I. Llamas, Mathematica 5. Aplicaciones para PC, Edi-


torial RA-MA, 2005.

[6] D. Dubin, Numerical and Analytical Methods for Scientists and Engineers Using
Mathematica, John Wiley & Sons, 2003.

[7] J. Glynn, T.W. Gray, The Beginner’s Guide to Mathematica Version 4, Cam-
bridge University Press, 2000.

[8] A. Gray, M. Mezzino, M.A. Pinsky, Introduction to Ordinary Differential Equa-


tions with Mathematica, Springer, 1997.

[9] H.F. Höft, M.H. Höft, Computing with Mathematica, 2nd. Ed., Academic Press,
2003.

[10] S. Lynch, Dynamical Systems with Applications using Mathematica, Birkhäuser,


2007.

[11] R. Maeder, Programming in Mathematica, 3rd Ed., Addison Wesley, 1997.

[12] J.L. Malaina, A.I. Martı́n, Fundamentos Matemáticos con Mathematica, Servi-
cio Editorial de la Universidad del Paı́s Vasco, 1997.

[13] V. Ramı́rez et al., Cálculo numérico con Mathematica, Ariel Ciencia, 2001.

[14] J.S. Robertson, Engineering Mathematics with Mathematica, McGraw-Hill,


1995.

[15] F.J. Rodrı́guez Gómez, F. Garcı́a Merayo, Fundamentos y Aplicaciones de Mat-


hematica, Ed. Paraninfo, 1998.

119
[16] J.M. Sanz Serna, Diez lecciones de cálculo numérico, Universidad de Valladolid,
1998.

[17] M. Trott, The Mathematica GuideBook for Numerics, Springer-Verlag, 2006.

[18] M. Trott, The Mathematica GuideBook for Programming, Springer-Verlag,


2004.

[19] M. Trott, The Mathematica GuideBook for Symbolics, Springer-Verlag, 2006.

[20] S. Wolfram, The Mathematica Book, Fifth Edition, Wolfram Media, Inc., 2003.

120

Вам также может понравиться