二维散度方程的数值解

计算科学 pde 数字
2021-12-16 19:39:50

有什么方法可以数值求解以下二维方程: on a矩形网格,知道在边界上为零?

xyf(x,y)=a(x,y)
f(x,y)

4个回答

你遇到的问题不是很好。本质上,您正在寻找两个函数应该只求解一个方程。那是不够的信息。f1(x,y),f2(x,y)

为了让您了解为什么这不起作用,假设您找到了一组解决方案那么不难验证也是您可能想要选择的任何函数的解决方案。因此,我只需轻轻一挥,就已经找到了无穷无尽的解决方案——太多了,无法做任何有用的事情。f(x,y)=(f1(x,y),f2(x,y))Tf~(x,y)=(f1(x,y)+g(y),f2(x,y)+h(x))Tg(y),h(x)

换句话说,是否有数值方法可以解决您的问题是一个有争议的问题:您首先需要解决基本的数学问题,然后我们可以讨论数值逼近。

(您可能想反对边界条件要求我选择。但这只会改变问题:我仍然可以构造一个对于在边界上满足 。有无穷多个这样的函数,例如,具有零边界值和任意右手边的斯托克斯方程的所有解。)g(y)=h(x)=0f~(x,y)=f(x,y)+φ(x,y)φdivφ=0φ=0

有很多方法可以做到这一点,可以应用有限差分法、有限体积法或有限元法。

上述方程通常被称为毒方程,通常是数值方法课程中新主题中第一个提出的方程。

在堆栈溢出问题矩阵的答案中的有限差分离散化相关的矩阵,以生成有限差分(该矩阵在 MATLAB 代码中为)。uxyA

或者,在维基百科上提到并参考Evans (2010) (p. 400),您可以将方程转换为一维波动方程。我在下面尝试过这个。边界条件可能会变得更加棘手。uxy

如果你想摆脱你的混合导数,你可以使用坐标变换

x^=x+y,x=x^+y^2,y^=xy,y=x^y^2.
你可以证明 然后
ux^x^=uxx+2uxy+uyy,uy^y^=uxx2uxy+uyy,
uxy=ux^x^uy^y^4=a(x^+y^2,x^y^2).

正如沃尔夫冈所解释的,问题不在于找到解决方案,而在于选择一个解决方案。

如果只是一些解决方案适合您,请继续并采取f20(例如)并解决xf1(x,y)=a(x,y)对于每个y(这意味着整合,例如f1(x,y)=x0xa(t,y)dt)。但是,如果您出于某种原因对该解决方案不满意,则需要考虑您对解决方案还有哪些其他条件。

仅举两个例子:

  1. 您可能想寻找最少的解决方案L2-规范。这将导致具有线性等式约束的二次优化问题,即

    minf1(x,y)2+f2(x,y)2dxdys.t.divf=a.
    这个问题的最优系统是另一个偏微分方程系统……

  2. 您可能对无卷曲的解决方案感兴趣。然后使 ansatz(这意味着)并解决 这确实是一个泊松方程。f=ucurlf=curlu=0

    divu=Δu=a