數(shù)值分析課程設(shè)計(jì)報(bào)告_第1頁(yè)
已閱讀1頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  計(jì)算機(jī)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)</p><p>  《程序設(shè)計(jì)綜合課程設(shè)計(jì)》報(bào)告</p><p>  (2010/2011學(xué)年 第一學(xué)期)</p><p>  學(xué)生姓名: </p><p>  學(xué)生班級(jí): </p><p>  學(xué)生學(xué)號(hào): </p>&

2、lt;p>  指導(dǎo)教師: </p><p>  2011 年 1 月 9 日</p><p><b>  數(shù)</b></p><p><b>  值</b></p><p><b>  分</b></p><p><

3、;b>  析</b></p><p><b>  2</b></p><p><b>  目錄</b></p><p>  第一章 課程設(shè)計(jì)的目的和要求1</p><p>  1.1課程設(shè)計(jì)的目的1</p><p>  1.2 課程設(shè)計(jì)的基本要求1&l

4、t;/p><p>  1.3 系統(tǒng)編寫(xiě)目的1</p><p>  第二章 課程設(shè)計(jì)任務(wù)內(nèi)容2</p><p>  2.1 課程設(shè)計(jì)的內(nèi)容的基本闡述2</p><p>  2.2 課程設(shè)計(jì)所要實(shí)現(xiàn)的基本功能3</p><p>  第三章 課程設(shè)計(jì)說(shuō)明3</p><p>  3.1 模塊描述

5、3</p><p>  3.2 程序性能4</p><p>  3.3 算法及輸入輸出項(xiàng)5</p><p>  3.4 流程邏輯6</p><p>  3.5 接口及數(shù)據(jù)文件的存儲(chǔ)6</p><p>  3.6 程序運(yùn)行的限制條件7</p><p>  第四章 軟件使用說(shuō)明7<

6、/p><p>  第五章 程序設(shè)計(jì)的心得與體會(huì)13</p><p>  附錄一 參考文獻(xiàn)14</p><p>  附錄二 程序清單15</p><p>  第一章 課程設(shè)計(jì)的目的和要求</p><p>  課程設(shè)計(jì)的主要目的是培養(yǎng)學(xué)生綜合運(yùn)用C語(yǔ)言及C++程序設(shè)計(jì)課程所學(xué)到的知識(shí),編寫(xiě)C程序解決實(shí)際問(wèn)題的能力,以及嚴(yán)

7、謹(jǐn)?shù)墓ぷ鲬B(tài)度和良好的程序設(shè)計(jì)習(xí)慣。</p><p>  通過(guò)課程設(shè)計(jì)的訓(xùn)練,學(xué)生應(yīng)該能夠了解程序設(shè)計(jì)的基本開(kāi)發(fā)過(guò)程,掌握編寫(xiě)、調(diào)試和測(cè)試C語(yǔ)言程序的基本技巧,充分理解結(jié)構(gòu)化程序設(shè)計(jì)的基本方法。</p><p>  C語(yǔ)言程序設(shè)計(jì)的主要任務(wù)時(shí)要求學(xué)生遵循軟件開(kāi)發(fā)過(guò)程的基本規(guī)范,運(yùn)用結(jié)構(gòu)化程序設(shè)計(jì)的方法,按照課程設(shè)計(jì)的題目要求,分析、設(shè)計(jì)、編寫(xiě)、調(diào)試和測(cè)試C語(yǔ)言程序及編寫(xiě)設(shè)計(jì)報(bào)告。</p

8、><p>  1.1課程設(shè)計(jì)的目的</p><p>  1、鞏固和加深學(xué)生對(duì)C語(yǔ)言課程的基本知識(shí)的理解和掌握; </p><p>  2、掌握C語(yǔ)言編程和程序調(diào)試的基本技能;</p><p>  3、掌握利用C語(yǔ)言進(jìn)行軟件設(shè)計(jì)的方法;</p><p>  4、提高程序設(shè)計(jì)以及說(shuō)明文檔的能力;</p><

9、p>  5、提高運(yùn)用C語(yǔ)言解決實(shí)際問(wèn)題的能力。</p><p>  1.2 課程設(shè)計(jì)的基本要求</p><p>  1、根據(jù)所確定的課程設(shè)計(jì)題目,分析該程序的需求;</p><p>  2、對(duì)系統(tǒng)功能模塊進(jìn)行分析,寫(xiě)出詳細(xì)的設(shè)計(jì)說(shuō)明文檔;</p><p>  3、要求做一個(gè)選擇性界面,進(jìn)行選擇性執(zhí)行子程序;</p><

10、;p>  4、編寫(xiě)程序代碼,代碼量要求在400行左右,調(diào)試所寫(xiě)程序并保證</p><p><b>  其能夠正確運(yùn)行;</b></p><p>  5、設(shè)計(jì)完成的軟件盡量便于操作和使用;</p><p>  6、報(bào)告要獨(dú)立完成;</p><p>  1.3 系統(tǒng)編寫(xiě)目的 </p><p> 

