數(shù)值分析課程設(shè)計(jì)說明書_第1頁
已閱讀1頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  數(shù)值分析課程設(shè)計(jì)說明書</p><p>  班級(jí): 計(jì)算B092 姓名: </p><p>  設(shè)計(jì)題目: 數(shù)值積分軟件 </p><p>  設(shè)計(jì)時(shí)間: 2012.2.27 至 2012.3.2 </p><p>  指導(dǎo)教

2、師: 李 慧 </p><p>  評(píng) 語: </p><p>  _________________________________________</p><p>  ___________________________________

3、______</p><p>  _________________________________________</p><p>  _________________________________________</p><p>  評(píng)閱成績(jī):__ __評(píng)閱教師:__ ___</p><p><b>  目 錄<

4、;/b></p><p><b>  設(shè)計(jì)總說明1</b></p><p><b>  前 言2</b></p><p>  第1章 總體設(shè)計(jì)方案3</p><p>  1.1 軟件結(jié)構(gòu)設(shè)計(jì)3</p><p>  第2章 算法分析及設(shè)計(jì)4</p>

5、<p>  2.1自適應(yīng)梯形法4</p><p>  2.1.1自適應(yīng)梯形法算法分析:4</p><p>  2.1.2自適應(yīng)梯形法算法設(shè)計(jì):4</p><p>  2.2復(fù)化辛卜生法5</p><p>  2.2.1復(fù)化辛卜生法算法分析5</p><p>  2.2.2復(fù)化辛卜生法算法設(shè)計(jì)5&

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

7、b></p><p>  3.2.1自適應(yīng)梯形法的實(shí)現(xiàn)9</p><p>  3.2.2復(fù)化辛卜生法的實(shí)現(xiàn)11</p><p>  3.2.3龍貝格算法的實(shí)現(xiàn)13</p><p>  3.2.4算法簡(jiǎn)介功能設(shè)計(jì)13</p><p>  第4章 軟件測(cè)試16</p><p>  4

8、.1自適應(yīng)梯形法的測(cè)試16</p><p>  4.1.1 軟件計(jì)算16</p><p>  4.1.2 Matlab計(jì)算16</p><p>  4.2復(fù)化辛卜生法的測(cè)試17</p><p>  4.2.1 軟件計(jì)算17</p><p>  4.2.2 Matlab計(jì)算17</p><

9、p>  4.3龍貝格法的測(cè)試18</p><p>  4.3.1 軟件計(jì)算18</p><p>  4.3.2 Matlab計(jì)算18</p><p>  4.4測(cè)試結(jié)果18</p><p><b>  第5章 總結(jié)19</b></p><p>  參 考 文 獻(xiàn)20</p&

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

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

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

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

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

15、能結(jié)構(gòu)圖</p><p>  第2章 算法分析及設(shè)計(jì)</p><p><b>  2.1自適應(yīng)梯形法</b></p><p>  2.1.1自適應(yīng)梯形法算法分析:</p><p>  變步長(zhǎng)梯形算法依據(jù)公式。計(jì)算時(shí)可按如下步驟:</p><p><b>  輸入精度;</b>

16、</p><p><b>  s=0;</b></p><p><b> ?、?lt;/b></p><p><b> ?、凇?lt;/b></p><p>  2.1.2自適應(yīng)梯形法算法設(shè)計(jì):</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復(fù)化辛卜生法</b></p><p>  2.2.1復(fù)化辛卜生法算法分析</p><p>  復(fù)化辛卜生公式為,計(jì)算過程為:</p><p

22、><b>  令;</b></p><p><b>  對(duì)計(jì)算</b></p><p><b>  。</b></p><p>  2.2.2復(fù)化辛卜生法算法設(shè)計(jì)</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龍貝格算法設(shè)計(jì)</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章 軟件詳細(xì)設(shè)計(jì)</p><p><b>  3.1主界面設(shè)計(jì)</b></p><p>  數(shù)值積分軟件主界面如圖3.1.1所示,包括兩大功能。一個(gè)是選擇求積方法,另一個(gè)是查看相應(yīng)算法的算法理論。</p><p>

33、;  為了使軟件美觀,還可以為軟件添加背景圖片以及顯示系統(tǒng)時(shí)間,這樣就使軟件顯得不再單調(diào)。</p><p>  圖3.1.1 主界面</p><p>  添加背景圖片關(guān)鍵代碼:</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>  顯示時(shí)間代碼:</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功能設(shè)計(jì)</b></p><p>  3.2.1自適應(yīng)梯形法的實(shí)現(xiàn)</p><p>  通過類向?qū)榭丶x值,從界面獲取上下界以及精度值,從而進(jìn)行計(jì)算,將結(jié)果顯示在對(duì)應(yīng)框。若輸入錯(cuò)誤的數(shù)據(jù)將進(jìn)行錯(cuò)誤提示。為

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

