根据特定时间的值计算平均值(温度)
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提出的计算的理解
- 计算粉色三角形
- 计算三角形下的绿色正方形
- 对所有点都这样做
- 全部加起来
- 除以时间间隔(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。
给定: 一组温度,每个温度都有时间戳。 时间戳之间的距离不同。
假设: 我假设温度从一个测量值到下一个测量值呈线性变化。
目标: 我想计算平均温度。
到目前为止我得到了什么:
- 我需要为此使用积分计算。遗憾的是信息 离开了我的头。毕业几年了...
- 我可以以某种方式为每两个时间戳值对创建数学函数,然后根据它计算平均值。
我正在使用 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提出的计算的理解
- 计算粉色三角形
- 计算三角形下的绿色正方形
- 对所有点都这样做
- 全部加起来
- 除以时间间隔(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。