一维Burgers方程数值解法

2023-12-13 16:10

本文主要是介绍一维Burgers方程数值解法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一维Burgers方程

一维burgers方程为:

由于等式右边可以进行积分:

利用F = u**2,则方程为:

假设u初始为阶跃函数:

数值解法采用MacCormack格式:

但是这一解法,有失真的性质,后面具体介绍。
所以根据这一格式,可以直接数值求解,并利用matplotlib画出动态的数值图形,具体代码如下:
# -*- coding: utf-8 -*-
"""
Created on Tue Jan 20 14:32:23 2015
1D burges equation
@author: myjiayan
"""import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animationdef u_initial():first = np.ones(40)second = np.zeros(41)result = np.array(list(first)+list(second))return resultdef computeF(u):F = 0.5*u**2return Fdef maccormack(u,nt,dt,dx):un = np.zeros((nt,len(u)))un[0] = u.copy()ustar = u.copy()for t in xrange(1,nt):F = computeF(u)ustar[:-1] = u[:-1] - (F[1:]-F[:-1])*dt/dxustar[-1] = 0.0Fstar = computeF(ustar)un[t,1:] = 0.5*(u[1:]+ustar[1:]-(Fstar[1:]-Fstar[:-1])*dt/dx)un[t,0] = 1.0u = un[t].copy()return unif __name__ == '__main__':nx = 81nt = 70dx = 4.0/(nx-1)def animate(data):x = np.linspace(0,4,nx)y = dataline.set_data(x,y)return line,u = u_initial()sigma = .5dt = sigma*dxun = maccormack(u,nt,dt,dx)fig = plt.figure();ax = plt.axes(xlim=(0,4),ylim=(-.5,2));line, = ax.plot([],[],lw=2);anim = animation.FuncAnimation(fig, animate, frames=un, interval=50)plt.show()
直接将代码保存为burgers.py文件,打开terminal:
$python burgers.py
数值结果就以动态的形式表现出来了。

很明显,数值结果失真了,数值结果中u的值竟然比1大,如何改进MacCormack格式呢?
我们在预测步上加一个人工项,新的格式为:

选取Ephsilon为0.5后改进格式得到的数值结果为:

比1大的值已经消失。






这篇关于一维Burgers方程数值解法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/489086

相关文章

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

简单的Q-learning|小明的一维世界(3)

简单的Q-learning|小明的一维世界(1) 简单的Q-learning|小明的一维世界(2) 一维的加速度世界 这个世界,小明只能控制自己的加速度,并且只能对加速度进行如下三种操作:增加1、减少1、或者不变。所以行动空间为: { u 1 = − 1 , u 2 = 0 , u 3 = 1 } \{u_1=-1, u_2=0, u_3=1\} {u1​=−1,u2​=0,u3​=1}

简单的Q-learning|小明的一维世界(2)

上篇介绍了小明的一维世界模型 、Q-learning的状态空间、行动空间、奖励函数、Q-table、Q table更新公式、以及从Q值导出策略的公式等。最后给出最简单的一维位置世界的Q-learning例子,从给出其状态空间、行动空间、以及稠密与稀疏两种奖励函数的设置方式。下面将继续深入,GO! 一维的速度世界 这个世界,小明只能控制自己的速度,并且只能对速度进行如下三种操作:增加1、减

交换两个变量数值的3种方法

前言:交换两个数值可不是"a = b,b = a"。这样做的话,a先等于了b的值;当“b = a”后,因为此时a已经等于b的值了,这个语句就相当于执行了b = b。最终的数值关系就成了a == b,b == b。 下面教给大家3种交换变量数值的方法: 目录 1. 中介法 2. 消和法 3. 异或法 4. 总结 1. 中介法 中介法(又称 临时变量法 或 酱油法),其中心

c语言——用一维数组输出杨辉三角形

一.代码 #include <stdio.h>int Num[100];int Hang;int Lie;int a;int Flag;int main() {Lie = 1;Hang = 1;a = 0;while (1) {//列1为1if (Lie == 1) {Num[1] = 1;Lie++;}//数据存到数组里面while (Hang >= Lie && Hang !=

2015多校联合训练第一场Assignment(hdu5289)三种解法

题目大意:给出一个数列,问其中存在多少连续子序列,子序列的最大值-最小值< k 这题有三种解法: 1:单调队列,时间复杂度O(n) 2:RMQ+二分,时间复杂度O(nlogn) 3:RMQ+贪心,时间复杂度O(nlogn) 一:RMQ+二分 RMQ维护最大值,最小值,枚举左端点i,二分找出最远的符合的右端点j,答案就是ans += j - i+1;(手推一下就知道) 比如1 2 3

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

knime和Python两种解法提取斜杠(/)或反斜杠(\)分隔前后数据

有如下数据,需要对数据处理,输出客户需要的效果。 数据样例:👇 客户想要的效果: 解决办法: 链接: knime和Python两种方式解法提取斜杠(/)或反斜杠(\)分隔前后数据 今天的分享就到这里了。有收获的小伙伴,记得点赞、收藏、分享哦! 如果您对本次分享的内容感兴趣的话,记得关注关注哦!不然下次找不到喽! 关注不迷路哦! “好记性不如烂笔头”,IT小本本 —— 记录I

“弹性盒子”一维布局系统(补充)——WEB开发系列31

弹性盒子是一种一维布局方法,用于根据行或列排列元素。元素可以扩展以填补多余的空间,或者缩小以适应较小的空间,为容器中的子元素提供灵活的且一致的布局方式。 一、什么是弹性盒子? CSS 弹性盒子(Flexible Box Layout,简称 Flexbox)是 CSS3 中引入的一种布局模式,提供一种有效的方式来布局、对齐和分配容器内空间,特别是在动态和复杂的应用界面中。 1、