How would I sum a function and use fzero?

1 次查看(过去 30 天)
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.

回答(3 个)

Roger Stafford
Roger Stafford 2017-10-22
编辑:Roger Stafford 2017-10-22
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 2017-10-22
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 个评论
J. Nash
J. Nash 2017-10-22
Many thanks this was a great help. I couldn't get my head around it.
Birdman
Birdman 2017-10-22
Can you accept the answer so that other people having the same problem will know that there is a working solution?

请先登录,再进行评论。


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

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Optimization 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by