【问题标题】:Which algorithm will be required to do this?执行此操作需要哪种算法?
【发布时间】:2011-03-29 21:59:04
【问题描述】:

我有这种形式的数据:

  • 对于 x=1,y 是 {1,4,6,7,9,18,16,19} 之一
  • 对于 x=2,y 是 {1,5,7,4} 之一
  • 对于 x=3,y 是 {2,6,4,8,2} 之一
  • ....
  • 对于 x=100,y 是 {2,7,89,4,5} 之一

每组中只有一个值是正确值,其余为随机噪声。

我知道正确的值描述了一个参数未知的正弦函数。我怎样才能找到正确的值组合,每组一个? 我在看类似“旅行推销员”的组合优化算法

【问题讨论】:

  • 你知道频率吗?对频率有限制吗?
  • 另外,你们观察到的值都是正的,正弦曲线有偏差吗?
  • 好点...通过选择非常高的频率,您可能可以做出所有适合您的可能选择...
  • 关于噪声的概率分布有什么已知的吗?
  • 这与“旅行推销员”无关。

标签: algorithm optimization noise


【解决方案1】:

您正在尝试执行curve fitting,根据您想要拟合曲线的曲线类型(线性、多项式等),有几种算法。我不知道是否有针对正弦曲线的特定算法(傅立叶近似),但我的第一个想法是使用多项式拟合算法和正弦的多项式近似。

我想知道您是否需要在另一个更大的程序过程中执行此操作,或者您是否尝试自己完成此任务。如果是这样,那么您最好使用统计软件包,我更喜欢的是R。它允许您导入数据并拟合曲线并在几行内绘制图形,您还可以在批处理模式下使用 R 从脚本甚至程序中调用它(这是我倾向于做的)。

【讨论】:

  • 曲线拟合将找到给定数据的方程,但这里我的问题是选择数据,使其“完全”适合曲线。插值对我也不起作用,因为插值和曲线拟合都需要特定值,例如这里每个 x 都有一个 y 值,他们不会从集合中选择任何一个值
  • 老实说,有这么多的约束(大部分是精确拟合)和这么少的信息(没有参数的正弦曲线),我真的不知道你能不能穷尽尝试组合,直到它们完美地描述了一个正弦曲线。但我承认对这个域没有任何权限!
【解决方案2】:

这取决于你所说的“确切”是什么意思,以及你事先知道什么。如果你知道频率 w,并且正弦曲线是无偏的,那么你就有一个方程

a cos(w * x) + b sin(w * x)

使用不同 x 值的两个 (x,y) 点,您可以找到 a 和 b,然后对照所有其他点检查生成的曲线。选择 y 观察次数最少的两个 x 值,并对所有 y 进行尝试。如果有偏差,即你的方程是

a cos(w * x) + b sin(w * x) + c

您需要查看三个 x 值。

如果您不知道频率,您可以尝试相同的技术,不幸的是解决方案可能不是唯一的,可能有多个 w 适合。

编辑据我了解,您的每个 x 都有一个真正的 y 值和一堆不正确的值。你想找到真正的价值。最好的方法是通过少量点拟合曲线,并检查曲线是否适合其他集合中的某个 y 值。

如果不是所有的 x 值都具有有效的 y 值,那么同样的技术也适用,但您需要查看更大的一组对、三元组或四元组(基本上是具有不同 y 值的每一对、三元组或四元组) )

如果您的问题是其他问题,我怀疑是,请说明。

  1. 定义正弦曲线。大多数人认为这是a cos(w * x) + b sin(w * x) + c 形式的函数。如果您的意思不同,请指定它。

2 准确说明成功的样子。一个说 10 分而不是 100 分的例子会很好。

目前还不清楚这与组合优化有什么关系。

【讨论】:

  • 曲线拟合将为我将输入的任何数据提供正弦方程,这将最接近我输入的数据。我需要组合具有某种模式的数据(找到方程的参数不是我的目标),我的目标是在许多其他值中找出这个值
  • 一旦有了方程的参数,找到其他点就很容易了。不先弄清楚参数就找点是行不通的。
  • thnx ,是的,这就是我想要的东西,但检查每一种可能性将是详尽的,如果不是我必须使用上述方法,是否有任何有效的方法,如果解决方案不是唯一的(但有非常随机噪声值完全符合正弦曲线的可能性很小)我不知道频率如果我有它会更容易
  • 每个 x 都有一个点吗?如果是这样,您只需要为四个 x 的所有组合与最少数量的 y 值拟合曲线。之所以会出现唯一性问题是因为我们可以无限制地增加频率,并且如果您的 x 是均匀分布的或者是某个长度的整数倍,则有无限数量的 w 值有效。这本质上是奈奎斯特定理。
【解决方案3】:

正弦方程是如此普遍,以至于如果你取所有 y 的任何随机值,这些值都可以拟合到正弦函数中,除非你给出条件,例如。频率

【讨论】:

    【解决方案4】:

    你所说的正弦函数是指一个函数在 n 步内增加,然后在 n 步内减少,等等?如果是这样,您可以将数据建模为通过上行链路和下行链路连接的节点序列。对于每个节点(y 的可能值),记录仅上升或下降链接的链的长度和结束值(每个节点将有多个链)。然后你扫描相同长度和相反方向的连续运行,以一些初始偏移量为模。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 2020-04-24
      • 1970-01-01
      • 2013-04-29
      相关资源
      最近更新 更多