首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

数组的实例化解决思路

2012-01-13 
数组的实例化PublicSubIapcir(ByValX()AsDouble,_ByValY()AsDouble,_ByValnAsInteger,_ByRefa()AsDouble,_

数组的实例化
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

热点排行