【发布时间】:2015-12-15 03:16:34
【问题描述】:
在 MATLAB 中,我为简单的生死过程编写了随机模拟算法 (Gillespie),并在for 循环中使用hold on 得到了一个绘图。
对于每个 Qp 值,我有 100 个 PStoch 值,因为我为每个 Qp 值运行了 100 次模拟。在下图中很难看到这些值,因为它们都聚集在一起。
如何将绘图中的数据保存在矩阵中,以便之后对它们进行一些计算?具体来说,我需要一个大小为 100 x 100 的矩阵,其中所有 PStoch 值对应于每个 Qp 值。
我的代码如下:
rng('shuffle')
%% Pre-defined variables
Qpvec = logspace(-2,1,100);
len = length(Qpvec);
delta = 1e-3;
P0vec = Qpvec./delta;
V = [1,-1];
tmax = 10000;
%% Begin simulation
figure(1)
for k = 1:len
t0 = 0;
tspan = t0;
Qp = Qpvec(k);
P0 = P0vec(k);
Pstoch = P0;
while t0 < tmax && length(Pstoch) < 100
a = [Qp, delta*P0];
tau = -log(rand)/sum(a);
t0 = t0 + tau;
asum = cumsum(a)/sum(a);
chosen_reaction = find(rand < asum,1);
if chosen_reaction == 1;
P0 = P0 + V(:,1);
else
P0 = P0 + V(:,2);
end
tspan = [tspan,t0];
Pstoch = [Pstoch;P0];
end
plot(Qp,Pstoch)
hold on
axis([0 max(Qp) 0 max(Pstoch)])
end
感谢您的帮助。
【问题讨论】:
-
将
Qp设为向量,将Pstoch设为矩阵,并将所有内容索引到它们中,而不是标量。 -
您能详细说明一下吗?我了解制作向量和矩阵,但不是“为所有内容编制索引”。
-
其实你甚至不需要
Qp,只要在情节中使用Qpvec。Pstoch多于 100 列,len行,所以将其设为zeros(len,100),然后像Pstoch(k,i)一样将元素放入其中,您只需计算i,只需计算您的迭代次数while 循环。
标签: matlab for-loop data-acquisition