質問編集履歴
1
変数の説明を追記しました。また、コメント文に付した①~⑤の行が穴埋めになっている形式なので、それ以外の行に間違いはありません。宜しくお願い致します。
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
#include <stdio.h>
|
|
14
14
|
#include <math.h>
|
|
15
15
|
#define M_PI 3.14159265
|
|
16
|
-
#define MM 300
|
|
16
|
+
#define MM 300 //フーリエ級数展開の打ち切り次数
|
|
17
|
-
#define Tp 1.0
|
|
17
|
+
#define Tp 1.0 //周期波形の周期
|
|
18
18
|
|
|
19
|
-
double aa[MM+1], bb[MM+1] ;
|
|
19
|
+
double aa[MM+1], bb[MM+1] ; //フーリエ展開係数
|
|
20
|
-
int NN = 3 * MM ;
|
|
20
|
+
int NN = 3 * MM ; //数値積分の分割数
|
|
21
21
|
|
|
22
22
|
double ft(double t)
|
|
23
23
|
{
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
if( fabs( t+Tp/2.0 ) < zero || fabs( t-Tp/2.0) < zero ) return 0.5 ;
|
|
30
|
-
else return 0.5 - t/Tp;
|
|
30
|
+
else return 0.5 - t/Tp; //ここは間違っている可能性あり①
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
return 0.5 + 0.5 * cos((2.0 * M_PI * t) / Tp);
|
|
33
|
+
return 0.5 + 0.5 * cos((2.0 * M_PI * t) / Tp); //ここは間違っている可能性あり②
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
double ak_dt(int k, double t)
|
|
@@ -39,11 +39,11 @@
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
double fcoeff_ak( int k )
|
|
42
|
-
{
|
|
42
|
+
{ /* 関数f(t)のフーリエ展開級数 a_kを数値積分で求める */
|
|
43
43
|
double t, i, ak = 0.0, dt = Tp/(double)NN ;
|
|
44
44
|
for( i = 0 ; i < NN ; i ++ ) {
|
|
45
45
|
t = -Tp/2.0 + (double)i * dt ;
|
|
46
|
-
ak = ak + sin(t) / t ; // ここがよくわかっていません。
|
|
46
|
+
ak = ak + sin(t) / t ; // ここがよくわかっていません。③
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
return ak ;
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
double t, i, bk = 0.0, dt = Tp/(double)NN ;
|
|
60
60
|
for( i = 0 ; i < NN ; i ++ ) {
|
|
61
61
|
t = -Tp/2.0 + (double)i * dt ;
|
|
62
|
-
bk = bk + sin(t) / t ; // 同様にここがわかりません。
|
|
62
|
+
bk = bk + sin(t) / t ; // 同様にここがわかりません。④
|
|
63
63
|
}
|
|
64
64
|
return bk ;
|
|
65
65
|
}
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
double fxfreq( double *aa, double *bb, int M, double t)
|
|
68
68
|
{
|
|
69
69
|
int k ; double ff = 0.0 ;
|
|
70
|
-
for ( k = 0 ; k <= MM ; k++ ) ff = *aa*cos(((double)k * 2.0 * M_PI * t)/ Tp ) + *bb*sin(((double)k * 2.0 * M_PI * t)/Tp ) ;//ここは合っているのかどうかわかりません。
|
|
70
|
+
for ( k = 0 ; k <= MM ; k++ ) ff = *aa*cos(((double)k * 2.0 * M_PI * t)/ Tp ) + *bb*sin(((double)k * 2.0 * M_PI * t)/Tp ) ;//ここは合っているのかどうかわかりません。⑤
|
|
71
71
|
return ff;
|
|
72
72
|
}
|
|
73
73
|
|