iteration with for for a simple computation

1 回表示 (過去 30 日間)
Paul Rogers
Paul Rogers 2020 年 7 月 8 日
コメント済み: Paul Rogers 2020 年 7 月 8 日
I'd like do write this expression in a more compact and generic way, like with a for:
T = c(1)*cos(0) + c(2).*cos(1.*acos((m))) + c(3).*cos(2.*acos((m))) + c(4).*cos(3.*acos((m))) + ...
where the vector m and c are in attached.


dpb 2020 年 7 月 8 日
One way amongst many...
z=acos(m); % precompute the constant array
T=c(1)+sum(cell2mat(arrayfun(@(c,i) c*cos(i*z),c(2:end),[1:numel(c)-1].','UniformOutput',false)));
The straight for...end loop might be quicker and probably easier to read.
I don't know if the JIT optimizer can find and eliminate the redundant calculation of acos(m) on its own or not; didn't try any timing tests...
  1 件のコメント
Paul Rogers
Paul Rogers 2020 年 7 月 8 日
brilliant, thank you a lot, it's a solution I would have never tought!


その他の回答 (0 件)


Help Center および File ExchangeLoops and Conditional Statements についてさらに検索


Community Treasure Hunt

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

Start Hunting!

Translated by