2016-05-14 30 views
0

Hier ist der Code:wie simultane Gleichungen zu lösen mit lösen und mit Ergebnis ohne Wurzeln

syms G1 G2 G3 M1 M2 M3 P1 P2 P3 D1 D2 D3 
S = solve(0 == 0.9 * (20 - G1) - 0.012 * D3 * G1, ... 
     0 == 0.9 * (20 - G2) - 0.012 * D1 * G2, ... 
     0 == 0.9 * (20 - G3) - 0.012 * D2 * G3, ... 
     0 == -0.0033 * M1 + 0.002 * G1, ... 
     0 == -0.0033 * M2 + 0.002 * G2, ... 
     0 == -0.0033 * M3 + 0.002 * G3, ... 
     0 == 0.1 * M1 - 0.0033 * P1 + 2 * 0.5 * D1 - 2 * 0.025 * (P1^2), ... 
     0 == 0.1 * M2 - 0.0033 * P2 + 2 * 0.5 * D2 - 2 * 0.025 * (P2^2), ... 
     0 == 0.1 * M3 - 0.0033 * P3 + 2 * 0.5 * D3 - 2 * 0.025 * (P3^2), ... 
     0 == -0.5 * D1 + 0.025 * (P1^2) + 0.9 * (20 - G2) - 0.012 * D1 * G2, ... 
     0 == -0.5 * D2 + 0.025 * (P2^2) + 0.9 * (20 - G3) - 0.012 * D2 * G3, ... 
     0 == -0.5 * D3 + 0.025 * (P3^2) + 0.9 * (20 - G1) - 0.012 * D3 * G1) 

Das Problem ist, dass ich wirkliche Lösung brauchen, aber ich habe Antworten mit Wurzeln bekommt. Wie kann ich echte Antworten bekommen?

Antwort

0

durch „echte Lösung“ Angenommen, Sie einen numerischen Wert bedeutet, anstelle der genauen Wurzel-of-Polynom Form gibt es two options je nachdem, wie Sie beabsichtigen, die Ergebnisse zur Verwendung von:

  1. double: dieser Wille werten Sie die RootOf Ausdrücke aus, vorausgesetzt, es gibt keine freien Parameter, und geben Sie eine numerische Ausgabe der Klasse double zurück. Obwohl die Ausgabe jetzt auf die doppelte Genauigkeit beschränkt ist, ist dies die schnellste Option, wenn Sie die Berechnung mit den Wurzeln durchführen und die Leistung berücksichtigen möchten.

  2. vpa: dies bewerten die RootOf Ausdrücke, vorausgesetzt, es gibt keine freien Parameter sind, und gibt eine symbolische Ausgabe der Klasse sym. Während die Ausgabe nun bei der Auswertung durch vorheriges Aufrufen von digits mit unterschiedlichen Genauigkeitsgraden angenähert werden kann, kann aufgrund ihrer symbolischen Natur in nachfolgenden Berechnungen ein großer Rechenaufwand entstehen.