欧拉法,改进欧拉法,斐波那契法原理及流程图

欧拉法,改进欧拉法,斐波那契法原理及流程图
欧拉法,改进欧拉法,斐波那契法原理及流程图

1欧拉法求微分方程

方法说明

欧拉(EUler)法是解常微分方程初值问题

ydx

= (4.1)

最简单的数值方法,其具体做法是,将区间[a, b ]进行N 等

分:

Iy (X + 方)=I y(X) + )dt

[Λ(^O ) = 7O

(4.2) 再对式(4 J)右端积分用矩形公式计算.则有

t y(x+册=I yO)+ ?∕(x Jo))+?(/),(4. 3)

在式(4. 3)右端取X =心,舍去余项。则得

Λ = Λ÷?r

(?>Λ) 作为Wl)的近似值。

步长 N .并将式(4.1)写成等价的积分形

在式(4. 3)右端取X=XI-y∞ = ?vι,舍去余项,则得

yι = 7ι + V 71)

作为yE)的近似值.

一般地,在式(4. 3)右端取舍去余项,则得

‰ι = Λ +?r(兀,儿),“ IU…,“一1 (4. 4)

作为班和】)的近似值.式(4. 4)为欧拉法计算公式.

过点的积分曲线就是初值问题式(4. 1)的解.

欧拉法的儿何意义是,过点4(心几)引斜率为5沟)的积分曲线的切线,此切线与直线XFl的交点为J?C?M),再过点引以J f OWL)为斜率的切线与直线2乃的交点为▲(乃宀),依此类推,从A-I(Vl>Λ-1)出发,作以Jr(VlJλ-I)为斜率的切线,此切线与直线X=兀交点为4(耳,儿).于是便得到过点A O A L- A ftI A fc的一条折线,见图4.1.过(心儿)的积分曲线则用此折线来代替.因此,这种方法亦称折线法.

图4.1

例:用欧拉法求微分方程y, = y,y(0) =1,h = 0.1,区间为_ y _欧拉法流程图如下:

欧拉法程序如下:

clear;

clc;

xl=0;

x2=l;

h=0.1;

x0=0;

yθ=i;

N=(X2?xl)/h;%要计算的次数

X(I)=X0;y(i)=yθ;

for n=l:N

x(n+l)=x(n)+h;

y (n+l)=y (n )+h * (y (n )-2 *x (n )∕y (n )); end

X=X

Y=y

2改进欧拉法求微分方程

方法说明

由于欧拉法采用矩形公式计算积分产生较大截断误差.改进欧拉法(乂称改进折线法)是采取梯形公式來计算式(4. 3)右端积分,则有

Xτ+Λ) = Xx)+?/(XXX)÷∕(z+?y(^+?))]+^(∕)

2 (5. 1)

在式(5.1)右端取X = Xθ,舍去余项,则得

^ι = Λ+∣[∕?>Λ)÷∕(^ι,Λ)]

将乃作为巩小的近似值.

在式(5.1)右端再取兀=丙丿(引=必,舍去余项,则得

乃F+紳(W)+畑”)]

将乃作为班乃)的近似值.

一般地,在式(5.1)右端取X=Zy(XJ=儿,舍去余项.则得

儿+】=儿 + 芬了E必)+?∕(S必J],gQi,…,”一1(5 2)

将7s+1作为?y氐J的近似值.

式(5. 2)为改进欧拉法计算公式.

流程图如下:

例:用改进欧拉法求微分方程y? = y-^,y(O) =1,11 =0.1,区间为E,1J y

改进欧拉法程序如下:

clear;

clc;

xl=0;

x2=l;

h=0.1;

x0=0;

yo=i;

P(I)=o;

N=(x2-xl)∕h;

X(I)=X0;

y(i)=yθ;

for n=l:N

x(n+l)=x(n)+h;

y(n+l)=y(n)+h*(y(n)-2*x(n)∕y(n));

