我有一系列从1开始的数字,它会增加1到一个上限,可能在100到200之间。
我正在尝试创建一个函数,将这些数字转换为0.5到20的范围,其中一个总是= 20,最大值总是等于0.5 ,其余的数字在2。
假设数字1到最大数字在A栏中,我已设法将旧比例转换为新比例:
=(((A1-1)*(20 - 0.5))/(MAX(A:A) - 1))+0.5
可以表示为(((OldVal - OldMin) * (NewMax - NewMin)) / (OldMax - OldMin)) + NewMin
这正确地转换了比例幅度
200 20
199 19.90201005
198 19.8040201
197 19.70603015
196 19.6080402
195 19.51005025
194 19.4120603
etc...
8 1.185929648
7 1.087939698
6 0.989949749
5 0.891959799
4 0.793969849
3 0.695979899
2 0.59798995
1 0.5
我现在需要做的是反转比例,使最大值(100到200)= 0.5,最小值(1)= 20。
我怎么能这样做,记住最大值是动态的,可以在100到200之间?是否有另一种方法可以解决创建逆相关的原始问题?
理想情况下,如果有一些聪明的数学技巧(你猜对了,我不是数学男孩!)我希望能够在序列中找出任何数字而不先计算整个序列,例如{{1虽然这不是必需的。
非常感谢。
答案 0 :(得分:2)
假设线性插值,您可以使用y = mx + b
,其中x
是您的输入(在这种情况下,1到100到200之间的某个未知值),y
是您的输出(在这种情况下,20到0.5),斜率(m
)和截距(b
)动态确定为x
的上限变化。
我将100到200之间的未知值定义为z
。
我们有两个方程和两个未知数。 (请记住z
已知,只是它是动态的)。这是方程组:
20 = m*1 + b
0.5 = m*z + b
一些线性代数:
19.5 = m*(1-z)
m = 19.5/(1-z)
和
20*z = m*z + b*z (the equation '20 = m*1 + b` multiplied by 'z')
0.5 = m*z + b
20*z - 0.5 = b*(z-1)
b = (20*z - 0.5)/(z-1)
因此,将两者联系起来的等式是:
y = 19.5*x/(1-z) + (20*z - 0.5)/(z-1)
再次,z
是100到200之间的数字。
答案 1 :(得分:2)
您可以通过在C列输入以下公式来反转/反转B列中数据的顺序:
=INDEX(B:B,COUNTA(B:B)+1-ROW())