Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Modellbildung und Simulation hochdynamischer Fertigungssyste

Studierende:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Roulette mit MonteCarlo Simulation darstellen?

 

cano00
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.02.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2021, 01:25     Titel: Roulette mit MonteCarlo Simulation darstellen?
  Antworten mit Zitat      
Hallo liebe Community,

Ich bin wirklich sehr verzweifelt und komme nicht mehr weiter bei der Darstellung einer Roulett Simulation. Ich habe die Aufgaben zuvor zu Monte Carlo Simulation mit Würfeln perfekt gelöst, jedoch komme ich hier so gar nicht weiter.

Mein Function Ansatz:

Code:
function [red, black] = n_montecarlo(n)
 

red = [3 12 7 18 9 14 1 16 5 23 30 36 27 34 25 21 19 32];
black = [26 35 28 29 22 31 20 33 24 10 8 11 13 6 17 2 4 15];

roulette = randi(37);

for n = red
    if roulette == n
    disp('win')
    else
        disp('lose')
    if n = black
        if roulette == n
            disp('win')
    else
        disp('lose')
        end
    end
    end
end
end



Ich weiß nicht wie ich die Eingabe mit dem Roulett verknüpfe
Es sind 18 rote, 18 schwarze und 1 grünes Feld. Wenn der Ball auf dem Feld landet welches der User zuvor ausgewählt hat, dann bekommt er sein Einsatz zurück und die gleiche Menge dazu. Wenn der Ball auf ein anderes Feld landet als vom User angegeben, dann verliert er sein Einsatz. Die Höhe des Gewinns oder Verlusts soll dem User ausgegeben werden.

Ich danke euch schonmal für eure Hilfe !

