2017-09-12 20 views
-1

Dies ist eine 3*5 Matrix und es gibt 2 freie Variablen. Ich weiß nicht, ob dies der beste Weg ist, das in MATLAB zu lösen. Aber es funktioniert nicht und Ausgabe Empty sym: 0-by-1Lineares Gleichungssystem mit freien Variablen lösen MATLAB

clear x_1 x_2 x_3 x_4 x_5 
syms x_1 x_2 x_3 x_4 x_5 

eqn1 = x_1+0*x_2+3*x_3+2*x_4-4*x_5==4 ; 
eqn2 = 2*x_1+x_2+6*x_3+5*x_4+0*x_5==7 ; 
eqn3 = -x_1+x_2-3*x_3-x_4+x_5==-5 ; 

tic ; 

res = solve([eqn1,eqn2,eqn3]) ; 

toc ; 

Antwort

1

Sie brauchen nicht die Symbolic Math Toolbox für ein einfaches System von linearen Gleichungen. Sie sind besser dran mit mldivide, die häufig genug ist, dass es die Kurzschrift \ hat.

Für ein System Ax = b, wo x ein Vektor von x-Werten ist, ist A eine Matrix von Koeffizienten und b ist ihr Produkt (rechte Seite des Systems), können Sie es durch

lösen
x = A\b; 

So

A = [1 0 3 2 -4; 
    2 1 6 5 0; 
    -1 1 -3 -1 1]; 

b = [4; 7; -5]; 

x = A\b 
>> ans = [0; 0; 2; -1; 0]; 

Sie können manuell überprüfen, dass dieses Ergebnis (x3=2, x4=-1, x1=x2=x5=0) arbeitet.

+0

Ich brauche die freien Variablen dargestellt werden. d. h. ich brauche den Lösungsraum, keine bestimmte Lösung – monotonic

+0

Es gibt nur eine Lösung, weil Sie "b" angegeben haben. – Wolfie

0

einen QR oder LU-Zerlegung verwenden zu Uy = L\b = c Problem

>> [l,u] = lu(A) 

l = 

      0.5  -0.33333   1 
      1   0   0 
     -0.5   1   0 


u = 

      2   1   6   5   0 
      0   1.5   0   1.5   1 
      0   0   0   0  -3.6667 

>> c = l\b 

c = 

      7 
     -1.5 
      0 

Schalten Sie dann. Jetzt haben Sie,

[2   1   6   5   0][x1] [ 7 ] 
[0   1.5   0   1.5   1][x2] = [-1.5] 
[0   0   0   0  -3.6667][x3] [ 0 ] 
                 [x4] 
                 [x5] 

Last entfernt man x5 und somit Zeile 3/Spalte 5. Und vom Rest können Sie den Lösungsraum überprüfen.

0

Nehmen wir an, dass A eine m-mal-n-Matrix ist und dass b ein n -dimensionaler Vektor ist. Sie wollen alle die Lösung A x = b im Fall von m<n wissen, und es wird ausgedrückt wie folgt:

x = x_0 + K y, .. (1)

wo x_0 eine beliebige Lösung der ursprünglichen Gleichung ist, A x = b, K ist eine n-by-(n-m) Matrix, deren Spalten eine Basis des Nullraums (auch Kernel genannt) von A bilden, und y ist ein beliebiger (n-m) -dimensionaler Vektor. Diese y entspricht dem, was Sie "freier Parameter" nennen.

Lassen Sie mich über die Matrix K mehr erklären. Der Nullraum der Matrix A ist ein Satz von Vektoren v, so dass A v = 0. Dieser Satz von v ist eigentlich ein Vektorraum der (n-m) -Dimension, und jede v kann als eine lineare Kombination von (n-m) Vektoren exprimiert werden, k_1, .., k_{n-m}, die miteinander linear unabhängig sind und erfüllen A k_i = 0 (i=1,..,n-m). Die Auswahl von k_1,..,k_{n-m} ist nicht eindeutig.

Sie können eq. (1) zu A x =b zu überprüfen, dass es in der Tat die Lösung ist, weil A K = 0. Der Ausdruck K y drückt alle Vektoren v aus, so dass A v=0.

Eine Methode, um die Matrix K zu finden ist die Singulärwertzerlegung,

A V = U S,

wo V und U sind n -by- n und m -by- m orthogonale Matrizen sind und S ist ein m-by- n Diagonalmatrix wie,

S = [s_1 0 0 0 0 ] 
    [ 0 s_2 0 0 0 ] 
    [ 0 0 s_3 0 0 ] 

Da die letzten (n-m) Spalten S Nullvektoren sind, sind die letzten (n-m) Spalten des Produkts U S ebenfalls Nullvektoren. Dies bedeutet, dass die letzten (n-m) Spalten von V Nullvektoren ergeben, wenn wir sie von links mit A multiplizieren. Daher gehören diese Spalten von V zu dem Nullraum von A. Da sie linear unabhängig sind (wie V ist eine orthogonale Matrix), bilden sie die Basis des Nullraums. Daher können wir K als die letzten (n-m) Spalten von V in der Singulärwertzerlegung gefunden setzen.

Ich weiß nicht, wie man die Singulärwertzerlegung in Matlab macht, aber es muss eine Funktion dafür geben.

Verwandte Themen