GT_MM_1415_Tutorial

1172 days ago by trinidad1415

Introducción a Sage

0. Usando la interfaz

Para introducir la operación que se desea evaluar, hay que mover el cursor hasta que aparezca una línea azul. Pulsando el botón izquierdo nos aparecerá un cuadro (celda) como el siguiente:

 
       

Ejercicio 1. Pulsa con el ratón para crear una celda a continuación de este texto.

 
       

Dentro de las celdas se escribe la operación que se desea evaluar y se pulsa el enlace evaluate o <shift>+<Intro>. (Para evaluar una celda tienes que estar dentro de ella, si no no verás el botón de evaluar).

1+1 
       
2
2

Ejercicio 2. Crea una celda a continuación de este texto y calcula cuanto es 2+2.

 

 
       

Si lo que queremos es un cuadro de texto, para escribir explicaciones, responder preguntas, etc, debemos pulsar <shift> a la vez que el botón izquierdo del ratón. Los cuadros de texto como éste permiten incluir comentarios en una hoja de trabajo. Si haces doble clic sobre el cuadro de texto puedes editar el contenido. Al entrar en modo de edición, aparecen botones y desplegables para cambiar algunos aspectos del estilo del texto.Para guardar lo que hemos escrito, hay que pulsar "Save changes".

Ejercicio 3. Crea una celda de texto, escribe "hola mundo" y guárdalo.

 
       

Podemos guardar el documento con el que estamos trabajando pulsando "Save" en el menú superior. También podemos hacer una copia en el disco duro usando el menú:

file->Save workshet to a file

Esto nos creará un archivo que podemos recuperar más tarde (por ejemplo si hemos borrado algo por equivocación y luego lo hemos salvado).

Ejercicio 4. Guarda este documento. Después salva una copia en el disco duro.

 
       

Para buscar ayuda sobre como se utiliza una función, podemos usar la función "help". Por ejemplo, si queremos conocer cómo funciona la orden "plot", obtendríamos información así:

help(plot) 
       

1. Sage como una calculadora

Podemos utilizar Sage como cualquier (potente) calculadora científica

2+34 
       
42*34 
       
5-5*3 
       
32.23/234.1 
       
2^10 
       
258%7 #proporciona el resto de la divisiĆ³n entera de 258 entre 7 
       
6
6

Además de las operaciones aritméticas, podemos usar las muchas funciones disponibles. La forma de usarlas es escribir el nombre de la función, seguido del argumento, o argumentos, entre paréntesis, y separados por comas.

exp(4.5) 
       
90.0171313005218
90.0171313005218
sqrt(2.4) 
       

Las funciones trigonométricas reciben los ángulos en radianes.

sin(90.0) 
       
cos(90.0) 
       
sin(3.1416) 
       
-7.34641020664359e-6
-7.34641020664359e-6

 

Al usar el ordenador para hacer matemáticas es importante saber si los datos del ordenador representan los objetos matemáticos de forma exacta. Es imposible almacenar en un ordenador con una cantidad finita de memoria todas las cifras decimales del número $\pi$. Una alternativa es almacenar sólo unas cuantas cifras, y cometer por tanto un pequeño error. Para la mayoría de las aplicaciones es más que suficiente usar 10 o 20 cifras decimales significativas. Con esto queremos decir que al escribir el número en notación exponencial, descartamos todas las cifras a partir de la número 10 o 20. Por ejemplo, el número 1/\pi con diez dígitos significativos:
3.183098861 \cdot 10^{-1}
Al hacer operaciones con números que contienen errores, los errores se suman y multiplican, y pueden acabar estropeando un cálculo. Otra alternativa es usar una variable simbólica, y usar las reglas aritméticas sin hacer cálculos con decimales
Al estar orientado preferentemente al público matemático, Sage prefiere usar expresiones simbólicas exactas antes que aproximaciones numéricas. Como vimos en prácticas, para obtener una representación decimal de una expresión simbólica, podemos usar el comando n() (n de numérico)

Al hacer operaciones con números que contienen errores, los errores se suman y multiplican, y pueden acabar estropeando un cálculo. Por eso Sage trata de trabajar siempre sin redondeos, y utiliza  variables simbólicas. Así, por ejemplo, si usamos fracciones, no las escribirá como número real.

 