[EDITED, Jan, Bitte code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 22.724
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.02.2021, 15:50     Titel:
  Antworten mit Zitat      
Hallo,

ich würde mal mit den Ein- und Ausgabeargumenten anfangen:
Eingabe sollte wohl eine Farbe ("rot", "schwarz" oder "grün") und der Einsatz eine Zahl sein.
Ausgabe sollte wohl die Auszahlung sein (2*Einsatz oder 0).

Falls die Eingabe "rot" ist, würde ich mit ismember abfragen, ob roulette in red enthalten ist, und daraus die Auszahlung bestimmen.
Entsprechend für "schwarz" und "grün".

Als Programmierkonstrukt würde ich nur if verwenden, kein for.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
cano00
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.02.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2021, 17:57     Titel:
  Antworten mit Zitat      
Meine Function funktioniert nun, jedoch fehlt der Einsatz und ich muss das ganze noch in einem Skript ausgeben lassen für den User. Das Skript soll abfragen, welche Farbe man wählt und wie viel hoch der Einsatz sein soll.



Code:
function n_montecarloreal(n)

red   = [3 12 7 18 9 14 1 16 5 23 30 36 27 34 25 21 19 32];
black = [26 35 28 29 22 31 20 33 24 10 8 11 13 6 17 2 4 15];

roulette = randi(37);

if n == roulette
    disp('win')
else
    disp('lose')
end

if any(n == red)
    disp('red')
elseif any(n == black)
    disp('black')
else
    disp('green')
end
end


[EDITED, Jan, Bitte code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 22.724
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.02.2021, 19:24     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Meine Function funktioniert nun

Erstaunt mich, dass du das so siehst. Mit einer Farbe wird die Funktion doch nichts anfangen können?
Empfehlungen zu Ein- und Ausgabeargumenten der Funktion habe ich dir ja gegeben, aber die hast du leider nicht umgesetzt. Um deutlicher zu werden, würde ich die Funktion so deklarieren:
Code:
function auszahlung = montecarlo(farbe, einsatz)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
cano00
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.02.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.02.2021, 01:09     Titel:
  Antworten mit Zitat      
Ich hab das nun versucht so umzusetzen, wie du es meinst. Aber mein Skript funktioniert noch immer nicht.

Der Fehler code lautet:

Error using ==
Matrix dimensions must agree.

Error in montecarlo (line 20)
if (Farbe == rot)


Code:
Farbe = input('Bitte eine Farbe rot,schwarz oder gruen auswählen : ','s');

Einsatz = input('Bitte Höhe des Einsatzes als Zahl eingeben: ','s');


while isnan(str2double(Einsatz)) == true
    Einsatz = input('Fehler. Bitt die Zahl wie angefragt nennen: ','s');  
end

roulett = randi(37);

rot   = [3 12 7 18 9 14 1 16 5 23 30 36 27 34 25 21 19 32];
schwarz = [26 35 28 29 22 31 20 33 24 10 8 11 13 6 17 2 4 15];
gruen = [0];



if (Farbe == rot)
if any (rot == roulett)
    disp('win')
else
    disp('lose')
end
end

if (Farbe == schwarz)
if any (schwarz == roulett)
    disp('win')
else
    disp('lose')
end
end
       
       
   
if (Farbe == gruen)
if any (gruen == roulett)
    disp('win')
else
    disp('lose')
end
end


[EDITED, Jan, Bitte code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
cano00
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.02.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.02.2021, 01:47     Titel:
  Antworten mit Zitat      
Wie kann ich für den Fall, dass z.B. rot eingegeben wurde und dass es mit dem roulett übereinstimmt verknüpfen. Es gibt ja insgesamt 18 Rote Felder und der User gewinnt halt wenn er rot auswählt vorher egal auf welches rote feld der ball landet.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 22.724
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.02.2021, 09:47     Titel:
  Antworten mit Zitat      
Hallo,

wo ist denn die Trennung zwischen dem Skript und der Funktion? Wo ist die aktuelle Funktionssignatur? Da hatte ich dir ja einen Vorschlag gemacht.

Ich würde in der Funktion etwa so vorgehen:

Code:
validatestring(farbe, ["rot", "schwarz", "grün"])
if farbe == "rot" && any(roulette == red)
         Auszahlung = 2*Einsatz;
elseif % entsprechend für schwarz

elseif % entsprechend für grün

else % leider verloren
         Auszahlung = 0;
end


Bitte verwende auch die Code-Umgebung. Das macht die Beiträge deutlich übersichtlicher.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
cano00
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.02.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.02.2021, 18:42     Titel:
  Antworten mit Zitat      
Wenn ich für farbe = rot eingebe beim skript und für einsatz zum beispiel 100, dann bekomme ich als ausgabe

ans =

"rot"

106 96

% Wie kann ich die function in das Skript einbauen, so dass es mit der Abfrage funktioniert und die Auszahlung richtig ausgegeben wird. Bei der Ausgabe müsste ja 200 Euro rauskommen, wenn er gewinnt?
Code:
% Mein Skript

farbe = input('Bitte eine Farbe rot,schwarz oder gruen auswählen : ','s');

einsatz = input('Bitte Höhe des Einsatzes als Zahl eingeben: ','s');


while isnan(str2double(einsatz)) == true
    einsatz = input('Fehler. Bitt die Zahl wie angefragt nennen: ','s');  
end



disp(montecarlos(farbe, einsatz))
 



Code:
% Meine function

function auszahlung = montecarlos(farbe, einsatz)

rot   = [3 12 7 18 9 14 1 16 5 23 30 36 27 34 25 21 19 32];
schwarz = [26 35 28 29 22 31 20 33 24 10 8 11 13 6 17 2 4 15];
gruen = [38];


roulette = randi(38);

validatestring(farbe,["rot", "schwarz", "gruen"])

if farbe == "rot" && any(roulette == rot)
         auszahlung = 2*einsatz;
elseif farbe == "schwarz" && any(roulette == schwarz)
         auszahlung = 2*einsatz;

elseif farbe == "gruen" && any(roulette == gruen)
         auszahlung = 2*einsatz;

else % leider verloren
         auszahlung = 0;
end

end
 

Danke nochmal für deine Hilfe, bin durch dich sehr viel schlauer geworden im Matlab und verstehe vieles besser.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 22.724
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.02.2021, 19:34     Titel:
  Antworten mit Zitat      
Hallo,

das Problem ist, dass an die Funktion nicht die Zahl, sondern die Zeichenkette übergeben wird. Du hast nur geprüft, ob die Zeichenkette umgewandelt werden kann. Also:

Code:
disp(montecarlos(farbe, str2double(einsatz)))


Das mit der Code-Umgebung scheint noch nicht recht zu klappen. ;)

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
cano00
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 13.02.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.02.2021, 14:34     Titel:
  Antworten mit Zitat      
Vielen vielen Dank. Nun klappt alles perfekt, genau wie ich es haben wollte.

Liebe 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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2021 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.