2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  數值分析課程設計說明書</p><p>  班級: 計算B092 姓名: </p><p>  設計題目: 數值積分軟件 </p><p>  設計時間: 2012.2.27 至 2012.3.2 </p><p>  指導教

2、師: 李 慧 </p><p>  評 語: </p><p>  _________________________________________</p><p>  ___________________________________

3、______</p><p>  _________________________________________</p><p>  _________________________________________</p><p>  評閱成績:__ __評閱教師:__ ___</p><p><b>  目 錄<

4、;/b></p><p><b>  設計總說明1</b></p><p><b>  前 言2</b></p><p>  第1章 總體設計方案3</p><p>  1.1 軟件結構設計3</p><p>  第2章 算法分析及設計4</p>

5、<p>  2.1自適應梯形法4</p><p>  2.1.1自適應梯形法算法分析:4</p><p>  2.1.2自適應梯形法算法設計:4</p><p>  2.2復化辛卜生法5</p><p>  2.2.1復化辛卜生法算法分析5</p><p>  2.2.2復化辛卜生法算法設計5&

6、lt;/p><p>  2.3龍貝格算法6</p><p>  2.3.1龍貝格算法分析6</p><p>  2.3.2龍貝格算法設計6</p><p>  第3章 軟件詳細設計8</p><p>  3.1主界面設計8</p><p><b>  3.2功能設計9</

7、b></p><p>  3.2.1自適應梯形法的實現9</p><p>  3.2.2復化辛卜生法的實現11</p><p>  3.2.3龍貝格算法的實現13</p><p>  3.2.4算法簡介功能設計13</p><p>  第4章 軟件測試16</p><p>  4

8、.1自適應梯形法的測試16</p><p>  4.1.1 軟件計算16</p><p>  4.1.2 Matlab計算16</p><p>  4.2復化辛卜生法的測試17</p><p>  4.2.1 軟件計算17</p><p>  4.2.2 Matlab計算17</p><

9、p>  4.3龍貝格法的測試18</p><p>  4.3.1 軟件計算18</p><p>  4.3.2 Matlab計算18</p><p>  4.4測試結果18</p><p><b>  第5章 總結19</b></p><p>  參 考 文 獻20</p&

10、gt;<p><b>  附 錄21</b></p><p><b>  設計總說明</b></p><p>  數值積分是求定積分的近似值的數值方法。即用被積函數的有限個抽樣值的離散或加權平均近似值代替定積分的值。求某函數的定積分時,在多數情況下,被積函數的原函數很難用初等函數表達出來,因此能夠借助微積分學的牛頓-萊布尼茲公式計

11、算定積分的機會是不多的。另外,許多實際問題中的被積函數往往是列表函數或其他形式的非連續(xù)函數,對這類函數的定積分,也不能用不定積分方法求解。由于以上原因,數值積分的理論與方法一直是計算數學研究的基本課題。對微積分學做出杰出貢獻的數學大師,如I.牛頓、L.歐拉、C.F.高斯等人也在數值積分這個領域做出了各自的貢獻,并奠定了它的理論基礎。</p><p>  用數值積分的計算理論加以C++語言編寫程序來計算數值積分,不

12、僅可以更好的掌握數值積分本身,還可以提高軟件開發(fā)的能力。把所學知識用于實際生活中是非常有必要的。好的積分軟件不僅可以計算出給定函數的定積分,還能準確的計算出各種積分方法的積分值。因此,數值積分軟件的開發(fā)是非常實用及有必要的。</p><p>  關鍵詞: 龍貝格算法;自適應梯形法;復化辛卜生法;MFC </p><p><b>  前 言</b></p>

13、<p>  本課程設計是在學習了數值分析和C語言等有關課程后,通過實際的操作來熟悉數值分析和相關軟件的應用,培養(yǎng)獨立的完成對相關課題或者項目的分析能力、設計能力和調試能力。好的數值積分軟件可以方便的為我們求解出積分值。</p><p>  課程設計,著重培養(yǎng)的是學生的自學能力,以及獨立分析互聯網上和圖書館里的各種資料,用來豐富自己的知識并且提高對Matlab、VC++等軟件的實際操作能力。通過這次的課

