我有我的矩阵" A"用户定义其大小,例如,用户为矩阵A:
定义大小3x5 [1 2 3 4 5]
A= [2 4 6 8 3]
[2 4 5 7 8]
我需要将行转换为新的向量,如下所示:
A1=[1 2 3 4 5]
A2=[2 4 6 8 3]
A3=[2 4 5 7 8]
但问题是,由于用户可以修改矩阵的大小(添加/删除行),我需要采用向量。例如,用户将矩阵A的新大小定义为5x5,因此我需要
A1=[...]
A2=[...]
...
A5=[...]
我不想手动放置新的矢量,因为行数可能变得太大(大约500或更多)并且手动放置每个新矢量几乎是不可能的。所以我需要MatLab自动执行此操作。
我有一个矩阵,我需要行,但每行必须是一个向量,因为我需要分别计算每个向量。
我有这个示例代码
dim=5; % Define by User
dim1=15*dim;
A=[];
B=[];
x=round(rand(dim1));
for i=1:dim
A(i,1)=x(i);
end
for i=1:dim1
B(i,1)=x(i+1);
end
B=vec2mat(B,15);
我有矩阵B,但是我需要把它的行放在一个单独的向量中:
B1= B(1,:)
B2= B(2,:)
...
B5=B(5,:)
问题是 dim 可能是500或更多,并且非常难以手动编写这么多的矢量。所以我需要帮助做循环。
----------------编辑--------------
问题在于:
用户定义矩阵,例如:
[1 2 3 4 5]
A= [2 4 6 8 3]
[2 4 5 7 8]
因此,程序必须向我显示不同向量中的行
A1=[1 2 3 4 5]
A2=[2 4 6 8 3]
A3=[2 4 5 7 8]
如果用户给我其他矩阵
[1 2 3 4 5]
[2 4 6 8 3]
A= [2 4 5 7 8]
[4 5 6 6 7]
[8 2 3 3 1]
该程序必须告诉我
A1=[1 2 3 4 5]
A2=[2 4 6 8 3]
A3=[2 4 5 7 8]
A4=[4 5 6 6 7]
A5=[8 2 3 3 1]
用户定义的矩阵行的范围在30到1200之间。因此,我需要MatLab自动生成每行的向量。
我尝试用这种方式定义每个向量:
AA = sym('A%d', [rows 1]);
所以我有A1,A2,A3等...之后,我可以做(最后一个例子)
A1=[1 2 3 4 5]
A2=[2 4 6 8 3]
A3=[2 4 5 7 8]
A4=[4 5 6 6 7]
A5=[8 2 3 3 1]
但是,我不知道如何制作这个循环。
谢谢
答案 0 :(得分:0)
分配给具有不同名称的变量的唯一方法是使用命令eval或assignin。使用任何一种都通常表明编程实践不好(但这是由于您的问题陈述 - 它只能通过这两个命令来解决)。如果你真的坚持用不同的名字创建个别变量,我更喜欢这里的assignin方法:
for ii=1:size(A,1)
assign( ['A' num2str(ii)], A(ii,:) );
end
将以下代码放在assign.m文件中
function assign( varname, val )
assignin('caller', varname, val );
BTW:一个(稍微)更清洁的解决方案(不依赖于eval和assignin)将使用结构。即。
S = struct;
for ii=1:size(A,1)
S.(['A' num2str(ii)]) = A(ii,:);
end
现在包含S.A1,S.A2等。