You are on page 1of 53

Prácticas con Mathematica

Fundamentos Matemáticos de la Ingenieria I.

P. Vindel

Departament de Matemàtiques.
ESTCE. Campus de Riu Sec.

2005-2006

1
Índice

1 Introducción a Mathematica 4
1.1 Convenios sobre notación . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.1 Funciones incorporadas. . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.2 Funciones no incorporadas . . . . . . . . . . . . . . . . . . . . . . 6
1.1.3 Sumatorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Aproximaciones numéricas . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Posibilidades simbólicas y algebraicas . . . . . . . . . . . . . . . . . . . 8
1.3.1 Problemas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4 Asignaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4.1 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5 Iteradores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.6 Gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2 Álgebra lineal 13
2.1 Resolviendo problemas con el Mathematica . . . . . . . . . . . . . . . 13
2.1.1 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.2 Sistemas de ecuaciones lineales . . . . . . . . . . . . . . . . . . . 15
2.1.3 Valores y vectores propios . . . . . . . . . . . . . . . . . . . . . . 16
2.2 Problemas de Álgebra Lineal . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3 Introducción a los Métodos Numéricos. Métodos del Álgebra Lineal . . 19
2.3.1 Eliminación Gaussiana y sustitución hacia atrás . . . . . . . . . 20
2.3.2 Descomposición QR y descomposición de Shur . . . . . . . . . . 23

3 Resolución numérica de ecuaciones no lineales 24


3.1 Método de la bisección . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2 Método de Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2.1 Análisis del error . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3 Resolución de ecuaciones no lineales con Mathematica . . . . . . . . . . 28
3.3.1 Método de la bisección . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3.2 Método de Newton . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3.3 Métodos Numéricos de Mathematica . . . . . . . . . . . . . . . . 30

2
4 Interpolación y aproximación de funciones 32
4.1 Interpolación polinómica de Newton . . . . . . . . . . . . . . . . . . . . 32
4.1.1 El efecto Runge . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.1.2 Polinomio interpolador de Newton . . . . . . . . . . . . . . . . . 33
4.1.3 Interpolación a trozos . . . . . . . . . . . . . . . . . . . . . . . . 35
4.2 Interpolación con un splin cúbico . . . . . . . . . . . . . . . . . . . . . . 36
4.3 Ajuste de datos por mínimos cuadrados . . . . . . . . . . . . . . . . . . 38

5 Estudio de funciones reales 42


5.1 Gráficas en Dos y Tres Dimensiones . . . . . . . . . . . . . . . . . . . . 42
5.1.1 Gráficas en el plano. . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.1.2 Gráficas Tridimensionales . . . . . . . . . . . . . . . . . . . . . . 44
5.2 Curvas en el plano y en el espacio . . . . . . . . . . . . . . . . . . . . . . 45
5.2.1 Curvas en el plano, ecuaciones paramétricas . . . . . . . . . . . . 45
5.2.2 Curvas en el espacio, ecuaciones paramétricas. . . . . . . . . . . 46
5.3 Dibujo de superficies, parametrización de superficies . . . . . . . . . . . 48
5.4 Cálculo Diferencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.4.1 Derivación explícita e implícita . . . . . . . . . . . . . . . . . . . 49
5.4.2 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.4.3 Máximos y mínimos de funciones . . . . . . . . . . . . . . . . . . 51

3
Capítulo 1

Introducción a Mathematica

Los ingenieros realizan una gran cantidad de cálculos y manipulaciones matemáticas


a mano. La mayoría de estos cálculos es posible realizarlos mediante un programa
de ordenador como Mathematica. Mathematica, por tanto, trabaja sobre problemas
que no es práctico realizar a mano. Mathematica es una herramienta útil para hacer
manipulaciones simbólicas y numéricas, así como para trabajar con gráficos.
Mathematica es un lenguaje interpretado, es decir, lee expresiones, evalúa el resul-
tado 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 ingenierías.
Además, 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.
Cada ejemplo consiste en un input del usuario encabezado con In[n] , n-ésimo in-
put, y una respuesta de Mathematica encabezada con Out[n] , n-ésimo output, cuando
proceda. Para comenzar con Mathematica es conveniente probar con los ejemplos prop-
uestos.
Las expresiones escritas en letra mecanografiada corresponden al input y al output.
Las correspondientes al input se deben escribir tal y como aparecen en los ejemplos;
las correspondientes al output no se tienen que escribir: las escribe Mathematica. Las
palabras y símbolos escritos en tipo máquina se deben reemplazar por expresiones
introducidas por el usuario.
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 corresponde al output, y no se
debe escribir en pantalla.

2 + 2
Out[] = 4

4
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 dis-
tinto de sin[x]. Los nombres de todas las funciones incorporadas empiezan con mayús-
cula.
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.
Mathematica es un programa interactivo. Basta introducir una expresión, como
por ejemplo una operación matemática, para que nos devuelva el resultado. Cuando
Mathematica espera la introducción de una expresión, aparece un indicador de la forma
In[n]:= . Al introducir la expresión, Mathematica la procesa, y, si corresponde, mues-
tra el resultado.
Mathematica proporciona varios mecanismos para obtener ayuda e información so-
bre 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.

?Sin
Out [] = Sin[z] gives the sine of z.

Así, podemos calcular el seno de π/4

Sin[Pi/4]

Mediante ?? obtenemos información adicional.


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 (^).
El texto entre (* y *) no se evalúa. Estos paréntesis se utilizan para hacer comen-
tarios.

v = {7, 3, -1} (* Aquí v es un vector *)

1.1.1 Funciones incorporadas.


El Kernel de Mathematica reconoce más de 1100 funciones. Estas funciones se llaman
funciones incorporadas. Los nombres de las funciones incorporadas consisten en pal-
abras inglesas completas o abreviaciones matemáticas estándar, de forma que la primera
letra de cada palabra se escribe con mayúscula. Por ejemplo, una de las funciones que
aparecen cuando pedimos a Mathematica los nombres de las funciones que empiezan
por Si es SingularValues.
Las funciones propiamente dichas son el equivalente a las funciones que empleamos
en matemáticas, en el sentido de que no tienen por qué tomar siempre un valor con-
stante. La función trigonométrica sin(x) es una función no constante; la letra x dec-
imos que es su variable. En la notación de Mathematica la función seno hemos visto

5
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í calculamos
la derivada de x2 :

D[x^2,x]

Si una función es invocada con más, o menos, argumentos de los requeridos Math-
ematica devuelve un mensaje de error y como output la expresión sin evaluar.

Sin[2, 3]

1.1.2 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_]=x^2
f[2]
Out [] =4

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


No hay que poner un blanco en la parte de la derecha de la definición.
Una función puede tener más de un argumento. Aquí definimos la función g(x, y) =
xy:

g[x_,y_]= x y;
g[2, 3]
Out [] =6

En algunas ocasiones necesitamos una definición aplazada. Por ejemplo, cuando


definimos la función factorial

factorial[0] = 1;
factorial[x_ ]:= x factorial[x - 1]
factorial[4]
Out [] =24

En este caso el signo igual (=) debe ir precedido por dos puntos (:).

6
1.1.3 Sumatorios
P
m
El sumatorio f (i) en Mathematica se expresa como
i=n

Sum[f[i], {i, n, m}]


En su forma más general la función Sum tiene la siguiente sintaxis:
Sum[expr, {i, min, max, paso}]
La función Sum tiene dos argumentos: la expresión sobre la que se efectúa la suma
y un iterador. Un iterador es una lista como mínimo de un elemento y como máximo
cuatro. En nuestro caso utilizaremos tres o cuatro elementos para un iterador. Los
iteradores de la forma var, vmin, vmax ejecutan una función para var = vmin hasta
var = vmax , incrementando var en 1 en cada iteración. Por ejemplo, para hacer la
suma de los diez primeros números naturales, hacemos
Sum[i, {i, 1, 10}]
Out [] =55
En cambio, para hacer la suma de los 10 primeros números naturales impares,
hacemos
Sum[i, {i, 1, 10, 2}]
Out [] =25

1.2 Aproximaciones numéricas


Mathematica trabaja con aritmética exacta pero, a menudo, esta situación no es posible
o, al menos, no es operativa. Como veremos más adelante muchos problemas se han
de resolver de forma aproximda. Mathematica utiliza el comando N para dar una
aproximación de un resultado numérico con la precisión deseada. Por ejemplo, para
calcular la raíz cuadrada de 2 introducimos
Sqrt[2] √
Out [] = 2
En esta situación, para obtener una aproximación utilizaremos el comando N.
N[Sqrt[2]]
Out [] =1.41421
Por defecto Mathematica trabaja con números de seis cifras. Podemos cambiar el
número de dígitos con los que Mathematica nos presenta la aproximación:
N[Sqrt[2],20]
Out [] =1.4142135623730950488

Problema 1 Como ejemplo, utilizar el comando anterior para calcular 2, e, y π con
varias precisiones.

7
1.3 Posibilidades simbólicas y algebraicas
Además de trabajar con expresiones numéricas, Mathematica puede manipular expre-
siones algebraicas. Antes de ver algunos ejemplos comentaremos la sintaxis de los
comandos que permiten esta manipulación.

• La primera letra siempre se escribe en mayúscula.

• Los argumentos van siempre entre corchetes [ ].

• Si el comando admite más de un argumento, éstos van separados por comas.

Estas reglas también las siguen las funciones y constantes predefinidas en Mathe-
matica como por ejemplo

Sin[x] Tan[0] Log[2] Sqrt[8] ...


E Pi I ...

Veremos algunos comandos que sirven para operar con expresiones algebraicas:

Expand[(a+b)^2]
Out [] =a2 + b2 + 2ab
Factor[x^2-y^2]
Out [] =(x − y) (x + y)

Cuando escribamos el producto de dos variables x e y se ha dejar un espacio en


blanco entre las dos o poner un ∗. Esto no es necesario cuando escribimos el producto
de un número por una variable.
La función Apart transforma un resultado en fracciones simples:

x/((x+2)(x-2))
Apart[%]
1 1
Out [] = +
2 (x − 2) 2 (x + 2)

La función Together combina dos o más fracciones con común denominador y sim-
plifica los factores comunes:

Together[%]
x
Out [] =
(x − 2) (x + 2)

El comando D calcula la derivada de una función respecto de una variable:

Cos[E^x];
D[%]
Out [] =−ex sin ex

8
Hay que prestar atención al escribir esta función porque tanto el coseno como el
número e son funciones predefinidas en Mathematica y han de seguir las reglas de
sintaxis descritas anteriormente.
Este comando admite argumentos opcionales que nos permiten calcular derivadas
segundas, terceras, :

D[x^2 E^x,{x,2}]
Out [] =2ex + 4xex + x2 ex

