假设我们有这个汉密尔顿主义者:
n = 10;
H = ones(n,n);
密度矩阵是:
Ro = sym('r',[n,n]);%Density matrix
运动方程是:
H*Ro-Ro*H
上述运动方程是方程的右边,左边是密度矩阵的时间导数。
如何在没有符号数学工具箱的情况下解决Matlab中的运动方程?我需要改变n的值。最高可达100。
答案 0 :(得分:0)
在你的动力学函数中,为了使用MATLAB的standard ode
functions,在矢量和矩阵之间进行重塑,这是我所知道的,需要矢量输入。请注意,此解决方案中的任何位置都不使用符号工具箱。 <{1}}可以是机器内存约束下的任何大小R
。
n-by-n
调用ODE求解器:
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
[tout,Rout] = ode45(@(t,R) dynfun(R,H), [0,T], R0(:));
是最终时间,T
是R0
初始条件,n-by-n
是输出时间步,tout
是解决方案轨迹。请注意,由于重新整形,Rout
将为Rout
,其中k-by-n^2
是时间步数。如果你想随着时间的推移得到实际的矩阵,你需要重塑k
的每一行。