11、 此課程設(shè)計(jì)為數(shù)值分析的算法編程,通過(guò)編寫(xiě)十種數(shù)值分析的算法,更好的了解各種算法的計(jì)算方法,熟悉并加以掌握。通過(guò)這個(gè)程序讓運(yùn)行此程序的人可以對(duì)這十種數(shù)值分析的基本方法有一定了解,并會(huì)運(yùn)用這些程序算法來(lái)解決部分問(wèn)題。</p><p>  第二章 課程設(shè)計(jì)任務(wù)內(nèi)容</p><p>  2.1 課程設(shè)計(jì)的內(nèi)容的基本闡述</p><p>  此次課程設(shè)計(jì)的題目為數(shù)值分析2,

12、就是做一個(gè)關(guān)于數(shù)值分析算法的程序選擇十個(gè)算法:1.阿當(dāng)姆斯預(yù)測(cè)-校正公式2.埃特金插值3.復(fù)化辛卜生公式4.高斯-賽德?tīng)柕?.列主元高斯消去法.6.龍貝格算法7.龍格-庫(kù)塔算法8.四階阿當(dāng)姆斯預(yù)測(cè)-校正公式9.追趕法解三對(duì)角方程組10.最小二乘法,并把這十個(gè)算法程序在同一個(gè)主程序中選擇性實(shí)現(xiàn)。</p><p>  2.2 課程設(shè)計(jì)所要實(shí)現(xiàn)的基本功能</p><p>  1、各個(gè)算法要有

13、相對(duì)獨(dú)立能單獨(dú)運(yùn)行的程序;</p><p>  2、制作一個(gè)選擇性界面,顯示出所有選項(xiàng),需要考慮選擇結(jié)果錯(cuò)誤的情況;</p><p>  3、在主程序執(zhí)行時(shí)可以選擇性退出,否則繼續(xù)執(zhí)行,并且在程序中選擇執(zhí)行程序;</p><p>  第三章 課程設(shè)計(jì)說(shuō)明</p><p><b>  3.1 模塊描述</b></p&

14、gt;<p><b>  1.選擇性界面</b></p><p>  用switch語(yǔ)句進(jìn)行選擇,共十個(gè)程序?yàn)椋?lt;/p><p>  1.阿當(dāng)姆斯預(yù)測(cè)-校正公式</p><p><b>  2.埃特金插值</b></p><p><b>  3.復(fù)化辛卜生公式</b&g

15、t;</p><p>  4.高斯-賽德?tīng)柕?lt;/p><p>  5.列主元高斯消去法</p><p><b>  6.龍貝格算法</b></p><p><b>  7.龍格-庫(kù)塔算法</b></p><p>  8.四階阿當(dāng)姆斯預(yù)測(cè)-校正公式</p>&

16、lt;p>  9.追趕法解三對(duì)角方程組</p><p><b>  10.最小二乘法</b></p><p>  這便是選擇模塊,用switch語(yǔ)句實(shí)現(xiàn)的。</p><p><b>  2.執(zhí)行子程序模塊</b></p><p>  #include "文件名.cpp"[1

17、]</p><p>  在函數(shù)頭中包含文件名,引用的CPP文件,以實(shí)現(xiàn)在主程序中調(diào)用子程序的目的。</p><p><b>  3.2 程序性能</b></p><p>  對(duì)于主程序來(lái)說(shuō),它綜合了10種算法,并且可以正常的調(diào)用文件并正確運(yùn)行。有可視化選擇性界面,選擇執(zhí)行也可以選擇退出。,執(zhí)行完一個(gè)子程序會(huì)有相應(yīng)的提示問(wèn)是否要退出,比較人性化。

18、</p><p>  對(duì)于阿當(dāng)姆斯預(yù)測(cè)-校正公式,,其步長(zhǎng)為0.25,其精確度達(dá)到了0.000001,此程序計(jì)算出了20個(gè)數(shù)值。</p><p>  艾特金插值的算法可以自動(dòng)插入插值點(diǎn)以及函數(shù)值4組,可以是任意4組值,最后的精度可以達(dá)到0.000001,復(fù)化辛卜生公式的算法結(jié)果的精確度也是0.000001。</p><p>  追趕法求解三對(duì)角方程組的算法比較便捷,

19、可以直接輸入矩陣的對(duì)角元素,這樣的算法具有普遍性,可以解決一類(lèi)問(wèn)題,精確度達(dá)到0.01。</p><p>  龍格--庫(kù)塔的算法計(jì)算出20個(gè)數(shù)值,步長(zhǎng)為0.05,精度0.00001,誤差較小。</p><p>  3.3 算法及輸入輸出項(xiàng)</p><p>  埃特金算法既是用兩個(gè)k-1次插值做線(xiàn)性插值得到k次插值公式,實(shí)質(zhì)還是拉格朗日插值。因此,誤差可用拉格朗日余項(xiàng)

20、定理來(lái)求得!e=f(n+1)(ξ)/(n+1)!*(x-x0)*(x-x1)*(x-x2)...(x-xn).</p><p>  復(fù)合辛卜生公式是采用“拋物線(xiàn)法”計(jì)算定積分所導(dǎo)出一個(gè)近似計(jì)算公式。 其計(jì)算誤差不超過(guò)這里M是被積函數(shù)f(x)的4階導(dǎo)數(shù)絕對(duì)值的上界。如果f(x)是三次多項(xiàng)式函數(shù),則誤差為0。此時(shí)辛卜生公式成為精確計(jì)算公式。</p><p>  高斯消去法求解n階線(xiàn)性方程組的基

