2012-04-14 6 views
1

Ich habe den folgenden Satz von Gleichungen, und ich möchte sie gleichzeitig für X und Y lösen. Ich wurde darauf hingewiesen, dass ich numpy verwenden könnte, um diese als ein System von linearen Gleichungen zu lösen. Ist das die beste Option oder gibt es einen besseren Weg?Gleichungen gleichzeitig lösen

 
a = (((f * X) + (f2 * X3))/(1 + (f * X) + (f2 * X3))) * i 
b = ((f2 * X3)/(1 + (f * X) + (f2 * X3))) * i 
c = ((f * X)/(1 + (j * X) + (k * Y))) * i 
d = ((k * Y)/(1 + (j * X) + (k * Y))) * i 
f = 0.0001 
i = 0.001 
j = 0.0001 
k = 0.001 
e = 0 = X + a + b + c 
g = 0.0001 = Y + d 
h = i - a 
+1

Zusätzlich zu 'numpy', was wahrscheinlich die richtige Antwort ist, lesen Sie [sympy] (https://code.google.com/p/sympy/). – agf

+1

Ich glaube 'numpy.solve (someMatrix)' würde ganz nett tun. –

+0

Danke, beides. Ich habe mich auch gefragt, ob ich sympy oder scipy installieren sollte. Mein Verständnis ist, dass sie sich überschneiden, aber was ist der Vorteil von einem gegenüber dem anderen? Wenn Sie Erfahrung mit beiden hatten, würde ich mich über das Feedback freuen. Danke noch einmal. – Nina

Antwort

2

Wie von Joe bemerkt, ist dies eigentlich ein System von nichtlinearen Gleichungen. Du wirst mehr Feuerkraft benötigen, als nur Numpy alleine zur Verfügung stellt.

Lösung von nichtlinearen Gleichungen ist schwierig, und die typische Vorgehensweise ist es, eine Zielfunktion

F ( z) = sum (e[n]^2, n = 1 ... 13)

zu definieren,

z ist ein Vektor mit einem Wert für jede Ihrer 13 Variablen a,b,c,d,e,f,g,h,i,X,Y und e[n] ist der Betrag, um den jede Ihrer 13 Gleichungen verletzt wird. Zum Beispiel

e[3] = (d - ((k * Y)/(1 + (j * X) + (k * Y))) * i ) 

Sobald Sie, dass objektive Funktion, dann können Sie einen nichtlinearen Solver anwenden, um zu versuchen ein z, für die F (z) = 0 zu finden. Das entspricht natürlich einer Lösung für Ihre Gleichungen.

Häufig verwendete Solver sind:

Hinweis des Matlab, dass alle von ihnen wird weit besser funktionieren, wenn Sie zuerst Ihren Satz von Gleichungen ändern, um so viele Variablen wie möglich zu eliminieren, bevor Sie versuchen, den Löser auszuführen (z. durch Substitution für k, wo immer es gefunden wird). Die reduzierte Dimensionalität macht einen großen Unterschied.