【发布时间】:2014-08-18 17:43:37
【问题描述】:
假设我有一个跳跃大小的向量 J 和一个初始起点 X_0。我也有边界 0,B(假设 0
在下面的代码中,我在许多示例中执行此操作。要“修复”超出边界的那些,我必须遍历样本以检查...(不要认为有矢量化的“查找”)
% X_init is a row vector describing initial resource values to use for
% each sample
% J is matrix where each col is a sequence of Jumps (columns = sample #)
% In this code the jumps are subtracted, but same thing
X_intvl = repmat(X_init,NumJumps,1) - cumsum(J);
X = [X_init; X_intvl];
for sample = 1:NumSamples
k = find(or(X_intvl(:,sample) > B, X_intvl(:,sample) < 0),1);
while(~isempty(k))
change = X_intvl(k-1,sample) - X_intvl(k,sample);
X_intvl(k:end,sample) = X_intvl(k:end,sample)+change;
k = find(or(X_intvl(:,sample) > B, X_intvl(:,sample) < 0),1);
end
end
【问题讨论】:
-
欢迎使用 stackoverflow。您介意编辑您的问题以包含您当前的一些代码吗?这将有助于您获得问题的答案。
-
我只是想知道您是否有机会查看我的答案?我怀疑它的运行速度会比你目前正在做的快得多。另外,我不认为你目前正在做的工作。具体来说,在我看来,当您发现边界违规时,您隐含地强制在先前的观察值上跳零。这可以防止边界违规,但它也会阻止该过程到达边界。但是在你说的问题中“基本上如果它越过边界,它就等于边界”???
-
它确实很慢,但它确实有效。 “更改”变量找到了违反了多少界限并进行了纠正(这样违反的那个现在就在界限处)并且所有未来的值都受到同样的影响)。然后它再次检查约束是否满足等等。
标签: matlab vectorization