如何解决使用最小二乘法的多项式从VBA到.NET
我有用于在VBA中生成二次方程系数的代码。相同的代码在.Net中给出不同的系数值。
我是.net编程的新手。似乎我在.net中定义“ Linest”函数时犯了一些错误。
我同时发布了VBA和.Net代码,供您参考。
所有x和y数据点都包含在程序本身中。
我正在为.net程序使用Microsoft Visual Basic Express 2010软件。
VBA代码
Sub Equation_coeff()
Dim i As Integer,j As Integer
Dim regorder As Integer,dataset As Integer
OM1 = 1
regorder = OM1 + 1
dataset = 3
ReDim allx(2)
ReDim ally(2)
ReDim allxj(2)
ReDim x(2)
ReDim y(2)
ReDim allxeq(1)
ReDim LinestOut(0 To 5,0 To regorder + 1)
x(0) = 3.71
x(1) = 4.21
x(2) = 4.51
y(0) = 22
y(1) = 17
y(2) = 14
j = 0
For i = 1 To dataset
allx(j) = x(j)
ally(j) = y(j)
j = j + 1
Next i
'fill the 0 based subarrays for each exponent
For j = 1 To regorder
For i = 0 To (dataset - 1)
allxj(i) = allx(i) ^ j
Next i
'assign to the 0 based array of arrays
allxeq(j - 1) = allxj
Next j
ReDim C(0 To regorder)
ReDim BSignif(0 To regorder)
ReDim sigmab(0 To regorder)
LinestOut = Application.WorksheetFunction.LinEst(ally,allxeq,True,True)
For i = 0 To regorder
C(regorder - i) = LinestOut(1,i + 1) 'Equation coefficients
BSignif(regorder - i) = LinestOut(2,i + 1)
Next
End Sub
.NET代码:
Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer,j As Integer,OM1 As Integer
Dim regorder As Integer,dataset As Integer
Dim C(0 To regorder) As Object
Dim BSignif(0 To regorder) As Object
Dim sigmab(0 To regorder) As Object
Dim excelApp = New Microsoft.Office.Interop.Excel.Application() 'New Excel.Application
Dim allx(2) As Object
Dim ally(2) As Object
Dim allxj(2) As Object
Dim allxeq(1) As Object '
Dim LinestOut(0 To 5,0 To regorder + 1) As Object
Dim x(3) As Object
Dim y(3) As Object
OM1 = 1
regorder = OM1 + 1
dataset = 3
x(0) = 3.71
x(1) = 4.21
x(2) = 4.51
y(0) = 22
y(1) = 17
y(2) = 14
j = 0
For i = 1 To DataSet
allx(j) = x(j)
ally(j) = y(j)
j = j + 1
Next i
'fill the 0 based subarrays for each exponent
For j = 1 To regorder
For i = 0 To 2
allxj(i) = allx(i) ^ j
Next i
'assign to the 0 based array of arrays
allxeq(j - 1) = allxj
Next j
LinestOut = excelApp.WorksheetFunction.LinEst(ally,True)
For i = 0 To regorder
C(regorder - i) = LinestOut(1,i + 1)
BSignif(regorder - i) = LinestOut(2,i + 1)
Next
End Sub
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。