Рассчитайте 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, поэтому вам может потребоваться исправить некоторые имена функций или около того.Метод, стоящий за этим, должен быть твердым.