Есть несколько моментов, по которым следует обратиться к вашему вопросу ...
Предварительное распределение массивов и матричная индексация:
Если вы хотите сохранить значения, которые вы генерируете на каждой итерации, вы можете предварительно распределяет массив G
как матрицу нулей 6 на 3 перед вашим циклом, а затем индексирует в заданную строку матрицы в вашем цикле для хранения значений:
A = 34;
G = zeros(6, 3); % Make G a 6-by-3 matrix of zeroes
for i = 1:6
% Your calculations for t1, t2, and t3...
G(i, :) = [t1 t2 t3]; % Add the three values to row i
end
Векторизованные операции:
Во многих случаях вы можете полностью избежать циклов в MATLAB и часто ускорять свой код, используя векторизованные операции .В вашем случае вы можете создать вектор значений для A
и выполнять вычисления для t1
, t2
и t3
поэлементно, используя операторы арифметического массива .*
и ./
:
>> A = (35:40).'; %' Create a column vector with the numbers 35 through 40
>> t1 = fix(A./64); % Compute t1 for values in A
>> t2 = fix((A-t1.*64)./32); % Compute t2 for values in A and t1
>> t3 = fix((A-t1.*64-t2.*32)./16); % Compute t3 for values in A, t1, and t2
>> G = [t1 t2 t3] % Concatenate t1, t2, and t3 and display
G =
0 1 0
0 1 0
0 1 0
0 1 0
0 1 0
0 1 0
Преимущество здесь в том, что G
автоматически превратится в матрицу 6 на 3, содержащую все нужные значения, поэтому предварительное распределение или индексация не требуются.
Отображение вывода:
Если вы хотите создать форматированный вывод, который отличается от отображения чисел по умолчанию, которое происходит, когда вы пропускаете точку с запятой в конце строки, вы можете использовать функциикак fprintf
.Например, чтобы получить нужный вывод, вы можете запустить его после создания G
, как указано выше:
>> fprintf('G%d = %d %d %d\n', [1:6; G.']) %' Values are drawn column-wise
G1 = 0 1 0 % from the second argument
G2 = 0 1 0
G3 = 0 1 0
G4 = 0 1 0
G5 = 0 1 0
G6 = 0 1 0