我需要对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;
}