我需要生成一个由 8 个数字块组成的序列。 块大小可以在 28 到 32 之间变化。 我卡住的部分是所有块的总和必须是一个特定的数字。假设 243。
我尝试了一个逐个块的循环,其中块大小在这些值之间随机生成,但大多数时候最后一个块要么变大要么变小。我可以保持它运行,直到我得到一些工作,但它不是那么有效。
我相信有更好的方法。 感谢您的任何帮助 愿你安好
像现在一样计算 8 个区块。然后,所有这些块的总和将大于或小于所需的总和。
然后,将所有块相加并找到实际总和。例如:
blocks = randn(8,28);
actual_sum = sum(sum(blocks));
desired_sum = 243;
然后计算比率,您必须将所有值乘以以获得所需的总和。例如:
ratio = desired_sum/actual_sum;
然后你只需用这个比率乘以你所有的块,你就实现了你的目标。例如:
blocks = blocks * ratio;
这将产生带有小数(或浮点数(的值。如果你想要整数,那么只需四舍五入所有值,然后用它创建的差异稍微调整最后一个块。例如:
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,所以您可能需要修复一些函数名称左右。它背后的方法应该是可靠的。