p(n+l)=y(n)+h*(y(n+l)-2*x(n)∕y(n+l));

y(n+l)=(y(n+l)+p(n+l))∕2;

end

X=X

Y=y

3斐波那契法求极值

方法说明

斐波那契法原理类似于黄金分割法,只是搜索区间的缩短率不再采用黄金分割数0.618o如图7.1所示,只要在[a, b]内取两点xl, x2,并计算岀f(xl),f(x2),通过比较,可将区间[a, b]缩短为[a, x2]或[xl,b]。因为新的区间内包含一个已经计算过函数值的点,所以再从其中取一个试点,乂可将这个新区间再缩短一次,不断地重复这个过程,直至最终的区间长度缩短到满足预先给定的精确度为止。

常微分方程作业欧拉法与改进欧拉法

P77 31.利用改进欧拉方法计算下列初值问题,并画出近似解的草图:dy + =t = t y y ≤ ≤ ,2 ;5.0 0,3 )0( )1(= ,1 ? dt 代码: %改进欧拉法 function Euler(t0,y0,inv,h) n=round(inv(2)-inv(1))/h; t(1)=t0; y(1)=y0; for i=1:n y1(i+1)=y(i)+h*fun(t(i),y(i)); t(i+1)=t(i)+h; y(i+1)=y(i)+1/2*h*(fun(t(i),y(i))+ fun(t(i+1),y1(i+1))) end plot(t,y,'*r') function y=fun(t,y); y=y+1; 调用:Euler(0,3,[0,2],0.5) 得到解析解:hold on; y=dsolve('Dy=y+1','(y(0)=3)','t'); ezplot(y,[0,2]) 图像:

dy y =t - t y ;2.0 t = ≤ )0( 0,5.0 ,4 )2(2= ≤ ? ,2 dt 代码: function Euler1(t0,y0,inv,h) n=round(inv(2)-inv(1))/h; t(1)=t0; y(1)=y0; for i=1:n y1(i+1)=y(i)+h*fun(t(i),y(i)); t(i+1)=t(i)+h; y(i+1)=y(i)+1/2*h*(fun(t(i),y(i))+ fun(t(i+1),y1(i+1))) end plot(t,y,'*r') function y=fun(t,y); y=y^2-4*t; 调用: Euler1(0,0.5,[0,2],0.2) 图像:

欧拉及改进的欧拉法求解常微分方程

生物信息技术0801 徐聪U200812594 #include #include void f1(double *y,double *x,double *yy) { y[0]=2.0; x[0]=0.0; yy[0]=2.0; for(int i=1;i<=9;i++) { x[i]=x[i-1]+0.2; y[i]=y[i-1]+0.2*(y[i-1]-x[i-1]); yy[i]=x[i]+1+exp(x[i]); printf("若x=%f,计算值是%f,真实值是%f,截断误差是%f\n ",x[i],y[i],yy[i],y[i]-yy[i]); } }; void f2(double *y,double *x,double *yy) { y[0]=1.0; x[0]=0.0; yy[0]=1.0; for(int i=1;i<=9;i++) { x[i]=x[i-1]+0.2; y[i]=y[i-1]+0.2*(2*y[i-1]+x[i-1]*x[i-1]); yy[i]=-0.5*(x[i]*x[i]+x[i]+0.5)+1.25*exp(2*x[i]); printf("若x=%f,计算值是%f,真实值是%f,截断误差是%f\n ",x[i],y[i],yy[i],y[i]-yy[i]); } }; void f3(double *y,double *x,double *yy,double *y0) { y[0]=2.0; x[0]=0.0; yy[0]=2.0; for(int i=1;i<=9;i++) { x[i]=x[i-1]+0.2; y0[i]=y[i-1]+0.2*(y[i-1]-x[i-1]); y[i]=y[i-1]+0.1*(y[i-1]-x[i-1]+y0[i-1]-x[i-1]);

用Euler法、改进的Euler法及四阶的龙格库塔法求解初值问题

微分方程数值解课程设计题目 1(30分)分别用Euler 法、改进的Euler 法及四阶的龙格库塔 法求解初值问题:????? =- =1 )0(2'u u t u u 1 0≤> Euler('fun',0,1,0.1,10) T = Columns 1 through 10 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 1.1000 1.1918 1.2774 1.3582 1.4351 1.5090 1.5803 1.6498 1.7178 Column 11 1.0000 1.7848 ②.当h=0.2时 >> Euler('fun',0,1,0.2,5) T = 0 0.2000 0.4000 0.6000 0.8000 1.0000 1.0000 1.2000 1.3733 1.5315 1.6811 1.8269 (3).改进的Euler 法: M 文件:Euler_modify.m function E=Euler_modify(fun,x0,y0,h,N) x=zeros(1,N+1);y=zeros(1,N+1);

实验8欧拉法_改进欧拉法_线性多步法

西华数学与计算机学院上机实践报告 课程名称:计算方法A 年级:2010级 上机实践成绩: 指导教师:严常龙 姓名:李国强 上机实践名称:解常微分方程初值问题 学号:362011********* 上机实践日期:2013.12.25 上机实践编号:8 上机实践时间:14:00 一、目的 1.通过本实验加深对欧拉法、改进欧拉法、线性多步法的构造过程的理解; 2.能对上述四种方法提出正确的算法描述编程实现,观察计算结果的改善情况。 二、内容与设计思想 自选常微分方程的初值问题,分别用欧拉法、改进欧拉法求解。 分别用以上两种方法求解常微分方程初值问题: 2 '()1,([0.0,1.4],0.1)(0)0.0 y x y h y ?=+=?=?求解区间取步长 三、使用环境 操作系统:Win 8 软件平台:Visual C++ 6.0 四、核心代码及调试过程 #include #include #define f(y) (y*y+1) #define m 0.0//初值为0 #define h 0.1//步长为0.1 #define n 14//迭代次数为14 #define a 0.0//定义区间长度 #define d 1.4 void gjol();//改进欧拉法 void ol();//欧拉法 main() { ol(); printf("\n"); gjol(); } void gjol() {

int i; float y[n+1]; y[0]=m;//赋初值 printf("改进欧拉法\n"); for(i=0;i

Euler法和改进的Euler法实验报告

用Euler法和改进的Euler法求u’=-5u(0≤t≤1),u(0)=1的数值解,步长h=0.1,0.05,并比较两个算法的精度。 解: 1)当步长h=0.1时 编写程序如下所示 clf clear clc %直接求解微分方程 y=dsolve('Dy=-5*y','y(0)=1','t') %Euler法 h=0.1; t=0:h:1; n=length(t); u=zeros(1,n); u(1)=1; zbu(1,1)=t(1); zbu(2,1)=u(1); for i=2:n f=-5*u(i-1); u(i)=u(i-1)+h*f; zbu(1,i)=t(i); zbu(2,i)=u(i); end zbu %改进的Euler法 v=zeros(1,n); v0=zeros(1,n); v(1)=1; zbv(1,1)=t(1); zbv(2,1)=v(1); for i=2:n f=-5*v(i-1); v0(i)=v(i-1)+h*f; v(i)=v(i-1)+h/2*(f-5*v0(i)); zbv(1,i)=t(i); zbv(2,i)=v(i); end zbv plot(t,u,'r*','markersize',10) hold on, plot(t,v,'r.','markersize',20)

hold on, ezplot(y,[0,1]) hold on, title('Euler法和改进的Euler法比较(h=0.1)), grid on legend('Euler法','?改进的Euler法','解析解') %解真值 h=0.1; t=0:h:1; n=length(t); for i=1:n y(i)=1/exp(5*t(i)); %通过第一部分程序直接解得的解析解 zby(1,i)=t(i); zby(2,i)=y(i); end zby 我们可以得到计算后的结果图像如图一所示 图1 Euler法和改进的Euler法比较(h=0.1) 同时,我们得到Euler法,改进的Euler法和解析解的在各点处数值分别如下所示: t坐标0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 改进欧拉 1.0000 0.6250 0.3906 0.2441 0.1526 0.0954 0.0596 0.0373 0.0233 0.0146 0.0091

用改进的欧拉方法和四阶龙格-库塔方法解初值问题

用改进的欧拉方法和四阶龙格-库塔方法解初值问题 一、题目: 取步长2.0=h ,分别用改进的欧拉方法和四阶龙格—库塔方法解初值问题 ? ??=≤≤+=.1)0(;10,'y x y x y 并比较结果。 二、基本思想: 1.改进的欧拉方法 改进的欧拉方法用梯形公式计算()()()()+1+1-=,.n n x n n x y x y x f x y x dx ?中的积分,并以 n y 和+1n y 分别表示()n y x 和()+1n y x 的近似值,就得到 ()()()+1+1+1=+,+,.2 n n n n n n h y y f x y f x y (梯形公式) 梯形公式也是一个一步法公式。由于公式右端也含有未知的+1n y ,故被称作是隐式的。隐式格式实际上是关于+1n y 的一个函数方程。为了避免解方程,可以采用欧拉方法计算初始值,再由梯形公式计算。这样建立起来的计算格式称为改进的欧拉格式: ()()()()+1+1+1=+,,=+,+,.2 p n n n n n n n n n y y hf x y h y y f x y f x y ????? 梯形公式也可以采用迭代法求解。如果仍然采用欧拉方法计算迭代初值,那么计算格式就是 []()[]()[]()() 0+1+1+1+1+1=+,,=+,+,.2n n n n k k n n n n n n y y hf x y h y y f x y f x y ????? 由于已假定(),f x y 满足里普希兹条件,所以有 [][][]()[]() [][]+1-1-1+1+1+1,+1+1+1+1+1-=-,-.22 k k k k k k n n n n n n n n h hL y y f x y f x y y y ≤ 从而,迭代的收敛条件是0<<1.2hL 2.四阶龙格-库塔方法 龙格—库塔方法不是用求导数的办法,而是用计算不同点上()y x f ,的函数值,然后对这些函数值作线性拟合,构造近似公式。组合的原则是使得近似公式与泰勒展开式有尽可能多的项吻合,以达到较高的精度。 改进的欧拉格式

第8章 常微分方程数值解法 本章主要内容: 1.欧拉法、改进欧拉法 2

第8章 常微分方程数值解法 本章主要内容: 1.欧拉法、改进欧拉法. 2.龙格-库塔法。 3.单步法的收敛性与稳定性。 重点、难点 一、微分方程的数值解法 在工程技术或自然科学中,我们会遇到的许多微分方程的问题,而我们只能对其中具有较简单形式的微分方程才能够求出它们的精确解。对于大量的微分方程问题我们需要考虑求它们的满足一定精度要求的近似解的方法,称为微分方程的数值解法。本章我们主要 讨论常微分方程初值问题?????==00 )() ,(y x y y x f dx dy 的数值解法。 数值解法的基本思想是:在常微分方程初值问题解的存在区间[a,b]内,取n+1个节点a=x 0<x 1<…<x N =b (其中差h n = x n –x n-1称为步长,一般取h 为常数,即等步长),在这些节点上把常微分方程的初值问题离散化为差分方程的相应问题,再求出这些点的上的差分方程值作为相应的微分方程的近似值(满足精度要求)。 二、欧拉法与改进欧拉法 欧拉法与改进欧拉法是用数值积分方法对微分方程进行离散化的一种方法。 将常微分方程),(y x f y ='变为() *+=?++1 1))(,()()(n x n x n n dt t y t f x y x y 1.欧拉法(欧拉折线法) 欧拉法是求解常微分方程初值问题的一种最简单的数值解法。 欧拉法的基本思想:用左矩阵公式计算(*)式右端积分,则得欧拉法的计算公式为:N a b h N n y x hf y y n n n n -= -=+=+)1,...,1,0(),(1 欧拉法局部截断误差 11121 )(2 ++++≤≤''=n n n n n x x y h R ξξ或简记为O (h 2)。

改进欧拉(c语言程序)

1)改进欧拉法求解常微分方程的初值问题 #include float func(float x,float y) { return(y-x); } float euler(float x0,float xn,float y0,int N) { float x,y,yp,yc,h; int i; x=x0; y=y0; h=(xn-x0)/(float)N; for(i=1;i<=N;i++) { yp=y+h*func(x,y); x=x0+i*h; yc=y+h*func(x,yp); y=(yp+yc)/2.0; } return(y); } main() { float x0,xn,y0,e; int n; printf("\ninput n:\n "); scanf("%d",&n); printf("input x0,xn:\n "); scanf("%f,%f",&x0,&xn); printf("input y0:\n "); scanf("%f",&y0); e=euler(x0,xn,y0,n); printf("y(%f)=%6.4f",y0,e); } input n: 20 input x0,xn: 1,6 input y0: 2 y(2.000000)=7.0000Press any key to continue (2)四阶龙格—库塔法

#include float func(float x,float y) { return(x-y); } float runge_kutta(float x0,float xn,float y0,int N) { float x,y,y1,y2,h,xh; float d1,d2,d3,d4; int i; x=x0; y=y0; h=(xn-x0)/(float)N; for(i=1;i<=N;i++) { xh=x+h/2; d1=func(x,y); d2=func(xh,y+h*d1/2.0); d3=func(xh,y+h*d2/2.0); d4=func(xh,y+h*d3); y=y+h*(d1+2*d2+2*d3+d4)/6.0; x=x0+i*h; } return(y); } main() { float x0,xn,y0,e; int N; printf("\ninput n:\n "); scanf("%d",&N); printf("input x0,xn:\n "); scanf("%f,%f",&x0,&xn); printf("input y0:\n "); scanf("%f",&y0); e=runge_kutta(x0,xn,y0,N); printf("y(%f)=%8.6f",y0,e); } input n: 10 input x0,xn: 1,2 input y0: 5 y(5.000000)=2.833863Press any key to continue

常微分方程作业欧拉法与改进欧拉法

常微分方程作业欧拉法与改进欧 拉法 P77 31.利用改进欧拉方法计算下列初值问题,并画出近似解的草图: (1) 3 =y 1,y(0) =3,0汀岂2, :t=0.5; dt 代码: %改进欧拉法 fun cti on Euler(t0,y0,i nv,h) n=rou nd(i nv(2)-in v(1))/h; t(1)=t0; y(1)=y0; for i=1: n y1(i+1)=y(i)+h*fun(t(i),y(i)); t(i+1)=t(i)+h;

y(i+1)=y (i)+1/2*h*(fu n( t(i),y(i))+ fun( t(i+1),y1(i+1))) end plot(t,y,'*r') fun cti on y=fun (t,y); y=y+1; 调用:Euler(0,3,[0,2],0.5) 得到解析解:hold on; y=dsolve('Dy=y+1','(y(0)=3)', 't'); ezplot(y,[0,2])

图像: (2)女=y2—4t,y(0) =0.5,0 叭乞2, :t =0.2; dt 代码: function Euler1(t0,y0,inv,h) n=rou nd(i nv(2)-in v(1))/h; t(1)=t0; y(1)=y0; for i=1: n y1(i+1)=y(i)+h*fu n(t(i),y(i)); t(i+l)=t(i)+h; y(i+1)=y (i)+1/2*h*(fu n( t(i),y(i))+ fun( t(i+1),y1(i+1)))

end plot(t,y,'*r') fun cti on y=fun (t,y); y=y A2-4*t; 调用: Euler1(0,0.5,[0,2],0.2) 图像:

改进Euler方法

第九章 解常微分方程初值问题 4. 改进Euler 方法 我们先用Euler 公式求的一个初步的近似值,再用梯形公式将它校正一次,即按(5)迭代一次得y 1+n ,这个结果称为校正值,这样建立的校正系统通常成为改进Euler 公式. y 1+n = y n +h /2(f (n n y x ,) + f (x n +1, n y + h* f (n n y x ,))) (6) 即迭代公式为: ? ???? +=+=+),,(*),,(*1p n n c n n n p y x f h y y y x f h y y (7)

进过计算得出改进Euler 法比Euler 法 明显改善了精度. 上机实验⑷ 上机题目:贬值求一阶常微分方程的初值问题 实验目的:掌握各种Euler 方法和梯形法。 进过计算结果来分析四种方法的优缺点,掌握规律。 分析结果。 实验要求:用不同的方法来解同一个例子。 ① 上机前充分准备,复习有关内容,写出计算步骤,查对程 序。②改进Euler 法在Matlab 环境中运算,并分析出最好的方法,再给出它的流程图。③实验结束后写出完整的实验报告。 算法说明:①经过所给出的方程组和初值初步改变方程组。 ②由以上四种方法的计算公式来逐步计算y 的每个值。 ③最后为了方便比较列为表最适合。 上机例题:例1.后退Euler 方法解初值问题,h =0.1 ? ??=??='1y(0)1x 0 2x/y, -y y Matlab 程序: function[x,y]=gaijing(f,x0,y0,a,b,n) h=(b-a)/n; %定义并计算步长 for k=1:n+1 x(k)=a+(k-1)*h; %计算x(k) end y(1)=y0; for i=1:n yp=y(i)+h*subs(subs(f,x(i)),y(i)); %由改进Euler 的公式计算. yc=y(i)+h*subs(subs(f,x(i+1)),yp); y(i+1)=(1/2)*(yp+yc); end disp(sprintf(' i x(i) y(i)')); %为了方便以规定格式先输出 i,x(i),y(i). for i=1:n disp(sprintf(' %d %f %f',i,x(i+1),y(i+1))); %为了方便观察结果在先输出的 格式下输出结果 end s=y(i); 运行结果: [x,y]=gaijing('y-2*x/y',0,1,0,1,10) i x(i) y(i) 1 0.100000 1.095909

欧拉法,改进欧拉法,斐波那契法基础原理及经过流程图

1欧拉法求微分方程 方法说明 欧拉(Euler)法是解常微分方程初值问题 (4.1) 最简单的数值方法,其具体做法是,将区间[a,b]进行N等分: ,步长.并将式(4.1)写成等价的积分形式 (4.2) 再对式(4.2)右端积分用矩形公式计算,则有 , (4.3) 在式(4.3)右端取,舍去余项。则得 , 作为的近似值。 在式(4.3)右端取,舍去余项,则得

y2=y1+?f(x1,y1) 作为的近似值. 一般地,在式(4.3)右端取舍去余项,则得 (4.4) 作为的近似值.式(4.4)为欧拉法计算公式. 我们知道微分方程的解是平面上的一族积分曲线,这族曲线中过点的积分曲线就是初值问题式(4.1)的解. 欧拉法的几何意义是,过点引斜率为的积分曲线的切线,此切线与直线的交点为,再过点引以为斜率的切线与直线的交点为,依此类推,从出发,作以为斜率的切线,此切线与直线交点为.于是便得到过点的一条折线,见图4.1.过的积分曲线则用此折线来代替.因此,这种方法亦称折线法. 图4.1

例:用欧拉法求微分方程[ ]2',(0)1,0.1,0,1x y y y h y 区间为=-== 欧拉法流程图如下: 欧拉法程序如下: clear; clc; x1=0; x2=1; h=0.1; x0=0; y0=1; N=(x2-x1)/h;%要计算的次数 x(1)=x0; y(1)=y0; for n=1:N x(n+1)=x(n)+h;

y(n+1)=y(n)+h*(y(n)-2*x(n)/y(n)); end X=x Y=y 2改进欧拉法求微分方程 方法说明 由于欧拉法采用矩形公式计算积分产生较大截断误差.改进欧拉法(又称改进折线法)是采取梯形公式来计算式(4.3)右端积分,则有 (5.1) 在式(5.1)右端取,舍去余项,则得 将作为的近似值. 在式(5.1)右端再取,舍去余项,则得 将作为的近似值. 一般地,在式(5.1)右端取,舍去余项.则得 (5.2)

方程的改进欧拉公式

2013-2014(1)专业课程实践论文题目:方程的改进欧拉公式

一、算法理论 按照?? ? ??=++=+=+++++ ,2,1,0)],,(),([2)(1) (11)1(,1)0(k y x f y x f h y y y x hf y y n k n n n n n k n n n n 计算?????=≤≤=0 )(),,(y a y b x a y x f dx dy 的数值解时候,如果每次只迭代一次,相当于将欧 拉公式与梯形格式结合使用:先用欧拉公式求出1+n y ,称为预测值,然后用梯形格式校正求得近似值1+n y ,即 预测: ),(1n n n n y x hf y y +=+; 校正: )],(),([2 111+++++=n n n n n n y x f y x f h y y 将上式称为由欧拉公式和梯形格式得到的预测—校正系统,也叫改进的欧拉公式。它是显式的单步法。 为了便于编制程序上机,上式常改写成 ),(n n n p y x hf y y += ),(p n n q y h x hf y y ++= )(2 1 1q p n y y y +=+ 改进的欧拉方法算法如下: (1)输入),,(,,y x f b a 区间等分数N ,初始值0y 。 (2)输出)(x y 在x 的N 个点处的近似值y 。 (3)置0,,0,y y a x n N a b h ===-= 。 (4)计算),(),,(p q p y h x hf y y y x hf y y ++=+=,置, ),(2 1 x h x y y y q p ?+?+输出),(y x 。

欧拉法与改进欧拉法

一、目的 1.通过本实验加深对欧拉法、改进欧拉法、龙格-库塔法、线性多步法的构造过程的理解; 2.能对上述三种方法提出正确的算法描述编程实现,观察计算结果的改善情况。 二、内容与设计思想 自选常微分方程的初值问题,分别用欧拉法、改进欧拉法求解。 分别用以上两种方法求解常微分方程初值问题: 2 '()1,([0.0,1.4],0.1)(0)0.0 y x y h y ?=+=?=?求解区间取步长 三、使用环境 操作系统:windons XP 软件平台:VC 6.0 四、核心代码及调试过程 #include #include #include double f(double x,double y) { return (1+y*y); } int main() { int i; double x,y,y0=1,dx=0.1; double xx[11]; double euler[11],euler_2[11]; double temp; double f(double x,double y); for (i=0;i<11;i++) xx[i]=i*dx; euler[0]=y0; for (i=1,x=0;i<11;i++,x+=dx) euler[i]=euler[i-1]+dx*f(x,euler[i-1]); euler_2[0]=y0; for (i=1,x=0;i<11;i++,x+=dx) { printf("x=%lf\teluer=%lf\teuler_2=%lf\taccu=%lf\n",x,euler[i],euler_2[i],pow(1+x*x,1.0/3));

欧拉法,改进欧拉法,斐波那契法原理及流程图

1欧拉法求微分方程 方法说明 欧拉(Euler)法就是解常微分方程初值问题 (4、1) 最简单得数值方法,其具体做法就是,将区间[a,b]进行N等分:,步长、并将式(4、1)写成等价得积分形 式 (4、2) 再对式(4、2)右端积分用矩形公式计算,则有 , (4、3) 在式(4、3)右端取,舍去余项。则得 , 作为得近似值。 在式(4、3)右端取,舍去余项,则得 作为得近似值. 一般地,在式(4、3)右端取舍去余项,则得 (4、4)

作为得近似值.式(4、4)为欧拉法计算公式. 我们知道微分方程得解就是平面上得一族积分曲线,这族曲线中过点得积分曲线就就是初值问题式(4、1)得解. 欧拉法得几何意义就是,过点引斜率为得积分曲线得切线,此切线与直线得交点为,再过点引以为斜率得切线与直线得交点为,依此类推,从出发,作以为斜率得切线,此切线与直线交点为.于就是便得到过点得一条折线,见图4、1.过得积分曲线则用此折线来代替.因此,这种方法亦称折线法. 图4、1 例:用欧拉法求微分方程 欧拉法流程图如下:

欧拉法程序如下: clear;??????? clc;?????? x1=0; x2=1; h=0、1; x0=0; y0=1; N=(x2-x1)/h;%要计算得次数 x(1)=x0; y(1)=y0; for n=1:N x(n+1)=x(n)+h; ?????y(n+1)=y(n)+h*(y(n)-2*x(n)/y(n)); end X=x Y=y

2改进欧拉法求微分方程 方法说明 由于欧拉法采用矩形公式计算积分产生较大截断误差.改进欧拉法(又称改进折线法)就是采取梯形公式来计算式(4、3)右端积分,则有 (5、1) 在式(5、1)右端取,舍去余项,则得 将作为得近似值. 在式(5、1)右端再取,舍去余项,则得 将作为得近似值. 一般地,在式(5、1)右端取,舍去余项.则得 (5、2) 将作为得近似值. 式(5、2)为改进欧拉法计算公式. 流程图如下: ?例:用改进欧拉法求微分方程 改进欧拉法程序如下: clear;???? clc;????????

欧拉法-改进欧拉法-斐波那契法原理及流程图

方法说明 欧拉(Euler)法是解常微分方程初值问题 最简单的数值方法,其具体做法是,将区间[a,b]进行N等分: ,步长.并将式写成等价的积分形式 () 再对式右端积分用矩形公式计算,则有 , 在式右端取,舍去余项。则得 , 作为的近似值。 在式右端取,舍去余项,则得 y2=y1+yy(y1,y1)

作为的近似值. 一般地,在式右端取舍去余项,则得 作为的近似值.式为欧拉法计算公式. 我们知道微分方程的解是平面上的一族积分曲线,这族曲线中 过点 的积分曲线就是初值问题式的解. 欧拉法的几何意义是,过点引斜率为的积分曲线的切线,此切线与直线的交点为,再过点引以 为斜率的切线与直线 的交点为 ,依此类推,从 出发,作以为斜率的切线,此切线与直线 交点为 .于是便得到 过点 的一条折线,见图.过 的积分曲线则用此折线来代 替.因此,这种方法亦称折线法. 图 例:用欧拉法求微分方程[ ]2',(0)1,0.1,0,1x y y y h y 区间为=-==

欧拉法流程图如下: 欧拉法程序如下: clear; clc; x1=0; x2=1; h=; x0=0; y0=1; N=(x2-x1)/h;%要计算的次数 x(1)=x0; y(1)=y0; for n=1:N x(n+1)=x(n)+h; y(n+1)=y(n)+h*(y(n)-2*x(n)/y(n)); end X=x

Y=y 2改进欧拉法求微分方程 方法说明 由于欧拉法采用矩形公式计算积分产生较大截断误差.改进欧拉法(又称改进折线法)是采取梯形公式来计算式右端积分,则有 () 在式右端取,舍去余项,则得 将作为的近似值. 在式右端再取,舍去余项,则得 将作为的近似值. 一般地,在式右端取,舍去余项.则得 将作为的近似值.

相关文档
最新文档