Está en la página 1de 12

Sesión 9: Introducción al uso de Sage

Introducción
Sage[1] es un sistema de software matemático que integra diversas funcionalidades: manipulación
simbólica, análisis numérico, gráficos, operaciones con matrices y funciones especiales, entre otras. Se
trata de software de código abierto para cuyo uso basta con aceptar las condiciones de la licencia GPL
bajo las cuales se distribuye.
Sage se puede instalar en Linux, Android, Microsoft Windows y otros sistemas operativos. Puedes
utilizar Sage a través de las siguientes páginas web:
Servidor web https://grupo1.qfa.uam.es:8000 de la UAM.
«PC virtuales» de la UAM, disponibles en la página https://pc-virtual.uam.es.
Usar Sage desde un «Live USB», que te puedes descargar desde la página web de Sage.[2].
Instalar una versión para Microsoft Windows. Puedes descargarte el instalador desde la página
web de Sage.[3].
En general Sage funciona con los navegadores Firefox y Chrome, pero no se puede utilizar con
Internet Explorer.

9.1. Definición y asignación de variables y funciones en Sage


Una vez que hemos visto cómo se inicia Sage, vamos a aprender su utilización. Nosotros vamos a
utilizar la hoja de trabajo para completar que encontrarás en la página de moodle. Una vez cargada la
hoja de trabajo, las instrucciones se escriben en la celda y se ejecutan pulsando la combinación de teclas
mayúscula+intro (o pinchando en la tecla evaluate que aparece al incluir instrucciones en la
celda).
Lo primero que tienes que hacer es cambiar el comentario de la primera celda, para incluir tu nombre.
En Sage la # indica que lo que se escribe después es un comentario.
# Pon tu nombre sustituyendo este comentario

9.1.1. Variables
Cualquier letra, combinación de letras o combinación de letras y números puede usarse como variable
(el primer carácter debe ser siempre una letra). Las variables sirven para almacenar datos o para definir
funciones.
La asignación de datos a una variable se hace mediante el signo =, escribiendo a la izquierda el
nombre de la variable y a la derecha el valor que se le asigna. En la variable ww vamos a asignar la
fracción 34
ww=4/3
Aplicaciones Informáticas en Química 2

A continuación en la variable vv, asignamos el valor de 3π

vv=3*pi

donde pi representa la constante π y el ∗ el producto. Sage no muestra el contenido de la variable


cuando se asigna un valor a dicha variable. Para obtener el contenido de las variables asignadas debemos
escribir el nombre de las variables o utilizar la instrucción print, que permite mostrarlo en el formato
de Sage, o bien mediante la instrucción show(), que muestra las variables y funciones en formato
html.

ww

print "Los valores de las variables ww y vv son ", ww, " y ", vv

show(ww)
vv.show()

Esta última instrucción, como casi todas las de Sage, se puede usar de dos maneras. En la primera
se incluye como argumento la variable que queremos mostrar, como en show(ww). En la segunda se
añade la instrucción a la variable mediante un «punto», como en vv.show().

9.1.2. Ayuda
Podemos obtener las opciones de las instrucciones con la instrucción help, que se puede usar de
dos maneras. Por ejemplo, para obtener la ayuda sobre la instrucción show se puede teclear

show?

help(show)

9.1.3. Operadores aritméticos


Los operadores aritméticos permiten combinar variables en expresiones aritméticas que pueden ser
puramente numéricas, o incluir variables sin valor asignado, en cuyo caso hablamos de expresiones
simbólicas. Los operadores aritméticos en Sage se muestran en la tabla 1.
En Sage, el operador de potenciación puede escribirse como ∗∗ o como ∧. Por ejemplo, 3∗∗2 y 3 ∧ 2
representan ambos 32 = 9. Recuerda que es importante tener en cuenta la prioridad de las operaciones
(orden de prelación) a la hora de utilizar los operadores. Así, no es lo mismo calcular 2 + 3 × 6 que
(2 + 3) × 6.

2 + 3 * 6

( 2 + 3 ) * 6

1o de Grado en Química
Aplicaciones Informáticas en Química 3

Tabla 1: Operadores aritméticos

+ suma
− diferencia
∗ producto
/ división
∧ potencia
∗∗ potencia
// división entera
% resto de una división entera

