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

linear abhängige Vektoren innerhalb einer Matrix finden

 

D-RSPhoenix
Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 31.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2012, 13:42     Titel: linear abhängige Vektoren innerhalb einer Matrix finden
  Antworten mit Zitat      
Hi,
Ich hab eine Matrix die aus den Vektoren der Form Vi=[Ai;Bi;Ci] besteht:

A=[V1,... Vi]

Ich weiß, dass immer je 2 dieser Vektoren linear abhängig sind.

Bsp: V1*x=V4

Ich will jetzt die zusammengehörenden Pärchen finden.

Bsp: A=[V1, V2, V3, V4, V5, V6];

es seien zB (V1,V2); (V3,V6); (V4,V5) linear abhängig

Dann sollte da rauskommen

lin_ab(A)=[1, 1, 2, 3, 3, 2]

Jemand eine Idee, wie ich das möglichst effizient erreichen kann?



Hintergrund ist ich will die Vektoren jeweils miteinander verschneiden das geht aber nur mit Vektoren, die nicht linear abhängig sind.
Für mein oben genanntes Beispiele:

V1 x V3
V1 x V4
V1 x V5
V1 x V6

V2 x V3
V2 x V4
V2 x V5
V2 x V6

V3 x V1
V3 x V2
V3 x V4
V3 x V5

V4 x V1
V4 x V2
V4 x V3
V4 x V6

V5 x V1
V5 x V2
V5 x V3
V5 x V6

V6 x V1
V6 x V2
V6 x V4
V6 x V5

(x steht hier nicht für cross() sondern für meine Verschneidungsoperation)
Um das zu realisieren zu können muss ich wissen welcher Vektor von welchem linear abhängig ist
Private Nachricht senden Benutzer-Profile anzeigen


flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2012, 15:31     Titel:
  Antworten mit Zitat      
ich denke das sollte weiter helfen: http://de.wikipedia.org/wiki/Linear_unabhängig#Lineare_Gleichungssysteme

Je nachdem in welchen Dimensionen Deine Vektoren sind könnte dies auch noch für Dich interessant sein http://en.wikipedia.org/wiki/Johnson–Lindenstrauss_lemma
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2012, 16:44     Titel:
  Antworten mit Zitat      
Hallo,

wenn die Vektoren immer paarweise linear abhängig sind, kannst Du ja in einem ersten
Schritt die Vektoren normieren
Code:
scal=sum(A.^2).^0.5;
Anorm = A./ repmat(scal,1,size(A,2));

