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

unterbestimmtes Gleichungssystem

 

Cygnusx1
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 05.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2011, 11:01     Titel: unterbestimmtes Gleichungssystem
  Antworten mit Zitat      
Hallo Leute

Ich habe eine Frage zu unterbestimmten Gleichungssystemen. Ich habe die Suche bereits benutzt, aber nichts wirklich hilfreiches (oder für mich verständliches) gefunden.

1. Warum kommt hier NaN heraus? Mit dem \ sollte ich doch die Lösung mit den meisten Nullen bekommen, also in dem Fall die triviale Lösung.
Code:

a=[1 -1; -1 1]
b=[0; 0]
a\b
 


Der Befehl pinv(a)*b hingegen spuckt wie erwartet die Lösung mit der kleinsten Norm aus. Also die triviale Lösung.

Code:

a=[1 -1; -1 1]
b=[0; 0]
pinv(a)*b
 


2. Wie komme ich dann zu anderen Lösungen? Z.B. [1;0] oder [0;1] also mit Norm 1.

Danke im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen


Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2011, 08:12     Titel:
  Antworten mit Zitat      
Willst du das homogene Gleichungssystem a*x = 0 lösen, oder ist es nur Zufall das b = 0?

Falls du a*x=0 lösen willst kannst du dir die funktion null anschauen. Diese liefert für diesen Fall:

Code:

a=[1 -1; -1 1] ;
null(a) % = sqrt(2)/2*[1;1]
 


d.h. x = p*[1;1] (p in R) ist Lösung des Gleichungssystemes.

Im übrigen ist [1;0] keine Lösung:

Code:

a*[1;0]
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Cygnusx1
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 05.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2011, 09:35     Titel:
  Antworten mit Zitat      
Erstmal danke für deine Antwort.

Eigentlich ging es mir um ein komplexeres Problem, deshalb hab ich versucht es zu vereinfachen. Allerdings hab ich mich wohl bei den Lösungen vertan.
Also, ich bekomme bei einer Simulation 4x4 Matrizen heraus. Wenn ich bei meiner Simulation einen Fall mit nur wenigen Symmetrien wähle, dann gibt es oft nur eine Lösung. Im einfachsten Fall allerdings kommt eine Matrix in folgender Form heraus.
Code:

c=4*pi*i;
A=[-1, 1, 0, 0; -1, 1, 0, 0; 0, 0, 1, -1;  0, 0, 1, -1;]*c;
 

Mit dem Befehl null(), den du mir gesagt hast, bekomme ich 2 Lösungen heraus:
Code:

x1=[1; 1; 0; 0]*1/sqrt(2);
x2=[0; 0; 1; 1]*1/sqrt(2);
 

Das ist genau das was ich will.
Allerdings wie du schon richtig vermutet hast, steht auf der rechten Seite nicht immer ein 0-Vektor. Gibt es einen Befehl, der mir wie null() alle linear unabhängigen Lösungen ausspuckt, auch wenn die rechte Seite nicht der Nullvektor ist?
Bsp:
Code:

c=4*pi*i;
A=[-1, 2, 0, 0; -1, 2, 0, 0; 0, 0, 2, -1;  0, 0, 2, -1;]*c;
b=[1; 1; 1; 1]:
 

A\b spuckt hier nur NaNs aus und pinv(a)*b erzeugt nur eine Lösung:
Code:
[-0.2 0.4 0.4 -0.2];

Obwohl hier die gleichen linear unabhängigen Lösungen möglich sind wie im vorigen Beispiel:
Code:

x1=[1; 1; 0; 0]*1/sqrt(2);
x2=[0; 0; 1; 1]*1/sqrt(2);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 06.09.2011, 13:20     Titel:
  Antworten mit Zitat      
Hallo,

vielleicht kommt man hier mit der QR-Zerlegung weiter anstatt die vorgefertigten left divide bzw. pinv Methoden zu verwenden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2011, 14:28     Titel:
  Antworten mit Zitat      
hm, ich versteh dein Beispiel nicht. Ist i = 1?
Außerdem ist A*x1 ~= b und auch A*x2 ~=b. Also sind es doch keine Lösungen?!
Private Nachricht senden Benutzer-Profile anzeigen
 
Cygnusx1
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 05.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2011, 10:40     Titel:
  Antworten mit Zitat      
Sorry Thomas84, jetzt hab ich mich tatsächlich 2 mal mit dem Beispiel vertan.

Es geht darum, dass ich Koeffizienten für eine Funktion berechnen will.
Code:
f=c1*f1+c2*f2+c3*f3+c4*f4;

Diese kommen jeweils als Lösung eines Gleichungssystems heraus, mit einer 4x4 Matrix und einer Lösungsspalte.
Das Problem an der Sache ist jetzt, was mache ich wenn das Gleichungssystem unterbestimmt ist, also mehr als eine eindeutige Lösung hat?
Dann bekomme ich eine spezielle Lösung und mit dem Befehl null() den Kern der Matrix. Wie bestimme ich dann meine Vorfaktoren richtig? Wenn der Lösungsraum zB. eine Linie ist, dann bekomme ich ja einfach einen normierten Vektor in Richtung dieser Linie heraus. Mit welchem Faktor soll ich diesen Vektor dann skalieren? Wenn der Lösungsraum mehr als eine Dimension hat, also bei null(a) mehr als eine Lösung heraus kommt, dann würde ich außerdem gerne alle linear unabhängigen Lösungen unabhängig voneinander betrachten können.
Ich hoffe dieses mal war es verständlich. Danke nochmal!
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2011, 07:32     Titel:
  Antworten mit Zitat      
Ich hoffe ich habe das Problem jetzt richtig verstanden.
Ziel ist es das Gleichungssystem Ax = b zu lösen. Die allgemeine Lösung lässt sich wie folgt schreiben:
x = x_h + x_s
Wobei x_h eine Lösung des homogenen GLS und x_s eine Lösung des inhom. GLS ist. Alle hom. Lösungen bekommst du mit dem Befehl null. Eine inhomgene Lösung mit pinv(A)*b.

Beispiel:
Code:

A=[-1, 2, 0, 0; -1, 2, 0, 0; 0, 0, 2, -1;  0, 0, 2, -1;];
b = [1;1;1;1];

% homogene Lösungen berechnen
na = null(A);
xh1 = na(:,1);
xh2 = na(:,2);

% inhomogene Lösung berechnen
xs = pinv(A)*b;

% allgemeine Lösung
a1 = 1.2; % a1 und a2 sind beliebige
a2 = 1.3; % reele Zahlen
x = xs + a1*xh1 + a2*xh2;

% Probe
A*x
 


viele Grüße
Thomas
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.