Application Center - Maplesoft

App Preview:

Séries de puissances et séries de Fourier

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application


S?ries de puissances et s?ries de Fourier
 

? Andr? L?vesque

Cette application maplets permet d'obtenir le d?veloppement en s?rie de Taylor ou de Maclaurin d'une fonction ind?finiment d?rivable au voisinage d'un point ainsi que le d?veloppement en s?rie de Fourier d'une fonction p?riodique continue avec peut-?tre un nombre fini de points de discontinuit? de premi?re esp?ce. Pour en savoir un peu plus sur les s?ries de Taylor et de Maclaurin, consultez le document pdf  notes de cours sur les suites et s?ries. Pour lancer l'application, cliquez sur !!! ou choississez  Edit -> Execute -> Worksheet. ou placez votre curseur sur une ligne rouge du programme puis cliquez sur la touche retour. 

 

************************************** 

> restart:
 s1:="sin(x)": s2:="cos(x)": s3:="exp(x)": s4:="1/(1-x)": s5:="ln(1+x)": s6:="arctan(x)":

developpement:= proc()
local a, b, f, p, s, sl1, slx, sly:
global e, L, F, tc, tp, fct, rb1, tf1:
use Maplets[Tools] in
 sl1:=Get('SL1'):
 slx:=Get('SLX'):
 sly:=Get('SLY'):
 rb1:=Get('RB1'):
 if Get('TF1')="" then
   Maplets[Examples][Message]( "La fonction n'a pas ?t? d?finie."):
   return
 else
   if whattype(traperror(Get('TF1'::algebraic)))=string then
     Maplets[Examples][Message](cat("Erreur: f(x) = ",Get('TF1'))):
     return
   else
     tf1:=Get('TF1'::algebraic)
   fi:
   if (not(is(subs(x=1e-8,tf1),complexcons)) or is(subs(x=1e-8,tf1),complexcons)=FAIL or whattype(traperror(discont(tf1,x)))=string) then
     Maplets[Examples][Message](cat("Erreur: f(x) = ",convert(tf1,string))):
     return
   fi:
 fi:
 e:=0:  
 f:= x->convert(tf1,surd):
   if rb1=true then
     if Get('TC')<>"" then
       tc:=Get('TC'::constant):
     else
       Maplets[Examples][Message]("La valeur de ? C ? n'a pas ?t? d?finie."):
       return
     fi:
     if whattype(traperror(taylor(apply(f,x) ,x=tc, sl1)))=string then
       Set('PL1'= plot(0,x=1..2,1..2, axes=NONE)):
       Maplets[Examples][Message]("La fonction ne poss?de pas de d?veloppement en s?rie\nde puissances autour des valeurs choisies de C et n."):
       return
     fi:
     if whattype(traperror(timelimit(1,convert(apply(f,x), FormalPowerSeries, x=tc, n))))<>string and whattype(traperror(timelimit(1,convert(apply(f,x), FormalPowerSeries, x=tc, n))))<>exprseq then
       s:=subs(infinity=sl1,convert(apply(f,x), FormalPowerSeries, x=tc, n)):
       if s<>f(x) and whattype(traperror(convert(s,sum)))<>string then
         F:=s=convert(s,sum):
       else
         F:=sort(convert(taylor(apply(f,x) ,x=tc, sl1), polynom),[x], ascending):
       fi:
     else
       F:=sort(convert(taylor(apply(f,x) ,x=tc, sl1), polynom),[x], ascending):
     fi:
     if sl1>20 and type(F,equation) then
       Set('TW1'=lhs(F)):Set('TW2'=lhs(F)):
     elif sl1<=20 and type(F,equation) then
       if type(lhs(F),function) then
         p:=op([lhs(F)=add(subs(n=i,op(1,lhs(F))),i=0..sl1)]):
       else
         p:=F
       fi:
       Set('TW1'=p):Set('TW2'=p)
     elif length(convert(F,string))>3000 then
       Set('TW1'=`Expression?trop?complexe`): Set('TW2'=NULL):
     else
       Set('TW1'=F):Set('TW2'=F):
     fi:
     courbe():
     Set('PL1'=G):
     fct:=f(x):      
   else
     if Get('TP')<>"" then
       tp:=Get('TP'::constant):
         if evalf(tp)<=0 then
           Maplets[Examples][Message]( "La valeur de ? P ? doit ?tre positive."):
           return
         fi            
     else
       Maplets[Examples][Message]( "La valeur de ? P ? n'a pas ?t? d?finie."):
       return
     fi:
     p:=cat(" sur [ ", convert(-tp/2,string),", ", convert(tp/2,string)," ]"):
     if length(p)>24 then
       p:=" sur [-p/2, p/2]"
     fi:
     Set('LP'(caption)=p):
     assume(k::integer):
     L:= tp/2:
     subs(x=L/Pi*x, f):
     a[0]:= 1/L*int(f(x), x=-L..L):
     a[k]:= 1/L*int(f(x)*cos(k*Pi/L*x), x=-L..L):
     b[k]:= 1/L*int(f(x)*sin(k*Pi/L*x), x=-L..L):
     F:= sort(a[0]/2+sum(a[k]*cos(k*Pi/L*x)+b[k]*sin(k*Pi/L*x), k=1..sl1),ascending):
     if is(subs(x=0, F), real)=false then
       Set('PL1'= plot(0,x=1..2,1..2, axes=NONE)):
       Maplets[Examples][Message](cat("ERREUR - La fonction f doit ?tre continue sur la p?riode P choisie sauf peut ?tre en un nombre", `\n`, "fini de points de discontinuit? de premi?re esp?ce (les limites ? gauche et ? droite", `\n`, "existent et sont diff?rentes aux points de discontinuit? de premi?re esp?ce).")):
       e:=1:
       return:
     elif length(convert(F,string))>3000 then
       Set('TW1'=`Expression?trop?complexe`): Set('TW2'=`Expression?trop?complexe`):
       F:="Expression trop complexe":
     else
       Set('TW1'=F):Set('TW2'=F):
     fi:
   courbe():
   Set('PL1'=G):
   fct:=f(x):      
   fi:
 end use:
