我在使用net..dias(days)和taxas(rate)是我的电子表格的两个数组中找到样条函数时遇到了一些问题,而T是我想知道相应速率的天数。当我使用这个函数设置函数内的数组时,它工作得很好......但是使用电子表格数组VBA让我难过,因为它不能找到项目或库..有人可以帮助我吗?由于为什么我的样条函数不起作用?
Function NDF6(T, dias, taxas)
Dim x As Variant
x = T
Dim xin() As Variant
Dim yin() As Variant
Dim input_count As Integer
Dim output_count As Integer
input_count = dias.Count
output_count = taxas.Count
ReDim xin(input_count)
ReDim yin(output_count)
Dim c As Integer
For c = 1 To input_count
xin(c) = dias(c)
yin(c) = taxas(c)
Next c
'values are populated
Dim n As Integer 'n=input_count
Dim i, k As Integer 'these are loop counting integers
Dim p, qn, sig, un As Variant
Dim u() As Variant
ReDim u(input_count - 1) As Variant
Dim yt() As Variant 'these are the 2nd deriv values
ReDim yt(output_count - 1) As Variant
Dim y As Double
n = input_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
'now eval spline at one point
Dim klo, khi As Integer
Dim h, b, a As Single
' first find correct interval
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
y = a * yin(klo) + b * yin(khi) + ((a^3 - a) * yt(klo) + (b^3 - b) * yt(khi)) * (h^2)/_ 6
NDF6 = y
End Function
确保'input_count = output_count'为'x()'和'y()'需要具有相同的尺寸。 – ja72 2014-09-22 23:11:32
最好先在* SUB *中尝试你的函数,然后逐步检查是什么导致了错误。这样你可以找出问题。你甚至可以在这个过程中自己解决它。 – L42 2014-09-23 00:06:33