Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

푸리에 급수

푸리에 급수 모델 소개

푸리에 급수는 주기 신호를 나타내는 사인 함수와 코사인 함수의 합입니다. 푸리에 급수는 삼각 함수 형식 또는 지수 함수 형식으로 표현됩니다. 이 툴박스는 다음과 같은 형식의 삼각 푸리에 급수를 제공합니다.

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

여기서 a0은 데이터의 상수(절편) 항을 모델링하고 i = 0 코사인 항과 연관이 있으며, w는 신호의 기본주파수이고, n은 급수에 있는 항(고조파)의 개수이고, 1 ≤ n ≤ 8입니다.

푸리에 급수에 대한 자세한 내용은 푸리에 해석과 필터링 항목을 참조하십시오.

대화형 방식으로 푸리에 모델 피팅하기

  1. cftool을 입력하여 곡선 피팅 앱을 엽니다. 또는 앱 탭에서 곡선 피팅을 클릭합니다.

  2. 곡선 피팅 앱에서 곡선 데이터(X 데이터Y 데이터 또는 인덱스에 대한 Y 데이터만)를 선택합니다.

    곡선 피팅 앱은 디폴트 곡선 피팅인 다항식을 만듭니다.

  3. 모델 유형을 다항식에서 푸리에로 변경합니다.

다음 옵션을 지정할 수 있습니다.

  • 항의 개수를 선택합니다(1부터 8까지).

    결과 창에서 모델 항, 계수의 값, 적합도 통계량을 확인할 수 있습니다.

  • (선택 사항) 피팅 옵션을 클릭하여 계수 시작값과 제약 조건 경계를 지정하거나 알고리즘 설정을 변경합니다.

    이 툴박스는 현재 데이터 세트에 따라 푸리에 급수 모델을 위한 최적화된 시작점을 계산합니다. 피팅 옵션 대화 상자에서 사용자가 직접 값을 지정하여 시작점을 재정의할 수 있습니다.

    설정에 대한 자세한 내용은 피팅 옵션 및 최적화된 시작점 지정하기 항목을 참조하십시오.

라이브러리에 있는 푸리에 피팅과 사용자 지정 수식을 비교하는 예제는 Custom Nonlinear ENSO Data Analysis 항목을 참조하십시오.

fit 함수를 사용하여 푸리에 모델 피팅하기

이 예제에서는 fit 함수를 사용하여 푸리에 모델을 데이터에 피팅하는 방법을 보여줍니다.

푸리에 라이브러리 모델은 fit 함수와 fittype 함수의 입력 인수입니다. 모델 유형을 fourier로 지정하고, 항의 개수(예: 'fourier1'부터 'fourier8'까지)를 지정합니다.

이 예제에서는 ENSO(El Nino-Southern Oscillation) 데이터를 피팅합니다. 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.

a2b2에 대한 신뢰한계는 영점을 교차합니다. 일차항의 경우, 해당 계수가 0과 다르다는 사실을 확신할 수 없으므로 피팅에 도움이 되지 않습니다. 이것은 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은 연간 주기가 가장 강함을 나타냅니다.

  • 마찬가지로, a1 항과 b1 항은 7/1이 되므로 7년 주기를 나타냅니다.

  • a2 항과 b2 항은 3.5년 주기입니다(7/2). a2 계수와 b2 계수는 a1과 b1보다 크기가 크므로 이것은 7년 주기보다 강합니다.

  • a3b3은 7/3(2.3년) 주기를 나타내는 상당히 강한 항입니다.

  • a6, b6, a5, b5와 같이 비교적 크기가 작은 항은 피팅에서 덜 중요합니다.

일반적으로, 엘니뇨 온난화는 2~7년의 불규칙한 간격으로 발생하며 9개월에서 2년 동안 지속됩니다. 평균 주기 길이는 5년입니다. 모델 결과는 이러한 주기 중 일부를 반영합니다.

시작점 설정하기

이 툴박스는 현재 데이터 세트에 따라 푸리에 피팅을 위한 최적화된 시작점을 계산합니다. 푸리에 급수 모델은 특히 시작점에 민감하며, 최적화된 값은 관련 방정식에서 몇 개 항에 대해서만 정확할 수 있습니다. 사용자가 직접 값을 지정하여 시작점을 재정의할 수 있습니다.

항과 플롯을 검토해 보니 4년 주기가 존재한다고 볼 수 있을 것 같습니다. w를 설정하여 확인해 봅니다. 8년을 96개월로 계산하여 w의 값을 얻습니다.

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);

두 피팅을 모두 플로팅하여 f3에서 w의 새 값이 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에 대한 옵션을 참조하십시오.

참고 항목

| |

관련 항목