• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:実フーリエ係数an,bnをC言語を使って求める問題について質問です。 )

C言語で実フーリエ係数an,bnを求める方法

このQ&Aのポイント
  • C言語を使って実フーリエ係数an,bnを求める方法についての質問です。実フーリエ係数an,bnを求めるための式と、それをC言語で離散化した式を紹介しています。
  • 実際にC言語のコードも記載されており、フーリエ変換を行って実フーリエ係数anを求めるプログラムの実装方法を説明しています。
  • しかし、実行結果の出力を確認したところ、期待した結果と異なる結果が得られています。質問者はなぜ結果が異なるのか原因が分からず困っています。アドバイスを求めています。

質問者が選んだベストアンサー

  • ベストアンサー
  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.1

 まず、プログラムは一切見ないで、離散化された「係数を求める式」の性質だけを検討しましょう。三角関数の基本を思い出してみれば、恒等式 cos(-n*2π*x/N)=cos(n*2π*x/N) sin(-n*2π*x/N)=-sin(n*2π*x/N) が成り立つ。だから、f(x)が何であれ a[-n]=a[n] b[-n]=-b[n] であることが分かります。  また、xは整数なのだから、任意の整数kについて、恒等式 cos((n+kN)*2π*x/N)=cos(n*2π*x/N) sin((n+kN)*2π*x/N)=sin(n*2π*x/N) が成り立つ。だからf(x)が何であれ a[n+kN]=a[n] b[n+kN]=b[n] であることも分かります。  以上から、 a[N-n]=a[-n]=a[n] b[N-n]=b[-n]=-b[n] になるのが正しい。  以上から、お困りの原因は > 他の成分A0,A2,A3は0になると思う という思い込みにあるんです。見てませんけど、おそらくプログラムは正しいんじゃないでしょうか。

take8793
質問者

補足

stomachmanさん回答ありがとうございます。 >a[-n]=a[n] >b[-n]=-b[n] 納得です。 >また、xは整数なのだから、任意の整数kについて、恒等式 >cos((n+kN)*2π*x/N)=cos(n*2π*x/N) >sin((n+kN)*2π*x/N)=sin(n*2π*x/N) >が成り立つ。 こちらの部分なのですが、極端な例としてkN=1, 2π*x/N=Xとしたとき、 cos((n+1)X)=cos(nX) sin((n+1)X)=sin(nX) n=1のとき、 cos(2X)=cos(X) sin(2X)=sin(X) X=π/2のとき、 cos(π)!=cos(π/2) sin(π)!=sin(π/2) となり成立しないと思いますがどうでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A