Seite 1 von 1

Funktion definieren

Verfasst: Samstag 28. Mai 2016, 12:05
von Dosi
Hi, ich soll die Fourierreihe als Funktion definieren:
Bild

Mein Problem ist jetzt, dass ich nicht genau weiß, wie ich das mit symbolischer Mathematik machen kann, bzw. wie ich es generell machen kann, ich muss die Funktion nämlich später plotten können (mittels sympy.plot).
Die Werte die ich noch habe sind: [a,b] = [-1.5,1.5] und N = 10
Die Koeffizienten c[sub]k[\sub] und s[sub]k[\sub] hab ich bereits, die sind als Liste in c10 und s10 gespeichert. Hier mein bisheriger Quellcode:

Code: Alles auswählen

from sympy import *
from sympy.plotting import *
from sympy.mpmath import fourierval

init_printing(use_latex = True)

x = Symbol('x')
r = Symbol('r')
f10 = Function('f10')

r = lambda x:Piecewise((0,x<int(-1)), (1,x<=int(1)), (0,x>int(1)))

cs10 = fourier(r,[-1.5,1.5],10)
c10 = []; s10 = []

for el in range(11):
    c10.append(nfloat(cs10[0][el]))
    s10.append(nfloat(cs10[1][el]))

Re: Funktion definieren

Verfasst: Samstag 28. Mai 2016, 12:41
von MagBen
Es ist nur dann sinnvoll das ganze mit Sympy zu machen, wenn Du analytisch mit der Fourierreihe weiterarbeiten willst. Wenn Du einfach nur die Zahlenwerte brauchst und das ganze plotten willst, dann geht es mit Numpy und Matplotlib einfacher.

Re: Funktion definieren

Verfasst: Samstag 28. Mai 2016, 13:07
von Dosi
Das Problem ist, dass wir es laut Aufgabenstellung eher mit sympy machen sollen (also analytisch), das einzige was ich noch brauch ist eigentlich die Definition als Funktion - Plotten dürfte dann ja nicht das Problem sein, wenn man einmal die Summe in eine Funktion f(x) gepackt hat.

Kannst du mir da weiterhelfen? :-)

Re: Funktion definieren

Verfasst: Samstag 28. Mai 2016, 14:10
von BlackJack
@Dosi: Die Zeilen 7 und 8 machen keinen Sinn, da die Werte im Programm nirgends verwendet werden.

Re: Funktion definieren

Verfasst: Samstag 28. Mai 2016, 20:24
von Dosi
@BlackJack: Stimmt danke! Ist noch ein kleiner Rest von einem vorherigen Versuch ;-)

Mein Problem ist eben einfach, dass ich nicht weiß, wie ich die Summe in eine Funktion packen soll ...

Re: Funktion definieren

Verfasst: Samstag 28. Mai 2016, 21:10
von S0S
Du kannst die Summe doch einfach als Schleife programmieren. Also:

Code: Alles auswählen

for k in range(N+1):
    C10[k] * math.cos(k*m*x) + S10[k] * math.sin(k*m*x)

Re: Funktion definieren

Verfasst: Samstag 28. Mai 2016, 21:34
von Dosi
Das hätte ich auch schon versucht, ich weiß aber dann nicht, wie ich das plotten soll :-(

Re: Funktion definieren

Verfasst: Samstag 28. Mai 2016, 21:52
von BlackJack
@Dosi: So wirklich eine Funktion im Sinne von Python-Funktion brauchst Du ja nicht wenn Du `sympy.plot()` verwenden sollst. Das will ja ein `sympy` Objekt das als Ausdruck funktioniert, mit einer freien Variablen. Du musst Dir also letztendlich nur die ”Funktion” mit `sympy`-Objekten zusammenbasteln.

Ein Kollege von Dir hat das hinbekommen. Der hat jetzt allerdings Probleme die `Piecewise`-”Funktion” zu plotten. :-)

Re: Funktion definieren

Verfasst: Sonntag 29. Mai 2016, 12:30
von Sirius3
@Dosi: die fourier-Funktion hat zwei Rückgabewerte, Deine Schleife kannst Du Dir also sparen:

Code: Alles auswählen

c10, s10 = fourier(r, [-1.5,1.5], 10)
Und die Summe kannst Du mit der Python-Funktion sum fast wörtlich schreiben:

Code: Alles auswählen

fourier_sum = sum(formel(k,x) for k in range(len(c10)))