c - C 编程中函数的泰勒展开式 f(x)=sin(x)+cos(x) 存在输出错误。有什么建议么?

标签 c math taylor-series

我是编程新手。我的大学类(class)包含一个编程模块(C),我需要一些帮助来确定我的代码发生了什么。

对于 sin(x) 我有:

#include <stdio.h>
#include <math.h>
/*Taylor series expansion of sin(x)*/
int main(void)
{
    float x, ans;
    int i, fac, n, sign;

    printf("Value for x: ");
    scanf("%f", &x);

    printf("Value for n: ");
    scanf("%d", &n);

    for (i=1, fac=1, ans=x, sign=-1; i<=n; i++)
        {
        fac*=(2*i+1)*2*i;
        ans+=sign*pow(x,2*i+1)/fac;
        sign*=-1;
        }

    printf("Answer is %f.\n", ans); /*Taylor expansion completed*/

    return 0;
}

我现在(在帮助下)修复了 sin(x) 的展开式。但对于完整的问题,我很难回答正确。

到目前为止,我对 f(x)=sin(x)+cos(x) 的扩展如下所示:

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

int main(void)
{
    int x, sin, cos;
    float i, j, fac1, fac2, n, sign, ans;

    printf("Value for x: ");
    scanf("%f", &x);

    printf("Value for n: ");
    scanf("%d", &n);

    for (i=1, fac1=1, fac2=1, sin=x, cos=1, ans=1+x, sign; i<=n; i++)
    {
        fac1*=(2*i+1)*2*i; /*factorial expansion for sin(x)*/
        fac2*=2*i*(2*i-1); /*factorial expansion for cos(x)*/
        sin+=sign*pow(x,2*i+1)/fac1; /*Series expansion of sin(x)*/
        cos+=sign*pow(x,2*i)/fac2; /*Series expansion of cos(x)*/
        sign*=-1;
        ans=sin+cos; /*Final step*/
    }

    printf("Answer is %f.\n", ans); /*Taylor expansion completed*/

    return 0;
}

我认为这会起作用,但例如插入 1 和 10 会得到 1065353216 (基本上是严重错误的)。对这个有什么建议吗?

最佳答案

展开式的分子中应包含 (-1)i。您应该使用 int i 因为它是一个循环变量,否则会违反约定。

a = a + (pow(-1,i) * pow(x, (2 * i) + 1)) / f; /* Expansion sum */

将 pow(-1, i) 替换为 (i & 1 ? -1 : 1),其中 iint.

关于c - C 编程中函数的泰勒展开式 f(x)=sin(x)+cos(x) 存在输出错误。有什么建议么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26864741/

相关文章:

c - 如何使用 C API 检查 SQLite 列中的值是否为 NULL?

c - "fprintf"类似文件描述符的函数(即 int fd 而不是 FILE* fp)

c - 如何在C中按升序编写该矩阵的算法。我的代码中的错误在哪里?

java - 二次程序 Java 返回错误结果

math - 预测球路 - 人工智能

javascript - 递归函数 指数函数

android - 如何杀死 C (Android NDK) 中的子线程?

algorithm - 选择一个整数来最大化总和

c - 在 C 中实现正弦和余弦的泰勒级数

maxima - 将泰勒展开式分配给函数