Main Content

フーリエ級数

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

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

y=a0+i=1naicos(iwx)+bisin(iwx)

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

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

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

  1. MATLAB® コマンド ラインで curveFitter と入力して曲線フィッター アプリを開きます。または、[アプリ] タブの [数学、統計および最適化] グループで [曲線フィッター] をクリックします。

  2. 曲線フィッター アプリで、曲線データを選択します。[曲線フィッター] タブの [データ] セクションで [データの選択] をクリックします。[近似データの選択] ダイアログ ボックスで、[X データ] および [Y データ] を選択するか、インデックスに対する [Y データ] のみを選択します。

  3. [近似タイプ] セクションの矢印をクリックしてギャラリーを開き、[回帰モデル] グループの [フーリエ] をクリックします。

Fit Options pane for Fourier fit

[近似オプション] ペインで、次のオプションを指定できます。

  • 項数に、範囲 [1 8] 内の正の整数を指定します。[結果] ペインを参照し、モデル項、係数の値、適合度の統計量を確認します。

  • 必要に応じて、[詳細オプション] セクションで係数の開始値と制約範囲を指定するか、アルゴリズム設定を変更します。アプリが、データセットに基づいて [フーリエ] 近似の最適化された開始点を計算します。開始点をオーバーライドして、[近似オプション] ペインで独自の値を指定することができます。

設定の詳細については、近似オプションと最適化された開始点の指定を参照してください。ライブラリのフーリエ近似をカスタム式と比較する例については、ENSO データのカスタム非線形解析を参照してください。

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

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

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

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

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

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

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

load enso;
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×18

   10.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×18

   10.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)
hold on
plot(f2, 'b')
hold off
legend( '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 のオプションを参照してください。

参考

アプリ

関数

関連するトピック