資源描述:
《二階非線性常微分方程的打靶法matlab實現(xiàn).doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、二階非線性常微分方程的打靶法1.問題:試用打靶法求二階非線性常微分方程亮點邊值的數(shù)值解:要求用Matlab編程計算,請給出一些例子,驗證你的算法與程序的正確性。2.打靶法分析:非線性打靶法:非線性打靶法的基本原理是將兩點邊值問題(1)轉(zhuǎn)化為下面形式的初值問題令z=y′,將上述二階方程降為一階方程組3.Matlab源代碼:創(chuàng)建M文件:functionys=dbf(f,a,b,alfa,beta,h,eps)ff=@(x,y)[y(2),f(y(1),y(2),x)];xvalue=a:h:b;%x取值范圍n=le
2、ngth(xvalue)s0=a-0.01;%選取適當?shù)膕的初值x0=[alfa,s0];%迭代初值flag=0;%用于判斷精度y0=rk4(ff,a,x0,h,a,b);ifabs(y0(1,n)-beta)<=epsflag=1;y1=y0;elses1=s0+1;x0=[alfa,s1];y1=rk4(ff,a,x0,h,a,b);ifabs(y1(1,n)-beta)<=epsflag=1;endendifflag~=1whileabs(y1(1,n)-beta)>epss2=s1-(y1(1,n)-b
3、eta)*(s1-s0)/(y1(1,n)-y0(1,n));x0=[alfa,s2];y2=rk4(ff,a,x0,h,a,b);s0=s1;s1=s2;y0=y1;y1=y2;endendxvalue=a:h:b;yvalue=y1(1,:);ys=[xvalue',yvalue'];functionx=rk4(f,t0,x0,h,a,b)%rung-kuta法求每個點的近似值(參考大作業(yè)一)t=a:h:b;%迭代區(qū)間m=length(t);%區(qū)間長度t(1)=t0;x(:,1)=x0;%迭代初值fori=
4、1:m-1L1=f(t(i),x(:,i));L2=f(t(i)+h/2,x(:,i)'+(h/2)*L1);L3=f(t(i)+h/2,x(:,i)'+(h/2)*L2);L4=f(t(i)+h,x(:,i)'+h*L3);x(:,i+1)=x(:,i)'+(h/6)*(L1+2*L2+2*L3+L4);end4.舉例求二階非線性方程的邊值問題:在matlab控制臺中輸入:f=@(x,y,z)(x^2+z*x^2);x0l=0;x0u=2*exp(-1);alfa=0;beta=2;h=0.01dbf(f,x
5、0l,x0u,y0l,y0u,h,1e-6);>>y=ans(:,2);x=ans(:,1);>>plot(x,y,'-r')>>結(jié)果:再輸入:>>m=0:0.01:2;>>n=m.*exp(-1/2*m);>>plot(n,m)>>plot(x,y,'-r',n,m,'-b')5.結(jié)論:根據(jù)得到的圖像,可以看到在x的初值一起末值也就是α和β兩點做到了較好的逼近,但是中間部分的逼近不是很理想。我想可能是在編程的過程當中可能算法上有些問題。以后有機會再改進。