# Express the derivative in the Hamiltonian operator in sage

I want to compute the expectation value of the energy $\langle H \rangle$ for a quantum system with the wave function $\psi(x)$. This is done with $$\langle H \rangle = \int_{-\infty}^{\infty} \psi^* \hat{H} \psi d x$$ where $$\hat{H} = - \frac{\hbar^2}{2 m} \frac{d^2}{d x^2} + V(x)$$ is the Hamiltonian operator for some potential $V(x)$. How do I express $\frac{d}{d x}$ in sage if I don't know on which function it will be applied?

I know it is possible to use psi.diff(x), but is there a way to declare the operator so that it automatically does the derivative when it is multiplied with some function?

edit retag close merge delete

Sort by ยป oldest newest most voted

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.

more