以固定间隔访问行

时间:2013-03-08 08:59:40

标签: matlab simulator

我正在寻找一种方法来更新向量[nx113]中的某些元素,以便我的系统完全旋转。

%% # Iterate through timesteps
for tt = 1:nTimeSteps
% # Initialise ink on transfer roller
rollers(2).ink = [zeros(1,98),ones(1,5),zeros(1,113)];

% # Rotate all rollers
for ii = 1:N
        rollers(ii).ink(:) = ...
            circshift(rollers(ii).ink(:),rollers(ii).rotDirection);
end

% # Update all roller-connections
for ii = 1:N
    for jj = 1:nBins(ii)
        if(rollers(ii).connections(jj) ~= 0)
            index1 = rollers(ii).connections(jj);
            index2 = find(ii == rollers(index1).connections);
            ink1 = rollers(ii).ink(jj);
            ink2 = rollers(index1).ink(index2);
            rollers(ii).ink(jj) = (ink1+ink2)/2;
            rollers(index1).ink(index2) = (ink1+ink2)/2;
        end
    end
end

% # Calculate average amount of ink on each roller
for ii = 1:N
    averageAmountOfInk(tt,ii) = mean(rollers(ii).ink);
end
rollers(18).TakeOff = averageAmountOfInk*0.6;

end

矢量滚轮(2).ink是我想要更新的矢量。目前,矢量只填充一次,所以我有第98行:103行。我想要为我的系统的每次“旋转”填充这一系列元素,而不仅仅是第一次。 原因 - 我试图仅从滚筒表面的一小部分间歇地添加墨水,因此只需要填充五个细胞。 我认为,如果我从1迭代到时间步数,步长大小为nBins-Max:

for tt = 1:nBins_max:nTimeSteps

这似乎不是我追求的。 我也希望最后从系统中除去墨水。对于每次旋转,我希望能够在每次旋转时移除一定百分比的墨水,使其不会停留在系统中(就像它被打印在纸张上并被带走一样)。 希望有人能够理解这一点,并提供一些关于如何处理我的问题的建议。

1 个答案:

答案 0 :(得分:1)

您的解释与您的代码不完全匹配(或者如果您愿意,反之亦然),所以我不完全确定您想要做什么,但以下内容可帮助您找到解决方案或者更清楚地表达你的问题。

  • 向量rollers(2).ink有1行和216列,因此诸如rollers(2).ink(98:103) = something之类的操作不会更新行98到103.还要注意该向量的元素98初始化为{{1它不包含在初始化为0的元素中。
  • 您写道要更新该向量中的一系列元素,然后编写一个循环语句1,它跨越时间步长向量。当然你想要写for tt = 1:nBins_max:nTimeSteps
  • 之类的东西
  • 至于每次旋转时从滚筒上去除墨水,你可以在每次旋转时执行rollers(2).ink(99:103) = new_values等行;显然你会想要用你选择的任何旋转来替换每次旋转2.5%的移除率。