Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

フーリエ級数

フーリエ級数モデルについて

フーリエ級数は正弦関数と余弦関数の和であり、周期的信号を記述します。これは三角関数、指数関数のいずれかの形式で表現されます。このツールボックスでは、次のような三角関数によるフーリエ級数が用意されています

y = a 0 + i = 1 n a i cos ( i w x ) + b i sin ( i w x )

ここで、a0はデータの定数 (切片) 項をモデル化したもので i = 0 の余弦項に関連しており、w は信号の基本周波数、n は級数の項 (高調波) の数で、1 ≤ n ≤ 8 です。

フーリエ級数の詳細については、フーリエ解析とフィルター処理を参照してください。

フーリエ モデルによる対話的な近似

  1. cftoolと入力し、曲線近似アプリを開きます。または、[アプリ] タブの [曲線近似] をクリックします。

  2. 曲線近似アプリで、曲線データ ([X データ][Y データ]またはインデックスに対する[Y データ]のみ) を選択します。

    既定の[多項式]による曲線近似が作成されます。

  3. モデルタイプを[多項式]から[フーリエ]に変更します。

次のオプションが指定できます。

  • 項数 (1から8) を選択します。

    [結果]ペインを参照し、モデル項、係数の値、適合度の統計量を確認します。

  • (オプション)[近似オプション]をクリックし、係数の開始値と制約範囲を指定するか、アルゴリズム設定を変更します。

    現在のデータセットに基づいてフーリエ級数モデルの最適化された開始点が計算されます。開始点をオーバーライドし、[近似オプション] ダイアログ ボックスで独自の値を指定できます。

    設定の詳細については、近似オプションと最適化された開始点の指定を参照してください。

ライブラリのフーリエ近似をカスタム式と比較する例については、ENSO データのカスタム非線形解析を参照してください。

関数 fit によるフーリエ モデル近似

この例では、関数fitを使用してフーリエ モデルによりデータを近似する方法を示します。

フーリエ ライブラリ モデルは、関数fitおよびfittypeの入力引数です。モデル タイプをfourierの末尾に項数を付けて ('fourier1''fourier8') 指定します。

この例では、エルニーニョ南方振動 (ENSO) のデータに当てはめます。ENSO データは、イースター島とオーストラリアのダーウィン間における大気圧の差の月平均で構成されています。この差により南半球の貿易風が発生します。

ENSO データは明らかに周期的であり、フーリエ級数で記述できることを示唆しています。フーリエ級数モデルを使用して周期性を調べます。

2 項フーリエ モデルによる近似

データを読み込み、2 項フーリエ モデルで近似します。

loadenso; f = fit(month,pressure,'fourier2')
f = General model Fourier2: f(x) = a0 + a1*cos(x*w) + b1*sin(x*w) + a2*cos(2*x*w) + b2*sin(2*x*w) Coefficients (with 95% confidence bounds): a0 = 10.63 (10.23, 11.03) a1 = 2.923 (2.27, 3.576) b1 = 1.059 (0.01593, 2.101) a2 = -0.5052 (-1.086, 0.07532) b2 = 0.2187 (-0.4202, 0.8576) w = 0.5258 (0.5222, 0.5294)
plot(f,month,pressure)

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent data, fitted curve.

a2およびb2の信頼限界はゼロと交差します。線形項の係数がゼロではないという確信はもてないため、これらの係数は近似に寄与していません。これは、この 2 項モデルが 1 項モデルと大差がない可能性が高いことを意味します。

周期の評価

wの項は周期の尺度になります。sin()cos()の周期は2*piであるため、2*pi/wにより月単位の周期が得られます。

w = f.w
w = 0.5258
2*pi/w
ans = 11.9497

wは、ほぼ 12 か月であり、1 年周期であることを示しています。プロット上でピークが約 12 か月間隔であり、これが正しそうであることを観察します。

8 項フーリエ モデルによる近似

f2 = fit(month,pressure,'fourier8')
f2 = General model Fourier8: f2(x) = a0 + a1*cos(x*w) + b1*sin(x*w) + a2*cos(2*x*w) + b2*sin(2*x*w) + a3*cos(3*x*w) + b3*sin(3*x*w) + a4*cos(4*x*w) + b4*sin(4*x*w) + a5*cos(5*x*w) + b5*sin(5*x*w) + a6*cos(6*x*w) + b6*sin(6*x*w) + a7*cos(7*x*w) + b7*sin(7*x*w) + a8*cos(8*x*w) + b8*sin(8*x*w) Coefficients (with 95% confidence bounds): a0 = 10.63 (10.28, 10.97) a1 = 0.5668 (0.07981, 1.054) b1 = 0.1969 (-0.2929, 0.6867) a2 = -1.203 (-1.69, -0.7161) b2 = -0.8087 (-1.311, -0.3065) a3 = 0.9321 (0.4277, 1.436) b3 = 0.7602 (0.2587, 1.262) a4 = -0.6653 (-1.152, -0.1788) b4 = -0.2038 (-0.703, 0.2954) a5 = -0.02919 (-0.5158, 0.4575) b5 = -0.3701 (-0.8594, 0.1192) a6 = -0.04856 (-0.5482, 0.4511) b6 = -0.1368 (-0.6317, 0.3581) a7 = 2.811 (2.174, 3.449) b7 = 1.334 (0.3686, 2.3) a8 = 0.07979 (-0.4329, 0.5925) b8 = -0.1076 (-0.6037, 0.3885) w = 0.07527 (0.07476, 0.07578)
plot(f2,month,pressure)

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent data, fitted curve.