14、程設計,使我們對已經學習過的數值分析課程的進一步的掌握,對知識進行最大程度的消化融匯。因此這次的課程設計對我們來說具有非常重要的作用:為以后學習工作做必要的準備和實踐,提高自身對數值分析的認識以及軟件開發(fā)的能力。</p><p>  第1章 總體設計方案</p><p><b>  軟件結構設計</b></p><p>  圖1.1.1 軟件功

15、能結構圖</p><p>  第2章 算法分析及設計</p><p><b>  2.1自適應梯形法</b></p><p>  2.1.1自適應梯形法算法分析:</p><p>  變步長梯形算法依據公式。計算時可按如下步驟:</p><p><b>  輸入精度;</b>

16、</p><p><b>  s=0;</b></p><p><b> ?、?lt;/b></p><p><b> ?、?。</b></p><p>  2.1.2自適應梯形法算法設計:</p><p>  float AutoTrap(float (*f)

17、(float),float a,float b)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  float x,s,h=b-a;</p><p>  float t1,t2=h/2.0*(f(a)+f(b));</p>&

18、lt;p><b>  n=1;</b></p><p><b>  do</b></p><p><b>  {</b></p><p><b>  s=0.0;</b></p><p><b>  t1=t2;</b><

19、/p><p>  for(i=0;i<=n-1;i++)</p><p><b>  {</b></p><p>  x=a+i*h+h/2;</p><p><b>  s+=f(x);</b></p><p><b>  }</b></p&g

20、t;<p>  t2=(t1+s*h)/2.0;</p><p><b>  n*=2;</b></p><p><b>  h/=2.0;</b></p><p><b>  }</b></p><p>  while(fabs(t2-t1)>1e-6);

21、</p><p>  return t2;</p><p><b>  }</b></p><p><b>  2.2復化辛卜生法</b></p><p>  2.2.1復化辛卜生法算法分析</p><p>  復化辛卜生公式為,計算過程為:</p><p

22、><b>  令;</b></p><p><b>  對計算</b></p><p><b>  。</b></p><p>  2.2.2復化辛卜生法算法設計</p><p>  float Simpson(float (*f)(float),float a,floa

23、t b, int n)</p><p><b>  {</b></p><p><b>  int k;</b></p><p>  float s,s1,s2=0.0;</p><p>  float h=(b-a)/n;</p><p>  s1=f(a+h/2);<

24、;/p><p>  for(k=1;k<=n-1;k++)</p><p><b>  {</b></p><p>  s1+=f(a+k*h+h/2);</p><p>  s2+=f(a+k*h);</p><p><b>  }</b></p><

25、p>  s=h/6*(f(a)+4*s1+2*s2+f(b));</p><p><b>  return s;</b></p><p><b>  }</b></p><p><b>  2.3龍貝格算法</b></p><p>  2.3.1龍貝格算法分析</p

26、><p>  2.3.2龍貝格算法設計</p><p>  float Romberg(float a,float b,float (*f)(float),float epsilon)</p><p><b>  {</b></p><p>  int n=1,k;</p><p>  float h

27、=b-a,x,temp;</p><p>  float T1,T2,S1,S2,C1,C2,R1,R2;</p><p>  T1=(b-a)/2*((*f)(a)+(*f)(b));</p><p><b>  while(1)</b></p><p><b>  {</b></p>

28、<p><b>  temp=0;</b></p><p>  for(k=0;k<=n-1;k++)</p><p><b>  {</b></p><p>  x=a+k*h+h/2;</p><p>  temp+=(*f)(x);</p><p>

29、<b>  }</b></p><p>  T2=(T1+temp*h)/2;</p><p>  if(fabs(T2-T1)<epsilon) </p><p>  return T2;</p><p>  S2=T2+(T2-T1)/3.0;</p><p>  if(n==1){T1

30、=T2;S1=S2;h/=2;n*=2;continue;}</p><p>  C2=S2+(S2-S1)/15;</p><p>  if(n==2){C1=C2;T1=T2;S1=S2;h/=2;n*=2;continue;}</p><p>  R2=C2+(C2-C1)/63;</p><p>  if(n==4){R1=R2;C1

31、=C2;T1=T2;S1=S2;h/=2;n*=2;continue;}</p><p>  if(fabs(R2-R1)<epsilon) </p><p>  return R2;</p><p>  R1=R2;C1=C2;T1=T2;S1=S2;h/=2;n*=2;</p><p><b>  }</b>&

32、lt;/p><p><b>  }</b></p><p>  第3章 軟件詳細設計</p><p><b>  3.1主界面設計</b></p><p>  數值積分軟件主界面如圖3.1.1所示,包括兩大功能。一個是選擇求積方法,另一個是查看相應算法的算法理論。</p><p>

