技术标签: ftcs格式 matlab
有限差分法数值求解一维伯格斯方程
作者:潭花林
引言
本文利用有限差分法计算了一维伯格斯方程的初边值问题。采用FTCS格式,并深入讨论了它的相容性、收敛性与稳定。有限差分法在计算流体力学、数值传热学中都有众多的应用,而且可以用于高维情形。所有问题都是采用matlab编程计算。本文只是一个简单的一维问题的算例。
关键词:计算流体力学,有限差分法,一维对流方程
题目
用计算机求对流方程的初值问题
的数值解(由于对流方程的计算结果只依赖与上游,只需要给出上有的边界条件就可以了)。
(1)分别用C格式,Lax格式,FTCS格式在 ,两种情况下计算。
(2)计算范围为,取,计算80个时间步长。
(3)写出计算报告,内容为
(I)计算课题
(II)计算框图
(III)计算程序
(IV)计算结果,时的,图
(V)体会
计算原理
迎风格式
内点采用如下差分格式
初值为
边界条件为
稳定性:
差分格式的稳定性:误差方程与差分方程相同
设误差为,则
放大因子
所以
为使,应有
对于本问题,初值和边界条件并不影响稳定性和收敛性问题。
根据Lax等价定理,对于适定的处置问题,只要差分格式相容,稳定的就是收敛的。
Lax格式
内点采用如下差分格式
初值为
边界条件为
稳定性:
差分格式的稳定性:误差方程与差分方程相同
设误差为,则
放大因子
所以
为使,应有
对于本问题,初值和边界条件并不影响稳定性和收敛性问题。
根据Lax等价定理,对于适定的处置问题,只要差分格式相容,稳定的就是收敛的。
FTCS格式
内点采用如下差分格式
初值为
边界条件为
稳定性:
差分格式的稳定性:误差方程与差分方程相同
设误差为,则
放大因子
所以
所以该格式是完全不稳定的。
计算结果及其讨论
时,结果是收敛的
时刻,三种格式的处理是相同的,处理结果如 REF _Ref370418215 \h 图 1所示,这是由于还没有开始数值计算。
图 SEQ 图 \* ARABIC 1
时刻,计算结果如 REF _Ref370418250 \h 图 2所示,Lax格式和迎风格式的结果几乎是相同的,而FTCS格式却出现了很大的数值震荡。
图 SEQ 图 \* ARABIC 2
时刻,计算结果如 REF _Ref370418261 \h 图 3所示,Lax格式和迎风格式的结果几乎是相同的,并且结果已经接近稳态。而FTCS格式却数值震荡更大了,在几百的量级。
图 SEQ 图 \* ARABIC 3
时刻,三种格式的处理是相同的,处理结果如 REF _Ref370418281 \h 图 4所示,Lax格式和迎风格式的结果几乎是相同的,并且结果已经接近稳态。而FTCS格式却数值震荡更大了,在十万的量级。
图 SEQ 图 \* ARABIC 4
时,结果是不收敛的
时刻,计算结果如 REF _Ref370418173 \h 图 5所示,三种格式的处理是相同的,这是由于还没有开始数值计算。
图 SEQ 图 \* ARABIC 5
时刻,计算结果如 REF _Ref370418302 \h 图 6所示,三种格式都出现了不同程度的数值震荡,在之前的稳定性分析中,已经指出,时,即使是迎风格式和Lax格式也是不稳定的,只有几的量级。
图 SEQ 图 \* ARABIC 6
时刻,计算结果如 REF _Ref370418313 \h 图 7所示,三种格式都出现了不同程度的数值震荡,在之前的稳定性分析中,已经指出,时,即使是迎风格式和Lax格式也是不稳定的,震荡量级到了几百。
图 SEQ 图 \* ARABIC 7
时刻,计算结果如 REF _Ref370418324 \h 图 8所示,三种格式都出现了不同程度的数值震荡,在之前的稳定性分析中,已经指出,时,即使是迎风格式和Lax格式也是不稳定的,震荡量级到几千万。
图 SEQ 图 \* ARABIC 8
体会
在数值计算中,由于计算量很大,不可能通过微分方程的推导就获得解析解,编写程序已经是不可或缺的了。使用Matlab编写程序,虽然计算速度会比C、C++、Fortran等语言慢一些,但是却易于调试。本文中的程序只用了两次就调试成功。
差分格式虽然看起来都差不多,但是稳定性的各自不同。FTCS格式虽然具有二阶的精度,但是不收敛,精度再高也没有用。数值震荡在一开始或许并不大,但是随着计算的进行,震荡的量级就不容小觑了。
对于显示格式,都是条件稳定的,需要足够小才可以保证稳定条件。本文中的一维方程稳定性条件还不是很苛刻。但是如果问题是二维的,甚至是三维的,需要更小,计算量就会很大。
致读者
文章中多处用到Mathtyp
QT5.14,Server-Client应用,Server为树莓派,Client为Android设备,代码封装用QT编写封装为soAndroid上点击按钮,调用so发送数据,Server能正常接收数据。Server原路(获取到ip和port)发送给Client响应数据,然而Client就是不触发readyRead信号。解决:在通过udp发送数据的地方,调用waitForReadyRead,问题解决。void SocketTester::sendMessage(QString msg){QNet
Android中应用的启动方式有两种:冷启动和热启动。那它们分别是什么意思呢?冷启动:当启动应用时,后台没有该进程的应用,这时系统会重新创建一个新的进程分配给该应用,这种启动方式为冷启动。热启动:当启动应用时,后台已经有该应用的进程(如:back键、home键,应用虽然会退出,但是该应用的进程依然会保留在后台),在已经有该进程应用的情况下,这种启动方式就会从已有的进程中来启动该应用,这个方
Google's BBR拥塞控制算法模型解析
IP首部校验和的计算方法: 1.把校验和字段清零。 2.然后对每16位(2字节)进行二进制反码求和,反码求和的意思是先对每16位求和,再将得到的和转为反码。 接下来详细描述反码求和的步骤:看下面的代码 算法:<br />SHORT checksum(USHORT* buffer,int size)<br />{<br /> unsignedlong cksum = 0;<br /> while(size>1)<br /> {<br /> cksum +=*buff
1. DP(display port)和HDMI这两种都是高速高质量多媒体传输协议。同时包括音视频的传输。2. MIPI的各种协议MIPI(mobileindustry processor interface)是为移动产业制定的一系列处理接口。在这里主要介绍视频图像相关的 CSI和DSI协议。CSI:camera serial interface。相机端的高速串行接口DSI:display serial interface 。显示端的高速串行接口Understanding .
zhihu-spider之Feign——zhihu-spider开源项目使用技术详解(其六)1.Feign简介 Feign是一个声明式的Web服务客户端这使得Web服务客户端的写入更加方便 要使用Feign创建一个界面并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持,并使
网上查了以下,貌似是Easyconnect还不支持ubuntu 18.04,所以需要一些非常规操作来正常运行创建脚本(例如,命名为sslvpn),写入以下内容/usr/share/sangfor/EasyConnect/EasyConnect --enable-transparent-visuals --disable-gpu &sleep 5s&&sudo /bin/bash /usr/share/sangfor/EasyConnect/resources/shell/s.
1、什么是面积优化?虽然集成电路是有厚度的,但在单元模块的布局上,各个模块之间是平铺的关系。在完成相同逻辑功能的基础上,减少模块的数量,就可以减少所占的面积,所以叫面积优化...
继承描述的是一种能力:可以使用现有类的所有功能,并在无需重新编写原有类的情况下进行功能上的扩展。要使用继承,必须满足 is-a 原则(代码复用),定义的语法为:子类 extends 父类。子类:又称为派生类,子类一定具有父类的全部属性与行为,并且拥有的属性更多,具有的行为更加丰富,表示的范围更小。父类:又称为超类。继承的基本实现:class Person { ...
initData(orgList) { // 第一种 if (orgList.length) { for (var i = 0; i < orgList.length; i++) { orgList[i].switchValue = 0 if (this.orgIdList.length) { for...
android 在定义标签和类相关联是,会出现这样的错误,这是因为在关联类中的要实现public CustomListView(Context pContext, AttributeSet pAttrs) { super(pContext, pAttrs); init(pContext); }其实细看错误列表就可以看出 java.lang.R
神仙题难点在于代码实现这狗日的题。。。首先暴力是这样的枚举三个坐标这是n^6做法,没什么卵用但是我们发现把一张图分割成3块那么可以做但是问题是这是情况多多的所以成了码农题#include&lt;bits/stdc++.h&gt;using namespace std;const int N=1801;int sum[N][N]={};int a[N][N]={};//左上 int b[N...