

版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)值分析課程設(shè)計(jì)報(bào)告
- 數(shù)值分析課程設(shè)計(jì)報(bào)告書(shū)
- 數(shù)值分析課程設(shè)計(jì)
- 數(shù)值分析課程設(shè)計(jì)
- 數(shù)值分析課程設(shè)計(jì)
- 數(shù)值轉(zhuǎn)換 課程設(shè)計(jì)報(bào)告
- 數(shù)值轉(zhuǎn)換課程設(shè)計(jì)報(bào)告
- 數(shù)值分析課程設(shè)計(jì)題目
- 數(shù)值分析課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告基本格式.doc
- 數(shù)值分析課程設(shè)計(jì)報(bào)告書(shū)-某某某.doc
- 地鐵車(chē)站ansys數(shù)值分析課程設(shè)計(jì)
- 數(shù)值分析課程設(shè)計(jì)報(bào)告書(shū)-某某某.pdf
- 數(shù)值逼近課程設(shè)計(jì)
- 數(shù)值分析課程設(shè)計(jì)說(shuō)明書(shū)
- 數(shù)值分析課程設(shè)計(jì)--最速下降法
- 數(shù)值計(jì)算課程設(shè)計(jì)
- 常微分方程數(shù)值解法課程設(shè)計(jì)報(bào)告
- 數(shù)值積分課程設(shè)計(jì)
- 數(shù)值分析課程設(shè)計(jì)說(shuō)明書(shū).doc
- java課程設(shè)計(jì)----課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論