在Matlab(R2021b(中,我使用了一些给定的函数,它读取几个变量的时间相关值,并将它们与时间向量一起返回到组合矩阵中。在数据矩阵中,每列表示一个变量的一个时间相关值的向量。
[data,time] = function_reading_data_of_several_values('filename');
为了进一步处理变量的下面代码的可读性,我想将这些列存储在单独的向量变量中。我是这样做的:
MomentX = data(1,:);
MomentY = data(2,:);
MomentZ = data(3,:);
ForceX = data(4,:);
ForceY = data(5,:);
ForceZ = data(6,:);
这是有效的。但是,有没有更简单(或更短(的方法将矩阵的列分配给各个向量?我之所以这么问,是因为在实际的程序中,我有超过示例中的6列。代码越来越长。我在想类似于下面这行的东西,但这不起作用:
[MomentX,MomentY,MomentZ,ForceX,ForceY,ForceZ] = data; %does not work
你知道吗?谢谢你的帮助!
更新:
感谢小组中使用表格的提示,解决方案可能是这样的:
...
[data,time] = function_reading_data_of_several_values('filename');
% data in matrix. Each column representing a stime dependent variable
varNames = {'MomentX', 'MomentX',...}; % Names of columns
T=array2table(data','VariableNames',varNames); % Transform to Table
Stress = T.MomentX/W + T.ForceY/A %accesing table columns
...
这似乎工作得很好,对我来说可读。
解决方案1:在dSpace这样的工业解决方案中,在结构数组中执行此操作非常常见:
mydata.X(1).time = [0.01 0.02 0.03 0.04];
mydata.Y(1).name = 'MomentX';
mydata.Y(1).data = [1 2 3 4];
mydata.Y(2).name = 'MomentY';
mydata.Y(2).data = [2 3 4 5];
解决方案2:创建表也是非常常见的请参阅:https://de.mathworks.com/help/matlab/ref/table.html
如前所述,使用表而不是单独的变量可能不是一个好主意。但如果你想,可以这样做:
A = magic(6): % example 6-column matrix
A_cell = num2cell(A, 1); % separate columns in cells
[MomentX, MomentY, MomentZ, ForceX, ForceY, ForceZ] = A_cell{:};
这几乎与您的相同
[MomentX,MomentY,MomentZ,ForceX,ForceY,ForceZ] = data; %does not work
除了右侧需要是一个逗号分隔的列表,在本例中,该列表是从单元格数组中获得的。