C的Arctan泰勒级数

  • 本文关键字:Arctan
  • 更新时间 :
  • 英文 :


我需要对arctan执行泰勒级数50次。也就是说,在arctan泰勒级数的定义域上有50个数,即[-1,1]。我已经用手动用户输入测试了它,它工作得很好,但是我在代码中增加了0.01的50个不同输入的for循环和它们相应的结果都不成功。我已经试过了所有我能想到的方法,但是我没有办法了。任何帮助都会很感激。我的括号周围的泰勒级数是否有问题,与其他for循环冲突?我怀疑这是括号,但没有工作,当我试图修复它。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
main (void) {
    double n;
    double x;
    double tSeries=0.0;
    double t2;
    double t1;
    for(n=0;n<=50;++n) {
        for(x=-1;x<=1;x=x+0.01) {
            t1=(pow(x,2*n+1))*pow(-1,n);
            t2=t1/(2*n+1);
            tSeries+=t2;
            printf("arctan(%lf)=%lfn",x,tSeries);
        }
    }
    return 0;
}

在你发布的代码中,内循环是针对变量x的,外循环是针对n的。

我认为你想对每个x值的n值求和,所以n上的循环应该是内循环。

我认为你还需要对x的每个值求和tSeries为零。

最后,我希望在计算和之后打印答案,因此printf应该在n循环之外。

幂级数的求值有几个技巧。我喜欢用数字食谱来做这类事情。尝试第5章关于函数的求值。(C中的数值配方,Press et al.,第二版,1992,CUP.)

马上要注意的一件事是,当幂级数的上限固定时,你是在计算一个多项式。我的NR副本的5.3节强烈建议不要使用对pow()的调用总和。他们对此很坚决!

如果你想让我发布正确的代码请告诉我。

你把循环弄混了,里面的循环出去了,反之亦然。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(void)
{
  double n;
  double x;
  double tSeries = 0.0;
  double t2;
  double t1;
  for (x = -1; x <= 1; x += 0.01) {
    for (n = 0; n <= 50; n++) {
      t1 = (pow(x, 2 * n + 1)) * pow(-1, n);
      t2 = t1 / (2 * n + 1);
      tSeries += t2;
    }
    printf("arctan(%lf)=%lf (%lf)n", x, tSeries, atan(x));
    tSeries = 0.0;
  }
  return 0;
}

最新更新