VBA 用于插入值的 Linest 函数
VBA Linest function to interpolate a value
您好,我正在尝试使用 Worksheet 函数 LinEst 作为给定 X 的估算器。首先找到了一个函数,该函数可以为我提供数字 1 到 n 的列表以用作幂。然后尝试合并到函数中。但我确信我犯了很多错误。最终,我想输入一个 x 范围和一个 y 范围、我的线性估计的多项式阶数和一个 x 以获得估计结果。
Option Explicit
Public Function ReturnArrayAtoB(ByVal M As Long, ByVal N As Long) As Variant
Dim lngCounter As Long
Dim arrReturn As Variant
ReDim arrReturn(N - M)
For lngCounter = 0 To N - M
arrReturn(lngCounter) = M + lngCounter
Next lngCounter
ReturnArrayAtoB = arrReturn
End Function
Function PolyFit(rX As Range, rY As Range, Xinput, Optional PolyOrder = 3)
Dim varLinEst As Variant
Dim arrReturn As Variant
Dim i As Integer
Dim a As Long
arrReturn = ReturnArrayAtoB(1, PolyOrder)
varLinEst = WorksheetFunction.LinEst(rY, ((rX) ^ (arrReturn)), True, False)
a = 0
For i = 1 To PolyOrder
a = Xinput ^ varLinEst(i) + a
Next i
a = a + varLinEst(0)
PolyFit = a
PolyFit = varLinEst
End Function
您需要后期绑定公式并使用Application.Power
我修复了一些其他逻辑问题。
Public Function ReturnArrayAtoB(ByVal M As Long, ByVal N As Long) As Variant
Dim arrReturn As Variant
ReDim arrReturn(N - M)
Dim lngCounter As Long
For lngCounter = 0 To N - M
arrReturn(lngCounter) = M + lngCounter
Next lngCounter
ReturnArrayAtoB = arrReturn
End Function
Function PolyFit(rX As Range, rY As Range, Xinput As Double, Optional PolyOrder = 3)
Dim arrReturn As Variant
arrReturn = ReturnArrayAtoB(1, PolyOrder)
Dim varLinEst As Variant
varLinEst = Application.LinEst(rY, Application.Power(rX, arrReturn))
Dim a As Double
a = 0#
Dim i As Long
For i = 1 To PolyOrder + 1
a = (Xinput ^ (PolyOrder + 1 - i)) * varLinEst(i) + a
Next i
PolyFit = a
End Function
只是因为,如果有 Sequence():
=SUMPRODUCT(INDEX(LINEST(B1:B8,(A1:A8^SEQUENCE(,E2))),SEQUENCE(E2+1)),E1^(SEQUENCE(E2+1,,E2,-1)))
您好,我正在尝试使用 Worksheet 函数 LinEst 作为给定 X 的估算器。首先找到了一个函数,该函数可以为我提供数字 1 到 n 的列表以用作幂。然后尝试合并到函数中。但我确信我犯了很多错误。最终,我想输入一个 x 范围和一个 y 范围、我的线性估计的多项式阶数和一个 x 以获得估计结果。
Option Explicit
Public Function ReturnArrayAtoB(ByVal M As Long, ByVal N As Long) As Variant
Dim lngCounter As Long
Dim arrReturn As Variant
ReDim arrReturn(N - M)
For lngCounter = 0 To N - M
arrReturn(lngCounter) = M + lngCounter
Next lngCounter
ReturnArrayAtoB = arrReturn
End Function
Function PolyFit(rX As Range, rY As Range, Xinput, Optional PolyOrder = 3)
Dim varLinEst As Variant
Dim arrReturn As Variant
Dim i As Integer
Dim a As Long
arrReturn = ReturnArrayAtoB(1, PolyOrder)
varLinEst = WorksheetFunction.LinEst(rY, ((rX) ^ (arrReturn)), True, False)
a = 0
For i = 1 To PolyOrder
a = Xinput ^ varLinEst(i) + a
Next i
a = a + varLinEst(0)
PolyFit = a
PolyFit = varLinEst
End Function
您需要后期绑定公式并使用Application.Power
我修复了一些其他逻辑问题。
Public Function ReturnArrayAtoB(ByVal M As Long, ByVal N As Long) As Variant
Dim arrReturn As Variant
ReDim arrReturn(N - M)
Dim lngCounter As Long
For lngCounter = 0 To N - M
arrReturn(lngCounter) = M + lngCounter
Next lngCounter
ReturnArrayAtoB = arrReturn
End Function
Function PolyFit(rX As Range, rY As Range, Xinput As Double, Optional PolyOrder = 3)
Dim arrReturn As Variant
arrReturn = ReturnArrayAtoB(1, PolyOrder)
Dim varLinEst As Variant
varLinEst = Application.LinEst(rY, Application.Power(rX, arrReturn))
Dim a As Double
a = 0#
Dim i As Long
For i = 1 To PolyOrder + 1
a = (Xinput ^ (PolyOrder + 1 - i)) * varLinEst(i) + a
Next i
PolyFit = a
End Function
只是因为,如果有 Sequence():
=SUMPRODUCT(INDEX(LINEST(B1:B8,(A1:A8^SEQUENCE(,E2))),SEQUENCE(E2+1)),E1^(SEQUENCE(E2+1,,E2,-1)))