Prácticas de Análisis Matemático

con Mathematica 3.0 ©
E.T.S. Ingeniería Informática
Departamento de Análisis Matemático
Índice general
1. Primeros pasos 4
1.1. Cálculo simbólico con Mathematica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.1.1. Polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.1.2. Expresiones trigonométricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2. Cómo “dibujar” con Mathematica 17
2.1. La orden Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.1. Opciones de Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2. Gráficos en coordenadas paramétricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.1. Algunas curvas planas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3. El comando Show . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.4. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3. Vectores y matrices 24
4. Resolución de ecuaciones 30
4.1. Ecuaciones “sencillas” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.2. Sistemas de ecuaciones lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.3. Resolución de sistemas de ecuaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.4. Otros métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.4.1. Breves conceptos de programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.4.2. Método de Bisección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.4.3. Método de Newton-Raphson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.5. El comando FindRoot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5. Extremos de funciones de una variable 44
5.1. Continuidad y límites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.2. Máximos y mínimos relativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6. Fórmula de Taylor 47
ÍNDICE GENERAL 3
7. Integración 52
7.1. Integrales definidas e indefinidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.2. Longitudes, áreas y volúmenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.3. Integrales impropias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
8. Gráficos en 3D 57
8.1. El comando Plot3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
8.1.1. Opciones del comando Plot3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
8.2. Gráficos de contorno. Curvas de nivel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
8.3. Gráficos paramétricos. Curvas y superficies. . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
8.3.1. Superficies de revolución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
9. Extremos relativos y condicionados 65
9.1. Derivadas parciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
9.2. Representación gráfica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
9.2.1. “Campos” de vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
9.3. Extremos relativos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
9.4. Extremos condicionados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
10.Integrales múltiples 81
11.Números complejos 87
11.1.Operaciones básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
11.2.Funciones de variable compleja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
11.2.1.Gráficos en “cuatro” dimensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
A. Avisos y mensajes de error 91
B. Glosario 94
B.1. Algunas funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
B.2. Comandos usuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
B.3. Números complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
B.4. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
B.5. Resolución de ecuaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
B.6. Gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
B.7. Cálculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
B.8. Otros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
CAPÍTULO 1
Primeros pasos
Comenzaremos a familiarizarnos con el Mathematica haciendo, al principio, cosas muy simples
que nos ayudarán a conocer los principales comandos y cómo se deben usar.
Para efectuar cálculos numéricos, el programa Mathema-
tica funciona como una simple calculadora, con la salvedad
de que con el Mathematica puedes obtener una precisión
que no tienen las calculadoras normales.
Una vez que hemos empezado el programa nos encon-
tramos delante de una pantalla más o menos como la de
la figura. Arriba tienes la barra de Menú, debajo tienes una
ventana vacía que es donde trabajaremos, y a la derecha te-
nemos una “paleta” con operaciones que ya iremos comen-
tando con más detalle.
Una vez iniciada la ejecución del programa, pulsa con el
botón izquierdo del ratón en la ventana principal y escribe: 3+2, y luego pulsa ↑ o Enter en
el teclado numérico. Observarás que en la pantalla aparece lo siguiente:
In[1]:=
3+2
Out[1]=
5
No intentes escribir los símbolos “In[1]:=” y “Out[1]=”, ya que éstos los escribe el programa para
llevar un control sobre las operaciones que va efectuando. No importa si dicho dígito de control no
coincide con el que aparezca en este texto.
A continuación, con el ratón puedes pulsar sobre los números que habías escrito, y cambiarlos,
o añadir nuevos sumandos, etc... y recuerda que siempre que quieras obtener el resultado, deberás
5
pulsar ↑ . También podrás escribir los siguientes comandos debajo del resultado anterior,
con lo que quedará constancia escrita de las operaciones que vas haciendo. Observarás que en las
sucesivas operaciones el ordenador responde más rápido que en la primera, ya que al efectuar la
primera operación, el programa debió leer del disco las “reglas de cálculo” (esto es, el kernel del
programa), y dichas reglas permanecen en su memoria a partir de ese momento.
Para multiplicar números no es necesario escribir el símbolo de la multiplicación (opcionalmente
“*”), y basta con poner un espacio entre los factores.
In[2]:=
3 2
Out[2]=
6
Para efectuar potencias, puedes escribir
In[3]:=
385
Out[3]=
35917545547686059365808220080151141317043
Ya que lo sabemos hacer directamente, comentemos que la paleta se puede
usar, entre otras cosas, para escribir potencias. Si pulsas en el primer botón de la
paleta te aparecerá en la ventana de comandos lo siguiente:

Puedes teclear directamente la base y, cuando termines, el tabulador te lleva al
exponente. Una vez escrito pulsa como siempre ↑ y obtendrás el resultado,
algo así:
In[4]:=
2
3
Out[4]=
8
Puedes hacer operaciones con fracciones, y obtener la fracción resultante...
In[5]:=
2+3/13
Out[5]=
29
13
6 Primeros pasos
(¿Por qué el resultado no ha sido
5
13
?) Si lo prefieres, puedes aproximar el resultado mediante
unos cuantos dígitos de su expresión decimal:
In[6]:=
N[2+3/13]
Out[6]=
2.23077
... y si quieres que el Mathematica calcule 40 dígitos (incluyendo la parte entera)...
In[7]:=
N[2+3/13,40]
Out[7]=
2.2307692307692307692307692307692307692308
¿por qué el último dígito del comando anterior fue un 7 y no un 6? y ¿por qué ahora el último
dígito ha sido un 8 y no un 7?
Si quieres, puedes poner dos mil decimales. Haz la prueba.
Sigamos probando... para obtener la raíz de un número se usa el comando Sqrt o utilizar la
paleta (observa que la “S” es mayúscula, y el número debe ir entre corchetes):
In[8]:=
Sqrt[5]
Out[8]=

5
... pues vale... y encima es hasta verdad... pero si quieres la expresión decimal con quince dígitos,
In[9]:=
N[Sqrt[5],15]
Out[9]=
2.23606797749979
También puedes hacer la raíz cuadrada de un número, elevando dicho número al exponente
1
2
In[10]:=
5(1/2)
Out[10]=

5
7
¿Podrías ahora obtener una aproximación decimal de
7

86 con doscientas cifras decimales?.
Inténtalo.
Además de saber calcular las raíces, Mathematica también conoce las reglas de cálculo para
operar con ellas:
In[11]:=
Sqrt[2] Sqrt[3]
Out[11]=

6
...o bien...
In[12]:=
Sqrt[5(1/3)]
Out[12]=
5
1/6
Como ya habrás notado, en la paleta tienes botones que permiten escribir fracciones, raíces de
cualquier orden y algunas de las constantes más usuales como el número e o π.
Se supone que conocemos aproximadamente el valor del número π, y también Mathematica lo
conoce...
In[13]:=
Pi
Out[13]=
π
...ya... parece más interesante así:
In[14]:=
N[Pi]
Out[14]=
3.14159
Es probable que alguno de nosotros conozca más dígitos, pero Mathematica es capaz de decirnos
los primeros cinco mil dígitos de π. Prueba.
Ahora vamos a trabajar con variables. Prueba el siguiente comando (ten en cuenta que para
cambiar de línea dentro de un comando es necesario pulsar sólo , y finalmente ↑ para
ejecutar todo el comando)
8 Primeros pasos
In[15]:=
a=20;
b=4;
a/b
Out[15]=
5
Observa que las líneas de comando que terminan en “punto y coma” no producen ninguna res-
puesta del Mathematica . Prueba a quitar (por ejemplo) el punto y coma de la primera línea en el
ejemplo anterior.
Razona la respuesta que da el Mathematica al siguiente comando:
In[16]:=
a=5;
b=12;
N[Sqrt[a+b],b]
Out[16]=
4.12310562562
Con Mathematica podemos usar el resultado de una operación anterior sin necesidad de teclearlo.
Esto se consigue con la orden %. Si queremos el resultado de la salida n (Out[n]), podemos obtenerlo
con %n. Por ejemplo, si queremos el resultado de la operación número 15,
In[17]:=
%15
Out[17]=
5
además podemos usar esa información como cualquier otro dato
In[18]:=
%152
Out[18]=
25
Para obtener el resultado inmediatamente anterior usamos % sin ningún número,
In[19]:=
%
Out[19]=
25
9
% % para el penúltimo, etc...
Además de las operaciones elementales que hemos visto, Mathematica tiene definidas la mayor
parte de las funciones elementales. Los nombres de estas funciones suelen ser su abreviatura en
inglés, que algunas veces difiere bastante de su nombre castellano. En general, cualquier comando
de Mathematica se escribe con la primera letra en mayúscula. Por ejemplo
In[20]:=
Sqrt[4]
Out[20]=
2
Algunos ejemplos de funciones con Mathematica son:
• Función exponencial: Exp[x]
In[21]:=
Exp[2]
Out[21]=
E
2
(para Mathematica el número e se escribe E) y si queremos su expresión decimal
In[22]:=
N[Exp[2]]
Out[22]=
7.38906
Otra forma de calcular la función exponencial aplicada a x es elevando E a x. ¿Podrías calcular
así e
5
? ¿y su primera cifra decimal? Haz lo mismo usando la función Exp y comprueba que da el
mismo resultado.
• Función logaritmo neperiano: Log[x]
In[23]:=
Log[20]
Out[23]=
Log[20]
...ya empezamos... Bueno, si lo que nos interesa es su expresión decimal
In[24]:=
N[Log[20]]
Out[24]=
2.99573
10 Primeros pasos
En Mathematica , si no decimos lo contrario, los logaritmos serán neperianos. Si queremos calcu-
lar el logaritmo en base b de x usamos Log[b,x]. Por ejemplo, el logaritmo decimal de 100
In[25]:=
Log[10,100]
Out[25]=
2
¿Cuánto valdrá el logaritmo en base 2 de 64? Compruébalo. ¿Cuánto debe valer Log[Exp[7]]? ¿Y
Exp[Log[7]]? Pide a Mathematica que los calcule.
• Funciones trigonométricas: Sin[x], Cos[x], Tan[x] (seno, coseno, tangente)
In[26]:=
Sin[Pi/4]
Out[26]=
1

2
También podemos usar las funciones trigonométricas inversas, esto es, el arcoseno, arcocoseno
y arcotangente, que se escriben respectivamente ArcSin[x], ArcCos[x] y ArcTan[x]. Observa que
la cuarta letra de cada comando está en mayúscula; escríbelo así, si no, Mathematica no lo entenderá.
In[27]:=
ArcTan[1]
Out[27]=
π
4
Prueba a componer dos o más de todas estas funciones y a hacer cálculos con ellas.
1.1. Cálculo simbólico con Mathematica
Hasta ahora sólo hemos usado el Mathematica como una calculadora muy potente, pero práctica-
mente todo lo que hemos aprendido puede hacerse sin dificultad con una calculadora convencional.
Entonces, ¿qué puede hacer Mathematica que sea imposible con una calculadora? Bueno, entre otras
muchas cosas que veremos posteriormente, la principal utilidad de Mathematica es el cálculo sim-
bólico, es decir, el trabajar con expresiones algebraicas (expresiones donde intervienen variables,
constantes... y no tienen porqué tener un valor numérico concreto) en vez de con números. Por
ejemplo, el programa sabe que la función Log es inversa de Exp, con lo que si ponemos
1.1 Cálculo simbólico con Mathematica 11
In[1]:=
Exp[Log[x]]
Out[1]=
x
es decir, sin saber el valor de la variable x el programa es capaz de trabajar simbólicamente con
ella. Más ejemplos
In[2]:=
Exp[x]Exp[y]
Out[2]=
E
x+y
In[3]:=
a+2a+5b
Out[3]=
3 a + 5 b
Para Mathematica cualquier letra o combinación de letras puede ser una variable o una constante.
Hay excepciones como la letra E, que siempre indica el número e y no puede usarse como variable ni
constante. Sin embargo, las letras x, y, z... a, b, c, d... pueden usarse sin problemas como nombres de
constantes y variables. ¿Cómo podemos hacer que Mathematica diferencie entre constantes (valor
fijo) y variables (valor indeterminado)? Para el programa, si no se le ha asignado un valor a una
letra, ésta será una variable. Si le hemos asignado un valor a una letra, ésta será una constante, es
decir, tendrá siempre un valor concreto. ¿Podemos quitar el valor a una constante? Sí, con la orden
Clear[nombre variable]. Un ejemplo:
In[4]:=
a=7
Out[4]=
7
In[5]:=
a
2
Out[5]=
49
es decir, le damos a la letra a el valor 7 y Mathematica la sustituye siempre por ese valor; en este
caso, a es una constante. Si usamos Clear
12 Primeros pasos
In[6]:=
Clear[a]
(observa que esta entrada no produce ninguna salida)
In[7]:=
a
2
Out[7]=
a
2
ahora, a es una variable, esto es, no tiene un valor concreto y Mathematica debe tratarla simbólica-
mente. Si queremos que todas las constantes que hayamos definido pierdan su valor concreto (que
pasen a ser variables) usaremos Clear["Global

*"] (el acento que hay que usar es el que está a la
derecha de la p ).
Vamos a practicar con comandos de Mathematica para manejar expresiones algebraicas: polino-
mios, funciones racionales, expresiones trigonométricas, ecuaciones...
1.1.1. Polinomios
Si introducimos el siguiente polinomio
In[8]:=
x
2
+ 2 x + 1
Out[8]=
1 + 2 x + x
2
Mathematica no intenta simplificarlo. Si escribimos
In[9]:=
(x+1)
2
Out[9]=
(1+x)
2
Mathematica no desarrolla el cuadrado. Probemos ahora a restar las dos expresiones:
In[10]:=
% % - %
Out[10]=
1 + 2 x + x
2
- (1 + x)
2
1.1 Cálculo simbólico con Mathematica 13
Mathematica no se da cuenta de que la expresión vale cero. Esto es porque no factoriza ni desa-
rrolla automáticamente, sino que debemos decirle que lo haga. ¿Cómo lo hacemos? Con las órdenes
Expand[expresión] (desarrollar), Simplify[expresión] (simplificar) y Factor[expresión] (fac-
torizar):
In[11]:=
Expand[(x-2)(x-1)x(x+1)(x+2)]
Out[11]=
4 x - 5 x
3
+ x
5
también con varias variables
In[12]:=
Expand[(2y-x)(-3x+y)(x+y)]
Out[12]=
3 x
3
- 4 x
2
y - 5 x y
2
+ 2 y
3
In[13]:=
Factor[ %]
Out[13]=
(x - 2 y) (3 x - y) (x + y)
In[14]:=
Expand[1+2x+x
2
- (1+x)
2
]
Out[14]=
0
In[15]:=
Factor[1+2x+x
2
- (1+x)
2
]
Out[15]=
0
La orden Simplify sirve para simplificar una expresión, factorizando o no, según convenga:
14 Primeros pasos
In[16]:=
Simplify[1+x
3
]
Out[16]=
1 + x
3
In[17]:=
Simplify[x
2
+2x+1+(1+x)
2
]
Out[17]=
2(1 + x)
2
Hay veces que la expresión es “demasiado” complicada y Simplify no da ningún resultado
práctico. En este caso se puede intentar usar la orden FullSimplify, pero hay que tener en cuenta
que el tiempo para realizar los cálculos puede aumentar mucho.
In[18]:=
Simplify[
3

5

13 −18]
Out[18]=
(-18 + 5

13)(1/3)
In[19]:=
FullSimplify[
3

5

13 −18]
Out[19]=
1
2
(−3 +

13)
El comando Short sirve para ver mejor polinomios muy grandes, mostrando sólo algunos de los
términos de mayor y menor grado
In[20]:=
Expand[(x+1)
5
]
Out[20]=
1 + 5 x + 10 x
2
+ 10 x
3
+ 5 x
4
+ x
5
In[21]:=
Short[ %]
Out[21]=
1 + 5 x + «3» + x
5
1.1 Cálculo simbólico con Mathematica 15
1.1.2. Expresiones trigonométricas
Mathematica conoce las identidades trigonométricas y puede usarlas para simplificar expresio-
nes en las que aparezcan dichas funciones. En lugar de Expand y Factor, utilizaremos las órdenes
TrigExpand y TrigFactor. Por ejemplo,
In[22]:=
TrigExpand[Cos[α+β]]
Out[22]=
Cos[α] Cos[β]-Sin[α] Sin[β]
In[23]:=
TrigExpand[Sin[2ArcTan[t]]]
Out[23]=
2t
1+t
2
In[24]:=
TrigExpand[Sin[x+3*y]+Cos[2* z]
Sin[x-y]]
Out[24]=
Cos[y]
3
Sin[x] +
Cos[y] Cos[z]
2
Sin[x] +
3 Cos[x] Cos[y]
2
Sin[y] -
Cos[x] Cos[z]
2
Sin[y] -
3 Cos[y] Sin[x] Sin[y]
2
-
Cos[x] Sin[y]
3
-
Cos[y] Sin[x] Sin[z]
2
+
Cos[x] Sin[y] Sin[z]
2
In[25]:=
TrigExpand[8 Sin[2*x]
2
Cos[x]
3
]
Out[25]=
4Cos[x]
3
- 4 Cos[x]
7
+
24 Cos[x]
5
Sin[x]
2
-
4Cos[x]
3
Sin[x]
4
16 Primeros pasos
TrigExpand también trabaja con funciones hiperbólicas:
In[26]:=
TrigExpand[Sinh[2 x]
3
]
Out[26]=

3
2
Cosh[x] Sinh[x] +
3
2
Cosh[x]
5
Sinh[x] +
5 Cosh[x]
3
Sinh[x]
3
+
3
2
Cosh[x] Sinh[x]
5
CAPÍTULO 2
Cómo “dibujar” con Mathematica
2.1. La orden Plot
Una de las grandes virtudes de Mathematica es lo fácil y completo que es su tratamiento de
los gráficos para funciones de una y dos variables. Es posible dibujar a la vez varias funciones y
personalizar el resultado en cuanto a escalas, color, etc. También se pueden representar funciones
en coordenadas paramétricas e incluso se pueden realizar animaciones.
Un primer paso antes de empezar a representar gráficamente una función es tener una manera
cómoda de definirla. Siguiendo la costumbre usaremos las letras f, g, . . . para nombrarlas. Para
definir la función sen(x) haremos lo siguiente
In[1]:=
f[x_]=Sin[x]
Out[1]=
Sin[x]
Observa que se usan los corchetes para todo y que después de la variable x aparece _. No hay
que olvidar este guión después de cada variable cuando estemos definiendo una función.
Una vez definida la función podemos evaluarla en un punto o representarla gráficamente.
Por ejemplo,
In[2]:=
f[1]
Out[2]=
Sin[1]
18 Cómo “dibujar” con Mathematica
o si queremos su valor numérico
In[3]:=
N[f[1]]
Out[3]=
0.841471
También podemos asignar un valor a la variable x y luego evaluar:
In[4]:=
x=0;
f[x]
Out[4]=
0
Observa que a la hora de evaluar una función que hayamos definido no se usa el “_”.
Pueden surgir problemas al definir una función si la variable que usamos tiene asignado un
valor concreto, con lo que la función sería constante; en este caso, resolvemos el problema con la
sentencia Clear que vimos en la practica pasada. Por ejemplo, si queremos definir f(x) = ln(x),
podemos poner
In[5]:=
Clear[x,f];
f[x_]=Log[x]
y la función queda bien definida aunque antes hubiésemos asignado un valor a x.
Por último, también se pueden definir funciones “a trozos”. Por ejemplo:
f[t_]:= t /; t>0 && t<2
f[t_]:= -t+4 /; t<=0 || t>=2
(no produce ninguna salida) define la función
f(t) =