end:

courbe:= proc()
local g1, g2, g3, g4, x1, x2, y1, y2, sl1, slx, sly, rb1:
global e, F, G:
use Maplets[Tools] in
 sl1:=Get('SL1'):
 slx:=Get('SLX'):
 sly:=Get('SLY'):
 rb1:=Get('RB1'):
 F:=parse(Get('TW2')):
 if e=1 then return fi:
 if rb1=true and whattype(F)=`=` then
   F:=rhs(F)
 fi:
 if rb1=true then
   x1:= tc-10*1.02^slx:
   x2:= tc+10*1.02^slx:
   y1:=-5*1.03^sly:
   y2:= 5*1.03^sly:
   g1:= plot(convert(tf1,surd), x=x1..x2, y1..y2, color=red, discont=true, thickness=1, numpoints=200):
   g2:= plot(F, x=x1..x2, y1..y2, color=black, discont=true, thickness=3, numpoints=200):
   g3:= plots[implicitplot](x=tc, x=x1..x2, y=y1..y2, linestyle=3, color=black):
   g4:=plots[textplot]([tc, y2,  typeset("C = ",tc)], align={RIGHT}, color=black):
   G:=plots[display]([g2, g1, g3, g4], labels=["", ""], font=[HELVETICA,9]):
 else
   x1:=-2.5*tp/2*1.02^slx:
   x2:= 2.5*tp/2*1.02^slx:
   y1:=-5*1.03^sly:
   y2:= 5*1.03^sly:
   g1:= plot(convert(tf1,surd), x=max(-tp/2,x1)..min(tp/2,x2), y1..y2, color=red, discont=true, thickness=4, numpoints=200):
   g2:= plot(F, x=x1..x2,y1..y2, color=black, discont=true, thickness=2, numpoints=200):
   G:=plots[display]([g1, g2], labels=["", ""], font=[HELVETICA,9]):
 fi
end use
end:

fonction:=proc()
local s1,s2,s3,s4,s5,s6:
use Maplets[Tools] in
if Get('RB1')=true then
 s1:="sin(x)": s2:="cos(x)": s3:="exp(x)": s4:="1/(1-x)": s5:="ln(1+x)": s6:="arctan(x)"
else
 s1:="x": s2:="abs(x)": s3:="abs(x)/x": s4:="(x+abs(x))/2": s5:="x^2/2": s6:="piecewise(x>=0,(Pi-x)/2,-(Pi+x)/2)"
fi:
Set('MI1'(caption)=s1):
Set('MI2'(caption)=s2):
Set('MI3'(caption)=s3):
Set('MI4'(caption)=s4):
Set('MI5'(caption)=s5):
Set('MI6'(caption)=s6):
end use
end:

conserver:=proc()
use Maplets[Tools] in:
if Get('TW1')=NULL then return fi:
print():print():
print('f(x)'=fct):
if Get('RB1')=true then
  print():
  print('C' = Get('TC'::constant)):
  print()
