如何用Fipy表示三阶导数

2024-05-13 22:14:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何表示第三个导数项:

enter image description here

在Fipy python中。我知道扩散项表示为

DiffusionTerm(coeff=D)

高阶扩散项

DiffusionTerm(coeff=(Gamma1, Gamma2))

但却找不出一种方法来表示这个第三个导数。谢谢


Tags: 方法导数coefffipygamma1gamma2diffusionterm
1条回答
网友
1楼 · 发布于 2024-05-13 22:14:12

向量v是用(标量)解变量定义的吗?如果没有,请明确写下术语:

v.divergence.faceGrad.divergence

如果v是解变量(比如φ)的函数,那么就没有像高阶扩散那样的机制,但实际上没有必要(也不需要高阶扩散)。把你的方程分成两个二阶偏微分方程,然后把它们耦合起来:

\partial \phi / \partial t = \nabla^2 \nabla\cdot\vec{v}

可以重写为

\partial \phi / \partial t = \nabla^2 \psi \\
\psi = \nabla\cdot\vec{v}

那会是

TransientTerm(var=phi) == DiffusionTerm(var=psi)
ImplicitSourceTerm(var=psi) == ConvectionTerm(coeff=v, var=???)

我需要更多地了解v和你的全套方程,以便进一步说明ConvectionTerm应该是什么样子。你知道吗

[根据这些术语来自Korteweg-de Vries equation的信息添加注释]:

虽然not strictly true说明v不是KdV方程中某个phi的函数,但仍然没有办法把^部分3v/\部分x3项变成FiPy可以轻易利用的形式。如果v是标量,那么\partial^3 v/\partial x^3是向量。如果v是向量,那么\partial^3 v/\partial x^3是标量或张量。除非你用单位向量点它,否则没有办法使这个项的秩与其他项一致,在这种情况下,它只是一个没有有效隐式表示的源。你知道吗

从根本上说,一维方程总是误导人的。关键是要知道什么是标量什么是向量。FiPy作为一个有限体积代码,在求解时应用了散度定理,因此有必要知道何时处理通量的散度(FiPy可以隐式地处理)或某个随机偏导数(它不能)。你知道吗

通过对KdV方程的推导,我们可以看出,由于进行了太多的长波近似和变量替换,矢量演算的任何痕迹都被抛弃了。因此,这并不是FiPy具有有效形式的PDE。您可以编写v.faceGrad.divergence.grad.dot([[1]]),FiPy应该接受这一点,但它不能非常有效地解决问题。你知道吗

此外,由于KdV方程是关于波传播的,本质上是双曲线的,FiPy确实不太适合(FiPy的算法通常需要一些扩散元素才能收敛)。你可以看看Clawpackhp-FEM。你知道吗

相关问题 更多 >