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

Lösen eines überbestimmten LGS

 

Ph91

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2015, 15:23     Titel: Lösen eines überbestimmten LGS
  Antworten mit Zitat      
Hallo zusammen,

ich würde gern ein LGS lösen, das 8 Unbekannte hat, aber nur 5 Gleichungen.
Dazu habe ich eine Koeffizientenmatrix A gebaut und die rechte Seite b.

Code:
% Das ist mein Programm.
A=[ 1/9 4/9 2/9 2/9 2/9 2/9 1/9 4/9; 2/9 2/9 1/9 4/9 1/9 4/9 2/9 2/9; 2/9 2/9 4/9 1/9 2/9 2/9 4/9 1/9; 4/9 1/9 2/9 2/9 4/9 1/9 2/9 2/9; 1 1 1 1 1 1 1 1]

b=[8/45 7/45 26/63 16/63 1]'
 

Da ich 5 Gleichungen aber 8 Unbekannte habe, sollte ich ja unendlich viele Lösungen herausbekommen (falls es lösbar ist). Ich lasse das ganze nun mit A\b lösen und erhalte:

Code:

>> A\b
Warning: Rank deficient, rank = 4, tol =  5.679834e-16.
ans =

    0.1429
    0.3000
         0
         0
         0
   -0.3000
    0.8571
         0
 


Dies ist ja nun eine spezielle Lösung. Wie kommt Matlab überhaupt darauf? Zweitens will ich eigentlich nur Lösungen mit x_1,x_2,x_3,X-4,x_5,x_6,x_7,x_8 >=0. (es geht hier konkret um eine Konvexkombination, deshalb auch die letzte Zeile der Matrix, dass sich x_1 bis x_8 auf 1 aufsummieren müssen). Wie kann ich das in meine Matrix mit einarbeiten?

Vielen Dank schonmal für eure Hilfe Smile Smile Smile
Ph 91


Harald
Forum-Meister

Forum-Meister


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

Zitat:
Dies ist ja nun eine spezielle Lösung.

Stimmt.

Zitat:
Wie kommt Matlab überhaupt darauf?

Was genau meinst du damit?
Mit null(A) bekommst du zusätzlich den Nullraum und kannst daraus alle Lösungen bestimmen.

Zitat:
Zweitens will ich eigentlich nur Lösungen mit x_1,x_2,x_3,X-4,x_5,x_6,x_7,x_8 >=0. (es geht hier konkret um eine Konvexkombination, deshalb auch die letzte Zeile der Matrix, dass sich x_1 bis x_8 auf 1 aufsummieren müssen). Wie kann ich das in meine Matrix mit einarbeiten?

Dafür kannst du lsqlin verwenden.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.03.2015, 10:01     Titel:
  Antworten mit Zitat      
Hey,

vielen Dank für deine schnelle Antwort. Ich habe mal ein bisschen rumgespielt heute morgen. Mit dem Nullraum von A kam ich nicht ganz so klar, allerdings habe ich das ganze nun mittels rref([A,b]) in eine Zeilen Stufenform gebracht und dann folgendes erhalten:
Code:

>> rref([A,b])
ans =

  Columns 1 through 6

       1              0              0              0              4/3           -2/3    
       0              1              0              0              2/3           -1/3    
       0              0              1              0             -1/3            2/3    
       0              0              0              1             -2/3            4/3    
       0              0              0              0              0              0      

  Columns 7 through 9

      -1/3            2/3            2/35    
      -2/3            4/3           -6/35    
       4/3           -2/3           33/35    
       2/3           -1/3            6/35    
       0              0              0      

 

Damit habe ich dann ausgelesen, dass x_5 bis x_8 frei wählbar sind und habe dann als weitere Lösungen gerade Folgendes erhalten:
Code:

x_1=2/35 -(4/3)*x_5 +(2/3)*x_6+(1/3)*x_7-(2/3)*x_8;
x_2=-6/35 -(2/3)*x_5 +(1/3)*x_6 +(2/3)*x_7 -(4/3)*x_8;
x_3=33/35 +(1/3)*x_5 -(2/3)*x_6 -(4/3)*x_7 +(2/3)*x_8;
x_4=6/35 +(2/3)*x_5 -(4/3)*x_6 -(2/3)*x_7 +(1/3)*x_8;
 


Setzt man nun speziell x_8=0 x_7= 6/7 x_6= -3/10 und x_5 = 0 so ergibt sich auch die von mir oben erwähnte spezielle Lösung.

Nun würde ich jedoch gerne noch sehen, dass es keine Lösung gibt bei der die x_i alle größer gleich 0 sind, d.h. mindestens ein x_i ist immer negativ.
Betrachtet man dazu beispielsweise x_2 und x_4 so ergibt sich falls x_8 =0 und x_6 = 0 ist gerade:

Code:

x_2=-6/35 -(2/3)*x_5 +(2/3)*x_7
x_4=6/35 +(2/3)*x_5 -(2/3)*x_7
 


Damit ist diese Aussage natürlich bestätigt. Irgendwie kann ich dies den Gleichungen aber nicht allgemein entnehmen. Deshalb habe ich mir mal ein kleines Programm geschrieben, dass nun überprüft ob diese These zumindest stimmt:

Code:

function [x_1,x_2,x_3,x_4,x_5,x_6,x_7,x_8,summe] = Lambda2(x_5,x_6,x_7,x_8)

counter=1;
for x_5=0:0.1:1
    for x_6=0:0.1:1
        for x_7=0:0.1:1
            for x_8=0:0.1:1

x_1=2/35 -(4/3)*x_5 +(2/3)*x_6+(1/3)*x_7-(2/3)*x_8;
x_2=-6/35 -(2/3)*x_5 +(1/3)*x_6 +(2/3)*x_7 -(4/3)*x_8;
x_3=33/35 +(1/3)*x_5 -(2/3)*x_6 -(4/3)*x_7 +(2/3)*x_8;
x_4=6/35 +(2/3)*x_5 -(4/3)*x_6 -(2/3)*x_7 +(1/3)*x_8;

x=[x_1;x_2;x_3;x_4;x_5;x_6;x_7;x_8];
summe= x_1+x_2+x_3+x_4+x_5+x_6+x_7+x_8;

if x >= 0
    counter
    x
    disp gefunden!!!
end

            end
        end
    end
end

end
 


Es sollte also x nur ausgeben falls alle Komponten von x>=0 sind und dann "gefunden!!!" schreiben. Dies tut es für die obige Stückelung der vorgegebenen Werte x_5 bis x_8 in 0.1er Schritten nicht. Es stützt meine These also. Jedoch sehe ich wie gesagt leider nicht an diesen 4 Gleichungen, dass dies so sein muss!

Vielen Dank Smile Smile
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.03.2015, 10:41     Titel:
  Antworten mit Zitat      
Hallo,

wie gesagt: lsqlin verwenden.

Ansonsten: wenn x_2 >= 0 sein soll und x_4 >= 0, dann auch x_2 + x_4 >= 0, also
-x_6 - x_8 >= 0
Damit muss entweder x_6 oder x_8 negativ sein, wenn x_2 und x_4 positiv sind.

Grüße,
Harald
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.