c语言扩散方程求解,扩散方程的三种导出方法
1. 引言
扩散方程是物理中描述液体流动,气流渗透的模型。它和布朗运动有着密切的关系,它的推导对理解布朗运动这样一个起源于生物学的问题有着重要的意义。推导扩散方程的方法很多,比如大家可以参考文献 [1] [2] ,以下我们主要分别从物理学,随机过程以及泛函分析的角度来推导扩散方程。
2. 物理上的推导
考虑某种物质在一种介质中的扩散现象,比如染料在水或者水晶中的扩散。我们还假设介质初始状态是各向同性的,也就是说,介质具有没有特定方向且在空间里面是均匀的。现在考虑与染料分子运动方向垂直的一个平面,该平面被染料分子从平面的一面到另一面持续的穿过。如果平面左边的浓度高于右边,将会有更多的染料粒子,也就是有染料粒子净流从左边流向右边。两边的浓度差越高,就会有更多的染料粒子从左边流向右边。反向亦然。
不妨将
u
(
t
,
x
) 记作染料在时间t的所处位置
x
=
(
x
1
,
x
2
,
x
3
) 的浓度,根据菲克定律,单位时间粒子流通过与粒子流运动方向垂直平面的单位截面积的向量场为
F
(
t
,
x
)
=
−
1
2
a
∇
u
(
t
,
x
)
这里
F
(
t
,
x
) 反映出染料净流的方向和强度,a为扩散系数,
∇ 为梯度算子。这样,垂直于扩散方向的单位向量n的流量就为
F
(
t
,
x
)
⋅
n 。
现在我们考虑环绕点x的任意体积V,那么在体积V中的染料粒子 数为
∫
V
u
(
t
,
x
)
d
x 。在体积V中染料粒子数的变化率
∂
∂
t
∫
V
u
(
t
,
x
)
d
x
=
−
∫
∂
V
F
(
t
,
x
)
⋅
d
n
=
−
∫
V
∇
⋅
F
(
t
,
x
)
d
x
,
最后一步用到了散度定理。因为V是任意的,我们就导出了扩散方程
∂
u
∂
t
(
t
,
x
)
=
1
2
∇
⋅
(
a
∇
u
)
(
t
,
x
)
.
当
a
=
1 且x为二维向量时,我们得到柯尔莫格洛夫向前方程
∂
∂
t
u
t
(
x
,
y
)
=
1
2
Δ
y
u
t
(
x
,
y
)
. (1)
其中,
u
t
(
x
,
y
)
=
1
2
π
t
e
−
(
x
−
y
)
2
2
t 为布朗运动的转移密度方程。
3. 随机过程上的推导
以下的推导我们需要用到切普曼–柯尔莫格洛夫方程和离散性的随机行走的知识,见参考文献 [3] 。
我们现在考虑整点的一维对称随机行走。令
u
k
(
m
) 表示随机行走从原点出发在时刻m到达原点右边第k步的概率。由切普曼–柯尔莫格洛夫方程,我们得到
u
k
(
m
+
1
)
=
1
2
u
k
+
1
(
m
)
+
1
2
u
k
−
1
(m)
由此得到
u
k
(
m
+
1
)
−
u
k
(
m
)
=
1
2
[
u
k
+
1
(
m
)
−
2
u
k
(
m
)
+
u
k
−
1
(
m
)
] (2)
上式左边是时间导数的离散化,而右边是空间二阶导数的离散化的一半。通过两边取极限,把两次位移间的时间缩短到0,同时位移步数也缩短到0,我们就可以从(2)式过渡到(1)式,也就是说,假设两次位移间的时长为Δ,并且每步的长度为ξ,那么(2)变为
u
k
ξ
(
(
m
+
1
)
Δ
)
−
u
k
ξ
(
m
Δ
)
Δ
=
1
2
[
u
(
k
+
1
)
ξ
(
m
Δ
)
−
2
u
k
ξ
(
m
Δ
)
+
u
(
k
−
1
)
ξ
(
m
Δ
)
]
Δ (3)
现在令Δ和ξ趋于0,并且同时让m和k趋于∞使得
k
ξ
→
x 而
m
Δ
→
t 。则
u
k
ξ
(
n
Δ
)
→
u
(
t
,
x
) ,那么(3)式形式变成了(1)式。
4. 泛函分析上的推导
以下用到泛函分析和马氏过程的知识大家见参考文献 [4] [5] 。
我们先通过上面提到的布朗运动的转移密度方程构造转移密度半群
(
u
t
)
t
≥
0 定义如下
u
t
f
(
x
)
=
{
∫
−
x
x
u
t
(
x
,
y
)
f
(
y
)
d
y
,
(
t
>
0
)
f
(
x
)
,
(
t
=
0
)
我们可以验证
(
u
t
)
t
≥
0 是一个半群:
u
t
+
s
=
u
t
⋅
u
s
=
u
s
⋅
u
t
(
s
,
t
≥
0
) (4)
这就是所谓的C-K方程。利用(4)可推出
d
d
t
u
t
=
lim
s
→
0
1
s
(
u
t
+
s
−
u
t
)
=
u
t
Γ
=
Γ
u
t
, (5)
在这里,定义
Γ
=
lim
s
→
0
1
s
(
u
s
−
I
)
是
(
u
t
)
t
≥
0 的生成元,其中I是单位算子。对于合适的f,我们定义
Γ
f 为
Γ
f
=
lim
t
→
0
1
t
(
u
t
f
−
f
)
实际上,如果
f
∈
C
b
2
(
R
) ,也就是f的二阶导数有界,那么
lim
t
→
0
1
t
(
u
t
f
−
f
)
(
x
)
=
lim
t
→
0
∫
−
∞
∞
f
(
x
+
y
t
)
−
f
(
x
)
t
e
−
1
2
y
2
d
y
2
π
=
lim
t
→
0
∫
−
∞
∞
1
t
{
y
t
f
′
(
x
)
+
1
2
y
2
t
f
″
(
x
+
θ
y
t
)
}
e
−
y
2
2
d
y
2
π
=
1
2
f
″
(
x
)
.
(
这
里
θ
∈
(
0
,
1
)
取
决
于
y
t
)
上式中我们用到了泰勒公式。由上式我们得到布朗运动的生成元是
Γ
=
1
2
d
2
d
x
2
,
至少在
C
b
2
(
R
) 的意义下。从(5)我们发现,对于
f
∈
C
b
2
(
R
) ,
∂
∂
t
u
t
f
(
x
)
=
u
t
Γ
f
(
x
)
=
1
2
Γ
t
f
″
(
x
)
,
对上式分部积分,我们得到(1)式。
5. 结论
本文介绍了三种从不同角度推导扩散过程的方法,利用物理学,随机过程及泛函分析的方法揭示了布朗运动和扩散方法的关系,为随机方程理论在金融工程、生物医药等方面的应用奠定了坚实的理论基础。
基金项目
国家自然科学基金——河南省联合基金资助(U1504605)。南阳理工学院引进人才基金资助(030/510037)。
c语言扩散方程求解,扩散方程的三种导出方法相关推荐
- c语言数组最大可定义多少位_C语言求数组的最大值三种方法
/* 黄哥Python培训 黄哥所写*/#include int maxValue(int* arr, int n);int maxRecursionValue(int* arr, int n);in ...
- n的阶乘三种实现方法(C语言)
最近整理了曾经写的程序,把n的阶乘三种实现方法与小伙伴们分享,希望能给初学者一些帮助. 1.递归 #include <stdio.h> int Fact(int n); int main( ...
- python线性方程组求解_python求解方程组的三种方法
python求解方程组的三种方法: Numpy求解方程组x + 2y = 3 4x + 5y = 6 当然我们可以手动写出解析解,然后写一个函数来求解,这实际上只是用 Python 来单纯做" ...
- c语言for循环打印九九乘法口诀的三种简单方法
c语言for循环打印九九乘法口诀的三种简单方法 由于在学习c语言,今天在复习巩固知识,练习代码的时候,简单的总结了三种for循环打印九九乘法口诀的方法,加深了自己的理解.代码注释和简单的思路已经注释在 ...
- c语言错误1004,excel宏运行时提示错误1004的三种解决方法
在使用excel宏功能的时候,一些网友会遇到excel宏运行不了,软件提示:"运行时错误1004,应用程序定义或对象定义错误"的问题,那么,excel宏运行时错误1004怎么办?幸 ...
- 冒泡法排序函数c语言,【C语言】冒泡法排序的三种实现方法
冒泡法的三种排序方法: 1.数组排序 #include//#includeint main() { int i; int j; int tmp; int arr[8] = { 1, 3, 5, 7, ...
- PHP开发之递归算法的三种实现方法
递归算法对于任何一个编程人员来说,应该都不陌生.因为递归这个概念,无论是在PHP语言还是Java等其他编程语言中,都是大多数算法的灵魂.对于PHP新手来说,递归算法的实现原理可能不容易理解.但是只要你 ...
- 黑马程序员_Java解析网络数据流的三种特殊方法
Java解析网络数据流的三种特殊方法 Java作为最开放的语言,已越来越受到网络程序员的青睐.但这一青睐族有着同样的经历--曾经都为网络上通信的Java数据格式而烦恼. 笔者也不例外,曾经为此而查阅了 ...
- php递归实现sum函数,php递归函数三种实现方法及如何实现数字累加
搜索热词 递归函数在编程中是比较常用的一类函数,其特点是函数自身可以调用自身,但是必须在调用自身前有条件判断,否则会导致无限调用下去.本文列出了三种递归函数实现方法,第一种利用引用做参数,第二种利用全 ...
最新文章
- CentOS通过 All-in-One 模式安装 KubeSphere技巧
- wxWidgets:wxActivateEvent类用法
- E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
- 第一季度ADC市场份额揭榜 A10 Networks再获用户青睐
- 【CodeForces - 1051B】Relatively Prime Pairs (构造,思维,素数,水题)
- Apache shiro
- 天齐锂业高管减持后定增160亿 收到深交所关注函
- c语言学习-定义并调用函数求两个整数之差的绝对值
- AI 产品经理如何练就?一文了解十大必备技能
- 视频码率,帧率和分辨率的联系与差别
- libjingle源码解析(3)-【PseudoTcp】建立UDP之上的TCP(1):连接和关闭
- 编写 USB 存储设备使用痕迹检测和删除工具
- 使用PS将图片自然从清晰到模糊过渡
- 13 个 Python 必备的知识,建议收藏!
- 关于AXD调试的详细探索
- 详析:谷歌为何紧急封杀阿里云OS?
- root android 5.0,安卓android5.0怎么一键root? 安卓5.0一键root教程
- 基于F4/F7/H7飞控硬件和px4飞控固件的廉价自主无人机系统(2)- 外设和固件修改
- 读书笔记——指数基金投资指南
- 小程序支持主体迁移了