《數(shù)值分析龍格庫塔》由會員分享,可在線閱讀,更多相關(guān)《數(shù)值分析龍格庫塔(8頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、.、八、-
前言
隨著計算機的迅速發(fā)展和廣泛應(yīng)用,在眾多領(lǐng)域內(nèi),我們越來越認(rèn)識到科學(xué)計算是科學(xué)研究的重要方法。數(shù)值計算方法是一種利用計算機解決數(shù)學(xué)問題的數(shù)值近似解方法,特別是無法用人工過計算器計算的數(shù)學(xué)問題。數(shù)值計算方法常用于矩陣高次代數(shù)方程矩陣特征值與特征向量的數(shù)值解法,插值法,線性方程組迭代法,函數(shù)逼近,數(shù)值積分與微分,常微分方程初值問題數(shù)值解等。
作為數(shù)學(xué)與計算機之間的一條通道,數(shù)值計算的應(yīng)用范圍已十分廣泛,作為用計算機解決實際問題的紐帶,數(shù)值算法在求解線性方程組,曲線擬合、數(shù)值積分、數(shù)值微分,迭代方法、插值法、擬合法、最小二乘法等應(yīng)用廣泛。
數(shù)值計算方法是和計算機緊密相連的,現(xiàn)
2、代計算機的出現(xiàn)為大規(guī)模的數(shù)值計算創(chuàng)造了條件,集中而系統(tǒng)的研究適用于計算機的數(shù)值方法是十分必要的。數(shù)值計算方法是在數(shù)值計算實踐和理論分析的基礎(chǔ)上發(fā)展起來的。
通過數(shù)值計算方法與實驗將有助于我們理解和掌握數(shù)值計算方法基本理論和相關(guān)軟件的掌握,熟練求解一些數(shù)學(xué)模和運算。并提高我們的編程能力來解決實際問題。
摘要
對于本次計算方法與實習(xí)的實踐環(huán)節(jié),我們采用改進歐拉(Euler)方法對給定的數(shù)據(jù)進行分析,改進的歐拉(Euler)方法是解決常微分方程初值問題常用的數(shù)值解法,本文在簡要介紹改進歐拉(Euler)方法及四階龍格庫塔公式的基礎(chǔ)上,通過編寫C語言程序?qū)崿F(xiàn)兩種數(shù)值算法。通過本次實踐環(huán)節(jié),我們很
3、好的了解了常微分方程數(shù)值解法的原理。出色的完成了本次課程設(shè)計。
關(guān)鍵詞:歐拉方法;四階龍格--庫塔;C語言;數(shù)值分析目錄
前言-0-摘要-1-實驗設(shè)計內(nèi)容-3-
一.實驗?zāi)康?3-
二.實驗內(nèi)容-3-
三.實驗算法-3-
四.實驗程序-4-⑴改進歐拉方法-4-⑵四階龍格庫塔方法-5-實驗心得-7-
實驗設(shè)計內(nèi)容
一.實驗?zāi)康?
1)熟悉求解常微分方程初值問題的有關(guān)方法和理論,主要是改進歐拉法、四階龍格-庫塔法;
2)會編制上述方法的計算程序,包括求解微分方程組的計算程序。
二.實驗內(nèi)容
分別用改進的歐拉方法與四階龍格庫塔公式取(h=0.1)求解些列微分方程初值問題:
|
4、y,二x2+y2[y(0)=0
三.實驗算法
解一階常微分方程初值問題Iy,=f(X,y)a
5、(x,y)iih
#defineN20voidModEuler(float(*f)(float,float),floatx0,floaty0,floatxn,intn)
{inti;floatyp,yc,x=x0
6、,y=y0,h=(xn-x0)/n;printf("x[0]=%f\ty[0]=%f\n",x,y);for(i=1;i<=n;i++){yp=y+h*(*f)(x,y);x=x0+i*h;yc=y+h*(*f)(x,yp);y=(yp+yc)/2;printf("x[%d]=%f\ty[%d]=%f\n",i,x,i,y);}
}
floatf(floatx,floaty)
{returnx*x+y*y;
}
voidmain()floatxn=1,x0=0,y0=0;ModEuler(f,x0,y0,xn,N);getch();
}
運行結(jié)果聖iC:\Us&rs\l&novo
7、\Deskto?匚\改逆歐拉\Debug\2.exexE0]=fl.@0(3(3(30;<£11=0.0500130k[23=0.130000\(31=0.1500130乂[41=0.20(3(3(30;<£51=0.2500130x[63=0.330000\(71=0.3500130x[8]=0.46^(3(30\(9]=0.4S0013O;<£101=0.5001300k£11]=0.5S0600;<£121=0.6001300;<£131=0.650600;<£14]=0.7001300;<£151=0.750600x[163=0.800000k[171=0.850600x[183=0.
8、900000\£191=0.950600k[20]=1.300000
y[0]=0.00000Qu[13=0.300063y[2]=0.i3003?5U[33=0.301188y[41=0.302750y[51=0.305313U[63=0.309128y[71=0.014448y[81=0.321526y[?]=0.030622y[10]=0.041999y[ll]=0.055931y[12]=0.072698y[13]=0.392599y[14]=0.115952y[15]=0.143099y[161=0.174415y[l?]=0.210319y[18]=0.251283y[19]=0
9、.297849U[203=0.350646
⑵四階龍格庫塔方法
1.龍格庫塔程序
#include
voidRunge_Kutta(float(*f)(floatx,floaty),floata,floatb,floaty0,intN)
{floatx=a,y=y0,K1,K2,K3,K4;floath=(b-a)/N;inti;printf("x[0]=%f\ty[0]=%f\n",x,y);for(i=1;i<=N;i++){K1=(*f)(x,y);K2=(*f)(x+h/2,y+h*K1/2);K3=(*f)(x+h/2,y+h*K2/2);K4=(*f
10、)(x+h,y+h*K3);y=y+h*(K1+2*K2+2*K3+K4)/6;x=a+i*h;
printf("x[%d]=%f\ty[%d]=%f\n",i,x,i,y);}
}
floatf(floatx,floaty)
{returnx*x+y*y;
}
voidmain()
{floata=0,b=1,y0=0;Runge_Kutta(f,a,b,y0,20);getch();
}
2.龍格庫塔結(jié)果]0C:\Users\lenovo\Deskto芯陪庫塔\Debug\4.exe
X[11=0.050000K[2]=0.190000x[33=0.15060(3X[4
11、J=0-20000(3x[53=0.25060(3x[6J=0.30000(3x[7J=0.35060(3k[8]=0.4@@@@0x[?J=0.45060(3x[10]=0-50600^x[ll]=0_550G^x[12J=0-60600^xE13]=0_65@0^x[141=0-70000^xE15]=0-75@0^xE16]=0.80000nxE17]=0.85@00nx[18]=0.90000nxE19]=0.95@00nK[20]=1.000000
J=0.S(30(30yu[11=0.000042y[2J=0.5^0333y[3]=B.@01125y[4J=0.SB266?y[5
12、J=0.S052C!9y[6J=0.S?9003y[7J=0.014392y[8]=B.021359y[9]=0.038434y[10]=0.@41791y[111=0.055701y[123=0.072448y[131=0.392328y[141=0.115660y[15]=0.142785y[161=0.174080y[17]=0.209963y[181=0.250907y[19]=0.297453y[2ai=0_350232
S3
實驗心得
課程設(shè)計是培養(yǎng)學(xué)生綜合運用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學(xué)生實際工作能力的具體訓(xùn)練和考察過程.隨著科學(xué)
13、技術(shù)發(fā)展的日新日異,程序軟件已經(jīng)成為當(dāng)今計算機應(yīng)用中空前活躍的領(lǐng)域,在生活領(lǐng)域中的應(yīng)用可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握簡單的軟件的開發(fā)技術(shù)是十分重要的。
回顧起此次數(shù)值分析的課程設(shè)計,至今我仍感慨頗多,的確,從理論到實踐,在整整一個星期的日子里,可以說得是苦多于甜,但是可以學(xué)到很多很多的的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在設(shè)
14、計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,通過這次課程設(shè)計之后,一定把以前所學(xué)過的知識重新溫故。
我得到了很多同學(xué)的幫助。我想沒有他們我可能都要放棄了,因為我本人對數(shù)值分析的算法本來就不是很熟悉,學(xué)的東西也不能很好的靈活應(yīng)用,理論聯(lián)系不了實際。以前的匯編語言沒學(xué)好,一開始的程序這塊兒就要令我抓狂了。
通過這段時間的學(xué)習(xí),我認(rèn)為要學(xué)好C語言編程這門課程,不僅要認(rèn)真閱讀課本知識,更重要的是要通過上機實踐才能增強和鞏固我的知識。特別是作為大學(xué)生,更要注重實踐這一環(huán)節(jié),只有這樣我們才能成為合格的計算機人材。整個過程不斷的調(diào)試,在調(diào)用子程序的時候遇到了部分問題,最后幸好都解決了。通過這次課程設(shè)計也穩(wěn)固了一些已經(jīng)學(xué)習(xí)的數(shù)值分析的算法,同時了解了一些以前沒有接觸的數(shù)值分析的算法??傊?,這次的課程設(shè)計受益匪淺。
參考文獻
[1] 王高熊,周之銘,朱思銘,等?數(shù)值計算原理[M].北京:清華大學(xué)出版社,2000李慶揚,王能超,易大義,數(shù)值分析[M],北京:清華大學(xué)出版社,2001李慶揚,數(shù)值計算原理[M].北京:清華大學(xué)出版社.2000孫志忠,吳宏偉,計算方法與實習(xí),東南大學(xué)出版社