module1.bas

来自「平均因子分解法」· BAS 代码 · 共 52 行

BAS
52
字号
Attribute VB_Name = "Module1"
Option Explicit
'***********************************************************
'用cholesky来求线性方程组,要求系数矩阵是正定对称矩阵
Public Function cholesky(n As Integer, a() As Double, b() As Double, x() As Double)
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim L() As Double
ReDim L(n, n) As Double
Dim y() As Double
ReDim y(n) As Double
For i = 1 To n
    For j = 1 To i
        If j = i Then
            For k = 1 To i - 1
                L(i, i) = L(i, i) + L(i, k) ^ 2
            Next k
            L(i, i) = a(i, i) - L(i, j)
            L(i, i) = L(i, i) ^ 0.5
        Else
            For k = 1 To j - 1
                L(i, j) = L(i, j) + L(i, k) * L(j, k)
            Next k
            L(i, j) = a(i, j) - L(i, j)
            L(i, j) = L(i, j) / L(j, j)
        End If
    Next j
    
    For j = 1 To i - 1
        y(i) = y(i) + L(i, j) * y(j)
    Next j
    y(i) = b(i) - y(i)
    y(i) = y(i) / L(i, i)
Next i


For i = n To 1 Step -1
    For j = i + 1 To n
         x(i) = x(i) + L(j, i) * x(j)
    Next j
    x(i) = y(i) - x(i)
    x(i) = x(i) / L(i, i)
Next i
'For i = 1 To n
'x(i) = x(i) / (111.5 * 111.5)
'Next i

End Function


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?