我需要为反正切50次执行泰勒级数。意思是arctan泰勒系列域之间的50个数,即[-1,1]。我已经用手动用户输入测试了它并且它工作正常,但是50个不同输入的for循环,我在代码中增加0.01并且它们的相应结果不成功。到目前为止,我已经尝试了所有我能想到的东西,我没有想法。任何帮助,将不胜感激。围绕泰勒系列的括号是否存在与其他环路冲突的问题?我怀疑它是括号,但是当我试图修复它时没有工作。
#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)=%lf\n",x,tSeries);
}
}
return 0;
}
答案 0 :(得分:2)
在您发布的代码中,内部循环位于变量x上方,外部循环超过了幂n。
我认为你想要为x的每个值求和n的值,所以n上的循环应该是内循环。
我认为你还需要为x的每个值零和tSeries。
最后,我希望你能在计算总和后打印答案,所以printf应该在n循环之外。
评估电源系列有一些技巧。我喜欢Numerical Recipes这种东西。尝试第5章关于功能的评估。 (Numerical Recipes in C,Press et al。,2nd Ed。,1992,CUP。)
要立即注意的一点是,在固定幂级数的上限时,您正在评估多项式。我的NR副本第5.3节建议强烈反对使用pow()的一个调用。他们对此非常坚定!
如果您希望我发布正确的代码,请与我们联系。
答案 1 :(得分:1)
你把循环混合在一起,内部循环反复出现,反之亦然。
#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;
}