How to calculate reveral summations
1 次查看(过去 30 天)
显示 更早的评论
I need to calculate sigma=sum(u(t)*u(t+a)), from a to 600(t=a to 600), and a is from 1 to 600. So I should get 600 different sigma.
How to do it?
3 个评论
Walter Roberson
2021-2-24
Is it correct that u is least length 600+h, so that u(t+h) can be in range for indexing when t becomes 600 ?
回答(2 个)
Matt J
2021-2-23
Use conv() or xcorr().
8 个评论
Walter Roberson
2021-2-24
Y = circshift(A,K) circularly shifts the elements in array A by K positions. If K is an integer, then circshift shifts along the first dimension of A whose size does not equal 1. If K is a vector of integers, then each element of K indicates the shift amount in the corresponding dimension of A.
I don't think you have 600 dimensions to your u .
If you did not get an error when you did the xcorr() then that implies that u and y must both have been vectors.
The example in doc xcorr for Cross-Correlation of Two Vectors shows a vector of length 16 correlated with a modified version of itself. The output is length 31, reflecting a lag up to (16-1) before, and a lag up to (16-1) after, for a total of (16-1) + 1 + (16-1) = 2*16-1 .
Therefore for a vector of length 600, you should expect a length of 2*600-1 = 1199 for the output.
Matt J
2021-2-24
编辑:Matt J
2021-2-24
T=triu(ones(600));
I=(1:600).' + (1:600);
ur=u(:).';
sigma= (T.*ur(I))*ur(1:600).';
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!