怎样才能产生一个适当的流线图?

计算科学 可视化 绘图 向量
2021-12-03 21:56:14

我最近在 Mathematica 中制作正确的流线图时遇到了麻烦,显然这个问题比我理解的要难一些。我想知道是否存在生成流线图的通用算法,这些算法可以适当地处理行间距和终止。

让我把问题具体化。考虑一个向量场F(x),在两个或三个维度。流线是矢量场的积分曲线,即曲线α(s)谁的导数dαds在每个点都与矢量场成正比F(α(s))在那时候。流线图表示此类流线的集合,它是可视化场,尤其是其方向的非常有用的工具。

然而,还有其他方法可以使图表传达有关场大小及其散度的信息。

  • 如果F是无发散的(即F=0),然后习惯性地绘制不会终止的流线,除非它们遇到场的零或奇点或离开绘图,并将流线隔开,使得矢量场流

    LFdx
    是恒定的L连接任意两条相邻的流线。(在三个维度上,这很难恰当地定义,但流动SFda在角为流线的任何“单元格”上应该是恒定的。)

    这允许从行间距直接读取矢量场的强度,保证在场更强烈的地方更小。

  • 如果F具有非零散度,则仍然习惯于保持线间距,以使流线之间的流量大致恒定,尽管这要求线在图表中间终止或开始。

    这允许人们将具有正或负差异的区域(场的体积源和汇)可视化为流线分别开始或终止的区域。

所以:我想知道是否存在采用向量场的算法F和一个地区R,在两个或三个维度(主要是两个),哪个会产生一组流线末端,使得流线之间的场流(大约)恒定?因此,它应该在具有正场和负场散度的区域处开始和终止线。

2个回答

您可以自己计算流函数,并从中绘制等高线或常量流线ψ. 让我们假设您在二维不可压缩流上 u=(u,v,0)T,那么你可以找到一个精确的微分dψ满足质量守恒方程:

ux+vy=0

何处:

dψ=udyvdx

在哪里:

u=ψy, v=ψx

在浸入流体的任意路径上,您可以积分精确的微分方程:

ψψ0=pathudyvdx

从实现的角度来看,如果您正在处理结构化正交网格,您可以实现辛普森规则以在给定方向上积分上述方程(请记住,如果您选择沿坐标之一积分,则积分同样消失)。

对于三维流,可以定义两个流函数而不是一个。通过假设连续性方程中的速度(u=0) 作为向量向量势 u=×B, 在哪里B=ϕψ. 因此,可以通过注意扩展上述定义:

u=ϕ×ψ

由常数表面包围的体积上的体积流量ϕψ可以使用高斯定理计算为:

M=Ωudν=ϕψdl

最后,通过取速度势的旋度(涡度)B经过一些向量代数,你得到:

L(ϕ)ψL(ψ)ϕ=ω

在哪里, L(ϕ)=I(ϕ)+_(ϕ)

注意:下划线表示运算符是列向量。

最后一个方程可以简化为更简单的情况(无旋流,轴对称)。您可以进一步扩展该方法,通过使用 Hemholtz 定理将矢量场分解为一组无旋和无散场。

我过去曾使用 matplotlib 的plot_streamlines函数来创建流线图。这里有一个很好的功能介绍如果您想更好地控制绘图的创建,StackOverflow 上的这个线程提供了更灵活的技术(和源代码),用于在 Python 中创建流线图。