使用LINEST将数组作为变量(不是范围)

时间:2014-07-15 09:54:14

标签: arrays excel vba excel-vba

我试图谷歌自己解决这个问题,似乎我找不到任何解决方案。

  • 基本上我有2个包含数据I的数组(XValues和YValues) 应找到适合的多项式。
  • 是3次多项式
  • XValues() as Integer从0变为359. 其值可以从0开始到359,每个位置会增加1。
  • YValues() As Double也从0变为359并且其值或多或少作为抛物线从< -3到0再到< -3。无论如何,最大可能值为0,可能的最小值为-80。

当然我想用LinEstLinEst的语法允许您提供“已知的ys”,“已知的xs”以及我目前不需要的其他几个参数。

  1. 现在,如果我使用Application.LinEst似乎我的数组被处理了,但是我不能强制程序给我3阶多项式的系数(我可以吗? )
  2. 如果我尝试使用WorksheetFunction.LinEst我可以指定学位,但我显然无法使用我的变量。
  3. 当然我可以在某处编写我的数组,然后使用第二种选项,但我真的很想知道是否有更好的方法...

1 个答案:

答案 0 :(得分:4)

(1)使用LINEST和图表

的多项式

enter image description here

(2)使用VBA与变体
相同的结果 (注意(i)选项1使用1D变体,选项2使用2D(ii)关键部分使用Power我在不同的论坛上看了一段时间)

 Sub Test()
 Dim Y
 Dim X
 Dim Arr1
 Dim Arr2
 With Application
    Y = .Transpose([a1:a10])
    X = .Transpose([b1:b10])
    Arr1 = .Power(.Transpose(X), Array(1, 2, 3))
    Arr2 = .LinEst(Y, .Transpose(Arr1))
     End With
 MsgBox "coefficients are " & Chr(10) & Join(Arr2, Chr(10))
 End Sub

2B使用带有2D变体的VBA相同的结果

 Sub Test2()
 Dim Y
 Dim X
 Dim Arr1
 Dim Arr2
 With Application
    Y = [a1:a10]
    X = [b1:b10]
    Arr1 = .Power(X, Array(1, 2, 3))
    Arr2 = .LinEst(Y, Arr1)
 End With
 MsgBox "coefficients are " & Chr(10) & Join(Arr2, Chr(10))
 End Sub