我在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,G2,G3,...,G6]。请问我该如何完成?
答案 0 :(得分:2)
关于你的问题,有几点需要解决......
如果你想保存你在每次迭代时生成的值,你可以在循环前preallocate the array G
作为6乘3的零矩阵,然后在你的index into a given row of the matrix内循环来存储值:
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中完全避免循环,并且通常使用vectorized operations来提高代码的速度。在您的情况下,您可以为A
创建值向量,并使用{{在元素方面的基础上对t1
,t2
和t3
执行计算3}} .*
和./
:
>> 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矩阵,因此不需要预分配或索引。
如果要创建格式化输出,该格式输出与在行尾省略分号时出现的默认数字显示不同,则可以使用arithmetic array operators之类的函数。例如,要获得您想要的输出,您可以在创建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
答案 1 :(得分:0)
如果我理解正确你的问题只是输出(所有值都存储在G中),对吗?
你可以试试这个:
lowerbound = (i-1)*3 + 1;
G(lowerbound:lowerbound + 2) = [t1 t2 t3]
这应该用新计算的值
扩展G.