大连圣亚海洋世界官网-2021年2月7日发(作者:转身之后还是你)

Matlab

求常微分方程

<

br>(ODE)

的初值问题

(IVP)

本节考虑一阶常微分方程

u

f

(

t

,

u

<

br>)

t

0

t

T

u

(

t

)

u

0

<

/p>

0

(1.1)

的数值求解问题,包括算

法公式及编程问题。对一阶常微分方程组的初值问题

u

1

(<

p>

t

0

)

u

1

0

f

1

(

t

,

u

1

,<

/p>

u

2

,

,

u

m

)<

p>

u

1

u

f

(

t

,

u

,

u

,

<

/p>

,

u

)

0

u

2

(

t<

p>

0

)

u

2

2

2

1

2

m

t

0

t

T





u

(

t

)<

/p>

u

0

f

m

(<

p>

t

,

u

1

,

u

2

,

,

u

m

)

u

m

m<

/p>

m

0

(1.2

)

以通过引入列向量

u

,

u

0

,

f

化成类似<

p>

(1.1)

的形式

其中

<

/p>

u

f

(<

p>

t

,

u

)

t

0

t

T

<

br>

u

(

t

0

)

u

0

(1.

3)

u

1

(

t

)

<

/p>

u

1

(

t

0

)

<

p>

f

1

(

t

,

u

1

,

u

2

,

,

u

m

)<

/p>

<

p>

u

(

t

)

u

(

t

)

f

(

t

,

u

,

u

,

<

/p>

,

u

)

2

2<

p>

0

2

1

2

m

,

u

,

f

(

t

,

u<

/p>

)

u

(

t<

p>

)

0

<

/p>

u

(

t

)

u

(<

p>

t

)

f

(

t

,

u

,

u

,

,

u

)

1

2

m<

/p>

m

m

0

<

p>

m

另外一个高阶常微分方程的初值问题

(1.4)

u<

/p>

(

m

)

f

(

t

,<

p>

u

,

u

,

u

,

,

u

(

m

1)

)

t

0

t

p>

T

(

m

1)

(

m

1)

,

<

br>

,

u

u

(

t

0

)

u

0

,

u

p>

(

t

0

)

u

0

(

t

0

)

<

br>

u

0

(1.5)

也可以通过变换

u<

/p>

1

u

,

u

2

u<

p>

,

u

3

u

,

,

u

m

u

(

m<

/p>

1)

化成维微分方程组:

<

br>u

2

u

1

u

u

2

3

p>



p>

u

u

m

m

1

<

br>f

(

t

,

u

1

,

u

2

,

,

u

p>

m

)

u

m

(1.6)

我们

在设计算法时通常先对一维一阶常微分方程

(1.1)

进行,<

/p>

然后再将这个算法写成适合求解

(1.3)

的向量形式,

并以向量形式来进行编程。

1

非刚性系统与刚性系统

<

p>

f

(

t

,

u

)

Au

(

t

)

时微分方程组

(1.3)<

p>

变成

如果系数矩阵<

/p>

A

R

m

m

<

p>

u

Au

<

br>(

t

)

特征值

1

,

2

,

,

m

满足

(1

.7)

1

2

m

对应的

特征向量为

v

1

,

v

2

,

,

v

m

,

则<

/p>

(1.7)

1

有通解

m

j

t

p>

u

(

t

)

c

j

e

v

j

<

br>

(

t

)

j

1

(

1.8)

其中

(

<

br>t

)

(1.7)

的一个特解。如果

(1.7)

中的矩阵满足

(1) Re(

j

)

p>

0

j

1,

2,

,

m<

/p>

(2)

s

Re(

1

)

Re(

m

)



1

(1.9)

就称微分方程组

(1.7)

刚性

的或坏条件的或病态的

s

称为

刚性比

对于一般

的一阶常微分方程组

(1.3)

,如果多元向量值函数

f

(

t

,

u

)

(1.4)

中向量

u

的分量的

Ja

cobi

矩阵

p>

f

1

u

1

f

<

br>2

J

(

t

)

u

1

p>

f

m

u

1

f

<

br>1

u

2

f

2

u

2

f

p>

m

u

2

f

1

u

m

<

br>

f

2

u

m

p>

f

m

u

m

<

br>

u

u

(

t

)

(1.10)

的特征值<

p>

1

(

t

),

2

(

<

br>t

),

,

m

(

t

)

对于求解区间上的任何

t

[

t

0

,

T

]

满足

(1.9)

式,则称

