无黏的burgers方程_【游戏流体力学基础及Unity代码(七)】车流量问题,非线性水波以及burgers方程...

本文探讨了无黏的Burgers方程在模拟车流量问题中的应用,通过离散化一维对流方程来描述车流动态。文章介绍了速度与密度的关系,展示了车辆密度变化的可视化结果,并讨论了红灯与绿灯情况下车流的变化,引入了激波的概念。此外,文章还阐述了非线性、色散和孤立波现象,通过Python代码展示了KdV方程的求解过程,以及这些理论在游戏流体力学中的意义。
摘要由CSDN通过智能技术生成

c38eec0f4c902aa16b132c253fe19f26.png

封面是水波的干涉效果。建议阅读本章内容前先去看看一个视频《如何解决交通堵塞》,油管或是B站翻译版

车流量问题

你想想,你带着朋友,坐着汽车,吃着火锅唱着歌,突然就堵车了。为何堵车如此难以解决呢?

首先,把公路简化成一条单行道,并且划分成许多区域,假设车辆会从左边的区域驶往右边的区域。

9c1d94a4ce5d9e563929a3e4322e5b78.png

假设每个网格中汽车的速度的u_i范围是0~1,汽车的密度rho_i范围是0~128。那么u_i*rho_i就是在下个时刻从网格i进入网格i+1的数量。并且假设速度恒定,写成离散公式就是如下,其实就是一维对流方程:

写成python代码如下:
import numpy as np
length = 8
iterations = 10
h = np.zeros((iterations,length))
h[0,2] = h[0,3] = 64
for k in range(0,iterations-1):
    for i in range(1,length):
        h[k+1,i] = h[k,i] + (h[k,i-1] - h[k,i]) * 0.5

用Spyder这个超级漂亮的IDE查看车辆密度变换如下:

1a6753860ef8bd1356f42d9d79f77393.png

可以看到车流在缓缓向右移动,并且单个网格的车辆密度没原来那么高了。

但是路要一步步走,汽车要是开得太快了,会撞到别人。周围车辆少的时候,可以开快一点,周围车辆多的时候,就要慢一点。这时候速度不再是恒定的,而是与密度有关系,比如下式:

umax就是1,rho_max在这里就是128,于是原来的方程变成了下面这样非线性的,因为速度是密度的函数:

写成代码就是

import numpy as np
length = 8
iterations = 10
h = np.zeros((iterations,length))
u = np.zeros((iterations,length))
h[0,2] = h[0,3] = 64
umax = 0.5
hmax = 128.0
​
for k in range(0,iterations-1):
    for i in range(0,length-1):
        u[k,i] = (1 - h[k,i] / hmax)* umax 
    for i in range(1,length):
        h[k+1,i] = h[k,i] + h[k,i-1] * u[k,i-1] - h[k,i] * u[k,i]

最终结果如下:

20fac31af945a4eabd428f5fe7f4f78b.png
<
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值