1. 程式人生 > >提高篇第一講專案6—泰勒展開式求sin(x)的值

提高篇第一講專案6—泰勒展開式求sin(x)的值

問題描述 用sin泰勒展式編寫程式,求出sin(π/2)和sin(56°)的值,精度要求達到小數點後6位(即當最後一項的絕對值小於0.00001時,累加結束,求絕對值的函式也可以自定義函式myabs實現)。 實際上,C語言的數學庫(#include<math.h>)中已經提供了sin和cos函式,以及求絕對值的函式fabs,一般解題中我們直接呼叫即可,而本題要求自定義函式實現,為區別起見,分別起名為mysin、mycos、myabs。 1程式程式碼
#include <stdio.h>
#define pi 3.1415926
double mysin(double);
double myabs(double);
int main()
{
    printf("sin(pi/2)的值為:%.5f\n",mysin(pi/2));
    printf("sin(56)的值為:%.5f",mysin((56.0/180)*pi));
    return 0;
}

//下面為求sin(x)的值
double mysin(double num2)
{
    int i=1,negation=1;//取反
    double sum;
    double index=num2;//指數
    double Factorial=1;//階乘
    double TaylorExpansion=num2;//泰勒展開式求和
     do
     {
         Factorial=Factorial*(i+1)*(i+2);//求階乘
         index*=num2*num2;//求num2的次方
         negation=-negation;//每次迴圈取反
         sum=index/Factorial*negation;
         TaylorExpansion+=sum;
         i+=2;
     }while(myabs(sum)>1e-5);
     return(TaylorExpansion);
}

//下面為求絕對值函式
double myabs(double num1)
{
    return((num1>0)?num1:-num1);
}

輸出結果 知識點總結                        根據泰勒展開公式sin(x)=x-(x^3)/3!+(x^5)/5!……來進行程式設計;當然我們可以直接呼叫#include<math.h>函式庫的sin()函式求解sin(pi/2)之類的問題。                              心得體會           作為一個大二打菜鳥,在最開始接觸這題時,感到非常棘手,但只要瞭解瞭如何自己自定義絕對值函式和sin()函式,(可以上網借鑑或看別人的程式碼,我就是參考了賀老師的程式程式碼)用程式碼寫出相應的數學表示式就可以啦大笑當然,我的程式可能還有諸多不合格的地方,望包涵