Vector decomposition with Matlab
조회 수: 9 (최근 30일)
이전 댓글 표시
Hello !
I want to split a vector b, in two parts, b1 and b2, like that:
b= [2; 1; 2; 1; 0; 1; 2; 1; 2]
b1=[2; 1; 1; 1; 0; 0; 1; 0; 0]
b2=[0; 0; 1; 0; 0; 1; 1; 1; 2]
But my code, work only for n=4; for n>4, don't work fine.
n=4;
b=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;
b1(1)=2;
b1(2:(n-2))=1;
b1(n-1)=1;
for i=1:n-3
b1((n-1)*i+1)=1;
b1((n-1)*(i+1))=0;
end
b1((n-1)*(n-2)+1)=1;
b1(n*2:(n-1)*(n-2))=0;
b1((n-1)*(n-2)+2:(n-1)*(n-2)+n-2)=zeros(n-3,1);
b1((n-1)^2)=0;
b2(1)=0;
b2(2:(n-2))=0;
b2(n-1)=1;
b2((n-1)*(n-2))=1;
b2((n-1)*(n-2)+1)=1;
b2((n-1)*(n-2)+2:(n-1)*(n-2)+n-2)=ones(n-3,1);
b2((n-1)^2)=2;
댓글 수: 2
채택된 답변
Bruno Luong
2019년 7월 11일
편집: Bruno Luong
2019년 7월 12일
b= [2; 1; 2; 1; 0; 1; 2; 1; 2]
b1=min(b,1);
b1([find(b==2,1,'first'),find(b==2,1,'last')])=2;
b2=b-b1;
n=length(b);
tail=floor(n/2)+1:n; %or ceil?
[b1(tail),b2(tail)]=deal(b2(tail),b1(tail));
b1
b2
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Control System Toolbox에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!