Expresiones simbólicas en Sage

Las expresiones simbólicas (en inglés, “callable symbolic expressions”) son expresiones definidas en función de variables simbólicas:

sage: f(x) = sin(2*x)      # por defecto, x es una var. simbolica
sage: var('t')             # ahora t es una variable simbolica
sage: g(t) = exp(t)*sin(t) # g es una expresion simbolica
sage: g(5)                 # evalua g en x = 5

Las variables asignadas por el usuario pueden eliminarse con reset:

sage: reset('t')      # reset() borra todas las asignaciones previas

Sage puede resolver simbólicamente ecuaciones, y algunas inecuaciones y sistemas de ecuaciones, con solve:

sage: solve(x^2 == x^4, x)          # resuelve la ecuacion
[x == -1, x == 1, x == 0]

sage: solve(x^2-6 >= 3, x)          # resuelve la desigualdad
[[x <= -3], [x >= 3]]

sage: var('y')
sage: solve([x+y==6, x-y==4], x, y) # resuelve el sistema
[[x == 5, y == 1]]

En casos donde la expresión explícita sea imposible de calcular o demasiado larga, puede ser preferible recurrir al cálculo numérico usando find_root:

sage: s = solve(x^2==x^3+1, x)     # devuelve varias soluciones
[x == -1/2*(1/18*sqrt(23)*sqrt(3) - 25/54)^(1/3)*(I*sqrt(3) + 1)...
sage: n(s[1].right())              # la segunda raíz no es compleja
-0.754877666246686 - 1.45716771982052e-16*I
sage: find_root(x^2==x^3+1, -1, 1) # busca numericamente la raiz 
-0.7548776662466927

Cálculo simbólico

Las expresiones simbólicas pueden usarse para realizar ciertos cálculos:

sage: f(x) = sin(1/x)
sage: limit(f(x), x=oo)                # limite en el infinito
0

sage: diff(f(x), x)                    # derivada
-cos(1/x)/x^2

sage: taylor(sin(x), x, 0, 3)          # pol. de Taylor de grado 3
-1/6*x^3 + x

sage: integral(tan(x), x)              # primitiva 
log(sec(x))

sage: i = integral(tan(x), x, 0, pi/4) # integral definida
1/2*log(2)
sage: n(i)                             # aproximacion de la integral
0.346573590279973

sage: numerical_integral(tan(x), 0, pi/4) \
# devuelve (aproximacion numerica de la integral, cota de error)
(0.34657359027997264, 3.84773979655831e-15)

Gráficas

Las gráficas bidimensionales  de expresiones simbólicas se obtienen con plot:

sage: plot(exp(x/3), -1, 1) # ver mas opciones con plot?

Para guardarla en un fichero, se usa el comando save:

sage: g.save('filename.png')

Las gráficas tridimensionales de funciones de dos variables requieren el uso de plot3d:

sage: var('y')
sage: plot3d(x^2+y^2,(x,-1,1),(y,-1,1))

sage-plot3d
Para otro tipo de representaciones, ver la entrada sobre gráficas en Sage.

Expresiones simbólicas definidas a trozos

Pueden declararse expresiones definidas a trozos mediante Piecewise:

sage: f1(x) = sin(x); f2(x) = x^2; f3(x) = x
sage: sage: f = Piecewise([[(-5,-1), f1(x)], \
....:                      [(-1, 2), f2(x)], \
....:                      [( 2, 4), f3(x)]])
sage: type(f) # f no es una expresion simbolica estandar
<type 'instance'>
sage: plot(f)

sage-piecewise
Si se desea indicar un intervalo diferente, debe indicarse en show:

sage: show(f.plot(), xmin=-1, xmax=3)

Si al definir la expresión f no usaron las expresiones f1, f2, f3,  se nos avisará de que los argumentos no tienen nombre explícito:

sage: g = Piecewise([[(-5,-1),sin(x)], [(-1,2),x^2], [(2,4),x]])
sage: g(1)
/usr/lib/sagemath/local/bin/sage-ipython:1: DeprecationWarning: 
Substitution using function-call syntax and unnamed arguments is 
deprecated and will be removed from a future release of Sage; ...
1

Este aviso también puede evitarse definiendo la expresión mediante funciones lambda:

sage: f = Piecewise([[(-5,-1), lambda x:sin(x)], \
                     [(-1,2),  lambda x:x^2], \
                     [(2,4),   lambda x:x]])
sage: f(1)
1

Las expresiones Piecewise permiten construir su derivada a trozos con la función diff o con el método derivative:

sage: diff(f) # f.diff() no implementado
Piecewise defined function with 3 parts, 
[[(-5, -1), x |--> cos(x)],
 [(-1, 2),  x |--> 2*x], 
 [(2, 4),   x |--> 1]]

La derivada se puede evaluar como una expresión simbólica más:

sage: f = Piecewise([([0,2], sin(x)), ((2,3), cos(x))])
sage: diff(f)(1).n()
0.540302305868140

Aunque Sage 7.5 recomienda usar el paquete piecewise en sustitución de Piecewise, la evaluación de derivadas se aparta de la habitual, por lo que no lo usaremos aquí:

sage: g = piecewise([([0,2], sin(x)), ((2,3), cos(x))])
sage: diff(g.expression_at(1))(1).n() 
0.540302305868140

Expresiones simbólicas con argumentos sin nombre explícito

Es posible declarar expresiones simbólicas con argumentos sin nombre explícito:

sage: var('y')
sage: f = x^2+y^2

En este caso, no se recomienda evaluar la función en la forma f(1,2). Debería hacerse, bien indicando los nombres de los argumentos al evaluarla, bien indicando en el método subs() un diccionario que los explicite:

sage: f(x=1, y=2)        # indicando los nombres de los argumentos
sage: f.subs({x:1, y:2}) # usando un diccionario en subs()

También es posible generar una expresión con argumentos explícitos a través del método function():

sage: f_named = f.function(x,y) # funcion con argumentos explicitos
sage: f_named(1,2)

El método subs() también puede ser usado en expresión simbólicas con argumentos explícitos y puede servir para asignar a una expresión con varios argumentos escalares las componentes de un vector dado, cuando el número de variables no se conoce previamente (por ejemplo, porque son argumentos de entrada de una función):

# supongamos que g es una expresion simbolica, i.e., g(x,y) = x^2+y^2
# supongamos que v es un vector, por ejemplo, v = [1,2]
sage: a = g.args()
sage: val = g.subs({a[i]: v[i] for i in range(len(a))}).n()
Advertisements
Esta entrada foi publicada en Sage. Ligazón permanente.

2 Responses to Expresiones simbólicas en Sage

  1. Pingback: Integración en Sage | fundmat

  2. Pingback: Integración en Sage | sageformaths

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 )

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 )

Google+ photo

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

Conectando a %s