33、;  為了使軟件美觀,還可以為軟件添加背景圖片以及顯示系統(tǒng)時間,這樣就使軟件顯得不再單調。</p><p>  圖3.1.1 主界面</p><p>  添加背景圖片關鍵代碼:</p><p>  void CAutoTrap::OnPaint() </p><p><b>  {</b></p><

34、p>  CPaintDC dc(this); // device context for painting</p><p>  CRect rect;</p><p>  GetClientRect(&rect);</p><p>  CDC dcMem;</p><p>  dcMem.CreateCompatibleDC

35、(&dc);</p><p>  CBitmap bmpBackground;</p><p>  bmpBackground.LoadBitmap(IDB_BITMAP2); </p><p>  BITMAP bitmap;</p><p>  bmpBackground.GetBitmap(&bitmap);<

36、;/p><p>  CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground); </p><p>  dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);</p><p&g

37、t;<b>  }</b></p><p><b>  顯示時間代碼:</b></p><p>  void CMyDlg::OnTimer(UINT nIDEvent) </p><p><b>  {</b></p><p>  CDialog::OnTimer(nIDEv

38、ent);</p><p>  CString str;</p><p>  CTime theTime = CTime::GetCurrentTime(); </p><p>  str.Format("%02d年%02d月%02d日 %02d:%02d:%02d",</p><p>  theTime.GetYear(

39、),theTime.GetMonth(),theTime.GetDay(),</p><p>  theTime.GetHour(),theTime.GetMinute(),theTime.GetSecond());</p><p>  SetDlgItemText(IDC_STATIC_TIME,str);</p><p>  CDialog::OnTimer(n

40、IDEvent);</p><p><b>  }</b></p><p><b>  3.2功能設計</b></p><p>  3.2.1自適應梯形法的實現</p><p>  通過類向導為控件賦值,從界面獲取上下界以及精度值,從而進行計算,將結果顯示在對應框。若輸入錯誤的數據將進行錯誤提示。為

41、了美觀,以相同方法添加背景圖片。</p><p>  圖3.2.1 自適應梯形法</p><p>  圖3.2.2積分區(qū)間錯誤提示 圖3.2.3精度值錯誤提示</p><p><b>  關鍵代碼:</b></p><p>  錯誤檢查及提示代碼:</p><p> 

42、 if(m_xiajie==m_shangjie)</p><p><b>  {</b></p><p>  MessageBox("積分區(qū)間錯誤!");</p><p><b>  return;</b></p><p><b>  }</b></

43、p><p>  if(m_epsilon<=0)</p><p><b>  {</b></p><p>  MessageBox("精度值有誤!");</p><p><b>  return;</b></p><p><b>  }<

44、/b></p><p>  3.2.2復化辛卜生法的實現</p><p>  同樣,通過類向導為控件賦值,從界面獲取上下界、劃分區(qū)間及運算次數,從而進行計算,將結果顯示在列表框。若輸入錯誤的數據將進行錯誤提示。</p><p>  圖3.2.4 復化辛卜生法</p><p>  圖3.2.5 錯誤提示</p><p&

45、gt;<b>  關鍵代碼:</b></p><p>  列表框表頭初始化代碼:</p><p>  BOOL CSimpson::OnInitDialog() </p><p><b>  {</b></p><p>  Cdialog::OnInitDialog();</p>&l

46、t;p>  // TODO: Add extra initialization here</p><p>  m_combo.SetCurSel(0);</p><p>  m_List1.SetExtendedStyle(LVS_EX_FLATSB</p><p>  |LVS_EX_FULLROWSELECT</p><p>  |

47、LVS_EX_HEADERDRAGDROP</p><p>  |LVS_EX_ONECLICKACTIVATE</p><p>  |LVS_EX_GRIDLINES);</p><p>  m_List1.InsertColumn(0,”s[n]”, LVCFMT_LEFT, 80);</p><p>  m_List1.InsertCo

48、lumn(1,”值”, LVCFMT_LEFT, 140);</p><p>  return TRUE; // return TRUE unless you set the focus to a control</p><p>  // EXCEPTION: OCX Property Pages should return FALSE</p><p><b

49、>  }</b></p><p><b>  結果顯示代碼:</b></p><p>  for(int j=0;j<m_cishu;j++)</p><p><b>  {</b></p><p>  if(index==0)</p><p>  s

50、=Simpson(f7,m_xiajie,m_shangjie,n);</p><p>  if(index==1)</p><p>  s=Simpson(f8,m_xiajie,m_shangjie,n);</p><p>  if(index==2)</p><p>  s=Simpson(f9,m_xiajie,m_shangjie,

51、n);</p><p>  p.Format("%d",n);</p><p>  p="s["+p+"]";</p><p>  q.Format("%f",s);</p><p>  m_List1.InsertItem(j,"");<

52、;/p><p>  m_List1.SetItemText(j,0,p);</p><p>  m_List1.SetItemText(j,1,q);</p><p><b>  n*=2;</b></p><p><b>  }</b></p><p>  3.2.3龍貝格算法

53、的實現</p><p>  同樣,通過類向導為控件賦值,從界面獲取上下界及精度值。單機計算按鈕,即可將結果顯示在結果框。單機返回按鈕,返回主界面。若輸入錯誤的數據將進行錯誤提示。</p><p>  圖3.2.6 龍貝格算法</p><p>  3.2.4算法簡介功能設計</p><p>  算法簡介功能就是對每種算法的簡單介紹,單機相應按鈕

54、就可以查看。</p><p>  圖3.2.7 自適應梯形法簡介</p><p>  圖3.2.8 復化辛卜生法簡介</p><p>  圖3.2.9 龍貝格算法簡介</p><p><b>  第4章 軟件測試</b></p><p>  4.1自適應梯形法的測試</p><

55、p>  4.1.1 軟件計算</p><p>  用本軟件計算結果如下</p><p>  圖4.1.1 自適應梯形法結果顯示</p><p>  4.1.2 Matlab計算</p><p>  Matlab計算結果如下:</p><p><b>  >> syms x</b>

56、</p><p>  f=int(sin(x)/x,x,0,1)</p><p><b>  f =</b></p><p><b>  sinint(1)</b></p><p>  >> sinint(1)</p><p><b>  ans =&l

57、t;/b></p><p><b>  0.9461</b></p><p>  4.2復化辛卜生法的測試</p><p>  4.2.1 軟件計算</p><p>  本軟件計算結果如下:</p><p>  圖4.2.1 復化辛卜生法結果顯示</p><p>  

58、4.2.2 Matlab計算</p><p>  Matlab計算結果如下:</p><p><b>  >> syms x</b></p><p>  f=int(cos(x),x,0,1)</p><p><b>  f =</b></p><p><b

59、>  sin(1)</b></p><p><b>  >> sin(1)</b></p><p><b>  ans =</b></p><p><b>  0.8415</b></p><p>  4.3龍貝格法的測試</p>&

60、lt;p>  4.3.1 軟件計算</p><p>  本軟件計算結果如下:</p><p>  圖4.3.1 龍貝格算法結果顯示</p><p>  4.3.2 Matlab計算</p><p>  Matlab計算結果如下:</p><p>  >> syms x</p><

61、p>  f=int(1/(1+x^2),x,0,1)</p><p><b>  f =</b></p><p><b>  pi/4</b></p><p><b>  4.4測試結果</b></p><p>  可以看到每一種算法都接近其真實值,所以本軟件計算結果具有