else
  print():
  print(intervalle = [ (-1)*Get('TP'::constant)/2 , Get('TP'::constant)/2 ]):
  print()
fi:
print(parse(Get('TW2'))):
print():print():
print(G):
print(________________________________________________):
end use
end:

choix:=proc(c)
use Maplets[Tools] in:
Set('TF1'=Get(MI||c(caption)))
end use
end:

with(Maplets[Elements]):
 ini:= ()->Action(SetOption('SLX'=0), SetOption('SLY'=0), SetOption('SL1'=3)):

serie:=Maplet('onstartup'=RunWindow('A1'),
Window['A0'](title="Aide", height=400, width=520, 'layout' = 'BA0', resizable = false),
BoxLayout['BA0'](
BoxColumn(
TextBox(height=16, editable=false,
"
S?RIES DE PUISSANCES

  a) Trouver les d?veloppements en s?ries de Maclaurin
     des fonctions suivantes.

     f(x) = sin(x)
     f(x) = cos(x)
     f(x) = e^x         (tapez exp(x))
     f(x) = 1/(1-x)
     f(x) = ln(1+x)
     f(x) = arctan(x)

     En examinant le graphique des d?veloppements en
     s?ries des trois derni?res fonctions, estimer
     l'intervalle ouvert de convergence de ces s?ries.

  b) Trouver les d?veloppements en s?ries de Taylor
     des fonctions suivantes

     f(x) = ln(x)      autour de c=1, c=2, c=3, c=4
     f(x) = 1/(x^2-4)  autour de c=3, c=4, c=5, c=6

     En examinant le graphique de ces d?veloppements,
     estimer l'intervalle ouvert de convergence des
     s?ries autour de c=k>0 dans le premier cas et
     autour de c=k>2 dans le second cas.

S?RIES DE FOURIER

  Trouver les d?veloppements en s?ries de Fourier
  des fonctions suivantes de p?riode 2*Pi.

  f(x) = x              sur [-Pi, Pi]
  f(x) = abs(x)         sur [-Pi, Pi]
  f(x) = abs(x)/x       sur [-Pi, Pi]
  f(x) = x^2/2          sur [-Pi, Pi]
  f(x) = (x+abs(x))/2   sur [-Pi, Pi]

************************

Pour entrer rapidement les fonctions du haut utilisez
le bouton droit de la souris lorsque celle-ci pointe
sur la case contenant l'?quation de f(x).

"
),
Button("FERMER",CloseWindow('A0'))
)
),

