在我的代码中,有一行代码,使用MATLAB(R2017b)中的cumsum()函数计算向量A的累加和。但是,在每次迭代之间,向量A中只有一个元素发生变化,因此实际上只是从那以后的值发生了变化。我想知道是否有更快的方法?我已经尝试过A(elementNumber:end)= A(elementNumber:end)-oldValue + newValue,但这并没有更快。
此外,然后在每次迭代中使用find()函数在该累积和矩阵中查找第一个索引,该索引的值首先超过某个值。
我想知道在MATLAB中是否有更快的方法来执行这两种方法?
下面给出了我正在使用的那种代码的示例:
beta = 0.05;
S = randi(130, 15000, 1); I = randi(130, 15000, 1);
tmax = 10000; n=1; t(1) = 0; t1=0;
rates = (beta.*S.*I); cums = cumsum(rates); numI = sum(I);
Rtot = cums(end);
n=1; t(1) = 0; t1=0;
while t1<tmax
if n>1
newRate = beta*S(eventHouseNum)*I(eventHouseNum);
% rates(eventHouseNum) = beta*S(eventHouseNum)*I(eventHouseNum);
cums(eventHouseNum:end) = cums(eventHouseNum:end) - rates(eventHouseNum) + newRate;
rates(eventHouseNum) = newRate
end
Rtot = cums(end);
if Rtot==0
return
end
randNums = rand(2,1);
dt=-log(randNums(1))/Rtot;
P=randNums(2)*Rtot;
eventHouseNum = find(cums>=P,1);
S(eventHouseNum) = S(eventHouseNum)-1;
I(eventHouseNum) = S(eventHouseNum)+1;
numI = numI+1; n=n+1;
t(n)=t(n-1)+dt; t1=t(n);
Iarray1(n) = numI;
end