📄 sparse.txt
字号:
Sub SPARSE(B(), N, X(), RSQ)
NMAX = 500
EPS = 0.000001
Dim G(500), H(500), XI(500), XJ(500)
EPS2 = N * EPS ^ 2
IRST = 0
1 IRST = IRST + 1
Call ASUB(X(), XI())
RP = 0#
BSQ = 0#
For J = 1 To N
BSQ = BSQ + B(J) ^ 2
XI(J) = XI(J) - B(J)
RP = RP + XI(J) ^ 2
Next J
Call ATSUB(XI(), G())
For J = 1 To N
G(J) = -G(J)
H(J) = G(J)
Next J
For ITER = 1 To 10 * N
Call ASUB(H(), XI())
ANUM = 0#
ADEN = 0#
For J = 1 To N
ANUM = ANUM + G(J) * H(J)
ADEN = ADEN + XI(J) ^ 2
Next J
If ADEN = 0# Then Print "very singular matrix"
ANUM = ANUM / ADEN
For J = 1 To N
XI(J) = X(J)
X(J) = X(J) + ANUM * H(J)
Next J
Call ASUB(X(), XJ())
RSQ = 0#
For J = 1 To N
XJ(J) = XJ(J) - B(J)
RSQ = RSQ + XJ(J) ^ 2
Next J
If RSQ = RP Or RSQ <= BSQ * EPS2 Then Exit Sub
If RSQ > RP Then
For J = 1 To N
X(J) = XI(J)
Next J
If IRST >= 3 Then
Exit Sub
End If
GoTo 1
End If
RP = RSQ
Call ATSUB(XJ(), XI())
GG = 0#
DGG = 0#
For J = 1 To N
GG = GG + G(J) ^ 2
DGG = DGG + (XI(J) + G(J)) * XI(J)
Next J
If GG = 0# Then Exit Sub
GAM = DGG / GG
For J = 1 To N
G(J) = -XI(J)
H(J) = G(J) + GAM * H(J)
Next J
Next ITER
Print "too many iterations"
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -