常微分方程数值解法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常微分方程数值解法

【作用】微分方程建模是数学建模的重要方法,因为许多实际问题的数学描述将导致求解微分方程的定解问题。把形形色色的实际问题化成微分方程的定解问题,大体上可以按以下几步:

1. 根据实际要求确定要研究的量(自变量、未知函数、必要的参数等)并确定坐标系。

2. 找出这些量所满足的基本规律(物理的、几何的、化学的或生物学的等等)。

3. 运用这些规律列出方程和定解条件。基本模型

1. 发射卫星为什么用三级火箭

2. 人口模型

3. 战争模型

4. 放射性废料的处理通常需要求出方程的解来说明实际现象,并加以检验。如果能得到解析形式的解固然是便于分析和应用的,但是我们知道,只有线性常系数微分方程,并且自由项是某些特殊类型的函数时,才可以得到这样的解,而绝大多数变系数方程、非线性方程都是所谓“解不出来” 的于是对于用微分方程解决实际问题来说,数值解法就是一个十分重要的手段。

1. 改进Euler 法:

2. 龙格—库塔( Runge—Kutta )方法:

【源程序】

1. 改进Euler 法:

function [x,y]=eulerpro(fun,x0,x1,y0,n);%fun 为函数,(xO, x1)为x 区间,yO 为初始值,n 为子

区间个数

if nargin<5,n=5O;end

h=(x1-xO)/n;

x(1)=xO;y(1)=yO;

for i=1:n

x(i+1)=x(i)+h;

y1=y(i)+h*feval(fun,x(i),y(i));

y2=y(i)+h*feval(fun,x(i+1),y1);

y(i+1)=(y1+y2)/2;

end

调用command 窗口

f=i nlin e('-2*y+2*x A2+2*x') [x,y]=eulerpro(f,O,,1,1O)

2

x +2x , (0 < x < , y(0) = 1

求解函数y'=-2y+2

2. 龙格—库塔( Runge—Kutta )方法:

[t,y]=solver('F',tspan ,y0)

这里solver为ode45, ode23, ode113,输入参数F是用M文件定义的微分方程y'= f (x, y)右端的函数。tspan=[t0,tfinal]是求解区间,y0是初值。

注:ode45和ode23变步长的,采用Runge-Kutta算法。

ode45表示采用四阶-五阶Runge-Kutta算法,它用4阶方法提供候选解,5阶方法控制误差,是一种自适应步长(变步长)的常微分方程数值解法,其整体截断误差为(△ 口人5解

决的是Nonstiff(非刚性)常微分方程。

ode45是解决数值解问题的首选方法,若长时间没结果,应该就是刚性的,可换用ode23 试试例如:咛二y十

odefun=@(t,y) (y+3*t)/t A2; % 定义函数

tspa n=[1 4]; %求解区间

y0=-2; %初值

[t,y]=ode45(odefu n,tspa n,y 0);

plot(t,y) % 作图

title('tA2y”=y+3t,y(1)=-2,1

lege nd('tA2y''=y+3t')

xlabel('t')

ylabel('y')

%精确解

dsolve('tA2*Dy=y+3*t','y(1)=-2')

ans = (3*Ei(1,-1/t)+(-3*exp(-1)*Ei(1,-1)-2)/exp(-1))*exp(-1/t)

求解高阶常微分方程

需要求解的高阶常微分方程:

y r>= -iy + 3sin2f

求解的关键是将高阶转为一阶,odefun的书写.

F(y,y',y"...y(n-1),t)=0用变量替换,y1=y,y2=y'...注意odefun方程定义为行向量程序:

fun cti on Testode45

tspa n=[ ]; %求解区间

y0=[2 8]; % 初值

[t,x]=ode45(@odefu n,tspa n,y0);

plot(t,x(:,1),'-o',t,x(:,2),'-*')

lege nd('y1','y2')

title('y” ”=-t*y + eAt*y” +3si n2t')

xlabel('t')

ylabel('y')

end

fun cti on y=odefu n(t,x)

y=zeros(2,1); % 列向量

y(i)=x(2);

y(2)=-t*x(1)+exp(t)*x (2)+3*si n(2*t);

end

【原理】

改进 Euler 法:

叫改进Euler 法。为了编程方便,将式子改写成

龙格一库塔(Runge — Kutta )方法:

在区间[Xn, Xn+1]内多取几个点,将它们的斜率加权平均作为 K ,就有可能构造

出精度更高的计算公式。这就是龙格一库塔方法的基本思想。

要进-步捉高椿度*必绩取更多的点.如联4点构造如下形式的公式;

]儿+1 —儿+肌人杠+心鸟卜久怡+為孔)

*1 =于(兀”几)

■ H 一/(%亠◎再儿+庆叭'

(⑺

若=f (x a +a 2h,儿 +0』化 +00 札)

忑=/(%十吗乩儿十/V 叭十民哄十0押J

其中待定条数人G 厂久共13个,经过与推导2阶龙格一库塔公式类似、但也更杂的 计算.得到使局部误差y 仗曲)-y* =。(护)的11个方程•収既满足这些方程、又较 简单的一齟心勺,冋‘可得卜=几€尼小"八"几川軌式称为由

Euler 公式和梯形公式得到的预测一校正系统,

相关文档
最新文档