Programación en Sage

Un script es un conjunto de comandos de Sage guardados en un fichero .sage para ser ejecutados posteriormente. Por ejemplo, imaginemos que queremos representar funciones con plot al tiempo que se salvan en un fichero; podemos guardar la función plotNsave en el fichero my_plots.sage:

def plotNsave(f, a, b, file):
    """
    Aqui se pone la descripcion de plotNsave
    Esta informacion se muestra al escribir:  plotNsave?
    """
    p = plot(f, (a, b))
    p.show()
    p.save(file)

Este script puede ejecutarse en un libro Jupyter o una terminal de Sage:

sage: pwd             # muestra la carpeta actual
u'/home/user'
sage: cd 'Escritorio' # cambio a una carpeta hija
/home/user/Escritorio
sage: ls              # muestra el contenido
['my_plots.sage']
sage: load('my_plots.sage')
sage: cd ..           # vuelve a la carpeta padre

Cuando se trabaja en una hoja .sagews de Cocalc, los comandos anteriores deben sustituirse por os.getcwd(), os.chdir('Escritorio') y os.listdir('.'), respectivamente. Usando attach en vez de load, la terminal de Sage reconocerá automáticamente los cambios que hagamos en el fichero con un editor externo. Una vez cargado, su contenido puede ser usado normalmente:

sage: sage: f(x) = x^2
sage: plotNsave(f, 1, 2, 'p.png')

Funciones lambda

Las funciones lambda permiten crear funciones anónimas compuestas de una única expresión. Son, básicamente, una forma escueta de definir una función:

sage: h = lambda x,y: (x^2,y^2)
sage: h(1,2)
(1, 4)

Estructuras de control de flujo

El bucle for ejecuta una serie de comandos para todos los valores de una lista:

fact = 1
for i in (2..10):
    fact = fact*i

Al final del bucle, fact contendrá  10! = \displaystyle\prod_{n=1}^{10}n. Los comandos internos al bucle se sangrarán con espacios en blanco. Los bucles pueden anidarse con sangrado creciente.

El bucle while ejecuta una serie de comandos mientras se dé una condición:

sum = 0.
n = 1
term = 1/n^4
while term > 1e-14:
   sum = sum + term # alternativamente, sum += term
   n = n+1 
   term = 1/n^4

Al final del bucle, sum contendrá una aproximación de  \displaystyle \sum_{n=1}^{\infty}\frac 1{n^4}, calculada sumando aquellos términos mayores que la tolerancia dada, 1e-14.

Sólo usaremos el bucle while en vez de un for cuando el número de iteraciones a realizar sea desconocido a priori.

Las estructuras if permiten decidir en función de una o varias condiciones:

i = 0 # asignar a i un valor
if i>0:
    print 'positivo'
elif i<0:
    print 'negativo'
else:
    print 'nulo'

El bloque elif y else son opcionales. Puede haber varios bloques elif.

Otros comandos

El comando break interrumpe la ejecución del bucle for o while más interno. Véase por ejemplo, la búsqueda del índice de la posición del primer elemento negativo de la lista x:

x = [1,0,-1, 2]
for i in range(len(x)):
    if x[i]<0:
        break
print 'El indice es '+str(i)

El comando return termina la ejecución de una función e indica el valor de su respuesta, como puede verse en la defición de la función f en esta entrada.

Advertisements
Esta entrada foi publicada en Sage. Ligazón permanente.

One Response to Programación en Sage

  1. Pingback: Expresiones simbólicas en Sage | fundmat

Deixar unha resposta

introduce os teu datos ou preme nunha das iconas:

Logotipo de WordPress.com

Estás a comentar desde a túa conta de WordPress.com. Sair /  Cambiar )

Google+ photo

Estás a comentar desde a túa conta de Google+. Sair /  Cambiar )

Twitter picture

Estás a comentar desde a túa conta de Twitter. Sair /  Cambiar )

Facebook photo

Estás a comentar desde a túa conta de Facebook. Sair /  Cambiar )

w

Conectando a %s