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