2012-01-28 2 views
2

У меня проблема с математикой. Я немного в тупике. Мне нужно отображать числа из одного диапазона в другой нелинейным способом. Я вручную взял некоторые образцы данных из того, что я пытаюсь достичь. Это выглядит как таковое.Нелинейная карта из одного диапазона в другой

источник - желаемый результат

0 - 1

78 - 0,885

363 - 0,625

1429 - 0,3

3404 - 0,155

7524 - 0,075

11604 - 0.05

Исходный номер колеблется от 0 до, в идеале бесконечного числа, но счастлив, если он остановится где-то в десяти тысячах. Результирующее число от 1 до 0. Оно должно быстро выпадать, а затем выравниваться. Идеально никогда не достигает нуля.

Я знаю стандартное уравнение для отображения из одного диапазона в другой.

y = ((x * origRange)/newRange) + newRangeOffset 

К сожалению, это не дает мне желаемых результатов. Есть ли элегантное нелинейное уравнение, которое даст мне результаты, которые я получаю после?

+1

этот вопрос, вероятно, принадлежит http://math.stackexchange.com – perfectionist

+0

Каковы ваши «ожидаемые результаты»? –

+0

@perfectionist отметил в следующий раз, спасибо. –

ответ

3

f(x) = 620/(620 + x) дает ответ с точностью до 2% от всех значений

+0

Это великолепно работает. Я заинтригован, чтобы узнать, как вы пришли с номером 620? –

+2

Вам нужна функция f (x), которая стремится к нулю при x => бесконечности. Это предложило «f (x) = 1/x». Общим способом его преобразования было бы «f (x) = 1/(x + c)», но вам также понадобилось f (0) = 1, предлагая 'f (x) = c/(x + c) '. Я бы хотел сказать, что я сделал некоторые умные исчисления на данный момент, но на самом деле я открыл excel и сделал несколько проб и ошибок. Кстати, 617 - лучшее значение для c. – perfectionist

+1

Более строгая подгонка данных к кривой 'f (x) = c/(x + c)' будет заключаться в том, чтобы переписать ее как «1/f (x) = 1 + x/c' - тогда вы можете использовать меньше -squares linear regression (который практически любой программный пакет может сделать, даже Excel), чтобы найти оптимальное значение 'c'. Тем не менее, слепо подгонка кривой к некоторым данным очень редко является хорошей идеей - не зная, что представляют значения, вы не можете сказать, какие отношения будут иметь смысл (например, эта кривая взрывается в 'x = -c' и у нас нет способа узнать, подходит ли это). – James

1

Как предложенных here, вы можете использовать полиномиальной интерполяции (присутствующую в нескольких программных пакетов).

Если вы хотите попробовать, предложу вам перейти на Wolfram Alpha и выберите Polynomial Interpolation.

This является одним из примеров использования некоторых ваших пунктов.

Смежные вопросы