iteration with for for a simple computation

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))) + ...
c(5).*cos(4.*acos((m)));
where the vector m and c are in attached.

 採用された回答

dpb
dpb 2020 年 7 月 8 日

0 投票

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 件)

カテゴリ

ヘルプ センター および File ExchangeLoops and Conditional Statements についてさらに検索

製品

質問済み:

2020 年 7 月 8 日

コメント済み:

2020 年 7 月 8 日

Community Treasure Hunt

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

Start Hunting!

Translated by