Matlab中常微分方程组

时间:2016-05-23 12:52:02

标签: matlab ode

假设我们有这个汉密尔顿主义者:

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

密度矩阵是:

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

运动方程是:

 H*Ro-Ro*H

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

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

1 个答案:

答案 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(:)); 是最终时间,TR0初始条件,n-by-n是输出时间步,tout是解决方案轨迹。请注意,由于重新整形,Rout将为Rout,其中k-by-n^2是时间步数。如果你想随着时间的推移得到实际的矩阵,你需要重塑k的每一行。