フーリエ級数展開 ~矩形波について~ 10024112 長江 栞 10024116 中島 涼 10024122 中村 勇樹 10024112 長江 栞 10024116 中島 涼 10024122 中村 勇樹 10024133 畑中 祥平
概要 ・電圧V、周期Tであらわせる交流波を sin (x),cos(x)であらわすことができる。 ・それをいろいろな波形(短形波、三角波等) にフーリエ級数展開を使うことによって グラフ化が可能になる。 ・今回は矩形波について考察する。
矩形波(0<=2π) #include <stdio.h> #include <math.h> int main(void){ int i; double x, y=0; FILE *fp; fp = fopen("h.dat", "w"); for (x=0; x<2*M_PI; x+=0.001) { if(x<=M_PI) { y=1; fprintf(fp, "%lf %lf\n", x,y); } else y=-1; fclose(fp); return 0;
アクティビティ図 <<file>> h.dat a.dat :波形データファイル <<executable>> gnuplot :可視化プログラム <<file>> hh.png :表計算用可視化ファイル サンプル点数 グラフ作成者
フーリエ級数展開によって求めた矩形波 #include <stdio.h> #include <math.h> #define N 1000 /* この値を変更 */ double term(int n, double x){ return sin((2*n-1)*x)/(2*n-1); } int main(void){ int i; double x, y=0; FILE *fp; fp = fopen("c.dat", "w"); for (x=0; x<2*M_PI; x+=0.001) { for (i=1; i<=N; i++) { y+=term(i,x); fprintf(fp, "%lf %lf\n", x, 4/M_PI*y); y=0; fclose(fp); return 0;
アクティビティ図 <<file>> a.dat c.dat d.dat f.dat :波形データファイル <<executable>> gnuplot :可視化プログラム <<file>> f.png :表計算用可視化ファイル サンプル点数 グラフ作成者
Pad図もしくは流れ図 #include <stdio.h> #include <math.h> #define N 1000 関数プロトタイプ宣言 Int I; double x,y=0; ファイルポインタ ファイル“c.dat”を書き取りように開く X=0;x<=2*M_PI;;x+=0.001; i=0;i<=1000;i++; y+=term(I,x); fprintf(fp, "%lf %lf\n", x, 4/M_PI*y); y=0; ファイルを閉じる return 0;
データ構造と簡単なファイル形式 #include <stdio.h> #include <math.h> /*M_PIを使う*/ #define N 1000 /* この値を変更 */ double term(int n, double x){ /*関数プロトタイプ宣言*/ return sin((2*n-1)*x)/(2*n-1); /*矩形波のフーリエ級数展開した式を返す*/ } int main(void){ int i; double x, y=0; FILE *fp; /*ファイルポインタ*/ fp = fopen("c.dat", "w"); for (x=0; x<2*M_PI; x+=0.001) { /*より精密にするためxの値を小さくする*/ for (i=1; i<=N; i++) { /*xが2πになるまで+Nが1000になるまで繰り返し*/ y+=term(i,x); /*関数呼び出し式*/ fprintf(fp, “%lf %lf\n”, x, 4/M_PI*y); /*ファイルにそれぞれ書き込む*/ y=0; fclose(fp); /*ファイルを閉じる*/ return 0; 値の意味 データ形式 電圧値の個数(N) テキスト(整数) 改行 テキスト 電圧値V(y)(N=0.001) テキスト(実数) ・ ・ 電圧値V(y)(N=2π) EOF
結果・考察 フーリエ級数展開を使うことによって矩形波に近いグラフを描くことができた。(前の図を参照)より精密(Nの個数を無限増大)にしていけば矩形波に収束する。(今回はN=10,N=100N=1000の場合) また周期Tと振幅A(Vの電圧値)は電気回路で言う交流電圧に等しくなり、交流電圧を可視化するのに最適である。また今回は先にフーリエ級数展開の式を求めて、その式をプログラムしたもので実際に式まで求めるプログラムを作ることができればより多くの周期関数を求めることができる。
まとめ フーリエ級数展開はいろいろな周期関数(電圧、電流、周波数etc)に用いることができ可視化するのに最適。 工学的知識としてすべての周期関数のグラフはsin(x),cos(x)によってそれに近いグラフを限りなく描くことができる。 ただしnの個数によって値の誤差が生じ、nの個数が少ないほど誤差が増大してしまう。