提高篇第一講專案6—泰勒展開式求sin(x)的值
阿新 • • 發佈:2019-01-26
問題描述
用sin泰勒展式編寫程式,求出sin(π/2)和sin(56°)的值,精度要求達到小數點後6位(即當最後一項的絕對值小於0.00001時,累加結束,求絕對值的函式也可以自定義函式myabs實現)。
實際上,C語言的數學庫(#include<math.h>)中已經提供了sin和cos函式,以及求絕對值的函式fabs,一般解題中我們直接呼叫即可,而本題要求自定義函式實現,為區別起見,分別起名為mysin、mycos、myabs。
1程式程式碼
輸出結果 知識點總結 根據泰勒展開公式sin(x)=x-(x^3)/3!+(x^5)/5!……來進行程式設計;當然我們可以直接呼叫#include<math.h>函式庫的sin()函式求解sin(pi/2)之類的問題。 心得體會 作為一個大二打菜鳥,在最開始接觸這題時,感到非常棘手,但只要瞭解瞭如何自己自定義絕對值函式和sin()函式,(可以上網借鑑或看別人的程式碼,我就是參考了賀老師的程式程式碼)用程式碼寫出相應的數學表示式就可以啦當然,我的程式可能還有諸多不合格的地方,望包涵
#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()函式,(可以上網借鑑或看別人的程式碼,我就是參考了賀老師的程式程式碼)用程式碼寫出相應的數學表示式就可以啦當然,我的程式可能還有諸多不合格的地方,望包涵