微分方程组

(1.3)

为刚性的

2<

p>

解法器及调用格式

解法器

适用类型

Nonstiff

何时使用

使用算法

ode45

ode23

Most

of

the

time.

This

should

be

the

first

Runge-Kutta (4,5)

格式

solver you

try.

If

using

crude

error

tolerances

or

solving

Runge-Kutta (2,3)

格式

moderately

stiff problems.

If using

stringent error tolerances or solving

Adams-Bashforth-Moulton PECE

格式

a

computationally intensive ODE file.

If

ode45

is

slow

because

the

problem

is

stiff.

If using crude error tolerances to

solve stiff

systems and the

mass matrix is constant.

If

the problem is only moderately stiff and

you

need

a

solution

without

numerical

damping.

If using

crude error tolerances to solve stiff

systems.

Nonstiff

ode113

Nonstiff

ode15s

Stiff

ode23s

Stiff

ode23t

Moderately

Stiff

ode23tb

Stiff

有如下三种调用方法,其中

solver

是上

面三个解法器的名子。

(1) [t,y] =

solver(odefun,tspan,y0)

2

(2) [t,y] = so

lver(odefun,tspan,y0,options)

(3) [t,y] = solver(odefun,tspan,y0,o

ptions,p1,p2...)

它们输入参数是:

(1) odefun:

是一个函数句柄,指向初值问题

(1.3)

中的

函数

f

(

t

,

u

)

,它的基本形式是

dydt = f(t,y)

其中

dydt,y

是列

向量,而

t

是标量。

(2)

<

br>tspan

:是一个向量,用于指定求解区间

[tspa

n(1),tspan(end)]

。要求这个向量的分量是有序的,或者单调上

升或者单调下降。

(3) y0<

p>

:是初值问题

(1.3)

中的初始列向量

u

0

(4) options

:用于对解法器缺省的求解参数进行设

置。如果不想改变缺省值,可以用空矩阵‘

[]

’来代替。

p>

MATLAB

ODE

解法器设计了一个结构变量用于设置解法器的各项公共

参数,比如精度,

步长等。其中已

经定义了一些缺省值,用无参

数的

odeset

命令可以列出所有的公共参数及其缺省值:<

/p>

AbsTol: [ positive

scalar or vector {1e-6}

]

绝对误差

RelTol: [ positive scalar {1e-3}

]

相对误差

NormControl: [ on | {off}

]

是否用向量范数控制误差,缺省是按每个分量进行误差控制。

OutputFcn: [ function ]

OutputSel: [ vector of integers

]

Refine: [ positive integer

]

Stats: [ on | {off} ]

InitialStep: [ positive scalar

]

初始步长

MaxStep: [ positive scalar

]

最大步长,缺省为求解区间的十分之一。

BDF: [ on | {off} ]

是否利用向后差分来求

Jacobi

矩阵。<

p>

MaxOrder: [ 1 | 2 | 3 |

4 | {5} ]

Jacobian: [ matrix |

function ]

对刚性方程组的解法器可以提供相应的

J

acobi

矩阵信息

JPattern: [ sparse matrix ]

Vectorized: [ on | {off} ]

Mass: [ matrix | function ]

MStateDependence: [ none | weak |

strong ]

MvPattern: [ sparse

matrix ]

MassSingular: [ yes | no |

{maybe} ]

InitialSlope: [ vector ]

Events: [ function ]

每个解法器可以设置的参数如下表

:

Parameters

RelTol

,

AbsTol,

NormControl

OutputFcn

,

OutputSel

,

Refine

,

Stats

Events

MaxStep

,

InitialStep

Jacobian,

JPattern, Vectorized

ode45

ode23

ode113

ode15s

ode23s

ode23t

ode23tb

--

--

--

3

Mass

MStateDependence

MvPattern

MassSingular

InitialSlope

MaxOrder

,

BDF

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

--

(5)

输入参数

p1,p2...

等等是可选的参数

,

并且由解法器传递

给函数

odefun.

输出参数的含义是:

(1)

t

:节点列向量。

(2) y

:在节点处的解的近似值数组,第

i

行对应于

t

的第

i

行那

个节点处的近似解。即输出是如下形式:

节点

t

y

1

(t)

y

2

(t)

…………

y

m

(t)

例题

1<

/p>

分别用步长

h

0.05,0.1,0.125,0.2

来求初值问题在区间

[0,8]

上的近似解,

并与准确解<

/p>

u

1

2

t

进行图形上的比较。

t

