Filter löschen
Filter löschen

iteration with for for a simple computation

2 Ansichten (letzte 30 Tage)
Paul Rogers
Paul Rogers am 8 Jul. 2020
Kommentiert: Paul Rogers am 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.

Akzeptierte Antwort

dpb
dpb am 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 Kommentar
Paul Rogers
Paul Rogers am 8 Jul. 2020
brilliant, thank you a lot, it's a solution I would have never tought!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu MATLAB finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by