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

Vektor mit zuffäligen Variablen und bestimmten Abständen

 

dj_robka
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 09.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2012, 12:58     Titel: Vektor mit zuffäligen Variablen und bestimmten Abständen
  Antworten mit Zitat      
Hallo zusammen,
ich möchste einen Vektor der länge n erzeugen, dass zufällig Werte ohne Wiederholung mit gewünschten Abständen zurückliefert. Die Werte dürfen zwischen 1 und n - länge betragen.

Ein Beispiel:
länge = 10;
Abstand 3;
mögliche anzahl der Variablen= 10/3;

Richtig:
Vektor = 1,4,7 oder
Vektor = 7,3,10
Falsch:
Vektor = 2,8,4 <= weil die Differenz zwischen ersten und letzten Wert kleiner als 3 ist.

Folgendens Code habe ich geschrieben. Es funktioniert leider nicht zuverlässig. Wenn man es erweitert, dann wird es immer schwieriger. Es geht bestimmt einfacher. Bitte um Vorschläge und Hilfe, vielen dank!

Code:
% Das ist mein Programm.
clc;
clear;
Dateilaenge = 20;
Abstand = 5; %Möglicher Abstand zwischen den Variablen
Variablen  = round(Dateilaenge/Abstand) % Bis zu welche Variable prüfen (links beginnend)

V = 1;
while(1)
     fprintf( '* Versuch: %g \n', V );
     %%Erzuegt einen Vektor der länge(n) mit Zufallsvariablen 1 bis n ohne
     %%Redundanz
    Zufall = randperm(Dateilaenge);
   
    for ( m = 1:Variablen ) % Überprüfung bis welche Variable
        if ( m <= (Variablen-1) )
            diff = abs(Zufall(1,m) - Zufall(1,m+1)); %zwischen
        end
        if (diff < Abstand)
            break;
        end;
        %ab hier erweitern  
        if ( m <= (Variablen-1) )  
            diff = abs(Zufall(1,m) - Zufall(1,m+2)); %längst
        end
        if (diff < Abstand)
            break;
        end;
    end;
   
    if (diff >= Abstand)
        break;
    end;
    V = V + 1;
end

Pakete = zeros( 1, Dateilaenge, 'int32' );  
for ( m = 1:Variablen )
Pakete(1,m) = Zufall(1,m);
end


fprintf( '************\n');
fprintf( '%g    ', Pakete );
fprintf( '\n');
Private Nachricht senden Benutzer-Profile anzeigen


dj_robka
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 09.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2012, 08:02     Titel:
  Antworten mit Zitat      
Hallo zusammen,
etwas überlegt und es geht doch Smile. Anbei die mögliche Lösung:

Code:
%
clc;
clear;
frameAnz = 10;
frameBreite = 3;
Frame_Verluste  = round(frameAnz/frameBreite) % Anzahl der möglichen Frameverluste
Verlustwahrscheinlichkeit = 3; %Wahrscheinlichkeit  =>

if (Verlustwahrscheinlichkeit <= Frame_Verluste)
    V = 1; %Versuchszaehler
    while(1)
        zufall = randperm(frameAnz); %Erzuegt einen Vektor der länge(n) mit Zufallsvariablen 1 bis n ohne
        %%Redundanz
        Pakete_temp = zufall(1:Verlustwahrscheinlichkeit); %Werte der Frames kopieren
        Pakete_sort = sort(Pakete_temp); %Werte aufsteigend sortieren
   
        fprintf( '* Versuch: %g \n', V );
        for  m = 1:length(Pakete_sort) % Überprüfung bis welche Variable
                if ( m < (length(Pakete_sort)) )
                    diff = abs(Pakete_sort(1,m) - Pakete_sort(1,m+1)); %Differenz berechnen
                end
                if (diff < frameBreite)% Überprüfung auf den Vorgegebenen Abstand /Differenz
                    break; %sonst for - Schleife verlassen
                end %ende der If Anweisung
        end %ende der for - Schleife
   
        if (diff >= frameBreite)
            break; %sonst While - Schleife verlassen
        end; %ende der If Anweisung
        V = V + 1;
    end
    Pakete_sort
else %ende der While - Schleife
    fprintf( '* Ermittlung nicht möglich sonst endlos ! \n' );
end %ende der If Anweisung
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 - 2025 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.