vb課程設計報告(直線擬合).doc_第1頁
vb課程設計報告(直線擬合).doc_第2頁
vb課程設計報告(直線擬合).doc_第3頁
vb課程設計報告(直線擬合).doc_第4頁
vb課程設計報告(直線擬合).doc_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

直線擬合一、功能本題目重要是用于將實驗中得到的具有線性特征的一組數據通過最小二乘法擬合成直線,求出其直線方程和繪制出該直線的圖形。二、詳細設計本題目的程序設計由三個窗體組成。在Form1中,有1個框架控件、1個標簽控件、2個命令按鈕和1個由6個單選按鈕組成的控件數組。單選按鈕控件數組用來選擇要輸入的數據組數,當選擇好后,單擊“確定”按鈕,就可以進入下一個窗體。單擊“取消”按鈕則退出程序Form1的代碼見附件。在Form2中有2個命令按鈕、20個文本框(每10個組成一個控件數組)、12個標簽控件和許多直線組成。在文本框中輸入實驗數據后,點擊“確定”按鈕,若數據沒有全部輸入,則出現消息框,提醒沒有完全輸入。若已經完全輸入,則顯示Form3,隱藏Form2。與此同時,對實驗數據計算,得出擬合直線的截距和斜率,并在Form3的標簽控件1中體現;根據所得的斜率和截距得到擬合直線方程,并在Form3的標簽2中體現;還可以在Form3中繪出擬合直線和每個實驗點(用綠色),根據實驗數據調整坐標系統(tǒng),畫出擬合直線。Form2的代碼見附件。三、調試一開始,我是在三樓上機,用的是VB6.0,遇到的第一個問題是全局變量的設置問題。我不知道是我一個暑假把學的都忘了,最后終于在課本的幫助下成功做出來了。第二個問題是顯示擬合直線。一開始,我在Form3中畫了一個圖片框,運行時總顯示不了直線,后來索性將它刪掉,再次運行時終于能出現直線,可是直線的位置與設想相差太大了。連續(xù)嘗試了1個多星期后,終于明白了,原來我直接利用得到的直線方程的點的坐標在窗體上畫直線是不對的,因為我所畫的坐標軸的單位長度和窗體的單位長度不相等,之間需要一定的轉換。于是再次修改代碼,可還是沒有出現預想的情況。重新檢查后,沒有發(fā)現程序錯誤。我又嘗試輸入一組特殊數據:(1,3)、(2,5)、(3,7)、(4,9)、(5,11),它們的擬合直線應該是Y=2X+1,斜率是2,截距是1,可運行后的結果讓我大吃一驚,斜率是-0.2,截距是-0.1。我再次檢查了數據計算部分的代碼,沒有發(fā)現錯誤,請教了好幾位同學也沒有解決問題,如此又郁悶了一個星期。不知什么時候,心中有種感覺書上有錯誤。找來大學物理實驗課本,果不其然,在第三十七頁找到類似的公式,經計算,終于發(fā)現課程設計課本上第211頁 “令 ”中的“+”號應改為“-”。修改后,在調試過程中再也沒出現什么大的問題。四、輸入輸出數據當選擇5組數據時,:(54,76)、(65,83)、(87,89)、(82,61)、(34,22);:(34,56)、(24,89)、(29,59)、(78,61)、(94,57);:(58,26)、(44,77)、(55,89)、(67,65)、(76,98)。運行結果:截距A=7.9171725,斜率B=0.9041657,直線方程為Y=0.9041657X+7.9171725,坐標比例:1:截距A=74.72493,斜率B=-0.199323,直線方程為Y=74.7293X0.199323,坐標比例:1:截距A=41.1017,斜率B=-0.4983051,直線方程為Y=41.1017X+0.4983051,坐標比例:1當選擇6組數據時,:(54,76)、(65,83)、(87,89)、(82,61)、(34,22)、(44,88);:(34,56)、(24,89)、(29,59)、(78,61)、(94,57)、(44,88);:(58,26)、(44,77)、(55,89)、(67,65)、(76,98)、(44,88)。運行結果:截距A=33.64924,斜率B=0.5931818,直線方程為Y=0.5931818X+33.64924,坐標比例:1:截距A=80.64387,斜率B=-0.2735675,直線方程為Y=-0.2735675X8+0.64387,坐標比例:1:截距A=69.0728,斜率B=8.381743E-02,直線方程為Y=8.381743E-02X+69.0728,坐標比例:1五、課程設計總結經過此次程序設計,使我對許多事情的看法有了改變。記得上學期學VB的時候,感覺VB很簡單,老師布置的作業(yè)也很快完成,多余的時間就在偷偷玩游戲。剛知道自己要做直線擬合這道題時,翻了一下書,感覺很簡單,相比選擇難題的同學,我心中不免有些得意,心想:快速做完后,再做一個,說不定能得個優(yōu)。剛開始事情就有點不順,但也沒什么大問題,一直到寫完所有程序,開始運行的時候,才發(fā)覺最糟糕的事情出現了運行中沒有出現擬合直線,其他的問題都好辦,可最終顯示不出擬合直線就是失敗,眼看著交作業(yè)的日子越來越近,心中卻一點思緒都沒有,而此時我又在金工實習,再加上二級考試的臨近,我急得像熱鍋上的螞蟻,不知怎么辦才好。此時,我才真正體會到編寫一個真正有用的程序是多么的困難,那是要花上許多的心血才得來的。事情終于有了轉機,在我棄用圖片框后終于發(fā)現要顯示滿足要求的直線首先要進行坐標轉換,窗體是以緹為單位,而平面直角坐標系以“1”為單位,二者需要轉換。明白這一點之后,我終于能在窗體上顯示出直線了,然而,并非我所期望的直線。我于是假設直線斜率為2,截距為1,得到一組數據,將它們輸入Form2的文本框中,結果發(fā)現得到的直線斜率和截距不是2和1,而是0.02和0.01左右小的數字,我暈倒。檢查一便代碼后發(fā)覺與書上提供的公式相吻合,我沒有錯,可程序的運行結果卻如此荒謬,難道注定我此次設計不合格,明年再來一次嗎?后來,我終于對書本產生懷疑,正是這一懷疑給一切帶來了生機,我找出大學物理實驗課本,找到相關內容,終于發(fā)現程序設計課本錯了,一個減號被打印成加號。找到問題所在后,一切便盡在掌握之中。六、窗體圖示七附件Form1:Private Sub Command1_Click() 顯示第二個窗體Form1.HideForm2.ShowForm3.Hidezxnh = MsgBox(你必須完全輸入所選的項目! & Chr(10) & Chr(13) & _ 否則程序將會出錯!, 48, 直線擬合)End SubPrivate Sub Command2_Click() 結束程序EndEnd Sub使第二個窗體的文本框按照第一個窗體給出的數據組數顯示Private Sub Option1_Click()Form2.Label6.Enabled = FalseForm2.Label7.Enabled = FalseForm2.Label8.Enabled = FalseForm2.Label9.Enabled = FalseForm2.Label10.Enabled = FalseFor n = 6 To 10 Form2.Text1(n).Enabled = False Form2.Text1(n).BackColor = &H8000000F Form2.Text2(n).Enabled = False Form2.Text2(n).BackColor = &H8000000FNextEnd SubPrivate Sub Option2_Click()Form2.Label6.Enabled = TrueForm2.Label7.Enabled = FalseForm2.Label8.Enabled = FalseForm2.Label9.Enabled = FalseForm2.Label10.Enabled = FalseForm2.Text1(6).Enabled = TrueForm2.Text1(6).BackColor = &HFFFFFFForm2.Text2(6).Enabled = TrueForm2.Text2(6).BackColor = &HFFFFFFFor n = 7 To 10 Form2.Text1(n).Enabled = False Form2.Text1(n).BackColor = &H8000000F Form2.Text2(n).Enabled = False Form2.Text2(n).BackColor = &H8000000FNextEnd SubPrivate Sub Option3_Click()Form2.Label6.Enabled = TrueForm2.Label7.Enabled = TrueForm2.Label8.Enabled = FalseForm2.Label9.Enabled = FalseForm2.Label10.Enabled = FalseFor n = 6 To 7 Form2.Text1(n).Enabled = True Form2.Text1(n).BackColor = &HFFFFFF Form2.Text2(n).Enabled = True Form2.Text2(n).BackColor = &HFFFFFFNext For n = 8 To 10 Form2.Text1(n).Enabled = False Form2.Text1(n).BackColor = &H8000000F Form2.Text2(n).Enabled = False Form2.Text2(n).BackColor = &H8000000FNextEnd SubPrivate Sub Option4_Click()Form2.Label6.Enabled = TrueForm2.Label7.Enabled = TrueForm2.Label8.Enabled = TrueForm2.Label9.Enabled = FalseForm2.Label10.Enabled = FalseFor n = 6 To 8 Form2.Text1(n).Enabled = True Form2.Text1(n).BackColor = &HFFFFFF Form2.Text2(n).Enabled = True Form2.Text2(n).BackColor = &HFFFFFFNextFor n = 9 To 10 Form2.Text1(n).Enabled = False Form2.Text1(n).BackColor = &H8000000F Form2.Text2(n).Enabled = False Form2.Text2(n).BackColor = &H8000000FNextEnd SubPrivate Sub Option5_Click()Form2.Label6.Enabled = TrueForm2.Label7.Enabled = TrueForm2.Label8.Enabled = TrueForm2.Label9.Enabled = TrueForm2.Label10.Enabled = FalseForm2.Text1(10).Enabled = FalseForm2.Text1(10).BackColor = &H8000000FForm2.Text2(10).Enabled = FalseForm2.Text2(10).BackColor = &H8000000FFor n = 6 To 9 Form2.Text1(n).Enabled = True Form2.Text1(n).BackColor = &HFFFFFF Form2.Text2(n).Enabled = True Form2.Text2(n).BackColor = &HFFFFFFNextEnd SubPrivate Sub Option6_Click()Form2.Label6.Enabled = TrueForm2.Label7.Enabled = TrueForm2.Label8.Enabled = TrueForm2.Label9.Enabled = TrueForm2.Label10.Enabled = TrueFor n = 6 To 10 Form2.Text1(n).Enabled = True Form2.Text1(n).BackColor = &HFFFFFF Form2.Text2(n).Enabled = True Form2.Text2(n).BackColor = &HFFFFFFNextEnd SubForm2:Option Base 1Dim m As IntegerDim X(10) As SingleDim Y(10) As SinglePrivate Sub Command1_Click() 進入第三個繪圖窗體Form1.HideForm2.HideForm3.ShowDim A As Single 截距Dim B As Single 斜率Dim c As SingleDim d As SingleDim e As SingleDim f As SingleDim W As SingleDim R As SingleDim T As Single討論點的個數If Form2.Text1(5).Enabled = True Then m = 5If Form2.Text1(6).Enabled = True Then m = 6If Form2.Text1(7).Enabled = True Then m = 7If Form2.Text1(8).Enabled = True Then m = 8If Form2.Text1(9).Enabled = True Then m = 9If Form2.Text1(10).Enabled = True Then m = 10對點的x.y坐標進行賦值If m = 5 Then For n = 1 To 5 X(n) = Text1(n).Text Y(n) = Text2(n).Text NextEnd IfIf m = 6 Then For n = 1 To 6 X(n) = Text1(n).Text Y(n) = Text2(n).Text NextEnd IfIf m = 7 Then For n = 1 To 7 X(n) = Text1(n).Text Y(n) = Text2(n).Text NextEnd IfIf m = 8 Then For n = 1 To 8 X(n) = Text1(n).Text Y(n) = Text2(n).Text NextEnd IfIf m = 9 Then For n = 1 To 9 X(n) = Text1(n).Text Y(n) = Text2(n).Text NextEnd IfIf m = 10 Then For n = 1 To 10 X(n) = Text1(n).Text Y(n) = Text2(n).Text NextEnd If For n = 1 To m c = X(n) + c d = X(n) * X(n) + d e = X(n) * Y(n) + e f = Y(n) + fNextA = (e * c - f * d) / (c * c - m * d) 計算直線的截距B = (c * f - m * e) / (c * c - m * d) 計算直線的斜率打印數據方程的位置Form3.CurrentX = 200Form3.CurrentY = 350Form3.Print 直線斜率(B)= & BForm3.CurrentX = 200Form3.CurrentY = 580Form3.Print 直線截距(A)= & AForm3.CurrentX = 200Form3.CurrentY = 810Form3.Print 直線方程為:; Spc(3); Y= & B & X+ & A在坐標圖上打印出點來For n = 1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論