如何按规则分割向量?

时间:2019-07-12 17:39:02

标签: matlab vector split

我要遵循以下规则,将向量b分为b1和b2两部分:

1)b = b1 + b2

2)所有2的值都分成两个1的值

3)对于元素的前半部分:前1个移到b2;第二个1保持在b1中;第三步移至b2,.....依此类推,直到上半场结束

4)对于元素的后半部分:前1个保留在b1中;第二个1移到b2 ....依此类推,直到结束

My code(which does not work ok):

clc;
clear;
close all;

n=4;
%b
b=zeros((n-1)^2,1);
b1=zeros((n-1)^2,1);b2=zeros((n-1)^2,1);
b(1)=2;
b(2:(n-2))=ones(n-3,1);
b(n-1)=2;
for i=1:n-3
  b((n-1)*i+1)=1;
  b((n-1)*(i+1))=1;
end
b((n-1)*(n-2)+1)=2;
b((n-1)*(n-2)+2:(n-1)*(n-2)+n-2)=ones(n-3,1);
b((n-1)^2)=2;

lx = (length(b));
half = ceil(lx/2);
j=(n-1)^2;

% 2 is split in two values of 1
for i=1:lx
 if find(b(i)==2)
   b1(i)=1;
   b2(i)=1;
end
end

% odd rows 
bimpar = b(1:2:end,:);
% even rows
bpar = b(2:2:end,:);


% loop through first half of b
for i=2:half

 if find(bimpar(i)==1)
   b1(i)=0;
   b2(i)=1;
end

%  if find(bpar(i)==1)
%    b1(i)=1;
%    b2(i)=0;
%  end

end



 % loop through second half of b
for i= half + 1 : j-1
if find(b(i)==1)
  b1(i)=1;
  b2(i)=0;
 end
end

b1'
b2'

%对于n = 4,结果应为:

b = [2; 1; 2; 1; 0; 1; 2; 1; 2]

b1 = [1; 0; 1; 1; 0; 1; 1; 0; 1]

b2 = [1; 1; 1; 0; 0; 0; 1; 1; 1]

0 个答案:

没有答案