答案1
Tl;DR - 公式是B = A * (21000000 - A) / 20000000000
我是怎么会这样呢?
好的,第一步,很明显 B 是 A/1000 减去某个值
B = A / 1,000 - fn(A)
fn(A) 的值是
A fn(A)
1000000 0
2000000 100
3000000 300
4000000 600
5000000 1000
看起来像三角形数字 1、3、6、10、15 等(当然乘以 100)
公式是n(n+1) / 2
- 虽然我们希望第一项为 0,n(n-1)/2
为了我们的目的n = A / 1000000
,想将结果乘以 100
所以
So fn(A) = 100 * ((A / 1000000 * (A - 1000000) / 1000000) / 2 )
或者
fn(A) = 100 * A * (A - 1000000) / 2000000000000
然后变成
fn(A) = A * (A - 1000000) / 20000000000
所以,现在我们有
B = A / 1000 - A * (A - 1000000) / 20000000000
使用基本方法进行简化
B = A * (21000000 - A) / 20000000000
答案2
你需要拉格朗日插值
我在 sagemath 中执行此操作,但您也可以手动计算。
我首先创建一个需要插入的点列表
sage: pts
[(1000000, 1000),
(2000000, 1900),
(3000000, 2700),
(4000000, 3400),
(5000000, 4000),
(6000000, 4500),
(7000000, 4900),
(8000000, 5200),
(9000000, 5400),
(10000000, 5500)]
然后我对有理数中的这些点进行拉格朗日插值
sage: Q.<x> = PolynomialRing(QQ)
sage:
sage: Q.lagrange_polynomial(pts)
-1/20000000000*x^2 + 21/20000*x
B1
我将上述多项式写为单元格中的 excel 公式=(-1/20000000000)*POWER(A1,2)+(21/20000)*A1
然后我将单元格复制到剩余的 9 个单元格(单元格 ID 将进行调整)
由于得到的多项式是二次的,因此 3 个点就足够了,但我们无法通过查看这些点来知道这一点。
只需 3 个点就足以进行插值。
例如
pts = [(1000000, 1000), (2000000, 1900), (3000000, 2700)]
如果您想手动尝试,只需尝试上述 3 个点或拉格朗日插值公式列表中的任意 3 个点。