我不确定这是否可以在没有某些决定因素的情况下完成......但是想知道是否有人知道如何做到这一点。
我想为数字创建一个移动比例。
假设我的数字是26000.我希望这个算法的结果是6500;或原始数字的25%。但如果我有5000号,我希望结果是2500;或原始数字的50%。
百分比不必精确,这只是一个例子。
我只想要像正弦波一样。随着输入数量的增加,输出数量占输入的百分比较低。
这有意义吗?
答案 0 :(得分:3)
在Excel中绘制一些点并使用行上的“显示公式”选项。
答案 1 :(得分:2)
像f(x) = x / log x
?
x | f(x)
=======================
26000 | 5889 (22.6 %)
5000 | 1351 (27.2 %)
100000 | 20000 (20 %)
1000000 | 166666 (16.6 %)
只是一个简单的例子。您可以通过使用对数的基数来调整它,通过在分子(x
)或分母(log x
)上添加乘法常数,使用平方根,平方(或取根) log x
或x
等。
以下是f(x) = 2*log(x)^2*sqrt(x)
给出的内容:
x | f(x)
=======================
26000 | 6285 (24 %)
5000 | 1934 (38 %)
500 | 325 (65 %)
100 | 80 (80 %)
1000000 | 72000 (7.2 %)
100000 | 15811 (15 %)
答案 2 :(得分:1)
合适的对数刻度可能有所帮助。
答案 3 :(得分:1)
除了您已经提到的两个转换之外,如果指定第三个转换,也可以准确定义您想要的功能。如果你有一些特定的目标,它很可能符合一个众所周知的数学定义,至少有一张海报可以为你识别。听起来好像你在谈论对数函数。但是,您必须更具体地说明定义有用算法的要求。
答案 4 :(得分:1)
我建议您使用幂律系列函数,c * x ^ a == c * pow(x,a)
其中a
是幂。如果你想要答案的一小部分,你会选择a=1
,它只是一个常数部分。但是您希望百分比慢慢减少,因此您可以选择a<1
。例如,我们可以选择a = 0.9和c = 0.2并获得
1 0.2
10 1.59
100 12.6
1000 100.2
因此它的范围从1000%时的20%到10%。您可以选择较小的a
以使分数减少得更快。 (并且您可以根据您的范围扩展所有内容。)
特别是,如果c * 5000 ^ a = 2500且c * 26000 ^ a = 6500,则通过除以得到(5.1)^ a = 2.6,我们可以将其解析为a = log(2.6)/ log(5.1 )= 0.58648 ....然后我们插回去获得c * 147.69 = 2500所以c = 16.927 ......
现在进展如此
1000 973
3000 1853
5000 2500
10000 3754
15000 4762
26000 6574
50000 9648
90000 13618
答案 5 :(得分:0)
这有点类似于用于模拟音频的简单压缩方案。请参阅Companding的维基百科条目。