16,717
社区成员
发帖
与我相关
我的任务
分享
Dim i As Integer = 0
Dim j As Integer = 0
Sub DXHG(ByVal M, ByVal N, ByVal X, ByVal Y, ByVal A, ByVal Q, ByVal S, ByVal R, ByVal V, ByVal U, ByVal B)
REAL(KIND=8),DIMENSION(M,N)::X
REAL(KIND=8),DIMENSION(N)::Y
REAL(KIND=8),DIMENSION(M+1)::A
REAL(KIND=8),DIMENSION(M+1,M+1)::B
REAL(KIND=8),DIMENSION(M)::V
REAL(KIND=8) Q,S,R,U,YY,DYY,P,PP
MM = M + 1
B(1, 1) = N
For j = 2 To MM
B(1, J) = 0
For i = 1 To N
B(1, J) = B(1, J) + X(J - 1, i)
Next
B(J, 1) = B(1, J)
Next
For i = 2 To MM
For J = i To MM
B(i, J) = 0
For K = 1 To N
B(i, J) = B(i, J) + X(i - 1, K) * X(J - 1, K)
Next
B(J, i) = B(i, J)
Next
Next
A(1) = 0
For i = 1 To N
A(1) = A(1) + Y(i)
Next
For i = 2 To MM
A(i) = 0
For J = 1 To N
A(i) = A(i) + X(i - 1, J) * Y(J)
Next
Next
Call CHOLESKY(B, MM, 1, A, L)
YY = 0
For i = 1 To N
YY = YY + Y(i)
Next
YY = YY / N
Q = 0
DYY = 0
U = 0
For i = 1 To N
P = A(1)
For J = 1 To M
P = P + A(J + 1) * X(J, i)
Next
Q = Q + (Y(i) - P) * (Y(i) - P)
DYY = DYY + (Y(i) - YY) * (Y(i) - YY)
U = U + (YY - P) * (YY - P)
Next
S = SQRT(Q / N)
R = SQRT(1 - Q / DYY)
For J = 1 To M
P = 0
For i = 1 To N
PP = A(1)
For K = 1 To M
If K <> j Then
PP = PP + A(K + 1) * X(K, i)
End If
Next
P = P + (Y(i) - PP) * (Y(i) - PP)
Next
V(j) = SQRT(1 - Q / P)
Next
End Sub
Sub CHOLESKY(ByVal C, ByVal N, ByVal M, ByVal D, ByVal L)
REAL(KIND=8),DIMENSION(N,N)::C
REAL(KIND=8),DIMENSION(N,M)::D
L = 1
If ABS(C(1, 1)) < 0.0000000001 Then
L = 0
MsgBox(" FAIL")
Return
End If
C(1, 1) = SQRT(C(1, 1))
For J = 2 To N
C(1, J) = C(1, J) / C(1, 1)
Next
For i = 2 To N
For J = 2 To i
C(i, i) = C(i, i) - C(J - 1, i) * C(J - 1, i)
Next
If ABS(C(i, i)) < 0.0000000001 Then
L = 0
MsgBox(" FAIL")
Return
End If
C(i, i) = SQRT(C(i, i))
If i <> N Then
For j = i + 1 To N
For K = 2 To i
C(i, j) = C(i, j) - C(K - 1, i) * C(K - 1, j)
Next
C(i, j) = C(i, j) / C(i, i)
Next
End If
Next
For J = 1 To M
D(1, J) = D(1, J) / C(1, 1)
For i = 2 To N
For K = 2 To i
D(i, J) = D(i, J) - C(K - 1, i) * D(K - 1, J)
Next
D(i, J) = D(i, J) / C(i, i)
Next
Next
For J = 1 To M
D(N, J) = D(N, J) / C(N, N)
For K = N To 2 Step -1
For i = K To N
D(K - 1, J) = D(K - 1, J) - C(K - 1, i) * D(i, J)
Next
D(K - 1, J) = D(K - 1, J) / C(K - 1, K - 1)
Next
Next
End Sub
Dim i As Integer = 0
Dim j As Integer = 0
Sub DXHG(ByVal M, ByVal N, ByVal X, ByVal Y, ByVal A, ByVal Q, ByVal S, ByVal R, ByVal V, ByVal U, ByVal B)
REAL(KIND=8),DIMENSION(M,N)::X
REAL(KIND=8),DIMENSION(N)::Y
REAL(KIND=8),DIMENSION(M+1)::A
REAL(KIND=8),DIMENSION(M+1,M+1)::B
REAL(KIND=8),DIMENSION(M)::V
REAL(KIND=8) Q,S,R,U,YY,DYY,P,PP
MM = M + 1
B(1, 1) = N
For j = 2 To MM
B(1, J) = 0
For i = 1 To N
B(1, J) = B(1, J) + X(J - 1, i)
Next
B(J, 1) = B(1, J)
Next
For i = 2 To MM
For J = i To MM
B(i, J) = 0
For K = 1 To N
B(i, J) = B(i, J) + X(i - 1, K) * X(J - 1, K)
Next
B(J, i) = B(i, J)
Next
Next
A(1) = 0
For i = 1 To N
A(1) = A(1) + Y(i)
Next
For i = 2 To MM
A(i) = 0
For J = 1 To N
A(i) = A(i) + X(i - 1, J) * Y(J)
Next
Next
Call CHOLESKY(B, MM, 1, A, L)
YY = 0
For i = 1 To N
YY = YY + Y(i)
Next
YY = YY / N
Q = 0
DYY = 0
U = 0
For i = 1 To N
P = A(1)
For J = 1 To M
P = P + A(J + 1) * X(J, i)
Next
Q = Q + (Y(i) - P) * (Y(i) - P)
DYY = DYY + (Y(i) - YY) * (Y(i) - YY)
U = U + (YY - P) * (YY - P)
Next
S = SQRT(Q / N)
R = SQRT(1 - Q / DYY)
For J = 1 To M
P = 0
For i = 1 To N
PP = A(1)
For K = 1 To M
If K / j Then
PP = PP + A(K + 1) * X(K, i)
End If
Next
P = P + (Y(i) - PP) * (Y(i) - PP)
Next
V(j) = SQRT(1 - Q / P)
Next
End Sub
Sub CHOLESKY(ByVal C, ByVal N, ByVal M, ByVal D, ByVal L)
'REAL(KIND=8),DIMENSION(N,N)::C
'REAL(KIND=8),DIMENSION(N,M)::D
L = 1
If ABS(C(1, 1)) < 0.0000000001 Then
L = 0
MsgBox(" FAIL")
Return
End If
C(1, 1) = SQRT(C(1, 1))
For J = 2 To N
C(1, J) = C(1, J) / C(1, 1)
Next
For i = 2 To N
For J = 2 To i
C(i, i) = C(i, i) - C(J - 1, i) * C(J - 1, i)
Next
If ABS(C(i, i)) < 0.0000000001 Then
L = 0
MsgBox(" FAIL")
Return
End If
C(i, i) = SQRT(C(i, i))
If i / N Then
For j = i + 1 To N
For K = 2 To i
C(i, j) = C(i, j) - C(K - 1, i) * C(K - 1, j)
Next
C(i, j) = C(i, j) / C(i, i)
Next
End If
Next
For J = 1 To M
D(1, J) = D(1, J) / C(1, 1)
For i = 2 To N
For K = 2 To i
D(i, J) = D(i, J) - C(K - 1, i) * D(K - 1, J)
Next
D(i, J) = D(i, J) / C(i, i)
Next
Next
For J = 1 To M
D(N, J) = D(N, J) / C(N, N)
For K = N To 2 Step -1
For i = K To N
D(K - 1, J) = D(K - 1, J) - C(K - 1, i) * D(i, J)
Next
D(K - 1, J) = D(K - 1, J) / C(K - 1, K - 1)
Next
Next
End Sub