MachiKaniaでフーリエ級数の確認  投稿者:ケンケン  投稿日:2017年10月29日(日)16時44分3秒 NE0356lan1.rev.em-net.ne.jp 返信・引用
  MachiKania type Zで関数をフーリエ級数に展開するプログラム作成しました。
画像の赤いグラフが元の関数で、緑がフーリエ級数展開したものです。
元の関数はここではx*exp(sin(x))としています。

プログラムの最初に各種パラメータ設定しています。

D :定積分の分解能(関数の範囲を何分割するか)
N :級数を何回まで計算するか
T#:関数の範囲(-T#/2~+T#/2)

展開したい関数は、一番最後のLABEL FUNCのサブルーチン(関数)で定義しています。
書き換えて様々な関数を試すことができます。単純な数学関数だけでなく、引数から
条件指定することで矩形波なども作れます。

結果を見ると、Nを大きくすると元の関数に近づくのがよく分かります。

こんな風にMachiKaniaを数学の学習に使ってみるのはいかがでしょうか。

------------------------------------------------------------------------------
REM Fourier series

D=512:N=8:T#=2*PI#
DIM A#(N),B#(N)
USEGRAPHIC
H#=T#/FLOAT#(D)
GCOLOR 2
FOR I=-128 TO 127
  X#=FLOAT#(I)*T#/256
  GOSUB PLOT,I+128,GOSUB#(FUNC,X#)
NEXT
FOR I=0 TO N
  A#(I)=0:B#(I)=0
  FOR J=-D/2 TO D/2-1
   X#=FLOAT#(J)*H#
   A#(I)=A#(I)+GOSUB#(FUNC,X#)*COS#(FLOAT#(I)*X#)*H#
   B#(I)=B#(I)+GOSUB#(FUNC,X#)*SIN#(FLOAT#(I)*X#)*H#
  NEXT
  A#(I)=A#(I)*2/T#
  B#(I)=B#(I)*2/T#
  GPRINT 0,0,7,0,"N="+DEC$(I)
NEXT

GCOLOR 4
FOR I=-128 TO 127
  X#=FLOAT#(I)*T#/256
  Y#=A#(0)/2
  FOR J=1 TO N
   Y#=Y#+A#(J)*COS#(FLOAT#(J)*X#)+B#(J)*SIN#(FLOAT#(J)*X#)
  NEXT
  GOSUB PLOT,I+128,Y#
NEXT

WHILE INKEY()=0:WEND:END

LABEL PLOT
  IF ARGS(1)=0 THEN
   POINT ARGS(1),INT(-ARGS#(2)*20+100)
  ELSE
   LINE ,ARGS(1),INT(-ARGS#(2)*20+100)
  ENDIF
RETURN

LABEL FUNC
  VAR X#,Y#
  X#=ARGS#(1)
  Y#=X#*EXP#(SIN#(X#))
RETURN Y#