Springen naar inhoud

Rijvectoren verwisselen


  • Log in om te kunnen reageren

#1

roelbrooimans

    roelbrooimans


  • 0 - 25 berichten
  • 20 berichten
  • Gebruiker

Geplaatst op 29 maart 2012 - 11:15

Goeiemiddag,

Ik zit met een bepaald probleem.

We hebben 6 kolomvectoren gedeclareerd, namelijk de volgende 6.

M1=[1;0;0;0;0;0];
M2=[0;1;0;0;0;0];
M3=[0;0;1;0;0;0];
M4=[0;0;0;1;0;0];
M5=[0;0;0;0;1;0];
M6=[0;0;0;0;0;1];

Nu hebben we van deze kolomvectoren de volgende 6x10 matrices gemaakt, S1 t/m S20.

S1=[M6,M2,M4,M3,M6,M5,M3,M1,M5,M3];
S2=[M4,M5,M6,M5,M2,M3,M6,M6,M3,M6];
S3=[M1,M3,M5,M1,M1,M2,M2,M4,M2,M2];
S4=[M1,M5,M3,M6,M3,M3,M6,M4,M2,M5];
S5=[M6,M1,M5,M3,M5,M4,M5,M3,M2,M2];
S6=[M2,M5,M2,M4,M1,M5,M3,M6,M6,M4];
S7=[M3,M6,M5,M4,M5,M4,M3,M2,M3,M4];
S8=[M5,M2,M6,M4,M3,M5,M4,M3,M5,M4];
S9=[M5,M6,M4,M6,M2,M6,M2,M2,M6,M5];
S10=[M1,M1,M6,M2,M2,M4,M2,M3,M1,M6];
S11=[M4,M3,M4,M3,M3,M2,M4,M5,M4,M4];
S12=[M2,M3,M5,M5,M3,M4,M5,M1,M4,M1];
S13=[M3,M2,M6,M1,M5,M6,M6,M5,M3,M3];
S14=[M2,M4,M2,M6,M5,M3,M5,M2,M3,M6];
S15=[M5,M2,M6,M4,M1,M2,M4,M4,M3,M4];
S16=[M3,M1,M1,M2,M1,M3,M5,M1,M1,M4];
S17=[M4,M1,M1,M2,M4,M1,M3,M4,M5,M5];
S18=[M1,M3,M3,M3,M1,M5,M5,M5,M3,M4];
S19=[M1,M3,M5,M6,M2,M2,M6,M2,M5,M6];
S20=[M2,M2,M1,M1,M4,M2,M6,M2,M2,M6];

Deze 20 matrices hebben we weer in een grotere matrix geplaatst, genaamd S, op de volgende manier.

S=[S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15,S16,S17,S18,S19,S20];

Dit geeft ons dus een 6x200 matrix met een hele hoop elementen 0 en enkele elementen 1.

Nu zit ik met het volgende probleem. We willen gebruik maken van simulated annealing, waardoor de matrix S telkens opnieuw willekeurig gemaakt moet worden uit de matrices S1 t/m S20. Het maakt me dus niet uit of de matrix er zo uit ziet

S=[S8,S5,S12,S1,S2.....................]
of zo
S=[S3,S18,S7,S11,S20..................]

zolang alle matrices S1 t/m S20 maar gebruikt worden in een willekeurige volgorde.

Ik gebruik MATLAB als wiskunde programma maar ik loop behoorlijk vast op het willekeurig creeren van de matrix S uit de matrices S1 t/m S20, kan iemand me helpen?

MVG Roel Brooimans

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 29 maart 2012 - 14:12

De truc is volgens mij een cell-array:
% M vectoren maken.
M = eye(6);
M1 = M(:,1);
M2 = M(:,2);
M3 = M(:,3);
M4 = M(:,4);
M5 = M(:,5);
M6 = M(:,6);

