Funktion definieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Dosi
User
Beiträge: 9
Registriert: Donnerstag 7. April 2016, 17:24

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]))
Zuletzt geändert von Anonymous am Samstag 28. Mai 2016, 12:44, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

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.
a fool with a tool is still a fool, www.magben.de, YouTube
Dosi
User
Beiträge: 9
Registriert: Donnerstag 7. April 2016, 17:24

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? :-)
BlackJack

@Dosi: Die Zeilen 7 und 8 machen keinen Sinn, da die Werte im Programm nirgends verwendet werden.
Dosi
User
Beiträge: 9
Registriert: Donnerstag 7. April 2016, 17:24

@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 ...
S0S
User
Beiträge: 50
Registriert: Samstag 9. Februar 2013, 18:59

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)
Dosi
User
Beiträge: 9
Registriert: Donnerstag 7. April 2016, 17:24

Das hätte ich auch schon versucht, ich weiß aber dann nicht, wie ich das plotten soll :-(
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. :-)
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@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)))
Antworten