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

Kombinationen von Vektorprodukten

 

svenno
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 07.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2012, 10:58     Titel: Kombinationen von Vektorprodukten
  Antworten mit Zitat      
Hallo zusammen,
habe erst vor kurzem mit Matlab angefangen, da ich für ein paper die Wahrscheinlichkeit des Ergebnisses einer Methodik berechnen und darstellen möchte (mit Hilfe eines Histogramms).

Folgendes Problem:
Vereinfacht gesagt habe ich zwei Zeilenvektoren:
a=[1,2,3,4,5,6,7,8,9]
b=[10,11,12,13,14,15,16,17,18]

Wenn ich nun a mit b multipliziere, erhalte ich ja nur die Einzelprodukte aus 1*10, 2*11, 3*12 usw.
Ich möchte aber gerne alle möglichen Kombinationen miteinander multiplizieren, als auch 1*11, 1*12 usw.

Momentan habe ich keine Ahnung wie ich das anstellen kann. Vielleicht kann/muss man aus den Zeilenvektoren jeweils eine Matrix erstellen so dass man für den obigen Vektor a also
1,2,3,4,5,6,7,8,9
2,3,4,5,6,7,8,9,1
3,4,5,6,7,8,9,1,2 usw
erhält.
Wenn man diese Matrizen dann miteinander multipliziert hätte man doch auch das gewünschte Ergebnis, oder? Vielleicht geht das aber auch noch sehr viel einfacher.

Ich danke euch schon mal für eure Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.06.2012, 11:05     Titel:
  Antworten mit Zitat      
Hallo,

am einfachsten ist wohl:
Code:


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 07.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2012, 12:09     Titel:
  Antworten mit Zitat      
Danke schon mal. Allerdings funktioniert das nur für 2 Vektoren. Meine Formel besteht aber aus mehr als hundert Vektoren (inklusive Divisionen, Additionen etc), daher wird das so leider nicht klappen.

Gibt es noch eine andere Möglichkeit?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Meine Formel besteht aber aus mehr als hundert Vektoren (inklusive Divisionen, Additionen etc), daher wird das so leider nicht klappen.


Das ging leider aus deiner Frage nicht hervor. Auch wenn in der Formel über 100 Vektoren vorkommen, sind ja immer nur Operationen zwischen je zwei Vektoren möglich, und daraus ist das ganze dann zusammengesetzt. Alternativvorschlag also:
Code:

Hier kannst du auch @rdivide, @minus und @plus als Operation verwenden.

Wenn du das öfter brauchst, macht eine kleine Funktion das vielleicht übersichtlicher:

