MATLAB Answers

iteration with for for a simple computation

1 view (last 30 days)
Paul Rogers
Paul Rogers on 8 Jul 2020
Commented: Paul Rogers on 8 Jul 2020
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.

  0 Comments

Sign in to comment.

Accepted Answer

dpb
dpb on 8 Jul 2020
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 Comment

Paul Rogers
Paul Rogers on 8 Jul 2020
brilliant, thank you a lot, it's a solution I would have never tought!

Sign in to comment.

More Answers (0)

Categories

Community Treasure Hunt

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

Start Hunting!