将序列缩减为更小序列的算法(针对特定功能)
Algorithm for reducing sequence into smaller sequence (for specific function)
我有一个 (X,Y)
对序列:(X_0,Y_0)....(X_N,Y_N)
我在每个时间步向序列添加一对新的 t
在遥远的将来的某个时候,t_n
,我想用一个函数将序列化简为数字。
该函数采用对序列和输入 Z
:
f(Z) = ((1/X_0)-(1/Z))*Y_0 + ((1/X_1)-(1/Z))*Y_1 + ... + ((1/X_N)-(1/Z))*Y_N
我的问题:
我不想存储每一对这些序列。这需要太多 space.
我想将序列缩减为某种增量表示,这样我就可以
- 存储更少的对
- 随时计算
f(Z)
而不会损失任何精度
我该怎么做?
f =
(1/X_0-1/Z)*Y_0 + (1/X_1-1/Z)*Y_1 =
(Y_0/X_0 - Y_0/Z) + (Y_1/X_1 - Y_1/Z) =
Y_0/X_0 - Y_0/Z + Y_1/X_1 - Y_1/Z =
Y_0/X_0 + Y_1/X_1 - Y_0/Z - Y_1/Z =
(Y_0/X_0 + Y_1/X_1) - (Y_0 + Y_1) / Z =
A - B / Z
A = SUM(Y_i / X_i)
B = SUM(Y_i)
所以你可以在任何时刻增量更新A和B并计算结果
我有一个 (X,Y)
对序列:(X_0,Y_0)....(X_N,Y_N)
我在每个时间步向序列添加一对新的 t
在遥远的将来的某个时候,t_n
,我想用一个函数将序列化简为数字。
该函数采用对序列和输入 Z
:
f(Z) = ((1/X_0)-(1/Z))*Y_0 + ((1/X_1)-(1/Z))*Y_1 + ... + ((1/X_N)-(1/Z))*Y_N
我的问题:
我不想存储每一对这些序列。这需要太多 space.
我想将序列缩减为某种增量表示,这样我就可以
- 存储更少的对
- 随时计算
f(Z)
而不会损失任何精度
我该怎么做?
f =
(1/X_0-1/Z)*Y_0 + (1/X_1-1/Z)*Y_1 =
(Y_0/X_0 - Y_0/Z) + (Y_1/X_1 - Y_1/Z) =
Y_0/X_0 - Y_0/Z + Y_1/X_1 - Y_1/Z =
Y_0/X_0 + Y_1/X_1 - Y_0/Z - Y_1/Z =
(Y_0/X_0 + Y_1/X_1) - (Y_0 + Y_1) / Z =
A - B / Z
A = SUM(Y_i / X_i)
B = SUM(Y_i)
所以你可以在任何时刻增量更新A和B并计算结果