21、本思想是在逐步消元的過(guò)程中把方程組的系數(shù)矩陣華為上三角矩陣,從而將原方程組約化為容易求解的等價(jià)三角方程組。</p><p>  龍貝格算法利用外推法,提高了計(jì)算精度,加快了收斂速度。</p><p>  對(duì)每一個(gè)從2做到,一直做到小于給定的精度是停止計(jì)算。其中(復(fù)化梯度求積公式),。</p><p>  最小二乘法:a=(NΣxy-ΣxΣy)/(NΣx^2-(Σx)

22、^2) ;b=y(平均)-ax(平均)</p><p>  當(dāng)執(zhí)行主程序時(shí),輸入序列號(hào)進(jìn)行算法的選擇,輸入的是數(shù)字,要求正確輸入。輸入正確的數(shù)字選擇算法開(kāi)始運(yùn)行子程序的時(shí)部分子程序需要輸入數(shù)值,按照要求輸入即可;輸出項(xiàng)就是運(yùn)行后直接輸出結(jié)果至屏幕。</p><p><b>  3.4 流程邏輯</b></p><p><b>  圖

23、3.4-1 </b></p><p>  這是主程序的流程圖。 </p><p>  3.5 接口及數(shù)據(jù)文件的存儲(chǔ)</p><p>  #include "1.Adams亞當(dāng)母斯.cpp"</p><p>  #include "2.埃特金插

24、值.cpp"</p><p>  #include "3.復(fù)化辛卜生公式.cpp"</p><p>  #include "4.高斯-賽德?tīng)柕?cpp"</p><p>  #include "5.列主元高斯消去法.cpp"</p><p>  #include &qu

25、ot;6.龍貝格算法.cpp"</p><p>  #include "7.龍格-庫(kù)塔算法.cpp"</p><p>  #include "8.四階阿當(dāng)姆斯預(yù)測(cè)-校正公式.cpp"</p><p>  #include "9.追趕法解三對(duì)角方程組.cpp"</p><p>

26、;  #include "10.最小二乘法.cpp"[1]</p><p>  這一塊是把主程序和各個(gè)子程序連接在一塊的函數(shù),可以看作接口。</p><p>  部分?jǐn)?shù)據(jù)直接錄在子程序中,部分?jǐn)?shù)據(jù)需要人工錄入來(lái)解決一系列的問(wèn)題,比較人性化,實(shí)用性強(qiáng)。</p><p>  3.6 程序運(yùn)行的限制條件</p><p>  此程

27、序的編譯及運(yùn)行環(huán)境是Microsoft Visual C++ 6.0,系統(tǒng)基本要求是windows2000及以上版本;</p><p>  第四章 軟件使用說(shuō)明</p><p>  此軟件使用便捷,但是要注意使用方法。運(yùn)行主程序后要按照要求輸入選擇性數(shù)字,這些數(shù)字不能是字符,不能是數(shù)字串,只能是一個(gè)數(shù)字,并且這個(gè)數(shù)是1到10這10個(gè)數(shù)中的,輸入后摁回車(chē)可以執(zhí)行子程序。有些子程序的執(zhí)行需要輸

28、入數(shù)值(有些不需要),只要按照要求輸入即可。再選擇完第一次以后會(huì)有一個(gè)相應(yīng)模塊運(yùn)行來(lái)實(shí)現(xiàn)是否退出程序,并且每一次運(yùn)行后都會(huì)詢(xún)問(wèn)。下面通過(guò)截圖進(jìn)一步說(shuō)明此軟件;首先運(yùn)行主程序會(huì)出現(xiàn)一個(gè)界面,界面如下圖:</p><p><b>  圖4-1</b></p><p>  在運(yùn)行主程序時(shí)十個(gè)子程序的運(yùn)行結(jié)果分別如下圖:</p><p>  1.阿當(dāng)姆

29、斯預(yù)測(cè)-校正公式</p><p><b>  圖4-2</b></p><p><b>  2.埃特金插值</b></p><p><b>  圖4-3</b></p><p><b>  3.復(fù)化辛卜生公式</b></p><p>

30、;<b>  圖4-4</b></p><p>  4.高斯-賽德?tīng)柕?lt;/p><p><b>  圖4-5</b></p><p>  5.列主元高斯消去法</p><p><b>  圖4-6</b></p><p><b>  6.龍

31、貝格算法</b></p><p><b>  圖4-7</b></p><p><b>  7.龍格-庫(kù)塔算法</b></p><p><b>  圖4-8</b></p><p>  8.四階阿當(dāng)姆斯預(yù)測(cè)-校正公式</p><p><

32、b>  圖4-9</b></p><p>  9.追趕法解三對(duì)角方程組</p><p><b>  圖4-10</b></p><p><b>  10.最小二乘法</b></p><p><b>  圖4-11 </b></p><p&g

33、t;  運(yùn)行完程序接著還有一個(gè)詢(xún)問(wèn)是否要退出程序,y是退出,n是繼續(xù)選擇執(zhí)行子程序,觀(guān)看其它數(shù)值分析的算法具體截圖如下:</p><p><b>  圖4-12</b></p><p><b>  圖4-13</b></p><p>  第五章 程序設(shè)計(jì)的心得與體會(huì)</p><p>  課程設(shè)計(jì)是培

34、養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過(guò)程.隨著科學(xué)技術(shù)發(fā)展的日新日異,程序軟件已經(jīng)成為當(dāng)今計(jì)算機(jī)應(yīng)用中空前活躍的領(lǐng)域, 在生活領(lǐng)域中的應(yīng)用可以說(shuō)得是無(wú)處不在。因此作為二十一世紀(jì)的大學(xué)來(lái)說(shuō)掌握簡(jiǎn)單的軟件的開(kāi)發(fā)技術(shù)是十分重要的。</p><p>  回顧起此次數(shù)值分析的課程設(shè)計(jì),至今我仍感慨頗多,的確,從選題到定稿,從理論到實(shí)踐,在整整三

35、個(gè)星期的日子里,可以說(shuō)得是苦多于甜,但是可以學(xué)到很多很多的東西,同時(shí)不僅可以鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,這畢竟第一次做的,難免會(huì)遇到過(guò)各種各樣的問(wèn)題,同時(shí)在設(shè)

36、計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,通過(guò)這次課程設(shè)計(jì)之后,一定把以前所學(xué)過(guò)的知識(shí)重新溫故。</p><p>  我得到了很多同學(xué)的幫助。我想沒(méi)有他們我可能都要放棄了,因?yàn)槲冶救藢?duì)數(shù)值分析的算法本來(lái)就不是很熟悉,學(xué)的東西也不能很好的靈活應(yīng)用,理論聯(lián)系不了實(shí)際。以前的匯編語(yǔ)言沒(méi)學(xué)好,一開(kāi)始的程序這塊兒就要令我抓狂了。</p><p>  通過(guò)這段時(shí)

37、間的學(xué)習(xí),我認(rèn)為要學(xué)好C++程序這門(mén)課程,不僅要認(rèn)真閱讀課本知識(shí),更重要的是要通過(guò)上機(jī)實(shí)踐才能增強(qiáng)和鞏固我的知識(shí)。特別是作為大學(xué)生,更要注重實(shí)踐這一環(huán)節(jié),只有這樣我們才能成為合格的計(jì)算機(jī)人材。</p><p>  整個(gè)過(guò)程不斷的調(diào)試,在調(diào)用子程序的時(shí)候遇到了部分問(wèn)題,最后幸好都解決了。通過(guò)這次課程設(shè)計(jì)也穩(wěn)固了一些已經(jīng)學(xué)習(xí)的數(shù)值分析的算法,同時(shí)了解了一些以前沒(méi)有接觸的數(shù)值分析的算法??傊?,這次的課程設(shè)計(jì)受益匪淺。&

38、lt;/p><p><b>  附錄一 參考文獻(xiàn)</b></p><p>  【1】常用算法程序集(C++描述)(第四版),作者徐士良;</p><p>  【2】C++程序設(shè)計(jì),作者譚浩強(qiáng)教授。</p><p><b>  附錄二 程序清單</b></p><p><b&

39、gt;  主程序:</b></p><p>  #include <iostream> //主程序大部分參考[2]</p><p>  using namespace std;</p><p>  #include "1.Adams亞當(dāng)母斯.cpp"</p><p>  #include &quo

40、t;2.埃特金插值.cpp"</p><p>  #include "3.復(fù)化辛卜生公式.cpp"</p><p>  #include "4.高斯-賽德?tīng)柕?cpp"</p><p>  #include "5.列主元高斯消去法.cpp"</p><p>  #inc

41、lude "6.龍貝格算法.cpp"</p><p>  #include "7.龍格-庫(kù)塔算法.cpp"</p><p>  #include "8.四階阿當(dāng)姆斯預(yù)測(cè)-校正公式.cpp"</p><p>  #include "9.追趕法解三對(duì)角方程組.cpp"</p>

42、<p>  #include "10.最小二乘法.cpp"</p><p>  int main()</p><p><b>  { </b></p><p><b>  int i;</b></p><p><b>  char p;</b>&l

43、t;/p><p>  cout<<endl;</p><p>  cout<<" 數(shù)值分析2"<<endl;</p><p>  cout<<"********************************************

44、*****************************"<<endl;</p><p>  cout<<"*************************************************************************"<<endl;</p><p>  cout<<&quo

45、t;下面有十種數(shù)值分析的算法可供研究,請(qǐng)進(jìn)行選擇,然后觀(guān)看相應(yīng)算法程序的運(yùn)行!"<<endl;</p><p>  cout<<endl;</p><p>  cout<<" 1.阿當(dāng)姆斯預(yù)測(cè)-校正公式"<<endl;</p><p>

46、  cout<<endl;</p><p>  cout<<" 2.埃特金插值"<<endl;</p><p>  cout<<endl;</p><p>  cout<<"

47、 3.復(fù)化辛卜生公式"<<endl;</p><p>  cout<<endl;</p><p>  cout<<" 4.高斯-賽德?tīng)柕?quot;<<endl;</p><p>  cout<<endl;</p>

48、<p>  cout<<" 5.列主元高斯消去法"<<endl;</p><p>  cout<<endl;</p><p>  cout<<" 6.龍貝格算法"<<en

49、dl;</p><p>  cout<<endl;</p><p>  cout<<" 7.龍格-庫(kù)塔算法"<<endl;</p><p>  cout<<endl;</p><p>  cout<<"

50、; 8.四階阿當(dāng)姆斯預(yù)測(cè)-校正公式"<<endl;</p><p>  cout<<endl;</p><p>  cout<<" 9.追趕法"<<endl;</p><p>  c

51、out<<endl;</p><p>  cout<<" 10.最小二乘法"<<endl;</p><p>  cout<<endl;</p><p>  cout<<endl;</p><p>  for(i

52、=0;;i++)</p><p><b>  {</b></p><p>  cout<<"*************************************************************************"<<endl;</p><p>  cout<<&

53、quot;*************************************************************************"<<endl;</p><p>  cout<<"下面請(qǐng)進(jìn)行選擇,選擇算法前面的數(shù)字從而觀(guān)察一個(gè)數(shù)值分析算法的運(yùn)行"<<endl;</p><p><b> 

54、 int t;</b></p><p><b>  cin>>t;</b></p><p><b>  switch(t)</b></p><p>  {case 1:cout<<"您選擇的是阿當(dāng)姆斯預(yù)測(cè)-校正公式"<<endl;main1();break

55、;//Adams亞當(dāng)母斯</p><p>  case 2:cout<<"您選擇的是埃特金插值"<<endl;main2();break;//埃特金插值</p><p>  case 3:cout<<"您選擇的是復(fù)化辛卜生公式"<<endl;main3();break;//復(fù)化辛卜生公式&l

56、t;/p><p>  case 4:cout<<"您選擇的是高斯-賽德?tīng)柕?quot;<<endl;main4();break;//高斯-賽德?tīng)柕?lt;/p><p>  case 5:cout<<"您選擇的是列主元高斯消去法"<<endl;main5();break;//列主元高斯消去法</p>

57、<p>  case 6:cout<<"您選擇的是龍貝格算法"<<endl;main6();break;//龍貝格算法</p><p>  case 7:cout<<"您選擇的是龍格-庫(kù)塔算法"<<endl;main7();break;//龍格-庫(kù)塔算法</p><p>  case

58、 8:cout<<"您選擇的是四階阿當(dāng)姆斯預(yù)測(cè)-校正公式"<<endl;main8();break;//四階阿當(dāng)姆斯預(yù)測(cè)-校正公式</p><p>  case 9:cout<<"您選擇的是追趕法"<<endl;main9();break;//追趕法解三對(duì)角方程組</p><p>  case 1

59、0:cout<<"您選擇的是最小二乘法"<<endl;main10();break;//最小二乘法</p><p><b>  }</b></p><p>  cout<<endl;</p><p>  cout<<"接下來(lái)是否退出程序?退出請(qǐng)選擇y,不退出繼續(xù)執(zhí)

60、行請(qǐng)選擇n"<<endl;</p><p><b>  cin>>p;</b></p><p>  if (p=='y')</p><p><b>  break;</b></p><p>  else continue;</p>&l

61、t;p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  1.阿當(dāng)姆斯預(yù)測(cè)-校正公式源代碼:[1]</p><p>  # include<iostream></p

62、><p>  # include<cmath></p><p>  float f(float x,float y)</p><p><b>  {</b></p><p>  return (y-2*x/y);</p><p><b>  }</b></p&g

63、t;<p>  float function(float xm,float ym,float l)</p><p><b>  {</b></p><p>  float xn,yn;</p><p>  float K1,K2,K3,K4;</p><p><b>  xn=xm+l;</

64、b></p><p>  K1=f(xm,ym);K2=f(xm+l/2,ym+K1*l/2 );;</p><p>  K3=f(xm+l/2,ym+K2*l/2);K4=f(xn,ym+l*K3);</p><p>  yn=ym+l*(K1+2*K2+2*K3+K4)/6;</p><p>  cout<<"

65、("<<xn<<","<<yn<<")"<<endl;</p><p>  return yn;</p><p><b>  }</b></p><p>  void main1()</p><p><b&

66、gt;  {</b></p><p><b>  int N,n;</b></p><p>  float a,b,c,d;</p><p>  float x1,x2,x3,x4,y1,y2,y3,y4,yp,x0,y0,h;</p><p>  cout<<"請(qǐng)輸入X0,Y0,及H,

67、N,其中,N為大于等于4的整數(shù)."<<endl;</p><p>  cin>>x0>>y0>>h>>N;</p><p>  x1=x0+h;x2=x0+2*h;x3=x0+3*h;</p><p>  y1=function(x0,x0,h);</p><p>  y2

68、=function(x1,y1,h);</p><p>  y3=function(x2,y2,h);</p><p><b>  n=4;</b></p><p>  while(n<=N)</p><p><b>  {</b></p><p><b> 

69、 x4=x3+h;</b></p><p>  a=f(x3,y3);b=f(x2,y2);</p><p>  c=f(x1,y1);d=f(x0,y0);</p><p>  yp=y3+h*(55*a-59*b+37*c-9*d)/24;</p><p>  y4=y3+h*(9*f(x4,yp)+19*a-5*b+c)/2

70、4;</p><p>  cout<<"("<<x4<<","<<y4<<")"<<endl;</p><p><b>  n++;</b></p><p><b>  x3=x4;</b>&

71、lt;/p><p><b>  y3=y4;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  2.埃特金插值源代碼:</p><p>  #include<iostream></p

72、><p>  #include<cmath></p><p>  #include<iomanip></p><p>  using namespace std; </p><p>  void main2()</p><p><b>  {</b>

73、;</p><p>  int n=3;//n次插值有n+1個(gè)插值節(jié)點(diǎn)</p><p>  double x[4];//x[]存放插值節(jié)點(diǎn)</p><p>  double y[4];//y[]存放插值節(jié)點(diǎn)函數(shù)值,每次線(xiàn)性插值結(jié)果取代老值</p><p>  double h;

74、 //h是要插值的點(diǎn)</p><p><b>  int i;</b></p><p>  cout<<"請(qǐng)依次輸入各個(gè)插值節(jié)點(diǎn)及其函數(shù)值(xi,yi):"<<endl;</p><p>  for(i=0;i<=n;i++)</p><p>  {cin>>

75、;x[i]; cin>>y[i];}</p><p>  cout<<"請(qǐng)輸入要插值的點(diǎn)h:";</p><p><b>  cin>>h;</b></p><p><b>  int k=1;</b></p><p>  while(k!=n

76、+1)</p><p>  { //埃特金插值,由線(xiàn)性插值循環(huán)n次到n次插值</p><p>  for(i=k;i<=n;i++)</p><p><b>  {</b></p><p>  y[i]=y[i]*(h-x[k-1])/(x[i]-x[k-1])+y[k-1]*(h-x[i])/(x[k-1]-

77、x[i]);</p><p><b>  }</b></p><p><b>  k=k+1;</b></p><p><b>  }</b></p><p>  cout<<"埃特金插值函數(shù)在"<<h<<"處的

78、值,即f(h)的近似值為: ";</p><p>  cout<<y[n]<<endl;</p><p><b>  }</b></p><p>  3.復(fù)化辛卜生公式源代碼:</p><p>  #include<iostream></p><p>

79、  #include<cmath></p><p>  void main3()</p><p><b>  {</b></p><p>  int i,n=2;</p><p><b>  float s;</b></p><p>  float f(float

80、);</p><p>  float Simpson(float (*)(float),float,float,int );</p><p>  for( i=0;i<=2;i++ )</p><p><b>  {</b></p><p>  s=Simpson(f,0,1,n);</p><

81、p>  cout<<"s("<<n<<")="<<s<<endl;</p><p><b>  n*=2;</b></p><p><b>  }</b></p><p><b>  }</b>&

