matlab中循环调用矩阵

matlab中循环调用矩阵,matlab,matrix,Matlab,Matrix,我在matlab中有一些字符数组(如10),如下所示: m1=['a1','b1','c1';'a2','b2','c2';'a3','b4','c5'] m2=['aa1','ab1';'aa2','ab2';'aa3','ab4'] ... 我想对循环中每个矩阵的成员进行一些分析。 为了访问矩阵的成员,我尝试了以下方法: for i=1:10 my_mat=strcat('m',num2str(i)); %the analysis part end 但是这个my_mat并不等同

我在matlab中有一些字符数组(如10),如下所示:

m1=['a1','b1','c1';'a2','b2','c2';'a3','b4','c5']

m2=['aa1','ab1';'aa2','ab2';'aa3','ab4']

...
我想对循环中每个矩阵的成员进行一些分析。 为了访问矩阵的成员,我尝试了以下方法:

for i=1:10

my_mat=strcat('m',num2str(i));

%the analysis part

end
但是这个
my_mat
并不等同于我的m1,m2,。。。我犯了个错误

你知道我如何解决这个问题,在循环中调用我的矩阵并访问它们的成员吗


感谢因为
strcat
只是连接字符串,您应该使用
eval
对代码中的字符串求值,如下所示:

 eval(strcat('my_mat =',strcat('m',num2str(i))));
因此,您的完整代码示例如下:

for i=1:10
    eval(strcat('my_mat =',strcat('m',num2str(i))));
    %the analysis part
end

由于
strcat
只是连接字符串,因此,应使用
eval
对代码中的字符串求值,如下所示:

 eval(strcat('my_mat =',strcat('m',num2str(i))));
因此,您的完整代码示例如下:

for i=1:10
    eval(strcat('my_mat =',strcat('m',num2str(i))));
    %the analysis part
end

当你做
my_mat=strcat('m',num2str(i))
您正在将
m1
矩阵的名称分配给
my\u mat
,即
my\u mat='m1'

最佳做法是将矩阵放入单元格数组中,并在单元格上循环:

M{1} = m1;
M{2} = m2;
...
但是,如果您坚持直接从工作区循环变量,则可以使用
eval
获取变量的

my_mat=eval(strcat('m',num2str(1)));  

当你做
my_mat=strcat('m',num2str(i))
您正在将
m1
矩阵的名称分配给
my\u mat
,即
my\u mat='m1'

最佳做法是将矩阵放入单元格数组中,并在单元格上循环:

M{1} = m1;
M{2} = m2;
...
但是,如果您坚持直接从工作区循环变量,则可以使用
eval
获取变量的

my_mat=eval(strcat('m',num2str(1)));  

请注意,“您应该使用eval”的任何答案都很可能被否决。这是一个不好用的函数,即使Mathworks不鼓励使用它。一般来说:如果你需要评估,你定义了你的问题,或者你能在没有
eval
的情况下解决问题吗?!此外,上述解决方案也用于
eval
!“一般来说:如果你需要评估,你将问题定义为错误的”。我可以告诉你如何把马拴在你的车上,让它移动,但是如果我们到了这一点是因为我们做错了什么,那么车必须用不同的方法移动!有时,评估是唯一的解决方案。在那些时候,这个问题被令人担忧地提出/理解。请注意,“您应该使用eval”的任何答案都很可能被否决。这是一个不好用的函数,即使Mathworks不鼓励使用它。一般来说:如果你需要评估,你定义了你的问题,或者你能在没有
eval
的情况下解决问题吗?!此外,上述解决方案也用于
eval
!“一般来说:如果你需要评估,你将问题定义为错误的”。我可以告诉你如何把马拴在你的车上,让它移动,但是如果我们到了这一点是因为我们做错了什么,那么车必须用不同的方法移动!有时,评估是唯一的解决方案。在那些时候,这个问题令人担忧地被提出/理解。