Seite 1 von 1

Sympy Goniometrische Gleichung lösen

Verfasst: Sonntag 17. September 2023, 12:03
von cxy123
Ich möchte mit sympy eine goniometrische Gleichung lösen.

Code: Alles auswählen

2sin(1.5x) = 1
sin(1.5x) = 0.5
1.5x = z
sin(z) = 0.5
asin(0.5) = 0.5236
z1 = 0.5236 + 2k*pi (k is element of Z) (Z are integer numbers)
z2 = pi - 0.5236 = 2.6180 + 2k*pi (k is element of Z)
1.5x1 = 0.5236 + 2k*pi
1.5x2 = 2.6180 + 2k*pi
x1 = 0.3491 + (4/3)k*pi
x2 = 1.7453 + (4/3)k*pi

Code: Alles auswählen

import sympy as smp
from sympy import *
x = smp.symbols('x')
eqn = Eq(2*sin((3/2)*x), 1)
solve(eqn, x)

[0.349065850398866, 1.74532925199433]


Sympy gibt hier nur die Basislösungen an ohne periodische Vielfache. Die Lösungsstruktur ist nicht befriedigend. Es ist ebenfalls nicht symbolisch. Die beiden Lösungen sind approximiert numerisch was ich eher in numpy erwarten würde.



In Wolfram Alpha wird die Lösung vollständig richtig angezeigt.

Code: Alles auswählen

x1 = (1/9)*pi + (4/3)*pi*k

Code: Alles auswählen

x2 = (5/9)*pi + (4/3)*pi*k


Kann mir jemand helfen und mir zeigen, wie es mit sympy möglich ist eine periodische Notation der Lösung zu erstellen?


Danke viele Grüße

Re: Sympy Goniometrische Gleichung lösen

Verfasst: Sonntag 17. September 2023, 13:52
von narpfel
Die Lösung ist numerisch, weil du `float`s in der Eingabegleichung benutzt. Siehe der `rational`-Parameter für `sympy.solve`.

Und für Gleichungen mit unendlich vielen Lösungen gibt es `solveset`:

Code: Alles auswählen

In [21]: eqn = sympy.Eq(2 * sympy.sin(sympy.Rational(3, 2) * x), 1)

In [22]: eqn
Out[22]:
     ⎛3⋅x⎞
2⋅sin⎜───⎟ = 1
     ⎝ 2 ⎠

In [23]: sympy.solveset(eqn, x)
Out[23]:
⎧4⋅n⋅π   5⋅π │      ⎫   ⎧4⋅n⋅π   π │      ⎫
⎨───── + ─── │ n ∊ ℤ⎬ ∪ ⎨───── + ─ │ n ∊ ℤ⎬
⎩  3      9  │      ⎭   ⎩  3     9 │      ⎭