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

Zufallsvektor

 

nice_day
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 08.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 21:28     Titel: Zufallsvektor
  Antworten mit Zitat      
hallo,

ich möchte gerne einen Zufallsvektor generieren mit der Länge Eins. Ansich bekomme ich den Zufallsvektor hin aber nicht die länge Eins. bitte um Hilfe..

gruß

Haki
Private Nachricht senden Benutzer-Profile anzeigen


joker811
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 29.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 21:33     Titel:
  Antworten mit Zitat      
was meinst du denn mit "vektor der länge 1"?

irgendwie versteh ich die frage nicht
Private Nachricht senden Benutzer-Profile anzeigen
 
nice_day
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 08.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 21:45     Titel:
  Antworten mit Zitat      
hallo,

ein vektor besitzt eine richtung und eine länge. Die länge wird ja mit dem Skalarprodukt berechnet. Und diese Länge sollte Eins sein.

gruß

Haki
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.11.2011, 21:56     Titel:
  Antworten mit Zitat      
Hallo,

die ursprüngliche Frage hätte ich auch nicht verstanden, da man unter der "Länge" eines Vektors ebenso gut die Anzahl der Elemente verstehen kann. "Norm" wäre da eindeutiger.

Norm 1 kann man gut hinbekommen, indem man den Vektor durch die Norm teilt:
Code:


Bei einem Zufallsvektor ist natürlich auch die Frage, nach welchen Kriterien er zufällig sein soll, und welche Anzahl Elemente er haben soll.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
joker811
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 29.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 22:04     Titel:
  Antworten mit Zitat      
danke Harald das war nämlich auch mein problem mit der fragestellung
Private Nachricht senden Benutzer-Profile anzeigen
 
nice_day
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 08.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 22:06     Titel:
  Antworten mit Zitat      
hallo,

danke für die korrektur...meinte natürlich die Norm....die idee den vektor durch die norm zu teilen hatte ich auch schon gehabt aber das löst mein problem nicht....ich will grad einen vektor bei dem ich das nicht mache muss....also einen zufallsvektor, der mir ohne nachbearbeiten die norm Eins liefert......

gruß Haki
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.11.2011, 22:13     Titel:
  Antworten mit Zitat      
Hallo,

nochmal die Frage: welche Anzahl Elemente soll der Vektor haben?
Für eine beliebige Anzahl Elemente dürfte das schwer umzusetzen sein.

Bei zwei oder drei Elementen würde ich mit dem bzw. den Winkeln arbeiten. In 2D:
Code:
winkel = 2*pi*rand();
vektor = [cos(winkel), sin(winkel)];


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
nice_day
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 08.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 22:15     Titel:
  Antworten mit Zitat      
Hallo,

sollte eigentlich für eine beliebige Anzahl an Elemente sein.....

gruß

Haki
Private Nachricht senden Benutzer-Profile anzeigen
 
joker811
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 29.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 22:16     Titel:
  Antworten mit Zitat      
jetzt bastel ich die ganze zeit an einer lösung das fällt mir auf die
länge eines vektors wird NICHT durch das Skalarprodukt bestimmt...

oder irre ich mich grade

die schnellste und meiner meinung nach beste lösung ist die von

Harald

warum kannst/darfst du die nicht benutzten?
Private Nachricht senden Benutzer-Profile anzeigen
 
nice_day
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 08.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 22:54     Titel:
  Antworten mit Zitat      
hallo,

ich hatte mal vermutet, dass es einen anderen weg geben müsste als der weg über die norm.

ich muss einen globalen optimiere implementieren. Dazu soll ich das Simulated Annealing (SA) verfahren nutzen. dabei brauch ich dann mein zufallsvektor.....

gruß

Haki
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.11.2011, 08:52     Titel:
  Antworten mit Zitat      
Hallo,

warum verwendest du nicht das bereits in der Global Optimization Toolbox implementierte simulannealbnd?

Vermutungen sind, was das Programmieren angeht, nicht unbedingt ein guter Ratgeber.

