資源描述:
《數(shù)模微分方程的數(shù)值求解技術(shù)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、常微分方程的數(shù)值求解技術(shù)1Euler方法2Runge-Kutta方法3線性多步方法1Euler方法1.1從一個(gè)人口增長(zhǎng)(Malthus)模型談起英國人口統(tǒng)計(jì)學(xué)家馬爾薩斯(Malthus,1766-1834年)調(diào)查了英國100多年人口出生統(tǒng)計(jì)資料,發(fā)現(xiàn)人口出生率穩(wěn)定于一個(gè)常數(shù)。并提出了著名的Malthus人口增長(zhǎng)模型。此模型的基本假設(shè)是:在考慮一個(gè)國家或地區(qū)的人口總數(shù)隨時(shí)間變化的人口自然增長(zhǎng)過程中,略去遷移、自然環(huán)境條件等因素對(duì)人口變化的影響,視凈相對(duì)增長(zhǎng)率(出生率與死亡率之差)是常數(shù)。即單位時(shí)間內(nèi)人口的增長(zhǎng)量與人口成正比
2、,比例系數(shù)為。此假設(shè)就是一個(gè)常微分方程的問題。記為時(shí)刻的人口,視為連續(xù)、可微函數(shù)。據(jù)Malthus的假設(shè),在到時(shí)間內(nèi)人口的增長(zhǎng)量為,又設(shè)時(shí)的人口為,令時(shí),可得滿足方程假設(shè)取1790年為初始狀態(tài),已知與1800年的實(shí)際人口,由最小二乘法擬合,可以定出。計(jì)算1790年~1880年間的人口(百萬),。即求解微分方程以下先介紹Euler方法,再給出此微分方程的數(shù)值解。1).Euler公式(1.2)2).改進(jìn)的Euler公式(1.5)此公式稱為改進(jìn)的Euler公式。它也可寫成一個(gè)顯式公式(1.6)或17(1.7)3).人口增長(zhǎng)(M
3、althus)模型的題解例1取1790年為初始狀態(tài),已知與1800年的實(shí)際人口,由最小二乘法擬合,可以定出。用改進(jìn)的Euler公式計(jì)算1790年~1880年間的人口(百萬),即求解微分方程其中,。解改進(jìn)的Euler公式具體的計(jì)算公式為,計(jì)算結(jié)果如下表6-1。表6-1用改進(jìn)的Euler公式估計(jì)1790~1880年份的人口數(shù)據(jù)(106)年份1790180018101820183018401850186018701880ti0123456789xi3.95.28117.15129.683713.112917.756524.04
4、4532.559344.089359.70241.2軟件介紹在本節(jié)里,將通過數(shù)值例子和Matlab程序介紹本節(jié)提出的Euler公式及改進(jìn)的Euler公式的上機(jī)實(shí)現(xiàn)方法。1.根據(jù)式(6.1.2)及算法6-1所表示的Euler公式,編寫Matlab程序(函數(shù)名:Euler_f.m)。function[x,y]=Euler_f(fun1,x0,y0,h,N)%fun1為一階微分方程的函數(shù);%x0,y0為初始條件;%h為區(qū)間步長(zhǎng);%N為區(qū)間的個(gè)數(shù);%x為Xn構(gòu)成的向量;%y為Yn構(gòu)成的向量.17x=zeros(1,N+1);y=
5、zeros(1,N+1);x(1)=x0;y(1)=y0;forn=1:Nx(n+1)=x(n)+h;y(n+1)=y(n)+h*feval(fun1,x(n),y(n));end2.根據(jù)式(6.1.7)及算法6-2所表示的改進(jìn)的Euler公式,編寫Matlab程序(函數(shù)名:Euler_r.m)。function[x,y]=Euler_r(fun1,x0,y0,h,N)%fun1為一階微分方程的函數(shù);%x0,y0為初始條件;%h為區(qū)間步長(zhǎng);%N為區(qū)間的個(gè)數(shù);%x為Xn構(gòu)成的向量;%y為Yn構(gòu)成的向量.x=zeros(1,
6、N+1);y=zeros(1,N+1);x(1)=x0;y(1)=y0;forn=1:Nx(n+1)=x(n)+h;ybar=y(n)+h*feval(fun1,x(n),y(n));y(n+1)=y(n)+h/2*(feval(fun1,x(n),y(n))+feval(fun1,x(n+1),ybar));end例2采用Euler公式(Euler_f.m)和改進(jìn)的Euler公式(Euler_r.m)的Matlab程序上機(jī)實(shí)現(xiàn)人口指數(shù)增長(zhǎng)(Malthus)模型所反映的微分方程的題解。其中,。解利用Matlsb編程過程如
7、下:求精確解>>y=dsolve(‘Dy=0.307*y’,’y(0)=3.9’,’x’)運(yùn)行后顯示精確解y=39/10*exp(307/1000*x);(1)建立并保存名為fun11.m的M文件函數(shù)。functionf=fun1(x,y)f=0.307*y;(2)建立并保存名為Euler_f.m和Euler_r.m的M文件函數(shù)。(3)在Matlab工作窗口輸入程序%求精確解y=dsolve(‘Dy=0.307*y’,’y(0)=3.9’,’x’)17%y=39/10*exp(307/1000*x);%y1為用歐拉公式計(jì)
8、算的數(shù)值解;%y2為用改進(jìn)的歐拉公式計(jì)算的數(shù)值解.x=0:1:9;y=39/10*exp(307/1000*x);[x,y1]=Euler_f(@fun1,0,3.9,1,9)[x,y2]=Euler_r(@fun1,0,3.9,1,9)plot(x,y1,'*r',x,y2,'pb',x,y)legend('用歐拉