글목록

2021년 5월 5일

Module 5. Savitzky-Golay smoothing - (3)다항식 계수로부터 fitting값 및 미분값 구하기

PolynomialFit 함수는 다항식의 계수만 주어지게 됩니다.

y=a_0 + a_1 x + a_2 x^2+ ... + a_n x^n

따라서, x값을 주게 되면, 위의 다항식을 계산하여 결과를 출력해주는 함수가 필요합니다.

만약, 위의 계수를 다 알고 있다고 하면, 미분값은 다음과 같이 주어집니다.

y'= a_1 + 2 a_2 x+ ... + n a_n x^(n-1)

2차 이상의 미분계수 역시 마찬가지로 계산이 가능합니다. 그러나, 다항식의 차수보다 높은 미분차수는 계산할 수 없습니다. 따라서, n차 다항식으로 Savitzky-Golay smoothing 계산을 수행했다면, n차 이하의 미분계수까지는 다항식의 계수로부터 쉽게 구할 수 있습니다.

'------------------------------------------
Function PFit_GetFitValueAt(iXVal, iA()) As Double
  'Fitting 결과로부터 구한 다항식의 계수와, X값을 입력하면, Fitting 결과를 계산합니다.
  Dim i As Long, tYFit As Double, tVal As Double
  tVal = 1
  tYFit = iA(1, 1)
  For i = 2 To UBound(iA, 1)
    tVal = tVal * iXVal
    tYFit = tYFit + iA(i, 1) * tVal
  Next
  PFit_GetFitValueAt = tYFit
End Function
'------------------------------------------
Function PFit_GetDiffValueAt(iXVal, iA(), Optional iOrder As Long = 1) As Double
  '다항식 계수 iA와 계산 위치 X, 미분차수를 입력하여 미분계수를 계산합니다.
  Dim i As Long, j As Long, n As Long, tA() As Double, tXVal As Double, tVal As Double
  If iOrder <= 0 Then
    PFit_GetDiffValueAt = PFit_GetFitValueAt(iXVal, iA)
  Else
    n = UBound(iA, 1)
    ReDim tA(1 To n)
    tVal = 0
    tXVal = 1
    For i = iOrder + 1 To n
      tA(i) = 1
      For j = 1 To iOrder
        tA(i) = tA(i) * (i - j)
      Next
      tVal = tVal + tA(i) * iA(i, 1) * tXVal
      tXVal = tXVal * iXVal
    Next
    PFit_GetDiffValueAt = tVal
  End If
End Function
'------------------------------------------


댓글 없음:

댓글 쓰기

의견이나 질문이 있으신 분은 언제든지 댓글을 달아주세요~

많이 본 글 :