【问题标题】:"decode" an approximation of sin Taylor series“解码”罪泰勒级数的近似值
【发布时间】:2019-01-09 19:36:55
【问题描述】:

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

我使用的实现如下所示:

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 是@公式中的987654328@,当然x就是x

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

你能帮我理解一下吗?

【问题讨论】:

标签: c trigonometry taylor-series


【解决方案1】:

这是一个 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;
}

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

要理解其中的技巧,让我们关注sine 示例并回忆一下正弦函数的麦克劳林展开式:

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

C 函数只是这种自下而上的递归重写的实现,即上述模式中最后一步出现的内容首先在 sine 函数中计算(该示例与使用 @987654326 的调用相关@,因此循环变量 k3 的值开始并下降到 0)。

【讨论】:

  • 能逐步解释一下重写过程吗?非常感谢。
  • 对于丑陋的数学符号表示抱歉。我真的很想念这里的 LaTeX 支持! :-)
  • 谢谢。是的,我也想念乳胶,这就是为什么我用公式发布了一张图片
  • 最后我找到了一些时间用更好的图像替换那个丑陋的数学。
  • 谢谢!这大大改善了答案!
猜你喜欢
  • 2016-08-09
  • 2013-11-28
  • 2020-04-01
  • 2021-08-12
  • 2021-08-13
  • 1970-01-01
  • 2011-08-21
  • 2015-11-21
  • 2014-04-03
相关资源
最近更新 更多