最小二乘法(又稱最小平方法)是一種數(shù)學(xué)優(yōu)化技術(shù)。它通過(guò)最小化誤差的平方和尋找數(shù)據(jù)的最佳函數(shù)匹配。
成都一家集口碑和實(shí)力的網(wǎng)站建設(shè)服務(wù)商,擁有專業(yè)的企業(yè)建站團(tuán)隊(duì)和靠譜的建站技術(shù),10余年企業(yè)及個(gè)人網(wǎng)站建設(shè)經(jīng)驗(yàn) ,為成都上千多家客戶提供網(wǎng)頁(yè)設(shè)計(jì)制作,網(wǎng)站開(kāi)發(fā),企業(yè)網(wǎng)站制作建設(shè)等服務(wù),包括成都營(yíng)銷型網(wǎng)站建設(shè),品牌網(wǎng)站制作,同時(shí)也為不同行業(yè)的客戶提供成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)的服務(wù),包括成都電商型網(wǎng)站制作建設(shè),裝修行業(yè)網(wǎng)站制作建設(shè),傳統(tǒng)機(jī)械行業(yè)網(wǎng)站建設(shè),傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設(shè)。在成都做網(wǎng)站,選網(wǎng)站制作建設(shè)服務(wù)商就選創(chuàng)新互聯(lián)公司。
利用最小二乘法可以簡(jiǎn)便地求得未知的數(shù)據(jù),并使得這些求得的數(shù)據(jù)與實(shí)際數(shù)據(jù)之間誤差的平方和為最小。最小二乘法還可用于曲線擬合。其他一些優(yōu)化問(wèn)題也可通過(guò)最小化能量或最大化熵用最小二乘法來(lái)表達(dá)。
在回歸過(guò)程中,回歸的關(guān)聯(lián)式不可能全部通過(guò)每個(gè)回歸數(shù)據(jù)點(diǎn)(x1,y1. x2,y2...xm,ym),為了判斷關(guān)聯(lián)式的好壞,可借助相關(guān)系數(shù)“R”,統(tǒng)計(jì)量“F”,剩余標(biāo)準(zhǔn)偏差“S”進(jìn)行判斷;“R”越趨近于 1 越好;“F”的絕對(duì)值越大越好;“S”越趨近于 0 越好。
擴(kuò)展資料:
對(duì)于平面中的這n個(gè)點(diǎn),可以使用無(wú)數(shù)條曲線來(lái)擬合。要求樣本回歸函數(shù)盡可能好地?cái)M合這組值。綜合起來(lái)看,這條直線處于樣本數(shù)據(jù)的中心位置最合理。 選擇最佳擬合曲線的標(biāo)準(zhǔn)可以確定為:使總的擬合誤差(即總殘差)達(dá)到最小。
最小二乘法的原則是以“殘差平方和最小”確定直線位置。用最小二乘法除了計(jì)算比較方便外,得到的估計(jì)量還具有優(yōu)良特性。這種方法對(duì)異常值非常敏感。
用離差的平方和,即作為總離差,并使之達(dá)到最小,這樣回歸直線就是所有直線中Q取最小值的那一條,這種使“離差平方和最小”的方法,叫做最小二乘法:
由于絕對(duì)值使得計(jì)算不變,在實(shí)際應(yīng)用中人們更喜歡用:Q=(y1-bx1-a)2+(y2-bx2-a)2+······+(yn-bxn-a)2,這樣,問(wèn)題就歸結(jié)于:當(dāng)a,b取什么值時(shí)Q最小,即到點(diǎn)直線y=bx+a的“整體距離”最小。
參考資料來(lái)源:百度百科——最小二乘法
這個(gè)是高等數(shù)學(xué)里的。做實(shí)驗(yàn)常用的方法。
最小二乘法原理
在我們研究?jī)蓚€(gè)變量(x, y)之間的相互關(guān)系時(shí),通??梢缘玫揭幌盗谐蓪?duì)的數(shù)據(jù)(x1, y1、x2, y2... xm , ym);將這些數(shù)據(jù)描繪在x -y直角坐標(biāo)系中(如圖1), 若發(fā)現(xiàn)這些點(diǎn)在一條直線附近,可以令這條直線方程如(式1-1)。
Y計(jì)= a0 + a1 X (式1-1)
其中:a0、a1 是任意實(shí)數(shù)
為建立這直線方程就要確定a0和a1,應(yīng)用《最小二乘法原理》,將實(shí)測(cè)值Yi與利用(式1-1)計(jì)算值(Y計(jì)=a0+a1X)的離差(Yi-Y計(jì))的平方和〔∑(Yi - Y計(jì))2〕最小為“優(yōu)化判據(jù)”。
令: φ = ∑(Yi - Y計(jì))2 (式1-2)
把(式1-1)代入(式1-2)中得:
φ = ∑(Yi - a0 - a1 Xi)2 (式1-3)
當(dāng)∑(Yi-Y計(jì))平方最小時(shí),可用函數(shù) φ 對(duì)a0、a1求偏導(dǎo)數(shù),令這兩個(gè)偏導(dǎo)數(shù)等于零。
(式1-4)
(式1-5)
亦即:
m a0 + (∑Xi ) a1 = ∑Yi (式1-6)
(∑Xi ) a0 + (∑Xi2 ) a1 = ∑(Xi, Yi) (式1-7)
得到的兩個(gè)關(guān)于a0、 a1為未知數(shù)的兩個(gè)方程組,解這兩個(gè)方程組得出:
a0 = (∑Yi) / m - a1(∑Xi) / m (式1-8)
a1 = [n∑Xi Yi - (∑Xi ∑Yi)] / [n∑Xi2 - (∑Xi)2 )] (式1-9)
這時(shí)把a(bǔ)0、a1代入(式1-1)中, 此時(shí)的(式1-1)就是我們回歸的元線性方程即:數(shù)學(xué)模型。
在回歸過(guò)程中,回歸的關(guān)聯(lián)式是不可能全部通過(guò)每個(gè)回歸數(shù)據(jù)點(diǎn)(x1, y1、 x2, y2...xm,ym),為了判斷關(guān)聯(lián)式的好壞,可借助相關(guān)系數(shù)“R”,統(tǒng)計(jì)量“F”,剩余標(biāo)準(zhǔn)偏差“S”進(jìn)行判斷;“R”越趨近于 1 越好;“F”的絕對(duì)值越大越好;“S”越趨近于 0 越好。
R = [∑XiYi - m (∑Xi / m)(∑Yi / m)]/ SQR{[∑Xi2 - m (∑Xi / m)2][∑Yi2 - m (∑Yi / m)2]} (式1-10) *
在(式1-1)中,m為樣本容量,即實(shí)驗(yàn)次數(shù);Xi、Yi分別任意一組實(shí)驗(yàn)X、Y的數(shù)值。微積分應(yīng)用課題一 最小二乘法
從前面的學(xué)習(xí)中, 我們知道最小二乘法可以用來(lái)處理一組數(shù)據(jù), 可以從一組測(cè)定的數(shù)據(jù)中尋求變量之間的依賴關(guān)系, 這種函數(shù)關(guān)系稱為經(jīng)驗(yàn)公式. 本課題將介紹最小二乘法的精確定義及如何尋求 與 之間近似成線性關(guān)系時(shí)的經(jīng)驗(yàn)公式. 假定實(shí)驗(yàn)測(cè)得變量之間的 個(gè)數(shù)據(jù) , , …, , 則在 平面上, 可以得到 個(gè)點(diǎn) , 這種圖形稱為“散點(diǎn)圖”, 從圖中可以粗略看出這些點(diǎn)大致散落在某直線近旁, 我們認(rèn)為 與 之間近似為一線性函數(shù), 下面介紹求解步驟.
考慮函數(shù) , 其中 和 是待定常數(shù). 如果 在一直線上, 可以認(rèn)為變量之間的關(guān)系為 . 但一般說(shuō)來(lái), 這些點(diǎn)不可能在同一直線上. 記 , 它反映了用直線 來(lái)描述 , 時(shí), 計(jì)算值 與實(shí)際值 產(chǎn)生的偏差. 當(dāng)然要求偏差越小越好, 但由于 可正可負(fù), 因此不能認(rèn)為總偏差 時(shí), 函數(shù) 就很好地反映了變量之間的關(guān)系, 因?yàn)榇藭r(shí)每個(gè)偏差的絕對(duì)值可能很大. 為了改進(jìn)這一缺陷, 就考慮用 來(lái)代替 . 但是由于絕對(duì)值不易作解析運(yùn)算, 因此, 進(jìn)一步用 來(lái)度量總偏差. 因偏差的平方和最小可以保證每個(gè)偏差都不會(huì)很大. 于是問(wèn)題歸結(jié)為確定 中的常數(shù) 和 , 使 為最小. 用這種方法確定系數(shù) , 的方法稱為最小二乘法.
應(yīng)該是多元回歸,公式形式為:y=a+bx1+cx2,沒(méi)有d項(xiàng)的.根據(jù)一系列的y與x1,x2資料,可以用矩陣法,主元消去法通過(guò)回歸分析求得a,b,c參數(shù)
首先表示一下同情。不過(guò),這學(xué)校真這么過(guò)分嗎?什么都不教就考?
最小二乘法的原理還是要明白一點(diǎn)的:
在已知有限數(shù)量的結(jié)果數(shù)據(jù)對(duì)時(shí),推導(dǎo)出最可能的函數(shù)匹配。
而事實(shí)上,在實(shí)際應(yīng)用過(guò)程中大多數(shù)情況是先預(yù)設(shè)了一個(gè)可能的函數(shù)模型的。
比如說(shuō)有10對(duì)數(shù)據(jù),你可以假定它是一個(gè)直線模型,也可以假定它是一個(gè)弧度較大的拋物線。
由此產(chǎn)生的結(jié)果函數(shù)自然是天差地遠(yuǎn),完全不一致的。
所以,用計(jì)算機(jī)實(shí)現(xiàn)最小二乘法基本都是根據(jù)猜測(cè)的函數(shù)模型而編寫(xiě)相應(yīng)程序。沒(méi)通用的!
了解了上面這些,你再看考題就很清楚了:要求你寫(xiě)出兩段程序,分別對(duì)應(yīng)兩個(gè)猜測(cè)函數(shù)。
這種程度的要求,不應(yīng)該交給新手去做的。所以我開(kāi)頭說(shuō)你學(xué)校過(guò)分。
這個(gè)題目太麻煩,我沒(méi)時(shí)間把它實(shí)現(xiàn)出來(lái)。給你幾個(gè)鏈接供你參考吧:
它們都不是這個(gè)問(wèn)題的解答,因?yàn)閷?duì)應(yīng)的猜測(cè)函數(shù)是不一樣的,提供個(gè)思路吧。
'新建窗體,添加text1,command1,picture1
Private Sub Command1_Click()
If Text1.Text = "" Then Exit Sub
Dim x() As Single, y() As Single, cnt As Integer
Dim xmax As Single, xmin As Single, ymax As Single, ymin As Single
Dim p() As String, z() As String
Dim xyh As Single, xh As Single, yh As Single, xph As Single, k As Single, b As Single
p = Split(Text1.Text, "/")
For i = 0 To UBound(p)
If p(i) "" Then
z = Split(p(i), "*")
If UBound(z) = 1 Then
If IsNumeric(z(0)) And IsNumeric(z(1)) Then
If cnt = 0 Then xmax = z(0): xmin = z(0): ymax = z(1): ymin = z(1)
If xmax z(0) Then xmax = z(0)
If xmin z(0) Then xmin = z(0)
If ymax z(1) Then ymax = z(1)
If ymin z(1) Then ymin = z(1)
xyh = xyh + z(0) * z(1): xh = xh + z(0): yh = yh + z(1): xph = xph + z(0) ^ 2
ReDim Preserve x(cnt), y(cnt)
x(cnt) = z(0): y(cnt) = z(1): cnt = cnt + 1
End If
End If
End If
Next
Picture1.Cls
Picture1.DrawWidth = 1
If xmax = xmin And ymax = ymin Then
MsgBox "單點(diǎn)無(wú)法擬合"
ElseIf xmax = xmin Then
Picture1.Scale (xmin * 0.5, ymax + 0.2 * (ymax - ymin))-(xmin * 1.5, ymin - 0.2 * (ymax - ymin))
zuobiaozhou xmin * 0.5, ymax + 0.2 * (ymax - ymin), xmin * 1.5, ymin - 0.2 * (ymax - ymin)
Picture1.Line (xmax, ymax + 0.2 * (ymax - ymin))-(xmax, ymin - 0.2 * (ymax - ymin)), vbBlue
ElseIf ymax = ymin Then
Picture1.Scale (xmin - 0.2 * (xmax - xmin), ymax * 1.5)-(xmax + 0.2 * (xmax - xmin), ymin * 0.5)
zuobiaozhou xmin - 0.2 * (xmax - xmin), ymax * 1.5, xmax + 0.2 * (xmax - xmin), ymin * 0.5
Picture1.Line (xmin - 0.2 * (xmax - xmin), ymax)-(xmax + 0.2 * (xmax - xmin), ymax), vbBlue
Else
Picture1.Scale (xmin - 0.2 * (xmax - xmin), ymax + 0.2 * (ymax - ymin))-(xmax + 0.2 * (xmax - xmin), ymin - 0.2 * (ymax - ymin))
zuobiaozhou xmin - 0.2 * (xmax - xmin), ymax + 0.2 * (ymax - ymin), xmax + 0.2 * (xmax - xmin), ymin - 0.2 * (ymax - ymin)
k = (xyh - (xh * yh) / cnt) / (xph - xh ^ 2 / cnt)
b = yh / cnt - k * xh / cnt
Picture1.Line (xmin - 0.2 * (xmax - xmin), k * (xmin - 0.2 * (xmax - xmin)) + b)-(xmax + 0.2 * (xmax - xmin), k * (xmax + 0.2 * (xmax - xmin)) + b), vbBlue
End If
Picture1.DrawWidth = 5
For i = 0 To cnt - 1
Picture1.PSet (x(i), y(i)), vbRed
Next
Text1.SetFocus
End Sub
Private Sub Form_Activate()
Text1.SetFocus
End Sub
Private Sub Form_Load()
Text1.Text = ""
Text1.ToolTipText = "橫縱坐標(biāo)間以乘號(hào)*分隔,各點(diǎn)間以除號(hào)/分隔。例如:100*100/200*200"
Command1.Caption = "繪圖"
Picture1.AutoRedraw = True
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If Not (IsNumeric(Chr(KeyAscii)) Or KeyAscii = 8 Or KeyAscii = 42 Or KeyAscii = 45 Or KeyAscii = 46 Or KeyAscii = 47) Then KeyAscii = 0
End Sub
Function zuobiaozhou(ByVal x1 As Single, y1 As Single, x2 As Single, y2 As Single)
For i = x1 + (x2 - x1) / 5 To x2 Step (x2 - x1) / 5
Picture1.Line (i, y2 + 100 * (y1 - y2) / Picture1.Height)-(i, y2)
Picture1.CurrentX = i - 250 * (x2 - x1) / Picture1.Width
Picture1.CurrentY = y2 + 350 * (y1 - y2) / Picture1.Height
Picture1.Print i
Next
For i = y2 + (y1 - y2) / 5 To y1 Step (y1 - y2) / 5
Picture1.Line (x1, i)-(x1 + 100 * (x2 - x1) / Picture1.Width, i)
Picture1.CurrentX = x1 + 150 * (x2 - x1) / Picture1.Width
Picture1.CurrentY = i + 80 * (y1 - y2) / Picture1.Height
Picture1.Print i
Next
End Function
稍等好嗎?
好了,但愿沒(mé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 "數(shù)據(jù):";
N = Val(InputBox("原始數(shù)據(jù)個(gè)數(shù)", "輸入", 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 "本程序執(zhí)行的順序?yàn)椋?
Print "1、輸入數(shù)據(jù)數(shù)量;"
Print "3、逐個(gè)輸入各組數(shù)據(jù);"
Print "2、輸出擬合公式。"
Print "特別說(shuō)明:本程序不用任何控件!只要把窗口拉的足夠大就行了。"
Form1.Print "單擊窗體開(kāi)始..."
End Sub
已經(jīng)運(yùn)行過(guò)。