0

我正在寻找一种方法来更新向量 [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

矢量rollers(2).ink 是我要更新的矢量。目前该向量仅填充一次,因此我有第 98:103 行的向量。我希望为我的系统的每次“旋转”填充这一系列元素,而不仅仅是第一次。原因 - 我试图显示仅从辊子表面的一小部分间歇性添加墨水,因此只需要填充五个单元格。我认为如果我从 1 迭代到时间步数,在循环中以步长 nBins-Max 为单位:

for tt = 1:nBins_max:nTimeSteps

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

4

1 回答 1

1

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

  • 该向量rollers(2).ink有 1 行和 216 列,因此诸如rollers(2).ink(98:103) = something不会将第 98 行更新到第 103 行的操作。另请注意,该向量的元素 98 被初始化为0,它不包含在初始化为 的元素中1
  • 你写你想更新该向量中的一系列元素,然后编写一个循环语句for tt = 1:nBins_max:nTimeSteps,它跨越时间步长向量。当然,您想编写类似rollers(2).ink(99:103) = new_values.
  • 至于滚轮每转一圈去墨,你可以执行一条线,比如rollers(2).ink = rollers(2).ink * 0.975每转一圈;显然,您需要将我选择的每次旋转 2.5% 的去除率替换为适合您的模拟的任何内容。
于 2013-03-08T10:31:05.463 回答