Ich sehe zwei Möglichkeiten für Zufallsvektor mit N Elementen:
a) N-1 Winkel erzeugen und dann verallgemeinerte Kugelkoordinaten verwenden.
b) Der beschriebene Weg über die Skalierung mit der Norm. Wenn wichtig ist, dass alle Richtungen gleich wahrscheinlich sind, mit einer Ergänzung:
Code:
v = 10;
while norm(v) > 1
v = rand(N,1);
end
v = v/norm(v);


Grüße,
Harald
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: 09.11.2011, 12:44     Titel:
  Antworten mit Zitat      
Hallo Harald,

Die verallgemeinerten Kugel-Koordinaten und die Verwendung von SIN und COS sind eigentlich nur ineffiziente Umformungen der Division durch die 2-Norm. Ob man das mit dem Satz von Pythagoras oder mit trigonometrischen Funktionen löst, macht im Endeffekt nur einen Unterschied in der Laufzeit.

Die 2-Norm ist die Euklidische Länge und damit läßt sie sich auch durch das Skalar-Produkt berechnen:
Code:
x = rand(1, 3);
disp(norm(x));
disp(sqrt(x * x'));  % Oder: sqrt(dot(x,x))

x * x' ist übrigens dank des Aufrufs einer BLAS-Funktion ausgesprochen schnell, vor allem deutlich schneller als NORM. Wenn man dies für die Spalten- oder Zeilen-Vektoren einer Matrix such: DNorm2 in den FileExchange Seiten.

Es gibt zwei Wege einen Vektor der Länge 1 mit N zufälligen Elementen zu finden:
1. Das bereits erwähnte v/sqrt(v*v').
2. Man wählt N zufällige Elemente, bildet die kummulierte Summe cumsum(v) und setzt dann zuerst so viele Elemente auf 0, bis die Summe kleiner ist als 1, und schließlich ein Element so, dass die Summe exakt 1 ergibt. Damit hat man natürlich nicht alle N-Elemente zufällig gewählt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.11.2011, 12:56     Titel:
  Antworten mit Zitat      
Hallo Jan,

bei dem direkten Ansatz mit v/sqrt(v*v') sehe ich ein Problem (anhand des 2D-Falls): v ist gleichverteilt auf einem Quadrat. Im Grunde projeziert man alle Punkte eines Strahls auf einen Punkt auf dem Kreis. Da der Strahl aber je nach Winkel unterschiedlich lang ist, würde ich erwarten, dass Winkel um 45 Grad beispielsweise häufiger auftreten als Winkel um 0 oder 90 Grad.
Meine beiden Ansätze versuchen, dieses Problem zu umgehen.
Den zweiten deiner Ansätze finde ich nicht gut, weil die erzeugten Punkte wie schon von dir angedeutet nicht gleichmäßig verteilt sind.

Grüße,
Harald
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: 09.11.2011, 23:27     Titel:
  Antworten mit Zitat      
Hallo Harald,

Das Argument der Verteilung in einem Quadrat ist gut, jetzt verstehe ich Deinen Ansatz.
Das Einsetzen von Nullen und Einfügen eines benötigten Summanden ist eventuell nicht das, was nice_day sucht. Ob es "gut" ist oder nicht, hängt ganz vom Problem ab.

Gruß, Jan
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: 10.11.2011, 09:43     Titel:
  Antworten mit Zitat      
Hallo Harald,

Noch eine Idee: Mein etwas merkwürdiger Ansatz mit dem harten Setzen des letzen Summanden ist im 2D Fall übrigens identisch zu Deiner Lösung:
Zitat:
Code:
winkel = 2*pi*rand();
vektor = [cos(winkel), sin(winkel)];

Bei verallgemeinerten Kugelkoordinaten ist die Gleichverteilung nicht einfach zu erreichen. Im 2D-Fall z.B. wären die Punkte in der Nähe der Pole viel dichter als am Äquator.

Wie wäre es mit einer Normalverteilung? Die ist doch kugel-symmetrisch:
Code:
N = 3;  % Number of dimensions
V = randn(N, 1000);
Len = sqrt(sum(V .* V));
NV = bsxfun(@rdivide, V, Len);
scatter3(NV(1, :), NV(2, :), NV(3, :), '.');

Oder um einen einzelnen Vektor zu erhalten:
Code:
N = 3;
V = randn(N, 1);
NV = V ./ sqrt(V'*V);

Gruß, Jan
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.