62、相當的可靠性??梢宰鳛楹唵畏e分的計算工具。</p><p><b>  第5章 總結</b></p><p>  通過一周的時間終于完成了數值分析軟件的設計開發(fā),由于時間有限不免存在很多問題。在課程設計的過程中困難不時的出現,很多時候覺得無可入手,想盡辦法也不知道該怎么解決。但是這個時候是最關鍵的,進一步的堅持和探討后終于是“功夫不負有心人”。面對各種考驗,在堅持不懈

63、的努力后總會解決。</p><p>  數值積分軟件的設計不同于其他軟件的設計,它要求軟件能夠準確并快速的計算出被積函數的積分值。在實現過程中發(fā)現每一步都沒有想象的那樣順利。分析問題原因,首先是對算法的不精通,其次是對MFC編程的不夠熟練。還有些問題是不可避免的,比如數學與編程語言的結合本身就有一定的難度。類似這樣的問題只能一步一步探索了,這也是軟件開發(fā)過程中必不可少的階段。</p><p&g

64、t;  本軟件界面清新,操作簡單,能夠快速準確的計算一定范圍內的積分值。在某種程度上還是具有一定的靈活性的,比如可以設置精度,積分區(qū)間,劃分區(qū)間份數等。這樣,在可選范圍內還是能夠比較準確的求解的。用MFC編程求解數值積分的過程中最大的困難就是被積函數不能自定義,也就是被積函數是在局域范圍內的,也是目前為止沒有解決的問題,這是本軟件有待改進的地方。</p><p>  當然,軟件的開發(fā)離不開好的資料和同學的交流。在

65、這次課程設計中深深感受到了同學之間交流合作的重要性。交流不但可以發(fā)現新的問題,提高解決問題的效率,而且可以快速的學習到新的知識。</p><p>  最后感謝這次課程設計中給予我?guī)椭睦蠋熀屯瑢W,是你們的幫助才使課程設計有了快速的進展。</p><p><b>  參 考 文 獻</b></p><p>  [1] 陳越,童若峰. 數值分析課程

66、設計 [M]. 浙江:浙江大學出版社, 2009.</p><p>  [2] 李慶揚,王能超.數值分析 [M]. 北京:清華大學出版社, 2011.</p><p><b>  附 錄</b></p><p><b>  源程序清單</b></p><p>  自適應梯形法關鍵代碼:</p&

67、gt;<p>  float f1(float x)</p><p><b>  {</b></p><p><b>  if(x==0)</b></p><p><b>  return 1;</b></p><p><b>  else</b&

68、gt;</p><p>  return sin(x)/x;</p><p><b>  }</b></p><p>  float f2(float x)</p><p><b>  {</b></p><p>  return cos(x);</p><

69、;p><b>  }</b></p><p>  float f3(float x)</p><p><b>  {</b></p><p>  return 1/(1+x*x);</p><p><b>  }</b></p><p>  flo

