使用最小二乘法的多项式从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 (将#修改为@)