Window['A1']('title'="D?veloppement de fonctions en s?ries", 'menubar'='MB1', height=540, width=800, resizable = false, 'layout' = 'BL1'),
BoxLayout['BL1'](
 TextField['TW2']("", visible=false),  
 BoxRow('inset'=0, 'spacing'=0, 'border'='true',
   BoxColumn('inset'=0, 'spacing'=0, 'halign'=left,
     Label(" ", font=Font('HELVETICA',6)),
     Label("S?RIE DE PUISSANCES - S?RIE DE FOURIER", font=Font('HELVETICA',11)),
     Label(" ", font=Font('HELVETICA',12)),
     BoxRow('inset'=0, 'spacing'=0,
       CheckBox['RB1']("", 'value'=true,  onchange=Action(SetOption('TF1'=""), Evaluate('PL1'= plot(0,x=1..2,1..2, axes=NONE)), Evaluate('TP'= 2*Pi), SetOption('LP'(caption)=cat(" sur [ ", convert(-Pi,string),", ", convert(Pi,string)," ]")), SetOption('TC'(enabled)=true), SetOption('TP'(enabled)=false), SetOption('RB1'(value)=true), SetOption('RB2'(value)=false), SetOption('RB2'(foreground)="#000000"), Evaluate('TW1'= ""), ini(), SetOption('MI1'(caption)= "sin(x)"), SetOption('MI2'(caption)= "cos(x)"), SetOption('MI3'(caption)= "exp(x)"), SetOption('MI4'(caption)= "ln(1-x)"), SetOption('MI5'(caption)= "ln(1+x)"), SetOption('MI6'(caption)= "arctan(x)"))),
       Label(" S?rie de puissances en (x-c) de f(x) avec C =", font=Font('HELVETICA',11)),
       TextField['TC']('value' = 0, width = 7, 'halign'=center),
       Label("         ")
     ),
     Label("  ", font=Font('HELVETICA',4)),
     BoxRow('inset'=0, 'spacing'=0,
       CheckBox['RB2']("", 'value'=false, onchange=Action(SetOption('TF1'=""), Evaluate('PL1'= plot(0,x=1..2,1..2, axes=NONE)), SetOption('TC'(enabled)=false), Evaluate('TC'= 0), SetOption('TP'(enabled)=true), SetOption('RB1'(value)=false), SetOption('RB2'(value)=true), SetOption('RB1'(foreground)="#000000"), Evaluate('TW1'= ""), ini(), SetOption('MI1'(caption)= "x"), SetOption('MI2'(caption)= "abs(x)"), SetOption('MI3'(caption)= "abs(x)/x"), SetOption('MI4'(caption)= "(x+abs(x))/2"), SetOption('MI5'(caption)= "x^2/2"), SetOption('MI6'(caption)= "piecewise(x>=0,(Pi-x)/2,-(Pi+x)/2)"))),
       Label(" S?rie de Fourier de f(x) de p?riode p=", font=Font('HELVETICA',11)),        
       TextField['TP']('value' = "2*Pi" , width = 7, halign=center, enabled=false),
       Label['LP'](cat(" sur [ ", convert(-Pi,string),", ", convert(Pi,string)," ]"), font=Font('HELVETICA',11))
     ),
     Label("  ", font=Font('HELVETICA',12)),
     BoxRow('inset'=0, 'spacing'=0,
       Label("  f(x) = ", font=Font('HELVETICA',11)),
       TextField['TF1']("", width=35, foreground=red, 'popupmenu'='PM1', onchange = Action(Evaluate('SLX'=0), Evaluate('SLY'=0), Evaluate('SL1'=3))),
     Button['BT1']("OK", 'onclick' = Evaluate('function'= 'developpement()'))
     ),
     Label("  ", font=Font('HELVETICA',6)),
       BoxRow(
         Label("  Nombre de termes de la s?rie : ", font=Font('HELVETICA',11)),
         Slider['SL1'](1..50, 3, 'minorticks'=1, filled=true, 'horizontal', onchange = Action(Evaluate('TW1'=""), Evaluate('function'= 'developpement()')))
       ),
       MathMLViewer['TW1'](width=370, height=280, fontsize=12)
     )
   ),
   BoxColumn('inset'=0, 'spacing'=0, 'border'='true',
     Plotter['PL1']('value' = plots[textplot]([0, 0, "
Quelques fonctions sont accessibles en utilisant
le bouton droit de la souris lorsque le curseur
pointe sur la zone rectangulaire de saisie de
texte ? droite de f(x) = .
", font=[COURIER,ITALIC,12]], axes=NONE), width=370, height=360),
     BoxRow('inset'=0, 'spacing'=0, 'border'='true',
       "x : ",
       Slider['SLX'](-100..100, 0, 'minorticks'=5, filled=true, 'horizontal', Evaluate('function'= 'developpement()')),
       Slider['SLY'](-100..100, 0, 'minorticks'=5, filled=true, 'horizontal', Evaluate('function'= 'developpement()')),
       " : y"
     ),
       Label("  ", font=Font('HELVETICA',2)),
     BoxRow('inset'=0, 'spacing'=0,
       Label("  ", font=Font('HELVETICA',6)),
       Button['BT2']("Conserver", onclick=Evaluate(function='conserver()')),
       Label("                        ", font=Font('HELVETICA',6)),
       Label("? Andr? L?vesque", font=Font('HELVETICA',10))
     )
   )
 ),
 MenuBar['MB1'](
   Menu("Fichier",
       MenuItem("Fermer", Shutdown())
   ),
   Menu("?",
       MenuItem("Aide", RunWindow('A0'))
   )
 ),

 ButtonGroup['BG1'](),
 PopupMenu['PM1'](
   MenuItem[MI1](s1, onclick = Action(Evaluate('function'='choix(1)'), Evaluate('function'= 'developpement()'))),
   MenuItem[MI2](s2, onclick = Action(Evaluate('function'='choix(2)'), Evaluate('function'= 'developpement()'))),
   MenuItem[MI3](s3, onclick = Action(Evaluate('function'='choix(3)'), Evaluate('function'= 'developpement()'))),
   MenuItem[MI4](s4, onclick = Action(Evaluate('function'='choix(4)'), Evaluate('function'= 'developpement()'))),
   MenuItem[MI5](s5, onclick = Action(Evaluate('function'='choix(5)'), Evaluate('function'= 'developpement()'))),
   MenuItem[MI6](s6, onclick = Action(Evaluate('function'='choix(6)'), Evaluate('function'= 'developpement()')))
 )
):
Maplets[Display](serie):