2016-05-31 25 views
0

Ich versuche, die Unbekannten mehrerer Gleichungen zu finden, aber es gibt mehr Unbekannte als die Anzahl der Gleichungen. Der Code ist so etwas wie dieses:Lösen von Gleichungen mit mehr Unbekannten als Gleichungen

syms x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 

eqn1 = 0.04*x1 + 0.04*x2 + 0.2*x3 + 0.2*x4 + 2*x5 + 0.2*x6 + 0.2*x7 + 0.04*x8 + 0.04*x9 == 111; 
eqn2 = 0.04*x2 + 0.04*x3 + 0.2*x4 + 0.2*x5 + 2*x6 + 0.2*x7 + 0.2*x8 + 0.04*x9 + 0.04*x10 == 73; 
eqn3 = 0.04*x3 + 0.04*x4 + 0.2*x5 + 0.2*x6 + 2*x7 + 0.2*x8 + 0.2*x9 + 0.04*x10 + 0.04*x11 == 40; 
eqn4 = 0.04*x4 + 0.04*x5 + 0.2*x6 + 0.2*x7 + 2*x8 + 0.2*x9 + 0.2*x10 + 0.04*x11 + 0.04*x12 == 14; 
eqn5 = 0.04*x5 + 0.04*x6 + 0.2*x7 + 0.2*x8 + 2*x9 + 0.2*x10 + 0.2*x11 + 0.04*x12 + 0.04*x13 == 0; 
eqn6 = 0.04*x6 + 0.04*x7 + 0.2*x8 + 0.2*x9 + 2*x10 + 0.2*11 + 0.2*x12 + 0.04*x13 + 0.04*x14 == 191; 
eqn7 = 0.04*x7 + 0.04*x8 + 0.2*x9 + 0.2*x10 + 2*x11 + 0.2*x12 + 0.2*x13 + 0.04*x14 + 0.04*x15 == 153; 
eqn8 = 0.04*x8 + 0.04*x9 + 0.2*x10 + 0.2*x11 + 2*x12 + 0.2*x13 + 0.2*x14 + 0.04*x15 + 0.04*x16 == 362; 
eqn9 = 0.04*x9 + 0.04*x10 + 0.2*x11 + 0.2*x12 + 2*x13 + 0.2*x14 + 0.2*x15 + 0.04*x16 + 0.04*x17 == 471; 

[A,B] = equationsToMatrix([eqn1, eqn2, eqn3, eqn4, 5, eqn6, eqn7, eqn8, eqn9], [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17]) 

X = linsolve(A,B) 

Allerdings erhalte ich die Fehlermeldung:

Warning: The system is inconsistent. Solution does not exist. 
In symengine (line 57) 
In sym/privBinaryOp (line 903) 
In sym/linsolve (line 63) 
In solveLinEqn (line 15) 
X = 

Inf 
Inf 
. 
. 
. 
Inf 

Bedeutet es, dass es unendlich viele Lösungen für die Unbekannten? Und gibt es eine andere Methode, um dies zu lösen? Vielen Dank!

+0

Diese in http://math.stackexchange.com/ – eventHandler

+0

sein sollten Was Sie wirklich tun wollen? Sieh ein bisschen so aus, als würdest du irgendeine Art von Anpassung machen wollen, aber dann hast du bessere Möglichkeiten. – Bernhard

Antwort

3

