Trying to reduce computation time

1 次查看(过去 30 天)
Hey, I am trying to implement a code to compute the values of two functions using a large array of input.
visitst = symfun(exp(T/4)+1000,T);
visitsp = symfun(-10*(P-10)^2+5000,P);
for i=1:n
Values1(i) = visitst(Input1(i));
Values2(i) = visitsp(Input2(i));
end
I am looking to go through an "Input1" and "Input2" array of 100k+ different inputs, but even 1000 are taking extremely long computing times. Can someone suggest a method of improving this?

采纳的回答

Jan
Jan 2017-1-25
Pre-allocation the output before the loop:
Value1 = zeros(1, n);
Value2 = zeros(1, n);
I do not expect, that this is the bottleneck. But the costs of a forgotton pre-allocation grow exponentially, such that there is a limit in the input size, where this becomes the bottleneck.
  2 个评论
ThB
ThB 2017-1-25
编辑:ThB 2017-1-25
That just cut the computational time massively (from 30sec to 4sec for example). I just preallocated the size using
Value1 = zeros(n);
Thank you very much!
Any other ideas on how to speed things up?
Jan
Jan 2017-1-25
编辑:Jan 2017-1-25
Wow, I'm surprised. Note that zeros(n) allocates a n*n matrix, but I'm not sure if the double class is sufficient for your case. Another method for an implicit pre-allocation is to run the loop backwards:
for i = n:-1:1 % Backwards for implicit pre-allocation
Then the last element is created at first, which reserves the complete vector at once - and in the matching class. Just be sure to add the comment, otherwise the readers (like you in 3 months) might wonder, what the purpose of this direction might be useful for.
For further speedups, use the profiler at first: Find the line, which uses the most processing time. Optimizing other parts is hardly useful.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Programming 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by