Para calcular límites tenemos el comando Limit. Por ejemplo,

Limit[1/x, x− > 0]
Out [] =∞

Para resolver ecuaciones Mathematica tiene el comando Solve:

Solve[xˆ2 − 1 == 0, x]
Out [] ={x → 1}{x → −1}

Un sistema de ecuaciones se expresa mediante una lista de ecuaciones y una lista


de variables:

Solve[{xˆ2 + y == 0, x − yˆ2 == 0}, {x, y}]

El comando Solve no puede resolver de forma exacta ecuaciones polinómicas de


grado igual o mayor que cinco. Para este tipo de ecuaciones utilizaremos el comando
NSolve para obtener una aproximación de las soluciones:

NSolve[xˆ5 − xˆ2 + 1 == 0, x]

1.3.1 Problemas.
a b
Problema 2 Calcular y simplificar −
a−b a+b

Problema 3 Factorizar los polinomios


x2 − 4x − 5
x3 + x2 + x + 1
3x2 − 6x + 1

Problema 4 Descomponer en fracciones simples


1
n (n + 1)
n2 + 1
n4 + n2 + 1

Problema 5 Calcular las derivadas primera y segunda de la función xx .

9
xy 2 − x3
Problema 6 Calcular la derivada primera de respecto de x y de y.
x2 + y 2
µ ¶
1 n
Problema 7 Calcular el límite de la sucesión 1 +
n

Problema 8 Resolver el sistema lineal



 x + 2y − 3z = −1
3x − y + 2z = 7

5x + 3y − 4z = 2

1.4 Asignaciones
Supongamos que queremos evaluar la expresión

exp= (a ∗ b−a^b)/(a∗b − 1)

en a = 3, b = −2. Para ello no necesitamos definirla como una función, simplemente


aplicaremos una regla o lista de reglas, con el comando /. (sin espacios entre / y .):
exp /.{a->3,b->-2}
Evaluarla en a = 1, b = 1. ¿Qué ha ocurrido?
Como hemos visto en los ejemplos anteriores, las constantes, las funciones y los
comandos que Mathematica lleva incorporados tienen su primera letra en mayúscula. El
usuario puede definir sus propias funciones, pero para evitar problemas es recomendable
abstenerse de usar letras mayúsculas en el nombre. La forma de definirlas consiste en
utilizar lo que se denomina una assignación, cuya sintaxis es de la forma:

nombre-función[variable1_, variable2_ , ... , variablen_]:=


definición

donde nombre-función es el nombre que asignamos a esa función. Puede constar de


una sola letra o de diversas letras. Entre corchetes y separadas por comas escribiremos
la variable o variables de las que dependerá nuestra función. En la definición de la
función se ha de escribir obligatoriamente detrás de cada variable el subrayado para
indicarle al Kernel que efectivamente es una variable. No obstante, al evaluar la función
substituyendo las variables por los valores deseados ya no debemos escribir el subrayado.
Por ejemplo, al definir la sucesión

(−1) ˆn
a[n_]:=
n+1
hay que tener en cuenta que el subrayado indica que n es la variable. A continuación
podemos escribir el tipo de variable, restringiendo si es conveniente su dominio; por
ejemplo,

a[n Integer] o a[n Real]

10
Para evaluar la función en n = 5 escribiremos
In[] :=a[5]
Calcular a10 y a100 con 4 cifras decimales.
Recordemos que si queremos que el resultado aparezca en forma decimal hemos de
usar el comando N.
Si ahora queremos cancelar una asignación, utilizaremos el comando Clear.

1.4.1 Problemas

Problema 9 Definir raiz[n, x] := n x, n ∈ N.
Utilizando
√ la ayuda de Mathematica y el comando N calcular con varias precisiones

el valor de 3 2 i 5 π.

1.5 Iteradores
Los iteradores son comandos que nos permiten realizar de forma sencilla procesos que
se repiten un número determinado de veces. Uno de los más habituales es el comando
Do. Como ejemplo vamos a ejecutar

Do[Print[Prime[n]], {n, 1, 10}]


Out [] =
2
3
5
7
11
13
17
19
23
29

Como puede apreciarse, Mathematica imprime en la pantalla (Print) los 10 primeros


números primos (Prime). La lista {n, 1, 10} expresa que la variable n toma los valores
del 1 al 10 incrementándose en cada paso una unidad. Se puede añadir otro argumento
si queremos cambiar el incremento.
Otro iterador muy usado es For; veamos un ejemplo

For[i=1,i≤5,i=i+2,Print[i]]
1
3
5

For[inicio, test, incremento, argumento] ejecuta el argumento desde inicio hasta que
falla el test, con el incremento que se pida; i++ equivale a incrementar el paso en uno.
El iterador Table es muy usado para construir tablas

11
Table[expr, {i, min, max, paso}]

Otros iteradores, While, la sintaxis y el funcionamiento de los cuales los podemos


encontrar con los comandos de ayuda de Mathematica.

1
Problema 10 Definir bn := , n = 1, 2, . . . y calcular
n2
1. bn desde n = 10 hasta n = 20 :

2. bn desde n = 10 hasta n = 100 pero con n múltiplo de 10 :

3. b10 , b100 , b1000 , b10000 :



Problema 11 Muestra el valor de 2 con una precisión desde 1 hasta 10 cifras deci-
males.

1.6 Gráficos
Las posibilidades gráficas de Mathematica han sido una de las causas de su éxito. Por
medio de Mathematica podemos dibujar funciones y datos en dos o tres dimensiones;
producir gráficos de nivel y de densidad, además de dibujar objetos y figuras arbi-
trarias. Dedicaremos una práctica a explorar algunas de las posibilidades que Math-
ematica ofrece a la hora de hacer gráficas. Estaremos interesados sobre todo en la
ayuda que puede prestar la interpretación gráfica en el cálculo de los puntos extremos
de funciones, en particular de funciones de dos variables. Trabajaremos sobre todo con
la representación paramétrica de curvas y superfícies.

12
Capítulo 2

Álgebra lineal

2.1 Resolviendo problemas con el Mathematica


En esta sección repasaremos algunas de las posibilidades que ofrece Mathematica para
resolver problemas de álgebra lineal. La idea será ofrecer una lista de los comandos
necesarios y mostrar ejemplos que ilustren su utilización. Con lo que aquí se exponga,
se estará en condiciones de resolver la mayoría de los problemas elementales que se
pueden plantear en un primer curso de álgebra lineal: dependencia e independencia
lineal, cambios de base en espacios vectoriales, estudio de aplicaciones lineales con
determinación de los subespacios núcleo e imagen, resolución de sistemas de ecuaciones
lineales, diagonalización, etc.

2.1.1 Matrices
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 ma-
trices 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. Así, por ejemplo,

Table[0, {m}, {n}]

genera una matriz cero,


El comando

MatrixForm[matriz]

13
imprime la matriz en forma de tablero bidimensional, haciendo así más clara su estruc-
tura. Por otra parte, Mathematica dispone de algunas órdenes para hacer referencia a
los elementos de la matriz:
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 mayoría de las funciones matemáticas en Mathematica se pueden aplicar por sepa-
rado a cada elemento de una lista. Esto ocurre, en particular, para todas las funciones
que tienen el atributo Listable, de manera que dichas funciones se pueden aplicar
sobre cada elemento de una matriz o un vector:
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 representan
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. Al multiplicar la
inversa por la matriz original debería dar la matriz identidad. Cuando se le da una
matriz cuyos elementos son números exactos o símbolos, el programa proporciona la
inversa exacta. Ahora bien, si en la matriz de entrada algunos 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.
Cálculo del determinante de una matriz cuadrada ,
Det[m].

14
2.1.2 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, tal
como se hace normalmente en Matemáticas, sobre todo si el número de ecuaciones y
de incógnitas es elevado. Este esquema también es útil a la hora de diseñar algoritmos,
cuando no se sabe con antelación cuántas variables hay en el problema.
Un sistema de ecuaciones lineales se puede escribir en forma matricial como

m · x = b,

donde x es el vector de variables, 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 sis-
temas de ecuaciones son los siguientes:

LinearSolve[m,b]

da un vector x que resuelve la ecuación matricial m · x = b;

NullSpace[m]

da un conjunto de vectores cuyas combinaciones lineales satisfacen la ecuación matricial


m · x = 0, esto es, proporciona una base del subespacio núcleo de la matriz m;

RowReduce[m]

transforma la matriz m en otra de filas reducidas, 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 disposi-


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

Ejercicio 1 Discutir y resolver en su caso los siguientes sistemas:



2x + 3y − z = 0 
1. 4x + 6y − z = 0

8x + 12y − 3z = 0

15

y − z − 2t = 1 
2. x − z − t = −2

x + y − 3t = −1

x + 4y + z = b 
3. 3x − y + 2z = 1

2x − 5y + az = −2

 4x + 2y + z = ax
4. 2x + 4y + 2z = ay

2x + 4y + 8z = az

 ax − 2y + z = 1
5. x + ay + z = a

x+z =1

 x1 + 3x2 + x3 − x4 = 6
6. 2x1 + 7x2 + 3x3 − 4x4 = 15

x1 + x2 + 2x3 + x4 = 1

2.1.3 Valores y vectores propios


Como es bien sabido, los valores propios de una matriz m son los números λ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 polinomial de grado n. Si n ≥ 5 no es posible obtener, en general, soluciones
algebraicas explícitas de una tal ecuación, de manera que es imposible dar resultados
algebraicos explícitos para los valores y vectores propios de una matriz genérica.
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]

da una lista de los vectores propios de m (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]]

16
proporciona una aproximación numérica a los valores propios, etc. Por tanto, cuando se
da una matriz cuyos elementos son números reales aproximados, Mathematica encuentra
valores numéricos aproximados para valores y vectores 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 la diagonalizabilidad de dicha
matriz. 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.2 Problemas de Álgebra Lineal


Problema 12 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.

Problema 13 Resolver el sistema


½
x + 5y = a
2x + y = b

dependiente de dos parámetros. El método más eficiente es usar LinearSolve.

Problema 14 Consideramos ahora el sistema


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

que es incompatible, Mathematica lo indica.

Ejercicio 2 Estudia y resuelve el sistema




 x + 2y + 3z = 6

x + 3y + 8z = 19

 2x + 3y + z = −1

5x + 6y + 4z = 5

17
Ejercicio 3 Estudia y resuelve, según los valores de a, el sistema formado por las
ecuaciones 
 ax + y + z = 1
x + ay + z = a

x + y + az = a2

Ejercicio 4 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)

otra con
(2, 3, −1, 3, 0), (1, 2, 1, −2, 1), (2, 1, −7, 17, −4)
hallando los rangos de esas dos matrices y una base de su núcleo.


