TabView[

{Style["Fourier-Reihen einfacher Funktionen",titleStyle]->

Column[
{(*First Row (Header and Explanation Button*)

Row[
{
Button[

Style["Hinweise",9],
CreateDocument[
TextCell[
Pane[
Column[{

(* Hinweistext *)

TextCell["\nHinweise\n",{explanationHeaderStyle}],
TextCell[hintText,explanationStyle],
TextCell[Row[{"\nWas ist die Fourier-",Style["Reihe",Italic]," genau?\n"}],{explanationHeaderStyle}],
TextCell[hintText2,explanationStyle]

(* TODO *)
(* End Hinweistext *)

}]


]
] ,(* End TextCell *)
WindowFrame->"Normal",WindowSize->{650,500},WindowTitle->"Hinweise"
] ,(* End CreateDocument *)
ImageSize->{80,20}
] (* End Button *)
},
ImageSize->{860,25},
Background->RGBColor[0.9,0.9,0.9],
Alignment->{Right,Top}
],  (* End Row *)


Manipulate[

(* Styles definitions *)
titleStyle = {FontFamily ->"Liberation Sans",14,Bold, RGBColor[0.35,0.35,0.35],Background->RGBColor[1,1,1,0]};
tagAtRight = {FontFamily ->"Liberation Sans",12,Bold, RGBColor[0,33/255,66/255],Background->RGBColor[1,1,1,0],TextAlignment->{Right,Top}};
textStyle = {FontFamily ->"Liberation Sans",10,Bold, RGBColor[0.35,0.35,0.35],Background->RGBColor[1,1,1,0],AutoIndent->False,ParagraphIndent->0,TextJustification->1};
explanationStyle = {FontFamily ->"Times",14,Plain, RGBColor[0.35,0.35,0.35],Background->RGBColor[1,1,1,0],AutoIndent->False,ParagraphIndent->0,TextJustification->1};
explanationHeaderStyle = {FontFamily ->"Times",16,Bold, RGBColor[0.35,0.35,0.35],Background->RGBColor[1,1,1,0],AutoIndent->False,ParagraphIndent->0,TextJustification->1};
mathStyle = {FontFamily ->"Liberation Serif",14,Bold, RGBColor[0.35,0.35,0.35],Background->RGBColor[1,1,1,0],AutoIndent->False,ParagraphIndent->0,TextJustification->1};
plotLabelStyle = {FontFamily ->"Times",14,Plain, RGBColor[0.35,0.35,0.35],Background->RGBColor[1,1,1,0]};


Plot[
{PeriodicExtension[k[[1]],x],
Evaluate[k[[2]]+Sum[k[[3]] Sin[n x]+k[[4]] Cos[n x],{n,1,m}]]
},
{x,-r,r},Axes->{True,True},PlotStyle->{{Thickness[0.005],RGBColor[0,0,0]},{Thickness[0.003],Blue}},Filling->{1->{{2},{RGBColor[1,0,0,0.2],RGBColor[0,0,1,0.2]}(*{Yellow,Orange}*)}},ImageSize->{500,400},ImagePadding->30,Background->White
],
(* Manipulate Parameters *)

      (* Choosable Functions *)
{
{k,(* Default function displayed *){Sign,0,1/(Pi*n)*(2-2 Cos[n*Pi]),0},Style["Funktion",textStyle]},
{
(* Data for each sample function: {pure function, const. fourier coeff., 
coeff. of the sine part in fct. of n, coeff. of the cos part in fct. of n} *)
{Sign,0,1/(Pi*n)*(2-2 Cos[n*Pi]),0}->Style["Treppenfunktion",textStyle],{#&,0,2 (-1)^(n+1)/n,0}->Style["Sägezahn",textStyle],
{#^2&,π^2/3,0,(4 (-1)^n)/n^2}->Style["Parabel",textStyle],{(#-Pi) (#+Pi) (#-1)&,(2 π^2)/3,(12 (-1)^n)/n^3,-((4 (-1)^n)/n^2)}->Style["Kubisch",textStyle],{(Sin[#] UnitStep[#])&,1/Pi,KroneckerDelta[n,1]/2,If[n==1,0,(-((1+(-1)^n)/((-1+n^2) π)))]}->Style["Halbweg-Gleichrichter",textStyle]
},
PopupMenu
},
"",

     (* Number of Fourier Summands to consider *)
Row[{Dynamic[Style["Anzahl Summanden der Fourier-Entwicklung: m = "<>ToString[m],textStyle]]},ImageSize->{350,Automatic}],
{{m,3,""},1,50,1},

      (* Intervall length to display as a multiple of 2Pi *)
Dynamic[Style["x Zoom: I = [-"<>ToString[r,TraditionalForm]<>","<>ToString[r,TraditionalForm]<>"]",textStyle]],
{{r,Pi,""},Pi,5*Pi,Pi},

Delimiter,
"",
Style["Fourier-entwickelte Funktion:",textStyle],
Row[{Dynamic[Style["f (Subscript[|, [-π, π]])(x) = "<>ToString[TraditionalForm[k[[1]][x]]],textStyle]]},Alignment->{Center},ImageSize->{350,Automatic}],
Row[{Dynamic[Style[If[ToString[k[[1]]]==ToString[(Sin[#] UnitStep[#])&],"\n θ ist die Einheitssprungfunktion (Heaviside Funktion)\n","\n\n"],textStyle, Plain]]},Alignment->{Center},ImageSize->{350,Automatic}],
(* End Manipulate Parameters *)
Initialization:>{
(PeriodicExtension[g_,x_]:=If[Abs[x]<Pi,g[x],PeriodicExtension[g,x-2 Sign[x] Pi]]),
( hintText  := Row[{"Die Visualisierung soll Ihnen einen Eindruck vermitteln, wie die ",Style["Partialsummen einer Fourier-Entwicklung",Bold]," die Ausgangsfunktion f immer besser annähern bzw. darstellen. Sie sollen durch die verschiedenen Beispielfunktionen auch sehen, dass die Konvergenz nicht bei jeder Funktion gleich schnell ist. Wählen Sie hierzu im ",Style["Dropdown-Menü 'Funktion'",Bold]," eine andere Funktion aus und beobachten Sie durch Verändern des ",Style["Schiebereglers 'Anzahl Summanden...'",Bold]," die Partialsummenfolge für steigendes m. Sie sehen: Bei manchen Funktionen ist im Plot sehr rasch kaum mehr ein Unterschied sichtbar. \n\nWas beinflusst eine schnellere Konvergenz? Versuchen Sie mit Hilfe der Visualisierung zu erkennen, dass \n\n",Style["•  wenn die Funktion f stetig ist, ihre Fourier-Reihe schneller konvergiert\n",AutoIndent ->True,LineIndent->1],
Style["•  wenn sogar die Ableitung(en) der Funktion f stetig ist (sind), die Konvergenz noch schneller ist (im Fall der Parabel und der Kubischen Funktion ist die Näherung schon nach 4 oder 5 Summanden sehr gut)",AutoIndent-> True, LineIndent->1]," \n\nBeachten Sie weiter auch, wie die entwickelte Funktion f ausserhalb des Intervalls [-π,π] periodisch fortgesetzt ist. Dazu haben Sie mit dem ",Style["'x-Zoom'-Regler",Bold]," die Möglichkeit, das Intervall zu vergrössern."}]
),
(hintText2 := Row[{  "Einen weiteren wichtigen Sachverhalt möchten wir hier auch noch kurz erwähnen, da dies oft nicht ganz klar ist:\nWährend jede Partialsumme der Fourier-Entwicklung von f, also das Fourier-",Style["Polynom",Bold],"\n\n       ",DisplayForm["(Subscript[F, n])(x)=((Subscript[a, 0])/2)+(Underoverscript[Σ, (k=1), m])((Subscript[a, k])cos(kωx)+(Subscript[b, k])sin(kωx))"],"\n\n","für jedes m eine Näherung an f darstellt, ist die (unendliche) ",Style["Reihe",Bold],"\n\n       ",DisplayForm["((Subscript[a, 0])/2)+(Underoverscript[Σ, (k=1), ∞])((Subscript[a, k])cos(kωx)+(Subscript[b, k])sin(kωx))"],"\n\n","nicht etwa eine 'besonders gute', eine 'unendlich gute', die 'bestmögliche' o.ä Näherung an f, sondern sie ",Style["ist",Bold]," f! Sie ist eine ",Style["äquivalente Darstellung der Funktion f",Bold],", was ein subtiler, aber wichtiger Unterschied ist.\n\nAls Folge können wir Funktion und Reihe gleichsetzen und schreiben:","\n\n       ",DisplayForm["f(x) =((Subscript[a, 0])/2)+(Underoverscript[Σ, (k=1), ∞])((Subscript[a, k])cos(kωx)+(Subscript[b, k])sin(kωx))"]}]
),
(m = 1)
},
SaveDefinitions->True,AppearanceElements->None,Paneled->False, ControlPlacement-> Left
] (* End Manipulate*)

}
] (* End Column *)
},
Background->RGBColor[0.95,0.95,0.95] (* TabView Background *)
] (* End TabView *)

2009, Projekt LEMUREN, Lernen Multimedial, Departement Mathematik, ETH Zürich | v20090626-1037 | Creative Common Licence: CC-BY-SA
Adapted version of Notebook "FourierSeriesOfSimpleFunctions" by Alain Goriely at the Wolfram Demonstrations Project.