Ask Your Question

Revision history [back]

In Sage it is usual manipulate function values rather than functions, e.g. $\frac{d}{dx}(f+g)$ can be expressed by working with symbolic expressions, evaluated at a symbolic variable $x$ (basically, the "abuse of notation" $f = f(x)$):

sage: var('x'); f = function('f')(x); g = function('g')(x)
sage: diff(f + g, x)
diff(f(x), x) + diff(g(x), x)

(I also used the diff function rather than the method, with the additional benefit that it works on constants.)

Similarly, I would write an operator by letting it act on an expression (we interpret the expression as a function evaluated at a symbolic variable):

sage: var('x'); var('hbar', latex_name='\hbar'); var('m')
sage: psi = function('psi')(x); V = function('V')(x)
sage: H = lambda expr: -(hbar^2/(2*m))*diff(expr, x, x) + V*expr
sage: (conjugate(psi)*H(psi)).expand()
V(x)*conjugate(psi(x))*psi(x) - 1/2*hbar^2*conjugate(psi(x))*diff(psi(x), x, x)/m

You will want to replace psi and/or V here by symbolic expressions in x.