CON MATHEMATICA
2
1.12 MATHEMATICA Y LAS COMUNICACIONES
VARIABLES Y FUNCIONES
2.1 VARIABLES
2.2 VARIABLES GLOBALES
2.3 FUNCIONES
2.4 DEFINICION DE FUNCIONES
2.5 FUNCIONES RECURSIVAS
2.6 FUNCIONES CONDICIONALES
2.7 OPERACIONES FUNCIONALES
4
5.8 TRANSFORMACIN DE COORDENADAS
5
1.1 CLCULO NUMRICO CON MATHEMATICA
La mayora de los temas del clculo numrico clsico, son tratados en este
software. Soporta clculo matricial, estadstica, interpolacin, ajuste por mnimos
cuadrados, integracin numrica, minimizacin de funciones, programacin lineal,
resolucin numrica de ecuaciones algebraicas y diferenciales y un largo etctera de
procesos de anlisis numrico que iremos viendo al tratar los sucesivos temas de este
libro.
2) Tambin podemos obtener el valor exacto de 3 elevado a 100, sin haber fijado
antes la precisin, basta para ello teclear 3^100.
In[2] = 3^100
Out[2] = 515377520732011331036461129765621272702107522001
In[3] = N[% ]
47
Out[3] = 5.153775207320114 10
7
In[5] = (2 + 3*I)^10
Out[5] = 341525 145668 I
Estos temas sern tratados ms a fondo en sucesivos cap tulos a lo largo del
libro.
8
1.2 CLCULO SIMBLICO CON MATHEMATICA
2 3
Out[1] = 8 12 x 6 x x
In[2] = Factor[% ]
3
Out[2] = (2 + x)
3) Podemos resolver la integral indefinida de la funcin (x^2)Seno(x)^2
tecleando Integrate[ x^2 Sin[x]^2, x ]
In[3] = Integrate[x^2*Sin[x]^2, x]
Out[3]=
3 2
x x Cos[2 x] (1 2 x ) Sin[2 x]
--- + -----
6 4 8
In[4] = D[% , x]
Out[4] =
9
2 2
x Cos[2 x] (1 2 x ) Cos[2 x]
--- +----
2 4 4
In[5] = Simplify[% ]
2 2
Out[5] = x Sin[x]
6 8 10 12 14
4 x 2x x 2x 2x 15
x + -- +---- ---- + O[x]
3 45 315 14175 467775
2 1/3
(686 81 ax + 9 Sqrt[1372 ax + 81 ax ] )
+ -------------------},
1/3
32
1/3
7 I 49 2
{x > + Sqrt[3] (------------------------ +
3 2 2 1/3
3(68681ax+9Sqrt[1372ax+81ax ] )
10
2 1/3
(686 81 ax + 9 Sqrt[1372 ax + 81 ax ] )
+ ---------------------)
1/3
32
1/3
49 2
- (----------------------- +
2 1/3
3 (686 81 ax + 9 Sqrt[1372 ax + 81 ax ] )
2 1/3
(686 81 ax + 9 Sqrt[1372 ax + 81 ax ] )
+ ----------------------) / 2},
1/3
32
1/3
7 I 49 2
{x > Sqrt[3] (------------------- +
3 2 2 1/3
3 (68681ax+9 Sqrt[1372ax+81ax ] )
2 1/3
(686 81 ax + 9 Sqrt[1372 ax + 81 ax ] )
+ ----------------------)
1/3
32
1/3
49 2
(------------------------- +
2 1/3
3 (686 81 ax + 9 Sqrt[1372 ax + 81 ax ] )
2 1/3
(686 81 ax + 9 Sqrt[1372 ax + 81 ax ] )
+ ---------------------) / 2}}
1/3
32
11
Out[8] = {{x > 0.7018735688558619 0.879697197929824 I},
{x > 0.7018735688558619 + 0.879697197929824 I},
{x > 0.486389035934543},
{x > 0.945068086823133 0.854517514439046 I},
{x > 0.945068086823133 + 0.854517514439046 I}}
9) Podemos generar una matriz 3x3 cuyo elemento (i,j) es 1/(i+j+1) tecleando
m = Table[ 1 / (i + j + 1), {i,3}, {j,3} ]
In[10] = Inverse[m]
Out[10] = {{300, 900, 630}, {900, 2880, 2100}, {630, 2100, 1575}}
2 3
Out[11] = (1 4755 x + 255600 x 378000 x )/378000
2 2 2 2
{1 + a , 1 + b , 1 + c , 1 + d }
12
En el correspondiente captulo de grficos ampliaremos estos conceptos.
17
1.4 NOTACIN GENERAL Y USO DE RESULTADOS
PREVIOS
Hay que poner espacios entre variables que deben ser multiplicadas, y no debe
haber espacios en los nombres de las rdenes, ni en smbolos de ms de una letra ni
en los nombres de las funciones. En los dems casos, los espacios no se tienen en
cuenta. Se pueden poner algunos para hacer ms legibles su input.
Ya se ha dicho que los nombres de todas las funciones, variables, opciones y
constantes incorporadas en Mathematica empiezan con letras maysculas, por
ejemplo, Integrate, Plot. Si un nombre consiste de dos o ms palabras, la primera letra
de cada palabra va en maysculas, por ejemplo, ContourPlot, InterpolatingPolymial y
MapAt.
El ensimo input del usuario lleva el rtulo In[n] y el correspondiente output del
ordenador lleva Out[n]. Es posible referirse a inputs y outputs anteriores gracias a
estos rtulos.
18
veces anterior.
10
En primer lugar, se propone a Mathematica que calcule 5.
In[1] = 5^10
Out[1]=9765625
In[2] = % 1^(1/10)
Out[2]=5
In[3] = % +a
Out[3]=5+a
In[4] = 77 ^ 2
Out[4]= 5929
In[5] = % + 1
Out[5]= 5930
In[6] = 3 % + % ^ 2 + % %
Out[6]= 35188619
In[7] = % 2 + % 3
Out[7]= 35194549
19
Se pueden asociar unidades a los valores. Asegrese de dejar un espacio entre
el valor y el smbolo de las unidades. Mathematica evala combinando los trminos
cuando sea posible.
In[8] = 2 m + 3 m
Out[8]=5 m
20
1.5 AYUDAS CON COMANDOS
Dado ?Factor* como input, Mathematica lista las rdenes que empiezan con la
palabra Factor.
In[1] = ?Factor*
Factor FactorInteger FactorSquareFreeList FactorComplete
FactorList FactorTerms Factorial FactorSquareFree Factorial2
FactorTermsList
In[2] = ?FactorInteger
FactorInteger[n] gives a list of the prime factors of the integer n, together with their
exponents.
(FactorInteger[n] da una lista de los factores primos del entero n, junto a sus
exponentes)
Esta frase indica que, esta funcin espera un argumento de valor entero. Por
ejemplo, con FactorInteger, puedo encontrar los factores primos de 75.
In[3] = FactorInteger[75]
Out[3]={{3, 1}, {5, 2}}
21
El carcter comodn (*) es particularmente til para hojear entre las rdenes
incorporadas. Por ejemplo, para saber los nombres de algunas de las rdenes
grficas, se puede pedir los nombres de las rdenes que contengan las palabras
Graphic o Plot.
In[4] = ?*Graphics*
ContourGraphics Graphics Graphics3D
DensityGraphics GraphicsArray SurfaceGraphics
FullGraphics GraphicsSpacing
In[5] = ?*Plot*
ContourPlot ParametricPlot3D PlotPoints
DensityPlot Plot PlotRange
PlotColor ListContourPlot PlotRegion
PlotDivision ListDensityPlot PlotDivision
ListPlot PLotJoined Plot3D
ListPlot3D PlotLabel Plot3Matrix
PlotStyle ParametricPlot
In[6] = ??Plot
Plot[f, {x, xmin, xmax}] generates a plot of f as a function of x from xmin to salt
Se obtendrn los valores por defecto de las opciones de Plot. Estas opciones
especifican el mnimo nmero de puntos que muestra Mathematica para determinar la
forma de un grfico, la posicin de los ejes, el tamao del grfico, entre otras cosas.
In[7] = ?Graphics*
Graphics GraphicsSpacing Graphics3DGraphicsArray
In[8] = ?GraphicsArray
GraphicsArray[g1,g2,...] represents a row of graphic objects.
GraphicsArray[g11,g12,...,...] represents a two - dimensional array o graphic objects.
In[9] = ??GraphicsArray
GraphicsArray[{g1,g2,...}]represents a row graphic objects.
22
GraphicsArray[{{g11,g12,...},...}]represents a two-dimensional array of graphic objects.
Attributes[GraphicsArray] = {Protected}
{AspectRatio -> Automatic, Axes -> False,
AxesLable -> None, AxesOrigin -> Automatic,
AxesStyle -> Automatic, Background -> Automatic,
ColorOutput -> Automatic, DefaultColor -> Automatic,
Epilog -> {}, Frame -> False, FrameLAbel -> none,
FrameStyle -> Automatic, FrameTicks -> None,
GraphicsSpacing -> 0.1, GriLines -> None,
PlotLabel -> None, PlotRange -> Automatic,
PlotRegion -> Automatic, Prolog -> {},
RotateLabel -> True, Ticks -> None,
DefaultFont :> $DefaultFont,
DisplayFunction :> $DisplayFunction}
Para saber en un momento determinado los objetos que empiezan con letra
minscula se usa la funcin ?@.
In[10] = Options[Plot]
Out[10] = {AspectRatio > GoldenRatio^(1), Axes > Automatic,
AxesLabel > None, AxesOrigin > Automatic, AxesStyle > Automatic,
Background > Automatic, ColorOutput > Automatic, Compiled > True,
DefaultColor > Automatic, Epilog > {}, Frame > False,
FrameLabel > None, FrameStyle > Automatic, FrameTicks > Automatic,
GridLines > None, MaxBend > 10., PlotDivision > 20., PlotLabel > None,
PlotPoints > 25, PlotRange > Automatic, PlotRegion > Automatic,
PlotStyle > Automatic, Prolog > {}, RotateLabel > True,
Ticks > Automatic, DefaultFont :> $DefaultFont,
DisplayFunction :> $DisplayFunction}
In[11] = Information[Plot]
Out[11] = {"ContourPlot[f, {x, xmin, xmax}, {y, ymin, ymax}] generates a\ contour plot of f
as a function of x and y.", "DensityPlot[f, {x, xmin,\
23
xmax}, {y, ymin, ymax}] makes a density plot of f as a function of x and\
y.", "ListContourPlot[array] generates a contour plot from an array of\
height values.", "ListDensityPlot[array] generates a density plot from an\
array of height values.", "ListPlot[{y1, y2, ...}] plots a list of\
values. The x coordinates for each point are taken to be 1, 2, ....\
ListPlot[{{x1, y1}, {x2, y2}, ...}] plots a list of values with specified\
x and y coordinates.", "ParametricPlot[{fx, fy}, {t, tmin, tmax}]\
produces a parametric plot with x and y coordinates fx and fy generated\
as a function of t. ParametricPlot[{{fx, fy}, {gx, gy}, ...}, {t, tmin,\
tmax}] plots several parametric curves.", "Plot[f, {x, xmin, xmax}]\
generates a plot of f as a function of x from xmin to xmax. Plot[{f1, f2,\
...}, {x, xmin, xmax}] plots several functions fi."}
Comando Descripcin
----------------------------------------------------------------------------------------
------
?var Mostrar informacin sobre var
24
1.6 NOTACIN MATEMTICA
- Minus,Subtract (menos)
* Times (veces)
/ Divide(dividir)
^ Power (potencia)
Factorial
x == y Igualdad
x=y Desigualdad
p Not (No)
p q .... Or (O)
25
LogicalExpand[expr] Expande expresiones lgicas
W hich[cond1,expr1,...,condn,exprn]
In[1] = ?<
x < y yields True if x is determined to be less than y. x1 < x2 < x3 yields True if the xi
form a strictly increasing sequence.
(x < y da True, verdadero, si se determina que x es menor que y. x1 < x2 < x3 da True si
las xi forman una secuencia estrictamente creciente).
In[2] = Alias["<"]
Out[2] = Less
26
In[3] = Alias["="]
Out[3] = Set
In[4] = 1 + 2 * 3
Out[4]= 7
In[5] = 1 / 2 - 5
Out[5]= -(9/2)
In[6] = (1 + 2) * 3
Out[6]= 9
In[7] = 1 / (2 - 5)
Out[7]= -(1/3)
In[8] = ?Divisors
Divisors[n] gives a list of the integers that divide n.
(Divisors[n] da una lista de los enteros que dividen a n.)
In[9] = Divisors[100]
Out[9] = {1, 2, 4, 5, 10, 20, 25, 50, 100}
El resultado indica que los enteros 1, 2, 4, 5, 10, 20, 25, 50 y 100 dividen a 100.
In[10] = ?Random
27
Random[type, range] gives a pseudorandom number of the specified type, lying in the
specified range. Possible types are: Integer, Real and Complex. The default range is 0
to 1. You can give the range {min, max} explicitly; a range specification of max is
equivalent to {0, max}.
Ntese que Random puede invocarse con un nico argumento (un tipo) o con
dos argumentos (un tipo y un rango, que es un par indicando un valor mnimo y un valor
mximo).
In[12] = Random[Integer]
Out[12] = 0
Las llaves (braces) se utilizan para especificar listas, vectores y matrices. Una
lista o vector consiste en varias expresiones separadas por comas y encerradas entre
llaves.
2 3
Out[14]= {x, x , x }
28
Out[16]= a[1, 1] a[1, 2]
a[2, 1] a[2, 2]
Puesto que Mathematica hace un uso extensivo de las listas, tanto en trminos
de input como output, ampliaremos el tema en el siguiente captulo.
Los dobles corchetes se usan para indexar, es decir, para denotar un objeto o
conjunto de objetos dentro de una lista. Supongamos que tenemos un vector v como el
siguiente.
In[17] = v = {a, b, c}
Out[17]= {a, b, c}
In[18] = v[[2]]
Out[18] = b
In[20] = MatrixForm[m]
Out[20]= 123
456
Ntese que puedo obtener la fila i-sima de la matriz m mediante m[[i]], si i es
un entero adecuado.
In[21] = m[[2]]
Out[21]= {4, 5, 6}
29
1.7 PACKAGES
<<Contexto NombreDelPaquete
Por ejemplo:
In[1] = <<Algebra'SymbolicSum'
Needs["Contexto NombreDelPaquete ]
Por ejemplo:
In[2] = Needs["Algebra'SymbolicSum"]
Conviene dar una recomendacin para evitar problemas con los paquetes.
Deben cargarse los paquetes al comienzo de la sesin, ya que, en ocasiones, pueden
existir conflictos entre las funciones definidas por el usuario a lo largo de la misma y
las que define el paquete al ser cargado en memoria.
Como ya hemos visto, para poder distinguir los smbolos que defina de los que
son propios de Mathematica, es preferible asignarles nombres que empiecen con
minscula. La mayora de las funciones de Mathematica estn escritas en C. Sin
embargo, algunas funciones, como Integrate o Laplace estn escritas en el mismo
Mathematica. Las funciones escritas en Mathematica son las que se almacenan en
paquetes. Cerca de 130 paquetes se distribuyen con la versin 2.2. Cubren reas
como lgebra, clculo, matemtica discreta, geometra, grficos, lgebra lineal, teora
de nmeros, clculo numrico o estadstica.
30
Crear una funcin o coleccin de funciones para uso posterior.
In[8] = <<nuevo.m
In[9] = $Context
Out[9]= Global`
31
In[10] = Context[ ]
Out[10] = Global`
32
1.8 FICHEROS Y OPERACIONES EXTERNAS
33
In[2] = tmp
Out[2]= x^3 + 3*x^2*y + 3*x*y^2 + y^3
El contenido que se haba guardado anteriormente en el fichero de nombre tmp,
es rescatado a pantalla.
In[4] = Save["ftmp", f]
In[5] = ftmp
f[x_]:= x^2 + c
Existen una serie de comandos que dan una idea del entorno en que estamos
trabajando y que nos permiten operaciones de lectura y escritura en dicho entorno.
34
1.9 OTRAS CARACTERSTICAS DE EDICIN
x^2 + 4 x y + 4 y^2
35
principio de la zona de comentarios y otro al final, y entre ellos el texto del
comentario (*comentario*).
In[3] = %
Out[3] = 0.05992
Usando punto y coma, se pueden poner varias rdenes en una sola lnea. En
este caso, el output de las dos primeras rdenes se suprime ( y no puede ser
recuperado con %).
In[4] = x = 5 y = x + 37 y
Out[4]= 42
Nota El clculo del tiempo de los cmputos de Mathematica puede tener sus
trucos. Por ejemplo, si se pide un desarrollo decimal de pi con 400 cifras despus de
pedir el de 500 cifras, puede no tardar nada en hacerlo, ya que Mathematica guarda el
valor ms preciso de pi calculado durante la sesin.
36
1.10 TRADUCIENDO EXPRESIONES A LOS LENGUAJES C,
FORTRAN Y TEX
In[1] = x^3/5
Out[1] =x^3 / 5
In[2] = CForm[% ]
Out[2] = Power(x,3)/5
In[3] = FortranForm[% ]
Out[3] = x**3/5
In[4] = TeXForm[% ]
Out[4]={{{x^3}} over 5}
37
1.11 MATHEMATICA Y LA PROGRAMACIN
Mathematica tambin soporta diversas funciones lgicas, como And, Or, Not y
Xor.
In[1] = sign[x ] =
W hich[
x < 0., -1,
x == 0., 0,
x > 0, 1
]
In[2] = sign[3]
Out[2] =1
In[3] = mediana[lista List] =
Block[{
lo,
long
},
long =Length[lista]
lo = Sort[lista]
If[
OddQ[long],
lo[[ (long + 1)/2]],
38
(lo[[long/2]] + lo[[long/2+1]]/2
]
]
39
1.12 MATHEMATICA Y LAS COMUNICACIONES
40
Nota: Existe una publicacin de Wolfram Research "The MathLink
Communication Standard", que aporta toda la documentacin tcnica para el estndar
de comunicaciones en Mathematica.
41
2.1 VARIABLES
El concepto de variable, lo mismo que el concepto de funcin, es fundamental a
la hora de trabajar con un software matemtico. Evidentemente, el concepto terico de
variable matemtica es fijo e independiente del paquete de software. Pero la forma de
implementar y manejar las variables es muy caracterstico de cada programa en
particular. Mathematica permite definir y manejar las variables de modo muy simple. La
distincin ms fuerte es quiz la diferenciacin entre variables locales y globales.
43
2.2 VARIABLES GLOBALES
Cuando se realizan clculos extensos es conveniente dar nombres a resultados
intermedios. Estos resultados intermedios, se asignan a variables para hacer ms fcil
su uso. Por ejemplo, podemos definir la variable x y asignarle el valor 5 de la siguiente
forma:
In[1] = x = 5
Out[1] = 5
In[2] = Set[x,5]
Out[2] = 5
In[4] = x = 7 + 4
Out[4] = 11
44
El comando Clear[x] (o x=.), elimina el valor asignado a x
In[4] = x = y = 2
Out[4] = 2
In[5] = x
Out[5]= 2
In[6] = y
Out[6] = 2
Aqu hemos visto un ejemplo en el que damos el mismo valor a dos variables
diferentes simultneamente.
In[9] = x
Out[9] = 8
In[10] = y
Out[10] = 5
45
2.3 FUNCIONES
El concepto de funcin, lo mismo que el concepto de variable, es fundamental a
la hora de trabajar con un software matemtico. Evidentemente, el concepto terico de
funcin matemtica es fijo e independiente del paquete de software. Pero la forma de
implementar y manejar las funciones es muy caracterstica de cada programa en
particular. Mathematica permite definir y manejar las funciones de modo muy simple.
46
2.4 DEFINICION DE FUNCIONES
Mathematica incorpora mltiples funciones para usar en el trabajo cotidiano
con el programa. Pero adems el programa ofrece la posibilidad de definir funciones a
medida. Veamos cmo definir la funcin f(x)=x^2.
In[2] = f[a+1]
2
Out[2]=(1+a)
In[3] = f[4]
Out[3]= 16
In[4] = f[3x+x^2]
22
Out[4]:= (3 x + x )
Para saber cmo est definida una funcin f determinada, se usa la expresin ?
f.
In[11] = ?f
Global`f
f[x_]:= x^2
47
Todas las funciones predefinidas en Mathematica comienzan con letra
mayscula y hay que asegurarse de su correcta escritura antes de utilizarlas. Adems
el usuario debe definir el nombre de sus propias funciones empezando por letra
minscula.
Una vez definida la funcin pueden calcularse diferentes valores para distintos
argumentos tanto numricos como simblicos.
In[13] = h[1]
Out[13]=2
In[14] = h[y]
2
Out[14]=1 + y
48
2.5 FUNCIONES RECURSIVAS
Otra de las tcnicas que pueden usarse para crear funciones, es la utilizacin
de definiciones recursivas. Aunque la funcin factorial ya se encuentra implementada
en Mathematica, se puede definir de la manera siguiente:
In[18] = fact[1]=1
In[19] = fact[n ] =n*fact[n-1]
In[20] = fact[40]
Out[20]=815915283247897734345611269596115894272000000000
In[20] = fact[6.5]
Out[20]=$RecursionLimit::reclim:
Recursion depth of 256 exceeded.
In[21] = fact2[1]=1
fact2[n Integer] =n*fact2[n 1]
In[22] = fact2[6.5]
Out[22]=fact2[6.5]
49
Out[2] = 1
In[3] = ?f
Global`f
f[0] = 1
f[1] = 1
f[x_] := f[x] = f[x -1] + f[x - 2]
In[3] = f[5]
Out[3] = 8
In[4] = ?f
Global`f
f[0] = 1
f[1] = 1
f[2] = 2
f[3] = 3
f[4] = 5
f[5] = 8
f[x_] := f[x] = f[x - 1] + f[x - 2]
50
2.6 FUNCIONES CONDICIONALES
Esta funcin toma el valor 1 para todo x mayor que 0, y toma el valor 0 para todo
x menor o igual que 0.
51
2.7 OPERACIONES FUNCIONALES
Normalmente, las funciones definidas en Mathematica operan sobre sus
argumentos. Sin embargo, tambin existen operadores funcionales que operan sobre
otras funciones, (los argumentos de los operadores funcionales son funciones), como
por ejemplo el operador funcin inversa.
54
FoldList[f,x,{a,b,..}] Crea la lista {x,f[x,a],f[f[x,a],b],..}.
In[1] = InverseFunction[ArcSin]
Out[1]= Sin
In[2] = % [x]
Out[2]= Sin[x]
In[1] = Composition[f, g, h]
Out[1]= Composition[f, g, h]
In[3] = % [x]
Out[3]= q^(-1)[h^(-1) [g^(-1) f^(-1)[x]]]]
In[6] = Composition[f,g][x]
Out[6]:= 1+x^3+(1+x^3)^2
In[7] = Composition[g,f][x-1]
Out[7]= 1+(-1+(-1+x)^2+x)^3
In[8] = Composition[f,Sin][x]
Out[8]= Sin[x]+Sin[x]^2
55
In[9] = Clear[f,g]
In[1] =Nest[f, x, 4]
Out[1]= f[f[f[f[x]]]]
In[2] = NestList[f, x, 4]
Out[2]= {x, f[x], f[f[x]], f[f[f[x]]], f[f[f[f[x]]]]}
In[4] = Nest[recip, x, 3]
1
Out[4]=------------------
1
1 + ------------
1
1 + -------
1+ x
In[13] = nextdigit[ a , b ] = 10 a + b
56
In[16] = (f + g)[x]
Out[16]= (f + g)[x]
In[19] = Expand[% ]
Out[19] = ((1 + a) (1 + b))[x]
In[20] = Operate[p, t]
Out[20]= p[(1 + a) (1 + b)][x]
In[26] = Expand[ (a + b) (c + d) ]
Out[26] = a c + b c + a d + b d
In[29] = Thread[% ]
Out[29]= {f[a1, b1], f[a2, b2]}
57
3.1 FUNCIONES PARA LMIES
Mathematica ofrece funciones que permiten calcular prcticamente todo
tipo de lmites. Las mismas funciones se aplican para calcular lmites de sucesiones
que para calcular lmites de funciones. El anlisis para una y varias variables es
semejante.
64
tiende al valor a por la derecha.
65
In[4] = Limit[(x-1)/(x^n-1),x->1]
1
-
n
78
>0 coinciden, y adems su valor es el valor de la funcin en x=0. Con ello se concluye
que la funcin es continua en todo el campo real.
84
0
93
4.1 DERIVABILIDAD EN VARIAS VARIABLES
2
Dada la funcin f R ---> R, se define la derivada parcial de f con respecto a la
variable x en el punto (a,b) de la siguiente forma:
f f(a+h,b) - f(a,b)
---- (a,b) = Limit ---------------------------
x h->0 h
f f(a,b+h) - f(a,b)
---- (a,b) = Limit ---------------------------
y h->0 h
i = 1,2,.....,n
f f f
(D f) v = ( -----, -----, ........,------) . (v1,v2,.......,vn) = ( f) . v
x1 x2 xn
f f f
f = ( -----, -----, ........,------) se denomina vector gradiente de f
x1 x2 xn
f f f
97
D f = ( -----dx1+ -----dx2 + ......+ -----dxn)
x1 x2 xn
Derivative[n,m][f][x,y]
Derivative[n,m][f][a,b]
Derivative[n,m,p,...][f][x,y,z,...]
Derivative[n,m,p,...][f][a,b,c,...]
98
Dt[f[x,y,z,..],x,y,z..] Calcula la derivada implcita de f respecto a las
variables x, y, z, ....
f
D[f,x] = -----
x
D[f,x,y,z,. ] = ----- ----- ------ .. f
x y z
n
D[f,{x,n}] = ----- f
n
x
Dt[f] = df
df
Dt[f,x] = ----
dx
d d d
Dt[f,x,y,z,..] = ---- ---- ---- ...f
dx dy dz
(n)
Derivative[n][f][x] = f (x)
(n+m)
Derivative[n,m][f][x,y] = -------------
n m
x y
(n+m+p+..)
Derivative[n,m,p,...][f][x,y,z,...] = ----------------------
n m p
x y z ......
99
La funcin ser diferenciable si admite derivadas parciales continuas en todo
punto. Vamos a considerar cualquier punto distinto del origen y a calcular la derivada
parcial respecto a la variable x
In[2] = D[f[x,y],x]//Simplify
3
2y
------------
2 2 3/2
(x + y )
In[3] = g= % /. y->m x
3 3
2m x
---------------
2 2 2 3/2
(x + m x )
In[4] = Limit[g,x->0]
3
2m
-----------
2 3/2
(1 + m )
In[1] = Limit[Limit[f[x,y],x->0],y->0]
0
In[2] = Limit[Limit[f[x,y],y->0],x->0]
0
101
In[7] = D[f[x,y],x]//Simplify
1
-2 x Cos[-------]
2 2
x+y 1
----------------- + 2 x Sin[-------]
2 2 2 2
x+y x+y
Esta derivada parcial es continua en todo punto. El nico punto problemtico
sera el origen
In[9] = Limit[Limit[h[x,y],x->0],y->0]
0
In[10] =Limit[Limit[h[x,y],y->0],x->0]
0
103
-0.839938
In[6] = Derivative[0,1][f][x,y]//Simplify
2 2
(-x - y )/8
(E (-2 y - y Cos[2 x] + y Cos[2 y] + 8 Sin[2 y])) / 8
In[7] = Derivative[0,1][f][Pi/3,Pi/6]//N
0.674508
In[8] = Derivative[1,1][f][x,y]//Simplify
2 2
(-x - y )/8
(E (2 x y + x y Cos[2 x] - x y Cos[2 y] +
In[9] = Derivative[1,1][f][Pi/3,Pi/6]//N
-0.0810746
In[10] = Derivative[2,0][f][x,y]//Simplify
2 2
(-x - y )/8 2
(E (-8 + 2 x - 68 Cos[2 x] +
2 2
x Cos[2 x] + 4 Cos[2 y] - x Cos[2 y] +
16 x Sin[2 x])) / 32
In[11] = Derivative[2,0][f][Pi/3,Pi/6]//N
1.14813
In[12] = Derivative[0,2][f][x,y]//Simplify
2 2
(-x - y )/8 2
(E (-8 + 2 y - 4 Cos[2 x] +
2 2
y Cos[2 x] + 68 Cos[2 y] - y Cos[2 y] -
16 y Sin[2 y])) / 32
109
In[13] = Derivative[0,2][f][Pi/3,Pi/6]//N
0.553409
In[14] = Derivative[1,2][f][x,y]//Simplify
2 2
(-x - y )/8 2
(E (8 x - 2 x y + 4 x Cos[2 x] -
2 2
x y Cos[2 x] - 68 x Cos[2 y] + x y Cos[2 y] +
2
32 Sin[2 x] - 8 y Sin[2 x] + 16 x y Sin[2 y])) / 128
In[15] = Derivative[1,2][f][Pi/3,Pi/6]//N
0.0250284
In[16] = Derivative[2,2][f][x,y]//Simplify
2 2
(-x - y )/8 2 2 2 2
(E (32 - 8 x - 8 y + 2 x y +
2 2
272 Cos[2 x] - 4 x Cos[2 x] - 68 y Cos[2 x] +
2 2 2
x y Cos[2 x] - 272 Cos[2 y] + 68 x Cos[2 y] +
2 2 2
4 y Cos[2 y] - x y Cos[2 y] - 64 x Sin[2 x] +
2
16 x y Sin[2 x] + 64 y Sin[2 y] -
2
16 x y Sin[2 y])) / 512
In[17] = Derivative[2,2][f][Pi/3,Pi/6]//N
-0.385583
In[18] = Derivative[3,2][f][x,y]//Simplify
2 2
(-x - y )/8 3 2 3 2
110
(E (-96 x + 8 x + 24 x y - 2 x y -
3
816 x Cos[2 x] + 4 x Cos[2 x] +
2 3 2
204 x y Cos[2 x] - x y Cos[2 x] +
3
816 x Cos[2 y] - 68 x Cos[2 y] -
2 3 2
12 x y Cos[2 y] + x y Cos[2 y] -
2
2432 Sin[2 x] + 96 x Sin[2 x] +
2 2 2
608 y Sin[2 x] - 24 x y Sin[2 x] -
3
192 x y Sin[2 y] + 16 x y Sin[2 y])) / 2048
In[18] = Derivative[3,2][f][Pi/3,Pi/6]//N
-0.519315
111
4.2 MXIMOS Y MNIMOS DE FUNCIONES DE VARIAS
VARIABLES
n n
Dada la funcin f R ---> R, que aplica el punto (x1,x2,...,xn)R en el punto
f(x1,x2,....,xn)R, se dice que presenta un extremo en el punto (a1,a2,....,an) si el vector
gradiente:
f f f
f = ( -----, -----, ........,------) se anula en el punto (a1,a2,.....,an)
x1 x2 xn
| 2 2 2 |
| f f f |
| -------, ---------, ........,-------- |
| 2 |
| x1 x1 x2 x1 xn |
| |
| 2 2 2 |
| f f f |
| --------, ---------, ........,--------- |
H= | 2 |
| x1 x2 x2 x2 xn |
| |
| ........................................... |
| |
| 2 2 2 |
| f f f |
| ---------, ---------, ........,--------- |
| 2 |
| x1 xn x2 xn xn |
112
{y -> 0, x -> 2}}
Luego los posibles puntos extremos son: (0,0), (-2,0), (2,0) y (-3,0)
2 3 4
{{-720 x - 360 x + 360 x + 150 x , 60 y}, {60 y, 60 x}}
In[4] = M[0,0]//MatrixForm
0 0
0 0
In[5] = Det[M[0,0]]
0
In[6] = M[-2,0]//MatrixForm
-480 0
0 -120
In[7] = Det[M[-2,0]]
57600
In[8] = Eigenvalues[M[-2,0]]
{-480, -120}
In[9] = M[2,0]//MatrixForm
2400 0
0 120
114
In[10] = Det[M[2,0]]
288000
In[11] = Eigenvalues[M[2,0]]
{120, 2400}
In[12] = M[-3,0]//MatrixForm
1350 0
0 -180
In[13] = Det[M[-3,0]]
-243000
In[14] = Eigenvalues[M[-3,0]]
{-180, 1350}
In[15] = Plot3D[f[x,y],{x,-5,5},{y,-5,5}]
115
In[4] = MatrixForm[% ]
2 1 0
1 2 0
0 0 2
In[5] = Det[% ]
6
Vemos que la matriz Hessiana es constante (no depende del punto en que se
aplique), por lo tanto su valor en el origen ya est hallado. El determinante es distinto
de cero, con lo que no habr extremos degenerados
In[6] = Eigenvalues[M[0,0,0]]
{1, 2, 3}
117
4.3 MXIMOS Y MNIMOS CONDICIONADOS. EL
MTODO DE LOS MULTIPLICADORES DE
LAGRANGE
Supongamos que queremos optimizar (maximizar o minimizar) la funcin
f(x1,x2,..,xn), denominada funcin objetivo, pero sujeta a unas determinadas
restricciones dadas por las ecuaciones:
g1(x1,x2,....,xn)=0
g2(x1,x2,....,xn)=0
............................
gk(x1,x2,....,xn)=0
k
L(x1,x2,....,xn,l) = f(x1,x2,....,xn) + li gi(x1,x2,....,xn)
i=1
L L L L L L
L = ( -----, -----, ........,------, ------, ------, .....,-------) = (0, 0, ....., 0)
x1 x2 xn l1 l2 lk
118
1 1
z -> -------}, {l -> -------, y -> 0,
Sqrt[2] Sqrt[2]
1 1
x -> -(-------), z -> -(-------)}}
Sqrt[2] Sqrt[2]
Ahora vamos ver qu tipo de extremos son. Para ello consideramos la matriz
que nos da la condicin suficiente de extremo
In[4] =M[x ,y ,z ,l ]=
{{D[f[x,y,z,l],{x,2}],D[f[x,y,z,l],x,y],D[f[x,y,z,l],x,z], D[g[x,y,z],x]},
{D[f[x,y,z,l],x,y],D[f[x,y,z,l],{y,2}],D[f[x,y,z,l],y,z],D[g[x,y,z],y] },
{D[f[x,y,z,l],x,z],D[f[x,y,z,l],y,z],D[f[x,y,z,l],{z,2}],D[g[x,y,z],z] },
{D[g[x,y,z],x],D[g[x,y,z],y],D[g[x,y,z],z], 0 }}
In[5] = MatrixForm[% ]
2l 0 0 2x
0 2l 0 2y
0 0 2l 2z
2x 2y 2z 0
In[6] = M[-1/Sqrt[2],0,-1/Sqrt[2],1/Sqrt[2]]//MatrixForm
Sqrt[2] 0 0 -Sqrt[2]
0 Sqrt[2] 0 0
0 0 Sqrt[2] -Sqrt[2]
-Sqrt[2] 0 -Sqrt[2] 0
In[7] = Det[{{Sqrt[2],-Sqrt[2]},{-Sqrt[2],0}}]
120
-2
In[8] = Det[{{Sqrt[2],0,-Sqrt[2]},{0,Sqrt[2],0},{-Sqrt[2],0,0}}]
-2 Sqrt[2]
In[9] = Det[M[-1/Sqrt[2],0,-1/Sqrt[2],1/Sqrt[2]]]
-8
Todos los determinantes son de signo negativo, luego en el punto
(-1/Sqrt[2], 0, -1/Sqrt[2]) la funcin presenta un mnimo
In[10] = M[1/Sqrt[2],0,1/Sqrt[2],-1/Sqrt[2]]//MatrixForm
-Sqrt[2] 0 0 Sqrt[2]
0 -Sqrt[2] 0 0
0 0 -Sqrt[2] Sqrt[2]
Sqrt[2] 0 Sqrt[2] 0
In[11] = Det[{{-Sqrt[2],Sqrt[2]},{Sqrt[2],0}}]
-2
In[12] = Det[{{-Sqrt[2],0,Sqrt[2]},{0,-Sqrt[2],0},{Sqrt[2],0,0}}]
2 Sqrt[2]
In[12] = Det[M[1/Sqrt[2],0,1/Sqrt[2],-1/Sqrt[2]]]
-8
121
Luego los posibles puntos extremos son:
In[4] =M[x ,y ,z ,l ]=
{{D[f[x,y,z,l],{x,2}],D[f[x,y,z,l],x,y],D[f[x,y,z,l],x,z],D[g[x,y,z],x]},
{D[f[x,y,z,l],x,y],D[f[x,y,z,l],{y,2}],D[f[x,y,z,l],y,z],D[g[x,y,z],y] },
{D[f[x,y,z,l],x,z],D[f[x,y,z,l],y,z],D[f[x,y,z,l],{z,2}],D[g[x,y,z],z] },
{D[g[x,y,z],x],D[g[x,y,z],y],D[g[x,y,z],z], 0 }}
{{0, 2 l + z, 2 l + y, 2 y + 2 z},
{2 l + z, 0, 2 l + x, 2 x + 2 z},
{2 l + y, 2 l + x, 0, 2 x + 2 y},
{2 y + 2 z, 2 x + 2 z, 2 x + 2 y, 0}}
In[5] =MatrixForm[% ]
0 2l + z 2l + y 2y+ 2z
2l + z 0 2l + x 2x+ 2z
2l + y 2l + x 0 2x+ 2y
2y+ 2z 2x+ 2z 2x+ 2y 0
In[6] = M[Sqrt[5/3],Sqrt[5/3],Sqrt[5/3],-Sqrt[5/3]/4]//MatrixForm
5 5
Sqrt[-] Sqrt[-]
3 3 5
------- ------- 4 Sqrt[-]
0 2 2 3
5 5
Sqrt[-] Sqrt[-]
3 3 5
------- ------- 4 Sqrt[-]
2 0 2 3
5 5
Sqrt[-] Sqrt[-]
3 3 5
------- ------- 4 Sqrt[-]
2 2 0 3
123
5 5 5
4 Sqrt[-] 4 Sqrt[-] 4 Sqrt[-]
3 3 3 0
In[7] = Det[{{0,4Sqrt[5/3]},{4Sqrt[5/3],0}}]
80
-(--)
3
In[8] =Det[{{0,Sqrt[5/3]/2,4Sqrt[5/3]},{Sqrt[5/3]/2,0,4Sqrt[5/3]},
{4Sqrt[5/3],4Sqrt[5/3],0}}]
5
80 Sqrt[-]
3
----------
3
In[9] = Det[M[Sqrt[5/3],Sqrt[5/3],Sqrt[5/3],-Sqrt[5/3]/4]]
100
-(---)
3
Efectivamente se ve que los determinantes alternan en signo, empezando por el
signo negativo. Luego existe un mximo en el punto:
124
In[3] = MatrixForm[% ]
x
E 0 0
0 -Sin[y] 0
0 0 Cos[z]
In[4] = J[0,-Pi/2,0]//MatrixForm
1 0 0
0 1 0
0 0 1
127
In[5] = D[z[x,y],y]//Simplify
2 (x - y) 2xy
-2 E + 2E x
-------------------------- +
2 (x - y) 2 x y
E -E
2 x 2 (1 + x) y 2 x 2 (1 + x) y
2 (E + E ) (E + E x)
-----------------------------------------------
2 x 2 (1 + x) y 2
(-E + E )
130
Ahora vamos a calcular las derivadas parciales pedidas, suponiendo siempre
que se cumple la condicin anterior
In[4] = Solve[Dt[f[x,y,z],x]==0,Dt[z,x]]
2 2 3
3 x + 8 z + 6 y Dt[y, x] - 3 z Dt[y, x]
{{Dt[z, x] -> -(------------------------------------------)}}
2
16 x z - 9 y z
In[5] = % /. Dt[y,x]->0
2 2
3x + 8z
{{Dt[z, x] -> -(---------------)}}
2
16 x z - 9 y z
In[6] = Solve[Dt[f[x,y,z],y]==0,Dt[z,y]]
3 2 2
6 y - 3 z + 3 x Dt[x, y] + 8 z Dt[x, y]
{{Dt[z, y] -> -(------------------------------------------)}}
2
16 x z - 9 y z
In[7] = % /. Dt[x,y]->0
3
6y- 3z
{{Dt[z, y] -> -(---------------)}}
2
16 x z - 9 y z
2 2
Para calcular de z/x consideramos la derivada implcita de segundo orden de
f respecto de x
132
In[8] = Solve[Dt[f[x,y,z],x,x]==0,Dt[z,x,x]]
5 4 3 2 2 3 4 2 4
(6 (24 x - 27 x y z + 128 x z - 288 x y z - 512 x z + 81 x y z +
5 3 3
192 y z )) / (z (-16 x + 9 y z) )}}
2 2
Para calcular de z/y consideramos la derivada implcita de segundo orden de
f respecto de y
In[10] = Solve[Dt[f[x,y,z],y,y]==0,Dt[z,y,y]]
2 2 2
-((6 + 6 x Dt[x, y] + 3 x Dt[x, {y, 2}] + 8 z Dt[x, {y, 2}] -
2 2
18 z Dt[z, y] + 32 z Dt[x, y] Dt[z, y] + 16 x Dt[z, y] -
2 2
18 y z Dt[z, y] ) / (16 x z - 9 y z ))}}
133
Se parte de las derivadas implcitas de f1 y f2 respecto de x e y, y se despejan
del sistema formado, las parciales de u y v respecto a x e y
In[8] =Solve[{Dt[f1[x,y,u[x,y],v[x,y]],x]==0,
Dt[f1[x,y,u[x,y],v[x,y]],y]==0,
Dt[f2[x,y,u[x,y],v[x,y]],x]==0,
Dt[f2[x,y,u[x,y],v[x,y]],y]==0},
{Dt[u,x],Dt[v,x],Dt[u,y],Dt[v,y]}]
3 4
-(u + 2 v y Dt[y, x])
{{Dt[u, x] -> ----------------------- +
2
3u x
3 2 2 2
(4 v y (3 u x (y + u v Dt[y, x] + x Dt[y, x]) -
3 4 2 4 4 3
2 u v y (u + 2 v y Dt[y, x]))) / (3 u x (3 u x y - 8 u v y )),
2 2
Dt[v, x] -> -((3 u x (y + u v Dt[y, x] + x Dt[y, x]) -
3 4 4 4 3
2 u v y (u + 2 v y Dt[y, x])) / (3 u x y - 8 u v y )),
4 3
-(2 v y + u Dt[x, y])
Dt[u, y] -> ----------------------- +
2
3u x
3 2 4 3
(4 v y (-2 u v y (2 v y + u Dt[x, y]) +
2 2 2 4 4 3
3 u x (u v + x + y Dt[x, y]))) / (3 u x (3 u x y - 8 u v y )),
4 3
Dt[v, y] -> -((-2 u v y (2 v y + u Dt[x, y]) +
2 2 4 4 3
3 u x (u v + x + y Dt[x, y])) / (3 u x y - 8 u v y ))}}
135
3 2 4 2
-u 4 v y (-2 u v y + 3 u x y)
{{Dt[u, x] -> --- + ------------------------------,
3x 2 4 4 3
3 u x (3 u x y - 8 u v y )
4 2
-2 u v y + 3 u x y
Dt[v, x] -> -(--------------------),
4 4 3
3 u xy- 8 u v y
4 3 2 2 2 5 2
-2 v y 4 v y (3 u x (u v + x) - 4 u v y )
Dt[u, y] -> ------- + ---------------------------------------,
2 2 4 4 3
3u x 3 u x (3 u x y - 8 u v y )
2 2 5 2
3 u x (u v + x) - 4 u v y
Dt[v, y] -> -(-----------------------------)}}
4 4 3
3 u xy- 8 u v y
In[10]:= % /.{x->1,y->1,u->1,v->1}
3 1 6 2
{{Dt[1, 1] -> -(-), Dt[1, 1] -> -, Dt[1, 1] -> -(-), Dt[1, 1] -> -}}
5 5 5 5
136
3 4
-4 y Cos[x] 2 y Sin[y]
------------ - 3 x Sin[y] + ---------
x 2
x
Por lo tanto, en los puntos donde esta expresin no se anule, se puede resolver
para x e y en trminos de u y v. Adems, tambin ha de cumplirse que x0.
4 4 3
2 x + y 4y
{{4 x - -------, ----}, {Cos[x], -Sin[y]}}
2 x
x
In[4] = Inverse[m[x,y]]//Simplify
2
x Sin[y]
{{---------------------------------------,
3 4 4
4 x y Cos[x] + 3 x Sin[y] - y Sin[y]
3
4xy
---------------------------------------},
3 4 4
4 x y Cos[x] + 3 x Sin[y] - y Sin[y]
2
x Cos[x]
{---------------------------------------,
3 4 4
4 x y Cos[x] + 3 x Sin[y] - y Sin[y]
4 4
-3 x + y
---------------------------------------}}
3 4 4
4 x y Cos[x] + 3 x Sin[y] - y Sin[y]
138
x = a Cos[b]
y = a Sin[b]
JacobianMatrix[sistema, P]
140
In[2] = JacobianMatrix[ ]//MatrixForm
1 0 0
0 1 0
0 0 1
In[3] = JacobianMatrix[Cylindrical]//MatrixForm
In[4] = JacobianMatrix[Spherical]
En los dos ltimos ejemplos se han calculado las matrices jacobianas de paso
de cilndricas a cartesianas y de esfricas a cartesianas
In[5] = JacobianMatrix[{1,Pi/2,Pi/4},Spherical]//MatrixForm
1 1
------- -(-------)
Sqrt[2] 0 Sqrt[2]
1 1
------- -------
Sqrt[2] 0 Sqrt[2]
0 -1 0
In[6] = JacobianMatrix[{1,Pi/2,Pi/4},Cylindrical]//MatrixForm
0 -1 0
1 0 0
0 0 1
Aqu hemos calculado los valores de las matrices jacobiamas en un punto dado
In[7] = JacobianDeterminant[Spherical]
141
r Sin[theta]
In[8] = JacobianDeterminant[Cylindrical]
r
In[9] = JacobianDeterminant[{1,Pi/2,Pi/4},Spherical]
1
142
144
In[1] = CoordinatesFromCartesian[{1,Sqrt[3],2}, Cylindrical]//N
{2., 1.0472, 2.}
154
155