1樓:匿名使用者
我用的是最小二乘法擬合,這種方式在資料較少、較離散的情況下可能偏差較大。不知道你用來幹嘛,個人建議儘量多取資料,就算是其他方法也是資料越多越準確。不過用還是能用的,我拿這個給你舉個例子。
修改那個顯示比例,能調整點的xy軸比例位置。標尺是每一格10,修改比例後會調整。
private sub command1_click()
dim sigemax2, sigemax, sigemay, sigemaxy, a, b
for i = 0 to 5
sigemax2 = sigemax2 + val(text1(i).text) ^ 2
sigemax = sigemax + val(text1(i).text)
sigemay = sigemay + val(text2(i).text)
sigemaxy = sigemaxy + val(text1(i).text) * val(text2(i).text)
next
a = (sigemax2 * sigemay - sigemax * sigemaxy) / (6 * sigemax2 - sigemax ^ 2)
b = (6 * sigemaxy - sigemax * sigemay) / (6 * sigemax2 - sigemax ^ 2)
picture1.cls
for i = 0 to 5
picture1.circle (text1(i) * text3 + 5000, -text2(i) * text3 + 3000), 30, vbred
next
picture1.line (-5000 + 5000, 0 + 3000)-(5000 + 5000, 0 + 3000)
picture1.line (5000, 0)-(5000, 8000)
for i = 0 to 2800 step text3.text * 10
picture1.line (i + 5000, -50 + 3000)-(i + 5000, 3000)
picture1.line (5000, 3000 + i)-(5050, 3000 + i)
next
for i = 0 to -2800 step -text3.text * 10
picture1.line (i + 5000, -50 + 3000)-(i + 5000, 3000)
picture1.line (5000, 3000 + i)-(5050, 3000 + i)
next
picture1.line (-3000 * text3 + 5000, -(b * (-3000) + a) * text3 + 3000)-(3000 * text3 + 5000, -(b * (3000) + a) * text3 + 3000)
if b = 1 then b = ""
if a < 0 then label3 = "y=" + cstr(b3) + "x" + "-" + cstr(abs(a)) else label3 = "y=" + cstr(b) + "x" + "+" + cstr(a)
end sub
忘了顯示錶達式了,修改下,你再新增個label3就行,然後把if b = 1 then b = ""
if a < 0 then label3 = "y=" + cstr(b3) + "x" + "-" + cstr(abs(a)) else label3 = "y=" + cstr(b) + "x" + "+" + cstr(a)加在end sub前就可以了
利用最小二乘法擬合直線(用vb)在介面上畫出圖並顯示方程
2樓:匿名使用者
這個是高等數學裡的。做實驗常用的方法。
最小二乘法原理
在我們研究兩個變數(x, y)之間的相互關係時,通常可以得到一系列成對的資料(x1, y1、x2, y2... xm , ym);將這些資料描繪在x -y直角座標系中(如圖1), 若發現這些點在一條直線附近,可以令這條直線方程如(式1-1)。
y計= a0 + a1 x (式1-1)
其中:a0、a1 是任意實數
為建立這直線方程就要確定a0和a1,應用《最小二乘法原理》,將實測值yi與利用(式1-1)計算值(y計=a0+a1x)的離差(yi-y計)的平方和〔∑(yi - y計)2〕最小為「優化判據」。
令: φ = ∑(yi - y計)2 (式1-2)
把(式1-1)代入(式1-2)中得:
φ = ∑(yi - a0 - a1 xi)2 (式1-3)
當∑(yi-y計)平方最小時,可用函式 φ 對a0、a1求偏導數,令這兩個偏導數等於零。
(式1-4)
(式1-5)
亦即:m a0 + (∑xi ) a1 = ∑yi (式1-6)
(∑xi ) a0 + (∑xi2 ) a1 = ∑(xi, yi) (式1-7)
得到的兩個關於a0、 a1為未知數的兩個方程組,解這兩個方程組得出:
a0 = (∑yi) / m - a1(∑xi) / m (式1-8)
a1 = [n∑xi yi - (∑xi ∑yi)] / [n∑xi2 - (∑xi)2 )] (式1-9)
這時把a0、a1代入(式1-1)中, 此時的(式1-1)就是我們迴歸的元線性方程即:數學模型。
在迴歸過程中,迴歸的關聯式是不可能全部通過每個迴歸資料點(x1, y1、 x2, y2...xm,ym),為了判斷關聯式的好壞,可藉助相關係數「r」,統計量「f」,剩餘標準偏差「s」進行判斷;「r」越趨近於 1 越好;「f」的絕對值越大越好;「s」越趨近於 0 越好。
r = [∑xiyi - m (∑xi / m)(∑yi / m)]/ sqr (式1-10) *
在(式1-1)中,m為樣本容量,即實驗次數;xi、yi分別任意一組實驗x、y的數值。微積分應用課題一 最小二乘法
從前面的學習中, 我們知道最小二乘法可以用來處理一組資料, 可以從一組測定的資料中尋求變數之間的依賴關係, 這種函式關係稱為經驗公式. 本課題將介紹最小二乘法的精確定義及如何尋求 與 之間近似成線性關係時的經驗公式. 假定實驗測得變數之間的 個資料 , , …, , 則在 平面上, 可以得到 個點 , 這種圖形稱為「散點圖」, 從圖中可以粗略看出這些點大致散落在某直線近旁, 我們認為 與 之間近似為一線性函式, 下面介紹求解步驟.
考慮函式 , 其中 和 是待定常數. 如果 在一直線上, 可以認為變數之間的關係為 . 但一般說來, 這些點不可能在同一直線上.
記 , 它反映了用直線 來描述 , 時, 計算值 與實際值 產生的偏差. 當然要求偏差越小越好, 但由於 可正可負, 因此不能認為總偏差 時, 函式 就很好地反映了變數之間的關係, 因為此時每個偏差的絕對值可能很大. 為了改進這一缺陷, 就考慮用 來代替 .
但是由於絕對值不易作解析運算, 因此, 進一步用 來度量總偏差. 因偏差的平方和最小可以保證每個偏差都不會很大. 於是問題歸結為確定 中的常數 和 , 使 為最小.
用這種方法確定係數 , 的方法稱為最小二乘法.
3樓:匿名使用者
感覺用matlab更加的方便點
利用vb語言編寫最小二乘法直線擬合的程式,急求各位大神幫忙
4樓:
用vb程式設計的時候,需要將text2(1到9)[縱座標] 陣列中的資料對text1(1到9)[橫座標]擬合直線, 求得斜率,顯示到**框裡面,並標出座標刻度
用VB編寫程式,用VB編寫一個程式
樓上的,不許要引用吧 option explicit private declare function getdrivetype lib kernel32 alias getdrivetypea byval ndrive as string as long private declare funct...
求用vb語言編寫好的軟體,如何用VB編寫一個簡單的減法程式?
module1 type student name as string age as integer birth as data adress as string end type form1 text1 text2.passwordchar command1 click if text1.text...
用VB編寫程式,求S A B C ,階乘的計算分別用Su
1 用sub實現的過程bai 如下 du dim a,b,c,s a 1b 2 c 3s 0 sub jc x dim v v 1while x 0 v v x x x 1 wend s s v end sub jc a jc b jc c msgbox s 2 用function的過程zhi如下 ...