I have the following script which I have managed to test for up to t=200 however I need it to go up to t=12054 and it takes too long to run.
Could anyone please help with vectorizing the code so that it can run faster? I have attached my data T
% T is a column of temperature data over 12054 days
V = flip(T,1)
syms k;
for t=1:12054
L(t) = 1+symsum(.5.^(abs(k-5)*V(t)),k,0,12054-t)/symsum(.5.^abs(k-5),k,0,12054-t);
end
lambda = double(L);
lambda = flip(lambda,2) % flipping back because we initially flipped T to get V.
r = poissrnd(lambda);
plot(r)

 채택된 답변

Paul
Paul 2021년 7월 5일
편집: Paul 2021년 7월 5일

1 개 추천

For starters, why use symsum at all? Doesn't sum() do exactly what is needed?
for t = 1:12054
k = 0:(12054 - t);
L(t) = 1 + sum(0.5.^(abs(k-5).*V(t)))./sum(0.5.^(abs(k-5)));
end
lambda = flip(L,2);
I suspect other optimizations can be made as well. For sure, pre-allocate L. But for only 12054 elements, this loop may be fast enough for what's needed.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Mathematics에 대해 자세히 알아보기

제품

릴리스

R2021a

질문:

2021년 7월 5일

댓글:

2021년 7월 5일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by