看来,我不是唯一一个与此斗争,但我找不到一个好的答案,所以我在这里尝试我的机会!
我想找到一条最佳拟合的三次多项式直线,给定两组存储在数组中的数据。
Dim X(0 to 9) as Integer
Dim Y(0 to 9) as Integer
for k = 0 to 9
X(k) = 'something
Y(k) = 'something else
Next
到目前为止,我已经解决了如何用一次多项式Y = aX + B来解决我的问题:
a = Application.WorksheetFunction.LinEst(Y, X, True, False)(1)
b = Application.WorksheetFunction.LinEst(Y, X, True, False)(2)
我还发现,如果将值X和Y写入Sheet,可以用以下公式找到更高的多项式:
'x-axis values are entered in X column, y-values in Y column
Z = Application.Evaluate("=linest(Y1:Y10,X1:X10^{1,2,3})")
'The answer is in Z such that Y = Z(1)*Y^3+Z(2)*Y^2+Z(3)*Y+Z(4)
假设我的数组已经排序了,我如何将linest
用于数组而不用于单元格中输入的值?
3条答案
按热度按时间irlmq6kh1#
如果需要OLS最佳拟合系数(即线性回归)而不是插值,则可以对二阶多项式执行以下操作:
对于
B0
,它正确地返回-7
;对于B1
,它正确地返回3
;对于B2
,它正确地返回1
。https://stackoverflow.com/a/27137957/1011724你可以把它变得更一般,比如
k
阶多项式,如下所示:6uxekuva2#
我发现了另一种使用数组进行多项式回归的方法。代码在这个链接中。https://rosettacode.org/wiki/Polynomial_regression。因为网站上的代码由于数组不正确而无法工作,我做了一个小的更正。现在它可以工作了。
kse8i1jr3#
我在上面的函数中添加了一个函数,它使用范围变量作为输入,相当于Excel函数linest()