82、lt;/p><p>  float Simpson(float (*f)(float),float a,float b,int n)</p><p><b>  {</b></p><p><b>  int k;</b></p><p>  float s,s1,s2=0.0;</p>

83、<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><p>  s1+=f(a+k*h+h/2);</p><p>  s2+=f(a

84、+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><p><b>  }</b></p><p>  flo

85、at f(float x)</p><p><b>  {</b></p><p>  return 1/(1+x*x);</p><p>  /*if(x==0)</p><p><b>  return 1;</b></p><p><b>  else<

86、;/b></p><p>  return sin(x)/x;*/</p><p><b>  }</b></p><p>  4.高斯-賽德?tīng)柕ㄔ创a:</p><p>  #include<iostream></p><p>  #include<cmath>

87、</p><p>  using namespace std;</p><p>  void main4()</p><p><b>  {</b></p><p>  int N=100;</p><p><b>  int i;</b></p><p&

88、gt;  double *x;</p><p>  double c[12]={8.0,-3.0,2.0,20.0,</p><p>  4.0,11.0,-1.0,33.0,</p><p>  6.0,3.0,12.0,36.0};//here must be modifed</p><p>  double *GauseSeidel(

89、double *,int);</p><p>  x=GauseSeidel(c,3);</p><p>  for( i=0;i<=2;i++ )</p><p>  cout<<"x["<<i<<"]="<<x[i]<<endl;</p>&l

90、t;p><b>  }</b></p><p>  double *GauseSeidel(double *a,int n)</p><p><b>  {</b></p><p>  int N=100;</p><p>  int i,j,nu=0;</p><p&

91、gt;  double *x,dx;</p><p>  x =newdouble[n*sizeof(double)];</p><p>  for( i=0;i<=n-1;i++ )</p><p><b>  x[i]=0.0;</b></p><p><b>  do</b></

92、p><p><b>  {</b></p><p>  for( i=0;i<=n-1;i++ )</p><p><b>  {</b></p><p><b>  dx=0.0;</b></p><p>  for( j=0;j<=n-1;

93、j++ )</p><p>  dx+=*(a+i*(n+1)+j)*x[j];</p><p>  dx=(*(a+i*(n+1)+n)-dx)/(*(a+i*(n+1)+i));</p><p><b>  x[i]+=dx;</b></p><p><b>  }</b>&

94、lt;/p><p>  if( nu>N )</p><p><b>  {</b></p><p>  cout<<"迭代發(fā)散\n";</p><p><b>  return 0;</b></p><p><b>  }<

95、/b></p><p><b>  nu++;</b></p><p><b>  }</b></p><p>  while(fabs(dx)>1e-6);</p><p><b>  return x;</b></p><p><b

96、>  }</b></p><p>  5.列主元高斯消去法源代碼:</p><p>  #include<iostream></p><p>  #include<cmath></p><p>  using namespace std;</p><p>  void main

