matlab 解矩阵的常微分方程

ode45不能直接把矩阵作为输入或输出,输入和返回值必须是列向量。
所以把矩阵的每一个元素作为一个状态变量,例如2 * 2矩阵p=[p1,p2;p3,p4],在输出时转换为4 * 1列向量 [p1,p2,p3,p4] 即可.

建立方程组,输入为y,输出为dy。
考虑复数矩阵微分方程

dp/dt=(p * H-H * p) /i
(p,H都为2 * 2矩阵,p(t)是t的函数,H是一个常数矩阵)

由于输入的矩阵 y 会被自动转换为列向量,先把y reshape为2 * 2矩阵,然后写出矩阵形式方程dy_mat=(Hy-yH)/i; 输出dy再reshape为列向量即可。其中H是一个常数矩阵,作为参数传入。

function dy =lindblad( t,y,H )
y=reshape(y,size(H));
dy_mat=(H*y-y*H)/i;
dy=reshape(dy_mat,[numel(H),1]);
end

解方程

 %设置时间区间0~5秒,251个时间点
t_sec=0:0.02:5;
%初始状态,设置y0为2*2零矩阵,传入函数时会自动变为4*1列向量
y0=zeros(size(H));
%解出y随t的变化
[t,y] = ode45(@(t,y) lindblad( t,y,H ), t_sec, y0); 

最后得到的y是251 * 4的矩阵。每一行代表此时刻的4 * 1列向量。总共有251个时间点。再提取y的每一行,reshape为2 * 2矩阵即得到矩阵随时间变化情况。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值