Verfasst am: 22.08.2013, 11:37
Titel: Ziehen mit Wahrscheinlichkeit "ohne Zurücklegen"
Hallo zusammen,
ich habe einen Code geschrieben, mit dem ich Ziehen mit Wahrscheinlichkeit und ohne Zurücklegen simulieren kann. Dabei sollen sich die Anfangswahrscheinlichkeiten nicht ändern, wenn ein Ereignis stattgefunden hat.
Mein Code sieht folgendermaßen aus:
Code:
M = [0.03 fit1; 0.05 fit2; 0.08 fit3; 0.1 fit4; 0.15 fit5; 0.2 fit6; 0.4 fit7];
prop = M(:,1);
values = M(:,2);
cumprop = cumsum(M(:,1));
N = 5;
p = 0;
n = rand(N,1);
coinc = zeros(N,1);
for I = 1:N
coinc(I) = values(find(n(I)<=cumprop,1,'first'));
whilefind(ismember(coinc(1:I-1),coinc(I),'rows')==1)>1
coinc(I) = values(find(n(I)<=cumprop,1,'first'));
p = p+1;
end end
ok ich hab ne kurze nebenfrage. warum sind dein wahrscheinlichkeiten aufsummiert nicht 1? soll das so sein? ok und 2. wäre es nicht einfacher eine matrix zu erstellen in denen die fit werte je nach ihren häufigkeiten auftreten und dann daraus einfach 5 werte zu zihen ?
_________________
ich gebe dir recht die Summe der Wahrscheinlichkeiten sollte natürlich 1 sein.
Und Danke für deine Idee zur Beschleunigung des Codes, werd ich gleich mal umsetzen.
Gruß,
Matlabübender
Matlabübender
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 28.08.2013, 10:30
Titel:
Ich habe deinen Rat befolgt und einen Vektor a kreiert, in dem die fitwerte in Abhängigkeit ihrer Wahrscheinlichkeiten vorkommen.
Doch passt das mit der while-Schleife immer noch nicht.
Die while-Schleife soll dafür sorgen, dass wenn ein fitwert einmal gezogen wurde, nicht ein zweites mal gezogen bzw. in den Ergebnisvektor geschrieben wird.
(Manchmal klappt's, aber meistens wird's zur Endlosschleife).
Code:
zufallszahl = zeros(3+1,1);
for k1 =1:3
zufallszahl(k1+1,1) = a(1,randi(100,1));
p = 0;
whilefind(ismember(zufallszahl(k1,1),zufallszahl(1:k1-1,1),'rows')==1)>=1
zufallszahl(k1+1,1) = a(1,randi(100,1));
p = p+1;
end end
Jetzt gibt's dann nur noch ein Problem. Im Ergebnisvektor stehen mehrmals die gleichen fitwerte drin. Ich möchte aber, dass wenn ein fitwert gezogen wurde, dieser nicht mehr gezogen wird bzw. verworfen wird.
(Die Anfangswahrscheinlichkeiten sollen sich allerdings nicht ändern. Wenn ein Ereignis stattgefunden hat.)
die ausgangswahrscheinlichkeiten ändern sich aber wenn ein ergbeniss rausfliegt ^^
wenn ich 6 bunte kugeln im glas hab ist die wahrscheinlichkeit 1/6 ^^ wenn jetzt eine raus ist dann 1/5 für jede farbe. du hast 7 zahlen und willst 6 zihen. kannst du nicht die wahrschienlichkeiten 1-p machen und dann nur eine zihen und die restlichen nehmen ? entweder du passt die wahrscheinlichkeiten an und nimmst die werte raus die nicht genommen werden drüfen oder du überlegst dir einen anderen weg. sonst ist klar das die while schleife sehr lange läuft
Code:
M = [0.031; 0.052; 0.083; 0.14; 0.155; 0.26; 0.397];
matrix=[];
for k=1:size(M,1)
matrix=[matrix;repmat(M(k,2),M(k,1)*1000,1)];
end
ergebniss=matrix(randperm(1000,1));
whilelength(ergebniss)<6
a=matrix(randperm(1000,1));
if ~ismember(ergebniss,a)
ergebniss=[ergebniss,a];
end end
denke allerdings das es besser wäre die nicht gewollten werte rauszunehmen. giebt dann keine schwankungen in der laufzeit und läuft auch schnell bei gräßeren M
Code:
M = [0.031; 0.052; 0.083; 0.14; 0.155; 0.26; 0.397];
matrix=[];
for k=1:size(M,1)
matrix=[matrix;repmat(M(k,2),M(k,1)*1000,1)];
end
ergebniss=[];
for k=1:6
a=matrix(randperm(size(matrix,1),1));
matrix(matrix==a)=[];
ergebniss=[ergebniss,a];
end
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.