关于形式(1)/(b ^ c)中的函数的数学问题

时间:2010-01-19 11:22:40

标签: c++ math interpolation

我发现遵循1 / b c 模式的函数会生成很好的曲线,可以很好地与插值函数结合。

我使用该函数的方法是将'c'视为变化值,即0和1之间的插值,同时改变b为'锐度'。我用它来计算0到1之间的插值,所以我使用的函数就是这样:

float interpolationvalue = 1 - 1/pow(100,c);
linearinterpolate( val1, val2, interpolationvalue);

到目前为止,我一直在使用一种被黑客入侵的方法使其“正常”,因为当插值= 1时,该值非常接近但不是很接近。

所以我想知道,是否有一个函数形式或者一个可以重现类似于1 / b c 生成的函数的函数,其中c = 0 result = 1和c = 1结果= 0。

甚至C = 0,结果= 0且C = 1结果= 1。

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

对于插值,提供最大灵活性的方法是使用splines,在您的情况下,二次样条似乎就足够了。维基百科页面数学很重,但您可以在谷歌上找到适合的解释。

答案 1 :(得分:1)

1 - c ^ b b的值较小?另一种选择是使用三次多项式并将斜率指定为0和1。

答案 2 :(得分:1)

您可以使用A - 1 / b^(c + a)形式的类似曲线,选择Aa的值以匹配您的约束。所以,对于c = 0, result = 1

1 = A - 1/b^a   =>   A = 1 + 1/b^a

c = 1, result = 0

0 = A - 1/b^(1+a)  =>  A = 1/b^(1+a)

结合这些,我们可以a

找到b
1 + 1/b^a = 1/b^(1+a)
b^(1+a) + b = 1
b * (b^a - 1) = 1
b^a = 1/b - 1

所以:

a = log_b(1/b - 1) = log(1/b - 1) / log(b)
A = 1 + 1/b^a = 1 / (1-b)

答案 3 :(得分:-1)

在实际数字中,数学家使用的,没有你指定的形式的函数将永远返回0,除法不能做到这一点。 (1 / x)== 0没有真正的解决方案。在浮点运算中,计算机使用的实际算术的关系很差,你可以写1 /(MAX_FP_VALUE ^ 1),这将使你接近0,你可能会得到(实际上,它可能会给你一个NaN或IEEE 754允许的其他奇怪回报之一。

而且,正如我确定你注意到的那样,1 /(b ^ 0)总是返回1,因为根据0次幂的定义,b ^ 0总是为1。

因此,c = 0的函数不会产生0的结果。

对于c = 1,结果= 1,设置b = 1

但我想这只是一个部分答案,我并不十分清楚我明白你要做什么。

此致

标记