VBA 後退代入 Ax=b→Ux=yのxを求める(関数)
Function xxx(U() As Double, y() As Double) As Double()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim n As Integer
Dim m As Integer
Dim x As Double
Dim arrc() As Double 'xxxになる解そのもの
n = UBound(U, 1)
m = UBound(y)
ReDim arrc(n)
arrc(n) = y(n) / U(n, n) '一番下の行の変数の解
For k = 1 To n - 1 '1~n-1 までの解を出すための行数の数
i = n - k 'i = n - 1 to 1
x = 0
For j = i + 1 To n 'arrc(i) より先に出た解の数
x = x + U(i, j) * arrc(j) 'xは,U(i,i) * arrc(i) = y(i) -( U(i,i+1)*arr(i+1) + U(i,i+2)*arr(i+2) + …) ←ここ
Next j
arrc(i) = 1 / U(i, i) * (y(i) - x) '上の式処理しただけ
Next k
xxx = arrc
End Function