Cálculo infinitesimal de funciones univariadas

Índice

Límites

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:

In [1]:
%display latex
limit(1/x^2 - 1/sin(x)^2, x=0)
Out[1]:
In [2]:
fun = 1/x^2 - 1/sin(x)^2
limit(fun, x=0)
Out[2]:
In [3]:
f(x) = 1/x^2 - 1/sin(x)^2
limit(f(x), x=0)
Out[3]:
In [4]:
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)
Out[4]:

Hallemos un par de límites más:

In [5]:
# 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))
In [6]:
# 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,

In [7]:
fun = (2/x)^(log(1+1/log(x)))
bool(limit(fun, x=0, dir="+") == limit(fun, x=+oo) == exp(-1))
Out[7]:

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$:

In [8]:
limit(1/x, x=0, dir="-")
Out[8]:
In [9]:
limit(1/x, x=0, dir="+")
Out[9]:
In [10]:
limit(1/x, x=0)
Out[10]:

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$:

In [11]:
limit(cos(x), x=+oo)
Out[11]:
In [12]:
limit(x*cos(x), x=+oo)
Out[12]:

Derivación

Cálculo de derivadas

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:

In [13]:
%display latex
derivative(x^2 * cos(x),x,3)
Out[13]:
In [14]:
fun = x^2 * cos(x)
derivative(fun,x,x,x)
Out[14]:
In [15]:
def f(x): 
    return x^2 * cos(x)
derivative(f(x),x,3)
Out[15]:
In [16]:
f(x) = x^2 * cos(x)
derivative(f(x),x,x,x)
Out[16]:
In [17]:
fun = x^2 * cos(x)
fun.derivative(x,3)
Out[17]:
In [18]:
(x^2 * cos(x)).diff(x,x,x)
Out[18]:

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$:

In [19]:
(x^2 * cos(x)).derivative(x,4).subs(x=pi/4)
Out[19]:
In [20]:
fun = x^2 * cos(x)
derivative(fun,x,4).subs(x=pi/4)
Out[20]:
In [21]:
d4f = derivative(x^2 * cos(x),x,4)
d4f(x=pi/4)
Out[21]:
In [22]:
f = lambda x: x^2 * cos(x)
diff(f(x),x,4)(x=pi/4)
Out[22]:
In [23]:
d4f(x) = derivative(x^2 * cos(x),x,4)
d4f(pi/4)
Out[23]:

Las derivadas se pueden representar gráficamente:

In [24]:
fun = x^2 * cos(x)
plot(derivative(fun,x,4), (x,-2*pi,4*pi))
Out[24]:

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:

In [25]:
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
Out[25]:

Polinomios de Taylor

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$:

In [26]:
%display latex
fun = cos(x)^2
taylor(fun,x,0,6)
Out[26]:

Y ahora el correspondiente desarrollo limitado:

In [27]:
fun.series(x==0,7)
Out[27]:

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$:

In [28]:
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)
Polinomio de MacLaurin de de grado 3
Polinomio de MacLaurin de de grado 3

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:

In [29]:
limit(f/g, x=0)
Out[29]:

Integración

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$:

In [30]:
%display latex
integral(sin(x)^2*cos(x)^4, x)
Out[30]:

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$

In [31]:
fun = (x^4-7*x^3+19*x^2-19*x+3) / (x^3-5*x^2+9*x-5)
fun.integral(x)
Out[31]:

Vamos a calcular un par de integrales definidas. Las propias celdas de salida indican de qué integrales se trata:

In [32]:
# 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))
In [33]:
# 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$:

In [34]:
integral(sin(x)/x, (x,0,+oo))
Out[34]:

Terminamos con $\displaystyle\int_2^5 \sqrt{\frac{5-x}{x-2}}\,dx$, que es una integral impropia de 2.ª especie:

In [35]:
integral(sqrt((5-x)/(x-2)), (x,2,5))
Out[35]:

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:

In [36]:
integrate(sqrt((2+x^2)/(1+x^2)), x, 0, 3)
Out[36]:

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:

In [37]:
fun = sqrt((2+x^2)/(1+x^2))
fun.nintegrate(x, 0, 3)
Out[37]:
In [38]:
numerical_integral(fun, 0, 3)
Out[38]:

Así pues, podemos ahora asegurar que $$ \int_0^3 \sqrt{\frac{2+x^2}{1+x^2}}\,dx\approx 3.5524035069. $$

Celda de configuración. La evaluación de la celda siguiente cambia el formato por omisión de este cuaderno.
In [39]:
# Se desactiva primero la acción de %display latex, si estuviera activa
%display plain
In [40]:
%%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>
Realizado por Juan José Torrens para la asignatura de Cálculo II
Grados de Ciencias y de Ciencia de Datos
Universidad Pública de Navarra
Última versión: 14-1-2021