制作子矩阵时遇到麻烦

时间:2017-08-23 15:50:45

标签: matlab matrix

我有这个矩阵:

mpc.bus = [100  1   170 100 0   0   1   1   0   230 1   1.1 0.9;
110 3   50  30  0   0   1   1   0   230 1   1.1 0.9;
120 2   80  45  0   0   1   1   0   230 1   1.1 0.9;
130 1   200 110 0   0   1   1   0   230 1   1.1 0.9;
140 1   30  8   0   0   1   1   0   230 1   1.1 0.9]

我想创建一个遵循以下规则的子矩阵: 如果第二列的值等于3或2,则新的矩阵(称为MatrixPVREF)将接收mpc.bus的第1,第2,第3和第4列。

这是我想要获得的结果:

MatrixPVREF = [110  3   50  30;
120 2   80  45]

2 个答案:

答案 0 :(得分:2)

mpc.bus = [100  1   170 100 0   0   1   1   0   230 1   1.1 0.9;
110 3   50  30  0   0   1   1   0   230 1   1.1 0.9;
120 2   80  45  0   0   1   1   0   230 1   1.1 0.9;
130 1   200 110 0   0   1   1   0   230 1   1.1 0.9;
140 1   30  8   0   0   1   1   0   230 1   1.1 0.9];

tmp2 = mpc.bus(mpc.bus(:,2)==2,:);
tmp3 = mpc.bus(mpc.bus(:,2)==3,:);

MatrixPVREF = [tmp3(1:4); tmp2(1:4)]


MatrixPVREF =

   110     3    50    30    
   120     2    80    45

更短的:

MatrixPVREF = mpc.bus(mpc.bus(:,2)==2 | mpc.bus(:,2)==3,1:4);

logical indexing用于mpc.bus

答案 1 :(得分:2)

使用ismember检查第二列中的元素是否等于2或3.使用matrix indexing完成剩下的工作。

MatrixPVREF = mpc.bus(ismember(mpc.bus(:,2),[2 3]),1:4);

>> MatrixPVREF

MatrixPVREF =

   110     3    50    30    
   120     2    80    45