常微分方程数值解法

合集下载
  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为函数,(x0,x1)为x区间,

y0为初始值,n为子区间个数

if nargin<5,n=50;end

h=(x1-x0)/n;

x(1)=x0;y(1)=y0;

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=inline('-2*y+2*x^2+2*x')

[x,y]=eulerpro(f,0,0.5,1,10)

求解函数y'=−2y+2x2+2x ,(0 ≤x ≤0.5),y(0) = 1

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阶方法控制误差,是一种自适应步长(变步长)的常微分方程数值解法,其整体截断误差为(Δx)^5。解决的是Nonstiff(非刚性)常微分方程。

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

例如:

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

tspan=[1 4]; %求解区间

y0=-2; %初值

[t,y]=ode45(odefun,tspan,y0);

plot(t,y) %作图

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

legend('t^2y''=y+3t')

xlabel('t')

ylabel('y')

% 精确解

dsolve('t^2*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)

求解高阶常微分方程

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

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

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

程序:

function Testode45

tspan=[3.9 4.0]; %求解区间

y0=[2 8]; %初值

[t,x]=ode45(@odefun,tspan,y0);

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

legend('y1','y2')

title('y'' ''=-t*y + e^t*y'' +3sin2t')

xlabel('t')

ylabel('y')

end

function y=odefun(t,x)

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

y(1)=x(2);

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

end

【原理】

改进Euler 法:

式称为由Euler 公式和梯形公式得到的预测—校正系统,也叫改进Euler 法。为了编程方便,将式子改写成

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

在区间[ Xn, Xn+1]内多取几个点,将它们的斜率加权平均作为K ,就有可能构造出精度更高的计算公式。这就是龙格—库塔方法的基本思想。

相关文档
最新文档