Ich benutze sympy 1.0 mit Python 2.7.10 auf einem Mac. Das Problem ist, dass wenn ich Floats für Parameter anstelle von Ints verwende, scheint solve() für immer zu drehen.Sympy arbeitet mit int params, aber spinnt mit floats
Hier ist mein Skript, mit a, b und c wie int angegeben. Es gibt die folgende Ausgabe mit oder ohne a, b smpifying und c:
from sympy import *
x = symbols('x')
a = 500
b = 10
c = 333
y = a + b * (x - c) - (a * (x/c) + x * b * log(x/c))
print 'y=', y
solution = solve(y, x)
print 'solve() gives:', solution
Diese Drucke:
y= -10*x*log(x/333) + 2830*x/333 - 2830
solve() gives: [333*exp(LambertW(-283*exp(-283/333)/333) + 283/333)]
Das ist richtig, wie ich durch die Lösung numerisch mit nSolve prüft haben() und Vergleichen mit einer unabhängig berechneten Lösung.
Nun ändern Sie die Definition von a, b und c:
a = 500.0
b = 10.0
c = 333.0
Dann wird die Ausgabe wie folgt:
y= -10.0*x*log(0.003003003003003*x) + 8.4984984984985*x - 2830.0
Damit lösen() dreht, scheinbar für immer. Beachten Sie, dass dieser Ausdruck numerisch korrekt angezeigt wird.
Also noch einmal, die Frage ist: Wie kann ich Gleitkommaparameter in sympy Gleichungen verwenden?
Ich versehentlich vor dem Beenden veröffentlicht. Ich wollte sagen: Zuerst sehe ich, was Sie sehen, mit Schwimmern. Zweitens, wenn ich Intars anstelle der Floats verwende, bekomme ich die Lösung, die ich zuvor mit LambertW gesehen habe, anstatt eine numerische Lösung. Seltsam. Drittens gibt solve() einen einzelnen Ausdruck zurück; aber es gibt zwei Wurzeln. Der andere ist in der Nähe von 242.259. Sollte ich nicht erwarten, dass solve() auch dieses findet? – wchlm
Seufzer. 2. Wenn ich Intars anstelle von Floats verwende, sehe ich eine Lösung mit LambertW (aber es ist nicht die gleiche Lösung, die ich zuvor gesehen habe - wahrscheinlich ist es nur die Sonderfalllösung für diesen Root.) – wchlm
@wchlm Tatsächlich hat "y" zwei Wurzeln. Leider kann ich keinen Weg finden, um beides zu lösen (ich bin kein Experte). – Stelios