Para calcular límites de una función $f:\mathbb{R}\to\mathbb{R}$ se usa la función limit
o su sinónimo lim
. Las notaciones matemáticas
$$\lim_{x\to x_0}f(x),\qquad \lim_{x\to x_0^-}f(x)\qquad\text{y}\qquad \lim_{x\to x_0^+}f(x)$$
se corresponden con las órdenes
limit(fun, x=$x_0$) limit(fun, x=$x_0$, dir="-") limit(fun, x=$x_0$, dir="+")
siendo fun
una expresión simbólica que proporciona la función $f(x)$. Como valor de dir
, se puede emplear "plus"
o "right"
en vez de "+"
; análogamente, se puede sustituir "-"
por "minus"
o "left"
.
Para indicar que $x$ tiende a $-\infty$ o a $+\infty$, se escribe x=-oo
o x=+oo
(nótese que oo
es la letra o
repetida). También se puede representar el infinito por infinity
o Infinity
.
La función limit
admite además la opción algorithm
para escoger qué módulo, de entre los integrados en SageMath, se encarga de realizar los cálculos. Por omisión, se toma algorithm="maxima"
; otros posibles valores son "maxima_taylor"
y "sympy"
.
Pongamos algunos ejemplos. Calculamos primero
$$
\lim_{x\to0}\left(\frac{1}{x^2}-\frac{1}{\operatorname{sen}^2 x}\right).
$$
Las celdas siguientes muestran distintos modos de hacerlo, variando la forma de proporcionar el primer argumento de limit
:
%display latex
limit(1/x^2 - 1/sin(x)^2, x=0)
fun = 1/x^2 - 1/sin(x)^2
limit(fun, x=0)
f(x) = 1/x^2 - 1/sin(x)^2
limit(f(x), x=0)
def f(x):
return 1/x^2 - 1/sin(x)^2
# o también f = lambda x: 1/x^2 - 1/sin(x)^2
limit(f(x), x=0)
Hallemos un par de límites más:
# Cálculo del límite
fun = ((1+sin(x))/(1-sin(x)))^(1/x)
L = limit(fun, x=0)
# Presentación del resultado
limite = fr"""$\displaystyle\lim_{{x\to0}}\left(
\frac{{1+\operatorname{{sen}} x}}{{1-\operatorname{{sen}} x}}
\right)^{{1/x}}={latex(L)}$"""
show(html(limite))
# Cálculo del límite
f(x) = (1-sin(x/2)) / (cos(x/2) * (cos(x/4)-sin(x/4)))
L = limit(f(x), x=pi)
# Presentación del resultado
limite = fr"""$\displaystyle\lim_{{x\to\pi}}
\frac{{1-\operatorname{{sen}}(x/2)}}{{\cos(x/2)\bigl(\cos(x/4)
-\operatorname{{sen}}(x/4)\bigr)}}={latex(L)}$"""
show(html(limite))
Comprobamos ahora que $$ \lim_{x\to0^+} \left(\frac{2}{x}\right)^{\log\left(1+\frac{1}{\log x}\right)} =\lim_{x\to+\infty} \left(\frac{2}{x}\right)^{\log\left(1+\frac{1}{\log x}\right)}=e^{-1}. $$ En efecto,
fun = (2/x)^(log(1+1/log(x)))
bool(limit(fun, x=0, dir="+") == limit(fun, x=+oo) == exp(-1))
El valor del límite puede ser infinito, con o sin signo. Observemos, por ejemplo, el caso simple de $\lim_{x\to0^{-}}1/x$, $\lim_{x\to0^{+}}1/x$ y $\lim_{x\to0}1/x$:
limit(1/x, x=0, dir="-")
limit(1/x, x=0, dir="+")
limit(1/x, x=0)
Si no existe $\lim_{x\to k}f(x)$, SageMath lo indica con las salidas ind
y und
, abreviaturas de indefinite y undefined. La primera respuesta se proporciona si se puede garantizar que la función permanece acotada en un entorno de $k$. Lo comprobamos tratando de hallar los límites de $\cos x$ y $x\cos x$ cuando $x\to+\infty$:
limit(cos(x), x=+oo)
limit(x*cos(x), x=+oo)
Las derivadas de una función $f:\mathbb{R}\to\mathbb{R}$ se calculan con la función derivative
o su sinónimo diff
, que también actúan como métodos. Para calcular la derivada $n$-ésima de $f$, son válidas cualesquiera de las siguientes órdenes:
derivative(fun, x, $n$) fun.derivative(x, $n$) diff(fun, x, $n$) fun.diff(x, $n$)
siendo fun
una expresión simbólica que proporciona $f(x)$. También se podría escribir $n$ veces la variable x
, como, por ejemplo, diff(fun,x,x,x)
para la derivada tercera.
Trabajemos, por ejemplo, con la función $f(x)=x^2\cos x$. Las celdas siguientes hallan su derivada tercera, mostrando distintas formas de dar la expresión de $f$ y el orden de la derivada:
%display latex
derivative(x^2 * cos(x),x,3)
fun = x^2 * cos(x)
derivative(fun,x,x,x)
def f(x):
return x^2 * cos(x)
derivative(f(x),x,3)
f(x) = x^2 * cos(x)
derivative(f(x),x,x,x)
fun = x^2 * cos(x)
fun.derivative(x,3)
(x^2 * cos(x)).diff(x,x,x)
Mostramos ahora diversos modos de evaluar una derivada en un punto particular. Para ello, retomamos $f(x)=x^2 \cos x$ y calculamos su derivada cuarta en $x=\pi/4$:
(x^2 * cos(x)).derivative(x,4).subs(x=pi/4)
fun = x^2 * cos(x)
derivative(fun,x,4).subs(x=pi/4)
d4f = derivative(x^2 * cos(x),x,4)
d4f(x=pi/4)
f = lambda x: x^2 * cos(x)
diff(f(x),x,4)(x=pi/4)
d4f(x) = derivative(x^2 * cos(x),x,4)
d4f(pi/4)
Las derivadas se pueden representar gráficamente:
fun = x^2 * cos(x)
plot(derivative(fun,x,4), (x,-2*pi,4*pi))
En todos los ejemplos anteriores, el primer argumento de derivative
es una expresión simbólica. También puede ser una función simbólica, en cuyo caso no hace falta especificar la variable de derivación y el resultado, además, vuelve a ser una función simbólica:
f(x) = x^2 * cos(x) # se define f como función simbólica
d4f = derivative(f,x,4) # o bien d4f = derivative(f,4); cálculo de la derivada cuarta
show(d4f) # d4f es una función simbólica...
d4f(pi/4) # que se puede evaluar en pi/4
Dada una función $f$ derivable $n$ veces en un punto $x_0$, la función taylor
, que también actúa como método, halla el polinomio de Taylor de $f$ en $x_0$ de grado $n$. La sintaxis es
taylor(fun, x, $x_0$, $n$) o bien fun.taylor(x, $x_0$, $n$)
siendo fun una expresión simbólica que proporciona $f(x)$. Análogamente, el desarrollo limitado de $f$ de orden $n-1$ en $x_0$ se obtiene con el método series
, que se usa como sigue:
fun.series(x==$x_0$, $n$)
El último término del desarrollo limitado es el resto en forma infinitesimal. Se puede eliminar con el método truncate
, quedando el polinomio de Taylor. En otras palabras, fun.taylor(x,x0,n)
y fun.series(x==x0,n+1).truncate()
dan el mismo resultado.
Consideremos, por ejemplo, la función $f(x)=\cos^2 x$. Obtenemos primero su polinomio de MacLaurin de grado $6$:
%display latex
fun = cos(x)^2
taylor(fun,x,0,6)
Y ahora el correspondiente desarrollo limitado:
fun.series(x==0,7)
Pongamos otro ejemplo. Sean $f(x)=3(x-1)e^{2x}+3\operatorname{sen} x+3$ y $g(x)=x\log(\cos x)$. Hallamos sus polinomios de MacLaurin de grado $3$:
f = 3*(x-1)*exp(2*x) + 3*sin(x) +3
g = x * log(cos(x))
pf = f.taylor(x,0,3)
pg = g.taylor(x,0,3)
show(html("Polinomio de MacLaurin de $f$ de grado 3"))
show(pf)
show(html("Polinomio de MacLaurin de $g$ de grado 3"))
show(pg)
Como aplicación, del resultado de la celda precedente podríamos concluir que
$$
\lim_{x\to0} \frac{f(x)}{g(x)}
= \lim_{x\to0}\frac{3(x-1)e^{2x}+3\operatorname{sen} x+3}{x\log(\cos x)}
= \lim_{x\to0} \frac{3x^3/2}{-x^3/2}=-3,
$$
resultado al que, no obstante, se puede llegar directamente con la función limit
:
limit(f/g, x=0)
La integración de una función $f$ se realiza mediante la función, y método, integral
o su sinónimo integrate
. Para obtener la integral indefinida de $f$, la sintaxis es
integral(fun, x) o fun.integral(x)
donde fun
es una expresión simbólica que proporciona $f(x)$. Análogamente, para hallar la integral definida de $f$ en un intervalo $[a,b]$, esto es, $\int_a^b f(x)\,dx$, se emplea una de las siguientes variantes:
integral(fun, x, $a$, $b$) integral(fun, (x, $a$, $b$)) fun.integral(x, $a$, $b$)
La función integral
admite la opción algorithm
para escoger el módulo de SageMath que efectúa el cálculo. Por omisión, se toma algorithm="maxima"
. Otros posibles valores son "sympy"
y "giac"
.
SageMath puede trabajar con integrales impropias. En particular, los extremos de integración pueden ser -oo
y +oo
, o bien -infinity
y +infinity
.
Hallamos primero $\int \operatorname{sen}^2 x\, \cos^4 x \,dx$:
%display latex
integral(sin(x)^2*cos(x)^4, x)
Y ahora $\displaystyle\int \frac{x^4-7 x^3+19 x^2-19 x+3}{x^3-5 x^2+9 x-5}\,dx$
fun = (x^4-7*x^3+19*x^2-19*x+3) / (x^3-5*x^2+9*x-5)
fun.integral(x)
Vamos a calcular un par de integrales definidas. Las propias celdas de salida indican de qué integrales se trata:
# Cálculo de la integral
f = (1-exp(x))/(1+exp(x))
val_int_f = integral(f, (x, 0, log(2))).simplify_log()
# Salida
int_f = fr"$\displaystyle\int_0^{{\log 2}} \frac{{1-e^x}}{{1+e^x}}\,dx={latex(val_int_f)}$"
show(html(int_f))
# Cálculo de la integral
f = (2-x)*cos(pi*x)
val_int_f = integral(f, (x, 1/2, 2)).simplify_rational()
# Salida
int_f = fr"$\displaystyle\int_{{1/2}}^2 (2-x)\cos(\pi x)\,dx\,dx={latex(val_int_f)}$"
show(html(int_f))
Veamos una integral impropia de 1.ª especie, en concreto, $\displaystyle\int_0^{+\infty} \frac{\operatorname{sen}x}{x}\,dx$:
integral(sin(x)/x, (x,0,+oo))
Terminamos con $\displaystyle\int_2^5 \sqrt{\frac{5-x}{x-2}}\,dx$, que es una integral impropia de 2.ª especie:
integral(sqrt((5-x)/(x-2)), (x,2,5))
Con suma frecuencia se encuentran funciones que no es posible o conveniente integrar de forma analítica. Así ocurre si el tiempo de cómputo es muy elevado o si las primitivas son excesivamente complicadas o no son expresables mediante funciones elementales. Es el caso de la integral $$ \int_0^3 \sqrt{\frac{2+x^2}{1+x^2}}\,dx. $$ Si intentamos calcularla, SageMath devuelve como resultado la propia integral tras una espera que puede ser prolongada:
integrate(sqrt((2+x^2)/(1+x^2)), x, 0, 3)
En situaciones así, se puede tratar de obtener, al menos, un valor aproximado de la integral definida mediante algún algoritmo de integración numérica. SageMath proporciona con tal fin el método nintegral
y la función numerical_integral
cuya sintaxis es
fun.nintegral(x, $a$, $b$) numerical_integral(fun, $a$, $b$)
En ambos casos se obtiene una tupla cuyo primer elemento es la aproximación de la integral y el segundo es el error estimado. El método nintegral
devuelve además el número de evaluaciones del integrando y un código de error (si su valor es $0$, el cómputo se ha realizado sin problemas). Las órdenes sage.calculus.calculus.nintegral?
y numerical_integral?
dan más información sobre su uso y opciones.
En las siguientes celdas estimamos, mediante el método y la función mencionadas, el valor de la integral indefinida que no hemos podido hallar:
fun = sqrt((2+x^2)/(1+x^2))
fun.nintegrate(x, 0, 3)
numerical_integral(fun, 0, 3)
Así pues, podemos ahora asegurar que $$ \int_0^3 \sqrt{\frac{2+x^2}{1+x^2}}\,dx\approx 3.5524035069. $$
# Se desactiva primero la acción de %display latex, si estuviera activa
%display plain
%%html
<style>
h1{text-align: center; color: rgb(185,74,72);}
h2{text-align: center; color: rgb(0,102,0); padding: 0.25em 0;
border: 2px solid rgb(0,191,0); border-width: 2px 0;}
h3{border-bottom: 2px solid rgb(153,153,153);}
h4{color: rgb(58,135,173); font-size: 115%!important;
font-weight: bold!important;}
.text_cell_render{font-family: "Trebuchet MS",Geneva,sans-serif;
font-size: 110%; line-height: 1.5;}
.MathJax_Display{margin: 0.5em 0;}
</style>