我有一个值H,例如H = 3 . 我试图在每个t,c(t)之前的H项(之前的3项)和之后的H项(之后的3项)t中求和 . 例如对于t,我希望有:
c(t-3) + c(t-2)+ c(t-1) + c(t) + c(t+1) + c(t+2) +c(t+3)
这是完美的代码:
%just consider some values a C
data = importdata('2.txt');
C = data.data.';
C = C';
N = length(C);
H = 3;
w = ones(2 * H + 1, 1);
Lambda= NaN * zeros(N, 1);
L= NaN * zeros(N, 1);
U= NaN * zeros(N, 1);
for t = (H+1):(N-H-1)
Lambda(t) = sum(w .* C(t-H:t+H)) / sum(w);
L(t) = poissinv(0.005, Lambda(t));
U(t) = poissinv(0.995, Lambda(t));
end
现在我正在尝试做的事情并没有成功:我不想在Lambda(t)平均值中得出C(t) . 我的意思是在时间t,我开始将每个t的从-H到H的项目求和,但是当H = t时不是 . 我只是想忽略t = H的情况并继续求和 . 我非常感谢任何建议,因为我是MATLAB的新手而且我被卡住了!
1 回答
我没有彻底查看你的代码,但你所描述的内容听起来像是基本的卷积:
所以忽略
w
(我认为它只是一个常数的乘法?即1/6
?)卷积对
C
移位kernel
并取一个和或重叠元素的元素乘积 . 因此,为了将前后的三个元素相加,我们只需乘以一个中心元素(即C(t)
),我们只需乘以零,这样它就不会对总和产生影响 .我认为使用
w
你可以去你也可以将它概括为相当定义
kernel
,如下所示:所以现在你完成(矢量化!)代码是: