Why the sums of cos(x) over 2*pi range not zero?

3 ビュー (過去 30 日間)
Tianyou Chen
Tianyou Chen 2012 年 7 月 11 日
when evaluating the following codes:
t = linspace(-pi,pi,128); s = sin(t); c = cos(t); sum(s), sum(c)
ans =
6.811558403281303e-15
ans =
-0.999999999999978
Q: should not both be zero?
and try
sum(c(2:end))
ans =
2.5313e-14
also quad(@cos,-pi,pi)
ans =
4.0143e-09
Q: Why the discrepancy?
Thank you for your input.
Thanks J

採用された回答

Greg Heath
Greg Heath 2012 年 7 月 11 日
T = fundamental period
N = number of samples
dt = T/N sampling interval
f0 = 1/T fundamental frequency
(n-1)*f0 harmonics 1<=n <= N
Orthogonality interval
t = t0:dt:t0+T-dt;
t = t0+[0:dt:T-dt];
t = t0+dt*[0:N-1];
help fft
doc fft
Hope this helps
Greg
  2 件のコメント
Greg Heath
Greg Heath 2012 年 7 月 11 日
t = t0 + linspace(0,T-dt,N);
t = t0 + dt*linspace(0,N-1,N);
Tianyou Chen
Tianyou Chen 2012 年 7 月 11 日
Thanks Greg. It makes sense now. J

サインインしてコメントする。

その他の回答 (3 件)

Luffy
Luffy 2012 年 7 月 11 日
In matlab,
sin(pi) = 1.2246e-16
The expression sin(pi) is not exactly zero because pi is not exactly π

Wayne King
Wayne King 2012 年 7 月 11 日
編集済み: Wayne King 2012 年 7 月 11 日
If you're trying to establish some equivalence between the integral of cos(t) from -pi and pi and the sum of cos(t), you're forgetting a very important part and that is the dt
t = linspace(-pi,pi,1000);
dt = (pi-(-pi))/length(t);
sum(cos(t))*dt
Using other integration routines in MATLAB is more robust than what I've done, but you see it gets you much closer to zero. Think about the formula for a Riemann sum.
  1 件のコメント
Tianyou Chen
Tianyou Chen 2012 年 7 月 11 日
Hi Wayne,
Thanks for the answer. But I don't think dt is the issue. try this and nyou will know what I mean: t1 = linspace(-pi,0,64); t2 = linspace(0,pi,64); c1 = cos(t1); c2 = cos(t2); sum(c1) sum(c2)
ans =
-4.4409e-16
ans =
5.7732e-15
or t1 = linspace(0,pi,64); t2 = linspace(pi,2*pi,64);
c1 = cos(t1); c2 = cos(t2); sum(c1) sum(c2)
ans =
5.7732e-15
ans =
-1.1102e-14
Thus with or without dt, the sum of a sin or cos over a period of 2pi should be zero. Here the sin function gives the correct answer. I suspect that the even nature of the cos fuction may have something to do with its suming over (-pi, pi) is -1 while over (0,2*pi) is +1.

サインインしてコメントする。


Wayne King
Wayne King 2012 年 7 月 11 日
I don't think you can say that simply summing cos(t) on an arbitrary grid should be zero. You have to be careful how the grid is constructed. For example
k = 1;
N = 100;
t = 0:99;
sum(cos(2*pi*k/N*t))
sum(sin(2*pi*k/N*t))
are both zero, because I used a Fourier frequency and a specific discrete-time vector. This has to do with the orthogonality of the N-th roots of unity.
  1 件のコメント
Tianyou Chen
Tianyou Chen 2012 年 7 月 11 日
Thank Wayne,
You are correct and I should have caught that - the discrete nature of the signal. Cheers, J

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMatched Filter and Ambiguity Function についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by