在matlab中生成一个特定的数字序列块

时间:2018-06-05 17:50:25

标签: matlab number-sequence

我需要生成一个包含8个数字块的序列。 块大小可以在28到32之间变化。 我遇到的部分是所有块的总和必须是一个特定的数字。让我们说243。

我逐块尝试了一个循环,其中块大小是在这些值之间随机生成的,但是最后一个块在大多数情况下会变大或变小。我可以保持这种运行直到我得到一些有用的东西,但效率并不高。

我确定有更好的方法。 谢谢你的帮助 祝福

1 个答案:

答案 0 :(得分:0)

目前正在计算8块。所有这些块的总和将比所需的总和更多或更少。

然后,将所有块添加到一起并找到实际总和。 E.g:

blocks = randn(8,28);
actual_sum = sum(sum(blocks));
desired_sum = 243;

然后计算您必须将所有值相乘以达到所需总和的比率。 E.g:

ratio = desired_sum/actual_sum;

然后你只需用这个比例乘以你所有的积木,就可以实现你的目标。 E.g:

blocks = blocks * ratio;

这将产生带小数(或浮点数)的值。如果你想要整数然后只是舍入所有值,并使用创建的差异稍微调整最后一个块。 E.g:

blocks = round(blocks,0);
diff = sum(sum(blocks)) - desired_sum;
blocks(1,1) = blocks(1,1) - diff;
if sum(sum(blocks))==desired_sum
    fprintf("It works!");
end

免责声明:我没有Matlab,所以您可能需要修复一些功能名称。它背后的方法应该是可靠的。