MUI_IIMA_1314_Tutorial_Comandos_Sage

1458 days ago by trinidad

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. 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 
       

Ejercicio. 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. Crea una celda de texto, escribe "hola mundo" y guárdalo.

 
       

Dentro de las celdas de texto podemos usar código latex escribiéndolo directamente.

Ejercicio. Crea una celda de texto, escribe "La ecuación de la circunferenca unidad es \$x^2+y^2=1\$ y el área es \$2\int_0^2 \sqrt{1-x^2}dx=pi\$" y guárdalo.

 
       

También puedes obtener el código latex de la salida de Sage usando la función latex

latex(pi^2+x^2) 
       

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).

Además, podemos compartir el archivo con un compañero o con el profesor.

Ejercicio. Comparte este documento con el profesor. Después guardalo y 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) 
       
divmod(8,3) # Devuelve el cociente y el resto 
       

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 
       

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) 
       
sqrt(2.4) 
       

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

sin(90.0) 
       
cos(90.0) 
       
sin(3.1416) 
       

 

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 
       
(2/4)^23 
       

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

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

Ejercicio. Calcula el resultado de las siguientes operaciones:


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

 
       

2. Tipos de datos y variables

Variables numéricas

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:

       

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) 
       
       
c.n() 
       

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

d=0.1 d 
       
h=d/10 h 
       

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

d=0.2 d 
       

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

d=d+d^2 d 
       

Ejercicio. Asígna el valor 1 a una variable. En otra celda calcula n+1 y asígnalo de nuevo a n. Ejecuta la sentencia anterior varias veces para ver cómo va contando.

 
       

Vectores y matrices

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

v1 = vector([1,-1,1]); v1 
       
v2 = vector([3,0,pi]); v2 
       

Las operaciones básicas de vectores están soportadas:

v1+v2 
       
4*v1 
       
v1.norm() 
       
v1.normalize() 
       

Y el producto escalar y vectorial (el vectorial sólo tiene sentido en dimensión 3).

v1*v2 
       
v1.cross_product(v2) 
       

Igualmente podemos definir matrices y operar con ellas con las operaciones usuales.

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

Podemos convertir una lista de números en una matriz, especificando primero las dimensiones.

C = matrix(4,2,[1,2,3,4,5,6,7,8]);C 
       

Podemos acceder a un elemento de la matrix poniendo su posición entre corchetes (la numeración comienza en 0).

A[0,1]=1;A 
       

Incuso podemos seleccionar qué filas y qué columnas queremos.

A[[0,1],[0,1]] 
       

También podemos obtener diréctamente filas o columnas.

B.row(2) 
       
B.column(1) 
       

Además, podemos operar con las variables anteriores:

A+B 
       
A*B 
       
B*A 
       
b= vector([1,2,3,4]); b 
       
A*b 
       
b*A 
       

Además podemos calcular inversas, resolver sistemas lineales, etc

A.inverse() 
       
sol=A.solve_right(b);sol 
       
A*sol 
       
A.inverse()*b 
       
det(A) 
       

Si queremos que las matrices y vectores sean de números reales (por defecto trata de determinar el tipo de números a partir de los datos), debemos especificar RDF en la defición:

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

Ejercicio: Consideramos la matriz:

\[A=\newcommand{\Bold}[1]{\mathbf{#1}}\left(\begin{array}{rrr}
1 & 2 & 1  \\
2 & 0 & 4  \\
-2 & 7 & 2 \\
\end{array}\right)\]

a) Calcula su inversa

b) Resuelve el sistema $A*x=(1,2,3)$

c) Calcula el producto vectorial de las dos primeras filas de A. Multiplica el vector resultante por la tercera fila. Recordemos que el resultado es el área del paralepípedo determinado por esos tres vectores.

 
       

3. 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:

       

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

f(0); f(3); f(3.2); f(pi) 
       

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

f.diff(x) 
       
f.diff(x)(1) 
       
f.integrate(x) 
       

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

f. 
       

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

var('a') g(x)=a*x^3+4*a g(3) 
       
g.diff(x) 
       

Además podemos simplificar y factorizar las funciones y resolver ecuaciones.

f(x)=(sin(2*x)-cos(x))^4+(sin(2*x)-cos(x))^5;f(x) 
       
f.factor() 
       
f.expand() 
       
f.trig_expand() 
       
f.full_simplify() 
       
solve(x^2 + 3*x + 2, x) 
       
x, b, c = var('x b c') solve([x^2 + b*x + c == 0],x) 
       
var('x y p q') eq1 = p+q==9 eq2 = q*y+p*x==-6 eq3 = q*y^2+p*x^2==24 solve([eq1,eq2,eq3,p==1],p,q,x,y) 
       

Ejercicio

a) 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.

b) Resuelve la ecuación $x^3+3x-1=0$

c) Resuelve el sistema de ecuacioens $x^2+y=0$, $x+y^2=0$.

 
       

4. 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] 
       
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) 
       

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:

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

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

c) Calcula el seno de los números anteriores

 
       

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:

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

 
       

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: