【发布时间】:2014-11-05 06:28:17
【问题描述】:
在 MATLAB 中将数字存储在内存中但然后在 for 循环期间仅将它们的特定子集写入矩阵/数组的最佳方法是什么?我也在努力为我的问题设置一个合适的 for 循环:
我有一条特定长度的线 (x=100),以及特定位置的障碍 (pos=50)。我想进行多轮采样(在本例中为 1000 轮),并在每轮中生成特定数量的随机数 (p)。在显示的图像中,生成了 4 个数字,我希望 MATLAB 在 p > pos 时取最小的数字,在 p
这可以在 MATLAB 中实现吗?我做到了:
x = 100;
sample = 1000; %number of rounds of sampling to do
pos = 50; %position of barrier
nn = 1:12; %the number of random numbers to generate for each round of sampling i.e. 1000 rounds generating 1 number, 1000 rounds generating 2 numbers and so on
len1 = 0;
len2= x ;
for i = 1:sample
p(i) = int16(rand()*x)
if (p(i)<pos) && (p(i)>len1)
len(i) = p(i)
end
end
我知道我需要第二个 if 语句,类似于
if (p(i)>pos) && (p(i)<len2)
我的想法是在使用默认 len1 和 len2 值重新启动循环之前,用每轮采样期间生成的最小和最大数字临时替换 len1 和 len2 的值。不过可能有更好的方法。
任何帮助将不胜感激,
【问题讨论】:
-
如果您生成的所有随机数都位于障碍的一侧会怎样?
-
对不起 - 我忘了提到这种可能性。在这种情况下,len1 或 len2 的原始值仍将保留并用于减法。因此,如果 'b' 是唯一生成的数字,则输出将为 100-b。
-
变量
nn有什么作用?看起来你不使用它。另外,变量sam是什么?和sample一样吗? -
太好了,感谢您的编辑。那么我是否清楚这一点 - 在此示例中,您正在生成 1000 个点,并且您想选择障碍物右侧的最小点和障碍物左侧的最大点,并记录它们的差异?
-
是的 - sam = sample,我已经更新了代码。我还没有使用“nn”,因为我不知道该怎么做。 'nn' 包含我想在每批采样中生成的随机数的数量。例如,如果 nn=1:2 和 sample = 1000,我希望 MATLAB 执行 1000 轮,它只生成 1 个数字,存储这些结果,然后重复此操作,但生成 2 个数字。
标签: matlab