|
学校の課題で、セル(1、1)からセル(30、1)に30個のxの測定値が書き込まれている。また、セル(1、2)からセル(30、2)に30個のyの測定値が書き込まれている。これらのn組(n=30)のデータは直線 y=a+bx によって代表されるとして、データを最も良く代表する切片aと傾きbを線形最小二乗法によって求めると以下のように表される。
y=a+bx
b=Sxy/Sx
a=yave-bxave
Sx=Σ(xi-xave)2
Sxy=Σ(xi-xave)(yi-yave)
xave=(1/n)Σxi
yave=(1/n)Σyi
ただし、
Σf(xi)=f(x1)+f(x2)+ ・・+f(xn)
を表す。上記のn組のデータから決定されるaをセル(1、3)に、bをセル(2、3)に出力するVBAプログラムを書け。という問題がありまして、
Sub for3()
Dim x As Integer, y As Integer, a As Integer, b As Integer, sxy As Integer, sx As Integer, xave As Integer, yave As Integer, xi As Integer, yi As Integer, wx As Integer, wy As Integer
xi = Cells(x, 1).Value
yi = Cells(y, 2).Value
wx = 0
wy = 0
For x = 1 To 30 Step 1
wx = wx + x
Next x
For y = 1 To 30 Step 1
wy = wy + y
Next y
yi = a * xi + b
b = sxy - sx
a = yave - b * xave
sx = (wx - xave) ^ 2
sxy = (wx - xave) * (wy - yave)
xave = wx / 30
yave = wy / 30
Cells(1, 3).Value = a
Cells(2, 3).Value = b
End Sub
と書いたのですがうまくいきません。
どこが悪いのか教えてください。
長くなってすいません。よろしくお願いします。
|
|