通过有限差分求求解较复杂的微分方程及matlab仿真
目录
一、理论基础
有限差分是形式为f(x+b)-f(x+a)的数学表达式。如果有限差分除以b-a,则得到差商。 有限差分导数的逼近在微分方程数值解的有限差分方法,特别是边界值问题,起着关键的作用。有限差分是形式为f(x+b)-f(x+a)的数学表达式。如果有限差分除以b-a,则得到差商。 有限差分导数的逼近在微分方程数值解的有限差分方法,特别是边界值问题,起着关键的作用。
简称差分法或网格法,是求微分方程和积分一微分方程的数值解的一种主要的计算方法。它的基本思想是:把连续的定解区域用由有限个离散点构成的网格来代替,这些离散点被称为网格的结(节)点;把在连续定解区域上定义的连续变量函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似,积分用积分和来近似。于是原方程和定解条件就可用代数方程组来近似地代替,解此代数方程组就得到原问题的近似解。这种方法简单、通用,易于在电子计算机上实现。
有限差分方法有漫长的历史,源于牛顿、欧拉等人的工作,他们曾用差商代替微商以简化计算。1928年,库朗、卢伊等人证明了三大典型方程的典型差分格式的收敛性定理,为现代有限差分理论提供了基础。同时,库朗把有限差分法用于求偏微分方程的数值解,发展了这一方法。由于有限差分方法具有通用性,又便于机器实现,因而在电子计算机产生和广泛应用后更得到很大发展及更广泛的应用。冯 ·诺伊曼于1948年对无粘流体(非线性双曲型)方程提出的引入人工粘性项的差分方法是一个典型例子,他还同时提出计算稳定性概念和线性化傅立叶方法来分析稳定性。后来拉克斯等人建立了一般差分格式的收敛性、稳定性等价定理。人工粘性法成为现代流体计算的主导方法之一,而得出这种方法的自适应的算法思想也给其他计算方法的发展以很大的启发和影响。在现代,有限差分方法应用于各类微分方程和积分—微分方程的各种定解问题,如常微分方程初值问题、边值问题,偏微分方程初值问题、边值问题,玻耳兹曼方程,计算流体力学等等。它是把微分方程离散化,从而求其数值解的基本方法之一。
这里,以如下的方程组为例子:
用MATLAB有限差分求上式的数值解。
求解过程如下:
首先将上面的式子简化,获得如下的式子:
进一步转换:
进一步转换:
上面的式子可以改为:
然后再计算循环过程中,取
然后做转换,得到:
二、核心程序
.................................................
maxt = 1;
k = 0;
t = 0;
h = 5e-7;
while(maxt > 1e-5 & k < 2000)
k
k = k + 1;
maxt = 0;
for i=2:1:999
A = k33 + (k11-k33)*cos(f1(i-1))^2;
B = 0.5*(k11-k33)*sin(2*f1(i-1));
C = 0.5*deltae*E*E*sin(2*f1(i-1));
f2(i+1) =(B*(f1(i) - f1(i-1))^2 - h^2*C)/A + 2*f1(i) - f1(i-1);
t = abs(f2(i+1) - f1(i));
if t > maxt
maxt = t;
end
end
f1 = f2;
end
...............................................
while(maxt > 1e-5 & k < 2000)
k
k = k + 1;
maxt = 0;
for z=2:1:999
E(z) = 0.08*(3.283e13*z^3 - 2.234e9*z^2 - 5.875e7*z + 2.737e5);
A = k33 + (k11-k33)*cos(f1(z-1))^2;
B = 0.5*(k11-k33)*sin(2*f1(z-1));
C = 0.5*deltae*E(z)*E(z)*sin(2*f1(z-1));
f2(z+1) =(B*(f1(z) - f1(z-1))^2 - h^2*C)/A + 2*f1(z) - f1(z-1);
t = abs(f2(z+1) - f1(z));
if t > maxt
maxt = t;
end
end
f1 = f2;
end
三、测试结果
A16-35
相关文章
- Algorithm之MC:基于Matlab实现通过蒙特卡洛方法模拟二维布朗运动
- 【配电网重构】【SOE】随机配电网重构中的开关开换方法研究(Matlab代码实现)
- 分时电价环境下用户负荷需求响应分析方法(Matlab代码实现)
- 【智能电网】分数阶微积分在决策系统中的应用,通过决策树实现智能电网管理(Matlab代码实现)
- 【雷达通信】非相干多视处理(CSA)(Matlab代码实现)
- 基于改进霍夫变换通过曲率进行圆检测(Matlab代码实现)
- 【MATLAB】通过计算曲率和曲率变化率来实现对曲线波浪程度
- 【MATLAB】matlab遗传算法工具使用
- 【MATLAB】数学建模没有基础怎么办,看过来一篇文章带你入门 matlab
- 【MATLAB图像】— 三维图形
- m基于改进PSO粒子群优化的RBF神经网络解耦控制算法matlab仿真
- m通过手动提取图像特征点实现医学图像配准和拼接matlab仿真
- m基于多集成BP神经网络的matlab仿真,神经网络通过编程实现不使用工具箱
- MATLAB | 二维波函数坍缩算法随机地图生成
- Matlab Newton‘s method
- Matlab R2018a无法重新加载 /usr/local/MATLAB/R2018a/bin/glnxa64/libmwxcp_dwarf.so
- 【语音编码】基于matlab ADPCM编解码(Matlab代码实现)
- 【语音编码】基于matlab ADPCM编解码【G.723.1】(Matlab代码实现)
- 通过fastaread读取DNA序列并进行检测matlab仿真
- 通过matlab对比规则LDPC和非规则LDPC的误码率
- Matlab Tips: 结构体递归式打印--Dump matlab struct content recursively
- Matlab使用笔记(三):matlab设置代码自动补全功能
- Matlab使用笔记(七):将PreScan连接MATLAB实现仿真 (附录:自动无人驾驶仿真软件PreScan的应用介绍)