- ベストアンサー
BASICでフーリエ級数展開のグラフが思うように描けません!!
BASICで f(x)= -π/4 (x<0) +π/4 (x>0) をフーリエ級数展開した f(x)≒sinx+(sin3x)/3+(sin5x)/5+…(+sin(2n-1)x)/(2n-1) のグラフを描きたいと思っています。 十進BASICで次のようなプログラムを作ってみたのですが、 x<0 のとき-π/4 , x>0 のときπ/4 というグラフにはならず、 サインのグラフが歪んだようなものが出来上がってしまいます。 この場合、プログラムのどこを修正すればよいのでしょうか? LET S=0 LET k=0 DEF f(X)=SIN((2*k-1)*X)/(2*k-1) SET WINDOW -10,10,-23,10 DRAW GRID FOR X=-10 TO 10 STEP 0.1 FOR k=1 TO 1000 LET S=S+SIN((2*k-1)*X)/(2*k-1) NEXT k PLOT LINES: X,S NEXT X END
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
後は、角度の単位がラジアンになっていない。 これで、どう? DEF f(X)=SIN((2*k-1)*X)/(2*k-1) SET WINDOW -10,10,-23,10 DRAW GRID FOR X=-10 TO 10 STEP 0.1 LET S=0 LET Y = X * PI / 180 FOR k=0 TO 1000 LET S=S+f(Y) NEXT k PLOT LINES: X,S NEXT X END ・最初の変数の初期化は削除。 ・変数sの初期化はループの中。 ・角度をラジアンに変更。 ・せっかくf(X)を定義しているから使用する。
その他の回答 (2)
- edomin7777
- ベストアンサー率40% (711/1750)
#2です。 自分で、 「角度の単位がラジアンになっていない。」 とは書いたけど、自分で「???」になっています。 (本当にそういうことか?) 何か違う気がする…。
- f272
- ベストアンサー率46% (8467/18126)
LET S=0 を FOR k=1 TO 1000 LET S=S+SIN((2*k-1)*X)/(2*k-1) NEXT k の直前に置かないとダメでしょ。
お礼
返信が遅くなって申し訳ありません。 変数の初期化は使う直前にする、ということで了解しました。
お礼
試してみたところ、うまくいきました!!! 角度をラジアンでやる方法がわからなかったので保留にしていましたが、それも教授していただきありがとうございました。