c - "decode"sin泰勒级数的近似值

标签 c trigonometry taylor-series

我使用泰勒级数来计算sin()。罪恶的泰勒级数是:

sin taylor series

我正在使用的实现如下所示:

float sine(float x, int j)
{
    float val = 1;

    for (int k = j - 1; k >= 0; --k)
        val = 1 - x*x/(2*k+2)/(2*k+3)*val;

    return x * val;
}

据我所知,该代码是多项式的 j 项的近似值(换句话说,该近似值是从零到 j 的总和,而不是从零到无穷大),公式中k就是n,当然x就是x

我试图理解这个实现,即从上面的公式到代码的转换。我的目标是为 cos() 系列编写相同类型的实现。

你能帮我理解这一点吗?

最佳答案

它是一个 McLaurin 级数,但编写它是为了减少利用级数通用项的递推公式的计算次数。

余弦的版本如下(以及一个简单的测试工具):

#include <stdio.h>
#include <math.h>

float cosine(float x, int j)
{
    float val = 1;
    for (int k = j - 1; k >= 0; --k)
        val = 1 - x*x/(2*k+2)/(2*k+1)*val;
    return val;
}

int main( void )
{
    for( double x = 0.0; x <= 1.57; x += 0.1 )
    {
        printf("%10g    %10g    %10g\n", x, cos(x), cosine(x, 5));
    }
    return 0;
}

编辑(用 LaTeX 创建的图像替换丑陋的数学文本)

为了理解这个技巧,让我们重点关注 sine 示例并回顾一下正弦函数的 McLaurin 展开式:

McLaurin expansion of sine function

现在让我们展开直到第 5 项 (N=5),忽略余数 R 并执行一些涉及 x2 项因式分解的重写。结果步骤如下所述,其中重写的子表达式用方括号中的数字标记:

rewriting steps

C 函数只是这种自下而上的递归重写的实现,即上述模式中最后一步出现的内容首先在 sine 函数中计算(该示例是相对于使用 j==4 进行调用,以便循环变量 k 以值 3 开始,并下降到 0) .

关于c - "decode"sin泰勒级数的近似值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18805627/

相关文章:

c - 了解堆栈数组实现 (C)

c++ - 三角函数计算源代码

c++ - 为什么当我从两个角度的和本身显示为 180 时减去 180 时得到错误答案?

c - 从字符数组中获取当前单词的最有效方法

c - 是否有像 g_printf_string_upper_bound 这样的可移植函数?

c - C程序的目录结构是什么样的?

C++ 从 Atan 创建 Atan2

c - 指数函数的泰勒级数展开

python - cosine x 的泰勒级数使用 python 在运行时给出逻辑错误

python - 我想在 python 中使用 matplotlib 绘制泰勒级数图