9.1.4. Ejercicio 1
Realiza las siguientes operaciones:
2+3
=
5
3
2+ =
5
2
=
3+5
7 + 161/4 =
r
3 36
2+ =
3·2
(1)
Fíjate en la importancia de usar paréntesis para obtener el resultado correcto.

9.1.5. Aproximación numérica


Como has visto en el ejercicio anterior, por defecto Sage usa «fórmulas simbólicas», y por ese
2
motivo la operación 3+5 da como resultado 14 . Si queremos obtener un valor numérico (lo que se llama
en Sage una aproximación numérica), basta con utilizar la instrucción numerical_approx(), o en
su forma abreviada n(). También se puede obtener un valor numérico añadiendo .n() al final de la
instrucción. Por defecto el resultado se muestra en doble precisión (unos 15 dígitos). Se puede modificar
la precisión del resultado para mostrar N dígitos con la opción .n(digits = N).
Como ejemplo, vamos a obtener el valor de π con 1000 cifras significativas.
pi.n(digits=1000)

9.1.6. Ejercicio 2
Obtén el valor numérico, con 6 dígitos, de las siguientes operaciones:
2+3
=
5
3
2+ =
5
2
=
3+5

1o de Grado en Química
Aplicaciones Informáticas en Química 4

9.1.7. Notación científica


La notación científica o exponencial, es decir expresada en la forma mantisa × 10exponente , se
puede poner en Sage de varias maneras. Veámoslo con un ejemplo:

cient = exp(-20)
cient.n()

Fíjate que en notación científica la expresion e − 9 significa ×10−9 . Esto se puede ver si usamos la
instrucción show(), por ejemplo, para obtener el valor con cinco cifras significativas

show(cient.n(digits=5))

9.1.8. Funciones de una variable


Las variables pueden usarse también para definir funciones. En ese caso, siempre que una variable
vaya a aparecer a la derecha de un signo = debe estar previamente declarada como tal. En la tabla 2 se
recogen las principales funciones predefinidas en Sage.

Tabla 2: Algunas funciones predefinidas de Sage

Función Expresión matemática Expresión en Sage



raíz cuadrada x sqrt(x)
potencia ax a^x
seno sen(x) sin(x)
coseno cos(x) cos(x)
tangente tan(x) tan(x)
arcoseno arc sen(x) asin(x)
arcocoseno arc cos(x) acos(x)
arcotangente arctan(x) atan(x)
seno hiperbólico senh(x) sinh(x)
coseno hiperbólico cosh(x) cosh(x)
tangente hiperbólica tanh(x) tanh(x)
logaritmo en base N logN (x) log(x,base=N)
logaritmo natural o neperiano ln(x) ln(x)
logaritmo natural o neperiano ln(x) log(x)
exponencial ex exp(x)
exponencial ex e^x
valor absoluto |x| abs(x)

Veamos primero una función sencilla de una variable, f (x) = cos(2x):

f(x) = cos(2*x); f.show()

Fíjate en la necesidad de usar el operador para la multiplicación *. Para evaluar una función en un punto,
basta con asignar valores a sus variables. Por ejemplo, vamos a evaluar la función f (x) para el valor
x = 1/2

f(1/2)

1o de Grado en Química
Aplicaciones Informáticas en Química 5

Como ves, por defecto, Sage usa «fórmulas simbólicas». En este ejemplo el resultados es cos(1). Si
evaluas la función en x = π/2, el resultado, cos(π) se convierte en −1. Fíjate que el argumento de las
funciones trigonométricas está expresado en radianes y no en grados sexagesimales.

f(pi/2)

Como vimos con las fracciones, en ocasiones los resultados quedan en forma simbólica sin evaluar.
Recuerda que si se desea obtener un valor numérico, basta con añadir .n() al final de la instrucción
(para mostrar N dígitos, con la opción .n(digits = N)).

f(1/2).n()

Vamos a definir una nueva función de una variable, en este caso la función f 2(x) = log(x/3).

f2(x) = log(x/3); f2.show() # Logaritmo neperiano

Fíjate que Sage usa tanto ln como log para definir el logaritmo neperiano. Si queremos definir la
función g(x) = log10 (x/3), entonces tenemos que usar

g(x) = log(x/3,base=10); g.show() # Logaritmo decimal

