|
平时经常要进行多项式拟合进行平滑滤波,由于数据量庞大,使用Excel自带的LinEst公式进行拟合不够方便,针对大量数据时通常使用Matlab进行处理,不过这样一来对于大数据自动处理时需要通过VBA调用Matlab(或者手动在Matlab中处理),这样效率也不高。这两天要做的数据比较麻烦,就想办法用VBA编写了求多项式拟合系数的公式,与Matlab的计算结果基本吻合,误差在可接受范围。这样以后进行平滑滤波直接调用函数就行了。
代码比较简单,见笑。
- Function XlaPloyFit(YY As Variant, XX As Variant, N As Integer) As Variant
- '多项式拟合算法,YY为因变量,XX为自变量,N为多项式阶次
- 'XlaPloyFit 为1行N+1列数据, 返回数组为{mn,mn-1,...,m1,b}
- Dim UbYY As Long
- Dim YYValue()
- Dim XXValue()
- If UCase(TypeName(YY)) = "RANGE" Then
- YYValue = YY.Value
- XXValue = XX.Value
- Else
- YYValue = YY
- XXValue = XX
- End If
- UbYY = UBound(YYValue)
- Dim Crr()
- ReDim Crr(1 To UbYY, 1 To N)
- Dim Crrii As Long
- Dim Crrjj As Integer
- For Crrii = 1 To UbYY
- For Crrjj = 1 To N
- Crr(Crrii, Crrjj) = XXValue(Crrii, 1) ^ Crrjj
- Next
- Next
- Dim XlaPolyFitTemp()
- XlaPolyFitTemp = Application.WorksheetFunction.LinEst(YYValue, Crr, True, True)
- Dim CoffRR()
- ReDim CoffRR(1 To 1, 1 To N + 1)
- For Crrjj = 1 To N + 1
- CoffRR(1, Crrjj) = XlaPolyFitTemp(1, Crrjj)
- Next
- XlaPloyFit = CoffRR
- End Function
复制代码
|
|