t−2 4 3
Ejercicio 5 Evaluar el determinante de: A =  1 t + 1 −2  , B =
0 0 t−4
 
2 0 0 5
 1 −1 0 0 
 
 2 1 3 4 
6 5 2 −1
   
−1 2 −3 2 1 −1
Ejercicio 6 Hallar la inversa de: C =  2 1 0 , D= 0 2 1 
4 −2 5 5 2 −3
 
2 −2 6
Ejercicio 7 Sea la matriz A =  0 a 4 − a  , a ≥ 0
0 a −a

1. Estudia su diagonalización en función de los valores de a.

2. Diagonalizar A (si es posible) cuando a = 4, hallando explícitamente la matriz de


paso.

Ejercicio 8 Dada la matriz


 
1 a 1
A =  −1 1 −a 
1 0 a+1

1. Calcular el polinomio característico de A, así como sus valores propios.

2. ¿Para qué valores de a la matriz es diagonalizable?

18
3. Para dichos valores, calcular la matriz de paso y la matriz diagonal.

Ejercicio 9 Estudiar para qué valores de los parámetros reales a y b las matrices sigu-
ientes son diagonalizables:
   
5 0 0 a b 0
A =  0 −1 b  , B= 0 1 2 
3 0 a 0 0 2

Ejercicio 10 Calcular los valores y vectores propios del endomorfismo f : R3 −→ R3


definido por
f (x, y, z) = (x + y + z, 3x + y − z, −2x + 2y + 3z)

Ejercicio 11 Diagonaliza ortogonalmente las matrices


      
3 2 2 −1 2 2 3 −1 0 3 −2 0
 2 2 0   2 −1 2  ,  −1 3 0  ,  −2 3 0  ,
2 0 4 2 2 −1 0 0 2 0 0 5
µ ¶
3 −2
Ejercicio 12 Dada la matriz A =
−1 2

1. Obtener p (A) donde p (x) = 3 + 2x − 5x2 .


2. Obtener su inversa utilizando el teorema de Cayley-Hamilton.

2.3 Introducción a los Métodos Numéricos. Métodos del


Álgebra Lineal
En esta sección repasaremos algunas de las posibilidades que ofrece Mathematica para
resolver problemas numéricos de Álgebra Lineal, en particular veremos la resolución
numérica de sistemas de ecuaciones lineales. Los métodos iterativos para el cálculo de
valores y vectores propios son usados por Mathematica en los comandos Eigenvalues[N[m]],
como ya hemos comentado.
Para resolver el sistema de ecuaciones lineales:

E1 : a11 x1 + a12 x2 + ... + a1n xn = b1,


E2 : a21 x1 + a22 x2 + ... + a2n xn = b2,
...
En : an1 x1 + an2 x2 + ... + ann xn = bn,

1. La ecuación Ei puede multiplicarse por una constante no nula λ y se puede usar


la ecuación resultante en vez de Ei . Esta operación se denota por (λEi ) → Ei .
2. La ecuación Ej puede multiplicarse por una constante no nula λ, sumarla a la
ecuación Ei y usar la ecuación resultante en vez de Ei . Esta operación se denota
por (Ei + λEj ) → Ei .

19
3. La ecuaciones Ej y Ei pueden intercambiarse. Esta operación se denota por Ei ↔
Ej .

Por medio de estas operaciones se puede transformar un sistema lineal en otro más
sencillo de resolver con el mismo conjunto de soluciones.
Al realizar las operaciones anteriores las variables no cambian, sólo sus coeficientes.
Por esto un sistema lineal se reemplaza frecuentemente por una matriz, que contiene
toda la información del sistema.

2.3.1 Eliminación Gaussiana y sustitución hacia atrás


El sistema anterior lo podemos representar como una matriz, conocida como matriz
ampliada,  ¯ 
a11 a12 ... a1n ¯ b1
¯
 a21 a22 ... a2n ¯ b2 
 ¯ 
 ... ... ... ... ¯ ... 
¯
an1 an2 ... ann ¯ bn
y realizar operaciones elementales sobre las filas para conseguir ceros por debajo de la
diagonal.
 ¯ 
a11 a12 ... a1n ¯ b1
¯
 a022 ... a02n ¯ b02 
 ¯ 
 ... ... ... ... ¯ ... 
¯
... a0nn ¯ b0n
que equivale al siguiente sistema

E1 : a11 x1 + a12 x2 + ... + a1n xn = b1,


E2 : a022 x2 + ... + a02n xn = b02,
...
En : a0nn xn = b0n,

Despejando xn en la última ecuación y sustituyendola en la ecuación En−1 se obtiene


xn−1 . Despejando en la ecuación anterior se obtiene xn−2 , y así, sucesivamente, se van
obteniendo el resto de las incógnitas.
Al hacer este tipo de eliminación muchas veces se necesita cambiar el orden de las
filas para conseguir los ceros. Esto también es necesario porque cuando los cálculos se
realizan usando aritmética de dígitos finitos pueden aparecer muchos errores debido al
redondeo de las cifras. Por lo cual se han de tener en cuenta cuales son los elementos
más adecuados para conseguir los ceros, es decir, los pivotes. La estrategia más simple
consiste en seleccionar el elemento en la misma columna que está abajo de la diagonal
y que tiene el mayor valor absoluto. Esta técnica se conoce como pivoteo máximo
de columna o pivoteo parcial.
El Mathematica ofrece paquetes que permiten realizar de forma numérica muchos
cálculos algebráicos. Nosotros utilizaremos el paquete de eliminación gaussiana, que se
carga mediante

20
<<LinearAlgebra‘GaussianElimination‘

Como hemos visto, la función LinearSolve permite calcular la solución de un sistema


de ecuaciones lineales.
Existen casos en que se quieren resolver varios sistemas de ecuaciones lineales donde
coincide la parte de la izquierda del sistema, pero no así la de la derecha, es decir, la
matriz de los coeficientes es la misma pero cambian los términos independientes. En
este caso también se puede usar LinearSolve pero mucho del trabajo es repetitivo.
Por eso, como el primer paso se puede ver de forma abstracta como la factorización
de la matriz de los coeficientes en el producto de una matriz triangular inferior, L, por
una matriz triangular superior, U (factorización LU) se puede recurrir a

LUFactor

que produce esta factorización y da la información sobre que filas han de cambiarse
para que se mantenga la estabilidad numérica en la computación.
El segundo paso de volver hacia atrás sustituyendo se puede hacer mediante

LUSolve.

Estas dos ordenes están el el paquete

<<LinearAlgebra‘GaussianElimination‘.

Veamoslo mediante un ejemplo:

Ejemplo 1 Resolver el sistema de ecuaciones:


E1 : 5x1 + 3x2 = 6
E2 : 7x1 + 9x2 + 2x3 = −3
E3 : −2x1 − 8x2 − x3 = 7
utilizando la descomposición LU de la matriz de los coeficientes y la orden LUSolve

In[1]:= <<LinearAlgebra‘GaussianElimination‘
In[2]:= MatrixForm[a = {{5, 3, 0}, {7, 9, 2},{-2, -8, -1}}].
 
5 3 0
Out[2]:=  7 9 2 
−2 −8 −1
In[3]:= lu = LUFactor[a]
Out[3]:= LU[{{ 57 , 12 −22 −2 −38 −3
19 , 19 },{7,9,2},{ 7 , 7 , 7 }},{2,3,1}]
In[4]:= b={6,-3,7};
In[5]:= c=LUSolve[lu, b]
Out[5]:= { 75 −37 −81
44 , 44 , 22 }
In[6]:= a .c - b
Out[6]:= {0,0,0}

21
Obsérvese que el resultado de Out[3] da la factorización LU de la matriz a y nos
dice tambien como se han colocado las filas de dicha matriz para hacer la reducción
gaussiana.
 En términos
  matriciales, seleería:
 
1 0 0 7 9 2 7 9 2
 −2 1 0   0 − 38 − 3  =  −2 −8 −1 
7 7 7
5 12 22
7 19 1 0 0 − 19 5 3 0
La ventaja de utilizar la reducción LU es que se puede utilizar el mismo sistema
de ecuaciones cambiando los términos independientes cambiando solamente el vector b.
Veamoslo

Ejemplo 2 Resolver el sistema de ecuaciones:

E1 : 5x1 + 3x2 = 2
E2 : 7x1 + 9x2 + 2x3 = −1
E3 : −2x1 − 8x2 − x3 = −2

utilizando los resultados del problema anterior.

In[1]:= b1={6,-3,7};
In[2]:= c=LUSolve[lu, b1]
In[3]:= a .c - b1

Ejercicio 13 Resolver el sistema de ecuaciones:


x + 4y + z = 0
3x − y + 2z = 1
2x − 5y + az = −2
utilizando la descomposición LU de la matriz de los coeficientes y la orden LUSolve.
Estudiar para que valores del parámetro a tiene solución única.

El Mathematica permite construir matrices utilizando la función

Do[p[i,j],{i,1,m},{j,1,n}]

Veamoslo en un ejemplo

Ejemplo 3 Construir una matriz (8 × 8) mediante Do.

m=8; n=8;
Do[p[i,j]=0,{i,1,m},{j,1,n}];
Do[p[i,i]=7,{i,1,m}];
Do[p[i,i+1]=2,{i,1,m-1}];
Do[p[i,i-1]=-4,{i,2,m}];
MatrixForm[a=Array[p, {m,n}]]

22
Ejercicio 14 Resuelve el sistema representado en la matriz anterior utilizando como
matrices de los términos independientes los vectores
b = (9, 5, 5, 5, ....., 5, 3).
b = (2, 3, 3, ..., 3, 5).
Utilizando Do para construir estos vectores.

Ejercicio 15 Resolver un sistema lineal de 20 ecuaciones y 20 incognitas, utilizando


como matriz de coeficientes una matriz que sigua la recurencia de la matriz del ejemplo
anterior y como vector de términos independientes el vector b = (9, 5, 5, 5, ....., 5, 3).

Ejercicio 16 Repetirlo para un sistema de 100 ecuaciones y 100 incógnitas.

2.3.2 Descomposición QR y descomposición de Shur


La descomposición QR de una matriz A consiste en encontrar dos matrices Q y R,
ortonormal la primera y triangular la segunda, de forma que A = QT R. Mathematica
la calcula usando

QRDecomposition[matriz]

La descomposición de Schur de una matriz A consiste en encontrar dos matrices


S y T, ortogonal la primera y triangular superior la segunda, tal que A = ST S T .
Mathematica la calcula usando

SchurDecomposition[matriz]

Problema 15 Dada la matriz


 
1 3 −1
 0 −1 1 
−1 0 −1

Encontrar su descomposición QR y de Schur.

23
Capítulo 3

Resolución numérica de
ecuaciones no lineales

El objetivo de esta práctica es aprender a utilizar los comandos de Mathematica que


permiten abordar el estudio de ecuaciones y sistemas no lineales, es decir, nos pro-
ponemos resolver ecuaciones de la forma
f (x) = 0 (3.1)
donde f es una función real de variable real. Este tipo de ecuaciones reciben el nombre
de ecuaciones no lineales y el valor α que satisface la igualdad f (α) = 0 se conoce como
solución, cero o raíz de la ecuación.
Las ecuaciones no lineales son más habituales de lo que pueda pensarse, por ejemplo,
al describir el movimiento de los planetas alrededor del sol o de los satélites alrededor
de los planetas se obtienen órbitas elípticas; para determinar entonces en que punto
de la elipse se encuentra un móvil en un tiempo dado hay que resolver la ecuación de
Kepler:
x − e sin x = z
donde e es la excentricidad de la elipse y z es un número conocido que se calcula a
partir del tiempo t. Es decir, se han de encontrar los ceros de la función:
f (x) = x − e sin x − z.
El caso más sencillo de ecuaciones no lineales es cuando la función f es una función
polinómica P (x) . Si P (x) = ax + b, la solución de (3.1) sólo requiere el cálculo de una
división. Si P (x) = ax2 + bx + c, la solución de (3.1) necesita extraer raíces cuadradas.
El método de resolución de un polinomio cúbico se debe a Tartaglia (1499-1557) y a
del Ferro (1465-1526) y el de una ecuación polinómica de cuarto grado a Ferrari (1522-
1565). Durante siglos se buscó la fórmula para resolver polinomios de quinto grado hasta
que Abel demostró que no tenían solución. La imposibilidad de encontrar una fórmula
que resolviera una ecuación polinómica de grado mayor o igual que cinco mediante
combinaciones de operaciones elementales fue demostrada por Galois. Estos resultados
indican que, desde muy pronto, se vió la necesidad de utilizar técnicas numéricas para
resolver las ecuaciones no lineales.

24
Calcular la raíz de una ecuación con un ordenador utilizando técnicas numéricas
tiene sus limitaciones. A menudo la raíz es un número real que no tiene una repre-
sentación exacta en el ordenador. En este caso, tendremos que conformarnos con una
aproximación que verifique una condición impuesta en el algoritmo de la forma

|f (x)| < ε

donde ε es una constante positiva préviamente fijada que recibe el nombre de tolerancia
del algoritmo y tiene la función de actuar como criterio de parada del algoritmo cuando
consideramos que estamos suficientemente cerca del valor exacto de la raíz. En los
algoritmos iterativos en los que se genera una sucesión de aproximaciones {xn }n∈N
que queremos que converja a la solución, se utiliza como criterio de parada el que dos
iteraciones sucesivas cumplan uno de los dos siguientes criterios:

1. |xn+1 − xn | < ε, criterio de la diferencia absoluta.


|xn+1 − xn |
2. < ε, criterio de la diferencia relativa.
|xn |
En un proceso de cálculo de raíces de una ecuación no lineal primero hay que
tener un cierto conocimiento de la zona en que se encuentran las raíces para, después,
construir de forma iterativa una sucesión de valores que converja a la solución. En el
caso de tener raíces muy próximas es conveniente determinar intervalos que contengan
una única raíz.

3.1 Método de la bisección


El algoritmo de la bisección es el más sencillo pero converge lentamente a la solución,
aunque siempre converge a ella, por lo que suele usarse inicialmente para determinar
los intervalos donde aplicar los métodos iterativos más rápidos. Se basa en el teorema
de Bolzano:

Teorema 1 Dada una función f (x) continua en un intervalo [a, b] que verifica la
condición f (a) · f (b) < 0, existe α ∈ (a, b) tal que f (α) = 0.

Para construir el algoritmo de iteracción se crea una sucesión de intervalos encajados


de la siguiente forma:

1. Se parte del intervalo [a0 , b0 ] = [a, b] .


2. Se calcula el punto medio del intervalo [ak , bk ] .
mk = 0.5 · (ak + bk )
Si |f (mk )| < ε1 ⇒ α ≈ mk , se para el proceso.
Si f (ak ) · f (mk ) < 0 ⇒ [ak+1 , bk+1 ] = [ak , mk ] .
Si f (ak ) · f (mk ) > 0 ⇒ [ak+1 , bk+1 ] = [mk , bk ] .
k =k+1

25
3. Los cálculos se paran cuando |bk − ak | < ε2 o cuando k > kmax . Se obtiene
ak + bk
α ≈ mk =
2
donde ε1 y ε2 son tolerancias fijadas por el algoritmo y que pueden ser iguales
o no, kmax es el valor de la iteración máxima que consideremos, para evitar un
proceso excesivamente largo.

Como hemos comentado, este método converje siempre y da cotas superiores e


inferiores para la raíz buscada, pero no utiliza propiedades de la función que se estudia
y su convergencia es muy lenta.

Ejemplo 4 Consideremos el ejemplo anterior f (x) = x − e sin x − z, con e = 0.5 y


z = 0.7.

Empezaremos localizando la raíz: f (0) = −0.7 < 0, f (2) = 2 − 0.5 sin 2 − 0.7
= 0. 845 35 > 0, luego empezamos en el intervalo [0, 2] . f (1) = 1 − 0.5 sin 1 − 0.7
= −0. 120 74 < 0, luego será el intervalo [1, 2] , f (1.5) = 1.5 − 0.5 sin 1.5 − 0.7 =
0.301 25 > 0 ⇒ [1, 1.5] , f (1.25) = 1.25 − 0.5 sin 1.25 − 0.7 = 7. 550 8 × 10−2 > 0 ⇒
[1, 1.25] , f (1.125) = 1.125 − 0.5 sin 1.125 − 0.7 = −2. 613 4 × 10−2 < 0 ⇒ [1.125, 1.25] ,
f (1.1875) = 1.1875−0.5 sin 1.1875−0.7 = 2. 378 2×10−2 > 0 ⇒ [1.125, 1.1875] es decir,
después de cinco iteracciones sabemos que la raíz está en el intervalo [1.125, 1.1875] ,
por lo que si aproximamos la solución por el punto medio de éste, 1.15625 sabemos que
el error que se comete es menor que 0.0 312 5.

3.2 Método de Newton


El método de Newton, también llamado de Newton-Raphson, es un ejemplo de un
método de punto fijo. Es decir, se basa en utilizar una ecuación de la forma g (x) = x
equivalente a f (x) = 0 con f (x) derivable. Para encontrar el punto en el que f (x0 ) = 0
se parte de un valor x1 , llamado pivote, desde el que se traza la recta tangente a la curva
y = f (x) en el punto (x1 , f (x1 )) , de ecuación y − f (x1 ) = f 0 (x1 ) (x − x1 ) . Esta recta
1
corta al eje de las x en un punto x2 = x1 − f 0 (x 1)
f (x1 ) que, en principio, se encuentra
más cerca de x0 buscado. A continuación se traza la recta tangente a la curva en el
1
punto (x2 , f (x2 )) a partir del cual se localiza el punto x3 = x2 − f 0 (x 2)
f (x2 ) y así
1
sucesivamente. En general, obtenemos la fórmula xn+1 = xn − f 0 (xn ) f (xn ), que nos
permite construir la sucesión {xn }n∈N recursivamente, la cual converge a la raíz x0 .

1. Se parte de un valor x0 , llamado pivote.


1
2. Se calcula xk = g (xk−1 ) = xk−1 − f 0 (xk−1 ) f (xk−1 ) .
si |g (xk )| < ε1 ⇒ α ≈ xk , se para el proceso.
si |g (xk )| > ε1 ⇒ k = k + 1.
3. El cálculo se para cuando |xk − xk−1 | < ε2 o cuando k > kmax , donde nos asegu-
ramos que α ≈ xk .

26
Cuando lim xk = α, diremos que la sucesión converge a la solución del problema
k→∞
ya que α es un punto fijo de g (x) .
Para saber las condiciones bajo las cuales son convergentes las iteraciones de punto
fijo se utiliza el teorema:

Teorema 2 Dada una función g ∈ C 1 ([a, b]) tal que |g 0 (x)| < 1 para todo x ∈ (a, b) ,
existe α ∈ (a, b) para el cual g (α) = α, dado x0 ∈ (a, b) y la sucesión {xk }k∈N tal que
xk = g (xk−1 ) , k ∈ N, se verifica g (xk ) ∈ (a, b) para todo k > 0, entonces la sucesión
{xk }k∈N converge a α.

El hecho de utilizar la función g dada está motivado por la idea de aproximar


funciones por sus rectas tangentes, es decir, aproximar el comportamiento de la función
y = f (x) por un comportamiento lineal y, sobre este último ir localizando las raíces,
las cuales se supone que se irán acercando a la raíz de la función dada.
8

0.5 1 1.5 2 2.5 3

Esta idea es muy útil a la hora de reemplazar problemas no lineales por problemas
lineales y se ha mostrado como una idea muy fructífera en Matemáticas. Es fácil
comprobar que si en la iteración k − 1 construimos la recta tangenta a f (x) en el punto
xk−1 se obtiene
y = f (xk−1 ) + f 0 (xk−1 ) (x − xk−1 )
Por tanto, el valor xk se encuentra en la intersección de esta recta con el eje x.
El algoritmo de Newton se emplea ampliamente porque, al menos en las proximi-
dades de una raíz, converge más rápidamente que el de la bisección, de la secante, etc.
No obstante, debemos resaltar que la aplicación del método de Newton no siempre es
posible, ya que puede ocurrir que xk−1 no pertenezca al dominio de la función f o que
f no sea derivable en xk−1 . Las iteraciones del método de Newton convergen bajo las
condiciones que se especifican en el siguiente teorema:

Teorema 3 Dada f ∈ C 1 ([a, b]) tal que existe α ∈ (a, b) para el cual f (α) = α y
f 0 (α) 6= 0 y dada {xk }k∈N tal que si x0 ∈ (α − δ, α + δ) se verifica que la sucesión
{xk }k∈N converge a α.

3.2.1 Análisis del error


Para analizar la bondad relativa de los métodos es necesario conocer la mejora que se
introduce en la solución de la ecuación, o bien, la rapidez con que se aproxima a la

27
solución verdadera. Para poder comparar diferentes métodos introducimos la siguiente
definición.

Definición 1 Sea {xk }k∈N una sucesión que converge a una solución α de la ecuación
f (x) = 0 y sea εk el error absoluto cometido al considerar como solución εk = xk − α.
Si existen p ∈ N y c ∈ R diferentes de cero, tales que
|εk+1 |
lim = c, (3.2)
k→∞ |εk |p
diremos que p es el orden de convergencia mientras que c es la constante del error
asintótico.

