Verfasst am: 27.05.2012, 12:58
Titel: Vektor mit zuffäligen Variablen und bestimmten Abständen
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(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
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.