How to implement linear interpolation?

后端 未结 7 1352
暗喜
暗喜 2020-11-28 08:16

Say I am given data as follows:

x = [1, 2.5, 3.4, 5.8, 6]
y = [2, 4, 5.8, 4.3, 4]

I want to design a function that will interpolate linearl

7条回答
  •  旧时难觅i
    2020-11-28 08:37

    Instead of extrapolating off the ends, you could return the extents of the y_list. Most of the time your application is well behaved, and the Interpolate[x] will be in the x_list. The (presumably) linear affects of extrapolating off the ends may mislead you to believe that your data is well behaved.

    • Returning a non-linear result (bounded by the contents of x_list and y_list) your program's behavior may alert you to an issue for values greatly outside x_list. (Linear behavior goes bananas when given non-linear inputs!)

    • Returning the extents of the y_list for Interpolate[x] outside of x_list also means you know the range of your output value. If you extrapolate based on x much, much less than x_list[0] or x much, much greater than x_list[-1], your return result could be outside of the range of values you expected.

      def __getitem__(self, x):
          if x <= self.x_list[0]:
              return self.y_list[0]
          elif x >= self.x_list[-1]:
              return self.y_list[-1]
          else:
              i = bisect_left(self.x_list, x) - 1
              return self.y_list[i] + self.slopes[i] * (x - self.x_list[i])
      

提交回复
热议问题