求解满足 f(x,y) = 0 的二维曲线的继续过程

计算科学 插值 数值分析 复分析
2021-12-04 20:56:27

我有一些功能R2,必须用数值​​计算。例如,我可能对从 (x,y) = 0 开始的实值轮廓积分感兴趣。

f(x,y)=[0x+iyt3+t5dt]

在哪里是真实的部分。(实际上我没有 f 的显式形式,它必须用数值​​计算)。轮廓f=0看起来像:

在此处输入图像描述

我知道存在一些离开原点的连续平滑曲线,并且对于沿着这条曲线的所有点x=x(s),y=y(s), 那f=0在哪里s是一些参数化。

我也知道一个很好的初始猜测用于这条线的初始方向。例如,我可能知道最初,曲线沿着某个方向离开,θ.

如何数值求解曲线?

  1. 一种方法是只计算f在值的网格上x并且在y. 然后为满足 f = 0 的所有恒定值等值线创建等值线图并进行插值。这不是一种计算友好的方式。

  2. 另一种方法可能是从 (x,y) = (0,0) 开始,朝着猜测曲线所在的方向迈出一小步。然后从这个新的点,再迈出一小步,但朝着最小化的方向f.

2. 的问题是我不确定如何编写自适应代码(我想采用可变步长,特别是在曲线可能高度弯曲的区域周围)。

我确信这些问题必须有众所周知的数值方法。这实际上只是寻根,但好处是您知道解决方案集(您感兴趣的)必须是连续且平滑的。有人可以帮忙吗?

2个回答

让我们参数化您正在寻找的曲线(x(t),y(t))让我们假设在这条曲线上的所有点f(x(t),y(t))0,即曲线永远不会与另一条等高线相交。然后你知道在每个点的切线曲线(x(t),y(t))平行于等高线水平f,即它垂直于梯度f. 这意味着一种可能的参数化是将曲线定义为

ddt(x(t)y(t))=(0110)f(x(t),y(t))
这是一个 ODE,您可以从任意选择的点进行整合(x(0),y(0))你知道在曲线上。时间参数化的另一种可能选择是使用以下形式
ddt(x(t)y(t))=(0110)f(x(t),y(t))f(x(t),y(t)).

的梯度为零的点,即两条零线相交的点,您就会遇到麻烦。您必须单独处理这种情况。f

我在这里回答了一个类似的问题如果您有解决线段相交查询的好方法(如果您的返回有符号值以便您可以使用基于符号的二分法,则最简单)。f

否则,我会尝试分析。您大概可以计算相对于最好手动进行微分,但你可以用有限差分来近似它。您可以计算高阶导数来估计曲率,但这很快就会变得烦人。曲线走向零梯度的方向。您将必须决定一个较大的步长(然后您可以对其进行细化),然后计算校正以返回曲线(使用上方的线段查询(在垂直于步长的方向上)或使用类似于牛顿法)。fxy

请注意,为了执行自适应采样,您必须了解可能的最大曲率或您会满意的最大曲率。如果您知道曲线的空间范围,那么您可以采取更合理尺寸的步骤。