u

u

<

/p>

2

u

0

t

8

p>

u

(0)

p>

1

(1.11)

解:利用如下代码,注意其中作为输入参数的函数的代码的编写方法,以及

ODE

p>

解法器

ode45

的调用方法。<

p>

function zzz

h=0.1;

y0=1;tspan=0:h:8;

[t,y] =

ode45(@f,tspan,y0);

[t,y]

hold on;

plot(tspan,y,'--

k',tspan,fu(tspan),'-b');

title('Solution of IVP in eg1');

xlabel('time t');

ylabel('solution u');

legend('numerical solutons','true

solutions');

function

dudt=f(t,u)

dudt=u-2*t./u;

function u=fu(t)

u=sqrt(1+2*t);

由于结果较多我们只画出它们

的图形如图

1

。从图形中可以明显看出,当时间变量较大时比如

t

5

所求的

近似

解严重偏离了真解。

这说明初值问题

(1.11)

在时刻

0

有较好的稳定

性,

但是在时刻

4

以后可能稳定性就不

太好了,

为些我们利用

(1.11)

造一个初值问题:

t

u

<

br>u

2

u

4

t

12

u

(4)

3

(1.12)

它与初值问题

(1.11)

<

br>有相同的解。将上述代码适当改动来求解初值问题

(1.12)

<

br>,并画出图形如图

2

,发现还是在初

始时刻

4

附近有较好的稳定性,所以我们在求解时不能希望

在很大的区间上求解。

4

1

2

p>

2

求解二阶

Va

n der Pol

微分方程所构成的初值问题在区间

[0,

20]

上的近似解。

其中参数

是一个正数,

当较大时这个方程是刚性的。

u

p>

(1

u

2

)<

p>

u

u

0 0

t

20

u

(0)

2,

u

(0)

0

u

<

br>

v

2

v

(1

u<

/p>

)

u

u

0 0

p>

t

20

u

(0)

2,

v

(0)

p>

0

(1.13)

解:这是一个高阶方程,要用变量代换化成向量形式的一阶方程组形式

(1.3)

p>

,令

v

u

则化成方程组

(1.14)

<

br>T

T

2

v

,

(

1

u

)

v<

/p>

u

再令

u

p>

(

t

)

u

(

t

),

v

(

t

)

f

(

t

,

u

)

<

/p>

(1.14)

的一阶向量形式为

(1.3)

。下列代码中编写了向量

值函数

f

(

t

,

u

)<

p>

,由还有一个可选参数

故要注意解法器的调用形

式。输出矩阵

u

的每一行代表解向量在每个节

<

br>点处的近似函数值。对于本题来说输出矩阵

u

的第二列相

当于方程

(1.13)

解函数

u

(

t

)

导数的近似值

。可以对

0.5,1,2,5,1

0,100,1000

进行试验解法器

ode45

的求解结果及图像。

function zzz

%ode13.m

mu=10;mustr=num2str(mu);

h=0.1;

u0=[2,0]';tspan=0:h:20;

[t,u] = ode45(@f,tspan,u0,[],mu);

[t,u]

figure;

hold on;

plot(t,u(:,1),'--

k',t,u(:,2),'-b');

title(strcat('

2

中的初值问题

mu=',mustr));

xlabel('time

t');

ylabel('solution u');

l

egend('

数值解

','

导函数数

值解

');

hold off;

function dudt=f(t,u,mu)

5

大连圣亚海洋世界官网-

大连圣亚海洋世界官网-

大连圣亚海洋世界官网-

大连圣亚海洋世界官网-

大连圣亚海洋世界官网-

大连圣亚海洋世界官网-

大连圣亚海洋世界官网-

大连圣亚海洋世界官网-

matlab初值微分方程,常微分方程初值问题的MATLAB解法相关推荐

  1. 计算物理学(数值分析)上机实验答案5、常微分方程初值问题的数值解法

    实验五.常微分方程初值问题的数值解法 ​ 常微分方程的求解问题在实践中经常遇到,因此研究常微分方程的数值解法就很有必要.欧拉方法是最简单.最基本的方法,利用差商代替微商,就可得到一系列欧拉公式.这些公 ...

  2. 计算方法(六):常微分方程初值问题的数值解法

    文章目录 常微分方程初值问题的数值解法 欧拉(Euler)方法与改进欧拉方法 欧拉方法 欧拉公式的局部截断误差与精度分析 改进欧拉方法 龙格-库塔(Runge-Kutta)法 构造原理 经典龙格-库塔 ...

  3. 二阶边值问题的数值解matlab,《二阶常微分方程边值问题的数值解法》-毕业论文.doc...

    w 摘 要 本文主要研究二阶常微分方程边值问题的数值解法.对线性边值问题,我们总结了两类常用的数值方法,即打靶法和有限差分方法,对每种方法都列出了详细的计算步骤和Matlab程序代码,通过具体的算例对 ...

  4. matlab求微分方程的初值问题,Matlab 解常微分方程的初值问题.doc

    Matlab 解常微分方程的初值问题 题目:Matlab 解常微分方程的初值问题 设计目的: 1.熟练掌握Matlab的基本编程方法,及其编程风格. 2.熟练掌握Matlab常用函数的使用. 3.与本 ...

  5. matlab初值微分方程,利用MATLAB的符号计算功能求微分方程初值问题的解析解时,所用到的函数是( )。...

    不属于免疫重建治疗的是A.脐血干细胞移植B.胎儿胸腺移植C.骨髓移植D.外周血干细胞移植E.输注转移 某项固定资产原值为50000元,预计使用年限为5年,预计净残值为1000元,采用双倍余额递减法计提 ...

  6. matlab绘制极限环,常微分方程组的MATLAB求解方法

    一.常微分方程组(ODEs) 简介 (1) 1. 简谐振动 (1) 2. 电路Vander Pol 方程 (1) 3. 生物种群的Volterra-Lotka 方程 (2) 4. 蝴蝶效应Lorenz ...

  7. matlab研究微分方程,matlab求微分方程的解.doc

    matlab求微分方程的解.doc matlab求微分方程的解一.问题背景与实验目的二.相关函数(命令)及简介三.实验内容四.自己动手一.问题背景与实验目的实际应用问题通过数学建模所归纳而得到的方程, ...

  8. matlab解方程最值点,MATLAB解方程与函数极值

    1.线性方程数值求解 主要是用到了计算方法里的LU分解等不过是加快了求解速度而已相对于inv(A)*b或者A\b 2.非线性方程数值求解 1 单变量非线性方程求解 在MATLAB中提供了一个fzero ...

  9. MATLAB学习笔记(七)——MATLAB解方程与函数极值

    (一)线性方程组求解 包含n个未知数,由n个方程构成的线性方程组为: 其矩阵表示形式为: 其中 一.直接求解法 1.左除法 x=A\b; 如果A是奇异的,或者接近奇异的.MATLAB会发出警告信息的. ...

最新文章

  1. Android Drawable 详解(教你画画!)
  2. 如何获取Vim中所有已安装颜色方案的列表?
  3. Turbo Intruder 使用 - 拥抱十亿请求攻击
  4. Mysql 解决1251- Client does not support authentication protocol requested by server...的问题
  5. OS / Linux / pthread_cond_wait 为什么需要传递 mutex 参数?
  6. Android监听button按钮的click事件
  7. JDK8的日期时间类1
  8. linux VNC白屏,VNC使用及其常见问题解决方法
  9. UVA10978 Let's Play Magic! 题解
  10. php7 错误处理,PHP7升级-异常错误处理
  11. i print打印监控系统
  12. 8类网线利弊_超6类7类8类网线进来挨打 6类线全面测评 网速和传输速率测试
  13. EXCHANGE 2016证书续期
  14. .net 必看书籍1
  15. 用故障恢复控制台恢复注册表
  16. 传奇游戏显示服务器连接失败,操作win7系统玩传奇世界显示连接服务器失败的详细方法...
  17. C++经典算法题-循序搜寻法(使用卫兵)
  18. 将 ChatGPT 引入你的飞书
  19. 常见数学中的特殊符号
  20. 小刀娱乐网源码2020版

热门文章

  1. 移动机顶盒搭建网页服务器,超级简单搭建自己的私人影视库
  2. 可以运行python的路由器_用python控制你的路由器
  3. 音乐专业如何利用计算机思维,利用信息技术培养学生音乐创造思维能力
  4. H3C--网络设备基本配置与调试
  5. java 栅栏_Java 并发工具类(栅栏 CyclicBarrier )
  6. 2022淘宝天猫京东双十一交易额有多少?双11交易的数据
  7. 解决:syntax error at line xxx: `<<‘ unmatched
  8. BDWK免费下载白嫖指南【1s搞定】
  9. 腾讯云服务器域名申请 备案和绑定IP地址详细步骤带清晰图
  10. 日期格式不一致问题处理