matlab生成用Monte-Carlo方法产生的传染病SI模型的感染者和易感者的数据快照矩阵并进行SVD处理可视化的代码
时间: 2024-03-30 15:37:44 浏览: 238
以下是一个基于Monte-Carlo方法产生的SI模型的感染者和易感者的数据快照矩阵,并进行SVD处理可视化的Matlab代码:
```matlab
% 设置参数
N = 100; % 总人数
beta = 0.3; % 接触率
gamma = 0.1; % 恢复率
T = 100; % 模拟时长
% 初始化状态
S = N - 1; % 初始易感者数量
I = 1; % 初始感染者数量
X = [S, I]; % 初始状态向量
% 使用Monte-Carlo方法进行模拟
for t = 1:T
% 计算每个感染者的传染概率
p = beta * (X(2) / N);
% 对每个易感者进行传染
for i = 1:X(1)
if rand() < p
X(1) = X(1) - 1;
X(2) = X(2) + 1;
end
end
% 对每个感染者进行恢复
for j = 1:X(2)
if rand() < gamma
X(2) = X(2) - 1;
end
end
% 将当前状态加入快照矩阵
X_snapshot(t, :) = X;
end
% 对快照矩阵进行SVD处理
[U, S, V] = svd(X_snapshot);
% 可视化SVD结果
figure()
subplot(2,2,1)
plot(X_snapshot(:, 1))
title('易感者数量')
subplot(2,2,2)
plot(X_snapshot(:, 2))
title('感染者数量')
subplot(2,2,3)
plot(U(:, 1))
title('U的第一列')
subplot(2,2,4)
plot(V(:, 1))
title('V的第一列')
```
这段代码首先设置了SI模型的参数,然后使用Monte-Carlo方法进行模拟,将每个时刻的状态向量加入快照矩阵中。接着使用Matlab的SVD函数对快照矩阵进行SVD分解,并可视化SVD结果。其中,左上角的图显示了易感者数量随时间的变化,右上角的图显示了感染者数量随时间的变化,左下角的图显示了U的第一列随时间的变化,右下角的图显示了V的第一列随时间的变化。这些图形可以帮助我们更好地理解SI模型的行为,以及SVD分解的结果。
阅读全文