Podemos comprobarlo, calculando g(30)

g(30)

También se pueden definir funciones más complejas. Por ejemplo, si queremos definir la función
 p 
func(x) = exp − x + 5x2 cos3 (4x + 5x2 + 6)

utilizaremos la siguiente instrucción

func(x)= exp(-sqrt(x+5*x^2)) * (cos(4*x+5*x^2+6))^3 ; show(func)

9.1.9. Ejercicio 3
Define la función h(x) = log2 (8x3 ) y obtén el valor de dicha función para los valores x = 1, x = −1
y x = 0.

9.2. Representación gráfica de funciones de una variable


Para representar gráficamente una función de una variable, se utiliza la instrucción plot(), ya sea
indicando como argumento la función a dibujar o bien añadiendo la terminación .plot() a la función.
Si no se incluyen argumentos dentro del paréntesis, Sage toma por defecto los valores inicial y final de
la variable, así como otras propiedades (color, ancho de línea).

h(x) = exp(-x) * sin(x); f.show()

1o de Grado en Química
Aplicaciones Informáticas en Química 6

h.show()

h.plot()

Si se desea cambiar los valores inicial y final de la variable en la gráfica o las demás opciones,
los valores deseados deben proporcionarse dentro del paréntesis. Las opciones de la instrucción plot
pueden verse tecleando plot? o help(plot).

h.plot((x,-3/2,5),color="red",thickness=3)

plot?

Para dibujar varias funciones en una misma gráfica se usa el operador +. Nótese la diferencia entre
utilizar el operador + de Sage para representar dos funciones h(x) y r(x) en la misma gráfica con la
instrucción h(x).plot() + r(x).plot(), y utilizar el operador matemático + para representar una única
función, la suma de f (x) y g(x), con la instrucción plot( f (x) + g(x)).

r(x)= exp(-x) * cos(x)


h(x).show()
r(x).show()

h(x).plot() + r(x).plot(color="red")

(h(x) + r(x)).show()

(h(x) + r(x)).plot()

Las figuras también pueden asignarse a variables, lo que permite combinarlas de diversas maneras
sin necesidad de recalcularlas cada vez.

figh = h(x).plot()

figr = r(x).plot(color="red")

figh + figr

9.2.1. Modificación de las representaciones gráficas


Si queremos añadir las etiquetas de los ejes o texto en la gráfica, podemos utilizar la instrucción:

variable += text(“etiquetas”, (posición x, posición y))

donde variable es la variable donde se ha guardado la representación que se quiere modificar, text
es la instrucción que permite añadir el texto “etiquetas”, posicionándolo en las coordenadas dadas
por (posición x, posición y).

1o de Grado en Química
Aplicaciones Informáticas en Química 7

figh += text("Representacion de la funcion h(x)",(0.5,-0.25))


figh

Se puede elegir el color de las etiquetas de los ejes, así como el texto con las instrucciones

figh.axes_label_color("red")
figh.axes_labels(["Eje X", "Eje Y"])
figh

Si queremos modificar el intervalo de una representación, podemos utilizar el comando .show().

figh.show(xmin=-0.5,xmax=0.5,ymin=-0.5,ymax=0.5)

9.3. Operaciones con funciones de una variable


Además de evaluarlas y representarlas, es posible realizar operaciones con funciones de una variable
de manera sencilla. Así, pueden combinarse para componer nuevas funciones:

f1(x) = sin(x)^2
f2(x) = exp(x)

g1(x) = f1(f2(x)); g1.show()

g2(x) = f2(f1(x)); g2.show()

g1(x).plot()+g2(x).plot(color="red")

9.3.1. Derivación de una función


Es posible derivar (diferenciar) una función con la instrucción

diff(función, variable)

o añadiendo al nombre de la función la terminación .diff(variable). Vamos a probar primero con


derivadas sencillas. Así, si definimos el polinomio pol(x) = 3x5 + 4x4 + x3 + x2 − 2x + 6,

pol(x)=3*x^5+4*x^4+x^3+x^2-2*x+6
show(pol(x))

la primera derivada será


d d(3x5 + 4x4 + x3 + x2 − 2x + 6)
pol(x) =
dx dx
que se puede obtener con Sage mediante la instrucción

pol(x).diff(x)

