【问题标题】:2D Array Lookup-Method to return interpolated value for unknown coordinates二维数组查找方法返回未知坐标的插值
【发布时间】:2016-03-14 13:04:39
【问题描述】:

我有一个完整的 11 行和 101 列的二维数组,用于 C# 中的汽车发动机模拟。

  • 行表示发动机 RPM 值 (0,1000,2000,...,8000,9000,10000)
  • 列以百分比表示节气门位置 (0,1,2,...,98,99,100)
  • 其中的信息表示给定 RPM 和节气门位置的值(例如气流)

问题是,我还需要知道例如之间的气流值。 2000 和 3000 作为插值。

所以我的用例是有一个方法,可以在几乎实时(

这可能吗?或者我真的需要创建和查找一个包含 1000000 个值的新数组吗?

提前致谢!

【问题讨论】:

  • 视情况而定。你知道价值观之间的一般关系是什么吗?你能写出一个函数,在两个值之间进行插值,达到你期望的精度吗?我假设一个简单的线性插值是不够的 :) 无论如何,这与 C# 没有任何关系 - 例如,您可以在 Excel 中更轻松地进行实验。
  • 感谢您的评论!这些值是在现实世界中测量的,可能有也可能没有特定的关系。这些值还可以表示另一个用例中的扭矩,其转速/油门关系在不同汽车之间永远不会相同。我应该尝试找到最近的邻居并以某种方式尝试在它们之间进行插值吗?
  • 如果您没有两点之间关系的合理近似值,那么尝试在两个数据点之间进行插值是没有意义的。但是,从我所看到的扭矩和气流图来看,如果您有足够的数据点,多项式应该可以很好地工作。但实际上,这个问题在 StackOverflow 上是题外话——这不是编程问题,而是“给我一个 X 的插值函数”之类的问题。不过,我不确定在哪里问是个好地方。
  • 一个简单的谷歌搜索也给出了这篇论文:win.tue.nl/casa/meetings/special/ecmi08/combustion-engines.pdf,它非常详细地探讨了你的问题:)
  • 已知值之间的差距非常小——对于 rpm=,array[2000,77] (=133Nm) 和 array[3000,77] (=145Nm) 的值之间的简单线性插值= 2576 和 throttle=77 抬头时绝对没问题。无论如何 - 我认为这个问题可能有一个已知的实现。感谢四位您的意见,我会读进去的。

标签: c# arrays interpolation lookup moving-average


【解决方案1】:

我会使用薄板样条插值。有一个 C++ 实现 here,我为它创建了一个 C# / .NET 包装器 here

【讨论】:

    猜你喜欢
    • 2010-12-17
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 2017-08-16
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    相关资源
    最近更新 更多