Skip to content

Instantly share code, notes, and snippets.

@baoo777
Created January 23, 2018 17:33
Show Gist options
  • Save baoo777/cf558b44c5105a63eb0779b29db490af to your computer and use it in GitHub Desktop.
Save baoo777/cf558b44c5105a63eb0779b29db490af to your computer and use it in GitHub Desktop.
最小二乗法 1次
Option Explicit
Sub aaaa()
Dim lngArry() As Variant
ReDim lngArry(9) As Variant
Dim i As Long
For i = 0 To 9
lngArry(i) = i
Next i
For i = 0 To 20
Debug.Print GetYosoku(lngArry, i)
Next i
End Sub
Function GetYosoku(dblArry() As Variant, n As Long) As Double
Dim dblA As Double
Dim dblB As Double
Dim dblC As Double
Dim dblD As Double
Dim dblE As Double
Dim dblf As Double
Dim dblg As Double
Dim lngN As Long
Dim i As Long
lngN = UBound(dblArry) - LBound(dblArry) + 1
For i = LBound(dblArry) To UBound(dblArry)
dblA = dblA + dblArry(i) ^ 2
dblB = dblB + (i - LBound(dblArry) + 1) ^ 2
dblC = dblC + dblArry(i)
dblD = dblD + (i - LBound(dblArry) + 1) * dblArry(i)
dblE = dblE + (i - LBound(dblArry) + 1)
Next i
dblf = (lngN * dblD - dblC * dblE) / (lngN * dblB - dblE ^ 2)
dblg = (dblB * dblC - dblD * dblE) / (lngN * dblB - dblE * dblE)
GetYosoku = dblf * (n + 1) + dblg
End Function
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment