编辑(您更新后):
随着你的改变,你问一个提升功能和类似y = 1/x的东西。
您的功能的比例可以更改为适合您的确切坐标,尽管曲线在开始时斜率更陡。
y = 154 - 10100/(20 * x + 100) @ Wolfram Alpha
Plot of 154 - 10100/(20 * x + 100) from x=0 to x=500 @ Wolfram Alpha
注意到整数解,我们利用解x = 96,Y =的149,以改变该式中,缩放这些值代入你的坐标范围内。这会给我们提供更接近你的更新曲线的曲线,这个曲线稍微倾斜一点点。
y = 158 - 2625/(x + 25) @ Wolfram Alpha
Plot of 158 - 2625/(x + 25) from x=0 to x=500 @ Wolfram Alpha
这里是你的版本情节,进行比较。
y = -1500/(x + 15) + 153 @ Wolfram Alpha
原来的答案
(您更新之前),我想你会看到朝着自己的目标颜色一些奇怪的趋同,如果您使用的是非线性的规模,但尽管如此,你可以使用一个通用公式并决定什么多项式或指数给你最好的结果。
首先,代数/多项式函数。
A * X^N + B = Y
此通式可以在系统需要解决给你的适合两个已知点之间的曲线阶数N的多项式。在这种情况下,我们解决了< X = 0,Y = 153 >至< X = 500,Y = 53 >。
代第一坐标对,我们很容易得到B.
A * (0)^N + B = (153)
0 + B = (153)
B = 153
现在,替代第二对,我们可以发现A.
A * (500)^N + 153 = (53)
A * (500)^N = -100
A = -100/(500^N)
如果你想有一个线性刻度,你替代N = 1,这给了我们A = -0.20。
-0.20 * X + 153 = Y
如果你想要一个二次规模,你可以用N = 2代替,那么A = -0.0004。
-0.0004 * X^2 + 153 = Y
你也可以使用一些非整数值N,1和2之间(尝试1.5或1.6),我认为这可能会给你更好的结果。还要注意,随着这个函数的增加,它将最终降到零以下,但是只有在曲线通过第二个点之后。
这里是指数函数。我使用e作为基础,尽管您可以将它改为大于1的任何值。要拟合两点之间的曲线,如果两个点的Y值均大于零,我们将获得最佳结果。否则,我们将不得不添加一个偏移量并确定我们想要的基线位置。为了达到这个目的,我们假定基线是Y = 0。这意味着随着X的增加,Y在通过第二点后最终会蠕变,但实际上不会达到0。
A * e^(B * X) = Y
再次解决第一个坐标。
A * e^(B * 0) = 153
A * e^(0) = 153
A * 1 = 153
A = 153
用第二个坐标代替B得到B.
153 * e^(B * 500) = 53
e^(B * 500) = 53/153
B * 500 = ln(53/153)
B = ln(53/153)/500
ln(val)是与e^val相反的自然对数。我的计算器表示B大约等于-0.0021202920156806272577911119053782,或者-0.0021可能最好。如果你想为其他指数基础解决这个问题,以相同的方式使用指数/对数身份来解决任何其他基础,并将对数的底数改为ln()[log()in js]或log() [js中的log()/ Math.log10e]。
您列出的公式是二次的。指数在指数中有x。 – 2009-12-07 16:42:04
可能会更好http://www.mathoverflow.net/ – Yacoby 2009-12-07 16:43:10
@Donnie谢谢,我删除了示例方程部分。 – 2009-12-07 16:44:41