Seite 1 von 1

Sympy Solve Rechendauer reduzieren

Verfasst: Montag 16. Januar 2023, 14:31
von hitchko
Hallo zusammen,

will mit Hilfe der sympy.solve Funktion eine Gleichung nach einer Variablen umstellen und mir das Ergebnis ausgeben lassen.
Das Programm rechnet jedoch ziemlich lange. Hat jemand eine Idee wie man die Rechenzeit verringern könnte? Evtl. die Lösungsmenge einschränken? Falls ja, wie könnte ich das tun?

Code: Alles auswählen

import sympy as sy
from sympy.solvers import solve
from sympy import Symbol

w=0.4
v0=2
g=9.81
h=0.24
h2=0.12
q = Symbol('q')


loesung=solve(-w + ((v0**2)/g) *(1- (q**2))**0.5 *(q +((q**2)+((2*h2*g)/(v0**2))**0.5)), q) #Berechnung von Sinus(x) (alpha)
print(loesung)
Vielleicht könnte mir dabei jemand helfen.


Vielen Dank :)
Christian

Re: Sympy Solve Rechendauer reduzieren

Verfasst: Dienstag 17. Januar 2023, 11:56
von __blackjack__
@hitchko: Symbolisch bekommt Sympy das so nicht nach `q` aufgelöst, ist die Frage ob Du nicht besser gleich einen numerischen Lösungsansatz verwendest.

Code: Alles auswählen

from sympy import S, Symbol, symbols, pprint
from sympy.solvers import solve

w, v0, g, h2 = symbols("w v0 g h2", real=True)
q = Symbol("q")

expr = -w + ((v0**2) / g) * (1 - (q**2)) ** S("1/2") * (
    q + ((q**2) + ((2 * h2 * g) / (v0**2)) ** S("1/2"))
)
pprint(expr)
results = solve(expr, q)
print(results)
Ausgabe:

Code: Alles auswählen

            ________ ⎛                 ______⎞
       2   ╱      2  ⎜ 2              ╱ g⋅h₂ ⎟
     v₀ ⋅╲╱  1 - q  ⋅⎜q  + q + √2⋅   ╱  ──── ⎟
                     ⎜              ╱     2  ⎟
                     ⎝            ╲╱    v₀   ⎠
-w + ─────────────────────────────────────────
                         g                    
[]

Re: Sympy Solve Rechendauer reduzieren

Verfasst: Dienstag 17. Januar 2023, 13:57
von hitchko
Vielen Dank!
Wie könnte man das numerisch lösen?

Re: Sympy Solve Rechendauer reduzieren

Verfasst: Dienstag 17. Januar 2023, 14:20
von __blackjack__
Da gibt's wahrscheinlich was von `numpy` oder `scipy`.