混合两个函数,其中一个是反函数

时间:2011-08-25 20:37:55

标签: function math blending inverse

首先让我解释一下这个想法。实际的数学问题在屏幕截图下面。 出于音乐目的,我正在构建一种凹槽算法,其中事件位置由数学函数F(X)转换。位置在凹槽范围内归一化,因此我基本上处理0到1之间的值(这使得凹槽曲线变得更容易 - 唯一的限制是x'> = 0)。 该凹槽算法接受任何事件位置,并且还通过从诸如时间线音符轨道的数据结构中过滤静态音符来工作。为了过滤特定范围内的事件(音频块大小),我需要反向凹槽功能来定位轨道中的音符并将它们转换为凹槽空间。到现在为止还挺好。它有效!

enter image description here

enter image description here

简而言之:我使用反函数表示它被镜像到(y = x)。所以我可以插入一个值x并得到一个y。这个y显然可以插入到反函数中以再次得到x。

问题:我现在希望能够将凹槽混合到另一个凹槽中,但通常的线性(提示提示)混合代码的行为与我预期的不同。为了更容易,我首先尝试混合到y = x。

B(x)=alpha*F(x) + (1-alpha)*x;
iB(x)=alpha*iF(x) + (1-alpha)*x;

对于alpha = 1,我们得到完整的曲线。对于alpha = 0,我们得到直线。但是对于0到1之间的alpha(x)和iB(x)不再镜像(接近但不够),F(x)和iF(x)仍然是镜像的。

是否有解决方案(除了将曲线量化为线段)?我应该关注的任何主题?

2 个答案:

答案 0 :(得分:1)

您正在组合两个函数f(x)和g(x),因此y = a f(x)+(1-a)g(x)。并给出一些y,a,f和g,你想要找到x。至少,这就是我所理解的。

我不知道如何做到这一点(虽然我没有尝试过 - 我的意思是,值得问别人),但我怀疑对于“漂亮”的形状功能,就像你似乎使用,牛顿的方法会相当快。

你想找到x使得y = a f(x)+(1-a)g(x)。换句话说,当0 = a f(x)+(1-a)g(x)-y时。

所以让我们定义r(x)= a f(x)+(1-a)g(x)-y并找到它的“零”。从中间开始猜测,x_0 = 0.5。计算x_1 = x_0 - r(x_0)/ r'(x_0)。重复。如果你很幸运,这将迅速收敛(如果没有,你可以考虑定义相对于y = x的函数,你已经在做了,并再次尝试)。

请参阅wikipedia

答案 1 :(得分:1)

一般来说,这个问题不能用代数方法解决。

考虑例如

y = 2e^x(反x = log 0.5y

y = 2x(反x = 0.5y)。

将这些与权重0.5混合在一起得到y = e^x+x,众所周知,仅使用基本函数就不可能在x求解,即使每个部分的倒数很容易找到。

您将需要使用数值方法来逼近逆,如上面的安德鲁所讨论的那样。