1

我的任务是创建一种方法来计算线性插值,其中 Y 是 DateTime 值,X 是整数值。例如,查看以下值,如何找到 7、8 和 9 的值?

Date:       Value:
05/01/2013  5
06/01/2013  7
10/01/2013  9
11/01/2013  1
15/01/2013  7
17/01/2013  2
02/02/2013  8

EDIT: 
int interpMethod(DateTime x0, int y0, DateTime x1, int y1, int x)
{
    return y0 * (x - x1) / (x0 - x1) + y1 * (x - x0) / (x1 - x0);
}
4

1 回答 1

5

为了在其他 2 个点之间插入点,您需要计算变化率,然后将其应用于 2 个点之间的距离。

此外,请确保您的数据类型保持一致。您显示的数据有双倍,但您的方法只处理整数。此外,您在问题中要求输入一个双精度并找到日期时间,但是您返回的是一个整数?

public static DateTime Interpolate(DateTime x0, double y0, DateTime x1, double y1, double target)
{
  //this will be your seconds per y
  double rate = (x1 - x0).TotalSeconds / (y1 - y0);
  //next you have to compute the distance between one of your points and the target point on the known axis
  double yDistance = target - y0;
  //and then return the datetime that goes along with that point
  return x0.AddSeconds(rate * yDistance);
}
于 2014-10-03T13:58:04.940 回答