97、5()</p><p><b>  {</b></p><p><b>  int i;</b></p><p><b>  float *x;</b></p><p>  float c[3][4] ={0.101,2.304,3.555,1.183,</p>

98、<p>  -1.347,3.712,4.623,2.137,</p><p>  -2.835,1.072,5.643,3.035};</p><p>  float *ColPivot(float *,int);</p><p>  x=ColPivot(c[0],3);</p><p>  for( i=0;i<=2;i

99、++ )</p><p>  cout<<"x("<<i<<")="<<x[i]<<endl;</p><p><b>  }</b></p><p>  float *ColPivot( float *c,int n )</p>

100、<p><b>  {</b></p><p>  int i,j,t,k;</p><p>  float *x,p;</p><p>  x=new float[n*sizeof(float)];</p><p>  for( i=0;i<=n-2;i++)</p><p>&

101、lt;b>  {</b></p><p><b>  k=i;</b></p><p>  for(j=i+1;j<=n-1;j++)</p><p>  if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))</p><p><b>  k

102、=j;</b></p><p><b>  if(k!=i)</b></p><p>  for( j=i;j<=n;j++ )</p><p><b>  {</b></p><p>  p=*(c+i*(n+1)+j);</p><p>  *(c+i*

103、(n+1)+j)=*(c+k*(n+1)+j);</p><p>  *(c+k*(n+1)+j)=p;</p><p><b>  }</b></p><p>  for( j=i+1;j<=n-1;j++ )</p><p><b>  {</b></p><p>

104、  p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));</p><p>  for( t=i;t<=n;t++ )</p><p>  *(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));</p><p><b>  }</b></p><p><b>  }<

105、;/b></p><p>  for( i=n-1;i>=0;i--)</p><p><b>  {</b></p><p>  for( j=n-1;j>=i+1;j--)</p><p>  (*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));</p>&

106、lt;p>  x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));</p><p><b>  }</b></p><p><b>  return x;</b></p><p><b>  }</b></p><p>  6.龍貝格算法源代

107、碼:</p><p>  #include<iostream></p><p>  #include<cmath></p><p>  using namespace std;</p><p>  float ff(float x)</p><p><b>  {</b>&

108、lt;/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></p>

109、<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(1)</b>

110、</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*h+h/2;</

111、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><p>  

112、S2=T2+(T2-T1)/3.0;</p><p><b>  if(n==1)</b></p><p><b>  {</b></p><p><b>  T1=T2;</b></p><p><b>  S1=S2;</b></p>&

113、lt;p><b>  h/=2;</b></p><p><b>  n*=2;</b></p><p><b>  continue;</b></p><p><b>  }</b></p><p>  C2=S2+(S2-S1)/15;</

114、p><p><b>  if(n==2)</b></p><p><b>  {</b></p><p><b>  C1=C2;</b></p><p><b>  T1=T2;</b></p><p><b>  S1=S

115、2;</b></p><p><b>  h/=2;</b></p><p><b>  n*=2;</b></p><p><b>  continue;</b></p><p><b>  }</b></p><p>

116、;  R2=C2+(C2-C1)/63;</p><p><b>  if(n==4)</b></p><p><b>  {</b></p><p><b>  R1=R2;</b></p><p><b>  C1=C2;</b></p>

117、<p><b>  T1=T2;</b></p><p><b>  S1=S2;</b></p><p><b>  h/=2;</b></p><p><b>  n*=2;</b></p><p><b>  continue;

118、</b></p><p><b>  }</b></p><p>  if(fabs(R2-R1)<epsilon)</p><p>  return R2;</p><p><b>  R1=R2;</b></p><p><b>  C1=C2

119、;</b></p><p><b>  T1=T2;</b></p><p><b>  S1=S2;</b></p><p><b>  h/=2;</b></p><p><b>  n*=2;</b></p><p&g

120、t;<b>  }</b></p><p><b>  }</b></p><p>  void main6()</p><p><b>  {</b></p><p>  float epsilon=5e-6;</p><p>  cout<&l

121、t;"R="<<Romberg(0,1,ff,epsilon)<<endl;</p><p><b>  return ;</b></p><p><b>  }</b></p><p>  7.龍格-庫(kù)塔算法源代碼:</p><p>  #include

122、<iostream></p><p>  using namespace std;</p><p>  void main7()</p><p><b>  {</b></p><p>  void Runge_Kutta(float (*f)(float,float),float a,float b,flo

123、at y0,int N);</p><p>  float f(float,float);</p><p>  float a=0,b=1,y0=1;</p><p>  Runge_Kutta(f,a,b,y0,20);</p><p><b>  }</b></p><p>  void Ru

