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

randi ohne doppelte Ausgabe?!

 

cordoba
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 13.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2017, 11:28     Titel: randi ohne doppelte Ausgabe?!
  Antworten mit Zitat      
Wie kann man erreichen, dass

Code:

r = randi([0 25],1,10)
 

https://de.mathworks.com/help/matlab/ref/randi.html

keine doppelten Zahlen ausgibt? Jede ganze Zahl im Intervall [0 25] soll maximal nur genau einmal zufällig ausgegeben werden? Also ein Urnenmodell "ohne Zurücklegen"...
Private Nachricht senden Benutzer-Profile anzeigen


huhu0815
Forum-Century

Forum-Century


Beiträge: 141
Anmeldedatum: 20.02.14
Wohnort: Dresden
Version: R2013b, R2014b, R2016b, R2018a
     Beitrag Verfasst am: 25.03.2017, 13:57     Titel:
  Antworten mit Zitat      
Hi, welchen Ansatz hast du bis jetzt denn gemacht?

Eine kleine Hilfestellung für dein Problem

Code:
function [flag] = pruefeZahlen(zufallsZahlen)
    % zu übergebende Variable false zuweisen
    flag = false;
    minZahl = 1;
    maxZahl = 25;
   
    % erneutes sortieren des Zufallszahlenvektors
    zufallsZahlen = sort(zufallsZahlen,2,'ascend');
    [zeilen, spalten] = size(zufallsZahlen);
   
    % Überprüfen der Größe des Vektors
    if ((spalten ~= 10) && (zeilen ~= 1))
        flag = false;
        return
    end
   
   
    if ((zufallsZahlen(1) >= minZahl)) && (zufallsZahlen(end) <= maxZahl))
        flag = true;
    end
   
    % Überprüfung, ob Zahlen doppelt vorkommen
    for i = 1:(numel(zufallsZahlen) - 1)
        if (zufallsZahlen(i) == zufallsZahlen(i+1))
            flag = false;
            return;
        end
    end
   
    % die for-Schleife geht auch kürzer
    % flag = all(diff(zufallsZahlen));
   
end


die hauptfunktion müsstest du jetzt selbst schreiben.
Code:
function zahlen = generiereZufallsZahlen
% Initialisierung

% Überprüdung der generierten Zufallszahlen mit der Funktion pruefeZahlen
end
Private Nachricht senden Benutzer-Profile anzeigen
 
cordoba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 13.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2017, 19:58     Titel:
  Antworten mit Zitat      
Danke für den Ansatz. Meine Idee war so:

Code:

urn = 1:10
r = randi(urn,1,1)
urn(:,r)=[]
 


Das Problem: Wie kann man randi einen eigenen Vektor übergeben? Da kommt so immer nur 1 oder 2 raus. Das ganze würde ich dann in eine Schleife packen. Also ich lösche jeweils den gezogenen Wert aus dem neuen Vektor... (so halt wie bei der Urnenmodell ohne Zurücklegen)
Private Nachricht senden Benutzer-Profile anzeigen
 
cordoba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 13.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2017, 00:09     Titel:
  Antworten mit Zitat      
Was haltet ihr davon:

Code:

urn = randperm(25)
sample = urn(1:5)
 


In der Urne liegen also z. B. 25 unterscheidbare Kugeln. Mit randperm wird die Reihenfolge zufällig permutiert und z. B. die ersten 5 ausgewählt...
Private Nachricht senden Benutzer-Profile anzeigen
 
cordoba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 13.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2017, 14:23     Titel:
  Antworten mit Zitat      
Ok, jetzt hab ich die gesuchte Funktion endlich gefunden:

Code:
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 - 2024 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.