如何将公式转化为代码

时间:2011-10-21 10:20:02

标签: java c++ formula

这是一个关于如何使公式适用于代码的一般性问题。我的数学技能很差,当我尝试在代码中实现简单的东西时,我迷失了。

例如,我如何解释这个公式:

- 什么意思?或者是什么等等

y(n) = y (n-1) + ((x (n) - y (n-1))/slide)

此公式是从maxmsp对象中获取的,用于滑动音频值 slide~在信号值的变化之间以对数方式过滤输入信号。公式是y(n)= y(n-1)+((x(n)-y(n-1))/ slide)。它对于包络跟随和低通滤波特别有用。

非常感谢每一位帮助!

3 个答案:

答案 0 :(得分:2)

y(n)的数学用法对应于C ++中的数组(或vector)索引:y[n]

因此它很简单:

std::vector<float> x = foo();
std::vector<float> y(x.size());
float slide = 10; // Random guess - you should understand x[]
y[0] = x[0]; // Start the same; there's no y[-1]
for (int n = 1; i != x.size(); ++i) {

  y[n] = y[n-1] + ((x[n] - y[n-1])/slide);

}

基本上,这是RC滤波器的离散等价物,可能是最常见的Infinite Impulse Response(IIR) filters

之一

答案 1 :(得分:1)

float y(int n, float slide)
{
    if (n <= 0)
    {
        // TODO: figure out what to do here. i.e. what is y(0).
    }

    float nMinus1 = y(n - 1);
    return nMinus1 + (x(n) - nMinus1) / slide);
}

答案 2 :(得分:0)

这很容易。 您只需解析公式以生成将用于创建公式语法树的标记列表。然后,您只需要使用所需的变量值来评估树并解析任何函数条目。最后,你会得到一个很好的数学公式翻译器到某种可评估的IR ......

但是,如果您只是需要执行一些数学计算,那么请认真使用MathCAD等适当的工具。 如果你需要编写一个使用某些公式的程序,那么在代码中按原样实现它们并按照你的意愿使用。 如果您需要一个可以解释任何公式的程序......那么,请阅读答案的第一部分:)