3

让我先解释一下这个想法。实际的数学问题在屏幕截图下方。出于音乐目的,我正在构建一个凹槽算法,其中事件位置由数学函数 F(X) 转换。这些位置在凹槽范围内进行了归一化,所以我基本上处理的是零到一之间的值(这使得凹槽曲线更容易成型——唯一的限制是 x'>=0)。这种凹槽算法接受任何事件位置,并且还通过从数据结构(如时间线音符轨道)中过滤静态音符来工作。为了过滤一定范围内的事件(音频块大小),我需要逆凹槽功能来定位音轨中的音符并将它们转换到凹槽空间中。到目前为止,一切都很好。有用!

在此处输入图像描述

在此处输入图像描述

简而言之:我使用反函数是因为它镜像到 (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,B(x) 和 iB(x) 不再镜像(接近,但还不够),F(x) 和 iF(x) 仍然是镜像的。

有没有解决方案(除了将曲线量化为线段)?有什么我应该关注的主题吗?

4

2 回答 2

1

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

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

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

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

维基百科

于 2011-08-25T21:27:04.463 回答
1

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

例如考虑

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

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

将这些与权重 0.5 混合在一起得到y = e^x+x,并且众所周知,x仅使用初等函数无法解决这里的问题,即使每个部分的逆很容易找到。

正如上面的 andrew 所讨论的,您将需要使用数值方法来近似逆。

于 2011-08-25T21:55:22.280 回答