Si p = 1 diremos que la convergencia es lineal, si p = 2 se dice que es cuadrática,


etc.
El límite anterior significa que la sucesión {xk }k∈N converge a la solución α aprox-
1
imadamente igual de rápido que la función p tiende a cero cuando x → ∞. La con-
x
vergencia es más rápida a medida que p aumenta, por lo que un método de orden más
alto es mejor que uno de orden más bajo, siempre que no aumente de forma desmedida
el número de operaciones a realizar. Puede comprobarse que el método de la bisección
es de orden 1 mientras que el de Newton es de orden 2.

3.3 Resolución de ecuaciones no lineales con Mathematica


3.3.1 Método de la bisección
Podemos escribir este algoritmo como:

a0=a; b0=b
For[k=1,k≤nmax,k++,
m=(a+b)/2;
If[Abs[f[m]]<pre,
sale=’’precisión’’;Break[]];
If[Sign[f[a]]6=Sign[f[m]], b=m; a=a];
If[Sign[f[b]]6=Sign[f[m]], b=b; a=m];
If[b-a<tol, sale=’’tolerancia’’;Break[]]]

La impresión de los resultados podemos realizarla con las siguientes instrucciones:

apm=SetPrecision[m,cifras];
If[sale==’’precisión’’,
Print[’’posible solución exacta:’’,apm],
If[k≤nmax,Print[’’solución pedida:’’,apm],

28
Print[’’Se ha llegado al número máximo de iteraciones’’]]]
Print[’’Número de iteraciones: ’’,k];
Print[’’Error máximo cometido: ’’,tol];

Obsérvese que apmt da la solución aproximada obtenida por Mathematica usando


su propia aproximación.

Ejercicio 17 Utilizar el algoritmo del método de la bisección para resolver la ecuación


1
− 2 log x = 0.5
x
para diferentes valores de a, b, tol, nmax y cifras.
1
Dibujar la función f (x) = −2 log x−0.5 y comprobar como de cerca se ha quedado
x
la aproximación obtenida.

3.3.2 Método de Newton


El algoritmo para el método de Newton se puede escribir como:

x=x0;
For[k=1, k≤nmax, k++,
x=x-(f[x]/f1[x]);
y=f[x]+f1[x]x;
If[Abs[y]<pre, sale=’’precisión’’ ; Break[]];
If[Abs[f[x]]<tol, sale=’’tolerancia’’; Break[]]]
apm=SetPrecision[x,cifras];
If[sale==’’precisión’’,
Print[’’posible solución exacta: ’’, apm],
If[k≤nmax, Print[’’solución pedida: ’’, apm],
Print[’’Se ha llegado al número máximo de iteraciones’’]]]
Print[’’Número de iteraciones: ’’,k];
Print[’’Error máximo cometido: ’’,tol];

donde f1[x]=D[f[x],x], y se han de introducir los valores para x0, pre, cifras
y tol.

Ejercicio 18 Utilizar los métodos de la bisección y de Newton para encontrar las raíces
positivas en los intervalos correspondientes de las funciones siguientes con un error
menor que 0.02. Dibujar primero las funciones para decidir el intervalo adecuado.

1. f (x) = x cos x − log x.

29
2. f (x) = 2x − e−x .

3. f (x) = e−2x − 1 + x.

Ejercicio 19 Utilizar el método de Newton para encontrar, con cinco decimales exac-
³ x ´2
tos, la raíz de la ecuación sin x = .
2

Ejercicio 20 Dada la función f (x) = 12 x + ex .


Encuentra de forma aproximada el valor de su raíz con un error menor que 0.01.

3.3.3 Métodos Numéricos de Mathematica


Mathematica tiene paquetes numéricos que utilizan estos métodos de cálculo de raíces
de una ecuación no lineal. Para encontrar las raíces de funciones polinómicas de forma
numérica, se utiliza:

NSolve[ecuación==0,x]

Si la función no es polinómica se ha de recurrir a:

FindRoot[ecuación==0, {x, x0}]

busca una solución numérica de la ecuación empezando en x = x0. Se puede usar


también

FindRoot[ecuación==0, {x, x0,x1}]

usa x0 y x1 como los dos primeros valores de x.

FindRoot[ecuación==0, {x, x0,xmin,xmax}]

busca la solución y se para si x está fuera del intervalo (x min, x max)

FindRoot[{ec1,ec2,...}, {x, x0},{y,y0},...]

encuentra las raíces de las ecuaciones ec1, ec2,... simultaneamente.


No obstante, si no se conoce con exactitud el punto inicial puede resultar muy
costosa de utilizar. El paquete

<<NumericaMath‘InterpolateRoot‘

trabaja de forma más específica, suponiendo que la función tiene un ”buen” compor-
tamiento, lo que permite encontrar las raíces de una función o una ecuación cerca de
los puntos a,b de forma mucho más precisa.

InterpolateRoot[función,{x,a,b}]
InterpolateRoot[ecuación,{x,a,b}]

30
Mathematica también usa los métodos numéricos explicados anteriormente, car-
gando el paquete

<<NumericalMath‘IntervalRoots‘

obtiene intervalos donde pueden estar las raíces de una función mediante los métodos
anteriores:

IntervalBisection[función,x,Interval[{a,b}],tolerancia]
IntervalNewton[función,x,Interval[{a,b}],tolerancia]

Ejercicio 21 Resuelve los problemas anteriores usando los métodos propios de Math-
ematica. Utiliza los resultados para comparar como son de buenos los algoritmos intro-
ducidos.

31
Capítulo 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 historicamente una tarea fundamental. Los nombres de
muchos matemáticos famosos están asociados con métodos de interpolación: Newton,
Gauss, Bessel, Stirling,...
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 calculadoras
y computadoras usan estas técnicas para calcular estos valores y creemos que es impor-
tante que los estudiantes entiendan como funcionan las calculadoras. Además, estos
métodos resultan interesantes ya que constituyen la base para muchos procedimientos
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 exce-
lente introducción para ciertas técnicas de aproximación de curvas suaves, técnicas que
resultan muy útiles a los alumnos de ingenieria.

4.1 Interpolación polinómica de Newton


