2章:VBAのプログラムリスト
- VBAのプログラムリスト
1章の最小自乗法による多項式近似をVBAで書くと以下のようになります。
'グローバル変数の定義
Dim Mn As Integer '連立数を設定します。
Dim MA(101, 101) As Double 'MA[i][j]=Aijの値を設定します。i=行、j=列
Dim MB(101) As Double 'MB[i]=Biの値を設定します。i=行
Dim MX(101) As Double 'MX[j]=Xjの値が格納されます。j=列
Dim X(101), Y(101) As Double '離散データ
Dim m As Integer '離散データ数
Dim n As Integer 'n次多項式のn
'メインルーチン
Sub Main()
InData
CAL_LSM
OutData
End Sub
'インプットルーチン
Sub InData()
n = Sheets("Sheet1").Cells(5, 3).Value
m = Sheets("Sheet1").Cells(6, 3).Value
For i = 0 To m - 1 Step 1
X(i) = Sheets("Sheet1").Cells(8 + i, 2).Value
Y(i) = Sheets("Sheet1").Cells(8 + i, 3).Value
Next i
End Sub
'n次多項式近似サブルーチン
Sub CAL_LSM()
Dim i, j As Integer
Dim SX(202), SYX(202) As Double
For i = 0 To 2 * n Step 1
SX(i) = 0
SYX(i) = 0
Next i
For j = 0 To m - 1 Step 1
SX(0) = SX(0) + 1
SX(1) = SX(1) + X(j)
For i = 2 To 2 * n Step 1
SX(i) = SX(i) + X(j) ^ i
Next i
SYX(0) = SYX(0) + Y(j)
SYX(1) = SYX(1) + X(j) * Y(j)
For i = 2 To 2 * n Step 1
SYX(i) = SYX(i) + (X(j) ^ i) * Y(j)
Next i
Next j
Mn = n + 1
For i = 1 To Mn Step 1
MB(i) = SYX(i - 1)
Sheets("Sheet1").Cells(8 + i, 6).Value = MB(i)
For j = 1 To Mn Step 1
MA(i, j) = SX(i + j - 2)
Sheets("Sheet1").Cells(8 + i, 7 + j).Value = MA(i, j)
Next j
Next i
CAL_MX
End Sub
'連立方程式サブルーチン
Sub CAL_MX()
Dim i, j, k As Integer
Dim Akk, Aik, SX As Double
For k = 1 To Mn Step 1 'Aij消去操作の繰り返し
For i = k + 1 To Mn Step 1 '連立数分の繰り返し計算
Akk = MA(k, k)
Aik = MA(i, k)
MB(i) = MB(i) * Akk - Aik * MB(k) '(6.2)式の計算
For j = 1 To Mn Step 1 '(6.1)式の計算
MA(i, j) = MA(i, j) * Akk - Aik * MA(k, j)
Next j
Next i
Next k
MX(Mn) = MB(Mn) / MA(Mn, Mn) '(7.1)式の計算
For k = Mn - 1 To 1 Step -1 'Xjを求める計算の繰り返し
SX = 0
For j = k + 1 To Mn Step 1
SX = SX + MA(k, j) * MX(j)
Next j
MX(k) = (MB(k) - SX) / MA(k, k) '(8.1)式の計算
Next k
End Sub
'アウトプットルーチン
Sub OutData()
For j = 1 To 100 Step 1
Sheets("Sheet1").Cells(7, 7 + j).Formula = ""
Next j
For j = 1 To Mn Step 1
Sheets("Sheet1").Cells(7, 7 + j).Value = MX(j)
Next j
End Sub
- 解説
- グローバル変数の定義
共通エリアに使用するグローバル変数を定義します。
- メインルーチン
「計算実行」ボタンが押されるとメインルーチンが実行されます。
インプットルーチン、n次多項式近似サブルーチン、アウトプットルーチンの順で実行します。
- インプットルーチン
「Sheet1」の黄色のセルに設定された数値を読取り、グローバル変数に設定します。
- n次多項式近似サブルーチン
グローバル変数の値から、連立方程式の定数を計算します。
連立方程式の定数を「Sheet1」の指定位置に表示します。
連立方程式サブルーチンを実行します。
- 連立方程式サブルーチン
連立方程式の定数(グローバル変数)から連立方程式の解を求めます。
- アウトプットルーチン
連立方程式の解(A0〜An)を「Sheet1」に表示します。
3章:VBA最小自乗法関数近似フリーソフトに行く。
トップページに戻る。