Jedes System mit mehr Unbekannten als Gleichungen erzeugt ein unterbestimmtes System mit einer (# unknowns - # equation) freien Variablen.

Als Beispiel Gleichung 1 und 2 Unbekannten bedeutet, dass es 1 freie Variable

y = 5x - 2

1

Wenn man einen Blick auf die A Matrix nehmen rechts, bevor Sie rufen linSolve(A,B) Sie, dass es bemerken hat eine Reihe von Nullen:

[ 0, 1/25, 1/25, 1/5, 1/5, 2, 1/5, 1/5, 1/25, 1/25, 0, 0, 0, 0, 0, 0, 0] 
[ 0, 0, 1/25, 1/25, 1/5, 1/5, 2, 1/5, 1/5, 1/25, 1/25, 0, 0, 0, 0, 0, 0] 
[ 0, 0, 0, 1/25, 1/25, 1/5, 1/5, 2, 1/5, 1/5, 1/25, 1/25, 0, 0, 0, 0, 0] 
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[ 0, 0, 0, 0, 0, 1/25, 1/25, 1/5, 1/5, 2, 0, 1/5, 1/25, 1/25, 0, 0, 0] 
[ 0, 0, 0, 0, 0, 0, 1/25, 1/25, 1/5, 1/5, 2, 1/5, 1/5, 1/25, 1/25, 0, 0] 
[ 0, 0, 0, 0, 0, 0, 0, 1/25, 1/25, 1/5, 1/5, 2, 1/5, 1/5, 1/25, 1/25, 0] 
[ 0, 0, 0, 0, 0, 0, 0, 0, 1/25, 1/25, 1/5, 1/5, 2, 1/5, 1/5, 1/25, 1/25] 

Also was bedeutet das?
Bevor wir uns mit unterbestimmten Systemen beschäftigen, wollen wir noch einmal kurz auf die Lösung von linearen Gleichungen eingehen. Die exakte Lösung für ein lineares System Ax = b erfordert, dass die Matrix quadratisch ist, d. H. Die gleiche Anzahl von Zeilen und Spalten und invertierbar. Die Lösung eines solchen Systems erfordert x = A-1 * b, was jede numerische Software problemlos verarbeiten kann.

Bei dem System ist unterbestimmt das heißt mehr Unbekannte, die es erzeugt eine Matrix-Gleichungen, wo die Anzahl der Spalten in A ist größer als die Anzahl der Zeilen, so können wir nur die Lösung für ein solches System annähern. Ein unterbestimmtes System hat eine unendliche Anzahl von Lösungen lassen x' eine Lösung Ax' = b jetzt, dass x' = ATww für einig Vektor folgt auf das System sein. Dann können wir die Lösung des Systems ausdrücken, wie

AATw = b => w = (AAT)-1b x' = ATw 
AAT ist bekannt als die Gramm-Matrix und wie es oben gesehen werden kann, muss es invertierbar sein, damit das System eine Lösung hat. Da Ihre A Matrix eine Reihe von Nullen hat folgt, dass der GRAMM Matrix AAT wird auch eine Reihe von Nullen und deshalb ist es Einzahl (nicht umkehrbar):

[ 2604/625, 562/625, 109/125, 32/125, 0, 4/125, 11/625, 2/625, 1/625] 
[ 562/625, 2604/625, 562/625, 109/125, 0, 27/125, 4/125, 11/625, 2/625] 
[ 109/125, 562/625, 2604/625, 562/625, 0, 31/125, 27/125, 4/125, 11/625] 
[ 32/125, 109/125, 562/625, 2604/625, 0, 108/125, 32/125, 27/125, 4/125] 
[  0,  0,  0,  0, 0,  0,  0,  0,  0] 
[ 4/125, 27/125, 31/125, 108/125, 0, 2579/625, 312/625, 104/125, 27/125] 
[ 11/625, 4/125, 27/125, 32/125, 0, 312/625, 2604/625, 562/625, 109/125] 
[ 2/625, 11/625, 4/125, 27/125, 0, 104/125, 562/625, 2604/625, 562/625] 
[ 1/625, 2/625, 11/625, 4/125, 0, 27/125, 109/125, 562/625, 2604/625] 

TL; DR; Ihre Gramm-Matrix ist nicht invertierbar, daher hat das System keine Lösung (aka als inkonsistentes System) und deshalb erhalten Sie die inkonsistente Systemfehlermeldung.
Referenzen:
http://www.math.usm.edu/lambers/mat419/

Verwandte Themen