WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Berechnung Vektorisieren

 

Phate
Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 28.11.2011, 09:01     Titel: Berechnung Vektorisieren
  Antworten mit Zitat      
Guten Morgen zusammen,

Ich schreibe grade ein kleines Programm zur Berechnung von einem Würfelwurf. Die Berechnung die ich vektorisieren möchte ist die nachfolgende for-Schleife:

Code:

%% Create n rolls of 2D6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
n = 400000;  %number of rolls
nDice = 3;  %n dice thrown, e.g.3
sDice = 6;  %number of dice sides e.g.6
Rolls = randi(sDice,nDice,n);   %calculation of uniformly distributed pseudorandom integers
if size(Rolls,1) < 2
        Chance = 0; %kein Pasch mit einem Würfel möglich
    elseif size(Rolls,1) == 2
        Chance = sum(eq(Rolls(1,:),Rolls(2,:))) / size(Rolls,2);   %Berechnung für 2 Würfel
    else
        pasch = zeros(6,size(Rolls,2)); %Berechnung mehr als 2 Wüefel
        for k=1:6
            pasch(k,:) = sum(eq(Rolls,ones(size(Rolls)).*k));
        end
        paschChance = length(pasch(pasch>=2))/size(Rolls,2);
    end
 


Kurz zu dem Prgoramm, ich generiere mir einen Satz gleichverteiler Zufallszahlen mit 3 Würfel und 40000 Würfen. Mit den If Abfragen überprüfe ich die Anzahl der benutzten Würfel. Mit einem Würfel kein Pasch möglich mit 2 Würfel vergleiche ich einfach die beiden Vektoren. Interessant wird es jetzt für mehr als drei Würfel und das ist auch mein Problem diese Berechnung nur mit Matrixoperationen durchzuführen. Was ich mir ausgedacht habe :
Ich erstelle mir eine Einheitsmatrix mit den gleichen Dimensionen wie meine Würfelergebnisse und vergleiche diese miteinander. Daraus erhalte ich eine logische Matrix mit Nullen und Einsen. Diese Summiere ich dann spaltenweise auf. Ist das Ergebniss größer gleich 2 dann habe ich zwei Einser in dem Wurf gehabt und somit einen Pasch. Für die anderen Fälle multiplizier ich die Einheitsmatrix mit k von 2 bis 6.

Hoffe die Erklärung ist ausführlich genung, falls noch fragen sind einfach stellen.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen


soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2011, 11:54     Titel:
  Antworten mit Zitat      
Hi,

eine Möglichkeit wäre über die Differenzen zu gehen:
Code:
paschChance = sum(any(~diff(sort(Rolls))))/size(Rolls,2);


Die Frage ist, wie du die Anzahl der Pasch bei mehr als 3 Würfeln zählen möchtest. Es können ja z.B bei 4 Würfeln jeweils zwei die gleiche Augenzahl besitzen. D.h. in diesem Fall würden bei deiner Version in einem Wurf 2 Pasch gezählt, was bedeutet, dass du auf eine Wahrscheinlichkeit von über 100% kommen kannst. Meine vorgeschlagenen Version wäre momentan auf das Intervall [0;1] beschränkt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.11.2011, 12:00     Titel: Re: Berechnung Vektorisieren
  Antworten mit Zitat      
Hallo Phate,

Welche Berechnung soll nun genau vektorisiert werden? Hast Du schon eine Schleifen-Version?

Bemerkungen:
Statt "size(Rolls, 1)" kannst Du gleich nDice schreiben.
Code:
pasch(k,:) = sum(eq(Rolls,ones(size(Rolls)).*k));
% Schneller und eleganter:
pasch(k,:) = sum(Rolls == k);
 

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Phate
Themenstarter

Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 28.11.2011, 12:24     Titel:
  Antworten mit Zitat      
Hallo,

@Jan
Die Berechnung in der Else Bedingung möchte ich vektorisieren, diese braucht im Vergleich zu den anderen Berechnungen 10mal länger. Ich dachte dass die beiden anderen Berechnungen gut ausgeführt sind. Falls nicht korrigier mich einfach Smile.

Code:

else
        pasch = zeros(6,size(Rolls,2)); %Berechnung mehr als 2 Wüefel
        for k=1:6
            pasch(k,:) = sum(Rolls == k);
        end
        paschChance = length(pasch(pasch>=2))/size(Rolls,2);
end


@soad
Danke für deinen Einwand, da geb ich dir recht die Logik ist noch nicht richtig. Wenn ich jetzt dieses Würfelergebnis bekomme mit 4 Würfeln und 3 Würfe:
 
<br />
\begin{pmatrix} 1 & 2 & 2 \\ 1 & 2 & 2 \\ 1 & 1 & 3 \\ 1 & 1 & 6  \end{pmatrix}  
<br />

Dann möchte ich in der ersten Spalte 2 Päsche zählen in der zweiten Spalte 2 Päsche und in der dritten Spalte einen Pasch. Am Ende summiere ich die Anzahl so dass ich in dem Beispiel auf 5 geworfene Päsche komme. Es ist erstmal egal wie oft ein 1er Pasch bzw. 2er Pasch geworfen worden ist. Wobei das ein netter Bonus wäre das nich zu wissen.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2011, 13:43     Titel:
  Antworten mit Zitat      
Code:
pasch = histc(Rolls, 1:6);
Private Nachricht senden Benutzer-Profile anzeigen
 
Phate
Themenstarter

Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 28.11.2011, 15:25     Titel:
  Antworten mit Zitat      
Hallo,

Danke für die schnelle Hilfe. Mit Befehl bekomm ich das glaube ich vollens hin.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2026 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.