Dim x() As Double
創新互聯公司是一家企業級云計算解決方案提供商,超15年IDC數據中心運營經驗。主營GPU顯卡服務器,站群服務器,香港機房服務器托管,海外高防服務器,機柜大帶寬,動態撥號VPS,海外云手機,海外云服務器,海外服務器租用托管等。
Dim y() As Double
Dim xz() As Double
Dim c() As Double
Dim d() As Double
Dim a() As Double
Dim am, bm, cm As Double
dim m,n as long ’m為點的個數,n為自變量個數,一元當然就是1
ReDim x(m, n)'自變量矩陣
ReDim y(m)'因變量矩陣
ReDim xz(n, m)'x()的轉置
ReDim c(n, 2 * n)'增廣矩陣
ReDim d(n, m)'這個忘了是啥,過渡用的
ReDim a(n)'回歸系數矩陣
For i = 1 To m
x(i, 1) = 1
Next i
For i = 1 To m
For j = 2 To n
x(i, j) = VSFGrid1.TextMatrix(i, j - 1)
Next j
Next i
For i = 1 To m
y(i) = VSFGrid1.TextMatrix(i, n)
Next i
'a=(x'*x)^-1*x'*y
For i = 1 To n
For j = 1 To m
xz(i, j) = x(j, i) '轉置
Next j
Next i
For i = 1 To n
For j = 1 To 2 * n
If j = i + n Then
c(i, j) = 1
Else
c(i, j) = 0
End If
Next j
Next i
For i = 1 To n
For j = 1 To n
For k = 1 To m
c(i, j) = c(i, j) + xz(i, k) * x(k, j) '求xz()*x()
Next k
Next j
Next i
For k = 1 To n '用主元除主元所在行的所有元素
am = 1 / c(k, k) '將主元變為1
For j = k To 2 * n
c(k, j) = c(k, j) * am
Next j
'____________________________________
For i = k + 1 To n '將原矩陣變為下三角矩陣
bm = c(i, k)
For j = 1 To 2 * n
c(i, j) = c(i, j) - c(k, j) * bm
Next j
Next i
Next k
'------------------------------------------------
For k = 2 To n
For i = 1 To k - 1 '將下三角矩陣變為單位陣
cm = c(i, k)
For j = k To 2 * n
c(i, j) = c(i, j) - c(k, j) * cm
Next j
Next i
Next k
'------------------------------------------------
For i = 1 To n
For j = 1 To n
c(i, j) = c(i, j + n)
Next j
Next i
For i = 1 To n
For j = 1 To m
For k = 1 To n
d(i, j) = d(i, j) + c(i, k) * xz(k, j)
Next k
Next j
Next i
For i = 1 To n
For j = 1 To m
a(i) = a(i) + d(i, j) * y(j)
Next j
Next i
稍等好嗎?
好了,但愿沒有耽誤你!代碼如下(注意不用任何控件即可):
Private Sub Form_click()
Dim N As Integer, U() As Double, I As Integer
Dim A As Single, B As Single
Form1.Cls
Print "數據:";
N = Val(InputBox("原始數據個數", "輸入", 7))
If N = 1 Then Exit Sub
ReDim U(4, N)
Print "共"; N; "組:"
For I = 1 To N
U(1, I) = Val(InputBox("自變量 X 的值:", "第一組", I))
U(2, I) = Val(InputBox("因變量 Y 的值:", "第一組", I * 5))
U(3, I) = U(1, I) * U(2, I)
U(4, I) = U(1, I) ^ 2
Print "x("; I; ") = "; U(1, I); " y("; I; ") = "; U(2, I)
U(1, 0) = U(1, 0) + U(1, I)
U(2, 0) = U(2, 0) + U(2, I)
U(3, 0) = U(3, 0) + U(3, I)
U(4, 0) = U(4, 0) + U(4, I)
Next I
U(1, 0) = U(1, 0) / N
U(2, 0) = U(2, 0) / N
B = (U(3, 0) - N * U(1, 0) * U(2, 0)) / (U(4, 0) - N * U(1, 0) ^ 2)
A = U(2, 0) - B * U(1, 0)
Print "擬合公式為:"
Print " y = "; A;
If B = 0 Then Print " + ";
Print B; "x"
End Sub
Private Sub Form_Load()
Form1.AutoRedraw = True
Form1.Caption = "最小二乘法擬合程序"
Print "本程序執行的順序為:"
Print "1、輸入數據數量;"
Print "3、逐個輸入各組數據;"
Print "2、輸出擬合公式。"
Print "特別說明:本程序不用任何控件!只要把窗口拉的足夠大就行了。"
Form1.Print "單擊窗體開始..."
End Sub
已經運行過。
構造Pen的時候可以指定粗細,如果你指定為1,并且放大了10倍,最后就成10了,所以你指定小點就行了,比如 Dim p As New Pen(Color.Black, 0.01) 最終繪制的線的粗細不會小于1
分享標題:vb.net二次函數擬合,vb求二次函數的解
網頁路徑:http://vcdvsql.cn/article16/hspsgg.html
成都網站建設公司_創新互聯,為您提供手機網站建設、App設計、網站改版、服務器托管、小程序開發、面包屑導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