Azzera filtri
Azzera filtri

How would I sum a function and use fzero?

1 visualizzazione (ultimi 30 giorni)
John Nosh
John Nosh il 22 Ott 2017
Commentato: Andrei Bobrov il 22 Ott 2017
I want a function to look like this y=sin(t1-T)+sin(t2-T)+sin(t3-T)+...+sin(tn-T) and use the fzero to find T. How would I go about this? Thank you in advance.

Risposte (3)

Roger Stafford
Roger Stafford il 22 Ott 2017
Modificato: Roger Stafford il 22 Ott 2017
Using ‘fzero’ on that particular problem is needlessly inefficient. You can use ‘atan2’ and ‘asin’ instead.
cn = cos(t1)+cos(t2)+...+cos(tn);
sn = sin(t1)+sin(t2)+...+sin(tn);
p = atan2(sn,cn);
as = asin(y/sqrt(sn^2+cn^2));
T1 = p-as; % One solution (in radians)
T2 = p+as-pi; % Another solution (in radians)
Also any multiple of 2*pi added or subtracted from T1 or T2 is a solution. (Note that the inequality y^2<=sn^2+cn^2 must be true for a solution to exist.)

Birdman
Birdman il 22 Ott 2017
t=0:0.1:10;syms T y(T);
for i=1:1:length(t)
yy(i)=sin(t(i)-T);
end
y=symfun(sum(yy),T);
fzero(y,0.5)
Hope this helps.
  2 Commenti
J. Nash
J. Nash il 22 Ott 2017
Many thanks this was a great help. I couldn't get my head around it.
Birdman
Birdman il 22 Ott 2017
Can you accept the answer so that other people having the same problem will know that there is a working solution?

Accedi per commentare.


Andrei Bobrov
Andrei Bobrov il 22 Ott 2017
f = @(T)sum(sin(t(:) - T))
fzero(f,.5)
  1 Commento
J. Nash
J. Nash il 22 Ott 2017
Wow this is even shorter. Helps a lot since I have around 1000 lines of code. Many thanks for making my code easier.

Accedi per commentare.

Categorie

Scopri di più su Optimization in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by