Sympy Goniometrische Gleichung lösen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
cxy123
User
Beiträge: 3
Registriert: Samstag 16. Mai 2015, 22:13

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
narpfel
User
Beiträge: 645
Registriert: Freitag 20. Oktober 2017, 16:10

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 │      ⎭

Antworten