Различные итерационные выходы - PullRequest
1 голос
/ 11 апреля 2011

У меня есть это в Matlab

A=34;
for i =1:1:6
    A = A + 1;
t1=fix(A/(2*32));
t2=fix((A-(t1*64))/(32));
t3=fix(((A-(t1*64)) - (t2*32))/(16));
G = [t1 t2 t3]
end

Когда он отображает, он дает

G= 0 1 0
G= 0 1 0
G= 0 1 0 ....to the 6th G(the values are not right anyway)
but I want to have an output of
G1= 0 1 0
G2= 0 1 0
G3= 0 1 0....to G6 

, а затем cat.or положить их в набор G = [G1, G2G3, ..., G6]. Пожалуйста, как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 11 апреля 2011

Есть несколько моментов, по которым следует обратиться к вашему вопросу ...

Предварительное распределение массивов и матричная индексация:

Если вы хотите сохранить значения, которые вы генерируете на каждой итерации, вы можете предварительно распределяет массив 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
0 голосов
/ 11 апреля 2011

Если я правильно вас понял, ваша проблема - это просто вывод (так что все значения хранятся в G), верно?

Вы можете попробовать это:

lowerbound = (i-1)*3 + 1;
G(lowerbound:lowerbound + 2) = [t1 t2 t3]

Это должно расширитьG с недавно вычисленными значениями

...