利用泰勒级数逼近sin(x)的值,要求用通项,而非递推,各位高手帮帮忙
泰勒公式为sin(x)约等于x-x^3/3!+x^5/5!-x^7/7!+x^9/9!……要求最后一项的绝对值小于10的-6次方,并统计累加了多少项?
看看我的代码哪里有问题?,请各位看看,帮帮忙改一下
程序代码:
先讲一下我的大概思路,因为要求用通项,而通项中涉及到阶乘和乘方运算,我想利用C语言的函数模块化编程特点,先定义阶乘运算和乘方运算(这个我在 math.h函数库查到了,但还是先看看我的吧)两个函数,然后综合利用将通项表示出来 #include <stdio.h> #include<math.h> #define Pi 3.14 int multi(int t) //构建阶乘运算函数 { int a=1,b=1; while(b<=t) { a=a*b; b=b+1; } return a; } double power(double m,int l) //构建乘方运算函数 { double p=m,q;int j=2; if(l=1)return m; else { while(j<=l) { q=p*m; p=p*m; ++j; } return q; } } int main() //主函数 { double x,u,sum=0; //u为通项公式 int n=1; printf("请输入角度:"); scanf("%lf",&x); x=(x/180)*Pi; //将角度数转换成弧度 u=(power(-1,n+1)*power(x,2n-1))/multi(2n-1);//先求第一项的值 while (fabs(u)>=1e-6) //再用这个循环应该可以求出来的 { sum+=u; n=n+1; u=(power(-1,n+1)*power(x,2n-1))/multi(2n-1); } printf("迭代%d次 sin(%.2f)=%.2f\n",n,x,sum); }
[ 本帖最后由 hhcxx2006 于 2011-11-14 19:07 编辑 ]