Math 将线性比例映射为对数比例,两个比例都具有变量min/max

Math 将线性比例映射为对数比例,两个比例都具有变量min/max,math,scale,logarithm,Math,Scale,Logarithm,假设我有一个线性比例[100-1000],我想以对数为基础将它映射到[10-200]比例 100 becomes 10 1000 becomes 200 450 however becomes lower than 95 since the new scale is logarithmic. 我需要一个公式,如果给定两个尺度的最小值/最大值,它取线性尺度内的任何数字,并返回对数尺度等效值 我试图使用有问题的公式,但当使用作者提供的数字作为测试时,我得到的结果是0.97,而不是1.02,这显然是

假设我有一个线性比例[100-1000],我想以对数为基础将它映射到[10-200]比例

100 becomes 10
1000 becomes 200
450 however becomes lower than 95 since the new scale is logarithmic.
我需要一个公式,如果给定两个尺度的最小值/最大值,它取线性尺度内的任何数字,并返回对数尺度等效值


我试图使用有问题的公式,但当使用作者提供的数字作为测试时,我得到的结果是0.97,而不是1.02,这显然是正确的

Y = a + b * log(X)
对于一些方便的对数基数(十进制或自然)

为两个边界点建立方程(我使用log10):

所以公式是

Y = -370 + 190 * log10(X)
for X=450 Y=134

Meteor我相信参考答案中的公式是正确的,但它在案例
x=5
中的应用是错误的
1.02
显然不是
5
的有效映射,因为
5
[0.1;10]
范围的中间稍靠前(中间是
5.05
),而
1.02
略高于对数范围的中间
[0.1;10]
(中间是
1.0
)。这可能是由于@DietrichEpp的舍入错误造成的

我还认为他使用的公式更容易出现舍入错误。特别是我觉得从

y = a' * exp(b*(x-x1))
将产生更好的配方。在这种情况下,
a'
显然是
y1

b
的计算方法与

b = log (y2/y1) / (x2-x1)
主要区别在于,在这个公式中,
a'=a*exp(b*x1)
(其中,
a
是@DietrichEpp答案中的
a
)。如果
x1
很大,这会减少很多舍入误差


对于您的特殊情况,使用
e
(2.71828…)作为对数和指数的基数,我得到
b=000332859141506
a'=10

,我认为您解决了相反的问题,因为根据作者的说法,“450变得低于95,因为新的标度是对数的。”。您的134明显大于95。@SergGr我相信对数比例将10-100-1000-10000映射为等距值,如1,2,3,4,这里几何平均值316.2映射为中间105。也许你们是对的,作者真的想要你们已经问过的指数级的复制品。
b = log (y2/y1) / (x2-x1)