Seite 1 von 1
Plotten von Piecewise-fkt mit sympy
Verfasst: Samstag 28. Mai 2016, 12:35
von mbh
Hallo,
ich habe mit Piecewise eine Funktion (Rechteckimpuls) erstellt und möchte diese Plotten.
Code: Alles auswählen
import sympy
from sympy import *
from sympy.mpmath import *
from sympy.plotting import *
from sympy.abc import x, y, z, p, r, w
from IPython.display import display
a, b = -1.5, 1.5
I = [a,b]
m = (2 * pi)/(b-a)
p = Function('p')
f = Function('f')
p = sympy.Piecewise((0,w>1),(0,w<-1),(1,True))
f = lambda u: p.subs(w,u)
def ff(n):
k = 0
c, s = fourier(f, I, n)
fkt = 0
while k <= n:
fkt += c[k]*sympy.cos(k*m*x) + s[k]*sympy.sin(k*m*x)
#fkt += c[k]*x + s[k]*x
k += 1
return fkt
plot(ff(10),f(x),(x,a,b))
Allerdings erhalte ich immer folgenden fehler
TypeError: unorderable types: complex() < int()
Beim Einsetzen einzelner Werte funktioniert es, auch das Plotten der zugehörigen Fourierreihe haut hin.
Für jegliche Hilfe wär ich sehr dankbar!
Re: Plotten von Piecewise-fkt mit sympy
Verfasst: Samstag 28. Mai 2016, 14:08
von BlackJack
Also ich bekomme da einen anderen Fehler:
[codebox=text file=Unbenannt.txt]$ python forum4.py
Traceback (most recent call last):
File "forum4.py", line 29, in <module>
plot(ff(10),f(x),(x,a,b))
File "/usr/lib/python2.7/dist-packages/sympy/mpmath/visualization.py", line 49, in plot
a, b = xlim
TypeError: 'Piecewise' object is not iterable[/code]
Re: Plotten von Piecewise-fkt mit sympy
Verfasst: Samstag 28. Mai 2016, 14:11
von BlackJack
Die Zeilen 11 und 12 kannst Du übrigens weglassen, die haben keinen Effekt. Falls Du denkst die machen irgendetwas sinnvolles, liegt dort vielleicht ein Verständnisproblem bezüglich Python.
Re: Plotten von Piecewise-fkt mit sympy
Verfasst: Samstag 28. Mai 2016, 15:31
von mbh
BlackJack hat geschrieben:Die Zeilen 11 und 12 kannst Du übrigens weglassen, die haben keinen Effekt. Falls Du denkst die machen irgendetwas sinnvolles, liegt dort vielleicht ein Verständnisproblem bezüglich Python.
Ja, das hab ich dann auch bemerkt, aber vergessen die Zeilen wieder zu löschen.. Kenn mich prinzipiell mit sympy wenig aus
Ich bekomme immer den selben Fehler, egal ob ich versuche Piecewise 'direkt' zu plotten oder mittels subs. Ich versteh nicht, woher er auf einmal die komplexen Zahlen nimmt oder was ich da prinzipiell vl falsch verstehe..
Code: Alles auswählen
test1 = lambda u: 1 if u <= 1 else u
plot(test1(y), (y,-1,4))
bringt übrigens den Fehler
TypeError: cannot determine truth value of
y <= 1
Code: Alles auswählen
test2 = lambda u: 0 if u == 1 else u
plot(test2(y), (y,-1,4))
bringt keinen Fehler, zeichnet aber einfach eine f(x) = x Fkt
Re: Plotten von Piecewise-fkt mit sympy
Verfasst: Samstag 28. Mai 2016, 18:30
von Sirius3
@mbh: Dein Problem ist, dass Du versuchst, Python-Ausdrücke mit Sympy zu mischen. Bei "1 if u<=1 else 0" versucht Python zuerst Die Bedingung Symbol u <= 1 aufzulösen, was natürlich nicht geht, weil u eine Unbekannte ist, man also nicht sagen kann, ob die nun größer oder kleiner 1 ist. Daher gibt es ja die Piecewise-Funktion. Im ersten Beispiel versuchst Du die Imaginäre Einheit mit der Piecewise-Funktion zu verwenden, was natürlich auch fehlschlägt, weil bei Komplexen Zahlen es kein größer oder kleiner gibt.
Re: Plotten von Piecewise-fkt mit sympy
Verfasst: Samstag 28. Mai 2016, 19:49
von mbh
Sirius3 hat geschrieben:@mbh: Dein Problem ist, dass Du versuchst, Python-Ausdrücke mit Sympy zu mischen. Bei "1 if u<=1 else 0" versucht Python zuerst Die Bedingung Symbol u <= 1 aufzulösen, was natürlich nicht geht, weil u eine Unbekannte ist, man also nicht sagen kann, ob die nun größer oder kleiner 1 ist. Daher gibt es ja die Piecewise-Funktion.
Ok, macht Sinn..[/quote]
Im ersten Beispiel versuchst Du die Imaginäre Einheit mit der Piecewise-Funktion zu verwenden, was natürlich auch fehlschlägt, weil bei Komplexen Zahlen es kein größer oder kleiner gibt.
Woher kommt diese imaginäre Einheit? Wie bringe ich es hin, dass nur die reellen Werte zwischen -1.5 und 1.5 geplottet werden?
Re: Plotten von Piecewise-fkt mit sympy
Verfasst: Samstag 28. Mai 2016, 22:59
von mbh
Hab's - mit adaptive=false, aber verstehen tu ich's nicht wirklich

Re: Plotten von Piecewise-fkt mit sympy
Verfasst: Samstag 28. Mai 2016, 23:40
von BlackJack
@mbh: Ich vermute mal es gibt Probleme die Anzahl der Punkte an denen gezeichnet werden soll, damit der Plot möglichst genau ist, zu ermitteln wenn man eine nicht-stetige Funktion hat.
Re: Plotten von Piecewise-fkt mit sympy
Verfasst: Sonntag 29. Mai 2016, 00:39
von mbh
@BlackJack: Wenn python mir das nur so mitteilen würde, dass ich es auch verstehe...
