Descompunere vector dupa anumite reguli
Last Updated: Jul 16 2019 08:48, Started by
geotux
, Jul 12 2019 17:47
·
0
#1
Posted 12 July 2019 - 17:47
Salutare !
Vreau sa descompun un vector b in doua componente(vectori: b1 si b2), respectand urmatoarele reguli: 0) b = b1+b2 1) toate valorile de 2, se descompun in doua valori de 1 2) pentru prima jumatate a vectorului b: primul 1 se muta in b2 ; al 2-lea 1 ramane in b1; al 3-lea 1 se muta in b2.....si tot asa pana la finalul primei jumatati 3) pentru a II-a jumatate a vectorului b: primul 1 ramane in b1; al 2-lea se muta in b2; al 3-lea ramane in b1...si tot asa pana la final Pentru n=4 , asa ar trebui sa arate descompunerea: 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] Am incercat asa , dar nu merge: 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 se descompune in 1 si 1, peste tot for i=1:lx if find(b(i)==2) b1(i)=1; b2(i)=1; end end % randuri impare din prima jum bimpar = b(1:2:end,:); % randuri pare din prima jum bpar = b(2:2:end,:); % cautam in prima jumatate a vectorului 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 % cautam in a II-a jumatate a vectorului b for i= half + 1 : j-1 if find(b(i)==1) b1(i)=1; b2(i)=0; end end b1' b2' |
#2
Posted 16 July 2019 - 08:48
Am rezolvat asa:
% descompunere termen liber dupa X is Y % b= bx + by % 2 se descompune in doi de 1, peste tot % prima jumatate a vectorului b: primul 1 se muta in b2, urmatorul 1 sta in b1...si tot asa % a II-a jumatate: primul 1 sta in b1, urmatorul se muta in b2...si tot asa pana la final 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 este descompus in doi de 1 b1(1)=1; b2(1)=1; b1(j)=1; b2(j)=1; % indica paritate(comutator) odd=1; % ciclam prin prima jumatate for i=2:half if b(i)==1 if odd==1 b1(i)=0; b1(i+1)=1; b2(i)=1; b2(i+1)=0; % urmatorul 1; par sau impar odd=0; else b1(i)=1; b1(i+1)=0; b2(i)=0; b2(i+1)=1; % urmatorul 1 odd=1; end end if b(i)==0 b1(i)=0; b2(i)=0; end if b(i)==2 b1(i)=1; b2(i)=1; end end %schimbam ordinea odd=0; % ciclam prin a II-a jumatate for i= half + 1 : j-1 if b(i)==1 if odd==0 b1(i)=1; b1(i+1)=0; b2(i)=0; b2(i+1)=1; % urmatorul 1 odd=1; else b1(i)=0; b1(i+1)=1; b2(i)=1; b2(i+1)=0; % urmatorul 1 odd=0; end end if b(i)==0 b1(i)=0; b2(i)=0; end if b(i)==2 b1(i)=1; b2(i)=1; end end b2(j)=1; [b';b1';b2'] |
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users