




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、FORTRAN語(yǔ)言課程設(shè)計(jì)摘要:科技的日新月異使得計(jì)算機(jī)領(lǐng)域不斷取得新的研究成果。計(jì)算機(jī)在代替和延伸腦力勞動(dòng)方面發(fā)揮越來(lái)越重要的作用,不僅在工業(yè)方面而且在日常生活和科研中也越來(lái)越離不開(kāi)計(jì)算機(jī)。特別是在天體運(yùn)動(dòng)方面需要運(yùn)用到計(jì)算機(jī)處理大量的數(shù)據(jù)。這次我選的實(shí)踐課題是用Jacobi迭代和Gauss-Seidel迭代法求解線性方程組AX=B,這其中涉及的就是天體運(yùn)動(dòng)的軌跡問(wèn)題,我利用從FORTRAN 90中學(xué)到的迭代、循環(huán)、子程序等知識(shí)設(shè)計(jì)程序,通過(guò)Fortran PowerStation 4.0進(jìn)行運(yùn)行、調(diào)試,不得不提的是QuickWin,它在繪制行星的運(yùn)動(dòng)軌跡上發(fā)揮出了相當(dāng)大的貢獻(xiàn)。通過(guò)這次的實(shí)
2、踐我從中充分體會(huì)到了Fortran語(yǔ)言接近數(shù)學(xué)公式的自然描述,在計(jì)算機(jī)里具有很高的執(zhí)行效率的最大特性。同時(shí)我也看到了Fortran語(yǔ)言是一種極具發(fā)展?jié)摿Φ恼Z(yǔ)言,在數(shù)值計(jì)算中,F(xiàn)ortran語(yǔ)言仍然不可替代。Fortran90標(biāo)準(zhǔn)引入了數(shù)組計(jì)算等非常利于矩陣運(yùn)算的功能。在數(shù)組運(yùn)算時(shí),F(xiàn)ortran能夠自動(dòng)進(jìn)行并行運(yùn)算,這是很多編程語(yǔ)言不具備的。運(yùn)用Fortran語(yǔ)言,你能夠運(yùn)用很多現(xiàn)成的函數(shù)軟件包,所以非常便利。關(guān)鍵詞:Fortran ;Jacobi迭代和Gauss-Seidel迭代;天體運(yùn)動(dòng)1設(shè)計(jì)思想這次的課程設(shè)計(jì)我選的是第三個(gè)課題,關(guān)于求解天體的運(yùn)行軌道,原題如下:用Jacobi迭代和Gau
3、ss-Seidel迭代法求解線性方程組AX=b。一天文學(xué)家要確定一顆小行星繞太陽(yáng)運(yùn)行的軌道,他在軌道平面內(nèi)建立以太陽(yáng)為原點(diǎn)的直角坐標(biāo)系,在五個(gè)不同的點(diǎn)對(duì)小行星作了五次觀察,測(cè)得軌道上五個(gè)點(diǎn)的坐標(biāo)數(shù)據(jù)(單位:萬(wàn)公里)如下表所示:P1P2P3P4P5X坐標(biāo)5360558460628596666268894Y坐標(biāo)602611179169542349230890由開(kāi)普勒第一定律知,小行星軌道為一橢圓,橢圓的一般方程可表示為:a1x2+2a2xy+a3y2+2a4x+2a5y+1=0分別將五個(gè)點(diǎn)的數(shù)據(jù)代入橢圓一般方程中,得到線性方程組,求出待定系數(shù)a1,a2,a3,a4,a5。繪制行星繞太陽(yáng)運(yùn)行的軌道。
4、從題目中觀察到一共需要五組數(shù)據(jù)聯(lián)立成方程組才能將a1,a2,a3,a4,a5求出,自然想到運(yùn)用Jacobi迭代和Gauss-Seidel迭代法求解線性方程組AX=B的題型,其中A為5*5的矩陣,X、B為數(shù)組,分別包含a1,a2,a3,a4,a5和系數(shù)。同時(shí)為了滿足程序的實(shí)用性我將Gauss-Seidel迭代法設(shè)計(jì)成了子例行程序,既方便程序的設(shè)計(jì)同時(shí)也有利于最后的調(diào)試與運(yùn)行。另外,為了對(duì)比精度我還設(shè)計(jì)了另一個(gè)子例行程序:高斯消元法,將其中輸出的數(shù)據(jù)設(shè)定為單精度,而將Gauss-Seidel迭代法中的數(shù)據(jù)設(shè)為雙精度,兩相對(duì)比即可找出最符合實(shí)際的方案?;趯?shí)踐的要求,對(duì)數(shù)據(jù)的輸入我采用的是從文本輸入
5、,再?gòu)奈谋据敵觯袷竭x用的為.txt格式。其實(shí)Excel中的.prn也是理想的文件輸入格式,即可以在程序中直接調(diào)用又可以靈活的控制輸出。除了這些在對(duì)方程系數(shù)的輸入上我設(shè)計(jì)了該程序的第三個(gè)子例行程序,這樣雖然表面上有點(diǎn)多余但是使得整個(gè)程序的靈活性和可操作性上有了很大的提高。畫(huà)圖方面我很自然的想到用QuickWin來(lái)作圖,畫(huà)圖中主要用到的是描點(diǎn)法,將每一個(gè)符合方程的解都描繪出來(lái),最終形成一條光滑的曲線。最終我將所有的程序都放在了同一個(gè)文件下進(jìn)行操作,涉及到畫(huà)圖程序和賦值主程序相沖突的問(wèn)題,于是便將畫(huà)圖設(shè)計(jì)成子例行程序Subroutine huatu(),在主程序中對(duì)其進(jìn)行調(diào)用,程序得以完成。2系統(tǒng)
6、設(shè)計(jì)與實(shí)現(xiàn)由線性方程組繪制小行星繞太陽(yáng)運(yùn)行軌道的問(wèn)題輸入求解輸出橢圓的一般方程五點(diǎn)數(shù)據(jù)計(jì)算響應(yīng)擬合文件儲(chǔ)存數(shù)據(jù)繪制圖形高斯消元法Gauss-Seidel迭代整個(gè)系統(tǒng)是圍繞行星運(yùn)行的軌道而設(shè)計(jì),系統(tǒng)的框架圖如下:貫穿程序始終的是Gauss-Seidel迭代法和高斯消元法,其中高斯消元法的基本運(yùn)算原則是利用任何方程式乘上常數(shù)都不會(huì)改變其解答的原理,將原方程組乘以適當(dāng)?shù)某?shù)后,作相互加減處理,使系數(shù)矩陣的對(duì)角線全部變成1,且使其左下角元素全變成0,再由最后一個(gè)方程式由下往上代入,即可求出方程的解。而Gauss-Seidel迭代法與高斯消元法相似,只是Gauss-Seidel迭代法每迭代一次只需計(jì)算一
7、次矩陣與向量的乘法。其運(yùn)算公式如下:Gauss-Seidel迭代法:x(0)=(x1(0), x2(0), x3(0),xn(0)Txi(k+1)=( bi- j=1i-1aijxj(k+1)- j=i+1naijxj(k) aii (i=1,2, ,n;k=0,1, ) 運(yùn)用Gauss-Seidel迭代法的算法源程序編碼如下:dimension a(n,n),b(n),x(n)real a,b,x,t,s,p,qdo i=1,n if(abs(a(i,i)+1.0)=1.0)then l=0write(*,100)return endifenddol=100do i=1,nx(i)=0.0e
8、nddodop=0.0l=l-1do i=1,n t=x(i) s=0.0 do j=1,n if(j/=i)s=s+a(i,j)*x(j) enddo x(i)=(b(i)-s)/a(i,i) q=abs(x(i)-t)/(1+abs(x(i) if(qp)p=qenddoif(peps).or.(l=0)exitenddoif(l=0)write(*,100)return100 format(1x,fail)End運(yùn)用Gauss-Seidel迭代法的程序框圖如下:輸入a(5,5),b(5)輸出x(5)算出sum1與sum2的值i=1,2, nk=0,1, ,5送初值x(0)=(0,0,0)
9、k5要注意的是在這兩種方法中也要記錄迭代過(guò)程的迭代次數(shù),特別地,在運(yùn)用Gauss-Seidel迭代法時(shí)一定要將k的值慢慢加大,防止出現(xiàn)死循環(huán)??偟乃惴ㄔO(shè)計(jì)好之后還要注意畫(huà)圖程序的設(shè)計(jì),利用QuickWin來(lái)畫(huà)圖不僅要確定好坐標(biāo)軸的位置,同時(shí)要注意x、y軸坐標(biāo)的刻度,在描點(diǎn)是也要控制好精度以便于確定點(diǎn)的疏密程度。具體的畫(huà)圖源程序編碼如下:use msflibtype(qwinfo) winfotype(wxycoord) wxyinteger(2) statuscharacter*5 creal(8) x,ywinfo.type=qwin$maxstatus=setwsizeqq(qwin$fr
10、amewindow,winfo) status=setwsizeqq(0,winfo)status=setwindow(.true.,-100,-5000,10000,5000)status=setbkcolorrgb(#000000)call clearscreen($gclearscreen)status=setcolorrgb(#00ffff)call moveto_w(-100d0,0d0,wxy)status=lineto_w(10000d0,0d0)call moveto_w(0d0,-5000d0,wxy)status=lineto_w(0d0,5000d0)status=ini
11、tializefonts()status=setfont(h20w5i)do i=-100,10000,300 x=i call moveto_w(x,0d0,wxy) write(c,(i5)int(x) call outgtext(c)enddodo x=-100,10000 do y=-5000,5000if(int(-.59*X*X+.41*X*Y*2-.45*Y*Y*10+2*2.4*X*1000-1.42*1000*Y*2-1000)/20000)=0)then status=setpixel_w(x,y) endif enddoenddoread(*,*)end3設(shè)計(jì)總結(jié)課程設(shè)計(jì)
12、的任務(wù)圓滿的完成了,雖然時(shí)間只有短短的兩周而且程序也不見(jiàn)得那么的難,但它在一開(kāi)始著實(shí)讓我們傷透了腦筋。通過(guò)這次痛苦并快樂(lè)的實(shí)踐過(guò)程,我終于對(duì)Fortran 90有了更為深刻的體會(huì),它是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ),雖然我們屬于土木建筑專業(yè),但Fortran的學(xué)習(xí)卻占據(jù)著十分重要的地位。同時(shí)我也明白了要學(xué)好這門(mén)課程,僅學(xué)習(xí)書(shū)本上的知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,還要有較強(qiáng)的實(shí)踐能力。因?yàn)槲覀儗W(xué)習(xí)知識(shí)就是為了實(shí)踐。而只有多實(shí)踐,多編寫(xiě)程序,才能更好的理解與掌握書(shū)本上的東西。對(duì)于這次自己親手編的程序總的來(lái)說(shuō)還是很滿意的,這極大的鼓舞了我,使我很有成就感。才開(kāi)始的時(shí)候我真的不知從何下手,但是經(jīng)過(guò)不斷的查閱書(shū)籍,
13、與老師、同學(xué)交流我終于可以編程令自己滿意的程序。縱觀整個(gè)程序,我覺(jué)得它最大的優(yōu)點(diǎn)在于其精確性和實(shí)用性,我不止一次的控制了數(shù)據(jù)輸出的精度,不緊如此為了突出精度上的不同給結(jié)果帶來(lái)的巨大誤差我還特意設(shè)置了兩個(gè)程序進(jìn)行對(duì)比。雖然高斯消元法和Gauss-Seidel迭代法在原理上有很多地方想似,但在精度的控制上足以見(jiàn)出其優(yōu)劣。就本程序而言用Gauss-Seidel迭代法是行不通的,因?yàn)榫鹊膯?wèn)題使得其計(jì)算結(jié)果有很大的出入,反觀高斯消元法對(duì)精度的控制相當(dāng)成功,所以計(jì)算結(jié)果很是精確。其次就是所說(shuō)的實(shí)用性,看了我的程序的人無(wú)不說(shuō)該程序不僅僅只適用于這一道題,對(duì)于這一系列的問(wèn)題都可以調(diào)用該程序進(jìn)行調(diào)解。這就要?dú)w
14、功于子程序和子例行程序了。在設(shè)計(jì)的過(guò)程中,我有意將有關(guān)算法的程序設(shè)計(jì)為子例行程序,這樣一方面便于最后的調(diào)試、運(yùn)行,同時(shí)更是為了程序的實(shí)用性。當(dāng)數(shù)據(jù)變換之后只需在主程序調(diào)用自例行程序時(shí)修改調(diào)用的數(shù)據(jù)即可,而不必再一次設(shè)計(jì)程序簡(jiǎn)化了工作人員的工作。除了以上說(shuō)到的兩個(gè)優(yōu)點(diǎn)之外,該程序還有一個(gè)很大的優(yōu)點(diǎn):可以保存運(yùn)算結(jié)果。針對(duì)要求對(duì)結(jié)果進(jìn)行保存的人來(lái)說(shuō)這個(gè)程序應(yīng)該是適用的,因?yàn)楸境绦虻臄?shù)據(jù)無(wú)論是輸入還是輸出都是采用文本的方式進(jìn)行,運(yùn)行的結(jié)果直接輸出到創(chuàng)立程序的文件夾中。這樣就不必一個(gè)一個(gè)記錄數(shù)據(jù)了。但是這個(gè)程序也存在著很多的不足,例如:精度的提高換來(lái)的是運(yùn)行速度的減慢,在分析數(shù)據(jù)的過(guò)程中要花掉很大一部
15、分的時(shí)間,這比起其他精度第一點(diǎn)的程序是最大的弱點(diǎn)。其次,由于數(shù)據(jù)是通過(guò)文本文件的形式輸入的,所以事先應(yīng)在程序的文件夾下建立與之同名的文本文件,這是很繁瑣的一個(gè)過(guò)程。每次新建一個(gè)Fortran 90的文件就得重新輸入數(shù)據(jù),這也在無(wú)形之中減慢了運(yùn)行的速度,這是程序的第二個(gè)缺點(diǎn)。該程序的第三個(gè)缺點(diǎn)在于過(guò)多的引用了前人的程序,例如高斯消元法和Gauss-Seidel迭代法這兩個(gè)重量級(jí)的算法都是在引用的基礎(chǔ)上加以改進(jìn)而非原創(chuàng),這多少有些遜色,還有利用QuickWin作圖的程序也是從書(shū)上東拼西湊弄起來(lái)的,有些地方還沒(méi)真正掌握,這些都是應(yīng)該改進(jìn)的地方。針對(duì)以上的優(yōu)缺點(diǎn)我覺(jué)得我的程序還可以進(jìn)一步的優(yōu)化,例如怎
16、樣在既保證高精度的條件下又有很快的運(yùn)行速度,同時(shí)還不至于由于數(shù)據(jù)輸入引發(fā)的繁瑣?;谶@些我覺(jué)得我可以從一下幾個(gè)方面進(jìn)行優(yōu)化:首先我可以進(jìn)行代碼調(diào)整,代碼調(diào)整是一種局部的思維方,基本上不觸及算法層級(jí)。它面向的是代碼,而不是問(wèn)題。其中的語(yǔ)句調(diào)整、匯編重寫(xiě)、指令調(diào)整、換一種語(yǔ)言實(shí)現(xiàn)、換一個(gè)編譯器、循環(huán)展開(kāi)、參數(shù)傳遞優(yōu)化等都屬于這一層。其次可以選擇新的視角,新的視角強(qiáng)調(diào)的重點(diǎn)是針對(duì)問(wèn)題的算法,即選擇和構(gòu)造適合于問(wèn)題的算法。很多經(jīng)典算法都對(duì)問(wèn)題作了一些假設(shè)(包括我們當(dāng)前已經(jīng)完成的算法實(shí)現(xiàn)),而在面對(duì)實(shí)際問(wèn)題時(shí)“新的視角”提示我們應(yīng)該重新檢視這些假設(shè),并嘗試不同的思考問(wèn)題的角度,尋求適合于問(wèn)題的新算法,就
17、像該程序中高斯消元法和Gauss-Seidel迭代法的源程序代碼,我們就可以嘗試著用不同的方法進(jìn)行運(yùn)算。另外將問(wèn)題抽象為另一種等價(jià)的數(shù)學(xué)模型或假想機(jī)器模型,比如構(gòu)造出某種表驅(qū)動(dòng)狀態(tài)機(jī)。這一方面其實(shí)是第二中思想的延伸,只是產(chǎn)生的效果更加明顯,但它有其本身的特點(diǎn)(任何算法和優(yōu)化活動(dòng)都可以看作是他的投影),這一級(jí)一般可以產(chǎn)生無(wú)與倫比的快速程序,不過(guò)要達(dá)到這一水平需要大量修煉,并且思考時(shí)必須放棄很多已有的概念或者這些概念不再重要,比如:變量、指針、空間、函數(shù)、對(duì)象等,剩下的只應(yīng)該是那個(gè)表驅(qū)動(dòng)狀態(tài)機(jī)。 我想把這種境界描述為:空寂中,一些輸入驅(qū)動(dòng)著一個(gè)帶有狀態(tài)的機(jī)器按設(shè)定好的最短路線運(yùn)轉(zhuǎn)著。除此之外have nothing,即把解決一個(gè)問(wèn)題的算法看作一個(gè)機(jī)器,它有一些可變的狀態(tài)、有一些記憶、有一些按狀態(tài)運(yùn)行的規(guī)則,然后一些輸入驅(qū)動(dòng)這個(gè)機(jī)器運(yùn)轉(zhuǎn)。這就是第三中思想要求的思考優(yōu)化問(wèn)題的切入點(diǎn),也就是尋找一部機(jī)器,使它運(yùn)行經(jīng)過(guò)的路徑最短(可能是速度也可能是空間等等)總之,這次課程設(shè)計(jì)真的使我成長(zhǎng)了很多,在獨(dú)立解決問(wèn)題、與同學(xué)、老師交流等方面都有了很大的提高。這對(duì)于我以后走向社會(huì),處理更多更有難度的問(wèn)題打下了一個(gè)很好的基礎(chǔ)??梢哉f(shuō)正是一次又一次的實(shí)踐
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 重磅!杭州公積金貸款合同政策調(diào)整來(lái)了
- 房地產(chǎn)買(mǎi)賣合同書(shū)
- 有限責(zé)任公司股東入股合同協(xié)議書(shū)
- 植物模擬考試題+答案
- 租賃合同擔(dān)保書(shū)范文
- 磚廠人力資源合同新政策
- 用人單位與勞動(dòng)者簽訂的長(zhǎng)期勞動(dòng)合同
- 醫(yī)療設(shè)備融資租賃合同
- 建筑合同工程設(shè)計(jì)補(bǔ)充協(xié)議模板
- 智慧城市建設(shè):大數(shù)據(jù)共享框架合同
- 中學(xué)生春季傳染病預(yù)防知識(shí)
- 住院透析患者操作流程
- 云倉(cāng)合同標(biāo)準(zhǔn)文本
- 清明節(jié)假期安全教育主題班會(huì) 課件
- 倒閘操作考試試題及答案
- 2025年小學(xué)生安全知識(shí)競(jìng)賽考試指導(dǎo)題庫(kù)300題(含答案)
- 專題5 壓強(qiáng) 2021年和2022年四川省成都市中考物理模擬試題匯編
- 春季預(yù)防傳染病課件
- 2025年領(lǐng)導(dǎo)干部任前廉政法規(guī)知識(shí)競(jìng)賽試題庫(kù)及答案(130題)
- 康復(fù)科制度及職責(zé)
- 《心理B證論文:淺談小學(xué)生自我監(jiān)控能力的培養(yǎng)》3100字
評(píng)論
0/150
提交評(píng)論