使用MATLAB ode45求解时间相关的薛定谔方程

时间:2016-06-23 03:02:04

标签: matlab matrix

时间依赖哈密顿量的薛定谔方程是:

$$i\hbar\frac{d}{dt}\psi(t) = H(t)\psi(t) \, .$$

我尝试在ode45中为时间相关的哈密顿量实现薛定谔方程的求解器。但是,因为哈密顿量$ H(t)$取决于时间。我不知道如何在ode45中进行插值。你能给我一些提示吗?

psi0 = [0 1];
H = [1 0;0 1]*cos(t); %this is wrong, I do not know how to implement this and pass it to ode45
hbar = 1;
t    = [0:1:100];
[T, psi] = ode45(dpsi, t, psi);
function dpsi = f(t, psi, H, psi0)
dpsi = (1/i)*H*psi;

我也试着想出一个矩阵插值解决方案 MATLAB: Interpolation that involve a matrix

1 个答案:

答案 0 :(得分:2)

在您的情况下,

H只是一个单位矩阵,因此我们可以将其与psi向量相乘以获取psi向量本身。然后,我们将i*hbar带到等式的右侧,以便最终的等式采用ode45接受的形式。最后,我们使用以下代码来解决psi

function schrodinger_equation

  psi0 = [0;1];
  hbar = 1;
  t = [0 100];
  [T,psi] = ode45(@(t,psi)dpsi(t,psi,hbar),t,psi0);

  for i = 1:length(psi0)
    figure
    plot(T,real(psi(:,i)),T,imag(psi(:,i)))
    xlabel('t')
    ylabel('Re(\psi) or Im(\psi)')
    title(['\psi_0 = ' num2str(psi0(i))])
    legend('Re(\psi)','Im(\psi)','Location','best')
  end

end

function rhs = dpsi(t,psi,hbar)
  rhs = 1/(1i*hbar)*cos(t).*ones(2,1);
end

请注意,我已经分别绘制了psi的两个组件,对于每个这样的图,我还分别绘制了实部和虚部。以下是psi0的两个不同值的图:

enter image description here

enter image description here