1/2+1/3 
       
5/6
5/6
(2/4)^23 
       
1/8388608
1/8388608

Algo similar ocurre con el número pi y el número e.

2+pi 
       
pi + 2
pi + 2
e^3 
       
sin(pi/3) 
       

Para obtener una representación decimal de una expresión simbólica, podemos usar el comando n() (n de numérico). Así, para expresar el número $\pi$ numéricamente, debemos escribir pi.n(). Análogamente, e.n().

pi.n() 
       
sin(pi.n()) 
       
e.n() 
       

Ejercicio 5. Calcula el resultado de las siguientes operaciones:


$2+5*6$,     $\dfrac{1+3^2}{1-2^3}$,     $e^{4-\dfrac{1}{2}}$,     $\cos(\pi/3)$

 
       

2. Tipos de datos y variables

Para utilizar posteriormente el resultado de un cálculo, podemos guardarlo en una variable:

b=2.0^4+1.0/5+exp(3.0) 
       

Para ver el contenido de la variable, basta escribir su nombre y ejecutar la celda:

       
36.2855369231877
36.2855369231877

Si el resultado no es un número, Sage también lo guarda en la variable, pero ahora tendremos que utilizar n() para ver su valor.

c=2^4+1/5+exp(3) 
       
       
e^3 + 81/5
e^3 + 81/5
c.n() 
       
36.2855369231877
36.2855369231877

Utilizar una variable es equivalente a escribir lo que tiene almacenado.

d=0.1 d 
       
0.100000000000000
0.100000000000000
h=d/10 h 
       
0.0100000000000000
0.0100000000000000

Si asignamos un nuevo contenido a una variable, perdemos su valor anterior.

d=0.2 d 
       
0.200000000000000
0.200000000000000

Podemos hacer las dos operaciones a la vez. Utilizar su valor y guardarlo de nuevo con el mismo nombre.

d=d+d^2 d 
       
0.240000000000000
0.240000000000000

Ejercicio 6. Crea una variable llamada n. Asígnale el valor 1. Ahora calcula n+1 y asígnalo de nuevo a n. Ejecuta la sentencia anterior varias veces para ver cómo va contando.

 
       

Sage también puede guardar vectores y matrices dentro de una variable.

v = vector([1,-1,1,1]); v 
       
(1, -1, 1, 1)
(1, -1, 1, 1)
A = matrix([[1, 12, 123, 1234],[2, 23, 234, 2341],[3, 34, 341, 3412], [4, 41, 412, 4123]]); A 
       
[   1   12  123 1234]
[   2   23  234 2341]
[   3   34  341 3412]
[   4   41  412 4123]
[   1   12  123 1234]
[   2   23  234 2341]
[   3   34  341 3412]
[   4   41  412 4123]

Además, podemos operar con las variables anteriores:

v*A 
       
A*v 
       
det(A) 
       

3. Trabajando con funciones (matemáticas)

Podemos definir una función como lo haríamos en clase:

f(x)=x^3+x^2+3 
       

Sage nos indicará que f guarda una función que asigna a cada x el polinomio anterior:

       
x |--> x^3 + x^2 + 3
x |--> x^3 + x^2 + 3

Para evaluar la función en un punto, basta sustituir el valor.

f(0); f(3); f(3.2); f(pi) 
       
3
39
46.0080000000000
pi^3 + pi^2 + 3
3
39
46.0080000000000
pi^3 + pi^2 + 3

Tambien podemos calcular derivadas y primitivas de la función, que a su vez son funciones:

f.diff(x) 
       
x |--> 3*x^2 + 2*x
x |--> 3*x^2 + 2*x
f.diff(x)(1) 
       
5
5
f.integrate(x) 
       
x |--> 1/4*x^4 + 1/3*x^3 + 3*x
x |--> 1/4*x^4 + 1/3*x^3 + 3*x

Para ver todas las operaciones que podemos hacer con una función, podemos escribir f. y pulsar el tabulador.

f. 
       