124、nge_Kutta(float (*f)(float x,float y),float a,float b,float y0,int N)</p><p><b>  {</b></p><p>  float x=a,y=y0,K1,K2,K3,K4;</p><p>  float h=(b-a)/N;</p><p&g

125、t;<b>  int i;</b></p><p>  cout<<"x[0]="<<x<<'\t'<<"y[0]="<<y<<endl;</p><p>  for(i=1;i<=N;i++)</p><p>

126、;<b>  {</b></p><p>  K1=f(x,y);</p><p>  K2=f(x+h/2,y+h*K1/2);</p><p>  K3=f(x+h/2,y+h*K2/2);</p><p>  K4=f(x+h,y+h*K3);</p><p>  y=y+h*(K1+2*K

127、2+2*K3+K4)/6;</p><p><b>  x=a+i*h;</b></p><p>  cout<<"x["<<i<<"]="<<x<<" y["<<i<<"]="<<y&l

128、t;<endl;</p><p><b>  }</b></p><p><b>  }</b></p><p>  float fa(float x,float y)</p><p><b>  {</b></p><p>  return x+

129、y;</p><p><b>  }</b></p><p>  8.四階阿當(dāng)姆斯預(yù)測(cè)-校正公式源代碼:</p><p>  #include<iostream></p><p>  using namespace std;</p><p>  float f2(float x,flo

130、at y)</p><p><b>  {</b></p><p>  return -x*y*y;</p><p><b>  }</b></p><p>  float * Runge_Kuttaa(float (*f)(float x,float y),float a,float b,floa

131、t y0,int N)</p><p><b>  {</b></p><p>  float x=a,y=y0,K1,K2,K3,K4,*yy;</p><p>  float h=(b-a)/N;</p><p><b>  int i;</b></p><p>  yy

132、=new float[(sizeof(float)*3)];</p><p>  for(i=1;i<=3;i++)</p><p><b>  {</b></p><p>  K1=f(x,y);</p><p>  K2=f(x+h/2,y+h*K1/2);</p><p>  K3=f

133、(x+h/2,y+h*K2/2);</p><p>  K4=f(x+h,y+h*K3);</p><p>  y=y+h*(K1+2*K2+2*K3+K4)/6;</p><p><b>  x=a+i*h;</b></p><p>  *(yy+i-1)=y;</p><p><b>

134、;  }</b></p><p>  return yy;</p><p><b>  }</b></p><p>  void Adams(float a,float b,int N,float (*f)(float x,float y),float y0)</p><p><b>  {<

135、/b></p><p><b>  int i;</b></p><p>  float y1,y2,y,yp,yc,*yy,h,x;</p><p>  cout<<"x[0]="<<a<<'\t'<<" y[0]="<&

136、lt;y0<<endl;</p><p>  yy=Runge_Kuttaa(f,a,b,y0,N);</p><p><b>  y1=yy[0];</b></p><p><b>  y2=yy[1];</b></p><p><b>  y=yy[2];</b>

137、;</p><p>  h=(b-a)/N;</p><p>  for(i=1;i<=3;i++)</p><p>  cout<<"x["<<i<<"]="<<a+i*h<<" y["<<i<<"]

138、="<<*(yy+i-1)<<endl;</p><p>  for(i=3;i<N;i++)</p><p><b>  {</b></p><p><b>  x=a+i*h;</b></p><p>  yp=y+h*(55*f(x,y)-59*f(x-

139、h,y2)+37*f(x-2*h,y1)-9*f(x-3*h,y0))/24.0;</p><p>  yc=y+h*(9*f(x+h,yp)+19*f(x,y)-5*f(x-h,y2)+f(x-2*h,y1))/24.0;</p><p>  cout<<"x["<<i+1<<"]="<<x+h<

140、;<" y["<<i+1<<"]="<<yc<<endl;</p><p><b>  y0=y1;</b></p><p><b>  y1=y2;</b></p><p><b>  y2=y;</b&g

141、t;</p><p><b>  y=yc;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void main8()</p><p><b>  {</b></p&

142、gt;<p>  float a=0,b=5.0,y0=2.0;</p><p><b>  int N=20;</b></p><p>  Adams(a,b,N,f2,y0);</p><p><b>  }</b></p><p>  9.追趕法解三對(duì)角方程組源代碼:</p

143、><p>  #include<iostream></p><p>  #include<iomanip></p><p>  #include<cmath></p><p>  using namespace std;</p><p>  int main9()</p>

144、<p><b>  {</b></p><p>  int n=4; //n為方程組系數(shù)矩陣的階數(shù)</p><p>  float b[5]; //b[]三對(duì)角系數(shù)矩陣的對(duì)角元素,b[0]不用</p><p>  float c[5]; //c[]為三對(duì)角系數(shù)矩陣的上對(duì)角元素,c[0]不用&

145、lt;/p><p>  float a[5]; //a[]為三對(duì)角系數(shù)矩陣的下對(duì)角元素,a[0]不用</p><p>  float f[6]; //f[]為方程組的常向量項(xiàng) </p><p>  float L[6]; //克勞特分解A=LU,其中,L為下二對(duì)角矩陣.L[]存放其對(duì)角元素,L[0]不用</p><p>  

146、float U[5]; //U為單位上二對(duì)角矩陣.U[]存放其上對(duì)角元素,U[0]不用</p><p><b>  int i,j;</b></p><p><b>  //輸入c[]</b></p><p>  cout<<"請(qǐng)輸入三對(duì)角方程組系數(shù)矩陣的上對(duì)角元素: "<<

溫馨提示

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

評(píng)論

0/150

提交評(píng)論