【问题标题】:Approximating a closed curve with a polynomial equation用多项式方程逼近闭合曲线
【发布时间】:2021-10-23 06:16:08
【问题描述】:

我们给出了一个封闭的形状。形状以 0 和 1 的矩阵形式给出。示例见:

我们可以将此图像视为一个坐标系。为简单起见,设图像的中点为原点,即x=0,y=0点,x,y坐标的范围为-1到1。

我们的目标是找到一个 n 次多项式 p(x, y),使得满足不等式 p(x, y) 点 集合将近似 给定的形状。

到目前为止,我已经尝试了两种方法,但我对结果并不满意。

首先,我尝试训练一个卷积神经网络。我已经创建了 10000 个左右的随机多项式并创建了它们对应的形状并将它们用作训练数据。

其次,我选择了一个随机多项式并贪婪地优化它的系数以 最小化给定形状和由多项式创建的形状之间的非重叠像素数。

我正在寻找一种算法来解决这个任务。 感谢您的任何建议。

【问题讨论】:

  • 这个问题不是编程问题,而是数学问题,应该发布在math.stackexchange。如果多项式阶数大于 5,则不存在一般解析公式,需要数值求解。一种方法是使用优化策略(例如,在 python 中,您可以使用 scipy)。训练神经网络似乎是解决此类问题的一把锤子。
  • 3b1b 关于fourier series 的视频在这里可能很有趣。还有 Mathworlds 的Heart Curves
  • @JohanC Heart Curves 包含有趣的多项式,但问题是找到 any 形状的多项式。所以基本上,最后我会写一个程序来获取一个图像文件,它会输出近似多项式的系数。对于精彩的 3b1b 视频,不幸的是,它与这个问题几乎无关,因为我们不希望在近似方程中使用三角函数,我们只需要 x^2*y^3 等多项式项。
  • 据我估计,一个可以包含上述形状的二维多项式(假设它是 x 对称的)需要 11 到 35 个系数。对于 NN 或 Monte Carlo 估计器来说,这需要大量计算才能正确。我认为使用类似于模拟退火方法的方法可能会做得更好。

标签: algorithm math optimization mathematical-optimization approximation


【解决方案1】:

这超出了我的舒适区,但如果我必须解决这个问题,我想我会这样尝试:

(x,y) 中的 n 次多项式是 (n+1)2 项的线性组合。一般情况下,我们可以在 (n+1)2 个点上设置一个所需的值,然后找到满足这些要求的系数。

如果您对所需形状有很好的近似值,那么它的轮廓(p(x,y)=0 的轮廓)将不会完全位于内部或外部。它会编织进出,因此会有一些点与所需的轮廓相交。

趋势是,相邻交叉点靠得很近,这些点之间的最大误差较小,这导致以下过程:

  1. 在形状的“中间”找到一个点。称它为 (cx,cy),然后设置 p(cx,cy)=1。
  2. 在所需边界上选择 (n+1)2-1 个点。对于每个这样的 (bx[i],by[i]),设置 p(b[x],b[y])=0。在这里,我们明确确定近似轮廓与所需轮廓相交的点。
  3. 确定满足我们设定要求的多项式。
  4. 评估交叉点之间的最大误差,例如顺时针方向,然后将每个点顺时针或逆时针移动一点点,使其向最大误差方向移动。每个点的移动距离应与任一侧的误差差异成正比。
  5. 返回第 3 步并迭代,直到最大误差停止改善。

这里的想法是,我们在误差最大的地方将边界交叉点移得更近,以使较大的误差变小。

应该类似于 Remez exchange algorithm 用于近似函数,效果很好,但我不确定我为您的特定用例所做的更改是否会成立.我认为值得一试。

【讨论】:

    猜你喜欢
    • 2012-02-02
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    相关资源
    最近更新 更多