% S# aanmaken in een cell-array.
S{1}=[M6,M2,M4,M3,M6,M5,M3,M1,M5,M3];
S{2}=[M4,M5,M6,M5,M2,M3,M6,M6,M3,M6];
S{3}=[M1,M3,M5,M1,M1,M2,M2,M4,M2,M2];
S{4}=[M1,M5,M3,M6,M3,M3,M6,M4,M2,M5];
S{5}=[M6,M1,M5,M3,M5,M4,M5,M3,M2,M2];
S{6}=[M2,M5,M2,M4,M1,M5,M3,M6,M6,M4];
S{7}=[M3,M6,M5,M4,M5,M4,M3,M2,M3,M4];
S{8}=[M5,M2,M6,M4,M3,M5,M4,M3,M5,M4];
S{9}=[M5,M6,M4,M6,M2,M6,M2,M2,M6,M5];
S{10}=[M1,M1,M6,M2,M2,M4,M2,M3,M1,M6];
S{11}=[M4,M3,M4,M3,M3,M2,M4,M5,M4,M4];
S{12}=[M2,M3,M5,M5,M3,M4,M5,M1,M4,M1];
S{13}=[M3,M2,M6,M1,M5,M6,M6,M5,M3,M3];
S{14}=[M2,M4,M2,M6,M5,M3,M5,M2,M3,M6];
S{15}=[M5,M2,M6,M4,M1,M2,M4,M4,M3,M4];
S{16}=[M3,M1,M1,M2,M1,M3,M5,M1,M1,M4];
S{17}=[M4,M1,M1,M2,M4,M1,M3,M4,M5,M5];
S{18}=[M1,M3,M3,M3,M1,M5,M5,M5,M3,M4];
S{19}=[M1,M3,M5,M6,M2,M2,M6,M2,M5,M6];
S{20}=[M2,M2,M1,M1,M4,M2,M6,M2,M2,M6];

% tot zover de voorbereidingen, hier begint je loop:

% http://www.mathworks.nl/help/techdoc/ref/randperm.html
neworder = randperm(20);

% shuffle
for i = 1:1:20,
	G{i} = S{neworder(i)};
end
	
% P is the shuffled 6x200 matrix
P = [G{:}];

#3

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 29 maart 2012 - 14:39

Het vorige maar dan in 1 regel. :)
% aanmaken cells
M = eye(6);
S{1}  = M(:,[6,2,4,3,6,5,3,1,5,3]);
S{2}  = M(:,[4,5,6,5,2,3,6,6,3,6]);
S{3}  = M(:,[1,3,5,1,1,2,2,4,2,2]);
S{4}  = M(:,[1,5,3,6,3,3,6,4,2,5]);
S{5}  = M(:,[6,1,5,3,5,4,5,3,2,2]);
S{6}  = M(:,[2,5,2,4,1,5,3,6,6,4]);
S{7}  = M(:,[3,6,5,4,5,4,3,2,3,4]);
S{8}  = M(:,[5,2,6,4,3,5,4,3,5,4]);
S{9}  = M(:,[5,6,4,6,2,6,2,2,6,5]);
S{10} = M(:,[1,1,6,2,2,4,2,3,1,6]);
S{11} = M(:,[4,3,4,3,3,2,4,5,4,4]);
S{12} = M(:,[2,3,5,5,3,4,5,1,4,1]);
S{13} = M(:,[3,2,6,1,5,6,6,5,3,3]);
S{14} = M(:,[2,4,2,6,5,3,5,2,3,6]);
S{15} = M(:,[5,2,6,4,1,2,4,4,3,4]);
S{16} = M(:,[3,1,1,2,1,3,5,1,1,4]);
S{17} = M(:,[4,1,1,2,4,1,3,4,5,5]);
S{18} = M(:,[1,3,3,3,1,5,5,5,3,4]);
S{19} = M(:,[1,3,5,6,2,2,6,2,5,6]);
S{20} = M(:,[2,2,1,1,4,2,6,2,2,6]);

% shuffle en concat in een regel:
P = [S(1,randperm(20)){:}];

#4

roelbrooimans

    roelbrooimans


  • 0 - 25 berichten
  • 20 berichten
  • Gebruiker

Geplaatst op 29 maart 2012 - 14:55

het lukt me nog niet helemaal maar ik moet er uit komen!!
ik denk dat ik die randperm functie wel zoek, maar ik vraag me af of het niet al mijn matrices S1 t/m S20 door elkaar zijn geschopt, want die moeten namelijk wel behouden blijven en mogen alleen onderling worden verwisseld. Toch bedankt!

#5

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 29 maart 2012 - 15:05

ik denk dat ik die randperm functie wel zoek, maar ik vraag me af of het niet al mijn matrices S1 t/m S20 door elkaar zijn geschopt

De matrices zijn niet 'door elkaar geschopt'. Probeer het volgende maar eens:
%twee keer S1 achter elkaar:
[S(1,[1,1]){:}]

#6

roelbrooimans

    roelbrooimans


  • 0 - 25 berichten
  • 20 berichten
  • Gebruiker

Geplaatst op 29 maart 2012 - 15:09

ik heb de rest van de dag geen tijd meer maar ik zal dit weekend even kijken, hartstikke bedankt EvilBro!





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures