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; fprintf(fp, "%lf %lf\n", x,y); } } fclose(fp); return 0; } • アクティビティ図 <<file>> <<executable>> h.dat a.dat 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 :波形データファイル <<file>> <<executable>> f.png gnuplot :可視化プログラム :表計算用可視化ファイ ル サンプル点数 グラフ作成者 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の個数 が少ないほど誤差が増大してしまう。
© Copyright 2024 ExpyDoc