I am looking for a way to convert any number to a percentage in the following way:
1.00 is 50%
numbers below 1.00 approach 0% logarithmically
numbers above 1.00 approach 100% logarithmically.
x > 0. So y needs to approach 0 as x becomes infinitely small on the开发者_Python百科 positive side.
I'm sure this is simple to do, but I can't recall how to do it.
try 1 / (1 + e^(1-x))
it's the logistic function shifted by 1 unit
If you want it to approach faster, you can change e to something higher
Edit:
to have f(0) = 0 you could use 1 - 2^(-x)
When you say logarithmically, do you mean asymptotically? If so, then "y needs to approach 0 as x becomes infinitely small on the positive side" just means f(0)=0 if f is continuous. In that case x/(x+1) will work: http://www.wolframalpha.com/input/?i=x%2F%28x%2B1%29
how about y = f(t) = 1 - exp(-t/tau)
?
For t near 0, y is approximately t/tau. For t approaching infinity, y asymptotically approaches 1.
As for the f(1)=0.5 approach, this can be used to solve for tau = 1/log(2).
From what you're describing, I'm hearing the graph of x cubed -- very basic, and should be efficient in most languages.
Graph http://jedsmith.org/static/S01813305.png
This was graphed with y=(x-1)^3+1
(transforms to make (1,1)
the origin). You can, of course, make the results a percentage by simply scaling by 50.
You are, ultimately, trying to have an efficient solution to give you a rough percentage behavior in a programming language and not Mathematica, right?
精彩评论