数组的实例化
Public Sub Iapcir(ByVal X() As Double, _
ByVal Y() As Double, _
ByVal n As Integer, _
ByRef a() As Double, _
ByVal m As Integer, _
ByRef rdblAverageX As Double, _
ByRef dt() As Double)
Dim I As Integer, J As Integer, K As Integer
Dim Z As Double, P As Double, C As Double, G As Double, Q As Double, D1 As Double, D2 As Double
Dim S(19) As Double, T(19) As Double, B(19) As Double
For I = 0 To m - 1
a(I) = 0 '问题, "其他信息: 未将对象引用设置到对象的实例 " Next I
If m > n Then m = n
If m > 20 Then m = 20
Z = 0.0#
For I = 0 To n - 1
rdblAverageX = rdblAverageX + X(I)
Z = Z + X(I) / (1.0# * n)
Next I
rdblAverageX = rdblAverageX / n
B(0) = 1.0
D1 = 1.0 * n
P = 0.0
C = 0.0
For I = 0 To n - 1
P = P + (X(I) - Z)
C = C + Y(I)
Next I
C = C / D1
P = P / D1
a(0) = C * B(0)
If m > 1 Then
T(1) = 1.0#
T(0) = (-1) * P
D2 = 0.0#
C = 0.0#
G = 0.0#
For I = 0 To n - 1
Q = X(I) - Z - P
D2 = D2 + Q * Q
C = C + Y(I) * Q
G = G + (X(I) - Z) * Q * Q
Next I
C = C / D2
P = G / D2
Q = D2 / D1
D1 = D2
a(1) = C * T(1)
a(0) = C * T(0) + a(0)
End If
For J = 2 To m - 1
S(J) = T(J - 1)
S(J - 1) = (-1) * P * T(J - 1) + T(J - 2)
If J > = 3 Then
For K = J - 2 To 1 Step -1
S(K) = (-1) * P * T(K) + T(K - 1) - Q * B(K)
Next K
End If
S(0) = (-1) * P * T(0) - Q * B(0)
D2 = 0.0#
C = 0.0#
G = 0.0#
For I = 0 To n - 1
Q = S(J)
For K = J - 1 To 0 Step -1
Q = Q * (X(I) - Z) + S(K)
Next K
D2 = D2 + Q * Q
C = C + Y(I) * Q
G = G + (X(I) - Z) * Q * Q
Next I
C = C / D2
P = G / D2
Q = D2 / D1
D1 = D2
a(J) = C * S(J)
T(J) = S(J)
For K = J - 1 To 0 Step -1
a(K) = C * S(K) + a(K)
B(K) = T(K)
T(K) = S(K)
Next K
Next J
dt(0) = 0.0#
dt(1) = 0.0#
dt(2) = 0.0#
For I = 0 To n - 1
Q = a(m - 1)
For K = m - 2 To 0 Step -1
Q = a(K) + Q * (X(I) - Z)
Next K
P = Q - Y(I)
If Abs(P) > dt(2) Then
dt(2) = Abs(P)
End If
dt(0) = dt(0) + P * P
dt(1) = dt(1) + Abs(P)
Next I
End Sub
End Module
此程序在VB6.0中正常运行,但在vb.net中就 "提示其他信息: 未将对象引用设置到对象的实例 " 要如何改呢? 拜托各位高手了!!
[解决办法]
Public Sub Iapcir(ByRef X() As Double, ByRef Y() As Double, ByVal n As Short, ByRef a() As Double, ByVal m As Short, ByRef rdblAverageX As Double, ByRef dt() As Double)
Dim J, I, K As Short
Dim D1, G, P, Z, C, Q, D2 As Double
Dim S(19) As Double
Dim T(19) As Double
Dim B(19) As Double
For I = 0 To m - 1
a(I) = 0
Next I
If m > n Then m = n
If m > 20 Then m = 20
Z = 0.0#
For I = 0 To n - 1
rdblAverageX = rdblAverageX + X(I)
Z = Z + X(I) / (1.0# * n)
Next I
rdblAverageX = rdblAverageX / n
B(0) = 1.0#
D1 = 1.0# * n
P = 0.0#
C = 0.0#
For I = 0 To n - 1
P = P + (X(I) - Z)
C = C + Y(I)
Next I
C = C / D1
P = P / D1
a(0) = C * B(0)
If m > 1 Then
T(1) = 1.0#
T(0) = (-1) * P
D2 = 0.0#
C = 0.0#
G = 0.0#
For I = 0 To n - 1
Q = X(I) - Z - P
D2 = D2 + Q * Q
C = C + Y(I) * Q
G = G + (X(I) - Z) * Q * Q
Next I
C = C / D2
P = G / D2
Q = D2 / D1
D1 = D2
a(1) = C * T(1)
a(0) = C * T(0) + a(0)
End If
For J = 2 To m - 1
S(J) = T(J - 1)
S(J - 1) = (-1) * P * T(J - 1) + T(J - 2)
If J > = 3 Then
For K = J - 2 To 1 Step -1
S(K) = (-1) * P * T(K) + T(K - 1) - Q * B(K)
Next K
End If
S(0) = (-1) * P * T(0) - Q * B(0)
D2 = 0.0#
C = 0.0#
G = 0.0#
For I = 0 To n - 1
Q = S(J)
For K = J - 1 To 0 Step -1
Q = Q * (X(I) - Z) + S(K)
Next K
D2 = D2 + Q * Q
C = C + Y(I) * Q
G = G + (X(I) - Z) * Q * Q
Next I
C = C / D2
P = G / D2
Q = D2 / D1
D1 = D2
a(J) = C * S(J)
T(J) = S(J)
For K = J - 1 To 0 Step -1
a(K) = C * S(K) + a(K)
B(K) = T(K)
T(K) = S(K)
Next K
Next J
dt(0) = 0.0#
dt(1) = 0.0#
dt(2) = 0.0#
For I = 0 To n - 1
Q = a(m - 1)
For K = m - 2 To 0 Step -1
Q = a(K) + Q * (X(I) - Z)
Next K
P = Q - Y(I)
If System.Math.Abs(P) > dt(2) Then
dt(2) = System.Math.Abs(P)
End If
dt(0) = dt(0) + P * P
dt(1) = dt(1) + System.Math.Abs(P)
Next I
End Sub