dann sind linear abhängige Vektoren wirklich gleich.
Code:
[Auni, idx] = unique(Anorm,'rows);
for i in 1:length(Auni)
  linabh(ismember(Anorm,Auni(i,:))) = idx(i);
end;
 

erledigt den Rest.

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
D-RSPhoenix
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 31.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2012, 08:55     Titel:
  Antworten mit Zitat      
@Sirius3
Danke für die schnelle Antwort. Leider funktioniert das Ganze noch nicht. In der Zeile

Sirius3 hat Folgendes geschrieben:

Code:

Anorm = A./ repmat(scal,1,size(A,2));



gibts nen Dimensionsfehler und ich versteh leider nicht ganz was du da machst, sonst hätt ichs selber korrigiert ;P

Ich hab auf jeden Fall 3x1 Vektoren in der Matrix, also dann [1;2;3]

Meine Beispiel Matrix ist 3x6, also 6 solcher Vektoren nebeneinander.
Ich hoffe das hilft dir weiter.

Grüße
D-RSPhoenix
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2012, 09:20     Titel:
  Antworten mit Zitat      
Das ganze wird praktisch auch nicht funktionieren, denn wenn Du den Vektoren einen euklidischen Vektorraum zu Grunde legst, berechnet sich die Norm der Vektoren nach http://de.wikipedia.org/wiki/Norm_(Mathematik)#Euklidische_Norm
bzw.
http://de.wikipedia.org/wiki/Euklidische_Norm
Wobei hier ein Wurzelausdruck notwendig ist, um den Vektor zu normieren. Da aber im Rechner eine irrationale Zahl nie exakt dargestellt werden kann ( http://de.wikipedia.org/wiki/Maschinengenauigkeit )
kann es passieren, dass zwei normierte Vektoren mathematisch identisch wären, aber innerhalb von Matlab nicht sind. Eine Prüfung auf equal (==) wird hier nicht funktionieren, sondern man muss sich hier noch zusätzlich Gedanken machen, ab wann Vektoren als gleich gelten
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: 25.06.2012, 16:05     Titel:
  Antworten mit Zitat      
Hallo,

Um genau zu sein, können auch rationale Dezimal-Zahlen nicht exakt als DOUBLEs dargestellt werden, wenn es keine entsprechende Binärzahl mit der zur Verfügungstehenden Anzahl von Bits gibt. Deshalb ist 0.3-0.2-0.1 nicht exakt 0. Selbst für exakt darstellbare Zahlen kann eine mathematische Operation zu nicht-exakt darstellbaren Ergebnissen Führen:
Code:
1e17 + 1 - 1e17 ~= 1 !!

Also Konsequenz darf man sich also nicht darauf verlassen, dass das Ergebnisse exakt 0 werden, sondern man akzeptiert eine "kleine" Zahl als Limit. Was dann genau "klein" bedeutet, hängt vom Problem ab.

Für zwei linear abhängig Vektoren verschwindet das Kreuzprodukt. Man könnte also die Vektoren normieren, das Kreuzprodukt ausrechnen und Ergebnisse unterhalb von 100*eps als lineare Abhängigkeit deuten.

Hilft das?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
D-RSPhoenix
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 31.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2012, 16:29     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo,

Um genau zu sein, können auch rationale Dezimal-Zahlen nicht exakt als DOUBLEs dargestellt werden, wenn es keine entsprechende Binärzahl mit der zur Verfügungstehenden Anzahl von Bits gibt. Deshalb ist 0.3-0.2-0.1 nicht exakt 0. Selbst für exakt darstellbare Zahlen kann eine mathematische Operation zu nicht-exakt darstellbaren Ergebnissen Führen:
Code:
1e17 + 1 - 1e17 ~= 1 !!

Also Konsequenz darf man sich also nicht darauf verlassen, dass das Ergebnisse exakt 0 werden, sondern man akzeptiert eine "kleine" Zahl als Limit. Was dann genau "klein" bedeutet, hängt vom Problem ab.

Für zwei linear abhängig Vektoren verschwindet das Kreuzprodukt. Man könnte also die Vektoren normieren, das Kreuzprodukt ausrechnen und Ergebnisse unterhalb von 100*eps als lineare Abhängigkeit deuten.

Hilft das?

Gruß, Jan


boah Jan du bist mein Held!
Ich bin echt so doof - verschwindet heißt =0 dh einfaches if und alle meine Probleme sind gelöst ;P
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2012, 16:31     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:

Um genau zu sein, können auch rationale Dezimal-Zahlen nicht exakt als DOUBLEs dargestellt werden, wenn es keine entsprechende Binärzahl mit der zur Verfügungstehenden Anzahl von Bits gibt.


F'Ack. Ich mache es eh selbst in C++ via limits unt templates, somit wird das bei mir eh immer generell korrekt gehandhabt. In Matlab habe ich auch eine "numerical limit", somit kann ich das flexibel halten

Jan S hat Folgendes geschrieben:

Für zwei linear abhängig Vektoren verschwindet das Kreuzprodukt. Man könnte also die Vektoren normieren, das Kreuzprodukt ausrechnen und Ergebnisse unterhalb von 100*eps als lineare Abhängigkeit deuten.


Funktioniert aber nur beim euklidischen R^3, da dort das Kreuzprodukt definiert ist, andere Metriken bzw Normen und bei beliebigen R^n sind ausgeschlossen. Die allgemein gültige Lösung ist über ein LGS
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.