加速MATLAB代码

时间:2018-08-10 13:27:56

标签: matlab

在我的代码中,有一行代码,使用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

0 个答案:

没有答案