スライド 1

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の個数
が少ないほど誤差が増大してしまう。