系统

2016-05-23 36 views
1

假设我们有此哈密顿:系统

n = 10; 
H = ones(n,n); 

密度矩阵为:

Ro = sym('r',[n,n]);%Density matrix 

运动方程是:

H*Ro-Ro*H 

上面运动方程是方程的右边,左边是密度矩阵的时间导数。

如何在没有符号数学工具箱的情况下在Matlab中求解运动方程?我需要改变n的值。它可以达到100.

+0

“解决”是指从一些初始条件'x0'将系统整合为有限时间'T'? – Geoff

+0

是的,我的意思是。初始条件可以是只有(1,1)元素非零且等于1的矩阵。 – MOON

回答

0

在你的动力学函数中,为了使用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是最终时间,R0n-by-n初始条件,tout是输出的时间步长,并Rout是解的轨迹。注意由于重塑,Rout将是k-by-n^2,其中k是时间步数。如果您想要随时间推移实际的矩阵,您需要重塑Rout的每一行。