1o de Grado en Química
Aplicaciones Informáticas en Química 8

pol(x).diff(x).show()

También se pueden obtener las derivadas de orden mayor. Por ejemplo, la derivada segunda de pol(x)

d2
pol(x)
dx2
se obtiene con

pol(x).diff(x,2)

pol(x).diff(x,2).show()

Vamos a probar a derivar las funciones g1(x) y g2(x) que hemos definido antes.

g1(x).show()

g1(x).diff(x)

g1(x).diff(x).show()

g2(x).show()

g2(x).diff(x)

g2(x).diff(x).show()

Al igual que en el caso del polinomio, también podemos obtener las derivadas de orden mayor. Por
ejemplo, la derivada segunda de g1(x) se obtiene con

g1(x).diff(x,2)

9.3.2. Ejercicio 4
Obtén la primera derivada de las siguientes funciones:

s(x) = arc cos(x)


t(x) = x ex
u(x) = xx

1o de Grado en Química
Aplicaciones Informáticas en Química 9

9.3.3. Integración de una función


Para obtener la integral de una función se utiliza la instrucción

integrate(función, variable)

o bien la terminación .integrate(variable). Si la expresión general de las primitivas de una


función f (x) es Z
f (x)dx = F(x) +C

donde C es una constante, Sage permite obtener la primitiva F(x).


A diferencia de lo que ocurre con la diferenciación, Sage no siempre puede obtener la primitiva de
una función dada. Cuando no puede, deja el resultado indicado. En cualquier caso, siempre es posible
obtener la integral definida
Z lim_sup
f (x)dx
lim_in f
indicando el intervalo en el que se integra

integrate(función, variable, lim_inf, lim_sup)

o por integración numérica mediante la instrucción

numerical_integral(función, límite inferior, límite superior).

En este caso Sage expresa la solución como un número complejo, en la forma (a, b), donde a representa
la parte real y b la parte imaginaria, es decir (a, b) = a + b · i.
Como un primer ejemplo vamos a integrar el polinomio definido en la sección anterior

pol(x).show()

pol(x).integrate(x).show()

Vamos a ver cómo se puede obtener la integral


Z
e−x · sen(x) dx

f(x) = e^(-x)*sin(x); f.show()

f(x).integrate(x)

f(x).integrate(x).show()

y cómo se puede usar Sage para obtener la integral definida


Z 1
e−x · sen(x) dx
−1

f(x).integrate(x,-1,1)

1o de Grado en Química
Aplicaciones Informáticas en Química 10

f(x).integrate(x,-1,1).show()

f(x).integrate(x,-1,1).n()

Alternativamente se puede usar

numerical_integral(f(x),-1,1)

Fíjate que Sage expresa la solución como un número complejo.

9.3.4. Ejercicio 5
Calcula las siguientes integrales:

Z
arc cos(x) dx
Z
x e x dx
Z ∞
2
e−x dx
0

Nota: ∞ se puede poner en Sage como oo (dos oes seguidas) o infinity.

9.3.5. Desarrollo en serie de Taylor


Puede obtenerse el desarrollo en serie de Taylor[4] en forma simbólica o numérica con la función
taylor(). Así, para obtener los primeros n términos del desarrollo en torno al punto c
n
f (k) (c) 1 1
f (x) ≈ Tn,c (x) = ∑ (x − c)k = f (c) + f ′ (c)(x − c) + f (2) (c)(x − c)2 + · · · + f (n) (c)(x − c)n
k=0 k! 2! n!

la instrucción a utilizar es taylor(f(x),x,c,n) o f(x).taylor(x,c,n). En esta expresión k!


representa el factorial de k y f (k) (c) representa la k-ésima derivada de la función f (x) en el punto x = c.
Como ejemplo, desarrollaremos la función

f(x) = exp(-x)*sin(x)

hasta grado 5. Para ello, definimos una función desarrollo(x) con el desarrollo en serie en torno a
π hasta grado 5,

desarrollo(x)=f(x).taylor(x,pi,5)

Para comprobar la bondad del desarrollo, podemos representar la función y el desarrollo, por ejemplo,
en el intervalo [π/2, 3π/2],

figfuncion=f(x).plot((x,pi/2,3*pi/2))
figtaylor = desarrollo(x).plot((x,pi/2,3*pi/2) ,color="red")
figfuncion + figtaylor