周期の評価

w = f2.w
w = 0.0753
(2*pi)/w
ans = 83.4736

f2モデルを使用すると、周期wは約 7 年です。

項の検証

振幅が最大である係数を探し、最も重要な項を見つけます。

  • a7b7が最大です。モデルの方程式のa7*cos(7*x*w)a7項を見てみます。7 * w== 7/7 = 1 年サイクルです。a7b7は 1 年サイクルが最も有力であることを示しています。

  • 同様に、a1b1の項では 7/1 となり、7 年サイクルを示しています。

  • a2b2の項は 3.5 年サイクル (7/2) です。係数a2およびb2は a1 および b1 より振幅が大きいため、これは 7 年サイクルより有力であることがわかります。

  • a3およびb3はかなり有力な項であり、7/3 つまり 2.3 年サイクルを示しています。

  • a6b6a5b5などの小さい項は近似においてあまり重要ではありません。

通常、エルニーニョによる温度上昇は、2 年から 7 年の不規則な間隔で発生し 9 か月から 2 年続きます。周期の長さの平均は 5 年です。このモデルの結果は、この周期をある程度反映しています。

開始点の設定

現在のデータセットに基づいてフーリエ近似の最適化された開始点が計算されます。フーリエ級数モデルは開始点の影響を特に受けやすく、最適化された値は対応する方程式のほんのわずかな項についてしか正確ではない場合があります。開始点をオーバーライドして、独自の値を指定することができます。

項とプロットの検証により、4 年サイクルが存在するように見えます。これを確認するために、wを設定します。wの値を取得します。ここで、8 年は 96 か月です。

w = (2*pi)/96
w = 0.0654

関数coeffnamesを使用してモデル ('f2') の係数のエントリ順序を確認します。

coeffnames(f2)
ans =18x1 cell{a0的}{“a1”}{“b1”}{a2的}{b2的}{a3的}{b3的}{'a4'} {'b4'} {'a5'} {'b5'} {'a6'} {'b6'} {'a7'} {'b7'} {'a8'} {'b8'} {'w' }

現在の係数値を取得します。

coeffs = coeffvalues(f2)
coeffs =1×1810.6261 0.5668 0.1969 -1.2031 -0.8087 0.9321 0.7602 -0.6653 -0.2038 -0.0292 -0.3701 -0.0486 -0.1368 2.8112 1.3344 0.0798 -0.1076 0.0753

最後の係数wを 0.065 に設定します。

coeffs(:,18) = w
coeffs =1×1810.6261 0.5668 0.1969 -1.2031 -0.8087 0.9321 0.7602 -0.6653 -0.2038 -0.0292 -0.3701 -0.0486 -0.1368 2.8112 1.3344 0.0798 -0.1076 0.0654

wの新しい値を使用して、係数の開始点を設定します。

f3 = fit(month,pressure,'fourier8','StartPoint', coeffs);

両方の近似をプロットし、f3wに新しい値を指定してもf2よりも適した近似が生成されないことを確認します。

plot(f3,month,pressure) holdonplot(f2,'b') holdofflegend('Data','f3','f2')

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Data, f3, f2.

フーリエ近似オプションの調査

fitoptions(modelname)を使用して、使用できる近似オプションを調べます。ここで、modelnameのモデル タイプはfourierの末尾に項数を付けたもの (たとえば、'fourier1''fourier8') となります。

fitoptions('fourier8')
ans = Normalize: 'off' Exclude: [] Weights: [] Method: 'NonlinearLeastSquares' Robust: 'Off' StartPoint: [1x0 double] Lower: [1x0 double] Upper: [1x0 double] Algorithm: 'Trust-Region' DiffMinChange: 1.0000e-08 DiffMaxChange: 0.1000 Display: 'Notify' MaxFunEvals: 600 MaxIter: 400 TolFun: 1.0000e-06 TolX: 1.0000e-06

係数の開始値や制約範囲などの近似オプションをデータに合わせて変更したり、アルゴリズム設定を変更したりする場合は、fitoptionsのリファレンス ページにある NonlinearLeastSquares のオプションを参照してください。

参考

||

関連するトピック