0

我需要一个具有以下参数的指数方程:

当 x = 0 时,y = 153。
当 x = 500 时,y = 53。
当 X 接近 0 时,Y 应呈指数增长,而当 X 接近 500 时,Y 应呈指数下降。

由于某种原因,我不记得如何做到这一点。我敢肯定,一旦我看到方程式(或类似方程式),我就能弄清楚其余的。

编程中的上下文:这是一个 Javascript 函数,当文本区域的最大长度即将达到时,它会改变 div 的颜色。其他替代方案或代码片段非常受欢迎。

更新: 我不知道为什么,但是 -1500/(x+15)+153 给了我一些接近我正在寻找的东西。所以看起来我所要求的并不是我真正想要的。

我想我正在寻找的是:
当 x = 0 时,y = 53。
当 x = 500 时,y = 153。

4

4 回答 4

2

编辑(更新后):

随着你的改变,你要求一个升序函数和类似 y = 1/x 的东西。

可以更改函数的比例以适合您的确切坐标,尽管曲线在开始时倾斜得更陡峭。

y = 154 - 10100 / (20 * x + 100) @ Wolfram Alpha
绘制 154 - 10100 / (20 * x + 100) 从 x=0 到 x=500 @ Wolfram Alpha

注意整数解,我们利用解 x=96, y=149 来改变公式,将这些值缩放到您的坐标范围内。这将使我们更接近您更新的曲线,该曲线更平缓一些。

y = 158 - 2625 / (x + 25) @ Wolfram Alpha
158 - 2625 / (x + 25) 从 x=0 到 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。

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() [log() / Math.log10e in js]。

于 2009-12-07T17:23:21.877 回答
1

您必须更具体,但 y = 154-x^0.742625 应该可以解决问题。这里,十进制数是 log(101)/log(500)。

http://www.wolframalpha.com/input/?i=154-x ^%28log%28101%29%2Flog%28599%29%29

于 2009-12-07T16:56:43.433 回答
0

我不知道曲线到底是什么,但它可能属于 1/(x^d) d 是你的指数的族。在此处查看曲线的外观。那是你要的吗?

于 2009-12-07T16:50:13.180 回答
0

基本上,您可能想要求解逻辑方程dy/dx = K y (ymax - y)。解决方案在提供的链接中。

于 2009-12-07T17:24:39.580 回答