Traceback (click to the left of this block for traceback)
...
SyntaxError: invalid syntax
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_10.py", line 10, in <module>
    exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("Zi4="),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))
  File "", line 1, in <module>
    
  File "/tmp/tmptAIcaV/___code___.py", line 2
    f.
     ^
SyntaxError: invalid syntax

Si queremos que una función dependa de un parámetro, debemos declarar el parámetro con el comando "var".

a=var('a') g(x)=a*x^3+4*a g(3) 
       
31*a
31*a
g.diff(x) 
       
x |--> 3*a*x^2
x |--> 3*a*x^2

Ejercicio 7: Dada la función f(x)=sin(x)^3, calcula su valor en x=pi, su derivada, el valor de su derivada en x=pi y la integral entre x=0 y x=pi/2.

 
       

4. Representación gráfica

Dibujemos la función f(x)=sen(x) para x entre -pi y pi.

f(x)=sin(x) p = plot(f(x), (x, -pi/2, pi/2)) p 
       

Podemos cambiar el color y nombrar los ejes:

p = plot(f(x), (x,-pi/2, pi/2), axes_labels=['x','sin(x)'], color='purple') p 
       

O cambiar el grosor y el tipo de línea:

p = plot(f(x),(x,-pi/2,pi/2), linestyle='--', thickness=3) p 
       

Para representar varias funciones en la misma gráfica, se "suman":

f(x) = sin(x) g(x) = cos(x) p = plot(f(x),(x,-pi/2,pi/2), color='black') q = plot(g(x), (x,-pi/2, pi/2), color='red') r = p + q r 
       

Ejercicio 8: Representa las siguientes funciones en la misma gráfica y en el intervalo [0,1], cada una con un estilo diferente:

sin(pi x), exp(x), 1/(1+x)

 

 
       

Listas, bucles y y bucles en listas

Un tipo de datos muy importante en Sage son las listas. Vamos a ver cómo crear, modificar y seleccionar elementos de ellas.

Una lista no es más que una colección ordenada de elementos. Cada elemento de la lista puede ser cualquier tipo de objeto. Para crear una lista se pone entre corchetes la lista de los elementos, separados por comas.

L = [2,3,5,7,11,13,17,2] 
       

Para acceder a un elemento se pone el nombre de la lista, seguido de corchetes y entre corchetes el número de elemento al que queremos acceder. El primer elemento se numera con 0.

L[0] 
       
2
2
L[0]=3;L 
       

También podemos comenzar contando desde el último elmento usando índices negativos. Así el último elemento está numerado con -1, el penúltimo con -2, etc

L[-2] 
       

Podemos seleccionar un segmento de la lista con el operador :, siguiendo la convención nombreDeLista[primerElemento:ultimoElemento].

L[2:5] 
       

Si el último elemento que queremos elegir es el último elemento de la lista, no es necesario ponerlo.

L[2:] 
       
L[:-2] 
       

Si queremos saber cuál es el último elemento, utilizamos la orden len

len(L) 
       
8
8

Recordemos que los elementos de una lista pueden ser de distinto tipo, aunque no es usual emplearlas de este modo.

Lista_rara=[1,"Hola",[1,2,3]];Lista_rara 
       

Podemos añadir un elemento al final de una lista con append, añadir una lista con extend o símplemente unir varias listas con la operación +.

L.append(4) 
       
L.extend([10,11,12]) 
       
[1,3,5]+[2,4,6]+[100] 
       

Creación de listas

Python permite crear de modo sencillo una lista de elementos equiespaciados. En Sage esta utilidad está extendida también para trabajar de modo simbólico.

[1..7] 
       
[2,4..10] 
       
[pi,4*pi..32] 
       
show([x^2,3*x^2/2..2*pi*x^2]) 
       

Operando con listas

Sage soporta muchas operaciones directamente sobre listas. Como ejemplo, vamos a sumar los elementos de una lista, vamos a agrupar dos listas en una uniendo el elemento k de la primera con el k de la segunda, y por último map que aplica una función a cada elemento de una lista.

sum([1..100]) 
       
zip([1,2,3,4],['a','b','c','d'] ) 
       
map( cos, [0, pi/4, pi/2, 3*pi/4, pi] ) 
       

Ejercicio 9:

a) Crea una lista con los cuadrados de los números (naturales) del 4 al 25

b) Crea una lista con los cuadrados de los números pares del 4 al 25

c) Calcula el seno de los números anteriores

 
       

Estructuras de control

Las estructuras de control seleccionan cuál es la siguiente sentencia a ejecutar (selección -- if) o hacen que una sentencia se ejecute repetidamente (iteración -- while o for).

 

En Python, la selección tiene la siguiente sintaxis:

n=12343; if n%2 == 0: print n/2 else: print (n+1)/2 
       
6172
6172

Notese que la indentación es esencial: todas las sentencias que queremos que se ejecuten han de tener la misma indentación.

Para repetir una sentencia un número indeterminado de veces, podemos usar un bucle while, con sintaxis:

i=0; while i < 5: i=i+1; print i^2 
       

Finalmente, el bucle for repite una instrucción para cada elemento de una lista:

for i in [0..4]: print i^2 
       
for str in ["juan","mario","eva","laura"]: print str.capitalize() 
       

Ejercicio 10:

a) Suma con un bucle los números del 1 al 1000

b) Suma con un bucle los números positivos del siguiente vector:

v=[random()-1/2 for i in [1..100]];v 
       
[0.43041922997782867, 0.3317053590895901, 0.22819942764989942,
-0.2527449672021136, 0.3605354608818734, 0.039305558236153004,
0.28092372695150625, -0.2925022817336186, 0.46385784822052345,
0.1777649576423308, -0.33201519396840873, 0.03344017587740011,
-0.14154498888801903, 0.027781827388227875, 0.42225831879286235,
-0.3807922030419313, -0.43268036411924904, 0.2505570825644702,
0.39512599045679886, -0.48388734452919036, 0.013379118133091783,
0.3001430764154053, -0.2557918932131953, -0.4971083514049013,
-0.36406057955683047, -0.28958363070215987, 0.13826534427787207,
-0.4038770987017445, -0.08205248123839548, -0.3850792875200477,
-0.31595143100171663, -0.20525772155256716, 0.1966727937313888,
-0.4455765213248942, 0.41344367322464637, -0.15095036310511956,
0.46618044672670944, 0.16891551670903515, -0.3120161230113271,
0.11072445602565795, 0.3277828567593223, -0.1676467271114186,
0.4625396768919906, 0.1514808855134493, 0.4903530652490804,
-0.38092604960497134, -0.17964973678442708, -0.05749795326781992,
0.42797928200179614, -0.2547093611565948, -0.18045495578888648,
-0.4573090246804674, -0.13831294252694093, -0.3995813930266239,
0.3746920917761126, 0.35669566662248187, 0.47167583318899287,
0.4707975440892883, -0.09321812502487759, 0.3493975302212299,
-0.4830176527612118, -0.4921446799939564, -0.25102315569081823,
-0.4773262337440868, -0.28307337238169195, 0.2164753157287871,
0.2984375439052681, -0.027082238494137045, 0.3168689305291068,
-0.30182892466358713, 0.3905461779322783, -0.38253167634895635,
-0.042029358416913576, -0.3161896614324665, -0.3154678127842825,
-0.3648835955635169, -0.4634239486887981, 0.1923158329338417,
0.08266168803843965, 0.16357033360008932, 0.2469657778540436,
0.3164882968633732, 0.41641008996392226, -0.17661526885167844,
-0.11338815984280626, -0.07692612742586202, -0.16300747041317032,
-0.37368468061389737, 0.4616561609703087, 0.4474272548185647,
-0.11158878799215488, 0.22381473398987206, -0.3226592051576638,
-0.3546381995023502, -0.2536351193880224, -0.47461922907329335,
-0.35205951891346576, 0.2879316873254656, -0.37129282689657384,
0.27646055251233903]
[0.43041922997782867, 0.3317053590895901, 0.22819942764989942, -0.2527449672021136, 0.3605354608818734, 0.039305558236153004, 0.28092372695150625, -0.2925022817336186, 0.46385784822052345, 0.1777649576423308, -0.33201519396840873, 0.03344017587740011, -0.14154498888801903, 0.027781827388227875, 0.42225831879286235, -0.3807922030419313, -0.43268036411924904, 0.2505570825644702, 0.39512599045679886, -0.48388734452919036, 0.013379118133091783, 0.3001430764154053, -0.2557918932131953, -0.4971083514049013, -0.36406057955683047, -0.28958363070215987, 0.13826534427787207, -0.4038770987017445, -0.08205248123839548, -0.3850792875200477, -0.31595143100171663, -0.20525772155256716, 0.1966727937313888, -0.4455765213248942, 0.41344367322464637, -0.15095036310511956, 0.46618044672670944, 0.16891551670903515, -0.3120161230113271, 0.11072445602565795, 0.3277828567593223, -0.1676467271114186, 0.4625396768919906, 0.1514808855134493, 0.4903530652490804, -0.38092604960497134, -0.17964973678442708, -0.05749795326781992, 0.42797928200179614, -0.2547093611565948, -0.18045495578888648, -0.4573090246804674, -0.13831294252694093, -0.3995813930266239, 0.3746920917761126, 0.35669566662248187, 0.47167583318899287, 0.4707975440892883, -0.09321812502487759, 0.3493975302212299, -0.4830176527612118, -0.4921446799939564, -0.25102315569081823, -0.4773262337440868, -0.28307337238169195, 0.2164753157287871, 0.2984375439052681, -0.027082238494137045, 0.3168689305291068, -0.30182892466358713, 0.3905461779322783, -0.38253167634895635, -0.042029358416913576, -0.3161896614324665, -0.3154678127842825, -0.3648835955635169, -0.4634239486887981, 0.1923158329338417, 0.08266168803843965, 0.16357033360008932, 0.2469657778540436, 0.3164882968633732, 0.41641008996392226, -0.17661526885167844, -0.11338815984280626, -0.07692612742586202, -0.16300747041317032, -0.37368468061389737, 0.4616561609703087, 0.4474272548185647, -0.11158878799215488, 0.22381473398987206, -0.3226592051576638, -0.3546381995023502, -0.2536351193880224, -0.47461922907329335, -0.35205951891346576, 0.2879316873254656, -0.37129282689657384, 0.27646055251233903]
 
       