Code:
function c = myop(op, a, b)
c = bsxfun(op, repmat(a', 1, numel(b)), b);


Aufzurufen z.B. mit
Code:
c = myop(@times, a, b)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Bluesmaster
Forum-Century

Forum-Century



Beiträge: 203
Anmeldedatum: 13.11.11
Wohnort: Gera
Version: 2012a
     Beitrag Verfasst am: 07.06.2012, 14:00     Titel:
  Antworten mit Zitat      
Geht so:

Code:



dabei erzeugt perms() genau die Matrix aus permutierten Zeilenvektoren.


So hat jede Zahl aus a jeder Zahl aus b mal die Handgeschüttelt.
(Vorausgesetzt beide Vektoren waren gleich lang)
remat baut dann aus b eine entsprechende Hilfsmatrix aus
("replicate Matrix")


Gruß

Blues


edit: Sorry @Harald für die Dopplung, ich war wohl einen Hauch zu spät

edit2: wobei die Permutation im Post vorher fehlt oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
svenno
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 07.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2012, 17:22     Titel:
  Antworten mit Zitat      
Danke Harald und Blues,
das sind ja nun eine Menge Möglichkeiten. Ich probiers gleich mal aus.

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

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.06.2012, 18:26     Titel:
  Antworten mit Zitat      
Hallo,

@ bluesmaster:
Ich habe meine Zweifel, dass das mit den Permutationen tatsächlich so gedacht war. Nach meinem Verständnis ging es nur darum, die Operation in allen möglichen Kombinationen von a und b durchzuführen.
Letztlich kann aber nur der Fragesteller sagen, was er eigentlich will Wink

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 07.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2012, 19:09     Titel:
  Antworten mit Zitat      
nachdem ich mich nun schon mal wieder etwas weiter vorgekämpft habe kann ich auch sagen, dass perms nicht der richtige Befehl für mich zu sein scheint.

bsxfun(@times, repmat(a', 1, numel(b)), b)

scheint im bestimmten Bereich zu funktionieren. Bei einer längeren Formel wird der gesamte Term aber ziemlich lang, da man ja jeweils den Rechenschritt der vorherigen Rechnung als "b" einsetzen muss.

Deshalb hast du Harald ja auch wahrscheinlich die Funktion erwähnt. Leider fühle ich mich im Moment aber noch nicht sicher genug im Matlab, um auch das zu machen...step by step Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
svenno
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 07.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2012, 19:35     Titel:
  Antworten mit Zitat      
So...
Jetzt kann ich auch das neue Problem beschreiben.
Nachdem ich
bsxfun(@times, repmat(a', 1, numel(b)), b)
für die ersten Zeilenvektoren (á 9 Werte) benutzt habe, erhalte ich tatsächlich eine 9*9 Matrix die auch soweit das zu sein scheint, was ich brauche.

Nun habe ich aber das Problem beim weiterrechnen. diese Matrix kann ich nämlich nicht mit dem nächsten Zeilenvektor (á 9 Werte) multiplizieren. Das scheint nicht auf normale Weise (*) zu funktionieren, auch nicht wenn man den neuen Vektor als Spaltenvektor nutzt, weder mit dem bsxfun Befehl.

Wie kann ich also weiterrechnen?
Private Nachricht senden Benutzer-Profile anzeigen
 
svenno
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 07.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2012, 19:47     Titel:
  Antworten mit Zitat      
Zur Orientierung hier auch noch mal die Formel, die ich als erstes gerne nutzen würde: (a*b*c*1/(d*e))/f
Wenn ich das damit geschafft habe, gehe ich auch mal davon aus, dass ich den Rest hinbekomme.

Jeder der Variablen ist wie gesagt ein Zeilenvektor mit 9 Werten, da ich einen Mittelwert nutze und auf beiden Seiten eine Abweichung von +/- 20% in 5% Schritten. Macht also 9 Werte.
Über (a.*b.*c*1./(d.*e))./f kann man jetzt zwar alles multiplizieren, aber was ich gerne herausbekommen möchte, ist in welchem Bereich das Ergebnis am wahrscheinlichsten liegen wird, auch wenn einzelne Werte Abweichungen haben (Ungenauigkeit). Dafür möchte ich am Ende gerne ein Histogramm erstellen.
Da die Abweichung jedoch nicht immer gleichzeitig bei allen Werten + oder -20% ist, sondern hier mal +10% und da mal -15%, möchte ich also alle Werte miteinander kombinieren.

Ich hoffe, dass diese kurze Erklärung etwas Klarheit in die Sache gebracht hat.
Würde mich wirklich sehr freuen, wenn ihr mir bei der Lösung des Problemes helfen könntet.

Grüße
Svenno
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.06.2012, 20:25     Titel:
  Antworten mit Zitat      
Hallo,
Zitat:

was ich gerne herausbekommen möchte, ist in welchem Bereich das Ergebnis am wahrscheinlichsten liegen wird, auch wenn einzelne Werte Abweichungen haben (Ungenauigkeit). Dafür möchte ich am Ende gerne ein Histogramm erstellen.

Es wäre gut gewesen, das von Anfang an zu wissen. Was ich machen würde: 100000 Zufallszahlen für a-f generieren (Gleichverteilung oder Normalverteilung, RAND bzw. RANDN?) und dann ein Histogramm der Ergebnisse machen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 07.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2012, 21:58     Titel:
  Antworten mit Zitat      
Könnte man dabei festlegen, in welchem Berich die Zufallszahlen der einzelnen Variablen liegen sollen? Mit welchem Befehl kann ich das machen?

Danke und Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

in der Doku von RAND bzw. RANDN findest du Beispiele, wie du die Zufallszahlen durch Addition oder Skalierung auf einen passenden Bereich transformieren kannst.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 07.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.06.2012, 09:14     Titel:
  Antworten mit Zitat      
Hallo Harald,
vielen Dank für die Hilfe. So funktionierts Smile
Zur Bestimmung der Abweichung bei den jeweiligen Variablen benutze ich nun also nicht mehr diese 9 Werte, sondern erstelle mit
(2*rand(100000,1)-1) bzw.
(randn (100000,1)/3.5) um ungefähr im Bereich zwischen -1 und 1 zu landen,
die entsprechenden Werte .

Klappt super!
Danke noch mal allen!
Private Nachricht senden Benutzer-Profile anzeigen
 
Bluesmaster
Forum-Century

Forum-Century



Beiträge: 203
Anmeldedatum: 13.11.11
Wohnort: Gera
Version: 2012a
     Beitrag Verfasst am: 08.06.2012, 15:54     Titel:
  Antworten mit Zitat      
Oh verstehe, ich hatte gedacht mit Kombinationen ist gemeint:

jedes Element aus a soll einmal mit jedem Element aus b verküpft werden


mein Fehler
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.