42、 if(m_xiajie==m_shangjie)</p><p><b>  {</b></p><p>  MessageBox("積分區(qū)間錯(cuò)誤!");</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復(fù)化辛卜生法的實(shí)現(xiàn)</p><p>  同樣,通過類向?qū)榭丶x值,從界面獲取上下界、劃分區(qū)間及運(yùn)算次數(shù),從而進(jìn)行計(jì)算,將結(jié)果顯示在列表框。若輸入錯(cuò)誤的數(shù)據(jù)將進(jìn)行錯(cuò)誤提示。</p><p>  圖3.2.4 復(fù)化辛卜生法</p><p>  圖3.2.5 錯(cuò)誤提示</p><p&

45、gt;<b>  關(guān)鍵代碼:</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>  結(jié)果顯示代碼:</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、的實(shí)現(xiàn)</p><p>  同樣,通過類向?qū)榭丶x值,從界面獲取上下界及精度值。單機(jī)計(jì)算按鈕,即可將結(jié)果顯示在結(jié)果框。單機(jī)返回按鈕,返回主界面。若輸入錯(cuò)誤的數(shù)據(jù)將進(jìn)行錯(cuò)誤提示。</p><p>  圖3.2.6 龍貝格算法</p><p>  3.2.4算法簡(jiǎn)介功能設(shè)計(jì)</p><p>  算法簡(jiǎn)介功能就是對(duì)每種算法的簡(jiǎn)單介紹,單機(jī)相應(yīng)按鈕

54、就可以查看。</p><p>  圖3.2.7 自適應(yīng)梯形法簡(jiǎn)介</p><p>  圖3.2.8 復(fù)化辛卜生法簡(jiǎn)介</p><p>  圖3.2.9 龍貝格算法簡(jiǎn)介</p><p><b>  第4章 軟件測(cè)試</b></p><p>  4.1自適應(yīng)梯形法的測(cè)試</p><

55、p>  4.1.1 軟件計(jì)算</p><p>  用本軟件計(jì)算結(jié)果如下</p><p>  圖4.1.1 自適應(yīng)梯形法結(jié)果顯示</p><p>  4.1.2 Matlab計(jì)算</p><p>  Matlab計(jì)算結(jié)果如下:</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復(fù)化辛卜生法的測(cè)試</p><p>  4.2.1 軟件計(jì)算</p><p>  本軟件計(jì)算結(jié)果如下:</p><p>  圖4.2.1 復(fù)化辛卜生法結(jié)果顯示</p><p>  

58、4.2.2 Matlab計(jì)算</p><p>  Matlab計(jì)算結(jié)果如下:</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龍貝格法的測(cè)試</p>&

60、lt;p>  4.3.1 軟件計(jì)算</p><p>  本軟件計(jì)算結(jié)果如下:</p><p>  圖4.3.1 龍貝格算法結(jié)果顯示</p><p>  4.3.2 Matlab計(jì)算</p><p>  Matlab計(jì)算結(jié)果如下:</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測(cè)試結(jié)果</b></p><p>  可以看到每一種算法都接近其真實(shí)值,所以本軟件計(jì)算結(jié)果具有

62、相當(dāng)?shù)目煽啃?。可以作為?jiǎn)單積分的計(jì)算工具。</p><p><b>  第5章 總結(jié)</b></p><p>  通過一周的時(shí)間終于完成了數(shù)值分析軟件的設(shè)計(jì)開發(fā),由于時(shí)間有限不免存在很多問題。在課程設(shè)計(jì)的過程中困難不時(shí)的出現(xiàn),很多時(shí)候覺得無可入手,想盡辦法也不知道該怎么解決。但是這個(gè)時(shí)候是最關(guān)鍵的,進(jìn)一步的堅(jiān)持和探討后終于是“功夫不負(fù)有心人”。面對(duì)各種考驗(yàn),在堅(jiān)持不懈

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

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

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

66、設(shè)計(jì) [M]. 浙江:浙江大學(xué)出版社, 2009.</p><p>  [2] 李慶揚(yáng),王能超.數(shù)值分析 [M]. 北京:清華大學(xué)出版社, 2011.</p><p><b>  附 錄</b></p><p><b>  源程序清單</b></p><p>  自適應(yīng)梯形法關(guān)鍵代碼:</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ū)間錯(cuò)誤!");</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>  復(fù)化辛卜生法關(guān)鍵代碼:</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ū)間錯(cuò)誤!");</p><p><b>  return;</b><

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

91、lt;/p><p><b>  }</b></p><p>  if(m_cishu==0)</p><p><b>  {</b></p><p>  MessageBox("請(qǐng)輸入運(yùn)行次數(shù)!");</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>  龍貝格算法關(guān)鍵代碼:</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ū)間錯(cuò)誤!");</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>  //對(duì)所有的STATIC控件的屬性進(jìn)行設(shè)定</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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論