Listas por comprensión

Python permite definir listas por comprensión. Es una manera rápida de crear una lista a partir de otra. La sintasis es [ expresión for indice in lista]. Devuelve una lista resultado de evaluar la expresión (que dependerá de la variable denominada índice) aplicada a cada uno de los elementos de la lista.

[ 2*k for k in [0..10] ] 
       
[ cos(x) for x in [pi/4, pi/2..2*pi]] 
       

Además se puede filtrar el resultado de la salida:

U = [ k for k in [1..19] if gcd(k,20) == 1]; U 
       

Y se pueden anidar bucles:

[ (a,b) for a in U for b in U ] 
       

Por último, la expresión inicial también puede contener condicionales:

[ 'prime' if x.is_prime() else 'not prime' for x in U] 
       

Ejercicio 11:

a) Crea una lista con los cuadrados de los números (naturales) del 4 al 25

b) Crea una lista con los cuadrados de los números pares del 4 al 25

c) Crea una lista con los múltiplos de pi entre 4 y 25

 
       
 
       
 
       

Funciones

Para definir una función (programación) en Sage/Python, usamos la palabra clave def, seguida del nombre de la función, las variables de entrada entre paréntesis y dos puntos. En las siguientes líneas se escriben los comandos que queremos que evalúe la función. La indentación es muy importante en Python: todo lo que esté con la misma indentación será el cuerpo de la función, para terminar la función basta escribir sin indentación. Por último, el valor que devuelve la función se determina por la palabra clave return.

def g(x,y): x=x+1; y=y+2; return x*y 
       

Podemos usar la función igual que usamos cualquier función matemática.

g(1,3) 
       

Ejercicio 12: Crea una función que reciba dos números y devuelva el mayor de ambos

 
       

Ejercicio final: Rellena el siguiente cuadro (haciendo doble "clic"), guarda el "worksheet", compártelo con tu profesor, imprime la práctica como pdf según las instrucciones que se indican en la Guía para hacer las prácticas con Sage y súbela al campus virtual. 

Alumno: 

Asignatura: