资源描述:
《四阶龙格库塔和向前欧拉方法和隐式欧拉法以及改进欧拉法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验九欧拉方法信息与计算科学金融崔振威1一、实验目的:1、掌握欧拉算法设计及程序实现二、实验内容:1、p364-9.2.4、p386-9.5.6三、实验要求:主程序:欧拉方法(前项):function[x,y]=DEEuler(f,a,b,y0,n);%f:一阶常微分方程的一般表达式的右端函数%a:自变量的取值下限%b:自变量的取值上限%y0:函数的初值%n:积分的步数ifnargin<5,n=50;endh=(b-a)/n;x(1)=a;y(1)=y0;fori=1:nx(i+1)=x(i)+h;y(i+1)=y(i)+h*feval(f,x(i),y(i));endformat
2、short欧拉方法(后项):function[x,y]=BAEuler(f,a,b,y0,n);%f:一阶常微分方程的一般表达式的右端函数%a:自变量的取值下限%b:自变量的取值上限%y0:函数的初值%n:积分的步数ifnargin<5,n=50;endh=(b-a)/n;x(1)=a;y(1)=y0;fori=1:nx(i+1)=x(i)+h;y1=y(i)+h*feval(f,x(i),y(i));y(i+1)=y(i)+h*feval(f,x(i+1),y1);endformatshort梯形算法:function[I,step,h2]=CombineTraprl(f,a,b
3、,eps)%f被积函数%a,b积分上下限%eps精度%I积分结果%step积分的子区间数if(nargin==3)eps=1.0e-4;endn=1;h=(b-a)/2;I1=0;I2=(subs(sym(f),findsym(sym(f)),a)+subs(sym(f),findsym(sym(f)),b))/h;whileabs(I2-I1)>epsn=n+1;h=(b-a)/n;I1=I2;I2=0;fori=0:n-1x=a+h*i;x1=x+h;I2=I2+(h/2)*(subs(sym(f),findsym(sym(f)),x)+subs(sym(f),findsym(
4、sym(f)),x1));endendI=I2;step=n;h2=(b-a)/n;改进欧拉方法:function[x,y]=MoEuler(f,a,b,y0,n);%f:一阶常微分方程的一般表达式的右端函数%a:自变量的取值下限%b:自变量的取值上限%y0:函数的初值%n:积分的步数ifnargin<5,n=50;endh=(b-a)/n;x(1)=a;y(1)=y0;fori=1:nx(i+1)=x(i)+h;y1=y(i)+h*feval(f,x(i),y(i));y2=y(i)+h*feval(f,x(i+1),y1);y(i+1)=(y1+y2)/2;endformats
5、hort四阶龙格-库塔法:functiony=DELGKT4_lungkuta(f,h,a,b,y0,varvec)%f:一阶常微分方程的一般表达式的右端函数%h:积分步长%a:自变量的取值下限%b:自变量的取值上限%varvec:常微分方程的变量组formatlong;N=(b-a)/h;y=zeros(N+1,1);y(1)=y0;x=a:h:b;var=findsym(f);fori=2:N+1K1=Funval(f,varvec,[x(i-1)y(i-1)]);%Funval为程序所需要的函数K2=Funval(f,varvec,[x(i-1)+h/2y(i-1)+K1*h
6、/2]);K3=Funval(f,varvec,[x(i-1)+h/2y(i-1)+K2*h/2]);K4=Funval(f,varvec,[x(i-1)+hy(i-1)+h*K3]);y(i)=y(i-1)+h*(K1+2*K2+2*K3+K4)/6;endformatshort;p364-9.2.4欧拉方法(前项):1、解:执行20步时:编写函数文件doty.m如下:functionf=doty(x,y);f=x^2-y;在Matlab命令窗口输入:>>[x1,y1]=DEEuler('doty',0,2,1,20)可得到结果:x1=00.10000.20000.30000.4
7、0000.50000.60000.70000.80000.90001.00001.10001.20001.30001.40001.50001.60001.70001.80001.90002.0000y1=1.00000.90000.81100.73390.66950.61860.58170.55950.55260.56130.58620.62760.68580.76120.85410.96471.09321.23991.40491.58841.7906在Matlab命