1
假设我们有此哈密顿:系统
n = 10;
H = ones(n,n);
密度矩阵为:
Ro = sym('r',[n,n]);%Density matrix
运动方程是:
H*Ro-Ro*H
上面运动方程是方程的右边,左边是密度矩阵的时间导数。
如何在没有符号数学工具箱的情况下在Matlab中求解运动方程?我需要改变n的值。它可以达到100.
假设我们有此哈密顿:系统
n = 10;
H = ones(n,n);
密度矩阵为:
Ro = sym('r',[n,n]);%Density matrix
运动方程是:
H*Ro-Ro*H
上面运动方程是方程的右边,左边是密度矩阵的时间导数。
如何在没有符号数学工具箱的情况下在Matlab中求解运动方程?我需要改变n的值。它可以达到100.
在你的动力学函数中,为了使用MATLAB的standard ode
functions,在向量和矩阵之间重塑,这(据我所知)需要向量输入。请注意,符号工具箱在此解决方案的任何位置均未使用。 R
可以是任何尺寸的n-by-n
,在您机器的内存限制之内。
function dR = dynfun(R,H)
%// R = n^2-by-1 vector
%// H = n-by-n matrix
n = sqrt(length(R));
R = reshape(R,[n,n]); %// reshape R to n-by-n matrix
dR = H*R-R*H;
dR = dR(:); %// reshape dR to n^2-by-1 vector
end
调用ODE求解:
[tout,Rout] = ode45(@(t,R) dynfun(R,H), [0,T], R0(:));
其中T
是最终时间,R0
是n-by-n
初始条件,tout
是输出的时间步长,并Rout
是解的轨迹。注意由于重塑,Rout
将是k-by-n^2
,其中k
是时间步数。如果您想要随时间推移实际的矩阵,您需要重塑Rout
的每一行。
“解决”是指从一些初始条件'x0'将系统整合为有限时间'T'? – Geoff
是的,我的意思是。初始条件可以是只有(1,1)元素非零且等于1的矩阵。 – MOON