Отображение линейного масштаба на логарифмический с обоими масштабами, имеющими переменную min / max - PullRequest
0 голосов
/ 10 января 2019

Допустим, у меня есть линейный масштаб [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, что, по-видимому, является правильным.

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Метеор Я полагаю, что формула в указанном ответе верна, но ее применение к случаю 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 - это a в ответе @ DietrichEpp). Если x1 что-то большое, это уменьшает множество ошибок округления.

Для вашего конкретного случая, используя e (2.71828 ...) в качестве основы для логарифма и показателя степени, я получаю b = 0,00332859141506 и a' = 10

0 голосов
/ 10 января 2019

Логарифмическая шкала представлена ​​уравнением

Y = a + b * log(X)

для некоторой удобной логарифмической базы (десятичной или натуральной)

Составьте уравнение для двух граничных точек (я использую log10):

a + b * log10(100) = a + b * 2 = 10
a + b * log10(1000) = a + b * 3 = 200
b = 190
a = 10 - 380 = -370

так формула

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