¸
¸
¸
¸
t si 0 < t < 2
−t +4 si t ≤ 0 ó t ≥ 2
Como has visto, hace falta escribir := para definir una función a trozos. El símbolo /; hace las veces
de si (condicional); los símbolos || y && son respectivamente o e y (suma y producto lógicos).
Para representar gráficamente una función de una variable, el comando que se utiliza es
Plot[función,{x,x
min
, x
max
},opciones]
Mathematica decide automáticamente cual es la escala más apropiada para que la gráfica se vea
lo mejor posible. Si la función que pretendemos representar tiene alguna discontinuidad o no está
definida en algún punto, Mathematica intentará dibujarla poniendo de manifiesto este hecho. Por
ejemplo, intenta dibujar la función tangente entre 0 y 4π:
2.1 La orden Plot 19
In[6]:=
Plot[Tan[x],{x,0, 4Pi}]
2 4 6 8 10 12
-30
-20
-10
10
20
30
Out[6]= - Graphics -
Un comentario sobre lo que acabamos de hacer: como se puede ver, podemos escribir directamen-
te la función a representar “dentro” del comando Plot. El inconveniente que tiene hacerlo así es que
cada vez que queramos trabajar con esa función tenemos que volver a escribirla, siendo más con-
veniente ponerle nombre (p.e. f[x_]=Tan[x], y usar después el nombre (Plot[f[x],{x,0,4Pi}]).
2.1.1. Opciones de Plot
Cuando presentamos el comando Plot dijimos que podíamos poner “opciones”; veamos cuáles
son algunas de ellas:
AspectRatio–>número
Determina la proporción entre los ejes de abscisas y ordenadas. Si especificamos el valor 1 los
dos ejes tendrán el mismo tamaño.
In[7]:=
Plot[Tan[x],{x,0,4Pi},AspectRatio->2]
PlotRange–>{número1,número2}
Sólo se presentan los valores de f(x) comprendidos entre número1 y número2. Si no se especi-
fica esta opción aparecen todos los valores posibles de f(x), en función del rango de variación
de x.
In[8]:=
Plot[Tan[x],{x,0,4Pi},
PlotRange->{2,20}]
PlotStyle
Permite escoger, entre otras cosas, el color de la siguiente forma:
RGBColor[número1,número2,número3]
Permite escoger un color en función de la cantidad de rojo (número1), verde (número2) y azul
(número3), donde los números pueden tomar cualquier valor entre 0 y 1.
20 Cómo “dibujar” con Mathematica
In[9]:=
Plot[Tan[x],{x,0,4Pi},
PlotStyle->{RGBColor[1,0,0]}]
Veamos algunos ejemplos de cómo utilizar estas opciones. Prueba las siguientes órdenes, com-
para los resultados e intenta variar algunos de los parámetros “a ver que pasa”.
Clear[x,f];
f[x_]=Exp[x] ArcTan[x];
Plot[f[x],{x,0,5},
PlotRange->{-1,30}];
También se pueden dibujar varias gráficas de funciones a la vez. Una de las formas de distin-
guirlas es dibujando cada una de un color diferente:
Plot[{Sin[x],Cos[x]}, {x,-2 Pi,2 Pi},
PlotStyle->{RGBColor[1,0,0],
RGBColor[0,0,1]}];
Nota: si quieres volver a usar los mismos nombres para funciones distintas recuerda “limpiar”
los nombres de las variables y las funciones con el comando Clear; si quieres borrar los valores de
todas las variables, usa Clear["Global

*"]. Por ejemplo, si quieres volver a usar las letras f y g
para otras dos funciones haz lo siguiente:
Clear[f,g,x];
f[x_]=Sin[2 x];
g[x_]=Cos[4 x];
Plot[{f[x],g[x]},{x,0,10 Pi},
PlotStyle->{RGBColor[1,0,1],RGBColor[0,1,0.5]}];
Prueba lo mismo que hemos hecho con las funciones sen(x) y sen(−x) o con las funciones
cos(x) y cos(−x). ¿Qué función es par y cuál es impar?.
Intenta lo mismo con las siguientes 3 funciones: f(x) = 2
−x
sen(6x), g(x) = 2
−x
y h(x) =
−2
−x
.
2.2. Gráficos en coordenadas paramétricas
Como ya recordarás, al menos para rectas, podemos representar una curva del plano en coor-
denadas paramétricas, o sea, a partir de las coordenadas (x(t), y(t)) variando t a lo largo de un
intervalo.
Para esto tenemos la siguiente orden:
ParametricPlot[{x(t),y(t)},{t,min,max}]
junto con las opciones ya conocidas de la orden Plot. Prueba con alguno de los siguientes
ejemplos:
2.2 Gráficos en coordenadas paramétricas 21
ParametricPlot[{t,tˆ2},{t,-2,2}]
ParametricPlot[{Cos[t],Sin[t]},{t,0,2 Pi}]
ParametricPlot[{{4 Cos[t],3 Sin[t]},{8 Cos[t],
7 Sin[t]}},{t,0,2 Pi}]
ParametricPlot[{Cos[2 t],Sin[2 t]},{t,0,2 Pi}]
¿Hay alguna diferencia entre el segundo y el último de los ejemplos?.
2.2.1. Algunas curvas planas
Astroide el camino recorrido por un punto de un círculo de radio r rodando dentro de otro círculo
de radio 4r parametrizado en coordenadas rectangulares es el siguiente:
ParametricPlot[{3*Cos[t]/4+ Cos[3*t]/4, 3*Sin[t]/4 -
Sin[3*t]/4},{t, 0, 2 Pi}]
Cardioide
ParametricPlot[{2 Cos[t] + Cos[2 t], 2 Sin[t]
+ Sin[2 t]},{t,0,2 Pi}]
Catenaria es la forma de un cable ideal con densidad uniforme colgando de dos puntos
ParametricPlot[{t,Cosh[t]},{t,-2,2}]
Lemniscata de Bernoulli Es una parametrización de (x
2
+ y
2
)
2
= (x
2
− y
2
), también llamada
hipérbola lemniscata.
ParametricPlot[{Cos[t]/(1+Sin[t]
2
), Sin[t]
Cos[t]/(1+Sin[t]
2
)},{t,0,Pi}]
Espiral equiangular es aquella espiral en la que el radio corta a la curva en un ángulo constante α
ParametricPlot[{ E(t*Cot[α])*Cos[t],
E(t*Cot[α])*Sin[t]},{t,0,10 Pi}]
Serpentina Es una parametrización de x
2
y +a
2
y −b
2
x = 0
ParametricPlot[{t,(b
2
t)/(a
2
+ t
2
)},{t,-10,10}]
Hipérbola la representación en coordenadas cartesianas de una hipérbola con vértice (1, 0) y foco
(a, 0) (excentricidad a) es x
2
−y
2
/(a
2
−1) = 1. Una hipérbola rectangular tiene excentricidad

2 y su ecuación es xy = 1.
22 Cómo “dibujar” con Mathematica
ParametricPlot[{-Sec[t],Sqrt[a
2
-1] Tan[t]},{t,0,2
Pi}]
Epicicloide es la curva que describe un punto fijo de un círculo que rueda sin deslizamiento por el
exterior de otro círculo (n es el número de vueltas).
ParametricPlot[{(1+
1
n
) Cos[t]+
Cos
¸
(1+
1
n
)t
1
n

n
,
(1+
1
n
)Sin[t]+
Sin
¸
(1+
1
n
)t
1
n

n
} ,{t,0,2 Pi}]
2.3. El comando Show
Como recordarás, el símbolo % era utilizado para referirse al resultado anterior. Cuando el re-
sultado es un gráfico que queremos volver a visualizar usaremos el comando Show en la forma
siguiente
Show[%1]
Si queremos volver a representar los gráficos 1 y 2:
Show[%1,%2]
2.4. Ejercicios
Ejercicio 1. Dibuja la función logaritmo neperiano, exponencial y f(x) = x
2
con colores diferentes.
Compara el crecimiento de estas funciones cerca de cero y lejos de cero. ¿Qué pasa si la base de la
exponencial y el logaritmo son menores que uno?
Ejercicio 2. Igual que en el ejercicio anterior compara las gráficas de las funciones trigonométricas
con las respectivas funciones hiperbólicas.
Ejercicio 3. ¿Cómo cambia la gráfica de una función f(x) cuando la cambiamos por f(a ∗x), a ∗
f(x), f(x +a), o f(x) +a?. Prueba con alguna de las funciones anteriores.
Ejercicio 4. A continuación puedes encontrar la representación de varias funciones. Encuentra de
qué funciones provienen.
-4 -2 2 4
5
10
15
20
25
2.4 Ejercicios 23
-4 -2 2 4
-10
10
20
30
-4 -2 2 4
-20
-10
10
20
2 4 6 8 10 12 14
-1
1
2
CAPÍTULO 3
Vectores y matrices
Para comenzar vamos a ver como trabajar en Mathematica con vectores y matrices. Una matriz
siempre está delimitada por un par de llaves y, separadas por comas, se escriben las filas agrupadas
también con llaves. Por ejemplo,
In[1]:=
{{a11,a12,a13},{a21,a22,a23},{a31,a32,a33}}
Out[1]=
{{a11,a12,a13},{a21,a22,a23},{a31,a32,a33}}
Mathematica no muestra el resultado en la forma de matriz que estamos acostumbrados a ver.
Conseguiremos esto mediante el uso de la orden MatrixForm [ matriz ].
In[2]:=
MatrixForm[ %]
Out[2]=

¸
¸
¸
a11 a12 a13
a21 a22 a23
a31 a32 a33

Si la matriz es diagonal podemos ahorrarnos algo de trabajo con la orden
DiagonalMatrix[{a11,a22,...}]
25
Por ejemplo,
In[3]:=
DiagonalMatrix[{a,b,c,d}]
Out[3]=
{{a,0,0,0},{0,b,0,0},{0,0,c,0},{0,0,0,d}}
En el caso que la matriz diagonal sea la identidad, podemos usar IdentityMatrix[n]. Por ejem-
plo:
In[4]:=
IdentityMatrix[3]
Out[4]=
{{1,0,0},{0,1,0},{0,0,1}}
In[5]:=
MatrixForm[IdentityMatrix[3]]
Out[5]=

¸
¸
¸
1 0 0
0 1 0
0 0 1

Para sumar matrices, si los órdenes lo permiten, solo tenemos que emplear el signo + y para
multiplicarlas por un número podemos usar la simple yuxtaposición o el signo *. Sin embargo, el
producto de matrices, cuando los órdenes lo permiten, tiene una definición distinta. Para multiplicar
dos matrices (filas por columnas) o calcular el producto escalar de dos vectores mediante Mathe-
matica , debemos usar el punto “.” en lugar del signo de la multiplicación “*”. A modo de ejemplo
de estas definiciones puedes comprobar los siguientes cálculos
In[6]:=
A={{1,2,3},{4,5,6},{1,3,2}}
B={{4,3,2},{7,3,1},{1,0,0}}
a={1,5,8}
b={1,3,4}
Out[6]=
{{1,2,3},{4,5,6},{1,3,2}}
{{4,3,2},{7,3,1},{1,0,0}}
{1,5,8}
{1,3,4}
26 Vectores y matrices
Suma de A y B
In[7]:=
A+B
Out[7]=
{{5,5,5},{11,8,7},{2,3,2}}
Producto de una matriz por un número
In[8]:=
5 A
Out[8]=
{{5,10,15},{20,25,30},{5,15,10}}
Producto escalar de a y b
In[9]:=
a.b
Out[9]=
48
Producto de una matriz por un vector A.a (ojo que a se considera columna)
In[10]:=
A.a
Out[10]=
{35,77,32}
Con Mathematica podemos definir matrices de forma automática mediante la orden Table. La
sintaxis es la siguiente
Table[Función de i,j, {i, límite de i},{j,límite de j}]
27
Puedes comprenderla mejor con el siguiente ejemplo:
In[11]:=
Table[ i*x+ j*y, {i, 3},{j,3}]
Out[11]=
{{x+y,x+2y,x+3y},{2x+y,2x+2y,2x+3y},
{3x+y,3x+2y,3x+3y}}
In[12]:=
MatrixForm[ %]
Out[12]=

¸
¸
¸
x+y x+2y x+3y
2x+y 2x+2y 2x+3y
3x+y 3x+2y 3x+3y

Los siguientes comandos son los que nos permiten extraer elementos, filas, columnas y subma-
trices de una matriz. Para extraer el elemento (i,j)-ésimo de una matriz A, escribimos
A[[i,j]]
Para extraer la fila i-ésima,
A[[i]]
Para obtener una submatriz de A el comando es:
A[[{índices de filas},{índices de columnas}]]
Obtener la columna j-ésima de A equivale a extraer la fila j-ésima de la traspuesta de A. Mathematica
usa el comando Transpose para transponer matrices:
Transpose[matriz]
Veamos algún ejemplo. Primero buscamos el elemento (2,3) de la matriz A definida en los ejemplos
anteriores
In[13]:=
A[[2,3]]
Out[13]=
6
Seguidamente la fila segunda de A
In[14]:=
A[[2]]
Out[14]=
{4,5,6}
28 Vectores y matrices
La traspuesta de A
In[15]:=
Transpose[A]
Out[15]=
{{1,4,1},{2,5,3},{3,6,2}}
Y la tercera columna de A
In[16]:=
Transpose[A][[3]]
Out[16]=
{3,6,2}
Por último, la submatriz de A que tiene las filas (1,2) y las columnas (2,3)
In[17]:=
A[[{1,2},{2,3}]]
Out[17]=
{{2,3},{5,6}}
Seguidamente vamos a ver los comandos que nos permiten calcular inversas y determinantes
de matrices con Mathematica . Para calcular el determinante el comando es Det[matriz] y para
calcular la inversa usamos Inverse[matriz]. Como ejemplo puedes calcular los determinantes de
las matrices A y B del primer ejemplo y, si son no nulos, sus inversas.
Si una matriz no es cuadrada, o si siendo cuadrada su determinante vale 0, ¿cómo podemos
calcular su rango?. Mathematica no tiene una orden específica para calcular rangos de matrices,
pero podemos calcularlos de tres formas:
• Mediante la orden Minors[matriz,orden], que calcula los menores de cierto orden de una matriz
dada, dando el resultado en forma de matriz. El rango de la matriz es el mayor orden para el que
hay algún menor no nulo.
• Mediante la orden RowReduce[matriz], que convierte la matriz en otra equivalente, pero trian-
gular superior. Expresada de esta forma es fácil ver el rango de una matriz: basta ver cuantos
elementos no nulos hay en la diagonal principal (aunque no sea cuadrada).
• Si la matriz es cuadrada, podemos calcularle los valores propios, y su rango será el número
de valores propios no nulos. Para calcular los valores propios de una matriz cuadrada, usamos la
orden Eigenvalues[matriz].
Por último, la orden Eigensystem[matriz] da como resultado una lista con los valores propios
y los vectores propios de la matriz. Si sólamente nos interesan los vectores propios podemos usar
Eigenvectors[matriz]. Por ejemplo,
29
In[18]:=
Eigensystem[{{2,1},{3,-1}}]
Out[18]=
{{
1
2
(1-

21),
1
2
(1+

21},
{
1
6
(3-

21,1},{
1
6
(3-

21,1}}
Ejercicio 1. Consideremos las matrices
A =

¸
¸
¸
1 −2 0
2 5 3
−3 1 −4

B =

¸
¸
¸
0 −2 6
12 2 0
−1 −1 3

C =

¸
¸
¸
¸
¸
1 2 0 −5
−4 −2 1 0
3 2 −1 3
5 4 −1 −5

D =

¸
¸
¸
−1 2 3 0
12 −5 0 3
−6 0 0 1

(a) Calcular A.B, A+B, D.C.
(b) Extraer la segunda fila de A, la tercera columna de C y el elemento (3, 3) de D.
(c) Calcular Det(A), Det(B) y Det(C). Para las matrices cuyo determinante sea no nulo, calcular
su inversa. Calcular sus valores propios.
(d) Calcular el rango de las matrices A, B, C, D, D.C y A+B.
(e) Usar la orden Table para generar una matriz del orden 3 ×3, de forma que el elemento (i, j)
sea i ∗ j. Calcula el determinante, su inversa si la tiene, y su rango. ¿Cuáles son sus valores
propios?.
CAPÍTULO 4
Resolución de ecuaciones
4.1. Ecuaciones “sencillas”
Mathematica puede resolver los tipos más comunes de ecuaciones y sistemas de ecuaciones alge-
braicas, tanto de forma exacta (si se puede) como aproximada. Resolvamos el sistema de ecuaciones

x
2
+y
2
= 1
(x −2)
2
+(y −1)
2
= 4
Para ello usamos la sentencia Solve
In[1]:=
Solve[{x
2
+ y
2
==1, (x-2)
2
+ (y-1)
2
==4},{x,y}]
Out[1]=

{x− > 0, y− > 1}, {x− >
4
5
, y− >
−3
5
}
¸
Observa que en el comando Solve tenemos que decirle a Mathematica las variables respecto de
las cuales queremos resolver el sistema. La sintaxis es
Solve[{ecuación1, ecuación2,...},{variable1, variable2,...}]
Para Mathematica una ecuación está formada por dos expresiones igualadas con el signo “==”.
4.1 Ecuaciones “sencillas” 31
A veces, Mathematica no puede resolver de forma exacta una ecuación
In[2]:=
Solve[x
6
+x+1==0,x]
Out[2]=
{{x → Root[1 + #1 + #1
6
&, 1]},
{ x → Root[1 + #1 + #1
6
&, 2]},
{ x → Root[1 + #1 + #1
6
&, 3]},
{ x → Root[1 + #1 + #1
6
&, 4]},
{ x → Root[1 + #1 + #1
6
&, 5]},
{ x → Root[1 + #1 + #1
6
&, 6]}}
Este error aparece porque estamos usando un polinomio de grado alto y es posible que la ecuación
no pueda resolverse con operaciones elementales. En este caso usamos la orden NSolve (tiene la
misma sintaxis que Solve) para una resolución numérica
In[3]:=
NSolve[x
6
+x+1==0,x]
y Mathematica da 6 soluciones aproximadas (en este caso complejas) de la ecuación anterior. Des-
pués de la variable podemos añadir el número de cifras significativas que queremos que tengan las
soluciones
In[4]:=
NSolve[x
6
+x+1==0,x,50]
Además de ecuaciones polinómicas, Solve puede resolver ecuaciones en las que aparecen otro
tipo de funciones. Por ejemplo,
In[5]:=
Solve[ArcCos[x]-ArcTan[x]==0,x]
Out[5]=

¸
¸

¸
¸
x− >

−1
2
+

5
2
¸
¸
¸
¸
¸
¸
En estos casos lo más frecuente es que no se pueda resolver el sistema o que no se puedan calcular
todas las soluciones. Si ocurre esto Mathematica da un mensaje de advertencia avisando de que
puede haber más soluciones:
In[6]:=
Solve[Sin[x] Cos[x]==0,x]
Solve::ifun: Inverse functions are being used by
Solve, so some solutions may not be found.
Out[6]=
{{x− > 0}, {x− >
−π
2
}, {x− >
π
2
}}
32 Resolución de ecuaciones
4.2. Sistemas de ecuaciones lineales
Vamos a aplicar lo que hemos visto a la resolución de sistemas lineales de la forma
A.x = b,
donde A es una matriz de orden m×n y x y b son vectores de órdenes n y m respectivamente.
El caso más fácil es que la matriz A sea cuadrada e inversible, entonces la solución del sistema
es tan sencilla como multiplicar (matricialmente) la inversa de A por b.
Cuando resolvemos sistema de ecuaciones con Mathematica , la soluciones nos aparecen como
listas de valores, es decir como vectores. El problema que nos surge es que no podemos trabajar
directamente con estos resultados. La solución para este problema resulta sencilla, podemos definir
un vector cuyas componentes sean las soluciones de nuestra ecuación y podemos utilizar sus com-
ponentes como hemos visto anteriormente. Para esto llamamos “S” al vector solución y lo definimos
cuando ponemos S igual a la inversa de A por b (cuando es posible). Veamos un ejemplo. Como en
este caso la matriz es cuadrada y tiene determinante distinto de cero, sólo tenemos que calcular su
inversa:
In[7]:=
A={{1,3,5},{9,7,5},{2,4,5}}
b={4,7,3}
Det[A]
Out[7]=
{{1,3,5},{9,7,5},{2,4,5}}
{4,7,3}
20
In[8]:=
S=Inverse[A].b
Out[8]=
{
7
4
,-
11
4
,
21
10
}
De este modo tenemos definido el vector de soluciones del sistema como S. Si queremos conocer la
solución de la segunda variable solo tenemos que buscar la segunda componente de S:
In[9]:=
S[[2]]
Out[9]=
-
11
4
Otra posibilidad para resolver el sistema es usar la orden
LinearSolve[matriz A,vector b].
¿Qué pasa si la solución no es única?. Puedes comprobar con ejemplos sencillos que la orden
LinearSolve da como resultado un vector aunque el sistema tenga infinitas soluciones:
4.2 Sistemas de ecuaciones lineales 33
In[10]:=
LinearSolve[{{1,1}},{1}]
Out[10]=
{1,0}
en este ejemplo, (1, 0) es solución del sistema x+y = 1, pero hay más soluciones, como por ejemplo
(0, 1). La forma de obtener las demás soluciones es calcular el núcleo de la matriz de coeficientes
mediante la orden NullSpace, que da una base de dicho núcleo. De esta forma, si sabemos una
solución particular del sistema A.x = b, x
0
(obtenida mediante LinearSolve) y una base del núcleo
de A, x
1
, x
2
, . . ., todas las soluciones del sistema serán de la forma x
0

1
x
1

2
x
2
+· · · , donde
λ
1
, λ
2
, . . . son parámetros. En nuestro ejemplo anterior (x +y = 1) habíamos obtenido
In[11]:=
LinearSolve[{{1,1}},{1}]
Out[11]=
{1,0};
el núcleo de la matriz (1 1) tiene base
In[12]:=
NullSpace[{{1,1}}]
Out[12]=
{{-1,1}};
con lo que todas las soluciones del sistema serán de la forma (1, 0) +λ(−1, 1), con λ un parámetro
real.
Otra forma de resolver sistemas es usar la orden Solve que ya conocemos. Un ejemplo nos
ayudará a entender la mecánica:
In[13]:=
A={{1,1,1},{2,2,2},{1,0,1}};
v={x,y,z};
b={0,0,1};
Solve[A.v==b,{x,y,z}]
Out[13]=
{{y->-1, x->1-z}}
En este caso, como la matriz A tiene rango dos, las soluciones nos vienen dadas de forma implícita
mediante dos ecuaciones: {y = −1, x = 1 − z}; por tanto, el espacio afín de soluciones tendrá
dimensión 1.
34 Resolución de ecuaciones
Ejercicio. Usando las matrices
A =

¸
¸
¸
1 −2 0
2 5 3
−3 1 −4

B =

¸
¸
¸
0 −2 6
12 2 0
−1 −1 3

C =

¸
¸
¸
¸
¸
1 2 0 −5
−4 −2 1 0
3 2 −1 3
5 4 −1 −5

D =

¸
¸
¸
−1 2 3 0
12 −5 0 3
−6 0 0 1

resolver los siguientes sistemas de ecuaciones lineales: A.x = (1, 1, 0)
t
, B.x = (2, 0, 0)
t
, C.x =
(−1, 2, 0, 0)
t
y C.x = (1, −1, 0, 0)
t
.
4.3. Resolución de sistemas de ecuaciones
Veamos todos los comandos con algunos ejemplos:
• Comandos Solve y NSolve: Sirven para resolver sistemas de ecuaciones polinómicas. El prime-
ro sólo resuelve sistemas de grado bajo pero con soluciones exactas, expresadas mediante radicales.
El segundo da soluciones aproximadas pero sirve para cualquier grado.
• Comando Reduce: simplifica sistemas de ecuaciones dependientes de parámetros, haciendo
una discusión de casos si es necesario. Su sintaxis es
Reduce[{ecuación1,ecuación2,…},{var1,var2,…}]
Al usar este comando hay que tener en cuenta que todo lo que no se le introduce como variable es
considerado parámetro. Además, el resultado obtenido al usar Reduce difiere bastante del obtenido
al usar Solve o NSolve, pues este comando no devuelve valores numéricos, sino ecuaciones más
simples que habrá que resolver; dichas ecuaciones vendrán expresadas usando “operadores lógicos”:
&& es la conjunción “y”, || es la disyunción “o”. Un ejemplo:
In[14]:=
Reduce[{x +a y == a,
b y + b x == 0},{x,y}]
Out[14]=
x == a(1 −y) && b == 0 ||
−1 +a ≠ 0 && x == −a/(−1 +a)
&& y == a/(−1 +a)
Mathematica da dos soluciones: la primera x = a(1−y) con b = 0; la segunda: x =
−a
a −1
, y =
a
a −1
que sólo vale si a ≠ 1 y para cualquier b.
Ejercicio 1. Discutir en función de los parámetros a y b, los siguientes sistemas de ecuaciones:

¸
¸
¸
¸
¸
¸
¸
¸
¸
¸
x +az = 0
x +2y = b
x −y +az = 0

¸
¸
¸
¸
¸
¸
¸
¸
¸
¸
x +az = 1
x +2y = −1
x −y +az = 3

¸
¸
¸
¸
ax
2
+by = 5
x −by = 1
4.4 Otros métodos 35

¸
¸
¸
¸
¸
¸
¸
¸
¸
¸
x −z = 1
x +2y = 1
x +az = b

¸
¸
¸
¸
¸
¸
¸
¸
¸
¸
x +az = 0
x +2y = b
x −y +az = 0

¸
¸
¸
¸
¸
¸
¸
¸
¸
¸
x +2z = 0
7x −2y = 0
6x −2y +az = 0
4.4. Otros métodos
Hemos visto como resolver ecuaciones y sistemas de ecuaciones con Mathematica mediante la
orden Solve. El problema de usar la orden Solve, es que solo nos permite resolver ecuaciones
y sistemas de ecuaciones para los que es posible aplicar un método algebraico sencillo. En otras
palabras, la orden Solve está limitada a ecuaciones y sistemas de ecuaciones que se puedan resolver
mediante operaciones elementales.
Recordemos el siguiente ejemplo que ya nos habíamos encontrado:
In[15]:=
Solve[x
6
+x+1==0,x]
Out[15]=
{{x → Root[1 + #1 + #1
6
&, 1]},
{ x → Root[1 + #1 + #1
6
&, 2]},
{ x → Root[1 + #1 + #1
6
&, 3]},
{ x → Root[1 + #1 + #1
6
&, 4]},
{ x → Root[1 + #1 + #1
6
&, 5]},
{ x → Root[1 + #1 + #1
6
&, 6]}}
Ahora es un buen momento para plantearle a Mathematica algunas ecuaciones, por ejemplo polino-
miales de grado alto, para ver las limitaciones de la orden Solve.
In[16]:=
Solve[x
6
+x
3
+ 1 == 0, x ]
In[17]:=
Solve[x
6
+ x
5
+ 1 == 0, x]
Prueba con otras ecuaciones de grado alto la orden Solve.
En estas condiciones, nos damos cuenta de la necesidad de encontrar o aproximar soluciones
para ecuaciones del tipo f(x) = 0, donde, en principio, podemos considerar como f cualquier
función real de una variable. El objetivo de esta práctica es aprender a programar algoritmos con
Mathematica para aproximar la solución de estas ecuaciones.
Lo primero que tenemos que tener en cuenta es que no existe ningún método general para
resolver todo este tipo de ecuaciones en un número finito de pasos.
Lo que sí tendremos es condiciones para poder asegurar, bajo ciertas hipótesis sobre la función f,
que un determinado valor es una aproximación de la solución de la ecuación con un error prefijado.
El principal resultado para asegurar la existencia de solución para la ecuación f(x) = 0 en un
intervalo [a, b], es el Teorema de Bolzano. Dicho teorema asegura que si f es continua en [a, b] y
cambia de signo en el intervalo, entonces existe al menos una solución de la ecuación en el intervalo
[a, b]. Los dos métodos que vamos a usar se basan en este resultado.
36 Resolución de ecuaciones
Ambos métodos nos proporcionan un algoritmo para calcular una sucesión de aproximaciones,
y condiciones sobre la función f para poder asegurar que la sucesión que obtenemos converge a la
solución del problema. Una vez asegurada esta convergencia, bastará tomar alguno de los términos
de la sucesión que se aproxime a la sucesión con la exactitud que deseemos.
4.4.1. Breves conceptos de programación
Antes de introducirnos en el método teórico de resolución, vamos a presentar algunas sentencias
sencillas de programación que necesitaremos más adelante.
La primera de las órdenes que vamos a ver es el comando For, usada para realizar bucles. Un
“bucle” es un proceso repetitivo que se realiza un cierto número de veces. Un ejemplo de bucle
puede ser el siguiente: supongamos que queremos obtener los múltiplos de siete comprendidos
entre 7 y 70; para ello, multiplicamos 7 por cada uno de los números naturales comprendidos entre
1 y 10, es decir, repetimos 10 veces la misma operación: multiplicar por 7.
La sintaxis de la orden es la siguiente,
For[expresión inicial,condición,incremento,expresión]
• expresión inicial nos sitúa en las condiciones de comienzo del bucle.
• condición dirá a Mathematica el momento de detener el proceso.
• incremento expresará la forma de aumentar la condición inicial.
• expresión dirá a Mathematica lo que tiene que realizar en cada paso; la expresión puede estar
compuesta de varias sentencias separadas mediante punto y coma.
Para terminar de comprender bien el funcionamiento de esta orden puedes teclear y evaluar los
siguientes ejemplos:
En primer lugar, intentemos escribir los múltiplos de 7 comprendidos entre 7 y 70:
In[18]:=
For[i=1,i<=10,i=i+1,Print[7*i]]
7
14
21
28
35
42
49
56
63
70
El segundo ejemplo consiste en hacer a Mathematica sumar de cinco en cinco, comenzando en
5 y terminando en 25.
4.4 Otros métodos 37
In[19]:=
For[i=5,i<=25,i=i+5,Print[i]]
5
10
15
20
25
El tercero genera el seno de 1, el seno de 11 y el seno de 21.
In[20]:=
For[i=1,i<=30,i=i+10,Print[Sin[i]]]
Sin[1]
Sin[11]
Sin[21]
Ejercicio Usa el comando For en los siguientes ejemplos:
• Sumar los números naturales entre 400 y 450.
• Sumar los cuadrados de los primeros 10 naturales.
La segunda sentencia es la orden condicional If. Esta sentencia comprueba si se verifica una
condición, después, si la condición es verdadera Mathematica ejecutará una expresión1, y si es falsa
ejecutará otra expresión2. Su sintaxis es la siguiente,
If[condición, expresión1, expresión2]
La expresiones 1 y 2 pueden estar formadas por varias órdenes separadas por punto y coma.
Para familiarizarnos con esta orden vamos a teclear y ejecutar el siguiente ejemplo,
In[21]:=
a=5;
If[a<=0, Print["No existe el logaritmo
neperiano de ", a] , Print["El
logaritmo neperiano de ", a,"vale ",
N[Log[a]]]]
El logaritmo neperiano de 5 vale 1.60944
Ahora puedes probar a cambiar el valor de a para ver como la sentencia If va cambiando sus
resultados.
La última sentencia de programación que vamos a ver es la orden Break[ ] cuya única finalidad
es la de interrumpir un bucle en el momento que se ejecuta y no terminar todos los pasos que faltan
hasta la condición final del bucle. En el siguiente ejemplo se puede comprender rápidamente el uso
de esta orden.
38 Resolución de ecuaciones
In[22]:=
For[i=1,i<=30,i=i+1,
If[N[Log[i]]<=2,Print[Log[i]],
Print["El logaritmo de ", i, "es mayor
que 2"]; Break[] ]]
0
Log[2]
Log[3]
Log[4]
Log[5]
Log[6]
Log[7]
El logaritmo de 8 es mayor que 2
4.4.2. Método de Bisección
En este método sólo es necesario que la función f sea continua en el intervalo [a, b] y verifique
f(a)f(b) < 0. En estas condiciones, el Teorema de Bolzano nos asegura la existencia de una solución
de la ecuación en [a, b]. El siguiente paso consiste en tomar como nueva aproximación, c =
a+b
2
(el punto medio del segmento [a, b]). Si f(c) = 0, hemos encontrado una solución de la ecuación
y por tanto hemos terminado. Si f(c) ≠ 0, consideramos como nuevo intervalo, o bien [a, c] (si
f(a)f(c) < 0, o bien [c, b] si es que f(c)f(b) < 0 y repetimos la estrategia en el nuevo intervalo.
En este método podemos conocer el error que cometemos en cada una de las aproximaciones. Si
nos damos cuenta, partimos de un intervalo de longitud (b-a) y lo partimos por la mitad quedándonos
con el subintervalo en el que podemos asegurar la existencia de una raíz si ésta no era el punto
medio de [a, b]. El nuevo subintervalo tiene longitud
b−a
2
y contiene a la solución y a la primera
aproximación. En consecuencia, el error cometido es menor o igual que
b−a
2
. De la misma forma, el
error cometido en el paso n-ésimo es menor o igual que
b−a
2
n
.
A partir de aquí, podemos deducir el número de iteraciones necesarias para obtener una aproxi-
mación con un error o exactitud prefijados. Si notamos por “Ex” a la exactitud prefijada, entonces
para conseguir dicha precisión, el número “n” de iteraciones necesarias deberá satisfacer
b −a
2
n
< Ex
así,
n = E
¸
Log
2

b −a
Ex
¸
+1,
donde E[·] denota la “parte entera” de un número (esto es, el mayor de los enteros que son menores
que el número. Para obtener la “parte entera” de un número que está expresado en notación decimal,
Mathematica tiene el comando Floor.
Para definir un algoritmo de cálculo de la sucesión de aproximaciones de este método mediante
Mathematica , vamos a resolver como ejemplo la ecuación x
6
+x −5 = 0 en el intervalo [0, 2].
Definiremos en primer lugar la función, el intervalo y la exactitud. Seguidamente calcularemos el
número “P” de iteraciones (o pasos) necesarias, para a continuación llevar a cabo el cálculo de dichas
aproximaciones, que se irán visualizando a medida que se van haciendo los sucesivos cálculos.
4.4 Otros métodos 39
In[23]:=
Clear["Global`*"]
f[x_]=x
6
+x-5;
a=0;
b=2;
Ex=10(-6);
P=Floor[N[Log[2,(b-a)/Ex]]]+1;
For[i=1,i<=P,i=i+1,
c=(a+b)/2;
If[f[c]==0,
Print["Sol. exacta: ",N[c,10],
"hallada en ",i,"pasos."
];
Break[]
];
If[f[c]f[a]<0,b=c,a=c];
Print[i," – aprox: ",N[c,10],
"(error <",N[b-a],")"
]
]
Este comando da lugar a la siguiente respuesta por parte del Mathematica :
1 - aprox: 1. (error <1.)
2 - aprox: 1.5 (error <0.5)
3 - aprox: 1.25 (error <0.25)
4 - aprox: 1.125 (error <0.125)
5 - aprox: 1.1875 (error <0.0625)
6 - aprox: 1.21875 (error <0.03125)
7 - aprox: 1.234375 (error <0.015625)
8 - aprox: 1.2421875 (error <0.0078125)
9 - aprox: 1.24609375 (error <0.00390625)
10 - aprox: 1.248046875 (error <0.00195312)
11 - aprox: 1.247070313 (error <0.000976562)
12 - aprox: 1.246582031 (error <0.000488281)
13 - aprox: 1.246826172 (error <0.000244141)
14 - aprox: 1.246704102 (error <0.00012207)
15 - aprox: 1.246643066 (error <0.0000610352)
16 - aprox: 1.246612549 (error <0.0000305176)
17 - aprox: 1.246627808 (error <0.0000152588)
18 - aprox: 1.246635437 (error <7.62939 10
−6
)
19 - aprox: 1.246631622 (error <3.8147 10
−6
)
20 - aprox: 1.246629715 (error <1.90735 10
−6
)
21 - aprox: 1.246628761 (error <9.53674 10
−7
)
A continuación, prueba a cambiar la función, los extremos del intervalo (en los cuales dicha
función cambia de signo), así como la exactitud exigida. Intenta también buscar un caso simple en
el que se encuentre la solución exacta en unos pocos pasos. Por último, intenta usar el algoritmo
anterior para calcular
3

5 con una exactitud de 10
−10
.
40 Resolución de ecuaciones
Graba ese algoritmo en disco... más tarde compararemos su efectividad con la del siguiente
método.
4.4.3. Método de Newton-Raphson
El método para la construcción del algoritmo que vamos a estudiar ahora es conocido con el
nombre de “método de Newton-Raphson” debido a sus autores. Este método nos proporciona un
algoritmo para obtener una sucesión de aproximaciones. Para asegurar la convergencia de la suce-
sión (hacia la solución de la ecuación), bajo ciertas condiciones, usaremos el Teorema de Newton-
Raphson, cuyo enunciado daremos más adelante.
La forma de construir los distintos términos de la sucesión
1 2 3 4
-60
-40
-20
20
40
60
de aproximaciones es bastante sencilla y responde a una idea
muy intuitiva. Primero suponemos que f es derivable al menos
dos veces, con primera derivada no nula en el intervalo donde
trabajamos. Notaremos por f

y f

a la derivadas primera y se-
gunda de f respectivamente. Una vez fijado un valor inicial x
1
,
el término x
2
se obtiene como el punto de corte de la recta tan-
gente a f en x
1
con el eje OX. De la misma forma, obtenemos
x
n+1
como el punto de corte de la recta tangente a f en el punto x
n
con el eje OX.
De lo dicho hasta aquí se deduce:
x
n+1
= x
n

f(x
n
)
f

(x
n
)
.
Para comprender el algoritmo observa el gráfico donde se ve cómo se generan los valores de las
aproximaciones.
El mencionado Teorema de Newton-Raphson, es el siguiente:
Teorema (de Newton-Raphson). Tomemos una función f que admite derivada segunda en el inter-
valo [a, b] y verifica:
1. f(a)f(b) < 0,
2. f

(x) ≠ 0, para todo x ∈ [a, b],
3. f

(x) no cambia de signo en [a, b].
Entonces, tomando como primera aproximación el extremo del intervalo [a, b] donde f y f

tienen
el mismo signo, la sucesión de valores x
n
del método de Newton-Raphson es convergente hacia la
única solución de la ecuación f(x) = 0 en [a, b].
Una vez que tenemos asegurada la convergencia de la sucesión hacia la solución de la ecuación,
deberíamos decidir la precisión. Sin embargo, veremos que el método es tan rápido en su conver-
gencia que por defecto haremos siempre 10 iteraciones. Otra posibilidad sería detener el cálculo de
cuando el valor absoluto de la diferencia entre x
n
y x
n+1
sea menor que la precisión buscada (lo
cual no implica necesariamente que el error cometido sea menor que la precisión).
Utilizaremos ahora Mathematica para generar la sucesión de aproximaciones. Resolvamos de
nuevo el ejemplo de x
3
−5 = 0 en el intervalo [1, 3].
Podemos comprobar, dibujando las gráficas de f(x) = x
3
− 5, f

(x) y f

(x) en el intervalo
[1, 3], que estamos en las condiciones bajo las cuales el Teorema de Newton-Raphson nos asegura
4.4 Otros métodos 41
convergencia. Las gráficas se pueden obtener de la forma que aparece en la página siguiente (ojo,
para escribir la “prima” en f

[x], debemos usar la tecla que está al lado del 0 en el teclado).
In[24]:=
Clear["Global`*"]
f[x_]=x
3
-5;
Plot[f[x],{x,1, 3}];
Plot[f’[x],{x,1, 3}];
Plot[f”[x],{x,1, 3}]
1.5 2 2.5 3
5
10
15
20
Out[24]= - Graphics -
1.5 2 2.5 3
5
10
15
20
25
Out[25]= - Graphics -
1.5 2 2.5 3
8
10
12
14
16
18
Out[26]= - Graphics -
42 Resolución de ecuaciones
A continuación, generaremos los términos de la sucesión de aproximaciones mediante el si-
guiente algoritmo. Comenzaremos por definir la función f, y el valor de la primera aproximación.
Inmediatamente después definimos el algoritmo del método de Newton-Raphson, e iremos visuali-
zando las sucesivas aproximaciones. Como dijimos, pondremos un límite de 10 iteraciones, aunque
usando mayor precisión decimal puedes probar con un número mayor de iteraciones.
In[27]:=
Clear["Global`*"]
f[x_]=x
3
-5;
y=3;
For[i=1,i<=10,i=i+1,
y1=N[y-f[y]/f’[y],20];
Print[i, aprox: ",y1];
y=y1
]
Observarás al ejecutar este grupo de comandos que ya en la sexta iteración se han “estabilizado”
veinte cifras decimales de la solución. Prueba a continuación a cambiar a un mayor número de de-
cimales en las aproximaciones. Si es necesario, aumenta también el número de iteraciones. Observa
qué rápidamente se “estabilizan” los decimales de las iteraciones. Sí, como puedes ver, el método
de Newton-Raphson es muy rápido.
4.5. El comando FindRoot
El método que hemos visto en la sección anterior se puede usar directamente con la orden
FindRoot.
FindRoot[función de x,{x,aproximación inicial}]
La aproximación inicial debería ser un punto que este “más o menos” cerca del cero de la función que
queremos buscar. En cualquier caso hay que tener en cuenta que aún escogiendo puntos iniciales
cercanos el resultado puede ser completamente distinto.
Por ejemplo,
In[28]:=
FindRoot[x
3
-5,{x,3}]
Out[28]=
{x->1.70998}
El comando FindRoot también se puede usar con sistemas de ecuaciones. Sólo hay que escribir
las ecuaciones agrupadas entre llaves y dar un punto inicial para cada variable:
FindRoot[{eq1,eq2,…},{x,x
0
},{y,y
0
},…]
4.5 El comando FindRoot 43
Ejercicios 1.
1. Considérese la ecuación
e
(x
2
+x+1)
−e
x
3
−2 = 0.
Calcular programando los métodos de bisección y de Newton-Raphson, la solución de dicha
ecuación en el intervalo [−0,3, 1] con exactitud 10
−10
. Encontrar la solución mediante la orden
FindRoot y comparar los resultados.
2. Dada la ecuación
tan(x) =
1
x
buscar la solución que posee en el intervalo [0,
π
2
], usando los métodos estudiados.
Ejercicio 2. Encontrar una solución del siguiente sistema de ecuaciones “cerca” de (0,0):

¸
¸
¸
¸
senxcos y =
1
4
xy = 1
CAPÍTULO 5
Extremos de funciones de una variable
5.1. Continuidad y límites
Básicamente todas las funciones que han aparecido hasta ahora eran continuas. En el caso de
que no lo fueran Mathematica tampoco parece haber tenido demasiados problemas. Cuando hemos
dibujado la gráfica de la función tangente, Mathematica ha dibujado una asíntota vertical en los
puntos donde el coseno valía cero.
En el caso de que queramos estudiar la continuidad de una función en un punto a, tenemos que
calcular l´ım
x→a
f(x). Mathematica puede estudiar límites (también laterales). La orden es la siguiente:
Limit[expresión,variable->a]
Limit[expresión,variable->a,Direction->1]
Limit[expresión,variable->a,Direction->-1]
La primera calcula el límite de la expresión cuando la variable tiende a a. Las siguientes calculan el
límite por la izquierda y la derecha respectivamente. Por ejemplo,
In[1]:=
Limit[
n
n +1
, n->+∞]
Out[1]=
1
In[2]:=
Limit[Tan[x],x->Pi/2,Direction->1]
Out[2]=

5.2 Máximos y mínimos relativos 45
Cuando la función oscila entre dos valores Mathematica intenta dar el intervalo aunque no exista el
límite.
In[3]:=
Limit[Sin[1/x],x->0]
Out[3]=
Interval[{-1,1}]
5.2. Máximos y mínimos relativos
Esencialmente, lo que haremos para localizar los extremos relativos de una función f será en-
contrar soluciones de la ecuación f

(x) = 0. Para solucionar dicha ecuación, podemos usar (cuando
sea posible por la simplicidad de la ecuación) comandos directos como Solve ó NSolve, o bien
usaremos el comando FindRoot cuando las soluciones no se puedan obtener directamente.
Comencemos buscando los extremos relativos de la función polinómica f(x) = x
5
+x
4
−11x
3

9x
2
+ 18x + 10 en el intervalo [−4, 4]. Para ello, definiremos convenientemente la función f, y
dibujaremos su gráfica entre −4 y 4.
In[4]:=
Clear["Global`*"]
f[x_]= x
5
+x
4
-11x
3
-9x
2
+18x+10;
Plot[f[x],{x,-4,4}]
-4 -2 2 4
-100
-50
50
100
Out[4]= - Graphics -
A simple vista observaremos que hay:
un máximo relativo entre −3 y −2,
un mínimo relativo entre −2 y −1,
un máximo relativo entre 0 y 1,
un mínimo relativo entre 2 y 3.
En cualquier caso, dada la simplicidad de esta función (polinómica de grado bajo), es posible calcular
directamente los ceros de la derivada con el comando
46 Extremos de funciones de una variable
In[5]:=
NSolve[f’[x]==0,x]
Como vemos, aparecen cuatro soluciones que se corresponden con los extremos que habíamos
localizado a simple vista.
Sin embargo, no todas las funciones permiten calcular de un modo simple las soluciones de la
ecuación f

(x) = 0. Por ejemplo, consideremos ahora la función f(x) = sen(x) +e
x
en el intervalo
[−7, 0]. Pintémosla igual que antes, sustituyendo la antigua función por la nueva. De nuevo, a simple
vista se observa que hay:
un máximo relativo cerca de −5,
un mínimo relativo cerca de −2
Sin embargo, ahora no funciona satisfactoriamente el comando NSolve (inténtalo). Optaremos por
aplicar el método de Newton-Raphson (mediante el comando FindRoot) para encontrar las raíces
de la derivada de f. Recordemos que en el comando FindRoot es necesario introducir una “primera
aproximación” de la solución, que servirá para iniciar el proceso iterativo. En este caso concreto,
dada la situación aproximada de los extremos, probaremos a iniciar el método desde −5 y también
desde −2. Concretamente, escribiremos el comando
In[6]:=
FindRoot[f’[x],{x,-5}]
FindRoot[f’[x],{x,-2}]
El programa nos da entonces una buena aproximación de los puntos donde la función alcanza
los extremos observados.
A continuación veremos un caso en el que la gráfica diseñada por el programa nos puede llevar
a engaño. Descubriremos el error gracias al “test de la segunda derivada”. Sea f(x) = x
2
− 10x −
40 +
1
10x
2
−100x +251
, y pintémosla en el intervalo [−15, 15].
Aparentemente, hay un mínimo cerca de 5. Si buscamos raíces de la derivada ejecutando el
comando FindRoot con dato inicial 5, obtenemos que precisamente para x = 5 la derivada se
anula (se podía haber comprobado antes pidiendo al Mathematica el valor de f

(5)). A la vista de la
gráfica, en x = 5 parece haber un mínimo de la función f. Sin embargo, pidámosle al Mathematica
que calcule el valor de la segunda derivada de f en 5. Obtendremos que f

(5) = −18 < 0. La
segunda derivada es negativa y por tanto en x = 5 tiene que haber un máximo.
Sería conveniente ver “más de cerca” lo que ocurre cerca de 5. Prueba a pintar la función en el
intervalo [4, 6]. Ahora parece haber un mínimo cerca de 4,5 y otro cerca de 5,5, y efectivamente, un
máximo en 5... ¿cómo podemos asegurar que cerca de los extremos que ahora vemos no vuelven a
ocurrir nuevas “oscilaciones ocultas” como la que antes no veíamos?...
CAPÍTULO 6
Fórmula de Taylor
Seguro que alguna vez te has preguntado cómo pueden una calculadora o un ordenador usar las
funciones seno, coseno, exponencial, logaritmo... que no tienen una definición fácil, y que se basan
en números “esencialmente” irracionales como π o e.
En esta práctica trataremos de entender cómo se pueden construir funciones conociendo única-
mente las funciones suma (resta), producto (división) y potenciación. Necesitaremos además com-
prender el concepto de límite y la derivación de funciones. Se trata de “sustituir” funciones com-
plicadas por otras mas sencillas de calcular (que en este caso serán polinomios), controlando la
“pérdida” que se produce.
El primer ejemplo puede ser “sustituir” una función por su recta tangente (si recuerdas, esto
nos sirvió para encontrar ceros de funciones mediante el método de Newton-Raphson): dada una
función f derivable en un punto a, la recta y = f(a) +f

(a)(x −a) pasa por el punto (a, f(a))
y tiene la misma pendiente que la función f. En cierto sentido, lo que hemos hecho es encontrar
una función más sencilla (una recta, o sea, un polinomio de grado uno) que se parece a la función
de partida (coinciden el valor de la función y el de la derivada). ¿Hasta que punto puedo “cambiar”
una función por su recta tangente? Si la función oscila demasiado, la aproximación no será buena,
como por ejemplo en la función coseno
En el gráfico podemos ver que en cuanto nos alejamos un
-3 -2 -1 1 2 3
-1
-0.5
0.5
1
poco del punto de tangencia (en este caso el 0), la función co-
seno y su tangente no se parecen nada. La forma de mejorar la
aproximación será aumentar el grado del polinomio que usa-
mos, y el problema es, fijado un grado, qué polinomio de grado
menor o igual al fijado es el que más se parece a la función. El
criterio con el que elegiremos el polinomio será hacer coincidir
las sucesivas derivadas. Por ejemplo, si buscamos un polinomio
P de grado dos que aproxime a una función dos veces deriva-
ble, f, vamos a exigir que P(a) = f(a), P

(a) = f

(a) y P

(a) = f

(a). Con estas tres condiciones
estamos en disposición de calcular los coeficientes de A(x − a)
2
+ B(x − a) + C. Si lo hacemos,
48 Fórmula de Taylor
veremos que dicho polinomio “aproximante” de grado 2 es el siguiente (deriva el polinomio P y
verás como sus derivadas hasta orden 2 coinciden con las de la función f)
P(x) = f(a) +f

(a)(x −a) +
f

(a)
2!
(x −a)
2
Veamos qué pasa con una función concreta. Consideremos la función f(x) = cos(x) y vamos a
calcular el polinomio “aproximante” en 0. En este caso f(0) = 1, f

(0) = 0, f

(0) = −1. Por tanto
el polinomio “de aproximación” de grado 2 es el siguiente:
P
2
(x) = f(0) +f

(0) x +
f

(0)
2!
x
2
= 1 −
1
2
x
2
Si dibujamos ahora las funciones f, P
1
y P
2
podremos comprobar qué es lo que ocurre:
In[1]:=
Clear["Global

*"]
f[x_]=Cos[x];
Plot[{f[x],1-(x
2
)/2},{x,-4,4},
PlotStyle->{RGBColor[1,0,0],RGBColor[0,0,1]}]
-4 -2 2 4
-4
-3
-2
-1
1
Out[1]= - Graphics -
El polinomio de orden 2 se parece un poco más a la función coseno que la recta tangente, pero
de todas formas, si aumentamos el dominio (prueba por ejemplo x ∈ [−10, 10]) se puede ver que
el “parecido” se pierde al alejarnos del origen. El problema es que estamos calculando polinomios
de grado bajo.
Todo lo que hemos hecho hasta ahora se basa en un resultado teórico ya conocido: si I es un
intervalo, a, x ∈ I y f : I →R es una función n-veces derivable, se define el polinomio de Taylor de
orden n en el punto a como
P
n
(x) = f(a) +f

(a) (x −a) +
f

(a)
2!
(x −a)
2
+· · ·
· · · +
f
(n)
(a)
n!
(x −a)
n
Teorema (Fórmula de Taylor). Si f : I → R es una función (n+1)-veces derivable, entonces existe
c entre a y x tal que
f(x) −P
n
(x) =
f
(n+1)
(c)
(n+1)!
(x −a)
n+1
.
49
El teorema anterior nos permite incluso acotar el error que estamos cometiendo: basta acotar el
llamado resto de Taylor,
f
(n+1)
(c)
(n+1)!
, y para ello, acotaremos la derivada de orden n+1 en el intervalo
considerado. Volvamos al ejemplo anterior: Si trabajamos en el intervalo [−π, π] y queremos usar
P
2
en lugar de la función coseno, sabemos que el punto c que nos da el error también está en ese
intervalo. Vamos a calcular el valor máximo que puede alcanzar:
| cos(x) −P
2
(x)| = |
f

(c)
3!
x
3
|
=
¸
¸
¸
¸
sen(c)
3!
x
3
¸
¸
¸
¸

1
6
π
3
La última acotación se basa en que el valor máximo que alcanza la tercera derivada, sen(x), es 1, y
que x en valor absoluto vale a lo sumo π.
Mathematica tiene una orden que permite calcular directamente el polinomio de Taylor centrado
en un punto a. Se trata del comando Series, cuya sintaxis es
Series[función,{x,a,grado}]
Volviendo al ejemplo anterior, si pruebas
In[2]:=
Series[Cos[x],{x,0,2}]
Out[2]=
1 −
x
2
2
+O[x]
3
verás como, además del desarrollo del polinomio, aparece al final el orden de error (O[x]
3
); re-
presenta que los términos que faltan son todos de grado mayor o igual que tres. Si quieres usar
directamente el resultado (sin que aparezca el orden del error) puedes utilizar el comando
Normal[expresión]
Este comando simplemente elimina el orden de error de la expresión que obtenemos con el
comando Series, quedando sólo el polinomio de Taylor.
En nuestro ejemplo, para comparar la función coseno y el correspondiente polinomio de Taylor
de grado 4 en cero haremos lo siguiente:
50 Fórmula de Taylor
In[3]:=
Clear[“Global

*”];
f[x_]=Cos[x];
g[x_]=Normal[Series[f[x],{x,0,4}]];
Plot[{f[x],g[x]},{x,-Pi,Pi},
PlotStyle->{RGBColor[1,0,0],RGBColor[0,0,1]}]
-3 -2 -1 1 2 3
-1
-0.5
0.5
1
Out[3]= - Graphics -
Ya habíamos visto la orden Table. Con ella podemos calcular de una vez el desarrollo de Taylor
de varios órdenes y comprobar como se va pareciendo cada vez más a la función. Si escribes
In[4]:=
Table[Series[Cos[x],{x,0,n}],{n,1,10}]
el resultado son todos los desarrollos de la función coseno centrados en 0 y de orden 1,2,…,10. Si
queremos dibujarlos tenemos que quitar los errores y usar la orden Plot de la lista que acabamos
de hacer. En lo que sigue a será el punto donde centramos el desarrollo de Taylor, [b, c] el intervalo
donde queremos representarlo, la variable orden será el grado hasta el que queremos llegar y f la
función que vamos a desarrollar:
In[5]:=
Clear[“Global

*”];
f[x_]=Cos[x];
a=0;
b=-2Pi;
c=2Pi;
orden=10;
Plot[Evaluate[
Table[Normal[Series[f[x],{x,a,n}]],
{n,0,orden}]],{x,b,c}]
Plot[f[x],{x,b,c},PlotStyle->RGBColor[1,0,0]]
Show[ %, % %]
La orden Evaluate[Table...] que hemos escrito calcula los desarrollos antes de que hagamos el
dibujo. Prueba a cambiar la función, el punto donde desarrollamos, el intervalo donde se represen-
ta...
51
Hasta aquí hemos visto como comparar la gráfica de una función con la de su polinomio de
Taylor. La orden Animate permite dibujar la gráfica de una función en función de un parámetro
para después poder reproducirlo como una secuencia de fotogramas (una “película”). Un ejemplo
sencillo de como funciona sería el siguiente:
In[6]:=
Animate[Plot[Sin[x*t],{x,0,2
Pi}],{t,1,10}]
In[7]:=
Clear[“Global

*”];
f[x_]=Cos[x]+Sin[x];
a=0;
b=-2Pi;
c=2Pi;
orden=30;
Animate[Plot[Evaluate[
{f[x],Normal[Series[f[x],{x,a,n}]]},
{x,b,c},
PlotStyle->{RGBColor[1,0,0],
RGBColor[0,0,1]},PlotRange->{-3,3}]],
{n,1,orden,1}]
Cuando se ejecuta la orden anterior, Mathematica dibuja la función y los polinomios de Taylor
de orden 1 hasta 30. Prueba a pinchar dos veces en la última gráfica que ha aparecido.
Ejercicio 1. Aproxima la función exponencial (f(x) = e
x
) mediante su polinomio de Taylor de grado
4 centrado en 0 en el intervalo [−20, 20]. Prueba a aumentar el grado y a usar intervalos cada vez
más grandes.
Ejercicio 2. Acota el error que estás cometiendo al aproximar

e = e
1
2
por el valor obtenido usando
el polinomio de Taylor de orden 4 centrado en cero.
Ejercicio 3. Lo mismo que los dos ejercicios anteriores para la función logaritmo neperiano (cen-
trando en a = 1) y para ln(2).
CAPÍTULO 7
Integración
7.1. Integrales definidas e indefinidas
En esta práctica aprenderemos a calcular integrales con el programa Mathematica , tanto inte-
grales indefinidas (es decir, primitivas) como integrales definidas. El objetivo es poder calcular áreas
entre curvas, áreas y volúmenes de sólidos de revolución, longitudes de curvas... sin que el cálculo
de primitivas sea el principal escollo.
Básicamente hay dos comandos para integrar funciones en Mathematica : Integrate
y NIntegrate. Como siempre también puedes usar la paleta para escribir las integrales.
La primera de las órdenes mencionadas calcula primitivas o integrales definidas en un
intervalo [a, b]:
Integrate[función,variable]
Integrate[función,{variable,a,b}]
Por ejemplo,
In[1]:=
Integrate[Cos[x],x]
Out[1]=
Sin[x]
In[2]:=

Cos[x]dx
Out[2]=
Sin[x]
7.1 Integrales definidas e indefinidas 53
Mathematica puede obtener prácticamente cualquier primitiva calculable por métodos elemen-
tales (integración por partes, integración de funciones racionales, trigonométricas, cambio de varia-
ble...). Por otro lado, sabemos que toda función continua admite primitiva, pero esta primitiva no
siempre puede calcularse (en el sentido de tener una expresión de la primitiva en términos de funcio-
nes “elementales”). Por eso, al integrar algunas funciones en el resultado que obtenemos aparecen
funciones que no conocemos:
In[3]:=

Sin[x]
x
dx
Out[3]=
SinIntegral[x]
En este caso, aunque no conozcamos la función que nos aparece, podemos obtener su valor en un
punto:
In[4]:=
N[SinIntegral[2],7]
Out[4]=
1.605413
Para obtener un valor numérico del resultado se puede usar el comando N:
N[Integrate[función,{x,a,b}]]
Puede pasar que Mathematica no sepa calcular la primitiva de una función:
In[5]:=

Exp[x
3
+x]dx
Out[5]=

E
x
3
+x
dx
En este caso siempre podemos intentar aproximar el valor de la integral. Esto es precisamente lo
que hace el comando NIntegrate
NIntegrate[función,{variable,a,b}]
En el ejemplo anterior,
In[6]:=
NIntegrate[Exp[x
3
+x],{x,0,2}]
Out[6]=
1846.36
54 Integración
Observa en este ejemplo que no es lo mismo usar el comando NIntegrate[...] que N[Integrate[...]].
En el segundo caso Mathematica tiene que saber calcular una primitiva para después calcular cuan-
to vale, mientras que el primer comando intenta aproximar el valor de la integral sin calcular una
primitiva.
Curiosamente, con funciones a las que podemos calcular fácilmente una primitiva, el comando
NIntegrate no siempre funciona bien; tecleando
In[7]:=
NIntegrate[Cos[x],{x,0,Pi}]
te darás cuenta que Mathematica “protesta”. El programa intenta calcular una aproximación con
métodos numéricos; estos métodos pueden tener problemas cuando la función oscila mucho. En
estos casos pueden aparecer respuestas erróneas.
Ejercicios. Calcular:
1. área limitada por las curvas y = x
2
e y
2
= 8x
2. área limitada por y = xe
−x
2
, el eje OX, la ordenada en el punto x = 0 y la ordenada en el
máximo.
3. área de la figura limitada por la curva y = x
3
−x
2
y el eje OX.
4. área comprendida entre la curva y = tg(x), el eje OX y la recta x = π/3.
5. área del recinto limitado por las rectas x = 0, x = 1, y = 0 y la gráfica de la función f : R →R
definida por
f(x) =
1
(1 +x
2
)
2
.
7.2. Longitudes, áreas y volúmenes
Algunas de las aplicaciones de la integral que se han visto en las clases teóricas son calcular
longitudes de curvas, y volúmenes y superficies de cuerpos de revolución.
• Volúmenes de sólidos de revolución:
Sea f : [a, b] → R una función continua; el volumen del sólido generado al girar el área bajo la
curva y = f(x) respecto del eje OX es
V = π

b
a
f(x)
2
dx
y el volumen del sólido generado al girar dicha área respecto al eje OY es
V = 2π

b
a
xf(x) dx.
• Longitudes de curvas:
Sea f una función de clase 1 en el intervalo [a, b]. La longitud del arco de la curva y = f(x)
entre x = a y x = b es
l =

b
a

1 +[f

(x)]
2
dx.
7.3 Integrales impropias. 55
• áreas de sólidos de revolución:
Sea f : [a, b] → R una función de clase 1; el área de la superficie generada haciendo girar
alrededor del eje OX el arco de curva y = f(x) en [a, b] es igual a
S = 2π

b
a
f(x)

1 +[f

(x)]
2
dx.
Ejercicio 1. Calcular el volumen del sólido generado al rotar respecto al eje OX las siguiente curvas:
1. y = sec(x), x ∈ [0,
π
3
]
2. y =

cos(x), x ∈ [0,
π
2
]
3. y = 9 −x
2
4. y = e
x
, x ∈ [0, ln3]
Ejercicio 2. Calcular el volumen del sólido generado al rotar respecto al eje OY las siguiente curvas:
1. y = 1/x, x ∈ [1, 3]
2. y =
1
1 +x
2
, x ∈ [0, 1]
3. y = e
x
2
, x ∈ [1,

3]
Ejercicio 3. Calcular la longitud de las siguientes curvas:
1. y =
1
3
(x
2
+2)
3/2
, x ∈ [0, 1]
2. y =
1
2
(e
x
+e
−x
), x ∈ [0, 3]
Ejercicio 4.
1. Calcular la superficie de una esfera de radio R.
2. Calcular la superficie de la figura que se obtiene al girar la función y = tg(x), x ∈ [0, π/4]
alrededor del eje OX.
7.3. Integrales impropias.
Como recordarás de las clases teóricas, la integral que en principio se define para funciones
continuas en intervalos cerrados y acotados, puede extenderse a funciones continuas definidas en
intervalos de longitud infinita, y a funciones que no están acotadas en un intervalo de longitud
finita. Es lo que se conoce como Integración impropia. Con el programa Mathematica , el trabajar
con integrales impropias no supone ningún problema, ya que las trata exactamente igual que las
integrales de funciones continuas en intervalos cerrados y acotados.
Con la misma orden Integrate se pueden calcular integrales impropias. Simplemente prueba
con una función como f(x) =
1

1 −x
2
en el intervalo [−1, 1] o con la función g(x) = e
−x
2
en
[0, +∞[ (en Mathematica para escribir infinito usamos +Infinity o -Infinity, o la paleta). En este
segundo caso, escribiríamos
56 Integración
In[8]:=

+∞
0
Exp[−x
2
]dx
Out[8]=

π
2
Intenta calcular las integrales anteriores en el intervalo dado y después intenta calcular una
primitiva de esas funciones. Como verás, la primitiva de la primera función ya la conocías, en cambio
en la primitiva de la segunda aparece una función que, supongo, no conocías.
También podemos usar las fórmulas para calcular longitudes, áreas y volúmenes con integrales
impropias.
Ejercicio. Calcular:
1. La integral de f(x) =
1
x
2
con x ∈ [1, +∞].
2. El volumen y la superficie lateral del sólido obtenido al girar la gráfica de la anterior función
respecto del eje OX.
3. Ídem a los dos anteriores con g(x) =
1
x
con x ∈ [1, +∞].
CAPÍTULO 8
Gráficos en 3D
8.1. El comando Plot3D
En el segundo capítulo pudimos comprobar que Mathematica es una herramienta muy potente
para “dibujar” gráficas de funciones de una variable. Ahora aprenderemos a representar gráfica-
mente funciones reales de dos variables. La principal aplicación de la representación gráfica de una
función de dos variables será dar una idea aproximada de la variación de dicha función, lo que será
especialmente útil para buscar extremos.
Al igual que para funciones de una variable, suele ser cómodo asignarle un nombre (normalmente
f, g, h…). Para definir la función sen(xy) haremos lo siguiente:
In[1]:=
f[x_,y_]=Sin[x*y]
Out[1]=
Sin[x y]
y usaremos f de igual forma a como lo hacíamos con funciones de una variable.
El comando que sirve para representar gráficas de funciones de dos variables es
Plot3D[función de x,y, {x,x
min
,x
max
},{y,y
min
,y
max
}]
Veamos un ejemplo:
58 Gráficos en 3D
In[2]:=
Plot3D[f[x,y],
{x,-Pi,Pi},{y,-Pi,Pi}]
-2
0
2
-2
0
2
-1
-0.5
0
0.5
1
-2
0
2
Out[2]= - SurfaceGraphics -
8.1.1. Opciones del comando Plot3D
Mesh->True/False
Se dibuja (True) o no (False) la retícula o malla sobre la que se construye la gráfica. En el ejemplo
anterior:
In[3]:=
Plot3D[f[x,y],{x,-Pi,Pi},
{y,-Pi,Pi},Mesh->False]
Shading->True/False
Se colorea (True) o no (False) la malla anterior. Si unimos las opciones Mesh->False y Shading->False,
no aparecerá gráfico alguno. Un ejemplo:
In[4]:=
Plot3D[f[x,y],{x,-Pi,Pi},
{y,-Pi,Pi},Shading->False]
PlotPoints->número de puntos
Representa el número de puntos que usará Mathematica para dibujar la gráfica. Un núme-
ro muy alto producirá un gráfico más “suave”, pero aumentará considerablemente el tiempo
empleado por Mathematica para realizarlo.
ViewPoint
Establece el punto de vista desde el que se dibujará la gráfica. La forma de usar esta opción será
“pegarlo” desde una ventana que automatiza el proceso. A dicha ventana se accede a través
del menú Input, submenú 3D ViewPoint Selector.
8.2 Gráficos de contorno. Curvas de nivel. 59
Ejercicio. Prueba las opciones anteriores con las siguientes funciones de dos variables:
1. f(x, y) = (x
2
+y
4
)e
1−x
2
−y
2
con x, y ∈ [−2, 2].
2. g(x, y) = sen(x −2xy) con x ∈ [0, π], y ∈ [−π, π].
3. h(x, y) =
xy
x
2
+y
2
con x, y ∈ [−1, 1].
8.2. Gráficos de contorno. Curvas de nivel.
Una forma cómoda de ver la gráfica de una función es mediante curvas de nivel. Se trata de
representar en el plano una figura tridimensional como es la gráfica de una función de dos varia-
bles, permitiendo ver las zonas de crecimiento y decrecimiento de dicha función. El comando que
representa funciones de dos variables mediante curvas de nivel es
ContourPlot[función de x,y,{x,x
min
,x
max
},{y,y
min
,y
max
}]
Por ejemplo,
In[5]:=
ContourPlot[(3 x
2
+ y
2
)
Exp[1-x
2
-y
2
],
{x,-2,2},{y,-2,2}]
-2 -1 0 1 2
-2
-1
0
1
2
Out[5]= - ContourGraphics -
Entre otras, las opciones del comando ContourPlot son:
ContourShading->False
Dibuja sólo las curvas de nivel y no utiliza la escala de grises. Ejemplo:
In[6]:=
ContourPlot[(3 x
2
+ y
2
)Exp[1-x
2
-y
2
],
{x,-2,2},{y,-2,2},ContourShading->False]
60 Gráficos en 3D
PlotPoints->número de puntos
Representa el número de puntos que usará Mathematica para dibujar la gráfica. Al igual que
en Plot3D, un número muy alto producirá un gráfico más “suave”, pero aumentará conside-
rablemente el tiempo empleado por Mathematica para realizarlo.
Ejercicio 1. Representa los gráficos de contorno de las funciones del ejercicio anterior, comparando
la información que obtienes de una y otra forma.
Ejercicio 2. Consideremos la función f : [−2, 2]×[−2, 2] →Rdada por f(x, y) = (x
2
+y
4
)e
1−x
2
−y
2
.
Utiliza los comandos anteriores para obtener información sobre la ubicación de sus posibles extre-
mos relativos.
8.3. Gráficos paramétricos. Curvas y superficies.
Ya aprendimos a representar gráficamente curvas planas expresadas en forma paramétrica. Aho-
ra veremos como representar curvas alabeadas (esto es, curvas en el espacio) y superficies paramé-
tricas. El comando de Mathematica para ello es ParametricPlot3D.
Cuando tenemos las ecuaciones paramétricas de una curva en el espacio
x = x(t), y = y(t), z = z(t) con t ∈ [a, b]
usamos la orden
ParametricPlot3D[{x(t), y(t), z(t)},{t,a,b}]
Por ejemplo, para dibujar una hélice:
In[7]:=
ParametricPlot3D[{Sin[t],Cos[t],t/3},{t,0,5Pi}]
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
0
2
4
-1
-0.5
0
0.5
1
Out[7]= - Graphics3D -
8.3 Gráficos paramétricos. Curvas y superficies. 61
Si lo que tenemos son las ecuaciones paramétricas de una superficie
x = x(u, v), y = y(u, v), z = z(u, v) con u ∈ [a, b] y v ∈ [c, d]
se usa
ParametricPlot3D[{x(u, v), y(u, v), z(u, v)},{u,a,b},{v,c,d}]
Dibujemos una esfera:
In[8]:=
ParametricPlot3D[{Cos[u]Cos[v],
Sin[u]Cos[v],Sin[v]},
{u,0,2 Pi},{v,-Pi/2,Pi/2}]
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
Out[8]= - Graphics3D -
8.3.1. Superficies de revolución
En el caso particular en que la superficie que queremos representar se obtiene girando una curva
respecto a un eje se puede usar el paquete SurfaceOfRevolution. Para cargarlo se escribe
In[9]:=
<<Graphics`SurfaceOfRevolution`
y desde este momento está disponible la orden
SurfaceOfRevolution[f(x),{x,a,b}]
SurfaceOfRevolution[{f(t),g(t)},{t,a,b}]
SurfaceOfRevolution[{f(t),g(t),h(t)},{t,a,b}]
La primera orden dibuja la superficie de revolución obtenida al girar la curva f en el plano XZ
entre a y b. La segunda y la tercera funcionan análogamente pero estamos dando una curva en el
plano XZ (segundo caso) o en el espacio (último caso). En cualquier caso el giro se hace respecto al
eje Z. Si se quiere girar respecto a la recta que une el origen con el punto {x
1
,x
2
,x
3
} se puede utilizar
la siguiente opción:
62 Gráficos en 3D
SurfaceOfRevolution[f(t),{t,a,b},
RevolutionAxis->{x
1
,x
2
,x
3
}]
Veamos algunos ejemplos. Un cono se consigue fácilmente girando una recta:
In[10]:=
SurfaceOfRevolution[2 x,{x,-2,2}]
-2
-1
0
1
2
-2
-1
0
1
2
-4
-2
0
2
4
-2
-1
0
1
2
Out[10]= - Graphics3D -
Si quisiéramos girar respecto a la bisectriz del primer octante, o sea, alrededor de la recta que pasa
por el vector (1,1,1):
In[11]:=
SurfaceOfRevolution[2x,{x,-2,2},
RevolutionAxis->{1,1,1}]
-4
-2
0
2
4
-4
-2
0
2
4
-4
-2
0
2
4
-4
-2
0
2
4
-4
-2
0
2
4
Out[11]= - Graphics3D -
8.3 Gráficos paramétricos. Curvas y superficies. 63
Dibujar una esfera o un elipsoide es ahora simplemente cuestión de girar media circunferencia
o media elipse:
In[12]:=
SurfaceOfRevolution[{Cos[x],Sin[x]},{x,-Pi,Pi},
AspectRatio->1]
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
-1
-0.5
0
0.5
1
Out[12]= - Graphics3D -
In[13]:=
SurfaceOfRevolution[{5Cos[x],3Sin[x]},
{x,-Pi,Pi},AspectRatio->1]
-5
-2.5
0
2.5
5
-5
-2.5
0
2.5
5
-2
0
2
-5
-2.5
0
2.5
5
Out[13]= - Graphics3D -
Por último comentar que, como habrás visto en el último ejemplo, las mayoría de las opciones del
comando Plot3D siguen siendo válidas.
Ejercicio 1. Representar las siguientes curvas y superficies:
1.
¸
¸
¸
¸
¸
¸
¸
¸
¸
¸
x(t) = sen(t)
y(t) = sen(2t)
z(t) = t/5
con t ∈ [0, 5π].
64 Gráficos en 3D
2.
¸
¸
¸
¸
¸
¸
¸
¸
¸
¸
x(u, v) = cos(u)(3 +cos(v))
y(u, v) = sen(u)(3 +cos(v))
z(u, v) = sen(v)
con u, v ∈ [0, 2π].
3.
¸
¸
¸
¸
¸
¸
¸
¸
¸
¸
x(u, v) = senu
y(u, v) = senv
z(u, v) = v
con u ∈ [−π, π] y v ∈ [0, 5].
Ejercicio 2. ¿Cómo se puede dibujar un cilindro? ¿Y un cono truncado?.
Ejercicio 3. A la figura siguiente, obtenida al girar una circunferencia, se la llama toro. Intenta
dibujarla.
-2
0
2
-2
0
2
-1
-0.5
0
0.5
1
-2
0
2
CAPÍTULO 9
Extremos relativos y condicionados
En esta práctica veremos cómo calcular extremos relativos y condicionados de funciones de
varias variables. Se trata de usar el programa Mathematica como apoyo para realizar los cálculos
necesarios en los métodos de optimización vistos en las clases teóricas.
9.1. Derivadas parciales
El primer objetivo será aprender a calcular derivadas parciales, gradientes, hessianos...
de funciones de varias variables, y aplicar todo ello al cálculo de extremos relativos y
condicionados.
Ya conocemos de prácticas anteriores la forma de calcular derivadas de funciones de
una variable: mediante el comando D[f[x],x,n] obtenemos la derivada n-ésima de la
función f. Para funciones escalares de varias variables (esto es, funciones que “salen” de
R
n
y “llegan” a R), el comando
D[f[x,y,…],{x,n1},{y,n2},…]
nos devuelve la derivada parcial de f respecto de x n1-veces, respecto de y n2-veces…pudiendo
omitirse el número de veces si éste es 1. También puede usarse la paleta. En la figura tie-
nes los símbolos que nos permiten escribir derivadas de cualquier orden y derivadas de
segundo orden.
Calculemos como ejemplo

3
f
∂x
2
∂y
y

2
f
∂x∂y
, donde f(x, y) = senxcos y
2
:
66 Extremos relativos y condicionados
In[1]:=
f[x_,y_]=Sin[x] Cos[y
2
];

x,x,y
f[x,y]

x,y
f[x,y]
Out[1]=
2 y Sin[x]Sin[y
2
]
-2 y Cos[x] Sin[y
2
]
Evidentemente esta no es la forma más cómoda de calcular una derivada parcial de orden 15. Para
eso es mejor utilizar D[f[x,y],{x,8},{y,7}].
Por ejemplo para calcular el gradiente de una función de varias variables basta construir el vector
formado por las derivadas parciales primeras de la función respecto de todas las variables:
In[2]:=
J[x_,y_]={∂
x
f[x,y],∂
y
f[x,y]}
Out[2]=
{Cos[x]Cos[y
2
], -2 y Sin[x] Sin[y
2
]}
Usando la paleta, el hessiano se calcula de forma análoga:
In[3]:=


x,x
f[x,y] ∂
x,y
f[x,y]

y,x
f[x,y] ∂
y,y
f[x,y]
¸
Recuerda que las derivadas cruzadas de segundo orden coinciden para funciones “suficientemente
buenas”.
9.2. Representación gráfica
Ya que sabemos cómo se calculan las derivadas parciales de una función, vamos a intentar re-
presentar gráficamente el plano tangente y cómo se obtiene a partir de las derivadas parciales.
Comencemos, por ejemplo, con la función
In[4]:=
f[x_,y_]=1-(x
2
+y
2
)
y vamos a calcular en el punto (1, 1) sus derivadas parciales. La definición de derivada parcial
respecto a la primera variable era
∂f
∂x
(1, 1) = l´ım
h→0
f(1 +h, 1) −f(1)
h
Lo que hacemos es trabajar únicamente con la función definida sobre la recta que pasa por (1, 1) y
es esa función (de una variable) la que derivamos. La segunda derivada parcial tiene una definición
análoga. Dibujemos la gráfica de la función y la imagen de cada una de esas dos rectas:
9.2 Representación gráfica 67
In[5]:=
Plot3D[f[x,y],{x,-2,2},{y,-2,2},Mesh->False]
ParametricPlot3D[{1,t,f[1,t]},{t,-2,2}]
ParametricPlot3D[{t,1,f[t,1]},{t,-2,2}]
Show[ % % %, % %, %]
-2
-1
0
1
2 -2
-1
0
1
2
-6
-4
-2
0
-2
-1
0
1
2
Out[5]= - Graphics3D -
0
0.5
1
1.5
2
-2
-1
0
1
2
-4
-3
-2
-1
0
0
0.5
1
1.5
2
-2
-1
0
1
2
Out[6]= - Graphics3D -
-2
-1
0
1
2
0
0.5
1
1.5
2
-4
-3
-2
-1
0
0
0.5
1
1.5
2
-4
-3
-2
-1
0
Out[7]= - Graphics3D -
Out[8]= - Graphics3D -
68 Extremos relativos y condicionados
Los vectores tangentes a las dos curvas que hemos dibujado son los dos vectores que generan
el plano tangente. Por tanto su ecuación será
z = f(1, 1) +
∂f
∂x
(1, 1)(x −1) +
∂f
∂y
(1, 1)(y −1)
Para acabar nos falta dibujar el plano tangente y unirlo con la gráfica anterior:
In[9]:=
parcial1[x_,y_]=∂
x
f[x,y]
parcial2[x_,y_]=∂
y
f[x,y]
ParametricPlot3D[{x,y,f[1,1]+
parcial1[1,1](x-1)+
parcial2[1,1](y-1)},
{x,0,2},{y,0,2},PlotPoints->3]
Show[ % % % %, %]
Out[9]= -2x
Out[10]= -2y
0
0.5
1
1.5
2
0
0.5
1
1.5
2
-4
-2
0
2
0
0.5
1
1.5
2
Out[11]= - Graphics3D -
-2
-1
0
1
2
-2
-1
0
1
2
-5
-2.5
0
2.5
-2
-1
0
1
2
Out[12]= - Graphics3D -
Ejercicio. ¿Cómo se podría hacer esto con derivadas direccionales en lugar de derivadas parciales?
9.2 Representación gráfica 69
9.2.1. “Campos” de vectores
Sabíamos que el gradiente de una función en cada punto era el vector formado por las derivadas
parciales e indicaba la dirección de máxima pendiente. Recordemos que el comando ContourPlot
dibujaba las curvas de nivel de la gráfica de una función, por tanto el gradiente debería ser perpen-
dicular a estas. Para verlo necesitamos algunos comandos que podemos usar cargando el paquete
PlotField:
In[13]:=
<<Graphics`PlotField`
In[14]:=
f[x_,y_]=2(x+y)Cos[x]
Out[14]=
2(x+y)Cos[x]
In[15]:=
Plot3D[f[x,y],{x,-2,2},{y,-2,2}]
-2
-1
0
1
2
-2
-1
0
1
2
-4
-2
0
2
4
-2
-1
0
1
2
Out[15]= - Graphics -
Dibujemos ahora las curvas de nivel. La opción ColorFunction->Hue utiliza colores para diferenciar
las distintas alturas en lugar de la escala de grises que habíamos visto.
In[16]:=
ContourPlot[f[x,y],{x,-2,2},{y,-2,2},
ColorFunction->Hue]
-2 -1 0 1 2
-2
-1
0
1
2
Out[16]= - Graphics -
70 Extremos relativos y condicionados
La orden PlotGradientField dibuja los vectores (
∂f
∂x
,
∂f
∂y
). Las dos opciones que aparecen
(ScaleFunction y ScaleFactor) no son necesarias.
In[17]:=
PlotGradientField[f[x,y],{x,-2,2},{y,-2,2},
ScaleFunction->(.1#&),
ScaleFactor->None]
Out[17]= - Graphics -
También existe la orden PlotHamiltonianField que dibuja los vectores (−
∂f
∂y
,
∂f
∂x
). Estos son
perpendiculares al gradiente y por tanto nos indican las curvas de nivel.
In[18]:=
PlotHamiltonianField[f[x,y],{x,-2,2},{y,-2,2},
ScaleFunction->(.1#&),
ScaleFactor->None]
Out[18]= - Graphics -
9.3 Extremos relativos. 71
In[19]:=
Show[ %16, %17]
-2 -1 0 1 2
-2
-1
0
1
2
Out[19]= - Graphics -
Ejercicio 1. Calcular las derivadas parciales de:
1. f(x, y, z) = x
y+z
, ∀x ∈ R
+
, y, z ∈ R
2. f(x, y, z) = (x +y)
z
, ∀x, y ∈ R
+
, z ∈ R
3. f(x, y) = sen(xseny), ∀x, y ∈ R
Ejercicio 2. Sea f : R
2
\ {(0, 0)} →R dada por f(x, y) = log(x
2
+y
2
) para todo (x, y) ≠ (0, 0). Se
pide:
(i) Calcúlese el gradiente de f en todo punto así como la matriz hessiana.
(ii) Compruébese que

2
f
∂x
2
(x, y) +

2
f
∂y
2
(x, y) = 0 ∀(x, y) ∈ R
2
−{(0, 0)}.
Ejercicio 3. Sea f : R
2
→ R una función diferenciable con continuidad. Si v = f(x, y) donde
x = ρ cos θ, y = ρsenθ, comprobar que

2
f
∂x
2
+

2
f
∂y
2
=

2
v
∂ρ
2
+
1
ρ
2

2
v
∂θ
2
+
1
ρ
∂v
∂ρ
9.3. Extremos relativos.
El método para encontrar extremos relativos de funciones de varias variables consiste en buscar
primero los puntos críticos, es decir, puntos donde se anula el gradiente, y después estudiar la
matriz hessiana en esos puntos. Los resultados que conocemos nos aseguran que todos los puntos
extremos de una función están entre los puntos críticos, con lo que una vez calculados éstos nos
dedicaremos a estudiar la matriz hessiana en ellos, viendo si es definida, indefinida, semidefinida...
Para ello podemos usar el criterio de los valores propios: si todos son del mismo signo, la matriz es
definida y hay extremo; si aparecen valores propios de distinto signo es indefinida y hay punto de
silla; en otro caso, la matriz es semidefinida y el criterio no decide.
72 Extremos relativos y condicionados
Ejemplo 1: Calculemos los extremos relativos de la función
f(x, y) = x
3
+3xy
2
−15x −12y.
Primero definimos la función, su gradiente y su hessiano:
In[20]:=
f[x_,y_]=x
3
+ 3 x y
2
-15 x -12 y
z=f[x,y]
In[21]:=
J[x_,y_]={∂
x
z, ∂
y
z}
H[x_,y_]=


x,x
z ∂
x,y
z

y,x
z ∂
y,y
z
¸
Para calcular los puntos críticos podemos usar el comando Solve, ya que el gradiente está for-
mado por polinomios de grado bajo; guardaremos el resultado que nos de Solve en una variable,
pcrit, que mas tarde usaremos:
In[22]:=
pcrit=Solve[J[x,y]==0,{x,y}]
Out[22]=
{{x ->-2, y ->-1},{x ->-1, y ->-2},
{x ->1, y ->2},{x ->2, y ->1}}
Hemos obtenido así 4 puntos críticos entre los que estarán los extremos. Calculemos ahora los
valores propios de la matriz hessiana en los cuatro puntos críticos obtenidos (observa la utilización
del comando /. que ahora comentaremos)
In[23]:=
Eigenvalues[H[x,y]] /. pcrit
Out[23]=
{{-6, -18}, {6,-18}, {-6, 18}, {6, 18}}
El comando /. sirve para asignar valores; en el caso anterior, asignamos la lista de valores que hay
en pcrit (que son los puntos críticos de f) al comando Eigenvalues[H[x,y]], que calcula los
valores propios de la matriz hessiana en un punto (x, y). De esta forma, lo que hemos obtenido es
una lista formada por cuatro parejas de valores propios de H[x,y] correspondientes a los cuatro
puntos críticos. Así, la matriz hessiana en el primer punto crítico, (−2, −1), tiene sus dos valores
propios negativos, con lo que es definida negativa y por tanto hay máximo; los puntos críticos 2.
o
y 3.
o
, (−1, −2) y (1, 2), son puntos de silla, ya que sobre ellos la matriz hessiana es indefinida; por
último, el 4.
o
es un punto de mínimo. Si queremos saber lo que vale la función f sobre sus puntos
críticos, basta teclear
9.3 Extremos relativos. 73
In[24]:=
f[x,y]/.pcrit
Out[24]=
{28, 26, -26, -28}
que nos da una lista con los valores de f en los puntos críticos, o bien escribir directamente
f[-2,-1], f[-1,-2], etc…
Podemos resumir diciendo que la función f tiene máximo valor relativo 28 en el punto (−2, −1),
mínimo valor relativo -28 en (2, 1), y dos puntos de silla en (−1, −2) y (1, 2).
Ejemplo 2: Extremos relativos de
f(x, y) = (x
2
+3y
2
) e
1−x
2
−y
2
.
Comenzamos definiendo f, y calculando el gradiente y la matriz hessiana:
In[25]:=
Clear[“Global

*”]
f[x_,y_]=(x
2
+ 3 y
2
) Exp[1-x
2
-y
2
];
z=f[x,y]
In[26]:=
J[x_,y_]={∂
x
z, ∂
y
z}
H[x_,y_]=


x,x
z ∂
x,y
z

y,x
z ∂
y,y
z
¸
Si intentamos calcular los puntos críticos resolviendo el sistema J[x, y] == 0 con la orden
NSolve, Mathematica informa que no puede resolverlo, pues aparecen exponenciales, y NSolve
(igual que Solve o Reduce) sólo sirven para polinomios y funciones sencillas. En este punto, tenemos
dos posibilidades. La primera, trazar la gráfica de f (como superficie o con curvas de nivel) para
tener una idea de dónde están los extremos, y usar el comando FindRoot con las aproximaciones
iniciales que nos da la gráfica.
74 Extremos relativos y condicionados
In[27]:=
Plot3D[f[x,y],{x,-2,2},{y,-2,2}]
-2
-1
0
1
2
-2
-1
0
1
2
0
1
2
-2
-1
0
1
2
Out[27]= - SurfaceGraphics -
In[28]:=
ContourPlot[f[x,y],{x,-2,2},{y,-2,2}]
-2 -1 0 1 2
-2
-1
0
1
2
Out[28]= - ContourGraphics -
A la vista de las gráficas podemos calcular aproximaciones a los extremos y calcularlos con
FindRoot, pero ¿qué nos asegura que no hay más extremos que no entran en el rango de la función,
o que no vemos por la imprecisión de los gráficos?.
La segunda posibilidad es realizar operaciones algebraicas en el sistema de ecuaciones J[x,y]==0,
para convertirlo en un sistema polinómico. Esto no siempre puede hacerse, pero en este caso sí:
basta multiplicar el sistema por e
−(1−x
2
−y
2
)
(que no se anula), y resolver el nuevo sistema que es
polinómico:
In[29]:=
G[x_,y_]=Simplify[J[x,y]*Exp[x
2
+y
2
-1]]
Out[29]=
{2x(1-x
2
-3y
2
),2y(3-x
2
-3y
2
)}
Las soluciones de G[x,y]==0 serán los puntos críticos de f, que almacenaremos en la variable pcrit:
In[30]:=
pcrit=Solve[G[x,y]==0,{x,y}]
Out[30]=
{{x ->-1, y ->0}, {x ->0, y ->0}, {x
->1, y ->0}, {y ->-1, x ->0}, {y ->1, x
->0}}
9.4 Extremos condicionados. 75
Estudiemos el hessiano en los cinco puntos:
In[31]:=
Eigenvalues[H[x,y]]/.pcrit
Out[31]=
{{-4, 4}, {2 E, 6 E},{-4, 4}, {-12,
-4}, {-12, -4}}
Tenemos dos puntos de máximo: (0, −1) y (0, 1); un punto de mínimo: (0, 0); y dos puntos de silla:
(−1, 0) y (1, 0). La función f vale sobre sus puntos críticos
In[32]:=
f[x,y]/.pcrit
Out[32]=
{1, 0, 1, 3, 3}
con lo que, vale 3 en los dos máximos y 0 en el mínimo.
Ejercicio. Calcular los extremos relativos de las siguientes funciones.
1. f(x, y) = x
2
+y
2
−2x +4y +20.
2. f(x, y) = x
3
+x
2
y +y
2
+2y +5.
3. f(x, y) = (x
2
+y
2
) e
x
2
−y
2
.
4. f(x, y, z) = x
2
+y
2
+z
2
−2x.
5. f(x, y) = x
3
y
3
−y
4
−x
4
+xy.
9.4. Extremos condicionados.
Usaremos el método de los multiplicadores de Lagrange para calcular extremos condicionados.
Se trata de optimizar una función de varias variables en el conjunto de puntos que verifiquen una
cierta ecuación o ecuaciones.
Dada una función suficientemente diferenciable, y una curva o superficie en forma implícita,
el método consiste en encontrar los puntos de dicha curva o superficie que verifican un sistema
auxiliar, llamado “sistema de Lagrange”, que dará el equivalente a los puntos críticos; después habrá
una condición sobre el hessiano equivalente a la condición para extremos relativos. Hay que notar
que no todas las condiciones son válidas, sino que se ha de imponer una hipótesis técnica, pero en
la práctica supondremos hecha la comprobación.
Ejemplo 1: Calculemos los extremos de la función
f(x, y) = x
2
−y
2
76 Extremos relativos y condicionados
condicionados a la ecuación
g(x, y) = x
2
+y
2
−1 = 0.
Comenzamos definiendo la función f, la condición, y la función auxiliar de Lagrange
In[33]:=
f[x_,y_]=x
2
-y
2
;
g[x_,y_]=x
2
+ y
2
-1;
F[x_,y_,lambda_]=f[x,y]-lambda*g[x,y]
z=F[x,y,lambda]
Definimos gradiente y hessiano de la función de Lagrange
In[34]:=
J[x_,y_,lambda_]={∂
x
z, ∂
y
z};
H[x_,y_]=


x,x
z ∂
x,y
z

y,x
z ∂
y,y
z
¸
;
y resolvemos el sistema de Lagrange, esto es, J[x,y,lambda]==0 y g[x,y]==0. Como estamos con
ecuaciones polinómicas, usaremos Solve:
In[35]:=
pcrit=Solve[{J[x,y,lambda]==0,
g[x,y]==0},{x,y,lambda}]
Out[35]=
{{lambda ->-1, y ->-1, x ->0}, {lambda
->-1, y ->1, x ->0}, {lambda ->1, x
->-1, y ->0}, {lambda ->1, x ->1, y
->0}}
Obtenemos 4 puntos críticos, y para ver si son o no extremos, estudiamos la matriz hessiana auxiliar
H[x,y,lambda] restringida al espacio tangente a la curva en los puntos críticos. Desafortunadamen-
te, no podemos aplicar de una vez la asignación de valores, sino que deberemos ir punto a punto
In[36]:=
G[x_,y_]={{∂
x
g[x,y],∂
y
g[x,y]}};
In[37]:=
nucleo=NullSpace[G[x,y]/. pcrit[[1]]]
Out[37]=
{{1,0}}
(observa que pcrit[[1]] nos da el primer punto crítico)
9.4 Extremos condicionados. 77
In[38]:=
nucleo.(H[x,y,lambda]/.pcrit[[1]]).
Transpose[nucleo]
Out[38]=
{{4}}
luego el primer punto es un mínimo condicionado;
In[39]:=
nucleo=NullSpace[G[x,y]/. pcrit[[2]]]
Out[39]=
{{1,0}}
In[40]:=
nucleo.(H[x,y,lambda]/.pcrit[[2]]).
Transpose[nucleo]
Out[40]=
{{4}}
el segundo punto también es mínimo;
In[41]:=
nucleo=NullSpace[G[x,y]/. pcrit[[3]]]
In[42]:=
nucleo.(H[x,y,lambda]/.pcrit[[3]]).
Transpose[nucleo]
Out[42]=
{{-4}}
el tercer punto es un máximo;
78 Extremos relativos y condicionados
In[43]:=
nucleo=NullSpace[G[x,y]/. pcrit[[4]]]
Out[43]=
{{0,1}}
In[44]:=
nucleo.(H[x,y,lambda]/.pcrit[[4]]).
Transpose[nucleo]
Out[44]=
{{-4}}
otro máximo.
El valor de la función en los extremos:
In[45]:=
f[x,y]/.pcrit
Out[45]=
{-1, -1, 1, 1}
esto es, vale 1 en los máximos y -1 en los mínimos.
Ejemplo 2: Calcular los extremos relativos de
f(x, y, z) = x
2
+y
2
+z
2
condicionados a la superficie
g(x, y, z) = 2x +2y −z +3 = 0.
Comenzamos con las definiciones:
In[46]:=
f[x_,y_,z_]=x
2
+ y
2
+z
2
;
g[x_,y_,z_]=2x+2y-z+3;
F[x_,y_,z_,lambda_]=f[x,y,z]-lambda*g[x,y,z];
k1=F[x,y,z,lambda];
J[x_,y_,z_,lambda_]={∂
x
k1,∂
y
k1,∂
z
k1};
H[x_,y_,z_,lambda_]={{∂
x,x
k1,∂
x,y
k1,∂
x,z
k1},
{∂
y,x
k1,∂
y,y
k1,∂
y,z
k1},{∂
z,x
k1,∂
z,y
k1,∂
z,z
k1}};
Resolvemos el sistema de Lagrange
9.4 Extremos condicionados. 79
In[47]:=
pcrit=Solve[{J[x,y,z,lambda]==0,
g[x,y,z]==0},{x,y,z,lambda}]
Out[47]=
{{x ->-(2/3), y ->-(2/3), z ->(1/3),
lambda ->-(2/3)}}
y estudiemos el hessiano de la función auxiliar en el espacio tangente a la superficie. Primero cal-
culamos una base de dicho tangente con el comando NullSpace:
In[48]:=
k2=g[x,y,z];
G[x_,y_,z_]={{∂
x
k2,∂
y
k2,∂
z
k2}};
nucleo=NullSpace[G[x,y,z]/.
pcrit[[1]]]
Out[48]=
{{1, 0,2}, {-1, 1, 0}}
Ahora calculamos la matriz hessiana restringida al tangente
In[49]:=
M=nucleo.
(H[x,y,z,lambda]/.pcrit[[1]]).
Transpose[nucleo]
Out[49]=
{{10, -2}, {-2, 4}}
y estudiamos si es definida mediante sus valores propios
In[50]:=
N[Eigenvalues[M]]
Out[50]=
{3.39445, 10.6056}
Como ambos son positivos, el único punto crítico calculado es un mínimo condicionado, con valor
In[51]:=
f[x,y,z]/.pcrit
Out[51]=
{1}
Ejercicio 1: Calcular los extremos condicionados en los siguientes casos:
80 Extremos relativos y condicionados
1. f(x, y) = x
2
−xy +y
2
condicionados a x
2
+y
2
−4 = 0.
2. f(x, y) = x
3
+xy
2
condicionados a xy = 1.
3. f(x, y, z) = xyz condicionados a x
2
+y
2
+z
2
= 1.
Ejercicio 2:
1. Hallar la mínima distancia de (0, 0) a x
2
−y
2
= 1.
2. Entre todos los ortoedros de volumen 1, determinar el que tiene superficie lateral mínima.
3. Calcular las dimensiones de un ortoedro de superficie lateral 2, para que su volumen sea
máximo
4. Se quiere construir un canal cuya sección sea un trapecio isósceles de área dada S. Calcular la
profundidad del canal y el ángulo que deben formar las paredes con la horizontal para que la
superficie mojada sea mínima. (Sol: se trata de la mitad de un hexágono regular)
CAPÍTULO 10
Integrales múltiples
Ya conocemos el comando Integrate para realizar integrales de funciones de una variable y,
como podrás imaginar por lo visto hasta ahora, pasar a varias variables sólo será cuestión de poner
algunas variables más y alguna coma. En general, la principal diferencia entre una y varias variables
no es tanto la función a integrar como el recinto de integración (por ejemplo, no hay una manera
directa de decirle a Mathematica que queremos integrar en un círculo). Veremos en esta práctica
como se pueden escribir los recintos de integración en Mathematica , aprovechando para ello las
capacidades gráficas del programa.
Expondremos sólo el caso de dos variables; para integrales triples los comandos serán totalmente
análogos.
Básicamente sólo sabemos calcular la integral de una función f(x, y) en recintos de uno de los
siguientes tipos:
A = {(x, y) ∈ R
2
: a ≤ x ≤ b, g
1
(x) ≤ y ≤ g
2
(x)} (10.1)
o
B = {(x, y) ∈ R
2
: a ≤ y ≤ b, h
1
(y) ≤ x ≤ h
2
(y)} (10.2)
Las correspondientes integrales serían, vía el teorema de Fubini,

A
f(x, y) d(x,y) =

b
a

g
2
(x)
g
1
(x)
f(x, y) dy
¸
dx
y

B
f(x, y) d(x,y) =

b
a

h
2
(x)
h
1
(x)
f(x, y) dx
¸
dy
La orden para calcular el valor de una integral doble es Integrate o, en caso de que sólo nos
interese una aproximación numérica, NIntegrate. Dado que el comando Integrate intenta calcu-
lar una primitiva y después evaluar en los extremos de integración, es más lento que el comando
NIntegrate. La orden completa es
82 Integrales múltiples
Integrate[función,{x,a,b},{y,c,d}]
y lo mismo para NIntegrate.
El caso más fácil se presenta cuando integramos en rectángulos. En este caso las funciones g
i
o
h
i
son constantes. Por ejemplo, si queremos calcular la integral de f(x, y) = x
2
+y
2
en [0, 2]×[1, 5]
tendríamos que hacer lo siguiente:
In[1]:=
Integrate[x
2
+ y
2
,{x,0,2},{y,1,5}]
Out[1]=
280
3
Pasemos a integrales un poco más complicadas. Supongamos que queremos integrar la función
f(x, y) = x en el conjunto
A = {(x, y) ∈ R
2
: x
2
+y
2
≤ 1, x ≥ 0, y ≥ 0}.
El primer paso es intentar averiguar cómo es el conjunto, para lo que nos haría falta dibujar x
2
+y
2
=
1. Para ello, necesitamos un paquete de Mathematica para dibujar curvas que vienen dadas por una
ecuación (llamada “ecuación implícita”). La orden para cargar este paquete extra es:
In[2]:=
<<Graphics`ImplicitPlot`
(observa que no produce ninguna salida). Ahora ya podemos pedir que nos pinte x
2
+y
2
= 1 para
x ∈ [0, 1]. La orden es
ImplicitPlot[ecuación,{x,a,b}]
donde a y b representan el rango de variación de la variable x, rango que normalmente tendremos
que calcular “a ojo”. En nuestro caso
In[3]:=
ImplicitPlot[x
2
+y
2
==1,{x,0,1}]
0.2 0.4 0.6 0.8 1
-1
-0.5
0.5
1
Out[3]= - Graphics -
83
Cómo se puede ver, Mathematica dibuja la circunferencia para “y” positivo y negativo, en cambio
sólo nos interesa la parte del primer cuadrante. Para representar esta parte podemos restringir el
rango de la imagen con la opción PlotRange (la orden ImplicitPlot tiene básicamente las mismas
opciones que la orden Plot).
In[4]:=
ImplicitPlot[x
2
+y
2
==1,{x,0,1},
PlotRange->{0,1}]
0.2 0.4 0.6 0.8 1
0.2
0.4
0.6
0.8
1
Out[4]= - Graphics -
Después de ver el conjunto A donde estamos integrando, es claro cómo podemos poner una
variable en función de la otra. Por ejemplo, si ponemos y en función de x, para un valor concreto
de x entre 0 y 1, y varía entre 0 y

1 −x
2
. Podemos calcular ahora el valor de la integral:
In[5]:=
Integrate[x,{x,0,1},{y,0,Sqrt[1-x
2
]}]
Out[5]=
1
3
Como se puede observar el orden para evaluar la integral es de derecha a izquierda, así que si y
depende de x, el rango de x va primero.
Observarás que no hemos cambiado a coordenadas polares. Para integrales en varias variables,
interesa cambiar de variable cuando el dominio o la función son complicados. En el primer caso,
si no podemos escribir el dominio de una las formas (1) o (2) tendremos que cambiar de variable
nosotros (Mathematica no lo hace automáticamente). El caso de funciones complicadas no nos debe
preocupar, pues Mathematica se encarga de resolver la integral en la inmensa mayoría de los casos, y
si no se puede resolver directamente, siempre queda la posibilidad de aproximar el valor de integral.
Veamos un par de ejemplos:
Ejemplo 1. Calcular la integral de la función f(x, y) = e
x/y
, en el conjunto A = {(x, y) ∈ R
2
: 0 ≤
y
3
≤ x ≤ y
2
}.
Estamos en el caso (2). Tenemos la variable x en función de y. Vamos primero a ver los puntos
de corte de las ecuaciones y
3
= x, y
2
= x y luego las dibujaremos para hacernos una idea de cuál
es el dominio de integración:
84 Integrales múltiples
In[6]:=
Needs["Graphics‘ImplicitPlot‘"]
In[7]:=
Solve[y
3
== y
2
,y]
Out[7]=
{{y->0},{y->0},{y->1}}
In[8]:=
graf1=ImplicitPlot[y
3
==x,{x,0,1},
PlotStyle->RGBColor[1,0,0]]
0.2 0.4 0.6 0.8 1
0.2
0.4
0.6
0.8
1
In[9]:=
graf2=ImplicitPlot[y
2
==x,{x,0,1},
PlotStyle->RGBColor[0,1,0]]
0.2 0.4 0.6 0.8 1
-1
-0.5
0.5
1
In[10]:=
Show[graf1,graf2]
0.2 0.4 0.6 0.8 1
-1
-0.5
0.5
1
85
De lo hecho se deduce que la integral que queremos calcular es
In[11]:=
Integrate[Exp[x/y],{y,0,1},{x,y
3
, y
2
}]
Out[11]=
3
2

E
2
Ejemplo 2. Calcular la integral de la función
f(x, y) = x
2
+y
2
en el conjunto
A = {(x, y) ∈ R
2
: (x
2
+y
2
)
2
≤ 4(x
2
−y
2
), x ≥ 0}.
En este caso la función es relativamente sencilla pero el dominio no lo es tanto. No hay una
manera fácil de hacer la integral directamente, así que es mejor cambiar a coordenadas polares y
luego plantear la integral. Dibujemos el recinto:
In[12]:=
ImplicitPlot[(x
2
+y
2
)
2
==4(x
2
-y
2
),{x,0,3}]
0.5 1 1.5 2
-0.6
-0.4
-0.2
0.2
0.4
0.6
Las condiciones del dominio escritas en coordenadas polares son:
ρ
4
≤ 4ρ
2
(cos
2
(θ) −sen
2
(θ)), ρ cos θ ≥ 0
Después de operar, nos quedaría
ρ ≤ 2

cos
2
(θ) −sen
2
(θ) y θ ∈ [−π/4, π/4]
Ahora ya estamos en una de los casos conocidos y podemos plantear la integral, sin olvidar el
cambio a coordenadas polares de la función y la “derivada” del cambio (en este caso ρ):
In[13]:=
Integrate[ρ ∗ρ
2
,{t, -Pi/4, Pi/4},
{ρ,0,2 Sqrt[Cos[t]
2
-Sin[t]
2
]}]
Out[13]=
π
86 Integrales múltiples
Ejercicio 1. Calcular la integral de las siguientes funciones en los recintos determinados por las
siguientes ecuaciones:
1. f(x, y) =

4x
2
−y
2
, x = 1, y = 0, y = x
2. f(x, y) = xe
−x
2
/y
, x = 0, y = 1, y = x
2
3. f(x, y) = y, y > 0, x
2
+y
2
= a
2
, y
2
= 2ax, x = 0
Ejercicio 2. Calcular el volumen del conjunto A en cada uno de los siguientes casos:
1. A =
¸
(x, y, z) ∈ R
3
: x
2
+y
2
≤ z ≤

x
2
+y
2
¸
2. A =

(x, y, z) ∈ R
3
:
x
2
a
2
+
y
2
b
2
≤ 1, 0 ≤ z ≤

x
2
a
2
+
y
2
b
2
¸
3. A =
¸
(x, y, z) ∈ R
3
: 0 ≤ z ≤ x
2
+y
2
, x +y ≤ 1, x, y ≥ 0
¸
4. A =
¸
(x, y, z) ∈ R
3
: 0 ≤ z ≤

x
2
+y
2
, x
2
+y
2
≤ 2y
¸
5. A =
¸
(x, y, z) ∈ R
3
: 0 ≤ z ≤ 4 −y
2
, 0 ≤ x ≤ 6
¸
6. A =
¸
(x, y, z) ∈ R
3
:

x ≤ y ≤ 2

x, 0 ≤ z ≤ 9 −x
¸
7. A =
¸
(x, y, z) ∈ R
3
: x
2
+y
2
≤ z
2
, x
2
+y
2
+z
2
≤ 2z
¸
Ejercicio 3. Calcular el volumen limitado superiormente por el cono 4x
2
+ 4y
2
− z
2
= 0, infe-
riormente por el plano z = 0 y lateralmente por el cilindro x
2
+(y −2)
2
= 4.
Ejercicio 4. Calcular el volumen de los sólidos siguientes:
1. Intersección de los cilindros x
2
+y
2
= r
2
, y
2
+z
2
= r
2
.
2. El limitado por el plano z = 0, el cilindro x
2
+y
2
= 2ax (a > 0) y el cono x
2
+y
2
= z
2
.
CAPÍTULO 11
Números complejos
11.1. Operaciones básicas
En esta práctica vamos a recordar algunas de las propiedades básicas de los números complejos
y de la funciones de variable compleja.
En primer lugar hay que decir que Mathematica trabaja con números complejos siempre. Recor-
demos, por ejemplo que cuando intentábamos calcular las raíces de un polinomio nos daba todas,
ya fueran reales o complejas.
Escribiremos los números complejos usando la letra I o usando la paleta. Obsérvese que la I es
mayúscula. Veamos algunas de las operaciones elementales:
In[1]:=
z=3+4I
Re[z]
Im[z]
Out[1]=
3+4I
Out[2]= 3
Out[3]= 4
Ya puedes imaginar que Re e Im indican la parte real y la parte imaginaria del número complejo
dado. Hay que tener cuidado con lo que hemos mencionado antes: Mathematica trabaja con números
complejos por defecto. Si probamos con variables esto puede dar algunos “problemas”:
88 Números complejos
In[4]:=
Re[a+b I]
Out[4]=
-Im[b]+Re[a]
Lo que ocurre es que Mathematica piensa que a y b son números complejos. Podemos imponer
que las variables sean reales con la orden ComplexExpand:
In[5]:=
ComplexExpand[Re[a+b I]]
Out[5]=
a
Además podemos calcular módulos, argumentos, …
In[6]:=
Abs[-3]
Out[6]=
3
In[7]:=
Abs[1+I]
Out[7]=

2
In[8]:=
Arg[1-I]
Out[8]=

π
4
In[9]:=
Conjugate[2+I]
Out[9]=
2-I
11.2 Funciones de variable compleja 89
Ejercicio 1.Efectuar las operaciones indicadas:
1.
2 −3i
4 −i
2.
(2 +i)(3 −2i)(1 +2i)
(1 −i)
2
3. (2i −1)
2
¸
4
1 −i
+
2 −i
1 +i

4.
i
4
+i
9
+i
16
2 −i
5
+i
10
−i
15
Ejercicio 2. Si z
1
= 1 − i, z
2
= −2 + 4i, y
z
3
=

3−2i, calcular las siguientes expresiones:
1. z
2
1
+2z
1
−3
2. |2z
2
−3z
1
|
2
3. (z
3
−z
3
)
5
4. |z
1
z
2
+z
2
z
1
|
5.
¸
¸
¸
¸
z
1
+z
2
+1
z
1
−z
2
+i
¸
¸
¸
¸
6. |z
2
1
+z
2
2
|
2
+|z
3
2
−z
2
2
|
2
Ejercicio 3. Calcular el módulo y el argumento de
los números complejos:
1. 1
2. i
3. −1
4. −i
5.

2
2
+i

2
2
Ejercicio 4. Expresar en forma polar los números
complejos:
1. 3+3i
2. −1 +

3i
3. -1
4. −2 −

3i
11.2. Funciones de variable compleja
Recordemos que podemos ver los números complejos como pares de números reales y por tanto
cualquier función f : C → C como una función de R
2
en R
2
. Por tanto podemos definir funciones
complejas de la siguiente forma:
In[10]:=
f[x_,y_]=(x+I y)
2
Out[10]=
(x+Iy)
2
In[11]:=

x
f[x, y]
Out[11]=
2(x+Iy)
Teniendo esto en cuenta es fácil comprobar si una función verifica por ejemplo las ecuaciones
de Cauchy-Riemann.
90 Números complejos
11.2.1. Gráficos en “cuatro” dimensiones
La función exponencial compleja estaba definida de la siguiente forma:
e
z
= e
x
(cos(y) +i sen(y)), donde z = x +iy
De la definición se deduce que es una función periódica con periodo 2πi, no toma nunca el valor
cero y toma todos los demás infinitas veces. Además si fijamos la parte imaginaria y variamos la parte
real obtenemos una recta que pasa por el origen y la parte imaginaria nos indica la pendiente. Al
revés, si fijamos la parte real y movemos la parte imaginaria obtenemos una circunferencia centrada
en el origen cuyo radio es e
x
.
Si quisiéramos dibujar una función compleja de variable compleja como esta necesitaríamos
4 dimensiones. Lo que se puede hacer es representar lo que acabamos de comentar: en que se
transforman rectas paralelas a alguno de los dos ejes. Para esto necesitamos un paquete extra
In[12]:=
<<Graphics`ComplexMap`
In[13]:=
CartesianMap[Exp,{0,1},{-2.5,2.5},Frame->True]
-2 -1 0 1 2
-2
-1
0
1
2
Out[14]= - Graphics -
Comentemos un momento que es lo que pasa aquí. La orden CartesianMap representa en que
se transforman rectas paralelas a los ejes, en este caso la primera coordenada varía entre 0 y 1 y la
segunda entre -2.5 y 2.5, mediante la función dada (en este caso la exponencial). También podemos
trabajar en coordenadas polares con la orden PolarMap. En ese caso, además de la función, tenemos
que decir dónde varía el módulo y el argumento.
APÉNDICE A
Avisos y mensajes de error
In[1]:=
C=3
Set::wrsym: Symbol C is Protected
La letra C no se puede usar como nombre de variable. Mathematica ya lo usa para algo.
In[2]:=
Plot[Log[x],{ x,-2,2}]
Plot::"plnr":Log[x] is not a machine-size real
number at x = -2...
La función (en este caso logaritmo neperiano) no está definida en ese punto. Probablemente estemos inten-
tando dibujar una función fuera de su dominio o, si la función la hemos definido nosotros, hay algún error
en la definición de la función.
In[3]:=
Plot[x
2
+1,{x,o,10}]
Plot::"plln": Limiting value o in x, o, 2 Pi is
not a machine-size real number.
Has escrito la letra “o” en lugar de 0.
In[4]:=
Plot[sin[x],{x,0,Pi}]
General::"spell": "Possible spelling error: new
symbol name sin is similar to existing symbol
Sin.
92 Avisos y mensajes de error
La función sin no está definida. La función seno es Sin.
In[5]:=
Plot[Sin[x],{x,-Pi,Pi},
PlotStyle->RGBColor[1,0,0]
Syntax::"bktmcp":"Expression "Plot[ « 1» "has no
closing "]”.
Falta cerrar un corchete.
In[6]:=
Solve[Cos[x]==0,x
Solve::ifun: Inverse functions are being used by
Solve, so some solutions may not be found.
Out[6]=
{x− > −
π
2
}, {x− >
π
2
}}
Para resolver la ecuación cos(x) = 0 tiene que usar la funcion arccos(su inversa) y Mathematica avisa de que
es posible que falten soluciones
In[7]:=
NIntegrate[Cos[x],{x,0,Pi}]
NIntegrate::"ploss": Numerical integration
stopping due to loss of precision. Achieved
neither the requested PrecisionGoal nor
AccuracyGoal; suspect highly oscillatory
integrand, or the true value of the integral
is 0. If your integrand is oscillatory try using
the option Method->Oscillatory in NIntegrate.
Mathematica no puede asegurar que el valor de la integral que da sea exacto, probablemente debido a que la
función oscila.
In[8]:=
FindRoot[{x*y==1,x
2
+y
2
=1},{x,0},{y,0}]
FindRoot::jsing: Encountered a singular Jacobian
at the point {x, y} = {0.,0.}. Try perturbing
the initial point(s).
No se puede tomar el punto (0, 0) como condición inicial. Intenta cambiar el punto por otro.
93
In[9]:=
FindRoot[5 x
2
+3,{x,1}]
FindRoot::cvnwt: Newton’s method failed to
converge to the prescribed accuracy after 15
iterations
Out[9]=
{x->-0.6}
Aunque en este caso la función no se anula nunca, Mathematica está avisando que el comando FindRoot
no puede afirmar que el resultado que presenta sea un cero de la función.
In[10]:=
A={{1,2,3},{4,5,6},{1,3,2}};
B={{4,3},{7,3},{1,0}};
A.B
Dot::dotsh: Tensors {{1, 2, 3}, {4, 5, 6}, {1,
3, 2}} and {{4, 3}, {7, 3}} have incompatible
shapes.
No se puede multiplicar una matriz 3x3 y una matriz 2x2.
In[11]:=
Integrate[1/x3,{x,-1,1}]
Integrate::idiv: Integral of
1
x
3
does not
converge on{-1,1}.
La función
1
x
3
no es impropiamente integrable en el intervalo [−1, 1].
APÉNDICE B
Glosario
B.1. Algunas funciones
Log[b,x] logaritmo de x en base b
Log[x] logaritmo neperiano
Exp[x] exponencial de base e
Sqrt[x] raíz cuadrada
Sin[x] seno
Cos[x] coseno
Tan[x] tangente
Csc[x] cosecante
Sec[x] secante
Cot[x] cotangente
ArcSin[x] arcoseno
ArcCos[x] arcocoseno
ArcTan[x] arcotangente
ArcCsc[x] arcocosecante
ArcCot[x] arcocotangente
Sinh[x] seno hiperbólico
Cosh[x] coseno hiperbólico
Tanh[x] tangente hiperbólica
Sech[x] secante hiperbólica
Coth[x] cotangente hiperbólica
n! factorial de n
Binomial[n,m]

n
m

Abs[x] valor absoluto de x
Floor[x] parte entera de x
B.2. Comandos usuales
Expand[expresión] desarrolla una expresión
algebraica
Factor[expresión] factoriza una expresión
algebraica
FullSimplify[expresión] simplifica la ex-
presión
TrigExpand[expresión] desarrolla una ex-
presión con términos trigonométricos
TrigFactor[expresión] factoriza una expre-
sión con términos trigonométricos
Simplify[expresión] simplifica la expresión
N[expresión] da un valor numérico de la ex-
presión
B.3. Números complejos
Abs[z] módulo
Arg[z] argumento principal
ComplexExpand
Conjugate[z] conjugado
Im[z] parte imaginaria
Re[z] parte real
B.4 Matrices 95
B.4. Matrices
Det[matriz] determinante
DiagonalMatrix[{a,b,c,...}] matriz diago-
nal
Eigenvalues[matriz] valores propios
Eigenvectors[matriz] vectores propios
Eigensystem[matriz] valores y vectores pro-
pios
IdentityMatrix[n] matriz identidad de or-
den n
Inverse[matriz] inversa de la matriz dada
Minors[matriz]
RowReduce[matriz]
Table[expresión,{variable,índice}] ge-
nera una lista usando la expresión dada
Transpose[matriz] matriz transpuesta
B.5. Resolución de ecuaciones
FindRoot[función,{x,x
0
}] encuentra un ce-
ro de la función tomando como punto inicial
x = x
0
LinearSolve[matriz A, vector b] resuel-
ve el sistema lineal Ax = b.
NSolve[{ecuación1, ecuación2,...},
{variable1, variable2,...}]
NullSpace[matriz] calcula una base del nú-
cleo de la matriz
Reduce[{ecuación1, ecuación2,...},
{variable1, variable2,...}] simplifica el
sistema ecuaciones
Solve[{ecuación1, ecuación2,...},
{variable1, variable2,...}] calcula las
soluciones genéricas del sistema de ecuaciones
B.6. Gráficos
Plot[f[x],{x,a,b}] gráfica de f en [a, b]
ParametricPlot
Plot3D[f[x,y],{x,a,b},{y,c,d}] gráfica
de f en [a, b] ×[c, d]
ParametricPlot3D
SurfaceOfRevolution
PlotGradientField
PlotHamiltonianField
B.7. Cálculo
D[función,{variable, n}] derivada de or-
den n de la función
Integrate[función,{variable,a,b}] inte-
gral entre a y b de la función
Limit[función,{x->x
0
}] calcular el límite
cuando x tiende a x
0
de la función
NIntegrate[función, {variable,a,b}] in-
tegral entre a y b de la función
Series[función,{x,a,n}] desarrollo de Tay-
lor de orden n en el punto a
B.8. Otros
Clear[variable1,variable2,...] olvida el
valor de las variables
Clear[“Global

*”] olvida el valor de todas las
variables
Infinity infinito

Índice general

1. Primeros pasos 1.1. Cálculo simbólico con Mathematica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1. Polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2. Expresiones trigonométricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Cómo “dibujar” con Mathematica 2.1. La orden Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1. Opciones de Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Gráficos en coordenadas paramétricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1. Algunas curvas planas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3. El comando Show . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 10 12 15 17 17 19 20 21 22 22 24 30 30 32 34 35 36 38 40 42 44 44 45 47 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3. Vectores y matrices 4. Resolución de ecuaciones 4.1. Ecuaciones “sencillas” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Sistemas de ecuaciones lineales 4.3. Resolución de sistemas de ecuaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4. Otros métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.1. Breves conceptos de programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.2. Método de Bisección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.3. Método de Newton-Raphson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5. El comando FindRoot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. Extremos de funciones de una variable 5.1. Continuidad y límites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. Máximos y mínimos relativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6. Fórmula de Taylor

ÍNDICE GENERAL

3

7. Integración 7.1. Integrales definidas e indefinidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2. Longitudes, áreas y volúmenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3. Integrales impropias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8. Gráficos en 3D 8.1. El comando Plot3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.1. Opciones del comando Plot3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2. Gráficos de contorno. Curvas de nivel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3. Gráficos paramétricos. Curvas y superficies. . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3.1. Superficies de revolución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9. Extremos relativos y condicionados 9.1. Derivadas parciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2. Representación gráfica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.1. “Campos” de vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3. Extremos relativos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.4. Extremos condicionados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.Integrales múltiples 11.Números complejos 11.1.Operaciones básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.Funciones de variable compleja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2.1.Gráficos en “cuatro” dimensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A. Avisos y mensajes de error B. Glosario B.1. Algunas funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.2. Comandos usuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.3. Números complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.4. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.5. Resolución de ecuaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.6. Gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.7. Cálculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.8. Otros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

52 52 54 55 57 57 58 59 60 61 65 65 66 69 71 75 81 87 87 89 90 91 94 94 94 94 95 95 95 95 95

debajo tienes una ventana vacía que es donde trabajaremos. Para efectuar cálculos numéricos. con la salvedad de que con el Mathematica puedes obtener una precisión que no tienen las calculadoras normales. y recuerda que siempre que quieras obtener el resultado. con el ratón puedes pulsar sobre los números que habías escrito. el programa Mathematica funciona como una simple calculadora.. deberás . A continuación. y cambiarlos. y a la derecha tenemos una “paleta” con operaciones que ya iremos comentando con más detalle.. Arriba tienes la barra de Menú. Observarás que en la pantalla aparece lo siguiente: ↑ o Enter en In[1]:= 3+2 Out[1]= 5 No intentes escribir los símbolos “In[1]:=” y “Out[1]=”. Una vez iniciada la ejecución del programa. al principio. cosas muy simples que nos ayudarán a conocer los principales comandos y cómo se deben usar. No importa si dicho dígito de control no coincide con el que aparezca en este texto. Una vez que hemos empezado el programa nos encontramos delante de una pantalla más o menos como la de la figura. pulsa con el botón izquierdo del ratón en la ventana principal y escribe: 3+2. y luego pulsa el teclado numérico. ya que éstos los escribe el programa para llevar un control sobre las operaciones que va efectuando.CAPÍTULO 1 Primeros pasos Comenzaremos a familiarizarnos con el Mathematica haciendo. o añadir nuevos sumandos. etc.

Si pulsas en el primer botón de la paleta te aparecerá en la ventana de comandos lo siguiente: Puedes teclear directamente la base y. In[2]:= 3 2 Out[2]= 6 Para efectuar potencias. entre otras cosas. Observarás que en las sucesivas operaciones el ordenador responde más rápido que en la primera. comentemos que la paleta se puede usar. el programa debió leer del disco las “reglas de cálculo” (esto es. el tabulador te lleva al exponente. con lo que quedará constancia escrita de las operaciones que vas haciendo. y basta con poner un espacio entre los factores. Para multiplicar números no es necesario escribir el símbolo de la multiplicación (opcionalmente “*”). 23 Out[4]= 8 Puedes hacer operaciones con fracciones. y obtener la fracción resultante.. cuando termines. In[5]:= 2+3/13 Out[5]= 29 13 . y dichas reglas permanecen en su memoria a partir de ese momento.. puedes escribir In[3]:= 3 85 Out[3]= 35917545547686059365808220080151141317043 Ya que lo sabemos hacer directamente. para escribir potencias. También podrás escribir los siguientes comandos debajo del resultado anterior. el kernel del programa). Una vez escrito pulsa como siempre ↑ algo así: In[4]:= y obtendrás el resultado. ya que al efectuar la primera operación.5 pulsar ↑ .

y encima es hasta verdad... para obtener la raíz de un número se usa el comando Sqrt o utilizar la paleta (observa que la “S” es mayúscula.40] Out[7]= 2.2307692307692307692307692307692307692308 ¿por qué el último dígito del comando anterior fue un 7 y no un 6? y ¿por qué ahora el último dígito ha sido un 8 y no un 7? Si quieres. puedes poner dos mil decimales. pues vale..6 Primeros pasos (¿Por qué el resultado no ha sido 5 13 ?) Si lo prefieres..15] Out[9]= 2. Sigamos probando. Haz la prueba.. y el número debe ir entre corchetes): In[8]:= Sqrt[5] Out[8]= √ 5 .. elevando dicho número al exponente 1 2 In[10]:= 5 (1/2) Out[10]= √ 5 .... puedes aproximar el resultado mediante unos cuantos dígitos de su expresión decimal: In[6]:= N[2+3/13] Out[6]= 2.. y si quieres que el Mathematica calcule 40 dígitos (incluyendo la parte entera).. pero si quieres la expresión decimal con quince dígitos. In[9]:= N[Sqrt[5].23606797749979 También puedes hacer la raíz cuadrada de un número.. In[7]:= N[2+3/13.23077 .

In[12]:= Sqrt[5 (1/3)] Out[12]= 1/6 5 Como ya habrás notado. Mathematica también conoce las reglas de cálculo para operar con ellas: In[11]:= Sqrt[2] Sqrt[3] Out[11]= √ 6 .o bien. In[13]:= Pi Out[13]= π . y finalmente ↑ para . y también Mathematica lo conoce.ya. 86 con doscientas cifras decimales?.. Además de saber calcular las raíces... Ahora vamos a trabajar con variables.. raíces de cualquier orden y algunas de las constantes más usuales como el número e o π .14159 Es probable que alguno de nosotros conozca más dígitos. en la paleta tienes botones que permiten escribir fracciones. Prueba el siguiente comando (ten en cuenta que para cambiar de línea dentro de un comando es necesario pulsar sólo ejecutar todo el comando) .. pero Mathematica es capaz de decirnos los primeros cinco mil dígitos de π ..... parece más interesante así: In[14]:= N[Pi] Out[14]= 3..7 √ 7 ¿Podrías ahora obtener una aproximación decimal de Inténtalo. Prueba. Se supone que conocemos aproximadamente el valor del número π .

N[Sqrt[a+b]. b=4. Si queremos el resultado de la salida n (Out[n]).b] Out[16]= 4. podemos obtenerlo con %n. Por ejemplo. a/b Out[15]= 5 Observa que las líneas de comando que terminan en “punto y coma” no producen ninguna respuesta del Mathematica . In[17]:= %15 Out[17]= 5 además podemos usar esa información como cualquier otro dato In[18]:= %15 2 Out[18]= 25 Para obtener el resultado inmediatamente anterior usamos % sin ningún número. b=12.8 Primeros pasos In[15]:= a=20. Razona la respuesta que da el Mathematica al siguiente comando: In[16]:= a=5. In[19]:= % Out[19]= 25 . Esto se consigue con la orden %. Prueba a quitar (por ejemplo) el punto y coma de la primera línea en el ejemplo anterior.12310562562 Con Mathematica podemos usar el resultado de una operación anterior sin necesidad de teclearlo. si queremos el resultado de la operación número 15.

38906 Otra forma de calcular la función exponencial aplicada a x es elevando E a x. Los nombres de estas funciones suelen ser su abreviatura en inglés. si lo que nos interesa es su expresión decimal In[24]:= N[Log[20]] Out[24]= 2. cualquier comando de Mathematica se escribe con la primera letra en mayúscula..99573 .9 % % para el penúltimo. ¿Podrías calcular así e5 ? ¿y su primera cifra decimal? Haz lo mismo usando la función Exp y comprueba que da el mismo resultado.ya empezamos. Bueno. Además de las operaciones elementales que hemos visto. • Función logaritmo neperiano: Log[x] In[23]:= Log[20] Out[23]= Log[20] . En general. que algunas veces difiere bastante de su nombre castellano... Mathematica tiene definidas la mayor parte de las funciones elementales.. Por ejemplo In[20]:= Sqrt[4] Out[20]= 2 Algunos ejemplos de funciones con Mathematica son: • Función exponencial: Exp[x] In[21]:= Exp[2] Out[21]= E2 (para Mathematica el número e se escribe E) y si queremos su expresión decimal In[22]:= N[Exp[2]] Out[22]= 7. etc...

Cálculo simbólico con Mathematica Hasta ahora sólo hemos usado el Mathematica como una calculadora muy potente. entre otras muchas cosas que veremos posteriormente. la principal utilidad de Mathematica es el cálculo simbólico. el logaritmo decimal de 100 In[25]:= Log[10. Mathematica no lo entenderá. ArcCos[x] y ArcTan[x]. coseno.x]. escríbelo así. Entonces. Por ejemplo. tangente) In[26]:= Sin[Pi/4] Out[26]= 1 √ 2 También podemos usar las funciones trigonométricas inversas. esto es. Por ejemplo. ¿qué puede hacer Mathematica que sea imposible con una calculadora? Bueno. Cos[x].1.100] Out[25]= 2 ¿Cuánto valdrá el logaritmo en base 2 de 64? Compruébalo.. ¿Cuánto debe valer Log[Exp[7]]? ¿Y Exp[Log[7]]? Pide a Mathematica que los calcule.. el trabajar con expresiones algebraicas (expresiones donde intervienen variables. 1. • Funciones trigonométricas: Sin[x]. Tan[x] (seno.10 Primeros pasos En Mathematica . Si queremos calcular el logaritmo en base b de x usamos Log[b. con lo que si ponemos . los logaritmos serán neperianos. constantes. el programa sabe que la función Log es inversa de Exp. arcocoseno y arcotangente. pero prácticamente todo lo que hemos aprendido puede hacerse sin dificultad con una calculadora convencional. y no tienen porqué tener un valor numérico concreto) en vez de con números. el arcoseno. In[27]:= ArcTan[1] Out[27]= π 4 Prueba a componer dos o más de todas estas funciones y a hacer cálculos con ellas. Observa que la cuarta letra de cada comando está en mayúscula. si no decimos lo contrario. si no. es decir. que se escriben respectivamente ArcSin[x].

que siempre indica el número e y no puede usarse como variable ni constante. es decir. c. con la orden Clear[nombre variable]. z.1. d. las letras x. y... Sin embargo. si no se le ha asignado un valor a una letra. b. ésta será una variable. Si usamos Clear . Si le hemos asignado un valor a una letra. Un ejemplo: In[4]:= a=7 Out[4]= 7 In[5]:= a2 Out[5]= 49 es decir. ¿Podemos quitar el valor a una constante? Sí. le damos a la letra a el valor 7 y Mathematica la sustituye siempre por ese valor. en este caso. ¿Cómo podemos hacer que Mathematica diferencie entre constantes (valor fijo) y variables (valor indeterminado)? Para el programa... tendrá siempre un valor concreto. Hay excepciones como la letra E. sin saber el valor de la variable x el programa es capaz de trabajar simbólicamente con ella. a es una constante. a.1 Cálculo simbólico con Mathematica 11 In[1]:= Exp[Log[x]] Out[1]= x es decir. ésta será una constante. pueden usarse sin problemas como nombres de constantes y variables. Más ejemplos In[2]:= Exp[x]Exp[y] Out[2]= Ex+y In[3]:= a+2a+5b Out[3]= 3 a + 5 b Para Mathematica cualquier letra o combinación de letras puede ser una variable o una constante.

funciones racionales. esto es.12 Primeros pasos In[6]:= Clear[a] (observa que esta entrada no produce ninguna salida) In[7]:= a2 Out[7]= a2 ahora. Polinomios Si introducimos el siguiente polinomio In[8]:= x2 + 2 x + 1 Out[8]= 1 + 2 x + x2 Mathematica no intenta simplificarlo. Si queremos que todas las constantes que hayamos definido pierdan su valor concreto (que pasen a ser variables) usaremos Clear["Global *"] (el acento que hay que usar es el que está a la derecha de la p ).1. expresiones trigonométricas. Probemos ahora a restar las dos expresiones: In[10]:= %% -% Out[10]= 1 + 2 x + x2 . a es una variable.(1 + x)2 . 1.. no tiene un valor concreto y Mathematica debe tratarla simbólicamente.. Vamos a practicar con comandos de Mathematica para manejar expresiones algebraicas: polinomios. Si escribimos In[9]:= (x+1)2 Out[9]= (1+x)2 Mathematica no desarrolla el cuadrado.1. ecuaciones.

según convenga: .5 x y 2 + 2 y 3 In[13]:= Factor[ %] Out[13]= (x .y) (x + y) In[14]:= Expand[1+2x+x2 .5 x 3 + x5 también con varias variables In[12]:= Expand[(2y-x)(-3x+y)(x+y)] Out[12]= 3 x3 . sino que debemos decirle que lo haga.4 x 2 y .(1+x)2 ] Out[15]= 0 La orden Simplify sirve para simplificar una expresión. ¿Cómo lo hacemos? Con las órdenes Expand[expresión] (desarrollar).1 Cálculo simbólico con Mathematica 13 Mathematica no se da cuenta de que la expresión vale cero. Esto es porque no factoriza ni desarrolla automáticamente.1.2 y) (3 x .(1+x)2 ] Out[14]= 0 In[15]:= Factor[1+2x+x2 . factorizando o no. Simplify[expresión] (simplificar) y Factor[expresión] (factorizar): In[11]:= Expand[(x-2)(x-1)x(x+1)(x+2)] Out[11]= 4 x .

pero hay que tener en cuenta que el tiempo para realizar los cálculos puede aumentar mucho. mostrando sólo algunos de los términos de mayor y menor grado In[20]:= Expand[(x+1)5 ] Out[20]= 1 + 5 x + 10 x2 + 10 x3 + 5 x4 + x5 In[21]:= Short[ %] Out[21]= 1 + 5 x + «3» + x5 . In[18]:= √ 3 Simplify[ 5 13 − 18] √ 13) (1/3) Out[18]= (-18 + 5 In[19]:= √ 3 FullSimplify[ 5 13 − 18] 1 2 (−3 Out[19]= + √ 13) El comando Short sirve para ver mejor polinomios muy grandes.14 Primeros pasos In[16]:= Simplify[1+x3 ] Out[16]= 1 + x3 In[17]:= Simplify[x2 +2x+1+(1+x)2 ] Out[17]= 2(1 + x)2 Hay veces que la expresión es “demasiado” complicada y Simplify no da ningún resultado práctico. En este caso se puede intentar usar la orden FullSimplify.

In[22]:= TrigExpand[Cos[α + β]] Out[22]= Cos[α] Cos[β]-Sin[α] Sin[β] In[23]:= TrigExpand[Sin[2ArcTan[t]]] Out[23]= 2t 1+t2 In[24]:= TrigExpand[Sin[x+3*y]+Cos[2* z] Sin[x-y]] Out[24]= Cos[y]3 Sin[x] + Cos[y] Cos[z]2 Sin[x] + 3 Cos[x] Cos[y]2 Sin[y] Cos[x] Cos[z]2 Sin[y] 3 Cos[y] Sin[x] Sin[y]2 Cos[x] Sin[y]3 Cos[y] Sin[x] Sin[z]2 + Cos[x] Sin[y] Sin[z]2 In[25]:= TrigExpand[8 Sin[2*x]2 Cos[x]3 ] Out[25]= 4Cos[x]3 .1 Cálculo simbólico con Mathematica 15 1.2. Por ejemplo. Expresiones trigonométricas Mathematica conoce las identidades trigonométricas y puede usarlas para simplificar expresiones en las que aparezcan dichas funciones. En lugar de Expand y Factor. utilizaremos las órdenes TrigExpand y TrigFactor.1.1.4 Cos[x]7 + 24 Cos[x]5 Sin[x]2 4Cos[x]3 Sin[x]4 .

16 Primeros pasos TrigExpand también trabaja con funciones hiperbólicas: In[26]:= TrigExpand[Sinh[2 x]3 ] Out[26]= − 3 Cosh[x] Sinh[x] + 2 3 2 Cosh[x]5 Sinh[x] + Cosh[x] Sinh[x]5 5 Cosh[x]3 Sinh[x]3 + 3 2 .

para nombrarlas.CAPÍTULO 2 Cómo “dibujar” con Mathematica 2. Siguiendo la costumbre usaremos las letras f . . etc. color. También se pueden representar funciones en coordenadas paramétricas e incluso se pueden realizar animaciones.1. Por ejemplo. Un primer paso antes de empezar a representar gráficamente una función es tener una manera cómoda de definirla. . g. No hay que olvidar este guión después de cada variable cuando estemos definiendo una función. Para definir la función sen(x) haremos lo siguiente In[1]:= f[x_]=Sin[x] Out[1]= Sin[x] Observa que se usan los corchetes para todo y que después de la variable x aparece _. . Es posible dibujar a la vez varias funciones y personalizar el resultado en cuanto a escalas. Una vez definida la función podemos evaluarla en un punto o representarla gráficamente. In[2]:= f[1] Out[2]= Sin[1] . La orden Plot Una de las grandes virtudes de Mathematica es lo fácil y completo que es su tratamiento de los gráficos para funciones de una y dos variables.

intenta dibujar la función tangente entre 0 y 4π : . f[x] Out[4]= 0 Observa que a la hora de evaluar una función que hayamos definido no se usa el “_”.18 Cómo “dibujar” con Mathematica o si queremos su valor numérico In[3]:= N[f[1]] Out[3]= 0. también se pueden definir funciones “a trozos”.opciones] Mathematica decide automáticamente cual es la escala más apropiada para que la gráfica se vea lo mejor posible. xmax }.f]. Para representar gráficamente una función de una variable. podemos poner In[5]:= Clear[x.xmin . t>0 && t<2 f[t_]:= -t+4 /. Pueden surgir problemas al definir una función si la variable que usamos tiene asignado un valor concreto. el comando que se utiliza es Plot[función. Por ejemplo. Por ejemplo: f[t_]:= t /. t<=0 || t>=2 (no produce ninguna salida) define la función   t f (t) = −t + 4  si 0 < t < 2 si t ≤ 0 ó t ≥ 2 Como has visto. Por ejemplo. Mathematica intentará dibujarla poniendo de manifiesto este hecho. hace falta escribir := para definir una función a trozos. El símbolo /. si queremos definir f (x) = ln(x). con lo que la función sería constante.841471 También podemos asignar un valor a la variable x y luego evaluar: In[4]:= x=0. f[x_]=Log[x] y la función queda bien definida aunque antes hubiésemos asignado un valor a x. los símbolos || y && son respectivamente o e y (suma y producto lógicos). en este caso. resolvemos el problema con la sentencia Clear que vimos en la practica pasada.{x. Por último. hace las veces de si (condicional). Si la función que pretendemos representar tiene alguna discontinuidad o no está definida en algún punto.

y usar después el nombre (Plot[f[x]. entre otras cosas. Opciones de Plot Cuando presentamos el comando Plot dijimos que podíamos poner “opciones”.{x. . f[x_]=Tan[x].número2} Sólo se presentan los valores de f (x) comprendidos entre número1 y número2. Si especificamos el valor 1 los dos ejes tendrán el mismo tamaño. en función del rango de variación de x.20}] PlotStyle Permite escoger.0.0.{x. podemos escribir directamente la función a representar “dentro” del comando Plot. El inconveniente que tiene hacerlo así es que cada vez que queramos trabajar con esa función tenemos que volver a escribirla.{x. veamos cuáles son algunas de ellas: AspectRatio–>número Determina la proporción entre los ejes de abscisas y ordenadas. PlotRange->{2. In[8]:= Plot[Tan[x].1.número3] Permite escoger un color en función de la cantidad de rojo (número1).1. donde los números pueden tomar cualquier valor entre 0 y 1.2. 2.1 La orden Plot 19 In[6]:= Plot[Tan[x].{x. Si no se especifica esta opción aparecen todos los valores posibles de f (x). siendo más conveniente ponerle nombre (p. 4Pi}] 30 20 10 2 -10 -20 -30 4 6 8 10 12 Out[6]= .4Pi}. verde (número2) y azul (número3).Graphics - Un comentario sobre lo que acabamos de hacer: como se puede ver.0.número2.AspectRatio->2] PlotRange–>{número1.0. In[7]:= Plot[Tan[x]. el color de la siguiente forma: RGBColor[número1.4Pi}]).4Pi}.e.

30}].1].0. Una de las formas de distinguirlas es dibujando cada una de un color diferente: Plot[{Sin[x].4Pi}.{x.g. 2.5]}].0. g[x_]=Cos[4 x].0.1.2 Pi}. Nota: si quieres volver a usar los mismos nombres para funciones distintas recuerda “limpiar” los nombres de las variables y las funciones con el comando Clear. Clear[x.f].min. Intenta lo mismo con las siguientes 3 funciones: f (x) = 2−x sen(6x). a partir de las coordenadas (x(t). f[x_]=Exp[x] ArcTan[x]. PlotRange->{-1. Prueba las siguientes órdenes.g[x]}. ¿Qué función es par y cuál es impar?. Para esto tenemos la siguiente orden: ParametricPlot[{x(t). Por ejemplo. {x. PlotStyle->{RGBColor[1. g(x) = 2−x y h(x) = −2−x . si quieres volver a usar las letras f y g para otras dos funciones haz lo siguiente: Clear[f. f[x_]=Sin[2 x]. PlotStyle->{RGBColor[1.0. si quieres borrar los valores de todas las variables.5}. compara los resultados e intenta variar algunos de los parámetros “a ver que pasa”. al menos para rectas. PlotStyle->{RGBColor[1.max}] junto con las opciones ya conocidas de la orden Plot. y(t)) variando t a lo largo de un intervalo.20 Cómo “dibujar” con Mathematica In[9]:= Plot[Tan[x].Cos[x]}. Prueba lo mismo que hemos hecho con las funciones sen(x) y sen(−x) o con las funciones cos(x) y cos(−x).0].{x.0. o sea.-2 Pi.{t.2. Gráficos en coordenadas paramétricas Como ya recordarás.0]}] Veamos algunos ejemplos de cómo utilizar estas opciones. También se pueden dibujar varias gráficas de funciones a la vez.1]}]. RGBColor[0.0. Plot[f[x]. Prueba con alguno de los siguientes ejemplos: .x]. podemos representar una curva del plano en coordenadas paramétricas.{x.RGBColor[0.0. Plot[{f[x].0.10 Pi}.y(t)}. usa Clear["Global *"].

ParametricPlot[{Cos[t]/(1+Sin[t]2 ).tˆ2}. E (t*Cot[α])*Sin[t]}.-2.3 Sin[t]}.Pi}] Espiral equiangular es aquella espiral en la que el radio corta a la curva en un ángulo constante α ParametricPlot[{ E (t*Cot[α])*Cos[t].2}] Lemniscata de Bernoulli Es una parametrización de (x 2 + y 2 )2 = (x 2 − y 2 ).2 Pi}] ParametricPlot[{{4 Cos[t].Sin[t]}.2 Pi}] ¿Hay alguna diferencia entre el segundo y el último de los ejemplos?.{t.10 Pi}] Serpentina Es una parametrización de x 2 y + a2 y − b2 x = 0 ParametricPlot[{t.Sin[2 t]}. 3*Sin[t]/4 Sin[3*t]/4}.{t.{t.2.10}] Hipérbola la representación en coordenadas cartesianas de una hipérbola con vértice (1.2.2 Gráficos en coordenadas paramétricas 21 ParametricPlot[{t. 7 Sin[t]}}. Sin[t] Cos[t]/(1+Sin[t]2 )}. Algunas curvas planas Astroide el camino recorrido por un punto de un círculo de radio r rodando dentro de otro círculo de radio 4r parametrizado en coordenadas rectangulares es el siguiente: ParametricPlot[{3*Cos[t]/4+ Cos[3*t]/4. 2 Pi}] Cardioide ParametricPlot[{2 Cos[t] + Cos[2 t].Cosh[t]}.2}] ParametricPlot[{Cos[t].{t.{t. 0. 2 Sin[t] + Sin[2 t]}.2 Pi}] ParametricPlot[{Cos[2 t].0.0. Una hipérbola rectangular tiene excentricidad √ 2 y su ecuación es xy = 1.1.0.{t.{8 Cos[t]. 0) y foco (a.{t. 0) (excentricidad a) es x 2 − y 2 /(a2 − 1) = 1.{t.0.{t.2 Pi}] Catenaria es la forma de un cable ideal con densidad uniforme colgando de dos puntos ParametricPlot[{t. también llamada hipérbola lemniscata.-2. 2.(b2 t)/(a2 + t2 )}. .0.0.{t.-10.

A continuación puedes encontrar la representación de varias funciones.4.{t.{t. Dibuja la función logaritmo neperiano. n } . ¿Cómo cambia la gráfica de una función f (x) cuando la cambiamos por f (a ∗ x). el símbolo % era utilizado para referirse al resultado anterior.%2] 2.2 Pi}] Epicicloide es la curva que describe un punto fijo de un círculo que rueda sin deslizamiento por el exterior de otro círculo (n es el número de vueltas).0. Ejercicio 4. f (x + a). Compara el crecimiento de estas funciones cerca de cero y lejos de cero.22 Cómo “dibujar” con Mathematica ParametricPlot[{-Sec[t]. o f (x) + a?. ¿Qué pasa si la base de la exponencial y el logaritmo son menores que uno? Ejercicio 2. 25 20 15 10 5 -4 -2 2 4 . 1 (1+ n )t 1 n 1 ParametricPlot[{(1+ ) Cos[t]+ n (1+ 1 )Sin[t]+ n Sin 1 (1+ n )t 1 n Cos n . exponencial y f (x) = x 2 con colores diferentes. Ejercicios Ejercicio 1.2 Pi}] 2.0. Ejercicio 3.3.Sqrt[a2 -1] Tan[t]}. Encuentra de qué funciones provienen. Prueba con alguna de las funciones anteriores. El comando Show Como recordarás. a ∗ f (x). Cuando el resultado es un gráfico que queremos volver a visualizar usaremos el comando Show en la forma siguiente Show[%1] Si queremos volver a representar los gráficos 1 y 2: Show[%1. Igual que en el ejercicio anterior compara las gráficas de las funciones trigonométricas con las respectivas funciones hiperbólicas.

2.4 Ejercicios 23 30 20 10 -4 -2 -10 2 4 20 10 -4 -2 2 4 -10 -20 2 1 2 4 6 8 10 12 14 -1 .

Por ejemplo.{a31. se escriben las filas agrupadas también con llaves..a32.a12.{a21.a12. Conseguiremos esto mediante el uso de la orden MatrixForm [ matriz ].a22.a33}} Mathematica no muestra el resultado en la forma de matriz que estamos acostumbrados a ver..a23}. In[1]:= {{a11.a13}.a22.a33}} Out[1]= {{a11.a32. Una matriz siempre está delimitada por un par de llaves y.}] .{a21.{a31.CAPÍTULO 3 Vectores y matrices Para comenzar vamos a ver como trabajar en Mathematica con vectores y matrices.a23}.a13}.a22. separadas por comas.. In[2]:= MatrixForm[ %] Out[2]=     a11 a21 a31 a12 a22 a32 a13 a23 a33     Si la matriz es diagonal podemos ahorrarnos algo de trabajo con la orden DiagonalMatrix[{a11.

b.8} b={1.4} Out[6]= {{1.3. Por ejemplo: In[4]:= IdentityMatrix[3] Out[4]= {{1. Para multiplicar dos matrices (filas por columnas) o calcular el producto escalar de dos vectores mediante Mathematica .0.6}.{1.5. cuando los órdenes lo permiten.0}.8} {1.2}.2.0}} a={1. Sin embargo. si los órdenes lo permiten.1}} In[5]:= MatrixForm[IdentityMatrix[3]] Out[5]=     1 0 0 0 1 0 0 0 1     Para sumar matrices. debemos usar el punto “.5.3.” en lugar del signo de la multiplicación “*”.d}} En el caso que la matriz diagonal sea la identidad.{1.0}.0.25 Por ejemplo.1}. solo tenemos que emplear el signo + y para multiplicarlas por un número podemos usar la simple yuxtaposición o el signo *. el producto de matrices. tiene una definición distinta.0.0}.5.0.6}.{0.0.{0. A modo de ejemplo de estas definiciones puedes comprobar los siguientes cálculos In[6]:= A={{1. In[3]:= DiagonalMatrix[{a.{1.2}} {{4.0}} {1.0}.d}] Out[3]= {{a.{4.3.1.3}.b.{1.{7.3.2}.{4.0.0.{0. podemos usar IdentityMatrix[n].0}.0.c.{0.5.0.3}.2}} B={{4.{7.{0.0.1}.2.3.4} .3.3.c.3.

26

Vectores y matrices

Suma de A y B

In[7]:=

A+B
Out[7]=

{{5,5,5},{11,8,7},{2,3,2}}

Producto de una matriz por un número

In[8]:=

5 A
Out[8]=

{{5,10,15},{20,25,30},{5,15,10}}

Producto escalar de a y b

In[9]:=

a.b
Out[9]=

48

Producto de una matriz por un vector A.a (ojo que a se considera columna)

In[10]:=

A.a
Out[10]=

{35,77,32}

Con Mathematica podemos definir matrices de forma automática mediante la orden Table. La sintaxis es la siguiente

Table[Función de i,j, {i, límite de i},{j,límite de j}]

27

Puedes comprenderla mejor con el siguiente ejemplo:
In[11]:=

Table[ i*x+ j*y, {i, 3},{j,3}]
Out[11]=

{{x+y,x+2y,x+3y},{2x+y,2x+2y,2x+3y}, {3x+y,3x+2y,3x+3y}}

In[12]:=

MatrixForm[ %]
Out[12]=

   

x+y 2x+y 3x+y

x+2y 2x+2y 3x+2y

x+3y 2x+3y 3x+3y

   

Los siguientes comandos son los que nos permiten extraer elementos, filas, columnas y submatrices de una matriz. Para extraer el elemento (i,j)-ésimo de una matriz A, escribimos A[[i,j]] Para extraer la fila i-ésima, A[[i]] Para obtener una submatriz de A el comando es: A[[{índices de filas},{índices de columnas}]] Obtener la columna j-ésima de A equivale a extraer la fila j-ésima de la traspuesta de A. Mathematica usa el comando Transpose para transponer matrices: Transpose[matriz] Veamos algún ejemplo. Primero buscamos el elemento (2,3) de la matriz A definida en los ejemplos anteriores
In[13]:=

A[[2,3]]
Out[13]=

6

Seguidamente la fila segunda de A
In[14]:=

A[[2]]
Out[14]=

{4,5,6}

28

Vectores y matrices

La traspuesta de A
In[15]:=

Transpose[A]
Out[15]=

{{1,4,1},{2,5,3},{3,6,2}}

Y la tercera columna de A
In[16]:=

Transpose[A][[3]]
Out[16]=

{3,6,2}

Por último, la submatriz de A que tiene las filas (1,2) y las columnas (2,3)
In[17]:=

A[[{1,2},{2,3}]]
Out[17]=

{{2,3},{5,6}}

Seguidamente vamos a ver los comandos que nos permiten calcular inversas y determinantes de matrices con Mathematica . Para calcular el determinante el comando es Det[matriz] y para calcular la inversa usamos Inverse[matriz]. Como ejemplo puedes calcular los determinantes de las matrices A y B del primer ejemplo y, si son no nulos, sus inversas. Si una matriz no es cuadrada, o si siendo cuadrada su determinante vale 0, ¿cómo podemos calcular su rango?. Mathematica no tiene una orden específica para calcular rangos de matrices, pero podemos calcularlos de tres formas: • Mediante la orden Minors[matriz,orden], que calcula los menores de cierto orden de una matriz dada, dando el resultado en forma de matriz. El rango de la matriz es el mayor orden para el que hay algún menor no nulo. • Mediante la orden RowReduce[matriz], que convierte la matriz en otra equivalente, pero triangular superior. Expresada de esta forma es fácil ver el rango de una matriz: basta ver cuantos elementos no nulos hay en la diagonal principal (aunque no sea cuadrada). • Si la matriz es cuadrada, podemos calcularle los valores propios, y su rango será el número de valores propios no nulos. Para calcular los valores propios de una matriz cuadrada, usamos la orden Eigenvalues[matriz]. Por último, la orden Eigensystem[matriz] da como resultado una lista con los valores propios y los vectores propios de la matriz. Si sólamente nos interesan los vectores propios podemos usar Eigenvectors[matriz]. Por ejemplo,

1 (1+ 21}.21).1}} Ejercicio 1. j) sea i ∗ j. la tercera columna de C y el elemento (3. Consideremos las matrices  1 −3 2 −2 2 4 −2 5 0   0 −2 2 −1 2 −5 0  6  0  3 3 0 0 0 1   A= 2  1  −4 C= 3  5 (a) Calcular A.21. su inversa si la tiene.C. 3) de D. B.21. D. de forma que el elemento (i.1}. (d) Calcular el rango de las matrices A.C y A + B.{ 6 (3. D.{3.B. ¿Cuáles son sus valores propios?.   3  1 −4  0 −5  1 0  −1 3   −1 −5  B =  12  −1  −1  D =  12  −6  3  (b) Extraer la segunda fila de A. calcular su inversa. Calcula el determinante. (c) Calcular Det(A). y su rango. 2 2 √ √ 1 1 { 6 (3.1}. Para las matrices cuyo determinante sea no nulo. C. .-1}}] Out[18]= √ √ {{ 1 (1. D. A + B. (e) Usar la orden Table para generar una matriz del orden 3 × 3. Det(B) y Det(C).29 In[18]:= Eigensystem[{{2. Calcular sus valores propios.

ecuación2. La sintaxis es Solve[{ecuación1..y}] Out[1]= {x− > 0. variable2.. . {x− > 4 −3 .. y− > 1}. (x-2)2 + (y-1)2 ==4}.CAPÍTULO 4 Resolución de ecuaciones 4. Resolvamos el sistema de ecuaciones x2 + y 2 = 1 (x − 2)2 + (y − 1)2 = 4 Para ello usamos la sentencia Solve In[1]:= Solve[{x2 + y2 ==1.. Ecuaciones “sencillas” Mathematica puede resolver los tipos más comunes de ecuaciones y sistemas de ecuaciones algebraicas.{variable1.1.}. tanto de forma exacta (si se puede) como aproximada..{x..}] Para Mathematica una ecuación está formada por dos expresiones igualadas con el signo “==”. y− > } 5 5 Observa que en el comando Solve tenemos que decirle a Mathematica las variables respecto de las cuales queremos resolver el sistema.

{x− > }} 2 2 . In[5]:= Solve[ArcCos[x]-ArcTan[x]==0. 6]}} Este error aparece porque estamos usando un polinomio de grado alto y es posible que la ecuación no pueda resolverse con operaciones elementales.x] Solve::ifun: Inverse functions are being used by Solve. 5]}. 4]}. 1]}. so some solutions may not be found. { x → Root[1 + #1 + #16 &.1 Ecuaciones “sencillas” 31 A veces. 2]}. { x → Root[1 + #1 + #16 &. Mathematica no puede resolver de forma exacta una ecuación In[2]:= Solve[x6 +x+1==0. En este caso usamos la orden NSolve (tiene la misma sintaxis que Solve) para una resolución numérica In[3]:= NSolve[x6 +x+1==0. Out[6]= {{x− > 0}.x] Out[2]= {{x → Root[1 + #1 + #16 &.x] y Mathematica da 6 soluciones aproximadas (en este caso complejas) de la ecuación anterior. { x → Root[1 + #1 + #16 &.x] Out[5]=     x− > √  −1 5  + 2 2  En estos casos lo más frecuente es que no se pueda resolver el sistema o que no se puedan calcular todas las soluciones.50] Además de ecuaciones polinómicas. Solve puede resolver ecuaciones en las que aparecen otro tipo de funciones. 3]}.x. { x → Root[1 + #1 + #16 &. Por ejemplo. { x → Root[1 + #1 + #16 &. {x− > −π π }.4. Después de la variable podemos añadir el número de cifras significativas que queremos que tengan las soluciones In[4]:= NSolve[x6 +x+1==0. Si ocurre esto Mathematica da un mensaje de advertencia avisando de que puede haber más soluciones: In[6]:= Solve[Sin[x] Cos[x]==0.

La solución para este problema resulta sencilla.4.11 .32 Resolución de ecuaciones 4. ¿Qué pasa si la solución no es única?.7.5}.5}} b={4. donde A es una matriz de orden m × n y x y b son vectores de órdenes n y m respectivamente.7.4.5}.5}.2.3.7..3} Det[A] Out[7]= {{1. Si queremos conocer la solución de la segunda variable solo tenemos que buscar la segunda componente de S: In[9]:= S[[2]] Out[9]= .{9.11 4 Otra posibilidad para resolver el sistema es usar la orden LinearSolve[matriz A.{9.x = b.b Out[8]= { 7 .{2.7.5}} {4.5}. Puedes comprobar con ejemplos sencillos que la orden LinearSolve da como resultado un vector aunque el sistema tenga infinitas soluciones: . Como en este caso la matriz es cuadrada y tiene determinante distinto de cero. Sistemas de ecuaciones lineales Vamos a aplicar lo que hemos visto a la resolución de sistemas lineales de la forma A.3} 20 In[8]:= S=Inverse[A]. El caso más fácil es que la matriz A sea cuadrada e inversible. Veamos un ejemplo. podemos definir un vector cuyas componentes sean las soluciones de nuestra ecuación y podemos utilizar sus componentes como hemos visto anteriormente. 21 } 4 4 10 De este modo tenemos definido el vector de soluciones del sistema como S. la soluciones nos aparecen como listas de valores. Cuando resolvemos sistema de ecuaciones con Mathematica . entonces la solución del sistema es tan sencilla como multiplicar (matricialmente) la inversa de A por b. El problema que nos surge es que no podemos trabajar directamente con estos resultados.3.{2. Para esto llamamos “S” al vector solución y lo definimos cuando ponemos S igual a la inversa de A por b (cuando es posible). es decir como vectores. sólo tenemos que calcular su inversa: In[7]:= A={{1.vector b].

y. 0) + λ(−1.z}.1}}.2 Sistemas de ecuaciones lineales 33 In[10]:= LinearSolve[{{1.x = b. pero hay más soluciones. por tanto. x = 1 − z}. . En nuestro ejemplo anterior (x + y = 1) habíamos obtenido In[11]:= LinearSolve[{{1.1}}.{1. .0. Otra forma de resolver sistemas es usar la orden Solve que ya conocemos.4. De esta forma. ..{x. x0 (obtenida mediante LinearSolve) y una base del núcleo de A.1}. si sabemos una solución particular del sistema A.0}. Un ejemplo nos ayudará a entender la mecánica: In[13]:= A={{1. con lo que todas las soluciones del sistema serán de la forma (1. .{2. las soluciones nos vienen dadas de forma implícita mediante dos ecuaciones: {y = −1. b={0.{1}] Out[10]= {1. x->1-z}} En este caso. 1).{1}] Out[11]= {1. donde λ1 .2}. .0} en este ejemplo. .1}}] Out[12]= {{-1. el núcleo de la matriz (1 1) tiene base In[12]:= NullSpace[{{1. con λ un parámetro real.0.1}}. x1 . el espacio afín de soluciones tendrá dimensión 1. λ2 . como la matriz A tiene rango dos. . x2 . La forma de obtener las demás soluciones es calcular el núcleo de la matriz de coeficientes mediante la orden NullSpace. v={x.1}. son parámetros. que da una base de dicho núcleo. Solve[A.2.y.1.v==b. 1). 0) es solución del sistema x +y = 1. todas las soluciones del sistema serán de la forma x0 + λ1 x1 + λ2 x2 + · · · .1}}.z}] Out[13]= {{y->-1. (1. como por ejemplo (0.

b y + b x == 0}.…}. Un ejemplo: In[14]:= Reduce[{x +a y == a. || es la disyunción “o”. la segunda: x = que sólo vale si a ≠ 1 y para cualquier b.   3  1 −4  0 −5  1 0  −1 3   −1 −5  B =  12  −1  −1  D =  12  −6  3  resolver los siguientes sistemas de ecuaciones lineales: A.x = (1.ecuación2. El primero sólo resuelve sistemas de grado bajo pero con soluciones exactas.…}] Al usar este comando hay que tener en cuenta que todo lo que no se le introduce como variable es considerado parámetro. Su sintaxis es Reduce[{ecuación1. haciendo una discusión de casos si es necesario.{x. B.34 Resolución de ecuaciones Ejercicio. Resolución de sistemas de ecuaciones Veamos todos los comandos con algunos ejemplos: • Comandos Solve y NSolve: Sirven para resolver sistemas de ecuaciones polinómicas. C.x = (2. 0. −1. expresadas mediante radicales. 0)t . Discutir en función de los parámetros a y b. 0. pues este comando no devuelve valores numéricos.{var1. 0)t .x = (1. el resultado obtenido al usar Reduce difiere bastante del obtenido al usar Solve o NSolve. 1.var2. 2.y = a−1 a−1 Mathematica da dos soluciones: la primera x = a(1−y) con b = 0.y}] Out[14]= x == a(1 − y) −1 + a ≠ 0 && b == 0 || && x == −a/(−1 + a) && y == a/(−1 + a) −a a . • Comando Reduce: simplifica sistemas de ecuaciones dependientes de parámetros. sino ecuaciones más simples que habrá que resolver. 0)t . 0)t y C.3. Ejercicio 1. Usando las matrices  1 −3 2 −2 2 4 −2 5 0   0 −2 2 −1 2 −5 0  6  0  3 3 0 0 0 1   A= 2  1  −4 C= 3  5 (−1. dichas ecuaciones vendrán expresadas usando “operadores lógicos”: && es la conjunción “y”. los siguientes sistemas de ecuaciones:   x + az = 0 x + az = 1         2   ax + by = 5 x + 2y = b x + 2y = −1   x − by = 1        x − y + az = 0 x − y + az = 3 .x = 4. Además. 0. El segundo da soluciones aproximadas pero sirve para cualquier grado.

nos damos cuenta de la necesidad de encontrar o aproximar soluciones para ecuaciones del tipo f (x) = 0. b]. 5]}. en principio. que un determinado valor es una aproximación de la solución de la ecuación con un error prefijado.4. . In[16]:= Solve[x6 +x3 + 1 == 0. b] y cambia de signo en el intervalo. El objetivo de esta práctica es aprender a programar algoritmos con Mathematica para aproximar la solución de estas ecuaciones. Otros métodos Hemos visto como resolver ecuaciones y sistemas de ecuaciones con Mathematica mediante la orden Solve. { x → Root[1 + #1 + #16 &. 2]}.4 Otros métodos 35  x − z = 1     x + 2y = 1    x + az = b  x + az = 0     x + 2y = b    x − y + az = 0  x + 2z = 0     7x − 2y = 0    6x − 2y + az = 0 4. El problema de usar la orden Solve. Lo primero que tenemos que tener en cuenta es que no existe ningún método general para resolver todo este tipo de ecuaciones en un número finito de pasos. entonces existe al menos una solución de la ecuación en el intervalo [a. x] Prueba con otras ecuaciones de grado alto la orden Solve. es que solo nos permite resolver ecuaciones y sistemas de ecuaciones para los que es posible aplicar un método algebraico sencillo. para ver las limitaciones de la orden Solve. x ] In[17]:= Solve[x6 + x5 + 1 == 0. En estas condiciones. Lo que sí tendremos es condiciones para poder asegurar. b]. podemos considerar como f cualquier función real de una variable. El principal resultado para asegurar la existencia de solución para la ecuación f (x) = 0 en un intervalo [a. 6]}} Ahora es un buen momento para plantearle a Mathematica algunas ecuaciones. En otras palabras. es el Teorema de Bolzano. Recordemos el siguiente ejemplo que ya nos habíamos encontrado: In[15]:= Solve[x6 +x+1==0. bajo ciertas hipótesis sobre la función f . donde.x] Out[15]= {{x → Root[1 + #1 + #16 &. { x → Root[1 + #1 + #16 &. por ejemplo polinomiales de grado alto. Los dos métodos que vamos a usar se basan en este resultado. 3]}.4. { x → Root[1 + #1 + #16 &. 4]}. Dicho teorema asegura que si f es continua en [a. { x → Root[1 + #1 + #16 &. la orden Solve está limitada a ecuaciones y sistemas de ecuaciones que se puedan resolver mediante operaciones elementales. { x → Root[1 + #1 + #16 &. 1]}.

4.36 Resolución de ecuaciones Ambos métodos nos proporcionan un algoritmo para calcular una sucesión de aproximaciones. usada para realizar bucles.i<=10. Un ejemplo de bucle puede ser el siguiente: supongamos que queremos obtener los múltiplos de siete comprendidos entre 7 y 70.i=i+1. Para terminar de comprender bien el funcionamiento de esta orden puedes teclear y evaluar los siguientes ejemplos: En primer lugar. Breves conceptos de programación Antes de introducirnos en el método teórico de resolución. intentemos escribir los múltiplos de 7 comprendidos entre 7 y 70: In[18]:= For[i=1. comenzando en 5 y terminando en 25. • incremento expresará la forma de aumentar la condición inicial. es decir. For[expresión inicial. • expresión dirá a Mathematica lo que tiene que realizar en cada paso. La sintaxis de la orden es la siguiente. vamos a presentar algunas sentencias sencillas de programación que necesitaremos más adelante. Un “bucle” es un proceso repetitivo que se realiza un cierto número de veces. La primera de las órdenes que vamos a ver es el comando For. para ello. .expresión] • expresión inicial nos sitúa en las condiciones de comienzo del bucle.1. bastará tomar alguno de los términos de la sucesión que se aproxime a la sucesión con la exactitud que deseemos. la expresión puede estar compuesta de varias sentencias separadas mediante punto y coma.incremento. y condiciones sobre la función f para poder asegurar que la sucesión que obtenemos converge a la solución del problema. repetimos 10 veces la misma operación: multiplicar por 7. • condición dirá a Mathematica el momento de detener el proceso.Print[7*i]] 7 14 21 28 35 42 49 56 63 70 El segundo ejemplo consiste en hacer a Mathematica sumar de cinco en cinco.condición. 4. multiplicamos 7 por cada uno de los números naturales comprendidos entre 1 y 10. Una vez asegurada esta convergencia.

In[21]:= a=5.Print[Sin[i]]] Sin[1] Sin[11] Sin[21] Ejercicio Usa el comando For en los siguientes ejemplos: • Sumar los números naturales entre 400 y 450.4.4 Otros métodos 37 In[19]:= For[i=5. If[a<=0. En el siguiente ejemplo se puede comprender rápidamente el uso de esta orden. expresión1. Print["El logaritmo neperiano de ". Su sintaxis es la siguiente. el seno de 11 y el seno de 21."vale ".i=i+5. expresión2] La expresiones 1 y 2 pueden estar formadas por varias órdenes separadas por punto y coma. If[condición.60944 Ahora puedes probar a cambiar el valor de a para ver como la sentencia If va cambiando sus resultados. La última sentencia de programación que vamos a ver es la orden Break[ ] cuya única finalidad es la de interrumpir un bucle en el momento que se ejecuta y no terminar todos los pasos que faltan hasta la condición final del bucle. • Sumar los cuadrados de los primeros 10 naturales.i<=25. Print["No existe el logaritmo neperiano de ". Para familiarizarnos con esta orden vamos a teclear y ejecutar el siguiente ejemplo. La segunda sentencia es la orden condicional If. In[20]:= For[i=1.Print[i]] 5 10 15 20 25 El tercero genera el seno de 1. a] . . después. Esta sentencia comprueba si se verifica una condición. si la condición es verdadera Mathematica ejecutará una expresión1. a.i=i+10. N[Log[a]]]] El logaritmo neperiano de 5 vale 1. y si es falsa ejecutará otra expresión2.i<=30.

4. b]). Método de Bisección En este método sólo es necesario que la función f sea continua en el intervalo [a. c] (si f (a)f (c) < 0. b].38 Resolución de ecuaciones In[22]:= For[i=1. c = a+b 2 (el punto medio del segmento [a. n = E Log2 b−a Ex + 1. partimos de un intervalo de longitud (b-a) y lo partimos por la mitad quedándonos con el subintervalo en el que podemos asegurar la existencia de una raíz si ésta no era el punto medio de [a. Si notamos por “Ex” a la exactitud prefijada.Print[Log[i]]. que se irán visualizando a medida que se van haciendo los sucesivos cálculos. hemos encontrado una solución de la ecuación y por tanto hemos terminado. podemos deducir el número de iteraciones necesarias para obtener una aproximación con un error o exactitud prefijados. el intervalo y la exactitud. consideramos como nuevo intervalo. El siguiente paso consiste en tomar como nueva aproximación. En consecuencia. Si nos damos cuenta. 2]. Definiremos en primer lugar la función. Print["El logaritmo de ".i<=30. . Para obtener la “parte entera” de un número que está expresado en notación decimal. o bien [a. el A partir de aquí. o bien [c. aproximación. Mathematica tiene el comando Floor. b] si es que f (c)f (b) < 0 y repetimos la estrategia en el nuevo intervalo. el error cometido es menor o igual que error cometido en el paso n-ésimo es menor o igual que b−a 2n . el número “n” de iteraciones necesarias deberá satisfacer b−a < Ex 2n así. donde E[·] denota la “parte entera” de un número (esto es. Si f (c) = 0.i=i+1. para a continuación llevar a cabo el cálculo de dichas aproximaciones. En este método podemos conocer el error que cometemos en cada una de las aproximaciones. el mayor de los enteros que son menores que el número. Seguidamente calcularemos el número “P ” de iteraciones (o pasos) necesarias. i. If[N[Log[i]]<=2. vamos a resolver como ejemplo la ecuación x 6 + x − 5 = 0 en el intervalo [0. El nuevo subintervalo tiene longitud b−a 2 y contiene a la solución y a la primera b−a 2 . "es mayor que 2"]. Si f (c) ≠ 0. b] y verifique f (a)f (b) < 0. el Teorema de Bolzano nos asegura la existencia de una solución de la ecuación en [a. De la misma forma.2. Break[] ]] 0 Log[2] Log[3] Log[4] Log[5] Log[6] Log[7] El logaritmo de 8 es mayor que 2 4. b]. En estas condiciones. entonces para conseguir dicha precisión. Para definir un algoritmo de cálculo de la sucesión de aproximaciones de este método mediante Mathematica .

Print["Sol.aprox: 1. . (error <1.246643066 (error <0.53674 10−7 ) A continuación.246631622 (error <3. Print[i.i.aprox: 1.5 (error <0.246635437 (error <7.246629715 (error <1.246704102 (error <0.234375 (error <0.aprox: 1. Intenta también buscar un caso simple en el que se encuentre la solución exacta en unos pocos pasos. así como la exactitud exigida.21875 (error <0.aprox: 1.1875 (error <0.000976562) 12 .aprox: 1.aprox: 1. If[f[c]==0.5) 3 .N[b-a].246627808 (error <0. P=Floor[N[Log[2.aprox: 1.aprox: 1.8147 10−6 ) 20 .125) 5 .aprox: 1. "hallada en ". Por último.aprox: 1.00195312) 11 .aprox: 1.2421875 (error <0. prueba a cambiar la función.000244141) 14 .i=i+1.0000305176) 17 ." ].b=c.4 Otros métodos 39 In[23]:= Clear["Global`*"] f[x_]=x6 +x-5. Ex=10 (-6).aprox: 1.N[c. "(error <".10]. If[f[c]f[a]<0.00390625) 10 .N[c.aprox: 1.0000152588) 18 .246628761 (error <9.125 (error <0.0000610352) 16 .015625) 8 .")" ] ] Este comando da lugar a la siguiente respuesta por parte del Mathematica : 1 .000488281) 13 . a=0.4.24609375 (error <0.246826172 (error <0.246612549 (error <0. exacta: ".aprox: 1.aprox: 1.i<=P.247070313 (error <0.90735 10−6 ) 21 .aprox: 1.aprox: 1.a=c].aprox: 1."pasos.0078125) 9 . Break[] ].0625) 6 ." – aprox: ".246582031 (error <0.aprox: 1. c=(a+b)/2. intenta usar el algoritmo √ 3 anterior para calcular 5 con una exactitud de 10−10 . b=2.(b-a)/Ex]]]+1.25) 4 .aprox: 1.aprox: 1.25 (error <0.) 2 .03125) 7 .248046875 (error <0. los extremos del intervalo (en los cuales dicha función cambia de signo).62939 10−6 ) 19 .00012207) 15 . For[i=1.10].

bajo ciertas condiciones. Resolvamos de nuevo el ejemplo de x 3 − 5 = 0 en el intervalo [1.4.40 Resolución de ecuaciones Graba ese algoritmo en disco. tienen Entonces. obtenemos -20 -40 -60 xn+1 como el punto de corte de la recta tangente a f en el punto xn con el eje OX. Primero suponemos que f es derivable al menos 1 2 3 4 dos veces. 4. Tomemos una función f que admite derivada segunda en el intervalo [a. Para asegurar la convergencia de la sucesión (hacia la solución de la ecuación).3. con primera derivada no nula en el intervalo donde trabajamos. dibujando las gráficas de f (x) = x 3 − 5. la sucesión de valores xn del método de Newton-Raphson es convergente hacia la Una vez que tenemos asegurada la convergencia de la sucesión hacia la solución de la ecuación. b] donde f y f única solución de la ecuación f (x) = 0 en [a. cuyo enunciado daremos más adelante. f (x) ≠ 0. usaremos el Teorema de NewtonRaphson. Utilizaremos ahora Mathematica para generar la sucesión de aproximaciones. Notaremos por f y f a la derivadas primera y segunda de f respectivamente. 3]. b]. deberíamos decidir la precisión. b]. Una vez fijado un valor inicial x1 . b] y verifica: 1. Método de Newton-Raphson El método para la construcción del algoritmo que vamos a estudiar ahora es conocido con el nombre de “método de Newton-Raphson” debido a sus autores. 3]. f (x) no cambia de signo en [a. el mismo signo. para todo x ∈ [a. b]. Podemos comprobar. el término x2 se obtiene como el punto de corte de la recta tangente a f en x1 con el eje OX. El mencionado Teorema de Newton-Raphson. Otra posibilidad sería detener el cálculo de cuando el valor absoluto de la diferencia entre xn y xn+1 sea menor que la precisión buscada (lo cual no implica necesariamente que el error cometido sea menor que la precisión). 2. más tarde compararemos su efectividad con la del siguiente método. f (x) y f (x) en el intervalo [1. veremos que el método es tan rápido en su convergencia que por defecto haremos siempre 10 iteraciones. De la misma forma. es el siguiente: Teorema (de Newton-Raphson). f (a)f (b) < 0. Este método nos proporciona un algoritmo para obtener una sucesión de aproximaciones. que estamos en las condiciones bajo las cuales el Teorema de Newton-Raphson nos asegura . 60 40 20 La forma de construir los distintos términos de la sucesión de aproximaciones es bastante sencilla y responde a una idea muy intuitiva. Sin embargo. 3. f (xn ) Para comprender el algoritmo observa el gráfico donde se ve cómo se generan los valores de las aproximaciones.. tomando como primera aproximación el extremo del intervalo [a.. De lo dicho hasta aquí se deduce: xn+1 = xn − f (xn ) .

5 3 Out[24]= . Plot[f’[x].{x. para escribir la “prima” en f [x]. Plot[f”[x].5 2 2.4 Otros métodos 41 convergencia.5 2 2.4.5 2 2.5 3 Out[25]= . 3}].{x.1.5 3 Out[26]= . 3}].1. 3}] 20 15 10 5 1. Plot[f[x]. Las gráficas se pueden obtener de la forma que aparece en la página siguiente (ojo. In[24]:= Clear["Global`*"] f[x_]=x3 -5. debemos usar la tecla que está al lado del 0 en el teclado).Graphics - .{x.Graphics - 18 16 14 12 10 8 1.1.Graphics - 25 20 15 10 5 1.

el método de Newton-Raphson es muy rápido. Observa qué rápidamente se “estabilizan” los decimales de las iteraciones. 4.x0 }.{x. Inmediatamente después definimos el algoritmo del método de Newton-Raphson. y el valor de la primera aproximación. En cualquier caso hay que tener en cuenta que aún escogiendo puntos iniciales cercanos el resultado puede ser completamente distinto. Si es necesario.y0 }. Prueba a continuación a cambiar a un mayor número de decimales en las aproximaciones.{x. y=3. Por ejemplo. Sí. Print[i.eq2.{x. In[27]:= Clear["Global`*"] f[x_]=x3 -5. aumenta también el número de iteraciones. aprox: ".42 Resolución de ecuaciones A continuación. Comenzaremos por definir la función f. Como dijimos. generaremos los términos de la sucesión de aproximaciones mediante el siguiente algoritmo.5. y=y1 ] Observarás al ejecutar este grupo de comandos que ya en la sexta iteración se han “estabilizado” veinte cifras decimales de la solución. El comando FindRoot El método que hemos visto en la sección anterior se puede usar directamente con la orden FindRoot.20]. pondremos un límite de 10 iteraciones. FindRoot[función de x. aunque usando mayor precisión decimal puedes probar con un número mayor de iteraciones. y1=N[y-f[y]/f’[y].{y.…}.i<=10.70998} El comando FindRoot también se puede usar con sistemas de ecuaciones.…] .aproximación inicial}] La aproximación inicial debería ser un punto que este “más o menos” cerca del cero de la función que queremos buscar.y1]. e iremos visualizando las sucesivas aproximaciones. Sólo hay que escribir las ecuaciones agrupadas entre llaves y dar un punto inicial para cada variable: FindRoot[{eq1.i=i+1. como puedes ver. In[28]:= FindRoot[x3 -5.3}] Out[28]= {x->1. For[i=1.

0):   sen x cos y = 1 4  xy = 1 .3. la solución de dicha ecuación en el intervalo [−0. 1. 1] con exactitud 10−10 . 2 Ejercicio 2. Encontrar una solución del siguiente sistema de ecuaciones “cerca” de (0. usando los métodos estudiados. 3 Calcular programando los métodos de bisección y de Newton-Raphson. Dada la ecuación tan(x) = buscar la solución que posee en el intervalo [0. 1 x π ]. Encontrar la solución mediante la orden FindRoot y comparar los resultados.5 El comando FindRoot 43 Ejercicios 1. 2.4. Considérese la ecuación e(x 2 +x+1) − ex − 2 = 0.

n->+∞] n+1 1 In[2]:= Limit[Tan[x]. tenemos que calcular l´ f (x). Las siguientes calculan el límite por la izquierda y la derecha respectivamente.Direction->-1] La primera calcula el límite de la expresión cuando la variable tiende a a. Mathematica ha dibujado una asíntota vertical en los puntos donde el coseno valía cero. Por ejemplo.variable->a. En el caso de que queramos estudiar la continuidad de una función en un punto a.variable->a. Mathematica puede estudiar límites (también laterales).CAPÍTULO 5 Extremos de funciones de una variable 5.1.x->Pi/2. Cuando hemos dibujado la gráfica de la función tangente.Direction->1] Out[2]= ∞ .Direction->1] Limit[expresión. Continuidad y límites Básicamente todas las funciones que han aparecido hasta ahora eran continuas. En el caso de que no lo fueran Mathematica tampoco parece haber tenido demasiados problemas.variable->a] Limit[expresión. In[1]:= Limit[ Out[1]= n . La orden es la siguiente: ım x→a Limit[expresión.

5.2 Máximos y mínimos relativos

45

Cuando la función oscila entre dos valores Mathematica intenta dar el intervalo aunque no exista el límite.
In[3]:=

Limit[Sin[1/x],x->0]
Out[3]=

Interval[{-1,1}]

5.2. Máximos y mínimos relativos
Esencialmente, lo que haremos para localizar los extremos relativos de una función f será encontrar soluciones de la ecuación f (x) = 0. Para solucionar dicha ecuación, podemos usar (cuando sea posible por la simplicidad de la ecuación) comandos directos como Solve ó NSolve, o bien usaremos el comando FindRoot cuando las soluciones no se puedan obtener directamente. Comencemos buscando los extremos relativos de la función polinómica f (x) = x 5 + x 4 − 11x 3 − 9x + 18x + 10 en el intervalo [−4, 4]. Para ello, definiremos convenientemente la función f , y dibujaremos su gráfica entre −4 y 4.
In[4]:=
2

Clear["Global`*"] f[x_]= x5 +x4 -11x3 -9x2 +18x+10; Plot[f[x],{x,-4,4}]
100

50

-4

-2 -50

2

4

-100

Out[4]=

- Graphics -

A simple vista observaremos que hay: un máximo relativo entre −3 y −2, un mínimo relativo entre −2 y −1, un máximo relativo entre 0 y 1, un mínimo relativo entre 2 y 3. En cualquier caso, dada la simplicidad de esta función (polinómica de grado bajo), es posible calcular directamente los ceros de la derivada con el comando

46

Extremos de funciones de una variable

In[5]:=

NSolve[f’[x]==0,x] Como vemos, aparecen cuatro soluciones que se corresponden con los extremos que habíamos localizado a simple vista. Sin embargo, no todas las funciones permiten calcular de un modo simple las soluciones de la ecuación f (x) = 0. Por ejemplo, consideremos ahora la función f (x) = sen(x) + ex en el intervalo [−7, 0]. Pintémosla igual que antes, sustituyendo la antigua función por la nueva. De nuevo, a simple vista se observa que hay: un máximo relativo cerca de −5, un mínimo relativo cerca de −2 Sin embargo, ahora no funciona satisfactoriamente el comando NSolve (inténtalo). Optaremos por aplicar el método de Newton-Raphson (mediante el comando FindRoot) para encontrar las raíces de la derivada de f . Recordemos que en el comando FindRoot es necesario introducir una “primera aproximación” de la solución, que servirá para iniciar el proceso iterativo. En este caso concreto, dada la situación aproximada de los extremos, probaremos a iniciar el método desde −5 y también desde −2. Concretamente, escribiremos el comando
In[6]:=

FindRoot[f’[x],{x,-5}] FindRoot[f’[x],{x,-2}] El programa nos da entonces una buena aproximación de los puntos donde la función alcanza los extremos observados. A continuación veremos un caso en el que la gráfica diseñada por el programa nos puede llevar a engaño. Descubriremos el error gracias al “test de la segunda derivada”. Sea f (x) = x 2 − 10x − 1 40 + , y pintémosla en el intervalo [−15, 15]. 10x 2 − 100x + 251 Aparentemente, hay un mínimo cerca de 5. Si buscamos raíces de la derivada ejecutando el comando FindRoot con dato inicial 5, obtenemos que precisamente para x = 5 la derivada se anula (se podía haber comprobado antes pidiendo al Mathematica el valor de f (5)). A la vista de la gráfica, en x = 5 parece haber un mínimo de la función f . Sin embargo, pidámosle al Mathematica que calcule el valor de la segunda derivada de f en 5. Obtendremos que f (5) = −18 < 0. La segunda derivada es negativa y por tanto en x = 5 tiene que haber un máximo. Sería conveniente ver “más de cerca” lo que ocurre cerca de 5. Prueba a pintar la función en el intervalo [4, 6]. Ahora parece haber un mínimo cerca de 4,5 y otro cerca de 5,5, y efectivamente, un máximo en 5... ¿cómo podemos asegurar que cerca de los extremos que ahora vemos no vuelven a ocurrir nuevas “oscilaciones ocultas” como la que antes no veíamos?...

CAPÍTULO

6

Fórmula de Taylor

Seguro que alguna vez te has preguntado cómo pueden una calculadora o un ordenador usar las funciones seno, coseno, exponencial, logaritmo... que no tienen una definición fácil, y que se basan en números “esencialmente” irracionales como π o e. En esta práctica trataremos de entender cómo se pueden construir funciones conociendo únicamente las funciones suma (resta), producto (división) y potenciación. Necesitaremos además comprender el concepto de límite y la derivación de funciones. Se trata de “sustituir” funciones complicadas por otras mas sencillas de calcular (que en este caso serán polinomios), controlando la “pérdida” que se produce. El primer ejemplo puede ser “sustituir” una función por su recta tangente (si recuerdas, esto nos sirvió para encontrar ceros de funciones mediante el método de Newton-Raphson): dada una función f derivable en un punto a, la recta y = f (a) + f (a)(x − a) pasa por el punto (a, f (a)) y tiene la misma pendiente que la función f . En cierto sentido, lo que hemos hecho es encontrar una función más sencilla (una recta, o sea, un polinomio de grado uno) que se parece a la función de partida (coinciden el valor de la función y el de la derivada). ¿Hasta que punto puedo “cambiar” una función por su recta tangente? Si la función oscila demasiado, la aproximación no será buena, como por ejemplo en la función coseno En el gráfico podemos ver que en cuanto nos alejamos un poco del punto de tangencia (en este caso el 0), la función coseno y su tangente no se parecen nada. La forma de mejorar la aproximación será aumentar el grado del polinomio que usa-3 -2 -1 1 2 3 0.5 1

mos, y el problema es, fijado un grado, qué polinomio de grado menor o igual al fijado es el que más se parece a la función. El criterio con el que elegiremos el polinomio será hacer coincidir
-1 -0.5

las sucesivas derivadas. Por ejemplo, si buscamos un polinomio P de grado dos que aproxime a una función dos veces derivable, f , vamos a exigir que P (a) = f (a), P (a) = f (a) y P (a) = f (a). Con estas tres condiciones estamos en disposición de calcular los coeficientes de A(x − a)2 + B(x − a) + C. Si lo hacemos,

P1 y P2 podremos comprobar qué es lo que ocurre: In[1]:= Clear["Global *"] f[x_]=Cos[x].0]. pero de todas formas. se define el polinomio de Taylor de orden n en el punto a como Pn (x) = f (a) + f (a) (x − a) + ··· + f (a) (x − a)2 + · · · 2! f (n) (a) (x − a)n n! Teorema (Fórmula de Taylor).{x. entonces existe c entre a y x tal que f (x) − Pn (x) = f (n+1) (c) (x − a)n+1 . Consideremos la función f (x) = cos(x) y vamos a calcular el polinomio “aproximante” en 0.1-(x2 )/2}.RGBColor[0. PlotStyle->{RGBColor[1.0. si aumentamos el dominio (prueba por ejemplo x ∈ [−10.-4. x ∈ I y f : I → R es una función n-veces derivable.4}. En este caso f (0) = 1. El problema es que estamos calculando polinomios de grado bajo. Si f : I → R es una función (n + 1)-veces derivable.Graphics - El polinomio de orden 2 se parece un poco más a la función coseno que la recta tangente. 10]) se puede ver que el “parecido” se pierde al alejarnos del origen. a. f (0) = −1. Todo lo que hemos hecho hasta ahora se basa en un resultado teórico ya conocido: si I es un intervalo.1]}] 1 -4 -2 -1 2 4 -2 -3 -4 Out[1]= . f (0) = 0.48 Fórmula de Taylor veremos que dicho polinomio “aproximante” de grado 2 es el siguiente (deriva el polinomio P y verás como sus derivadas hasta orden 2 coinciden con las de la función f ) P (x) = f (a) + f (a)(x − a) + f (a) (x − a)2 2! Veamos qué pasa con una función concreta.0. Por tanto el polinomio “de aproximación” de grado 2 es el siguiente: P2 (x) = f (0) + f (0) x + =1− 1 2 x 2 f (0) 2 x 2! Si dibujamos ahora las funciones f . (n + 1)! . Plot[{f[x].

Se trata del comando Series. sabemos que el punto c que nos da el error también está en ese intervalo.0. Volvamos al ejemplo anterior: Si trabajamos en el intervalo [−π . y que x en valor absoluto vale a lo sumo π . representa que los términos que faltan son todos de grado mayor o igual que tres. En nuestro ejemplo. para comparar la función coseno y el correspondiente polinomio de Taylor de grado 4 en cero haremos lo siguiente: .{x. cuya sintaxis es Series[función. es 1.2}] Out[2]= 1− x2 + O[x]3 2 verás como. quedando sólo el polinomio de Taylor.a. si pruebas In[2]:= Series[Cos[x]. π ] y queremos usar llamado resto de Taylor. aparece al final el orden de error (O[x]3 ). Si quieres usar directamente el resultado (sin que aparezca el orden del error) puedes utilizar el comando Normal[expresión] Este comando simplemente elimina el orden de error de la expresión que obtenemos con el comando Series.{x. P2 en lugar de la función coseno. y para ello. acotaremos la derivada de orden n + 1 en el intervalo (n + 1)! considerado. además del desarrollo del polinomio.49 El teorema anterior nos permite incluso acotar el error que estamos cometiendo: basta acotar el f (n+1) (c) . sen(x). Mathematica tiene una orden que permite calcular directamente el polinomio de Taylor centrado en un punto a. Vamos a calcular el valor máximo que puede alcanzar: (c) 3 x | 3! sen(c) 3 = x 3! 1 ≤ π3 6 f | cos(x) − P2 (x)| = | La última acotación se basa en que el valor máximo que alcanza la tercera derivada.grado}] Volviendo al ejemplo anterior.

c}.{x.PlotStyle->RGBColor[1.5 -3 -2 -1 1 2 3 -0. g[x_]=Normal[Series[f[x].0].0.{x. En lo que sigue a será el punto donde centramos el desarrollo de Taylor. {n. Prueba a cambiar la función. el punto donde desarrollamos.RGBColor[0.b.0]] Show[ %. la variable orden será el grado hasta el que queremos llegar y f la función que vamos a desarrollar: In[5]:= Clear[“Global *”]. b=-2Pi.{x.4}]].orden}]]. Plot[{f[x].1. orden=10.Pi}.-Pi.b.0.. Con ella podemos calcular de una vez el desarrollo de Taylor de varios órdenes y comprobar como se va pareciendo cada vez más a la función.n}]]...1]}] 1 0. f[x_]=Cos[x].0. c] el intervalo donde queremos representarlo.] que hemos escrito calcula los desarrollos antes de que hagamos el dibujo. [b.50 Fórmula de Taylor In[3]:= Clear[“Global *”]. Plot[Evaluate[ Table[Normal[Series[f[x]..{x.0. c=2Pi.2. % %] La orden Evaluate[Table.n}].….0. Si queremos dibujarlos tenemos que quitar los errores y usar la orden Plot de la lista que acabamos de hacer.0. f[x_]=Cos[x].{x. a=0.c}] Plot[f[x].10}] el resultado son todos los desarrollos de la función coseno centrados en 0 y de orden 1.Graphics - Ya habíamos visto la orden Table.g[x]}.10. el intervalo donde se representa.{n.{x.a. PlotStyle->{RGBColor[1.5 -1 Out[3]= . . Si escribes In[4]:= Table[Series[Cos[x].

0. {x.0].2 Pi}].10}] In[7]:= Clear[“Global *”].3}]]. a=0.51 Hasta aquí hemos visto como comparar la gráfica de una función con la de su polinomio de Taylor. {n. Un ejemplo sencillo de como funciona sería el siguiente: In[6]:= Animate[Plot[Sin[x*t]. f[x_]=Cos[x]+Sin[x].PlotRange->{-3.1.n}]]}. RGBColor[0.1}] Cuando se ejecuta la orden anterior.a. La orden Animate permite dibujar la gráfica de una función en función de un parámetro para después poder reproducirlo como una secuencia de fotogramas (una “película”).Normal[Series[f[x]. Ejercicio 1. 20]. Lo mismo que los dos ejercicios anteriores para la función logaritmo neperiano (centrando en a = 1) y para ln(2).orden. √ e = e 2 por el valor obtenido usando 1 .1]}.{t.1. orden=30.0. Prueba a aumentar el grado y a usar intervalos cada vez más grandes.0.{x.c}. Prueba a pinchar dos veces en la última gráfica que ha aparecido.{x. b=-2Pi. Aproxima la función exponencial (f (x) = ex ) mediante su polinomio de Taylor de grado 4 centrado en 0 en el intervalo [−20. Ejercicio 3. PlotStyle->{RGBColor[1. Acota el error que estás cometiendo al aproximar el polinomio de Taylor de orden 4 centrado en cero. Mathematica dibuja la función y los polinomios de Taylor de orden 1 hasta 30. Ejercicio 2. Animate[Plot[Evaluate[ {f[x].b. c=2Pi.

Como siempre también puedes usar la paleta para escribir las integrales. tanto integrales indefinidas (es decir. áreas y volúmenes de sólidos de revolución. Integrales definidas e indefinidas En esta práctica aprenderemos a calcular integrales con el programa Mathematica . La primera de las órdenes mencionadas calcula primitivas o integrales definidas en un intervalo [a. primitivas) como integrales definidas. El objetivo es poder calcular áreas entre curvas. b]: Integrate[función.x] Out[1]= Sin[x] In[2]:= Cos[x]dx Out[2]= Sin[x] .b}] Por ejemplo..{variable.1. In[1]:= Integrate[Cos[x].a. longitudes de curvas. Básicamente hay dos comandos para integrar funciones en Mathematica : Integrate y NIntegrate..variable] Integrate[función. sin que el cálculo de primitivas sea el principal escollo.CAPÍTULO 7 Integración 7.

podemos obtener su valor en un punto: In[4]:= N[SinIntegral[2].1 Integrales definidas e indefinidas 53 Mathematica puede obtener prácticamente cualquier primitiva calculable por métodos elementales (integración por partes.b}] En el ejemplo anterior.0. cambio de variable.{variable. pero esta primitiva no siempre puede calcularse (en el sentido de tener una expresión de la primitiva en términos de funciones “elementales”).a.605413 Para obtener un valor numérico del resultado se puede usar el comando N: N[Integrate[función. aunque no conozcamos la función que nos aparece. sabemos que toda función continua admite primitiva. Por otro lado. trigonométricas.7.a.. In[6]:= NIntegrate[Exp[x3 +x]. al integrar algunas funciones en el resultado que obtenemos aparecen funciones que no conocemos: In[3]:= Out[3]= Sin[x] dx x SinIntegral[x] En este caso. Por eso..).2}] Out[6]= 1846.7] Out[4]= 1. integración de funciones racionales. Esto es precisamente lo que hace el comando NIntegrate NIntegrate[función.{x.{x.36 .b}]] Puede pasar que Mathematica no sepa calcular la primitiva de una función: In[5]:= Exp[x3 + x]dx Out[5]= Ex 3 +x dx En este caso siempre podemos intentar aproximar el valor de la integral.

y volúmenes y superficies de cuerpos de revolución. 3. 2. área limitada por las curvas y = x 2 e y 2 = 8x área limitada por y = xe−x . Ejercicios. mientras que el primer comando intenta aproximar el valor de la integral sin calcular una primitiva.0. área comprendida entre la curva y = tg(x). b]. estos métodos pueden tener problemas cuando la función oscila mucho..] que N[Integrate[. . área de la figura limitada por la curva y = x 3 − x 2 y el eje OX. tecleando In[7]:= NIntegrate[Cos[x]. el eje OX y la recta x = π /3..2. y = 0 y la gráfica de la función f : R → R definida por f (x) = 1 . El programa intenta calcular una aproximación con métodos numéricos. la ordenada en el punto x = 0 y la ordenada en el máximo. • Longitudes de curvas: Sea f una función de clase 1 en el intervalo [a. (1 + x 2 )2 2 7.Pi}] te darás cuenta que Mathematica “protesta”..{x. el volumen del sólido generado al girar el área bajo la curva y = f (x) respecto del eje OX es b V =π a f (x)2 dx y el volumen del sólido generado al girar dicha área respecto al eje OY es b V = 2π a xf (x) dx. En estos casos pueden aparecer respuestas erróneas. Calcular: 1. b] → R una función continua. • Volúmenes de sólidos de revolución: Sea f : [a. con funciones a las que podemos calcular fácilmente una primitiva. Curiosamente.. 4.]]. 5. áreas y volúmenes Algunas de las aplicaciones de la integral que se han visto en las clases teóricas son calcular longitudes de curvas. La longitud del arco de la curva y = f (x) entre x = a y x = b es b l= a 1 + [f (x)]2 dx.54 Integración Observa en este ejemplo que no es lo mismo usar el comando NIntegrate[. En el segundo caso Mathematica tiene que saber calcular una primitiva para después calcular cuanto vale. el comando NIntegrate no siempre funciona bien. Longitudes. el eje OX. x = 1. área del recinto limitado por las rectas x = 0.

Calcular el volumen del sólido generado al rotar respecto al eje OY las siguiente curvas: 1. o la paleta). 3. En este segundo caso. y = 3 (x 2 + 2)3/2 . 3] 1 . Calcular la longitud de las siguientes curvas: 1. Con el programa Mathematica . 4. Como recordarás de las clases teóricas. x ∈ [0. Es lo que se conoce como Integración impropia. x ∈ [0. x ∈ [0. Con la misma orden Integrate se pueden calcular integrales impropias. Integrales impropias. 1] y = 1 (ex + e−x ). escribiríamos . 2. el área de la superficie generada haciendo girar alrededor del eje OX el arco de curva y = f (x) en [a. ln 3] Ejercicio 2. Simplemente prueba 1 2 con una función como f (x) = √ en el intervalo [−1.3 Integrales impropias. x ∈ [0.3. x ∈ [0. 7.7. 3] y= Ejercicio 3. x ∈ [1. +∞[ (en Mathematica para escribir infinito usamos +Infinity o -Infinity. Calcular la superficie de una esfera de radio R. π /4] alrededor del eje OX. Ejercicio 1. 2. b] → R una función de clase 1. el trabajar con integrales impropias no supone ningún problema. π 3] y = cos(x). 55 • áreas de sólidos de revolución: Sea f : [a. 1] 1 + x2 √ 2 y = ex . b] es igual a b S = 2π a f (x) 1 + [f (x)]2 dx. 3] 2 1 Ejercicio 4. x ∈ [0. Calcular la superficie de la figura que se obtiene al girar la función y = tg(x). x ∈ [0. puede extenderse a funciones continuas definidas en intervalos de longitud infinita. ya que las trata exactamente igual que las integrales de funciones continuas en intervalos cerrados y acotados. la integral que en principio se define para funciones continuas en intervalos cerrados y acotados. 2. x ∈ [1. 1] o con la función g(x) = e−x en 2 1−x [0. Calcular el volumen del sólido generado al rotar respecto al eje OX las siguiente curvas: 1. 2. 1. y a funciones que no están acotadas en un intervalo de longitud finita. y = sec(x). y = 1/x. π ] 2 y = 9 − x2 y = ex . 3.

56 Integración In[8]:= +∞ Exp[−x2 ]dx Out[8]= √ 0 π 2 Intenta calcular las integrales anteriores en el intervalo dado y después intenta calcular una primitiva de esas funciones. Ejercicio. +∞]. Como verás. 2. También podemos usar las fórmulas para calcular longitudes. x2 El volumen y la superficie lateral del sólido obtenido al girar la gráfica de la anterior función respecto del eje OX. supongo. +∞]. x 3. la primitiva de la primera función ya la conocías. Calcular: 1. La integral de f (x) = 1 con x ∈ [1. áreas y volúmenes con integrales impropias. 1 con x ∈ [1. Ídem a los dos anteriores con g(x) = . no conocías. en cambio en la primitiva de la segunda aparece una función que.

La principal aplicación de la representación gráfica de una función de dos variables será dar una idea aproximada de la variación de dicha función.xmin . g. {x. Para definir la función sen(xy) haremos lo siguiente: In[1]:= f[x_. El comando que sirve para representar gráficas de funciones de dos variables es Plot3D[función de x. suele ser cómodo asignarle un nombre (normalmente f .CAPÍTULO 8 Gráficos en 3D 8.xmax }.1.y_]=Sin[x*y] Out[1]= Sin[x y] y usaremos f de igual forma a como lo hacíamos con funciones de una variable. Ahora aprenderemos a representar gráficamente funciones reales de dos variables.ymin .y. El comando Plot3D En el segundo capítulo pudimos comprobar que Mathematica es una herramienta muy potente para “dibujar” gráficas de funciones de una variable. lo que será especialmente útil para buscar extremos.ymax }] Veamos un ejemplo: . h…). Al igual que para funciones de una variable.{y.

.5 0 -0.-Pi. ViewPoint Establece el punto de vista desde el que se dibujará la gráfica. Opciones del comando Plot3D Mesh->True/False Se dibuja (True) o no (False) la retícula o malla sobre la que se construye la gráfica.-Pi. A dicha ventana se accede a través del menú Input.y].Pi}.{x. no aparecerá gráfico alguno. En el ejemplo anterior: In[3]:= Plot3D[f[x. pero aumentará considerablemente el tiempo empleado por Mathematica para realizarlo.Pi}] 1 0. {y. submenú 3D ViewPoint Selector.Shading->False] PlotPoints->número de puntos Representa el número de puntos que usará Mathematica para dibujar la gráfica.{y.-Pi.58 Gráficos en 3D In[2]:= Plot3D[f[x.Pi}.SurfaceGraphics - 8.y].Pi}.-Pi. Un ejemplo: In[4]:= Plot3D[f[x.{x. La forma de usar esta opción será “pegarlo” desde una ventana que automatiza el proceso.Pi}. {y. Un número muy alto producirá un gráfico más “suave”.5 -1 0 -2 0 -2 2 2 Out[2]= .1.1. {x. Si unimos las opciones Mesh->False y Shading->False.-Pi.Pi}.Mesh->False] Shading->True/False Se colorea (True) o no (False) la malla anterior.y].-Pi.

f (x. Curvas de nivel.y.xmin .-2.-2.2.ymax }] Por ejemplo.ymin . las opciones del comando ContourPlot son: ContourShading->False Dibuja sólo las curvas de nivel y no utiliza la escala de grises.8.-2. In[5]:= ContourPlot[(3 x2 + y2 ) Exp[1-x2 -y2 ]. 2. permitiendo ver las zonas de crecimiento y decrecimiento de dicha función. y ∈ [−2. Una forma cómoda de ver la gráfica de una función es mediante curvas de nivel.{y. y ∈ [−1.ContourGraphics - Entre otras.ContourShading->False] . π ].2}. y) = x2 xy con x. h(x. y) = sen(x − 2xy) con x ∈ [0.2 Gráficos de contorno. Ejemplo: In[6]:= ContourPlot[(3 x2 + y2 )Exp[1-x2 -y2 ].{y. π ].2}. {x. Curvas de nivel. y ∈ [−π . g(x. {x.xmax }. + y2 8.2}. Prueba las opciones anteriores con las siguientes funciones de dos variables: 1. 3. y) = (x 2 + y 4 )e1−x 2 −y 2 con x. El comando que representa funciones de dos variables mediante curvas de nivel es ContourPlot[función de x.2}] 2 1 0 -1 -2 -2 -1 0 1 2 Out[5]= . Se trata de representar en el plano una figura tridimensional como es la gráfica de una función de dos variables.{y.-2. Gráficos de contorno. 1]. 2].{x. 59 Ejercicio.

y = y(t). Representa los gráficos de contorno de las funciones del ejercicio anterior. comparando la información que obtienes de una y otra forma. Ejercicio 1.5 1 4 2 0 Out[7]= . Curvas y superficies. Consideremos la función f : [−2. Gráficos paramétricos. Al igual que en Plot3D.5 0 0. un número muy alto producirá un gráfico más “suave”.t/3}. 2 −y 2 . 2] → R dada por f (x.a. pero aumentará considerablemente el tiempo empleado por Mathematica para realizarlo. Ejercicio 2. 2]×[−2.Cos[t]. Ahora veremos como representar curvas alabeadas (esto es.0. y(t).3. z(t)}. curvas en el espacio) y superficies paramétricas. b] usamos la orden ParametricPlot3D[{x(t).{t. Cuando tenemos las ecuaciones paramétricas de una curva en el espacio x = x(t). para dibujar una hélice: In[7]:= ParametricPlot3D[{Sin[t]. Ya aprendimos a representar gráficamente curvas planas expresadas en forma paramétrica. Utiliza los comandos anteriores para obtener información sobre la ubicación de sus posibles extre- 8.{t. z = z(t) con t ∈ [a.5 -1 0.Graphics3D - . El comando de Mathematica para ello es ParametricPlot3D.5 0 -0.b}] Por ejemplo.5Pi}] -1 1 -0. y) = (x 2 +y 4 )e1−x mos relativos.60 Gráficos en 3D PlotPoints->número de puntos Representa el número de puntos que usará Mathematica para dibujar la gráfica.

Superficies de revolución En el caso particular en que la superficie que queremos representar se obtiene girando una curva respecto a un eje se puede usar el paquete SurfaceOfRevolution. v).b}] La primera orden dibuja la superficie de revolución obtenida al girar la curva f en el plano XZ entre a y b. y = y(u.a.x2 .c. Si se quiere girar respecto a la recta que une el origen con el punto {x1 .-Pi/2.a.{t.0.5 -1 1 0.5 1 Out[8]= .3 Gráficos paramétricos.{t.5 0 -0.2 Pi}.h(t)}.3. v). 61 Si lo que tenemos son las ecuaciones paramétricas de una superficie x = x(u. y(u.b}] SurfaceOfRevolution[{f(t). {u.{v.d}] Dibujemos una esfera: In[8]:= ParametricPlot3D[{Cos[u]Cos[v].Pi/2}] 1 0. v)}.g(t)}. v). z(u. La segunda y la tercera funcionan análogamente pero estamos dando una curva en el plano XZ (segundo caso) o en el espacio (último caso).5 0 0. Curvas y superficies.5 0 -0.5 -1 -1 -0. Sin[u]Cos[v].b}] SurfaceOfRevolution[{f(t).b}.Sin[v]}. v) con u ∈ [a. En cualquier caso el giro se hace respecto al eje Z.Graphics3D - 8. Para cargarlo se escribe In[9]:= <<Graphics`SurfaceOfRevolution` y desde este momento está disponible la orden SurfaceOfRevolution[f(x).{u. b] y v ∈ [c.a. z = z(u. v).1.x3 } se puede utilizar la siguiente opción: .a.{x. d] se usa ParametricPlot3D[{x(u.8.g(t).{v.

Graphics3D - Si quisiéramos girar respecto a la bisectriz del primer octante.1}] 4 2 0 -2 -4 4 2 0 -2 -4 -4 -2 0 2 4 Out[11]= . o sea. Un cono se consigue fácilmente girando una recta: In[10]:= SurfaceOfRevolution[2 x.{x.-2.2}.b}.-2.x3 }] Veamos algunos ejemplos.1. RevolutionAxis->{x1 .1.a.Graphics3D - .62 Gráficos en 3D SurfaceOfRevolution[f(t).1): In[11]:= SurfaceOfRevolution[2x.{t. alrededor de la recta que pasa por el vector (1.2}] -2 2 1 0 -1 -2 4 -1 0 1 2 2 0 -2 -4 Out[10]= . RevolutionAxis->{1.x2 .{x.

5 -1 1 0.AspectRatio->1] 2 0 -2 -5 -2. Ejercicio 1. AspectRatio->1] 1 0. 63 Dibujar una esfera o un elipsoide es ahora simplemente cuestión de girar media circunferencia o media elipse: In[12]:= SurfaceOfRevolution[{Cos[x]. .-Pi.5 0 0.  x(t) = sen(t)     y(t) = sen(2t)    z(t) = t/5 con t ∈ [0. {x. Curvas y superficies.3 Gráficos paramétricos.5 1 Out[12]= . las mayoría de las opciones del comando Plot3D siguen siendo válidas.5 Out[13]= .5 0 -0. como habrás visto en el último ejemplo.Graphics3D - In[13]:= SurfaceOfRevolution[{5Cos[x].{x. Representar las siguientes curvas y superficies: 1.5 -1 -1 -0.-Pi.3Sin[x]}.5 5 -5 -2.5 0 2.5 0 -0.Pi}.Sin[x]}.5 0 5 2.Pi}.Graphics3D - Por último comentar que.8. 5π ].

v) = sen u     y(u. v) = v con u. v ∈ [0. ¿Cómo se puede dibujar un cilindro? ¿Y un cono truncado?. 5]. obtenida al girar una circunferencia. 3. 2π ]. v) = sen(v)  x(u. π ] y v ∈ [0. Ejercicio 2. Ejercicio 3.5 0 -0. se la llama toro. v) = sen(u)(3 + cos(v))    z(u. v) = sen v    z(u.5 -1 0 -2 0 -2 2 2 . con u ∈ [−π . 1 0. v) = cos(u)(3 + cos(v))     y(u.  x(u. A la figura siguiente. Intenta dibujarla.64 Gráficos en 3D 2.

y) = sen x cos y 2 : ∂x 2 ∂y ∂x∂y . Para funciones escalares de varias variables (esto es. respecto de y n2-veces…pudiendo omitirse el número de veces si éste es 1. También puede usarse la paleta. funciones que “salen” de Rn y “llegan” a R).n1}. de funciones de varias variables. hessianos.n2}.n] obtenemos la derivada n-ésima de la función f ..{y.{x.CAPÍTULO 9 Extremos relativos y condicionados En esta práctica veremos cómo calcular extremos relativos y condicionados de funciones de varias variables. Calculemos como ejemplo ∂2f ∂3f y . donde f (x. Derivadas parciales El primer objetivo será aprender a calcular derivadas parciales. Ya conocemos de prácticas anteriores la forma de calcular derivadas de funciones de una variable: mediante el comando D[f[x].y.x. gradientes.1. y aplicar todo ello al cálculo de extremos relativos y condicionados.…] nos devuelve la derivada parcial de f respecto de x n1-veces. 9. el comando D[f[x. En la figura tienes los símbolos que nos permiten escribir derivadas de cualquier orden y derivadas de segundo orden..…]. Se trata de usar el programa Mathematica como apoyo para realizar los cálculos necesarios en los métodos de optimización vistos en las clases teóricas.

1) sus derivadas parciales. La definición de derivada parcial respecto a la primera variable era ∂f f (1 + h. el hessiano se calcula de forma análoga: In[3]:= ∂x. Por ejemplo para calcular el gradiente de una función de varias variables basta construir el vector formado por las derivadas parciales primeras de la función respecto de todas las variables: In[2]:= J[x_.y f[x.y f[x.y_]=Sin[x] Cos[y2 ].y] ∂y.y] Out[1]= 2 y Sin[x]Sin[y2 ] -2 y Cos[x] Sin[y2 ] Evidentemente esta no es la forma más cómoda de calcular una derivada parcial de orden 15.x f[x.{x.∂y f[x.y] ∂x.y]. ∂x. 1) − f (1) (1.8}.2.66 Extremos relativos y condicionados In[1]:= f[x_. Dibujemos la gráfica de la función y la imagen de cada una de esas dos rectas: . -2 y Sin[x] Sin[y2 ]} Usando la paleta. Comencemos. por ejemplo.y_]={∂x f[x.y f[x.y f[x.7}].y] Recuerda que las derivadas cruzadas de segundo orden coinciden para funciones “suficientemente buenas”. 9.y]} Out[2]= {Cos[x]Cos[y2 ].y] ∂y. Para eso es mejor utilizar D[f[x. vamos a intentar representar gráficamente el plano tangente y cómo se obtiene a partir de las derivadas parciales. Representación gráfica Ya que sabemos cómo se calculan las derivadas parciales de una función.y] ∂x.x.{y.x f[x. 1) y es esa función (de una variable) la que derivamos.y_]=1-(x2 +y2 ) y vamos a calcular en el punto (1. con la función In[4]:= f[x_.y]. La segunda derivada parcial tiene una definición análoga. 1) = l´ ım ∂x h h→0 Lo que hacemos es trabajar únicamente con la función definida sobre la recta que pasa por (1.

t. % %.{t.-2.Graphics3D 2 1 0 -1 -2 0 -1 -2 -3 -4 0 0.1]}.5 1 1. %] 0 2 -2 -4 1 -6 -2 0 -1 0 -1 1 2 -2 Out[5]= .2}] Show[ % % %.5 0 2 0 -1 0 1 -1 -2 -3 -4 Out[7]= .Graphics3D - 2 -2 1.Graphics3D - .{t.5 1 0.y].-2.2 Representación gráfica 67 In[5]:= Plot3D[f[x.t]}.f[t.5 2 Out[6]= .2}.9.1.2}] ParametricPlot3D[{t.{y.Mesh->False] ParametricPlot3D[{1.{x.2}.-2.f[1.-2.Graphics3D - Out[8]= .

0.y_]=∂y f[x.f[1. 1)(y − 1) ∂x ∂y Para acabar nos falta dibujar el plano tangente y unirlo con la gráfica anterior: In[9]:= parcial1[x_.1](y-1)}.Graphics3D - 2.5 1 0. {x. %] Out[9]= -2x Out[10]= -2y 1.y_]=∂x f[x.PlotPoints->3] Show[ % % % %.5 -5 -2 -1 0 1 2 -2 -1 0 2 1 Out[12]= .Graphics3D - Ejercicio. ¿Cómo se podría hacer esto con derivadas direccionales en lugar de derivadas parciales? .1]+ parcial1[1.68 Extremos relativos y condicionados Los vectores tangentes a las dos curvas que hemos dibujado son los dos vectores que generan el plano tangente.y] ParametricPlot3D[{x.1](x-1)+ parcial2[1.5 2 2 0 -2 -4 Out[11]= .{y.y] parcial2[x_.0. Por tanto su ecuación será z = f (1.5 0 -2. 1) + ∂f ∂f (1.2}.2}. 1)(x − 1) + (1.y.5 1 1.5 0 2 0 0.

2}] 4 2 0 -2 -4 -2 -1 0 1 2 -2 -1 2 1 0 Out[15]= .-2.y].2}.{x. In[16]:= ContourPlot[f[x.-2. “Campos” de vectores Sabíamos que el gradiente de una función en cada punto era el vector formado por las derivadas parciales e indicaba la dirección de máxima pendiente. por tanto el gradiente debería ser perpendicular a estas.2 Representación gráfica 69 9.Graphics - .9. La opción ColorFunction->Hue utiliza colores para diferenciar las distintas alturas en lugar de la escala de grises que habíamos visto.-2.1.2.{x.Graphics - Dibujemos ahora las curvas de nivel.{y.2}.-2. Recordemos que el comando ContourPlot dibujaba las curvas de nivel de la gráfica de una función.y_]=2(x+y)Cos[x] Out[14]= 2(x+y)Cos[x] In[15]:= Plot3D[f[x. Para verlo necesitamos algunos comandos que podemos usar cargando el paquete PlotField: In[13]:= <<Graphics`PlotField` In[14]:= f[x_.{y.y]. ColorFunction->Hue] 2 1 0 -1 -2 -2 -1 0 1 2 Out[16]= .2}.

Estos son ∂y ∂x In[18]:= PlotHamiltonianField[f[x.2}.Graphics - . ).{y.-2.70 Extremos relativos y condicionados La orden PlotGradientField dibuja los vectores ( (ScaleFunction y ScaleFactor) no son necesarias.y].-2. ScaleFunction->(.1#&).{x. ScaleFactor->None] Out[17]= .1#&).2}. ∂f ∂f .{y. Las dos opciones que aparecen ∂x ∂y In[17]:= PlotGradientField[f[x.-2.2}.Graphics - También existe la orden PlotHamiltonianField que dibuja los vectores (− perpendiculares al gradiente y por tanto nos indican las curvas de nivel. ).{x.2}.y].-2. ScaleFunction->(. ScaleFactor->None] Out[18]= . ∂f ∂f .

0)} → R dada por f (x.3 Extremos relativos. z) = (x + y)z . si aparecen valores propios de distinto signo es indefinida y hay punto de silla. viendo si es definida. . Se pide: (i) Calcúlese el gradiente de f en todo punto así como la matriz hessiana. Sea f : R2 → R una función diferenciable con continuidad. Extremos relativos. %17] 2 1 0 -1 -2 -2 -1 0 1 2 Out[19]= . con lo que una vez calculados éstos nos dedicaremos a estudiar la matriz hessiana en ellos. 71 In[19]:= Show[ %16. El método para encontrar extremos relativos de funciones de varias variables consiste en buscar primero los puntos críticos. Si v = f (x. Los resultados que conocemos nos aseguran que todos los puntos extremos de una función están entre los puntos críticos..Graphics - Ejercicio 1. y. y) + (x. ∀x. 0)}. 2. la matriz es semidefinida y el criterio no decide. y. y) = log(x 2 + y 2 ) para todo (x. y) = 0 ∀(x. y ∈ R+ . y) = sen(xseny). semidefinida. y. y) donde x = ρ cos θ. Sea f : R2 \ {(0. z) = x y+z .9. y después estudiar la matriz hessiana en esos puntos. (ii) Compruébese que ∂2f ∂2f (x. y) ∈ R2 − {(0. puntos donde se anula el gradiente. Para ello podemos usar el criterio de los valores propios: si todos son del mismo signo. f (x. z ∈ R f (x. Calcular las derivadas parciales de: 1. es decir. y) ≠ (0. ∀x ∈ R+ . y ∈ R Ejercicio 2.. 3. la matriz es definida y hay extremo. 0). z ∈ R f (x. 2 ∂x ∂y 2 Ejercicio 3. y = ρsenθ. comprobar que ∂2f ∂2f ∂2v 1 ∂2v 1 ∂v + = + 2 + 2 2 2 ∂x ∂y ∂ρ ρ ∂θ 2 ρ ∂ρ 9. indefinida. en otro caso.3. ∀x.

o es un punto de mínimo. ∂y z} ∂x. {x ->1. {6. Así. y ->1}} Hemos obtenido así 4 puntos críticos entre los que estarán los extremos. Calculemos ahora los valores propios de la matriz hessiana en los cuatro puntos críticos obtenidos (observa la utilización del comando /. los puntos críticos 2. y ->-1}.o. (−2. el 4.y_]=x3 + 3 x y2 -15 x -12 y z=f[x. 18}.{x ->-1. 2). {6. pcrit.y] correspondientes a los cuatro puntos críticos. basta teclear . por último. y ->2}.y]].y z Para calcular los puntos críticos podemos usar el comando Solve. tiene sus dos valores propios negativos.{x ->2. Primero definimos la función. De esta forma. Si queremos saber lo que vale la función f sobre sus puntos críticos. {-6.-18}.o y 3. -18}. −1). asignamos la lista de valores que hay en pcrit (que son los puntos críticos de f ) al comando Eigenvalues[H[x.x z ∂y.72 Extremos relativos y condicionados Ejemplo 1: Calculemos los extremos relativos de la función f (x. guardaremos el resultado que nos de Solve en una variable. (−1. −2) y (1. 18}} El comando /.y_]= ∂y. ya que el gradiente está formado por polinomios de grado bajo. en el caso anterior.y] In[21]:= J[x_.y]==0. y ->-2}.x z ∂x. y). que mas tarde usaremos: In[22]:= pcrit=Solve[J[x. con lo que es definida negativa y por tanto hay máximo. que calcula los valores propios de la matriz hessiana en un punto (x. lo que hemos obtenido es una lista formada por cuatro parejas de valores propios de H[x. que ahora comentaremos) In[23]:= Eigenvalues[H[x. ya que sobre ellos la matriz hessiana es indefinida. son puntos de silla. su gradiente y su hessiano: In[20]:= f[x_.{x.y z H[x_. y) = x 3 + 3xy 2 − 15x − 12y.y]] /. pcrit Out[23]= {{-6. sirve para asignar valores.y_]={∂x z.y}] Out[22]= {{x ->-2. la matriz hessiana en el primer punto crítico.

9. -28} que nos da una lista con los valores de f en los puntos críticos. mínimo valor relativo -28 en (2. y) = (x 2 + 3y 2 ) e1−x 2 −y 2 .y_]= ∂y. 73 In[24]:= f[x. ∂y z} ∂x.y]/.y] In[26]:= J[x_.3 Extremos relativos.y_]=(x2 + 3 y2 ) Exp[1-x2 -y2 ]. y dos puntos de silla en (−1. .-1]. 1). tenemos dos posibilidades. Ejemplo 2: Extremos relativos de f (x. −2) y (1. Mathematica informa que no puede resolverlo. En este punto.pcrit Out[24]= {28.x z ∂x. y NSolve (igual que Solve o Reduce) sólo sirven para polinomios y funciones sencillas. 26.y_]={∂x z.x z ∂y. -26. f[-1. Comenzamos definiendo f . −1).y z H[x_. pues aparecen exponenciales. y calculando el gradiente y la matriz hessiana: In[25]:= Clear[“Global *”] f[x_.-2].y z Si intentamos calcular los puntos críticos resolviendo el sistema J[x. etc… Podemos resumir diciendo que la función f tiene máximo valor relativo 28 en el punto (−2. y] == 0 con la orden NSolve. La primera. 2). o bien escribir directamente f[-2. z=f[x. trazar la gráfica de f (como superficie o con curvas de nivel) para tener una idea de dónde están los extremos. y usar el comando FindRoot con las aproximaciones iniciales que nos da la gráfica.

74 Extremos relativos y condicionados In[27]:= Plot3D[f[x. y resolver el nuevo sistema que es G[x_.y]==0. x ->0}} .y_]=Simplify[J[x.{x. {x ->0. para convertirlo en un sistema polinómico.-2. y ->0}.y]*Exp[x2 +y2 -1]] Out[29]= {2x(1-x2 -3y2 ).2}. {y ->1.-2.-2.ContourGraphics - A la vista de las gráficas podemos calcular aproximaciones a los extremos y calcularlos con FindRoot. y ->0}.2}] 2 1 0 -1 -2 -2 -1 0 1 2 Out[28]= .-2.{y.{x.y]. pero ¿qué nos asegura que no hay más extremos que no entran en el rango de la función.2}] 2 1 0 -2 -1 0 1 2 -2 -1 0 1 2 Out[27]= .{y.y}] Out[30]= {{x ->-1.2}. pero en este caso sí: basta multiplicar el sistema por e−(1−x polinómico: In[29]:= 2 −y 2 ) (que no se anula).y]==0 serán los puntos críticos de f .y]. {x ->1. La segunda posibilidad es realizar operaciones algebraicas en el sistema de ecuaciones J[x. y ->0}. Esto no siempre puede hacerse. o que no vemos por la imprecisión de los gráficos?. {y ->-1.y]==0. que almacenaremos en la variable pcrit : In[30]:= pcrit=Solve[G[x.2y(3-x2 -3y2 )} Las soluciones de G[x. x ->0}.SurfaceGraphics - In[28]:= ContourPlot[f[x.{x.

2. {-12. Se trata de optimizar una función de varias variables en el conjunto de puntos que verifiquen una cierta ecuación o ecuaciones. f (x.pcrit Out[31]= {{-4. Ejemplo 1: Calculemos los extremos de la función f (x. llamado “sistema de Lagrange”.pcrit Out[32]= {1. y) = (x 2 + y 2 ) ex 2 −y 2 . La función f vale sobre sus puntos críticos In[32]:= f[x.y]]/. 1). después habrá una condición sobre el hessiano equivalente a la condición para extremos relativos.4 Extremos condicionados. Dada una función suficientemente diferenciable. -4}. 0). Usaremos el método de los multiplicadores de Lagrange para calcular extremos condicionados. y una curva o superficie en forma implícita. 4}. 3. f (x. y dos puntos de silla: (−1.y]/. que dará el equivalente a los puntos críticos. −1) y (0. el método consiste en encontrar los puntos de dicha curva o superficie que verifican un sistema auxiliar. Hay que notar que no todas las condiciones son válidas. 4}. y) = x 2 + y 2 − 2x + 4y + 20.9. y) = x 3 + x 2 y + y 2 + 2y + 5. y) = x 2 − y 2 . f (x. pero en la práctica supondremos hecha la comprobación. 0). f (x. sino que se ha de imponer una hipótesis técnica. y) = x 3 y 3 − y 4 − x 4 + xy. 0) y (1. 1.4. {-12.{-4. 3} con lo que. 9. vale 3 en los dos máximos y 0 en el mínimo. 1. z) = x 2 + y 2 + z2 − 2x. Calcular los extremos relativos de las siguientes funciones. Ejercicio. 5. 0. Extremos condicionados. 3. {2 E. 4. 75 Estudiemos el hessiano en los cinco puntos: In[31]:= Eigenvalues[H[x. y. 6 E}. f (x. -4}} Tenemos dos puntos de máximo: (0. un punto de mínimo: (0.

y ->1.y]/. y la función auxiliar de Lagrange In[33]:= f[x_. g[x. ∂y z}.y. Como estamos con ecuaciones polinómicas.x z ∂y. Desafortunadamente. x ->0}. g[x_.lambda] Definimos gradiente y hessiano de la función de Lagrange In[34]:= J[x_. {lambda ->1.lambda_]={∂x z. y ->-1.y_.0}} (observa que pcrit[[1]] nos da el primer punto crítico) .lambda]==0 y g[x. pcrit[[1]]] Out[37]= {{1. y ->0}} Obtenemos 4 puntos críticos. estudiamos la matriz hessiana auxiliar H[x.76 Extremos relativos y condicionados condicionados a la ecuación g(x. J[x.y.{x. y ->0}. ∂x. {lambda ->-1. F[x_.y]==0}.lambda}] Out[35]= {{lambda ->-1.x z ∂x.lambda]==0.y]==0.y.y z H[x_. x ->0}. ∂y.y] z=F[x.∂y g[x.y z y resolvemos el sistema de Lagrange. Comenzamos definiendo la función f . y) = x 2 + y 2 − 1 = 0. y para ver si son o no extremos.y.y_]=x2 + y2 -1. usaremos Solve: In[35]:= pcrit=Solve[{J[x.y]-lambda*g[x. x ->1. In[37]:= nucleo=NullSpace[G[x.lambda] restringida al espacio tangente a la curva en los puntos críticos.y. esto es.y_.y]. no podemos aplicar de una vez la asignación de valores. x ->-1.y_]=x2 -y2 . sino que deberemos ir punto a punto In[36]:= G[x_. {lambda ->1. la condición.y_]= .lambda_]=f[x.y]}}.y_]={{∂x g[x.

y.pcrit[[2]]).(H[x. pcrit[[2]]] Out[39]= {{1. Transpose[nucleo] Out[42]= {{-4}} el tercer punto es un máximo. In[41]:= nucleo=NullSpace[G[x.lambda]/.0}} In[40]:= nucleo. 77 In[38]:= nucleo. pcrit[[3]]] In[42]:= nucleo.(H[x. In[39]:= nucleo=NullSpace[G[x.y]/.lambda]/.9.pcrit[[1]]).y.(H[x.y. Transpose[nucleo] Out[38]= {{4}} luego el primer punto es un mínimo condicionado.4 Extremos condicionados.y]/. .pcrit[[3]]).lambda]/. Transpose[nucleo] Out[40]= {{4}} el segundo punto también es mínimo.

z k1}. vale 1 en los máximos y -1 en los mínimos.y k1.z_]=2x+2y-z+3.z_.z k1}. pcrit[[4]]] Out[43]= {{0. k1=F[x. y.∂y k1. g[x_.x k1. Transpose[nucleo] Out[44]= {{-4}} otro máximo.pcrit[[4]]). {∂y.(H[x.y_.y k1.z_]=x2 + y2 +z2 . -1. z) = 2x + 2y − z + 3 = 0.∂x. El valor de la función en los extremos: In[45]:= f[x. z) = x 2 + y 2 + z2 condicionados a la superficie g(x.x k1.y_.x k1. y. 1} esto es.∂z.lambda_]=f[x.pcrit Out[45]= {-1.y_. F[x_. H[x_.y]/.lambda]/.z].z k1}}.lambda_]={{∂x. Resolvemos el sistema de Lagrange .∂y. 1.z_.∂y.lambda_]={∂x k1. Comenzamos con las definiciones: In[46]:= f[x_.y k1. Ejemplo 2: Calcular los extremos relativos de f (x.lambda].y.y.y.78 Extremos relativos y condicionados In[43]:= nucleo=NullSpace[G[x.1}} In[44]:= nucleo.y_.∂z k1}.z. J[x_.∂x.y]/.{∂z.y_.∂z.z_.y.z]-lambda*g[x.

con valor In[51]:= f[x.z.z.z. (H[x. g[x.{x.z]/. 0.∂y k2. lambda ->-(2/3)}} y estudiemos el hessiano de la función auxiliar en el espacio tangente a la superficie.9. Primero calculamos una base de dicho tangente con el comando NullSpace: In[48]:= k2=g[x.z]==0}. 10.z].z]/. 0}} Ahora calculamos la matriz hessiana restringida al tangente In[49]:= M=nucleo.lambda}] Out[47]= {{x ->-(2/3).y. 1. -2}.∂z k2}}. z ->(1/3). Transpose[nucleo] Out[49]= {{10.pcrit[[1]]).z_]={{∂x k2.pcrit Out[51]= {1} Ejercicio 1: Calcular los extremos condicionados en los siguientes casos: . 79 In[47]:= pcrit=Solve[{J[x.39445.y. pcrit[[1]]] Out[48]= {{1. 4}} y estudiamos si es definida mediante sus valores propios In[50]:= N[Eigenvalues[M]] Out[50]= {3.4 Extremos condicionados. {-1.6056} Como ambos son positivos.lambda]/. nucleo=NullSpace[G[x. G[x_.lambda]==0.2}.y.y.y. {-2. y ->-(2/3). el único punto crítico calculado es un mínimo condicionado.y_.y.y.

80 Extremos relativos y condicionados 1. f (x. (Sol: se trata de la mitad de un hexágono regular) . 2. Calcular las dimensiones de un ortoedro de superficie lateral 2. f (x. Calcular la profundidad del canal y el ángulo que deben formar las paredes con la horizontal para que la superficie mojada sea mínima. f (x. y) = x 3 + xy 2 condicionados a xy = 1. determinar el que tiene superficie lateral mínima. para que su volumen sea máximo 4. Se quiere construir un canal cuya sección sea un trapecio isósceles de área dada S. Hallar la mínima distancia de (0. z) = xyz condicionados a x 2 + y 2 + z2 = 1. 2. 3. 3. Entre todos los ortoedros de volumen 1. y) = x 2 − xy + y 2 condicionados a x 2 + y 2 − 4 = 0. Ejercicio 2: 1. y. 0) a x 2 − y 2 = 1.

y) d(x. Dado que el comando Integrate intenta calcular una primitiva y después evaluar en los extremos de integración. la principal diferencia entre una y varias variables no es tanto la función a integrar como el recinto de integración (por ejemplo. y) en recintos de uno de los siguientes tipos: A = {(x. Veremos en esta práctica como se pueden escribir los recintos de integración en Mathematica . en caso de que sólo nos interese una aproximación numérica.y) = A a g1 (x) f (x. aprovechando para ello las capacidades gráficas del programa.y) = B a h1 (x) f (x. En general. y) dy dx y b h2 (x) f (x. no hay una manera directa de decirle a Mathematica que queremos integrar en un círculo). es más lento que el comando NIntegrate. Básicamente sólo sabemos calcular la integral de una función f (x. y) ∈ R2 : a ≤ x ≤ b. y) dx dy La orden para calcular el valor de una integral doble es Integrate o.CAPÍTULO 10 Integrales múltiples Ya conocemos el comando Integrate para realizar integrales de funciones de una variable y. NIntegrate.2) f (x. La orden completa es . y) d(x. h1 (y) ≤ x ≤ h2 (y)} Las correspondientes integrales serían. b g2 (x) (10. para integrales triples los comandos serán totalmente análogos. y) ∈ R2 : a ≤ y ≤ b. como podrás imaginar por lo visto hasta ahora. vía el teorema de Fubini. g1 (x) ≤ y ≤ g2 (x)} o B = {(x. Expondremos sólo el caso de dos variables.1) (10. pasar a varias variables sólo será cuestión de poner algunas variables más y alguna coma.

y) = x en el conjunto A = {(x. La orden es ImplicitPlot[ecuación. y) = x 2 +y 2 en [0. para lo que nos haría falta dibujar x 2 +y 2 = 1.0.6 0. Por ejemplo.{y. La orden para cargar este paquete extra es: In[2]:= <<Graphics`ImplicitPlot` (observa que no produce ninguna salida).1.c.5}] Out[1]= 280 3 Pasemos a integrales un poco más complicadas. 1].2}.{y. 5] tendríamos que hacer lo siguiente: In[1]:= Integrate[x2 + y2 .{x.{x. En este caso las funciones gi o hi son constantes.{x.Graphics - . El caso más fácil se presenta cuando integramos en rectángulos. necesitamos un paquete de Mathematica para dibujar curvas que vienen dadas por una ecuación (llamada “ecuación implícita”).b}. Supongamos que queremos integrar la función f (x.{x.4 0.5 0.d}] y lo mismo para NIntegrate.b}] donde a y b representan el rango de variación de la variable x. 2]×[1. x ≥ 0. El primer paso es intentar averiguar cómo es el conjunto. y) ∈ R2 : x 2 + y 2 ≤ 1.82 Integrales múltiples Integrate[función. Para ello.0. rango que normalmente tendremos que calcular “a ojo”.a.8 1 -0.1}] 1 0. En nuestro caso In[3]:= ImplicitPlot[x2 +y2 ==1. y ≥ 0}.2 0. si queremos calcular la integral de f (x.a. Ahora ya podemos pedir que nos pinte x 2 + y 2 = 1 para x ∈ [0.5 -1 Out[3]= .

2 0.6 0. es claro cómo podemos poner una variable en función de la otra.8 0. Podemos calcular ahora el valor de la integral: In[5]:= Integrate[x.1}. Para representar esta parte podemos restringir el rango de la imagen con la opción PlotRange (la orden ImplicitPlot tiene básicamente las mismas opciones que la orden Plot). In[4]:= ImplicitPlot[x2 +y2 ==1.{x. Vamos primero a ver los puntos de corte de las ecuaciones y 3 = x.2 0. si ponemos y en función de x.0. Estamos en el caso (2). Calcular la integral de la función f (x. Mathematica dibuja la circunferencia para “y” positivo y negativo. en cambio sólo nos interesa la parte del primer cuadrante. el rango de x va primero.8 1 Out[4]= .83 Cómo se puede ver.Sqrt[1-x2 ]}] Out[5]= 1 3 Como se puede observar el orden para evaluar la integral es de derecha a izquierda. Veamos un par de ejemplos: Ejemplo 1.1}. y) = ex/y . y varía entre 0 y 1 − x 2 .0.1}] 1 0. para un valor concreto √ de x entre 0 y 1. En el primer caso. siempre queda la posibilidad de aproximar el valor de integral. en el conjunto A = {(x. El caso de funciones complicadas no nos debe preocupar.{y.{x.Graphics - Después de ver el conjunto A donde estamos integrando.4 0. si no podemos escribir el dominio de una las formas (1) o (2) tendremos que cambiar de variable nosotros (Mathematica no lo hace automáticamente). Por ejemplo.0. Tenemos la variable x en función de y. interesa cambiar de variable cuando el dominio o la función son complicados. Para integrales en varias variables. y 2 = x y luego las dibujaremos para hacernos una idea de cuál es el dominio de integración: . Observarás que no hemos cambiado a coordenadas polares. y si no se puede resolver directamente.6 0. así que si y depende de x. y) ∈ R2 : 0 ≤ y 3 ≤ x ≤ y 2 }. PlotRange->{0. pues Mathematica se encarga de resolver la integral en la inmensa mayoría de los casos.4 0.

5 -1 In[10]:= Show[graf1.4 0.0.5 0.0.84 Integrales múltiples In[6]:= Needs["Graphics‘ImplicitPlot‘"] In[7]:= Solve[y3 == y2 .6 0.graf2] 1 0.{x.8 0.{y->1}} In[8]:= graf1=ImplicitPlot[y3 ==x.{y->0}. PlotStyle->RGBColor[1.4 0.2 0.4 0.1}.6 0.0]] 1 0.8 1 -0.5 0.4 0.0.6 0.y] Out[7]= {{y->0}.5 -1 .1.8 1 In[9]:= graf2=ImplicitPlot[y2 ==x.2 0.8 1 -0.2 0.{x.2 0.6 0.1}.0]] 1 0. PlotStyle->RGBColor[0.

sin olvidar el cambio a coordenadas polares de la función y la “derivada” del cambio (en este caso ρ): In[13]:= Integrate[ρ ∗ ρ 2 . y) = x 2 + y 2 en el conjunto A = {(x.{x. y) ∈ R2 : (x 2 + y 2 )2 ≤ 4(x 2 − y 2 ).5 2 Las condiciones del dominio escritas en coordenadas polares son: ρ 4 ≤ 4ρ 2 (cos2 (θ) − sen2 (θ)). así que es mejor cambiar a coordenadas polares y luego plantear la integral.6 0. En este caso la función es relativamente sencilla pero el dominio no lo es tanto. nos quedaría ρ ≤ 2 cos2 (θ) − sen2 (θ) y θ ∈ [−π /4.5 -0.{t. ρ cos θ ≥ 0 Después de operar. y2 }] Out[11]= 3 E − 2 2 Ejemplo 2. {ρ. Calcular la integral de la función f (x.2 0.4 0. No hay una manera fácil de hacer la integral directamente.2 -0.2 Sqrt[Cos[t]2 -Sin[t]2 ]}] Out[13]= π .4 -0.1}. Pi/4}.0.85 De lo hecho se deduce que la integral que queremos calcular es In[11]:= Integrate[Exp[x/y].y3 .0.0.{x. π /4] Ahora ya estamos en una de los casos conocidos y podemos plantear la integral.3}] 0.{y. -Pi/4.6 1 1. x ≥ 0}. Dibujemos el recinto: In[12]:= ImplicitPlot[(x2 +y2 )2 ==4(x2 -y2 ).

x = 1. 7. 3. y = 0. y 2 + z2 = r 2 . Ejercicio 4. 2. 4. y) = 4x 2 − y 2 . z) ∈ R3 : 0 ≤ z ≤ x 2 + y 2 . Intersección de los cilindros x 2 + y 2 = r 2 . x = 0 Ejercicio 2. Calcular el volumen limitado superiormente por el cono 4x 2 + 4y 2 − z2 = 0. 6. Calcular el volumen de los sólidos siguientes: 1. Calcular el volumen del conjunto A en cada uno de los siguientes casos: 1. x 2 + y 2 = a2 . El limitado por el plano z = 0. x. z) ∈ R3 : x2 a2 + y2 b2 ≤ 1. 2. y. z) ∈ R3 : x 2 + y 2 ≤ z2 . x = 0. y. y) = y. 2. y > 0. 0 ≤ x ≤ 6 A = (x. . x + y ≤ 1. y. y. 0 ≤ z ≤ 9 − x A = (x. x 2 + y 2 + z2 ≤ 2z Ejercicio 3. y. el cilindro x 2 + y 2 = 2ax (a > 0) y el cono x 2 + y 2 = z2 . 3. y 2 = 2ax. z) ∈ R3 : x 2 + y 2 ≤ z ≤ x 2 + y 2 A = (x. y = x 2 f (x. z) ∈ R3 : 0 ≤ z ≤ x 2 + y 2 . y = x f (x. inferiormente por el plano z = 0 y lateralmente por el cilindro x 2 + (y − 2)2 = 4. y = 1.86 Integrales múltiples Ejercicio 1. Calcular la integral de las siguientes funciones en los recintos determinados por las siguientes ecuaciones: 1. f (x. 5. y) = xe−x 2 /y . 0 ≤ z ≤ x2 a2 + y2 b2 A = (x. z) ∈ R3 : √ √ x ≤ y ≤ 2 x. y. A = (x. z) ∈ R3 : 0 ≤ z ≤ 4 − y 2 . y ≥ 0 A = (x. y. x 2 + y 2 ≤ 2y A = (x.

Recordemos.1. por ejemplo que cuando intentábamos calcular las raíces de un polinomio nos daba todas. ya fueran reales o complejas. Escribiremos los números complejos usando la letra I o usando la paleta. Si probamos con variables esto puede dar algunos “problemas”: . Hay que tener cuidado con lo que hemos mencionado antes: Mathematica trabaja con números complejos por defecto. Veamos algunas de las operaciones elementales: In[1]:= z=3+4I Re[z] Im[z] Out[1]= 3+4I Out[2]= 3 Out[3]= 4 Ya puedes imaginar que Re e Im indican la parte real y la parte imaginaria del número complejo dado. Operaciones básicas En esta práctica vamos a recordar algunas de las propiedades básicas de los números complejos y de la funciones de variable compleja. En primer lugar hay que decir que Mathematica trabaja con números complejos siempre.CAPÍTULO 11 Números complejos 11. Obsérvese que la I es mayúscula.

Podemos imponer que las variables sean reales con la orden ComplexExpand: In[5]:= ComplexExpand[Re[a+b I]] Out[5]= a Además podemos calcular módulos. argumentos.88 Números complejos In[4]:= Re[a+b I] Out[4]= -Im[b]+Re[a] Lo que ocurre es que Mathematica piensa que a y b son números complejos. … In[6]:= Abs[-3] Out[6]= 3 In[7]:= Abs[1+I] Out[7]= √ 2 In[8]:= Arg[1-I] Out[8]= − π 4 In[9]:= Conjugate[2+I] Out[9]= 2-I .

2. Por tanto podemos definir funciones complejas de la siguiente forma: In[10]:= f[x_. 2. Expresar en forma polar los números complejos: 1.Efectuar las operaciones indicadas: 1. 4. z2 = −2 + 4i. 2 2 |z1 + z2 2 |2 + |z3 2 − z2 |2 Ejercicio 3. 3. 5. 2. 2. 4. Si z1 = 1 − i. 2 z1 + 2z1 − 3 +i 2 2 Ejercicio 4. 2 − 3i 4−i (2 + i)(3 − 2i)(1 + 2i) (1 − i)2 (2i − 1)2 2−i 4 + 1−i 1+i 6. . 1 i −1 −i √ 2 2 √ i4 + i9 + i16 2 − i5 + i10 − i15 Ejercicio 2.y_]=(x+I y)2 Out[10]= (x+Iy)2 In[11]:= ∂x f[x. Funciones de variable compleja Recordemos que podemos ver los números complejos como pares de números reales y por tanto cualquier función f : C → C como una función de R2 en R2 . 3. 4. 4.2 Funciones de variable compleja 89 Ejercicio 1. 3.2. 5. y √ z3 = 3 − 2i. Calcular el módulo y el argumento de los números complejos: 1. 3+3i −1 + -1 −2 − √ 3i √ 3i |2z2 − 3z1 |2 (z3 − z3 ) 5 |z1 z2 + z2 z1 | z1 + z2 + 1 z1 − z2 + i 11.11. 3. calcular las siguientes expresiones: 1. y] Out[11]= 2(x+Iy) Teniendo esto en cuenta es fácil comprobar si una función verifica por ejemplo las ecuaciones de Cauchy-Riemann.

5. También podemos trabajar en coordenadas polares con la orden PolarMap. . La orden CartesianMap representa en que se transforman rectas paralelas a los ejes. además de la función. Para esto necesitamos un paquete extra In[12]:= <<Graphics`ComplexMap` In[13]:= CartesianMap[Exp.1.{0. Lo que se puede hacer es representar lo que acabamos de comentar: en que se transforman rectas paralelas a alguno de los dos ejes. Gráficos en “cuatro” dimensiones La función exponencial compleja estaba definida de la siguiente forma: ez = ex (cos(y) + i sen(y)). si fijamos la parte real y movemos la parte imaginaria obtenemos una circunferencia centrada en el origen cuyo radio es ex .5}. Al revés.5 y 2. mediante la función dada (en este caso la exponencial).{-2. Si quisiéramos dibujar una función compleja de variable compleja como esta necesitaríamos 4 dimensiones. no toma nunca el valor cero y toma todos los demás infinitas veces.2.Frame->True] 2 1 0 -1 -2 -2 -1 0 1 2 Out[14]= .5. en este caso la primera coordenada varía entre 0 y 1 y la segunda entre -2. donde z = x + iy De la definición se deduce que es una función periódica con periodo 2π i. tenemos que decir dónde varía el módulo y el argumento.1}.Graphics - Comentemos un momento que es lo que pasa aquí. Además si fijamos la parte imaginaria y variamos la parte real obtenemos una recta que pasa por el origen y la parte imaginaria nos indica la pendiente.2.90 Números complejos 11. En ese caso.

La función (en este caso logaritmo neperiano) no está definida en ese punto. Has escrito la letra “o” en lugar de 0. 2 Pi is not a machine-size real number.-2.10}] Plot::"plln": Limiting value o in x.{ x.APÉNDICE A Avisos y mensajes de error In[1]:= C=3 Set::wrsym: Symbol C is Protected La letra C no se puede usar como nombre de variable. In[2]:= Plot[Log[x]. Mathematica ya lo usa para algo.. o. Probablemente estemos intentando dibujar una función fuera de su dominio o.0..{x. si la función la hemos definido nosotros.Pi}] General::"spell": "Possible spelling error: new symbol name sin is similar to existing symbol Sin. In[4]:= Plot[sin[x].o.{x. In[3]:= Plot[x2 +1.2}] Plot::"plnr":Log[x] is not a machine-size real number at x = -2. hay algún error en la definición de la función. .

or the true value of the integral is 0.x2 +y2 =1}.{x. y} = {0.0.0}.0.x Solve::ifun: Inverse functions are being used by Solve. No se puede tomar el punto (0. suspect highly oscillatory integrand. Try perturbing the initial point(s). Achieved neither the requested PrecisionGoal nor AccuracyGoal. In[8]:= FindRoot[{x*y==1.0}] FindRoot::jsing: Encountered a singular Jacobian at the point {x.{x. PlotStyle->RGBColor[1. Out[6]= {x− > − π π }. Intenta cambiar el punto por otro.92 Avisos y mensajes de error La función sin no está definida.. {x− > }} 2 2 Para resolver la ecuación cos(x) = 0 tiene que usar la funcion arccos(su inversa) y Mathematica avisa de que es posible que falten soluciones In[7]:= NIntegrate[Cos[x].0] Syntax::"bktmcp":"Expression "Plot[ « 1» "has no closing "]”. If your integrand is oscillatory try using the option Method->Oscillatory in NIntegrate. probablemente debido a que la función oscila.{x. In[6]:= Solve[Cos[x]==0.}. Falta cerrar un corchete.{y. Mathematica no puede asegurar que el valor de la integral que da sea exacto.-Pi.0. . 0) como condición inicial. so some solutions may not be found.Pi}.Pi}] NIntegrate::"ploss": Numerical integration stopping due to loss of precision. In[5]:= Plot[Sin[x]. La función seno es Sin.

1}.93 In[9]:= FindRoot[5 x2 +3.1}] Integrate::idiv: Integral of converge on{-1. In[11]:= Integrate[1/x 3.6}.{1.{x. 2. B={{4. 5.B Dot::dotsh: Tensors {{1.2}}. 6}.{1.2.3}. In[10]:= A={{1.0}}.3.3}.5. {4. No se puede multiplicar una matriz 3x3 y una matriz 2x2.{x. 1 does not x3 La función 1 no es impropiamente integrable en el intervalo [−1.-1.3}. 3}.1}] FindRoot::cvnwt: Newton’s method failed to converge to the prescribed accuracy after 15 iterations Out[9]= {x->-0.{7. A.6} Aunque en este caso la función no se anula nunca. {1. 3}. 2}} and {{4. x3 . 1]. 3}} have incompatible shapes. 3. Mathematica está avisando que el comando FindRoot no puede afirmar que el resultado que presenta sea un cero de la función. {7.{4.

Algunas funciones Log[b.1.m] n m B.APÉNDICE B Glosario B.x] logaritmo de x en base b Log[x] logaritmo neperiano Exp[x] exponencial de base e Sqrt[x] raíz cuadrada Sin[x] seno Cos[x] coseno Tan[x] tangente Csc[x] cosecante Sec[x] secante Cot[x] cotangente ArcSin[x] arcoseno ArcCos[x] arcocoseno ArcTan[x] arcotangente ArcCsc[x] arcocosecante ArcCot[x] arcocotangente Sinh[x] seno hiperbólico Cosh[x] coseno hiperbólico Tanh[x] tangente hiperbólica Sech[x] secante hiperbólica Coth[x] cotangente hiperbólica n! factorial de n Binomial[n.2. Comandos usuales Expand[expresión] desarrolla una expresión algebraica Factor[expresión] factoriza una expresión algebraica FullSimplify[expresión] simplifica la expresión TrigExpand[expresión] desarrolla una expresión con términos trigonométricos TrigFactor[expresión] factoriza una expresión con términos trigonométricos Simplify[expresión] simplifica la expresión N[expresión] da un valor numérico de la expresión B.3. Números complejos Abs[z] módulo Arg[z] argumento principal ComplexExpand Conjugate[z] conjugado Im[z] parte imaginaria Re[z] parte real Abs[x] valor absoluto de x Floor[x] parte entera de x .

{x.índice}] genera una lista usando la expresión dada Transpose[matriz] matriz transpuesta B.. Gráficos Plot[f[x]. n}] derivada de orden n de la función Integrate[función. b] ParametricPlot Plot3D[f[x. NSolve[{ecuación1.d}] de f en [a.n}] desarrollo de Taylor de orden n en el punto a B. b] × [c..{variable.. {variable1..}.{variable.4 Matrices 95 B. ecuación2.a.a.. Otros Clear[variable1.8..}] NullSpace[matriz] calcula una base del núcleo de la matriz Reduce[{ecuación1.variable2.5.{x....] olvida el valor de las variables Clear[“Global *”] olvida el valor de todas las variables Infinity infinito . variable2..}] calcula las soluciones genéricas del sistema de ecuaciones gral entre a y b de la función Limit[función..4.6. Cálculo D[función.b}] integral entre a y b de la función Series[función..b}...a.b}] gráfica de f en [a.}.. ecuación2..}] matriz diagonal Eigenvalues[matriz] valores propios Eigenvectors[matriz] vectores propios Eigensystem[matriz] valores y vectores propios IdentityMatrix[n] matriz identidad de orden n Inverse[matriz] inversa de la matriz dada Minors[matriz] RowReduce[matriz] Table[expresión.}] simplifica el sistema ecuaciones Solve[{ecuación1.b. Resolución de ecuaciones FindRoot[función..c. ecuación2. variable2.{y.y]..B.c.{x. variable2.. vector b] resuelve el sistema lineal Ax = b..a.{variable. {variable.{x->x0 }] calcular el límite cuando x tiende a x0 de la función NIntegrate[función....7.x0 }] encuentra un cero de la función tomando como punto inicial x = x0 LinearSolve[matriz A. Matrices Det[matriz] determinante DiagonalMatrix[{a.a. {variable1. {variable1..b}] inte- B. d] ParametricPlot3D SurfaceOfRevolution PlotGradientField PlotHamiltonianField gráfica B.}.{x.

Sign up to vote on this title
UsefulNot useful