improve for loop performance

조회 수: 5 (최근 30일)
michael
michael 2022년 9월 20일
댓글: michael 2022년 9월 20일
Hi,
I have a for loop runing on all values and takes into acount previous value
for i=2:length(a)
a(i)=some_function(input1, input2, a(i-1))
end
where a is of size 200,000-300,000
Is there a way to improve it and speed up matlab performance?

답변 (1개)

Walter Roberson
Walter Roberson 2022년 9월 20일
In general:
  • you could get higher performance by moving the loop inside of some_function, so as to reduce the number of function calls
  • otherwise, it depends what is being calculated inside the function. The kind of code you are using is similar to what would be used to "filter" a signal, and if you can rewrite to use filt() or filtfilt() then that might be faster -- if the processing can be written in terms of derivatives or in terms of examining previous time steps. Also, if the computation is in terms of derivatives or timesteps, then Control System Toolbox transfer functions or state space models are sometimes good representations.
  • But there are certainly some computations that filter() and transfer functions are irrelevant for. There just might not be any useful speed improvement (other than running the calculation inside of one function to save on the function calls.)
  댓글 수: 3
Walter Roberson
Walter Roberson 2022년 9월 20일
It sounds like input1 and input2 are not constants then?
michael
michael 2022년 9월 20일
Right They are the input values for current point for the hysteresis (x,y)

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Frequency-Domain Analysis에 대해 자세히 알아보기

태그

제품


릴리스

R14SP2

Community Treasure Hunt

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

Start Hunting!

Translated by