一、微分方程模型
微分方程建模是数学建模的重要方法,因为许多实际问题的数学描述将导致求解微分方程的定解问题。把形形色色的实际问题化成微分方程的定解问题,大体上可以按以下几步:
1. 根据实际要求确定要研究的量(自变量、未知函数、必要的参数等)并确定坐标系。
2. 找出这些量所满足的基本规律(物理的、几何的、化学的或生物学的等等)。
3. 运用这些规律列出方程和定解条件。
列方程常见的方法有:
(i)按规律直接列方程
在数学、力学、物理、化学等学科中许多自然现象所满足的规律已为人们所熟悉,并直接由微分方程所描述。如牛顿第二定律、放射性物质的放射性规律等。我们常利用这些规律对某些实际问题列出微分方程。
(ii)微元分析法与任意区域上取积分的方法
自然界中也有许多现象所满足的规律是通过变量的微元之间的关系式来表达的。对于这类问题,我们不能直接列出自变量和未知函数及其变化率之间的关系式,而是通过微元分析法,利用已知的规律建立一些变量(自变量与未知函数)的微元之间的关系式,然后再通过取极限的方法得到微分方程,或等价地通过任意区域上取积分的方法来建立微分方程。
(iii)模拟近似法
在生物、经济等学科中,许多现象所满足的规律并不很清楚而且相当复杂,因而需要根据实际资料或大量的实验数据,提出各种假设。在一定的假设下,给出实际现象所满足的规律,然后利用适当的数学方法列出微分方程。
在实际的微分方程建模过程中,也往往是上述方法的综合应用。不论应用哪种方法,通常要根据实际情况,作出一定的假设与简化,并要把模型的理论或计算结果与实际情况进行对照验证,以修改模型使之更准确地描述实际问题并进而达到预测预报的目的。
Matlab的工具箱提供了几个解非刚性常微分方程的功能函数,如ode45,ode23,ode113,其中ode45采用四五阶RK方法,是解非刚性常微分方程的首选方法,ode23采用二三阶RK方法,ode113采用的是多步法,效率一般比ode45高。格式为
[T,Y]=solver('F',tspan,y0)
这里solver为ode45、ode23、ode113,输入参数F是用M文件定义的常微分方程组,tspan=[t0 tfinal]是求解区间,y0是初值列向量。
在Matlab中,符号运算工具箱提供了功能强大的求解常微分方程的符号运算命令dsolve。常微分方程在Matlab中按如下规定重新表达:
符号D表示对变量的求导。Dy表示对变量y求一阶导数,当需要求变量的n阶导数时,用Dn表示,D4y表示对变量y求4阶导数。
求通解的命令:
dsolve('diff_equation')
dsolve(' diff_equation','var')
式中diff_equation 为待解的常微分方程,第1种格式将以变量t为自变量进行求解,第2种格式则需定义自变量var。
求特解的命令:
dsolve('diff_equation','condition1,condition2,…','var')
其中condition1,condition2,… 即为微分方程的初边值条件。
求解常微分方程组的命令格式为:
dsolve('diff_equ1,diff_equ2,…','var')
dsolve('diff_equ1,diff_equ2,…','condition1,condition2,…','var')
第1种格式用于求解方程组的通解,第2种格式可以加上初边值条件,用于具体求解。
二、 图论模型
基本概念和名词
9 图:由若干个不同的点(顶点或节点)与其中某些顶点的连线所组成的图形
9 权:图中的每条边都有一个具体的数与之对应,这些数为权,带权的图为赋权图或网络 9 边与弧:两点之间不带箭头的连线称为边,带箭头的连线称为弧
9 无向图:一个图G 是由顶点和边构成的
9 有向图:一个图G 是由顶点和弧构成的
设V 和E 分别是图的顶点的集合和边的集合,},,{1n v v V L =,; },,{1m e e E L =弧的集合为
},,{1m a a A L =9 链:在无向图中,点与边的交错序列称为连结和的
链。(为连结和的边)
),,,,,,(11211ik ik ik i i i v e v v e v −−L 1i v ik v it e it v 1+it v 9 路径:是有向图中一条链(为从指向的弧),
称之为从到的路径。
),,,,,,(11211ik ik ik i i i v a v v a v −−L it a it v 1+it v 1i v ik v 9 回路:闭合的路径称为回路。
9 圈:闭合的链称为圈。
9 连通图:图G 中任何两个点之间至少有一条链,称G 为连通图。
9 树:一个无圈的连通图称为树
9 生成树:若),(111E V G =是连通图),(222E V G =的生成子图(即,),
且本身是树,则称为的生成树。
21V V =21E E ⊆1G 1G 2G 9 邻接矩阵:表示图中从顶点到的弧(无向图只考虑与间的边)的数目,
则矩阵称为图G 的邻接矩阵。
ij b G i v j v i v j v )(ij b B =9 带权邻接矩阵:以表示网络中从顶点到的弧的权(无向网只考虑与间
的边的权),当到无弧或边时,ij w G i v j v i v j v i v j v ∞=ij w ,则矩阵)(ij w W =称为图的带权邻接
G
矩阵。
图论中最常用的知识点:最短路问题、最小生成树问题、遍历性问题和图的匹配问题。这里仅简单介绍前两个问题的解决方法。
1.最短路问题
9 两个指定顶点之间的最短路径
问题如下:给出了一个连接若干个城镇的铁路网络,在这个网络的两个指定城镇间,找一条最短铁路线。
以各城镇为图G 的顶点,两城镇间的直通铁路为图相应两顶点间的边,得图。对的每一边,赋以一个实数—直通铁路的长度,称为的权,得到赋权图。G 的子图的权是指子图的各边的权和。问题就是求赋权图G 中指定的两个顶点间的具最小权的轨。这条轨叫做间的最短路,它的权叫做间的距离,亦记作。
G G G e )(e w e G 00,v u 00,v u 00,u v ),(00v u d 求最短路已有成熟的算法:迪克斯特拉(Dijkstra )算法,其基本思想是按距从近到远为顺序,依次求得到G 的各顶点的最短路和距离,直至(或直至的所有顶点),算法结束。为避免重复并保留每一步的计算信息,采用了标号算法。下面是该算法。
0u 0u 0v G (i) 令,对,令0)(0=u l 0u v ≠∞=)(v l ,}{00u S =,0=i 。
(ii) 对每个i S v ∈(i i S V S \\=),用
)}()(),({min uv w u l v l i
S u +∈ 代替。计算)(v l )}({min v l i
S v ∈,把达到这个最小值的一个顶点记为,令。 1+i u }{11++=i i i u S S U (iii). 若1||−=V i ,停止;若1||− 0u v v )(v l v i S )(v l v i S )(v l 0u 9 每对顶点之间的最短路径 计算赋权图中各对顶点之间最短路径,显然可以调用Dijkstra 算法。具体方法是:每次以不同的顶点作为起点,用Dijkstra 算法求出从该起点到其余顶点的最短路径,反复执行次这样的操作,就可得到从每一个顶点到其它顶点的最短路径。这种算法的时间复杂度为。第二种解决这一问题的方法是由Floyd R W 提出的算法,称之为Floyd 算法。 1−n )(3 n O Floyd 算法的基本思想是:递推产生一个矩阵序列,其中表n k A A A A ,,,,,10L L ),(j i A k 示从顶点到顶点的路径上所经过的顶点序号不大于的最短路径长度。 i v j v k 计算时用迭代公式: )),(),(),,(min(),(111j k A k i A j i A j i A k k k k −−−+= k 是迭代次数。 n k j i ,,2,1,,L =最后,当时,即是各顶点之间的最短通路值。 n k =n A 2.最小生成树与Kruskal 算法思想 最小生成树:在赋权图中,求一棵生成树使其总权最小,称此为图G 的最小生成树。 Kruskal 算法思想及步骤:每次添加权尽量小的边,使新的图无圈,直到生成一棵树为止,便得最小生成树。 G 算法步骤如下: 1)把赋权图中的边按权的非减次序排列。 G 2)按1)排列的次序检查G 中的每一条边,如果这条边与已得到的边不产生圈,则取这一条边为解的一部分。 3)若已取到条边,算法终止。此时以V 为顶点集,以取到的1−n 1−n 条边为边集的图即为最小生成树。下载本文