如何将公式转换成代码

How get formulas into code

本文关键字:转换 代码      更新时间:2023-10-16

这是一个关于如何使公式在代码中工作的一般性问题。我的数学技能很差,当我试图将简单的东西实现到代码中时,我就会迷路。

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

- n是什么意思?或者y = etc

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

该公式取自用于滑动音频值的maxmsp对象滑动~在信号值变化之间对输入信号进行对数滤波。这个公式是y (n) = y (n - 1) + ((x (n) - y (n - 1))/幻灯片)。对于包络跟踪和低通滤波特别有用。

每一个帮助将非常感激!

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

因此很简单:

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滤波器的离散等效,可能是最常见的无限脉冲响应(IIR)滤波器之一

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);
}

这很简单。您只需要解析公式以生成一个令牌列表,该列表将用于创建公式的语法树。然后你只需要用你想要的变量值对树求值,并解析任何函数项。最后,你会得到一个很好的数学公式转换成某种可计算的IR…

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