70、at AutoTrap(float (*f)(float),float a,float b,float epsilon)</p><p><b>  {</b></p><p><b>  int i,n;</b></p><p>  float x,s,h=b-a;</p><p>  float

71、 t1,t2=h/2.0*(f(a)+f(b));</p><p><b>  n=1;</b></p><p><b>  do</b></p><p><b>  {</b></p><p><b>  s=0.0;</b></p>&l

72、t;p><b>  t1=t2;</b></p><p>  for(i=0;i<=n-1;i++)</p><p><b>  {</b></p><p>  x=a+i*h+h/2;</p><p><b>  s+=f(x);</b></p>&

73、lt;p><b>  }</b></p><p>  t2=(t1+s*h)/2.0;</p><p><b>  n*=2;</b></p><p><b>  h/=2.0;</b></p><p><b>  }</b></p>

74、<p>  while(fabs(t2-t1)>epsilon);</p><p>  return t2;</p><p><b>  }</b></p><p>  void CAutoTrap::Onjisuan() </p><p><b>  {</b></p>

75、<p>  // TODO: Add your control notification handler code here</p><p><b>  //int i;</b></p><p>  UpdateData(true);</p><p>  if(m_xiajie==m_shangjie)</p>&

76、lt;p><b>  {</b></p><p>  MessageBox("積分區(qū)間錯誤!");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if(m_epsilon<=0)&

77、lt;/p><p><b>  {</b></p><p>  MessageBox("精度值有誤!");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  int index

78、;</p><p>  index=m_combo.GetCurSel();</p><p>  if(index==0)</p><p>  m_result=AutoTrap(f1,m_xiajie,m_shangjie,m_epsilon);</p><p>  if(index==1)</p><p>  m_

79、result=AutoTrap(f2,m_xiajie,m_shangjie,m_epsilon);</p><p>  if(index==2)</p><p>  m_result=AutoTrap(f3,m_xiajie,m_shangjie,m_epsilon);</p><p>  UpdateData(FALSE);</p><p&g

80、t;<b>  }</b></p><p>  BOOL CAutoTrap::OnInitDialog() </p><p><b>  {</b></p><p>  CDialog::OnInitDialog();</p><p>  // TODO: Add extra initializa

81、tion here</p><p>  m_combo.SetCurSel(0);</p><p>  return TRUE; // return TRUE unless you set the focus to a control</p><p>  // EXCEPTION: OCX Property Pages should return FALSE<

82、;/p><p><b>  }</b></p><p>  復化辛卜生法關鍵代碼:</p><p>  float f7(float x)</p><p><b>  {</b></p><p><b>  if(x==0)</b></p>&

83、lt;p><b>  return 1;</b></p><p><b>  else</b></p><p>  return sin(x)/x;</p><p><b>  }</b></p><p>  float f8(float x)</p>&l

84、t;p><b>  {</b></p><p>  return cos(x);</p><p><b>  }</b></p><p>  float f9(float x)</p><p><b>  {</b></p><p>  retur

85、n 1/(1+x*x);</p><p><b>  }</b></p><p>  float Simpson(float (*f)(float),float a,float b, int n)</p><p><b>  {</b></p><p><b>  int k;</b

86、></p><p>  float s,s1,s2=0.0;</p><p>  float h=(b-a)/n;</p><p>  s1=f(a+h/2);</p><p>  for(k=1;k<=n-1;k++)</p><p><b>  {</b></p>&

87、lt;p>  s1+=f(a+k*h+h/2);</p><p>  s2+=f(a+k*h);</p><p><b>  }</b></p><p>  s=h/6*(f(a)+4*s1+2*s2+f(b));</p><p><b>  return s;</b></p>

88、<p><b>  }</b></p><p>  void CSimpson::Onjisuan() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p&

89、gt;  UpdateData(true);</p><p>  if(m_xiajie==m_shangjie)</p><p><b>  {</b></p><p>  MessageBox("積分區(qū)間錯誤!");</p><p><b>  return;</b><

90、/p><p><b>  }</b></p><p>  if(m_n==0)</p><p><b>  {</b></p><p>  MessageBox("區(qū)間劃分錯誤!");</p><p><b>  return;</b>&

91、lt;/p><p><b>  }</b></p><p>  if(m_cishu==0)</p><p><b>  {</b></p><p>  MessageBox("請輸入運行次數!");</p><p><b>  return;<

92、;/b></p><p><b>  }</b></p><p>  m_List1.DeleteAllItems();</p><p>  int index,n;</p><p><b>  n=m_n;</b></p><p>  CString p,q;<

93、/p><p><b>  float s;</b></p><p>  index=m_combo.GetCurSel();</p><p>  for(int j=0;j<m_cishu;j++)</p><p><b>  {</b></p><p>  if(inde

94、x==0)</p><p>  s=Simpson(f7,m_xiajie,m_shangjie,n);</p><p>  if(index==1)</p><p>  s=Simpson(f8,m_xiajie,m_shangjie,n);</p><p>  if(index==2)</p><p>  s=Si

95、mpson(f9,m_xiajie,m_shangjie,n);</p><p>  p.Format("%d",n);</p><p>  p="s["+p+"]";</p><p>  q.Format("%f",s);</p><p>  m_List1.I

96、nsertItem(j,"");</p><p>  m_List1.SetItemText(j,0,p);</p><p>  m_List1.SetItemText(j,1,q);</p><p><b>  n*=2;</b></p><p><b>  }</b><

97、/p><p>  UpdateData(FALSE);</p><p><b>  }</b></p><p>  龍貝格算法關鍵代碼:</p><p>  float f4(float x)</p><p><b>  {</b></p><p><

98、;b>  if(x==0)</b></p><p><b>  return 1;</b></p><p><b>  else</b></p><p>  return sin(x)/x;</p><p><b>  }</b></p><

99、;p>  float f5(float x)</p><p><b>  {</b></p><p>  return cos(x);</p><p><b>  }</b></p><p>  float f6(float x)</p><p><b>  

100、{</b></p><p>  return 1/(1+x*x);</p><p><b>  }</b></p><p>  float Romberg(float a,float b,float (*f)(float),float epsilon)</p><p><b>  {</b&g

101、t;</p><p>  int n=1,k;</p><p>  float h=b-a,x,temp;</p><p>  float T1,T2,S1,S2,C1,C2,R1,R2;</p><p>  T1=(b-a)/2*((*f)(a)+(*f)(b));</p><p><b>  while(

102、1)</b></p><p><b>  {</b></p><p><b>  temp=0;</b></p><p>  for(k=0;k<=n-1;k++)</p><p><b>  {</b></p><p>  x=a+k

103、*h+h/2;</p><p>  temp+=(*f)(x);</p><p><b>  }</b></p><p>  T2=(T1+temp*h)/2;</p><p>  if(fabs(T2-T1)<epsilon) </p><p>  return T2;</p>

104、<p>  S2=T2+(T2-T1)/3.0;</p><p>  if(n==1){T1=T2;S1=S2;h/=2;n*=2;continue;}</p><p>  C2=S2+(S2-S1)/15;</p><p>  if(n==2){C1=C2;T1=T2;S1=S2;h/=2;n*=2;continue;}</p><

105、;p>  R2=C2+(C2-C1)/63;</p><p>  if(n==4){R1=R2;C1=C2;T1=T2;S1=S2;h/=2;n*=2;continue;}</p><p>  if(fabs(R2-R1)<epsilon) </p><p>  return R2;</p><p>  R1=R2;C1=C2;T

106、1=T2;S1=S2;h/=2;n*=2;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void CRomberg::Onjisuan() </p><p><b>  {</b></p><p>

107、  // TODO: Add your control notification handler code here</p><p>  UpdateData(true);</p><p>  if(m_xiajie==m_shangjie)</p><p><b>  {</b></p><p>  MessageBo

108、x("積分區(qū)間錯誤!");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if(m_epsilon<=0)</p><p><b>  {</b></p><p>

109、;  MessageBox("精度值有誤!");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  int index;</p><p>  index=m_combo.GetCurSel();</p>

110、<p>  if(index==0)</p><p>  m_result=Romberg(m_xiajie,m_shangjie,f4,m_epsilon);</p><p>  if(index==1)</p><p>  m_result=Romberg(m_xiajie,m_shangjie,f5,m_epsilon);</p>&l

111、t;p>  if(index==2)</p><p>  m_result=Romberg(m_xiajie,m_shangjie,f6,m_epsilon);</p><p>  UpdateData(FALSE);</p><p><b>  }</b></p><p>  靜態(tài)文本控件透明代碼:</p&

112、gt;<p>  HBRUSH CRomberg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) </p><p><b>  {</b></p><p>  HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);</p><p

113、>  // TODO: Change any attributes of the DC here</p><p>  if(nCtlColor==CTLCOLOR_STATIC)</p><p>  //對所有的STATIC控件的屬性進行設定</p><p><b>  {</b></p><p>  pDC-&g

114、t;SetBkMode(TRANSPARENT);</p><p>  return (HBRUSH)::GetStockObject(NULL_BRUSH); </p><p><b>  }</b></p><p>  // TODO: Return a different brush if the default is not desir

溫馨提示

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

評論

0/150

提交評論