ステップ関数のフーリエ級数を試してみる(C言語)
ステップ関数のフーリエ級数を試してみる。
ステップ関数
ステップ関数のフーリエ級数
計算結果
級数の項数を変えて図示する
級数の項数が10000の場合(計算時間20秒)
ソース(ステップ関数のフーリエ級数)
/* フーリエ級数(ステップ関数) */ #include <math.h> #include <stdlib.h> #include <fstream> #include <sstream> #include <iostream> #include <string> #include <stdio.h> using namespace std; double PI = acos(-1.0); double e = 2.7182818284590452354; double a = 1.0; double L = 1.0; double l = 0.5; double x_max =4.0; int main (void){ for(int m_max = 2; m_max<=32; m_max *= 2){ // 級数の項数を指定 ostringstream fname1; fname1 << "step-" << m_max << ".data"; //出力ファイル名 string fname1_s = fname1.str(); ofstream fout; fout.open(fname1_s.c_str()); for(double x=0.0; x<=x_max ; x+=0.001){ //実空間の刻み幅 double sum =0.0; for(int m=1 ; m<=m_max ; m++ ){ sum += ( sin(PI*double(m)*l/L) * cos(PI*double(m)*(2.0*x-l)/L) )/double(m) ; } double f = a * 0.5 - 2.0 *a * sum /PI; fout << x << " " << f << endl; } cout << m_max << endl; } return 0; }