1o de Grado en Química
Aplicaciones Informáticas en Química 11

9.3.6. Ejercicio 6
Desarrolla la función u(x) = sen(x) en serie de potencias en torno al punto x = 0, hasta quinto grado.
Representa la función y su desarrollo en el intervalo [−π, π].
El desarrollo en serie nos proporciona un método simple para obtener el valor aproximado de una
función. De hecho es el método que se usa en calculadoras para obtener los valores de las funciones
trigonométricas. Calcula el valor de sen(1) y compáralo con el valor que se obtiene con el desarrollo en
serie hasta quinto grado.

9.3.7. Búsqueda de raíces de funciones


Pueden buscarse los ceros de una función (raíces) en un intervalo con la función find_root().
Nótese que si el intervalo contiene más de una raíz, la función sólo devuelve una de ellas. Conviene usar
la función find_root() en combinación con la función plot() para localizar los intervalos en los
que se encuentran las raíces. Así, lo primero que vamos a hacer es dibujar la función f (x)

f(x) = exp(-x)*sin(x) ; f(x).show()

f(x).plot(xmin=0,xmax=10)

Lo que nos permite acotar las regiones en las que se encuentran las raíces. Por ejemplo, en el intervalo
(2, 4) podemos encontrar una raíz,

f(x).find_root(2,4)

en el intervalo (5, 7) hay otra

f(x).plot(xmin=4,xmax=8)

f(x).find_root(5,7)

y en el intervalo (7, 10) otra

f(x).plot(xmin=7,xmax=10)

f(x).find_root(7,10)

Fíjate que si usamos un intervalo más amplio, una vez que encuentra una raíz no busca más.

f(x).find_root(3,10)

Nótese que la función find_root() permite hallar soluciones de ecuaciones trascendentes.[5]


En el siguiente ejemplo vamos a resolver la siguiente ecuación trascendente: x = cos(x). Para ello la
escribiremos en la forma f (x) = x − cos(x):

f(x)=x-cos(x); plot(f)

f(x).find_root(0,1)

1o de Grado en Química
Aplicaciones Informáticas en Química 12

9.3.8. Ejercicio 7
Representa el siguiente polinomio y obtén los ceros:

p(x) = 3x3 + 4x2 − 5x − 6

9.3.9. Ejercicio 8
En este ejercicio hay que resolver uno de los problemas propuestos en la asignatura de Matemáticas
I. En concreto el problema 5 de la hoja 1.7 de Aproximación de funciones. Desarrollos de Taylor. En
este problema se pide:
ln(x2 + 1)
1. Construir la serie de potencias centrada en 0 de la función f (x) = . Para ello vamos a
x2
definir los polinomios de Taylor de orden 8, T8,c (x), de orden 10, T10,c (x), y de orden 12, T12,c (x),
para c = 0.

2. Representar f (x) y los polinomios de Taylor de orden 8, 10 y 12 que has obtenido en el primer
apartado. Comprueba que, como el radio de convergencia es 1, la serie diverge para valores de
x fuera de ese intervalo. Representa también las diferencias entre la función y sus desarrollos en
serie: f (x) − Tn,0 (x), para n = 8, 10 y 12.

3. Calcula el valor de f (x) y de los polinomios en x = 2.

4. Calcula las integrales


ln(t 2 + 1)
Z x
F(x) = dt
0 t2
así como las funciones obtenidas al integrar los tres polinomios de Taylor
Z x
Gn (x) = Tn,0 (t)dt, con n = 8, 10, 12.
0

5. Representar F(x) y Gn (x) para n = 8, 10 y 12.

6. Calcula el valor de F(x) y Gn (x), para n = 8, 10, 12, en x = 2.

Referencias
[1] La página principal es http://www.sagemath.org/

[2] La versión de Live USB se puede obtener en la página http://www.sagemath.org/


download-liveusb.html

[3] La versión para Windows se puede obtener en la página https://github.com/sagemath/


sage-windows/releases.

[4] Para ver la definición de la serie de Taylor, visitad la página http://es.wikipedia.org/


wiki/Serie_de_Taylor

[5] Podéis ver la definición en la página http://es.wikipedia.org/wiki/Ecuación_


trascendente

1o de Grado en Química

También podría gustarte