24

The Schroedinger equation is effectively a reaction-diffusion equation $$ i\frac{\partial\psi}{\partial t}=-\nabla^2\psi+V\psi\tag{1} $$ (all constants are 1). When it comes to any partial differential equation, there's two ways to solve it: Implicit method (adv: large time steps & unconditionally stable, disadv: requires matrix solver that can give bad ...


17

Yes, it is much more difficult to do so. For the $N$ body problem, all you need to compute are the trajectories $\mathbf x_i(t), i=1\ldots N$ which are just $N$ functions of a single variable. On the other hand, even for a single electron, the solution of the Schroedinger equation is a function $\Psi(x,y,z,t)$, i.e., a function of four variables. For two ...


16

As far as I'm aware, the most accurate methods for static calculations are Full Configuration Interaction with a fully relativistic four-component Dirac Hamiltonian and a "complete enough" basis set. I'm not an expert in this particular area, but from what I know of the method, solving it using a variational method (rather than a Monte-Carlo based method) ...


12

Finding the eigenvalues for the Schrödinger equation is really similar to finding the eigenvalues for the wave equation. You start with your differential equation $$\left[-\frac{1}{2}\nabla'^2 + V(r)\right]\psi(\mathbf{r}) = E' \psi(\mathbf{r})$$ where we did the change of variable $(x,y,z) \rightarrow (a_0 x, a_0 y, a_0 z)$, with $a_0 \equiv 1$ Bohr, $E'= ...


11

The fundamental challenge of quantum mechanical calculations is that they do not scale very well—from what I recall, the current best-case scaling is approximately $O(N_e^{3.7})$, where $N_e$ is the number of electrons contained in the system. Thus, 13 water molecules will scale as having $N_e = 104$ electrons instead of just $N = 39$ atoms. (That's a factor ...


11

The best approach is to use an ODE solver that is guaranteed to conserve the norm of the initial condition, i.e., for which $\|y_n\| = \|y_0\|$ for all $n\in\mathbb{N}$. Such solvers exist, and are called geometric integrators, since they preserve geometric properties of the exact solution (in this case, that energy is conserved, i.e., $\frac{d}{dt}\|y(t)\| =...


10

Kyle Kanos's answer looks to be very full, but I thought I'd add my own experience. The split-step Fourier method (SSFM) is extremely easy to get running and fiddle with; you can prototype it in a few lines of Mathematica and it is, extremely stable numerically. It involves imparting only unitary operators on your dataset, so it automatically conserves ...


9

256 equations is a relatively small number. All of the usual integrators, such as those included in Matlab, Maple or Mathematica should have no real problem with equations of this size and should be able to return answers in a fraction of the time it would take an algorithm you would implement yourself, because they use sophisticated explicit/implicit and ...


9

If your discrete equations represent your problem properly you should have the right eigenvalues, although numerically you can get a small imaginary part when solving the eigenvalue problem. As an example, let us consider the axisymmetric case of a cylindrical well. The Schrödinger equation would be written as $$\frac{\partial^2 \psi}{\partial r^2} + \frac{...


7

Kirill's answer is a good method but it is hampered that the fact that you need to tune it to a specific range in energy, so it is not appropriate if you have a broad-band wavepacket you need to absorb. An alternative approach is exterior complex scaling, which is reviewed well in Infinite-range exterior complex scaling as a perfect absorber in time-...


6

The problem is broadly equivalent to the difference between classical computers and quantum computers. Classical computers work on single values at once, as only one future/history is possible for one deterministic input. However, a quantum computer can operate on every possible input simultaneously, because it can be put in a superposition of all the ...


6

The solutions for the equation are in $$\psi \in \mathbb{C}^{3M}\times\mathbb{R}^+ \enspace .$$ If the number of electrons is small enough you can just use any traditional method. Like a domain discretization method (Finite Difference, Finite Element, Boundary Element), or a pseudospectral method. Since solving this equation is not more difficult than ...


5

I can recommend using the finite-difference time-domain (FDTD) method. I even wrote a tutorial some time back that should answer most of your questions: J. R. Nagel, "A review and application of the finite-difference time-domain algorithm applied to the Schrödinger equation," ACES Journal, Vol. 24, No. 1, February 2009 I have some Matlab codes that run ...


5

Caveat: I did not read beyond the statement So, what I did was to define functions for the potential and the second derivative, and use Euler's method. So there may be other issues with your code, but this one is already fundamental. You are trying to solve a wave equation with Euler's method. This is numerically unstable. To see why, note that the ...


4

Since you didn't post your MATLAB code, I'm not sure how you're calling ode45. I'm guessing you are changing the tspan vector (second argument) on each call to ode45. The first thing to understand is that the tspan vector has (almost) no effect on the time step used by ode45. The tspan vector simply allows you to pass to ode45 the time span of the ...


4

I don't know if the following helps, but for me it was very insightful to visualize the scaling behavior of quantum systems: The main problem comes from the fact that the Hilbert space of quantum states grows exponentially with the number of particles. This can be seen very easily in discrete systems. Think of a couple of potential wells that are conected ...


4

I would disagree with your statement that Euler and Runge-Kutta have to be sequential. I know that you are saying this because you cannot parallelize across time steps (or across inner time steps in the case of something like RK4), however both can be parallel as long as you do so within a single time step. You would simply evaluate the derivatives of your ...


4

From the comments, it sounds like your problem is stiff, and using an implicit integrator will help you a lot more than trying to parallelize. But in case someone comes here looking for information on parallel time integration, you can find a discussion of some simple parallel extrapolation and deferred correction methods in this preprint of mine. It's not ...


4

In the literature these boundary conditions go by the name of absorbing boundary conditions (or nonreflecting, open, radiation, invisible, far-field), and this is a well-known topic. One clear description I think is Absorbing Boundary Conditions for the Schrödinger Equation by Fevens and Jiang. Here is one approach (described in the above paper; I haven't ...


4

Numerically the sum isn't terribly easy: it behaves as $$ \sum_{n\geq 2, k\geq 1} \frac{1}{n(n^2-1)} \frac{e^{-4/k}}{(k^2-n^{-2})^2}, $$ so it converges linearly. Most numerical methods that can be expected to do well only really work for either alternating, or quickly converging sums. With a sum that converges linearly, you can only really get anywhere if ...


4

I know this problem well from my own research: it is given by the fact that the equation is very stiff. Thus, it is likely that you're doing nothing wrong (--although I haven't inspected your code). So where does the stiffness come from? The problem In order to solve the equation numerically, it is common to pick a grid and use finite-differences to ...


4

The SciPy tutorial explicitly states Note that ARPACK is generally better at finding extremal eigenvalues: that is, eigenvalues with large magnitudes. In particular, using which = 'SM' may lead to slow execution time and/or anomalous results. A better approach is to use shift-invert mode. and goes on to describe that. Basically, if $\lambda$ is the ...


4

I didn't follow exactly your notation so I can't say for sure what this would look like for your example, but two suggestions: if you really want your life made simple, check out qutip, the Quantum Toolbox in Python. It has classes specifically for quantum operators and state vectors, supports tensor product of operators in different spaces and keeps track ...


4

As always with numerical problems, it's a good idea to simplify things as much as possible to isolate what's really going wrong. You can simplify the problem by considering the evolution of a pure state $\psi$ instead of an entire density matrix, so solving $$i\dot\psi = H\psi$$ for the vector $\psi$ instead of the matrix $\rho$. Additionally, you can ...


4

I think that your potential for the numerical case is wrong. The potential should be a big positive number, so the solution tends to zero outside the well when the value of the potential increases. If you check the solutions in Wikipedia for the first three (bounded) states they should be $$E_n = \frac{2\hbar^2 v_n^2}{m L^2}\, ,$$ with $v_1 = 1.28$, $v_2 =...


3

You should rewrite the equation dimensionless with dimensional analysis. Proper step size should be evident then and can be compared more easily.


3

You would use something like OpenMP to exploit thread level parallelism. An example in C++ would be like #pragma omp parallel for for(int i = 0; i < num_matrices; i++){ DoEigendecomposition(matrix[i]); } The pragma will automatically cause each loop iteration to be performed in parallel (assuming you compile with the right flags; e.g. -fopenmp for ...


Only top voted, non community-wiki answers of a minimum length are eligible