최근에 나는 "해상도"가 너무 작기 때문에 내가 가지고있는 데이터 세트에 문제가 생겼다. 모든 숫자는 기본적으로 "X 축"의 "1 by 1 unit"인 "resolution"내에있는 더 높은 숫자로 정규화되므로 데이터 세트는 최대 (0)로 최대화됩니다. 기둥. Y 값은 항상 포물선과 비슷합니다.vba 엑셀 역 입방 스플라인 보간
Y X
-34,32 -93
-16,56 -92
-10,04 -91
-6,03 -90
-3,34 -89
-1,56 -88
-0,47 -87
0 -86
-0,10 -85
-0,78 -84
-2,11 -83
-4,20 -82
-7,36 -81
-12,31 -80
-22,03 -79
-25,17 -78
이제 0은 0과 -0,10 사이 또는 0과 -0,47 사이 여야합니다. 선형 보간은 너무 많은 오차를 줄 수 있으므로 큐빅 스플라인을 사용합니다. 내가해야 할 일은
내 Y는 정말 내가하려고 모든 함수는 지정된 X에서 Y를 계산하기 때문에 내가 인터넷에서 발견 한 것은 사용하지 수 = 0
너무 나쁜 곳 X 매개 변수를 계산하는 것입니다 (코드 예제 아래). 누구든지 도와 줄 수 있습니까?
Function SpLine(PeriodCol As Range, RateCol As Range, x As Range)
Dim Period_Count As Integer
Dim Rate_Count As Integer
Dim c As Integer
Dim n As Integer
Dim i, k As Integer
Dim p, qn, sig, un As Single
Dim klo, khi As Integer
Dim h, b, a As Single
' shows the calculation of a cubic spline interpolated value given known values for fixed periods
Period_Count = PeriodCol.Rows.Count
Rate_Count = RateCol.Rows.Count
If Period_Count <> Rate_Count Then
SpLine = "Error: Range count dos not match"
GoTo endnow
End If
ReDim xin(Period_Count) As Single
ReDim yin(Period_Count) As Single
For c = 1 To Period_Count
xin(c) = PeriodCol(c)
yin(c) = RateCol(c)
Next c
ReDim u(Period_Count - 1) As Single
ReDim yt(Period_Count) As Single
n = Period_Count
yt(1) = 0
u(1) = 0
For i = 2 To n - 1
sig = (xin(i) - xin(i - 1))/(xin(i + 1) - xin(i - 1))
p = sig * yt(i - 1) + 2
yt(i) = (sig - 1)/p
u(i) = (yin(i + 1) - yin(i))/(xin(i + 1) - xin(i)) - (yin(i) - yin(i - 1))/(xin(i) - xin(i - 1))
u(i) = (6 * u(i)/(xin(i + 1) - xin(i - 1)) - sig * u(i - 1))/p
Next i
qn = 0
un = 0
yt(n) = (un - qn * u(n - 1))/(qn * yt(n - 1) + 1)
For k = n - 1 To 1 Step -1
yt(k) = yt(k) * yt(k + 1) + u(k)
Next k
klo = 1
khi = n
Do
k = khi - klo
If xin(k) > x Then
khi = k
Else
klo = k
End If
k = khi - klo
Loop While k > 1
h = xin(khi) - xin(klo)
a = (xin(khi) - x)/h
b = (x - xin(klo))/h
SpLine = a * yin(klo) + b * yin(khi) + ((a^3 - a) * yt(klo) + (b^3 - b) * yt(khi)) * (h^2)/6
endnow:
End Function