【发布时间】:2013-01-21 06:42:20
【问题描述】:
我编写了一个程序,它从用户那里获取一个值 x 和一个整数 n,然后程序使用 taylor serie for arcsin 打印 arcsin(x) http://tedmuller.us/Math/img/Taylor-arcsin.gif
但由于某种原因它不起作用。当我输入 x=1 时,我得到 1.19 而不是 pi/2 的输出。
这是我的代码:
#include <stdio.h>
#include <conio.h>
void main()
{
int i,n;
double x,sum,last;
printf("Please enter the x you wish to calculate arcsin(x) for \n");
scanf("%lf",&x);
printf("Enter n\n");
scanf("%d",&n);
last=x;
sum=last;
for(i=1;i<=n;i++)
{
last*=((x*x)*(2*i-1))/((2*i)*(2*i+1));
sum+=last;
}
printf("arcsin(%lf) = %lf",x,sum);
getch();
}
基本思想是这样的:last 和 sum 都以 x 的值开始。然后我最后前进成为系列中的下一个数字,将其添加到总和,再次前进,添加到总和...冲洗并重复 n 次。
【问题讨论】:
-
您为
n输入了什么值?该系列一般收敛的速度有多快?您是否随时打印出条款(last值)?为什么不呢? -
我输入了相当大的 n 值,10。所以答案应该非常准确,即使我输入 100 的 n,答案也不会相差太大。
-
打印 last 的值并没有真正意义,因为 last 在任何给定点的值只是答案的一部分,而不是答案本身
-
为什么?我该如何解决?
-
@OriaGruber:你的扩展也有错误。写下你生成的术语,你会发现它们与泰勒级数不匹配。
标签: c trigonometry calculus taylor-series