根据特定时间的值计算平均值(温度)

Calculate average values (temperature) based on values at specific times

给定: 一组温度,每个温度都有时间戳。 时间戳之间的距离不同。

假设: 我假设温度从一个测量值到下一个测量值呈线性变化。

目标: 我想计算平均温度。

到目前为止我得到了什么:

我正在使用 elixir 和 postgresql。但是,非常欢迎以任何语言提供有关如何处理此问题的任何提示。如果有我错过的图书馆或一般的分步方法。也许甚至还有一个 postgresql 函数?

我也将一些示例数据放在这里:

[{~N[2020-03-28 13:08:32], 23.1}, {~N[2020-03-28 13:10:00], 23.3}, {~N[2020-03-28 23:08:32], 6.3}, {~N[2020-03-29 00:00:32], 2.1}, {~N[2020-03-29 04:00:00], 3.8}]

假设我想根据这些值计算 ~N[2020-03-28 13:30:00]~N[2020-03-29 03:00:00] 之间的平均温度。

编辑: 我对High Performance Mark提出的计算的理解

  1. 计算粉色三角形
  2. 计算三角形下的绿色正方形
  3. 对所有点都这样做
  4. 全部加起来
  5. 除以时间间隔(x轴)

如何获得边缘案例?

如果温度在一个区间内呈直线变化,则该区间内的平均温度就是该区间端点的平均值。

例如,在这个区间内:

{~N[2020-03-28 13:08:32], 23.1}, {~N[2020-03-28 13:10:00], 23.3}

平均值为 (23.1 + 23.3)/2 = 23.2。

现在,如果您有一个由两个或更多间隔组成的周期怎么办?

你要取一个"weighted average":将每个区间的平均值乘以区间的长度,相加,除以整个周期的长度。

具体例子:

假设您有 3 个数据点:

  • t=0 温度=4
  • t=2 温度=2
  • t=5 温度=8

这是两个间隔。第一个的长度为 2,平均温度为 (4+2)/2 = 3。第二个长度为 3,平均温度 (2+8)/2 = 5

整个时期的平均值为 (2 * 3 + 3 * 5)/(2 + 3) = 4.2。