Dado un conjunto de puntos (xi , f (xi )) se intentará encontrar un polinomio tal que la
función y el polinomio se comporten casi igual en el intervalo en consideración. Por
tanto, los valores del polinomio deben ser estimaciones razonables de los valores de la
función desconocida. Cuando el polinomio es de primer grado se obtiene la conocida
interpolación lineal. Estamos interesados en polinomios de grado mayor.
En general, dado un entero positivo n, los n+1 puntos x0 , x1 , ..., xn (llamados 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 consiste en encontrar un poli-
nomio 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 la función f en los puntos x0 , x1 , ..., xn .

32
Hay dos procedimientos básicos para calcularlo: el de Newton y el Lagrange.
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 Si f ∈ C n+1 (a, b) y xi ∈ (a, b) para i = 0, 1, ..., n. Entonces, ∀x ∈ (a, b)


se verifica

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

De la fórmula anterior no se puede deducir que los polinomios de mayor grado cor-
respondan 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.

4.1.1 El efecto Runge


Si se considera la sucesión {pn (x)} de polinomios de interpolación obtenida aumentando
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 acentua la pérdida de la precisión en los extremos del intervalo donde se
interpola. Este fenómeno se conoce como el efecto Runge, por lo que es preferible dividir
el intervalo donde se va a efectuar la interpolación en diversos trozos con polinomios
de grado pequeño.

4.1.2 Polinomio interpolador de Newton


La ventaja del polinomio interpolador de Newton es la sencillez de su formulación.
Aunque utiliza las llamadas diferencias divididas, nosotros, por sencillez, veremos
como calcular el polinomio mediante la resolución de un sistema de ecuaciones lineales.
Veamoslo en el siguiente ejemplo,

Ejemplo 5 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:
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.

In[] := datos={{1, 1},{2, 0},{4, 0},{5, 1},{6, 1.5}};


x={1,2,4,5,6};
y={1,0,0,1,1.5};
sol = Solve[Table[y[[i]] == a0 + a1*x[[i]] + a2*(x[[i]])^2 +
a3*(x[[i]])^3+a4*(x[[i]])^4, {i, 1, 5}], {a0,a1,a2,a3,a4}];
El polinomio de Newton será:

33
newton[t_] = Sum[sol[[1]][[i]][[2]]*t^(i - 1), {i, 1, 5}]
Se pueden dibujar los puntos y el polinomio interpolador:
dib1 = ListPlot[datos1, PlotStyle -> {RGBColor[1, 0, 0], PointSize[0.01
dib2 = Plot[newton[t], {t, 0, 6}];
Show[dib1, dib2];

1.5

0.5

1 2 3 4 5 6

observando que el polinomio pasa por todos los puntos.


Por otra parte, el comando
InterpolatingPolynomial

permite obtener el polinomio de interpolación que pasa por los puntos dados.

In[] :pol= Expand[InterpolatingPolynomial[datos,x]]


Plot[pol,{x,1,6}];
1.5

0.5

2 3 4 5 6

Ejercicio 22 Dada la tabla siguiente para la función f (x) = ex


x 0.0 0.2 0.4 0.6
f (x) 1.0000 1.2214 1.4918 1.8221

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

2. Encontrar las cotas respectivas de los errores debidos a la interpolación. Comparar


con el valor exacto, obtenido en la calculadora.

Ejercicio 23 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) .

34
2. Hacer una estimación del error.
1
Ejercicio 24 La función f (x) = , se conoce como función de Runge y fue
1 + x2
la utilizada por Runge para demostrar el efecto que lleva su nombre. Calcular los
polinomios interpoladores de grados 4 y 10, de dicha función en el intervalo [−5, 5].

4.1.3 Interpolación a trozos


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.
Para ello recordemos como se dibuja una función a trozos utilizando el Mathematica.

In[]:= g[t_]:=Which[t<0,-t^3,0<t<1,t^2,1<t<2,t-1,t>2,1];

In[]:= Plot[g[t],{t,-5,5}];

2.5

1.5

0.5

-4 -2 2 4

Por tanto, dado un conjunto de nodos, utilizaremos una interpolación mediante poli-
nomios cúbicos cada cuatro nodos. Veremos el ejemplo anterior utilizando polinomios
interpoladores de grado 2.

x={1,2,4,5,6};
y={1,0,0,1,1.5};
sol1 = Solve[Table[y[[i]] == a0 + a1*x[[i]] + a2*(x[[i]])^2 ,
{i, 1, 3}], {a0,a1,a2}];
sol2 = Solve[Table[y[[i]] == a0 + a1*x[[i]] + a2*(x[[i]])^2 ,
{i, 3, 5}], {a0,a1,a2}];
El polinomio de Newton será:
newton1[t_] = Sum[sol1[[1]][[i]][[2]]*t^(i - 1), {i, 1, 3}]
newton2[t_] = Sum[sol2[[1]][[i]][[2]]*t^(i - 1), {i, 1, 3}]
y utilizar Which para construir el polinomio a trozos:
newtonTotal[t_]=Which[t<x[[3]],newton1[t],x[[3]]<t<x[[5]],newton2[t]]
Se pueden dibujar los puntos y el polinomio interpolador:
dib1 = ListPlot[datos1, PlotStyle -> {RGBColor[1, 0, 0], PointSize[0.01]}];
dib2 = Plot[{newtonTotal[t], {t, 0, 6}];
Show[dib1, dib2];

35
1.5

1.25

0.75

0.5

0.25

1 2 3 4 5 6
-0.25

4.2 Interpolación con un splin cúbico


No obstante, cuando los datos no son ”suaves” hay problemas con los polinomios de
interpolación, lo que significa que hay irregularidades locales. El interpolar con poli-
nomios de orden superior en la mayor parte de los casos conduce a que el polinomio se
aleje de la función en otras regiones. Una solución es ajustar subregiones de los datos
con polinomios diferentes tal y como se ha hecho en el apartado anterior, 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 Bezier 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 splines 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 (xi ) , 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 (xi ) , x ∈ [xi , xi+1 ]
y cumple las condiciones:

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


2. gi (xi+1 ) = gi+1 (xi+1 ) , i = 0, 1, ..., n − 2;
3. gi0 (xi+1 ) = gi+1
0 (xi+1 ) , i = 0, 1, ..., n − 2;
4. gi00 (xi+1 ) = gi+1
00 (x
i+1 ) , i = 0, 1, ..., n − 2.

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.

36
Si se hace Si = gi00 (xi ) y Sn = gn−1
00 (xn ) , los valores de los coeficiente 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.
El Mathematica tiene esta aproximación incorporada en el paquete

<<Graphics‘Spline‘

Ejemplo 6 Veamos como utilizar este comando para ajustar la siguiente tabla de datos
1 2 3 4
1 4 3 4

In[]:= <<Graphics‘Spline ‘
In[]:=datos={{1,1},{2,4},{3,3},{4,4}};
In[]:=splin=Spline[datos,Cubic]
In[]:=Show[Graphics[{Line[datos],splin},Axes->True];

3.5

2.5

1.5

1.5 2 2.5 3 3.5 4

Ejercicio 25 Los datos de la siguiente tabla provienen de observaciones astronómicas


de un tipo de estrella variable denominada variable cefeida y representan magnitudes
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 de Newton,

2. la interpolación a trozos,

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

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

37
4.3 Ajuste de datos por mínimos cuadrados
Este ajuste se basa en minimizar la suma de los cuadrados de los errores y sirve para
ajustar una curva a un conjunto de datos aproximados, en general, datos experimen-
tales.
El criterio de mínimos cuadrados, además de proporcionar un resultado único para
un conjunto de datos, también coincide con el principio de máxima probabilidad de
estadística. Si los errores de medición poseen una distribución normal y si la desviación
estandar es constante para todos los datos, entonces se puede demostrar que la recta de-
terminada al minimizar la suma de los cuadrados tiene valores de pendiente y ordenada
en el origen con probabilidad máxima de ocurrencia.
Sea Yi un valor experimental y sea yi un valor de la ecuación

yi = axi + b

donde xi es un valor particular de la variable que se supone libre de error. Se quieren


determinar los mejores valores de a y b para que las y predigan los valores de la función
que corresponden a x. El criterio de mínimos cuadrados requiere que la suma de los
errores, ei = Yi − yi , sea mínima, es decir, minimíza la función
N
X
S = e21 + e22 + ... + e2n = (Yi − axi − b)2 ,
i=1

Como el mínimo se alcanza al elegir de forma ”adecuada” a y b, se obtiene:


N
X N
X N
X n
X
∂S
= 0= 2 (Yi − axi − b) (−xi ) ⇒ a x2i + b xi = xi Yi
∂a
i=1 i=1 i=1 i=1
N
X N
X N
X
∂S
= 0= 2 (Yi − axi − b) (−1) ⇒ a xi + bN = Yi
∂b
i=1 i=1 i=1

un sistema de dos ecuaciones cuyas incógnitas son a y b.


Por supuesto, en muchos casos los datos provenientes de pruebas experimentales no
son lineales, por lo que se desea ajustarlos por una función que no sea un polinomio
lineal. Las funciones más usuales son las exponenciales y = aebx y potenciales y = axb .
Se podría hacer un estudio análogo al anterior para el caso de estas funciones, pero
los resultados serían más engorrosos y difíciles de obtener, por lo que se suelen utilizar
los logaritmos para linealizarlas

log y = log a + bx,


log y = log a + b log x

y se ajusta la nueva variable z = log y como una función lineal de x o log x.


Otro ajuste muy usual es el uso de polinomios para ajustar valores cuya gráfica no
es lineal. Dado que un polinomio de grado n ajusta de forma exacta n + 1 puntos y se
podrían utilizar los métodos expuestos antes utilizaremos polinomios cuyo grado sera
mayor que o igual que el número de puntos N .

38
Se supone la relación
y = a0 + a1 x + ... + an xn

con errores definidos como

ei = Yi − yi = Yi − a0 − a1 xi − ... − an xni

y se minimiza la suma de cuadrados de estos errores, obteniéndose

N
X N
X N
X
a0 N + a1 xi + a2 x2i + ... + an xni = Yi
i=1 i=1 i=1
N
X XN XN XN N
X
a0 xi + a1 x2i + a2 x3i + ... + an xn+1
i = xi Yi
i=1 i=1 i=1 i=1 i=1
...
N
X N
X N
X N
X XN
a0 xni + a1 xn+1
i + a2 xn+2
i + ... + an x2n
i = xni Yi
i=1 i=1 i=1 i=1 i=1

un sistema de n+1 ecuaciones lineales con las incógnitas a0 , a1 , ..., an . Para su resolución
se usarán los métodos algebraícos explicados anteriormente.
Mathematica posee una función integrada para realizar ajuste de datos por mínimos
cuadrados

Fit[datos, función, variable]

La relación deseada no tiene por que ser lineal y se permite más de una variable inde-
pendiente. Se trabaja con una lista de puntos y se suministra un patrón para ajustar
la ecuación. En particular,

Exp[Fit[Log[datos], {1,x}, x]]

ajusta los datos a la función ea+bx .

Ejemplo 7 Ajustar una recta por mínimos cuadrados a la tabla


20.5 32.7 51.0 73.2 95.7
765 826 873 942 1032

datos={{20.5,765},{32.7,826},{51.,873},{73.3,942},{95.7,1032}};
da1=Fit[datos.{1,x},x];
Out[]= 702.172+ 3.39487 x.
Se puede comprobar graficamente como de bueno es este ajuste.
d1 = ListPlot[datos, PlotStyle -> {RGBColor[1, 0, 0], PointSize[0.02]}];
d2 = Plot[da1, {x, 0, 100}];
Show[d1,d2];

39
1050

1000

950

900

850

800

750

20 40 60 80 100

También se pueden buscar funciones que ajusten datos tridimensionales, en este


caso tendremos superfícies de ajuste.

Ejercicio 26 Encuentrar la recta de mínimos cuadrados que se ajusta a los datos sigu-
ientes, suponiendo que las x están libres de error.
x 1 2 3 4 5 6
y 5.04 8.12 10.64 13.18 16.20 20.04

Ejercicio 27 Repetir el ejercicio anterior suponiéndo que los valores libres de error
son las y. Debes obtener una recta de mínimos cuadrados de la forma x = ay + b.
Observa que no es la misma recta que se obtuvo antes.

Ejercicio 28 Ajustarlos suponiendo que es un polinomio de orden dos.

Ejercicio 29 Parece que los datos siguientes se ajustan una ecuación cúbica, pero
determinar el grado óptimo por mínimos cuadrados.
x 0.1 1.1 1.6 2.4 2.5 4.1 5.2 6.1 6.6 7.1 8.2 9.1
y 1.9 7.9 24.9 24.9 34.9 42.7 29.7 49.8 36.1 23.7 13.0 20.5
9.4 11.1 11.4 12.2 13.2 14.1 15.6 16.1 17.6 17.9 19.1 20.0
-3.1 -13.0 -28.7 -39.5 -48.6 -40.2 -51.6 -30.5 -34.6 -16.4 -13.4 -1.1

Ejercicio 30 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. Dibujar los puntos y la curva de interpolación de forma intuitiva.

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

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

4. Comparar los resultados.

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

40
Ejercicio 31 Los datos siguientes representan la potencia diaria, en megawatts, gen-
erada 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. Ajustarlos a una ecuación exponencial mediante mínimos cuadrados. Calcular


el coeficiente de correlación.

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

3. Utiliza los dos resultados anteriores para calcular el valor de y cuando x = 98.
¿Qué resultado consideras correcto?

Ejercicio 32 Dados los datos siguientes

x 2 3 4 5 6
y 12 24 50 95 190

1. Hallar la curva exponencial mínimo cuadrática y = abx .

2. Calcula un polinomio interpolador a trozos con polinomios de grado dos

41
Capítulo 5

Estudio de funciones reales

Como hemos comentado en la introducción, las posibilidades gráficas del Mathematica


han sido una de las causas de su éxito. Mediante Mathematica se pueden dibujar
funciones y datos en dos y tres dimensiones; producir gráficos de nivel y de densidad,
además de dibujar objetos y figuras arbitrarias. En esta práctica exploraremos algunas
de las posibilidades que Mathematica ofrece a la hora de hacer gráficas además de su
uso en el reconocimiento de los puntos extremos, en particular para funciones de dos
variables.

5.1 Gráficas en Dos y Tres Dimensiones


5.1.1 Gráficas en el plano.
Para hacer una gráfica en dos dimensiones de una función de una variable se usa la
orden Plot. Esta orden necesita al menos de dos argumentos, una expresión expr, y un
rango. El rango es un triplete: la variable de la expresión, x, un valor mínimo, xmin , y
un valor máximo, xmax .

Plot [expr, {x, xmin ,xmax }]

Así la gráfica de la parábola y = −x2 + 4 es producida por la siguiente orden:

In[] := Plot [-x^2+4,{x,-3,3}];

Además de este tipo de funciones Mathematica también puede hacer gráficas de


funciones que tienden a infinito o que tienen singularidades, así por ejemplo podemos
producir la gráfica de la tangente en valores donde la tangente se hace infinito (re-
cuerdese que los argumentos de las funciones trigonométricas deben estar en radianes,
a menos que se indique otra cosa)

In[] := Plot [Tan[x], {x,-2Pi,2Pi}];

Obsérvese que Mathematica no muestra todo el rango de valores de y, muestra la


región en que la función es interesante. Fuera del rango en que está dibujada la función
el comportamiento de la tangente no es especialmente relevante.

42
Opciones
Cuando Mathematica dibuja una gráfica, debe tomar muchas decisiones. Estas deci-
siones pueden ser modificadas dependiendo de los valores de las opciones. Recuerdese
que mediante ??Plot o la orden Options pueden verse todas las opciones para la fun-
ción Plot junto con sus valores por defecto.

In[] := Options[Plot]

Estas opciones se pueden especificar en cualquier orden después de los argumentos


requeridos,

Plot [expr, {x, xmin ,xmax }, opciones]

Las opciones se especifican dando el nombre de la opción junto con el valor; por ejem-
plo, si queremos determinar el rango de los valores de y usariamos la opción PlotRange.
Finalmente, si no se especifica una determinada opción se usa su valor por defecto
Al usar estas opciones se han de tener en cuenta los objetivos que se persiguen
ya que algunas veces es interesante conocer todos los posibles valores de una función;
en cambio otras, el usar todos estos valores da un gráfico que no ayuda mucho en su
evaluación.

Modificando el estilo de una gráfica


Mediante la opción PlotStyle se puede cambiar el grosor, color y estilo de una curva.
El grosor se cambia utilizando la expresión Thickness, cuyo argumento [a] es la razón
del ancho de línea al de todo el gráfico.

Plot[expr, rango, PlotStyle->Thickness[a]]

El valor inicial para la función Plot es Thickness[0.004].


La función RGBColor permite especificar un color: Dicha función tiene tres argu-
mentos: el primero es la cantidad de rojo (Red), el segundo de verde (Green) y el tercero
de azul (Blue). Estos argumentos deben ser números entre 0 y 1, donde 1 indica la
presencia del color y 0 su ausencia. Se puede utilizar también GrayLevel si se desea
un sombreado gris; su argumento es un número entre 0 y 1.

Plot[expr, rango, PlotStyle->RGBColor[rojo, verde, azul]]


Plot[expr, rango, PlotStyle->GrayLevel[g]].

La función Dashing crea una línea a trazos en la que los sucesivos trazos dibujados
o no dibujados son de longitud d1 ,d2 ,..., los argumentos de la función. Las longitudes
d1 ,d2 ,... se especifican como fracciones del ancho total del gráfico.

Plot[expr, rango, PlotStyle->Dashing[{d1 ,d2 ,...}]]

Todas estas opciones pueden usarse simultaneamente con PlotStyle si se especi-


fican en una lista de listas. Lo cual además permite dibujar varias curvas al mismo
tiempo con estilos diferentes.

43
Gráficas de varias curvas
Plot permite obtener la gráfica de varias curvas al mismo tiempo, para ello se han de
escribir las ecuaciones de las distintas curvas en forma de lista en el primer argumento
de Plot

Plot[{ecuación 1, ecuación 2, ...}, {x, xmin ,xmax }].

Como hemos indicado antes cada una de las líneas puede dibujar con un estilo
diferente, lo que permite su mejor visualización.

Gráficas paramétricas
Este tipo de gráficas son muy útiles cuando se quiere dibujar simultáneamente los
valores de x e y en función de un parámetro. Permite asimismo dibujar gráficas en
coordenadas polares.
La función ParametricPlot dibuja una curva parametrizada, una función donde
los valores de x e y vienen dados en función de un parámetro; en general se usa t como
dicho parámetro ya que suele representar el tiempo.

ParametricPlot[{fx [t],fy [t]},{t,tmin ,tmax }]

5.1.2 Gráficas Tridimensionales


La función Plot3D produce una gráfica trimensional donde se da la coordenada z en
función de x e y. Sus argumentos son una expresión y los rangos para las dos variables:

Plot3D[expr, {x,xmin ,xmax },{y,ymin ,ymax }, opciones];

Una opción interesante de Plot3D es que la gráfica obtenida puede verse desde
distintos puntos de vista mediante ViewPoint. El Front End tiene una opción en el
menú que permite visualizar los distintos enfoques que se le puede dar a la figura, sin
más que mover el cubo de referencia mediante el ratón.
La opción Show permite redibujar un gráfico, combinar varios de ellos o cambiar las
opciones de uno construido antes.
Los gráficos tridimensionales estan ya coloreados por defecto.

Gráficas paramétricas
La opción ParametricPlot3D produce gráficas tridimensionales donde las coordenadas
x, y, z están dadas en términos de dos parámetros

ParametricPlot3D[{fx [u,v],fy [u,v],fz [u,v]}, {u,umin ,umax }, {v,vmin ,vmax },


opciones], o
ParametricPlot3D[{fx [u],fy [u],fz [u]}, {u,umin ,umax }, opciones],

Al igual que antes, la ventaja de utiliza esta opción consiste sobre todo en el dibujo
de funciones que son dificiles de hacer en coordenadas cartesianas.

44
5.2 Curvas en el plano y en el espacio
5.2.1 Curvas en el plano, ecuaciones paramétricas
En general, las ecuaciones de las curvas en el plano vienen dadas en coordenadas carte-
sianas, x e y. Mathematica sabe representar este tipo de ecuaciones de forma directa
cuando y = f (x) mediante Plot:

Plot [expr, {x, xmin ,xmax }]

Así la gráfica de la curva y = x3 + x es producida por la siguiente orden:

In[] := Plot [x^3+x,{x,-3,3}];

No obstante, a veces es útil introducir una tercera variable para representar una
curva en el plano. El interés de introducir esta tercera variable es doble: por un lado
permite dibujar mas fácilmente algunas curvas planas que no se pueden escribir de
forma inmediata como funciones. Por otro lado, en mucho casos este parametro se
puede considerar como el tiempo y permite la descripción completa de la curva en
términos de la trayectoria seguida por un móvil. Veamoslo:

• Si se quiere dibujar la circunferencia x2 +y 2 = 1 utilizando Plot, se ha de despejar


la variable y y dibujar las dos curvas correspondientes

In[] := Plot [{Sqrt[1-x^2],-Sqrt[1-x^2]},{x,-1,1}]


Pero esta misma circunferencia se puede dibujar utilizando un parámetro angular
y escribiendo x e y en términos de dicho parámetro:

x = cos t, y = sin t.
La orden que permite dibujarlo es:
ParametricPlot[{Cos[t],Sin[t]},{t,0,2 Pi}]

• Para ver la versión temporal del parámetro, consideremos la trayectoria de un


objeto lanzado al aire formando un ángulo de 45o con una velocidad inicial de
10m/s. Podeis comprobar que este objeto sigue la trayectoria parabólica dada
por
x2
y =− +x
10
Pero esta ecuación no nos dice en que momento el objeto ha estado en cada punto
de la trayectoria. Para determinar ésto se introduce una tercera variable, t, a la
que llamamos parámetro. A partir de las leyes de Newton se pueden reescribir x
e y en términos de dicho parámetro, obteniéndose las ecuaciones paramétricas

x = 5 2t

y = 5 2t − 5t2

45
Este conjunto de ecuaciones permite determinar en que punto está el objeto en
cada instante. El dibujo de la trayectoria se puede obtener, además de utilizar la
orden Plot, mediante
ParametricPlot[{5 Sqrt[2] t ,5 Sqrt[2] t-5 t^2},{t,0, Sqrt[2]}]
El utilizar las ecuaciones paramétricas permite, además, conocer el sentido de
recorrido de la trayectoria.

Coordenadas polares
Para construir un sistema de coordenadas polares en el plano, se fija un punto O llamado
origen (o polo) y desde O se considera un rayo inicial llamado eje polar. A cada punto
P del plano se le asignan las coordenadas polares (r, t)1 de la siguiente forma:
r : distancia dirigida de O a P.
t : ángulo orientado en sentido antihorario desde el eje polar hasta el segmento OP .
En general se suele elegir el origen de las coordenadas cartesianas como origen de
las polares y el eje x como eje polar.
Las coordenadas cartesianas estan relacionadas con las polares mediante las fórmu-
las ¯ 2 2 2
x = r cos t ¯¯ x + y = r
y
y = r sin t ¯ tan t =
x
Ejercicio 33 Dibujar las siguientes curvas utillizando coordenadas paramétricas y carte-
sianas:
x2 + y2 = 9
x2 + y2 − 2x = 0
x2 + y2 − 4y = 0
2
¡y 2= 2x2 ¢2 ¡ ¢
x +y − 9 x2 − y 2 = 0
y=x

Ejercicio 34 Dibujar las siguientes gráficas polares


r = 2 cos 3t (rosa de tres pétalos) ¿Cómo dibujarías una rosa de cuatro pétalos?¿Yde
25?
r2 = 4 sin 2t (lemniscata).
r = 2 ± 3 sin t (caracoles).

Ejercicio 35 Escribir las ecuaciones polares de las cónicas y dibujalas.

5.2.2 Curvas en el espacio, ecuaciones paramétricas.


En el espacio, una curva se representa como la intersección de dos superficies, por lo
que es más interesante la utilización de coordenadas paramétricas, ya que la curva se
obtiene al variar un único parámetro,
1
En general, las coordenadas polares se conocen por (r, θ). Utilizamos t como ángulo por comodidad
de escritura.

46
ParametricPlot3D[{t,t^2,2t}, {t,-1,1}]
Estudiaremos dos nuevos sistemas de coordenadas espaciales: el sistema de coorde-
nadas cilíndricas y el sistema de coordenadas esféricas.

Coordenadas cilíndricas
En un sistema de coordenadas cilíndricas un punto P del espacio se representa por un
trio ordenado (r, t, z), donde
(r, t) es una representación polar de la proyección del punto P en el plano xy, y
z es la distancia orientada de (r, t) a P.
Las coordenadas cartesianas estan relacionadas con las cilíndricas mediante las
fórmulas ¯ 2 2 2
x = r cos t ¯¯ x + y = r
y
y = r sin t ¯¯ tan t =
¯ x
z=z z=z
Este tipo de coordenadas está especialmente indicado cuando hay trayectorias que
tienen al eje z como eje de simetría.

Ejercicio 36 Dibujar la curva dada por

x = 2 cos t
y = 2 sin t , 0 ≤ t ≤ 2π
z=t

Ejercicio 37 Dibujar la curva intersección del cilindro x2 + y2 = 9 y el plano x = z.

Ejercicio 38 Dibujar la curva intersección del paraboloide x2 = z y el plano x = y.

Coordenadas esféricas
En un sistema de coordenadas esféricas un punto P del espacio se representa por un
trio ordenado (R, t, u)2 , donde
R es la distancia de P hasta el origen, R ≥ 0
t es el mismo ángulo que se usa en coordenadas cilíndricas, 0 ≤ t ≤ 2π, y
u es el ángulo entre el eje z positivo y el segmento OP , 0 ≤ u ≤ π.
Las coordenadas cartesianas estan relacionadas con las cilíndricas mediante las
fórmulas
¯ x2 + y2 + z 2 = R2
x = R sin u cos t ¯¯ y
y = R sin u sin t ¯¯ tan t =
xz
z = R cos u ¯
u = arccos
R
Este tipo de coordenadas es especialmente útil para dibujos con un centro de
simetría.
2
En general, las coordenadas esféricas se conocen por (ρ, θ, φ). Utilizamos la otra notación por
comodidad de escritura.

47
5.3 Dibujo de superficies, parametrización de superficies
Una superficie necesita dos parámetros para poder dibujarla, el Mathematica dibuja de
forma inmediata superficies que son funciones de dos variables, z = f (x, y)

Plot3D[x+y, {x,-1,1},{y,-1,1}];

Pero si las superficies no son planos, su dibujo es mejor si se utilizan las coordenadas
adecuadas.

Ejercicio 39 Dibujar las siguientes superficies:


x = y (plano)
x2 + y2 = 9 (cilindro de radio 3).
x2 + y2 = 4z (paraboloide).
x2 + y2 = z 2 (cono).
x2 + y2 − z 2 = 1 (hiperboloide)
x2 + y2 + z 2 = 1 (esfera)

Ejercicio 40 Dibujar las siguientes superficies dadas en coordenadas paramétricas e


identificalas:
r=3

r=2 z
r=z
r2 = z 2 + 1
R=1
π
t=
4
π
u=
4
x = (2 + cos u) cos v, y = (2 + cos u) sin v, z = sin u, 0 ≤ u ≤ 2π, 0 ≤ v ≤ 2π
(toro).

Ejercicio 41 Encontrar, en su caso, las ecuaciones de las superficies anteriores en


coordenadas cartesianas.

5.4 Cálculo Diferencial


Vamos a introducir ahora algunos comandos de los que dispone Mathematica para
abordar, y en muchos casos resolver con éxito, gran variedad de problemas que surgen
en el Cálculo Diferencial en una y en varias variables. Desde luego, no se trata aquí de
estudiar a fondo esta disciplina matemática, sino más bien de ilustrar las técnicas que
el programa pone a disposición del usuario para reducir considerablemente los cálculos
y, lo que es más importante, para entender qué es lo que se está haciendo

48
5.4.1 Derivación explícita e implícita
El programa ofrece varios comandos para el cálculo de derivadas tanto de funciones de
una variable como de varias variables. En este apartado los repasaremos brevemente y
veremos cómo se pueden aplicar a gran número de problemas que aparecen en Cálculo.
El comando

D[f , x ]


calcula la derivada parcial f;
∂x
D[f , x , y, ...]

∂ ∂
calcula la derivada múltiple . . . f;
∂x ∂y

D[f , {x , n}]

∂n
proporciona la derivada n-ésima f , mientras que
∂xn
D[f , x , NonConstants →{u, v, ...}]

calcula la derivada parcial de f respecto a x considerando u, v, . . . también como


funciones de x. Obviamente, estos comandos también sirven si la función f depende
sólo de x:
Si y depende de x, se puede usar la forma funcional explícita y[x] para efectuar la
derivación:
Así es posible, por ejemplo, derivar implícitamente. Los siguientes comandos pro-
porcionan otras formas de calcular derivadas: f ’[x] obtiene la derivada primera de
una función de una variable; f ’’[x] da la derivada segunda de una función de una
variable, y así sucesivamente. El objeto f ’ en Mathematica es el resultado de aplicar
el funcional de diferenciación a la función f . La forma completa de f ’ es, de hecho,

Derivative[1][f ]

de manera que Derivative[1] puede ser considerado como el operador de diferen-


ciación, esto es, como el operador que al actuar sobre una función f proporciona su
función derivada. El comando para obtener la diferencial total de una función f es

Dt[f ]

mientras que

Dt[f , x ]

df
da la derivada total ;
dx

49
Dt[f , x , y, ...]

d d
da la derivada total múltiple · · · f, y
dx dy

Dt[f , x , Constants →{c, d,...}]

proporciona la derivada total con c, d, constantes. Podemos hacer una definición


dy
explícita para con el comando
dx
Dt[y, x ] = algo

pudiendo anular la definición para la derivada con Clear[y].


A veces ocurre que una función y(x) viene dada implícitamente por una cierta
ecuación e interesa calcular su derivada. Los comandos anteriores resuelven este prob-
lema. Así,

Dt[ecuación, x ]

efectúa la derivada de la ecuación con respecto a x, obteniéndose una expresión de


donde se podrá despejar la derivada.
Dada una aplicación f : Rn −→ Rm , a veces interesará calcular su matriz jaco-
biana y su determinante jacobiano. La función que Mathematica incorpora para esta
eventualidad es Outer.
Para concluir este apartado diremos que el paquete

Calculus‘VectorAnalysis.m

dispone de funciones específicas para el cálculo del gradiente, la divergencia, el rota-


cional y el laplaciano de un campo vectorial f . Los comandos respectivos son: Grad[f ],
Div[f ], Curl[f ] y Laplacian[f ].

5.4.2 Problemas
Vamos ahora a resolver algunos problemas típicos:

Ejercicio 42 Calcular y 0 (x) sabiendo que cos(x + sin y) = sin y.

Ejercicio 43 La trayectoria de un móvil en dos dimensiones viene descrita por las


ecuaciones

x (t) = t cos t
y (t) = t sin t

1. Dibujar la trayectoria desde t = 0 hasta t = 2π y la recta tangente en los puntos


t = 1.7 y t = π.

50
2. Determinar los puntos de corte de estas rectas tangente y los ejes coordenados.

Ejercicio 44 Una fuente de alimentación suministra un voltaje periódico en el tiempo


2
de modo que en [−π, π] vale V (t) = e−t . Aproximar esta función en torno a los
π
puntos 0 y mediante un polinomio de Taylor de grado cuatro. Dibujar la función y
2
el polinomio en dicho intervalo.

Ejercicio 45 Calcular las derivadas parciales de la función


x3 y − xy 3
f (x, y) = 2 2
x + y2
 xy
si (x, y) 6= (0, 0)
f (x, y) = x2 + y 4

0 si (x, y) = (0, 0)

Ejercicio 46 Dada la función


 ¡ ¢
 xy x2 − y2
, (x, y) 6= (0, 0)
f (x, y) = x2 + y2

0, (x, y) = (0, 0)

1. Estudia su continuidad en todo su dominio.

2. Calcula sus derivadas parciales en todo el dominio.

3. ¿Es diferenciable? ¿Se cumple el teorema de Young?

4. Estudiar la continuidad de las derivadas parciales calculadas en el problema an-


terior. Dibuja las gráficas de las funciones dadas.

Ejercicio 47 Aplicar el teorema de los incrementos finitos para ver cuales de las fun-
ciones anteriores del problema 45 son diferenciables en el punto (0, 0) .

Ejercicio 48 Calcular la derivada direccional de la función

1
f (x, y, z) = p
x + y2 + z2
2

en el punto (2, 1, 1) según el vector (1, 1, 0).

5.4.3 Máximos y mínimos de funciones


Vamos ahora a resolver algunos problemas típicos de cálculo de máximos y mínimos de
funciones de una y dos variables, así como su interpretación geométrica:

Ejercicio 49 Dibujar la curva 2x2 − 2xy + y2 + x + 2y + 1 = 0. Calcula la ecuación de


sus tangentes en los puntos de abcisa x = −1/2. Dibujar la curva y las dos tangentes.

51
Ejercicio 50 Dibujar las curvas siguientes y estudia en que puntos la función no tiene
derivada. Demuéstralo.
r = 2 cos 3t (rosa de tres pétalos)
r2 = 4 sin 2t (lemniscata).
r = 2 ± 3 sin t (caracoles).

Ejercicio 51 Dibujar las curvas siguientes:


Curva intersección del cilindro x2 + y 2 = 9 y el plano x = z.
Curva intersección del paraboloide x2 = z y el plano x = y.
Suponiendo que estas curvas son las seguidas por un móvil, ¿cúal es la velocidad de
dicho móvil en cada uno de los puntos?. ¿Y su aceleración?

Ejercicio 52 Dibujar la función f (x, y) = x2 + y 2 , calcula y clasifica sus puntos ex-


tremos.

Ejercicio 53 Hallar los puntos extremos de las funciones siguientes y determinar


cuales son máximos, mínimos y puntos silla locales.
f (x, y) = x2 − y2 − xy ,
f (x, y) = x2 + y2 − xy,
2 2
f (x, y) = ¡e1+x −y , ¢
2 2
f (x, y) = x2 + 3y 2 e1−x −y .
Dibujar las gráficas correspondientes.

Ejercicio 54 Usar el método de los multiplicadores de Lagrange para hallar los valores
máximo y mínimo absoluto de f (x, y) = x2 + y 2 − x − y + 1 en el disco unidad. Haz
una representación gráfica.

Ejercicio 55 Hallar y clasifica los puntos extremos no degenerados de la función

f (x, y) = −120x3 − 30x4 + 18x5 + 5x6 + 30xy 2

Dibujarla.

Ejercicio 56 Hallar y clasificar los puntos extremos de la función f (x, y, z) = x2 +


xy + y 2 + z 2 .

Ejercicio 57 La energia interna de un cierto sistema viene dada en función de la


presión x y el volumen y por
2
−(y−2)2
U (x, y) = 1 − e−(x−1)

1. Dibujar la gráfica de la función U y los conjuntos de nivel para presión y volumen


entre 0 y 3.

2. Obtener los máximos y mínimos de U.

3. Calcular el polinomio de Taylor de grado 2 de U en uno de los mínimos obtenidos.


Calcular el error cometido al aproximar la función por este polinomio de Taylor.

52
Ejercicio 58 Dada la función f (x, y) = y sin (πx).

1. Dibujarla.

2. Determinar sus puntos críticos.

3. Calcular las aproximaciones de Taylor de primer y segundo grado en el punto


(0, 0) .

4. Determinar sus puntos críticos restringidos al plano z = 1.

Ejercicio 59 Dada la ecuación z 4 + x2 z 3 + y 2 + xy = 2.

1. Demostrar que define a z como una función de x e y en un entorno del punto


(1, 1, −1) .

2. Calcular el plano tangente a esta superficie en un entorno del punto (1, 1, −1) .

3. Calcular la aproximación de segundo grado en dicho punto.

53

You might also like