文档介绍:'=================================================================================================
'三次样条做图模块X,Y,要做图的图片框
Public Sub OperateData(ByRef DataX() As Single, ByRef DataY() As Single, ByVal ePic As PictureBox) '数字组从0开始n结束
Dim N As Long '数组最高维数
Dim dh() As Single, dn() As Single, du() As Single, dd() As Single '样条方程组参数数组
Dim Fa() As Single, fr() As Single, Fb() As Single '分解A=LU
Dim TempY() As Single, TempX() As Single '分部解方程组
Dim J As Long, i As Long '计算变量
Dim X As Single, Y As Single '绘制曲线用坐标
N = UBound(DataX)
ReDim dh(0 To N), dn(0 To N), du(0 To N), dd(0 To N)
'对dh()数组的赋值
For J = 1 To N Step 1
DoEvents
dh(J) = DataX(J) - DataX(J - 1)
Next J
'对dn()数组赋值
For J = 1 To N - 1 Step 1
DoEvents
dn(J) = dh(J + 1) / (dh(J) + dh(J + 1))
Next J
'对du()数组赋值
For J = 1 To N - 1 Step 1
DoEvents
du(J) = 1 - dn(J)
Next J
'对dd()数组赋值
For J = 1 To N - 1 Step 1
DoEvents
dd(J) = 6 * (((DataY(J + 1) - DataY(J)) / dh(J + 1)) - ((DataY(J) - DataY(J - 1)) / dh(J))) / (dh(J) + dh(J + 1))
Next J
'设定为自然样条*************************
dd(0) = 0
dd(N) = 0
'***************************************
'追赶法解方程组
'分解方程组
ReDim Fa(0 To N), fr(0 To N), Fb(0 To N)
Fa(0) = 2: Fb(0) = dn(0) / 2
For i = 1 To N Step 1
DoEvents
fr(i) = du(i)
Fa(i) = 2 - fr(i) * Fb(i - 1)
DoEvents
If i < N Then Fb(i) = dn(i) / Fa(i)
Next i
'解方程组Ly=f