【问题标题】:Incorrect linear interpolation with large x values using Math.Net Numerics使用 Math.Net Numerics 具有大 x 值的不正确线性插值
【发布时间】:2014-06-17 06:26:44
【问题描述】:

我正在尝试使用 Math.NET Numerics 对 DateTime - Value 系列进行插值。我从线性插值开始,但得到了一些看起来很不一样的结果。

运行这个测试:

public class script{

public void check_numerics()
  {
    var ticks = DateTime.Now.Ticks;
    Console.WriteLine("Ticks: " + ticks);
    var xValues = new double[] { ticks, ticks + 1000, ticks + 2000, ticks + 3000, ticks + 4000, ticks + 5000 };
    var yValues = new double[] {0, 1, 2, 3, 4, 5};
    var spline = Interpolate.LinearBetweenPoints(xValues, yValues);
    var ticks2 = ticks;
    for (int i = 0; i < 10; i++)
    {
      ticks2 += 500;
      Console.WriteLine(spline.Interpolate(ticks2));
    }
  }
}

这给出:

Ticks: 635385235576843379
0.5
1
1.5
2
2.42857142857143 // this should be 2.5
3
3.5
4
4.5
5

请注意,2.4285 是相当错误的。在不同的时间(不同的刻度值),不同的值将是“错误的”。 Math.NET 中是否存在 x 值较大的“错误”,还是我期望过高?

【问题讨论】:

  • 鉴于 double 只有 15 - 17 s.f.,所以它不会完全准确。并且您超出了该值,因此 double 无法准确表示您给出的值,但我认为它会比那更接近
  • 谢谢@JamesBarrass,所以你不能用双精度表示当前时间——很高兴知道!
  • 不是那个精度,毫秒,也许是 10 微秒。不会小很多。 IIRC 滴答声约为 100 纳秒

标签: c# linear-interpolation math.net numerics


【解决方案1】:

只是确认上面的 cmets 是 Math.NET Numerics 的维护者:

可以用双精度表示的这个数量级的最接近的数字之间的距离(epsilon)是 128:

Precision.EpsilonOf(ticks); // 128

这意味着如果你从这个数字中添加或减去128/2-1 = 63,你会得到完全相同的数字:

long ticks = DateTime.Now.Ticks // 635385606515570758
((long)(double)ticks)           // 635385606515570816
((long)(63+(double)ticks))      // 635385606515570816
((long)(-63+(double)ticks))     // 635385606515570816
((long)(65+(double)ticks))      // 635385606515570944
((long)(-65+(double)ticks))     // 635385606515570688

500 的增量步数与这 128 步非常接近,并且有效地四舍五入为 128 的倍数(例如 512),因此会有一些这样的伪影也就不足为奇了。

如果您按照 James 的建议通过将刻度除以 10000 将时间精度降低到毫秒,您会得到 0.0078125 的 epsilon,即使步长为 1 而不是 500 也能获得准确的结果。

Precision.EpsilonOf(ticks/10000); // 0.0078125

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    相关资源
    最近更新 更多