迭代算法求sinx的值

2021-02-08 程序設計及計算機基礎學習空間


假設給定x,求正弦函數sin(x) 的值時,可以利用泰勒級數公式:

來計算sin(x) 的值。


一般計算級數的某一項的絕對值小於指定的很小的量(如10-5)時,計算過程終止。


可以通過重複執行一系列計算來獲得近似答案,而每一次重複計算將產生一個更精確的答案,這種重複執行的過程稱為迭代。


迭代算法是用計算機解決問題的一種基本方法。它利用計算機運算速度快、適合做重複性操作的特點,讓計算機對一組指令(或一定步驟)進行重複執行,在每次執行這組指令(或這些步驟)時,都從變量的原值推出它的一個新值。


利用迭代算法解決問題,需要做好以下三個方面的工作:


(1)確定迭代變量


在可以用迭代算法解決的問題中,至少存在一個直接或間接地不斷由舊值遞推出新值的變量,這個變量就是迭代變量。


(2)建立迭代關係式


所謂迭代關係式,指如何從變量的前一個值推出其下一個值的公式(或關係)。迭代關係式的建立是解決迭代問題的關鍵,通常可以使用遞推或倒推的方法來完成。


(3)對迭代過程進行控制


在什麼時候結束迭代過程?這是編寫迭代程序必須考慮的問題。不能讓迭代過程無休止地重複執行下去。


迭代過程的控制通常可分為兩種情況:


一種是所需的迭代次數是個確定的值,可以計算出來;

另一種是所需的迭代次數無法確定。


對於前一種情況,可以構建一個固定次數的循環來實現對迭代過程的控制;對於後一種情況,需要進一步分析出用來結束迭代過程的條件。


具體使用迭代法求根時應注意以下兩種可能發生的情況:


(1)如果方程無解,算法求出的近似根序列就不會收斂,迭代過程會變成死循環,因此在使用迭代算法前應先考察方程是否有解,並在程序中對迭代的次數給予限制;


(2)方程雖然有解,但迭代公式選擇不當,或迭代的初始近似根選擇不合理,也會導致迭代失敗。


本題用迭代算法計算sinx的值,計算方法是逐一計算級數的一個項的值,每計算一項就將其累加起來,直到某項的絕對值小於給定的量,計算終止。


求解這個問題需要注意兩個方面:每項的計算量和符號問題。


觀察相鄰兩項的關係,假設前一項是xn/n!,存儲在item變量中,則後一項的值為:xn+2/(n+2)!。為了減少計算工作量,可以利用前一項item的值,計算後一項的值為:item *x*x/((n+1)*(n+2))。


各項正負號:第1項不用計算,且符號為正。從第2項開始,均是前一項的符號乘以-1。


一般習慣輸入角度,而泰勒級數公式中的x是弧度,所以要進行變換,並且將其換算到360度以內,以加快計算速度。


//求sinx的參考源程序


#include <stdio.h>

#include <math.h>

int main(void)

{

  int n=1, sign=-1;

  double x,sinx,item;     

  printf("Input degree:"); 

  scanf("%lf",&x); 

  while(x>360) 

  { 

    x=x-360;   //讓其值在0~360  

  }  

  x=x*3.14159/180;   //轉換成弧度

  sinx=x;

  item =x;           

  do

       {

         item = item *x*x/((n+1)*(n+2));

         sinx=sinx+sign* item;      

         n=n+2;

       }while(fabs(item)>=1e-5);

  printf("sin(x)=%.1f \n",sinx);

  return 0;

}


運行結果:


Input degree:30

sin(x)=0.5

----



相關焦點

  • Cordic算法(sinx,cosx)的Verilog實現
    CORDIC(Coordinate Rotation Digital Computer)算法即坐標旋轉數字計算方法,是J.D.Volder1於1959年首次提出,主要用於三角函數、雙曲線、指數、對數的計算。
  • 求sinx/x在0到正無窮上的積分?
    求sinx/x在0到正無窮上的積分?15:02:20 來源:聞題鳥   問題:求sinx
  • 單片機C語言實現求平方根算法
    在此,總結下網上常見的四種單片機常用開方根算法:對於擁有專門的乘除法指令的單片機,可採用以下兩種方法:1、二分法對於一個非負數n,它的平方根不會小於大於(n/2+1)(謝謝@linzhi-cs提醒)。在[0, n/2+1]這個範圍內可以進行二分搜索,求出n的平方根。
  • 數據挖掘算法:EM算法
    假如我們拋硬幣10次,其中8次正面、2次反面;極大似然估計參數θ值:其中,l(θ)為觀測變量序列的似然函數(likelihood function of the observation sequence)。對l(θ)求偏導
  • 兩種方法求函數y=(sinx)^(cosx)的導數
    主要內容:本文通過對函數兩邊同時取對數,以及冪指函數變底方法,介紹計算y=(sinx)^(cosx)的導數的主要步驟。方法一:取對數法∵y=(sinx)^(cosx)∴lny=cosx*lnsinx,兩邊同時求導,則:dy/y=-sinx*lnsinxdx+cosx*cosxdx/sinx
  • 最優化算法之牛頓法、高斯-牛頓法、LM算法
    上一篇文章中主要講解了最優化算法中的梯度下降法,類似的算法還有牛頓法、高斯-牛頓法以及LM算法等,都屬於多輪迭代中一步一步逼近最優解的算法,本文首先從數學的角度解釋這些算法的原理與聯繫
  • 兩種方法求不定積分∫dx/「(2+cosx)sinx」
    主要內容:本文主要通過待定係數法、三角換元法兩種方法,詳細介紹求不定積分∫dx/[(2+cosx)sinx]的具體步驟。∫dx/[(2+cosx)sinx]=∫sinxdx/[(2+cosx)sin^2x]=-∫dcosx/[(2+cosx)(1-cos^2x)]=∫[A/(2+cosx)+B/(1-cosx)+C/(1+cosx)]dcosx
  • Excel啟用迭代計算和根據表達式迭代出滿足條件的值
    如果在公式中引用了公式所在單元格又不啟用迭代計算,Excel 會發出警告,此時需要啟用才能完成計算。迭代計算存在復原問題,因為它的作用範圍是一個工作簿,如果要對多個工作簿生效,需要另存為模板。Excel中的迭代計算可根據一個或幾個單元格的值迭代出另一個單元格的值,即數學運算中的根據一個或幾個數經過多次計算來求出滿足條件的值。
  • EM算法
    在《統計學習方法》書中,進行兩組具體值的計算      (1)π0=0.5, p0=0.5, q0=0.5,迭代結果為π=0.5, p=0.6, q=0.5      (2)π0=0.4, p0=0.6, q0=0.7,迭代結果為π=0.4064, p=0.5368, q=0.6432    兩組值的最後結果不相同,這說明EM算法對初始值敏感,選擇不同的初值可能會有不同的結果
  • 《正弦函數y=sinx的圖象與性質》簡評(下)
    第(2)條性質是關於函數值的性質的.如果按照課堂上所呈現出來的順序,就是先知道函數的值域,再知道函數的最大(小)值,最後才研究函數的單調性的.但這是符合研究函數性質的邏輯順序嗎?從研究函數性質的角度看,函數的值域從哪裡來的呢?
  • 判斷h(x)=e^x-sinx-1在區間(-π,0)上零點的個數?好的方法不嫌多
    (ⅰ)求實數a的值;(ⅱ)若對任意的x1,x2∈[1/e,3],不等式(f(x1)-f(x2))/(k-1)≤1恆成立,求實數k的取值範圍。⑵當a=0時,設函數h(x)=e^g(x)-sin(g(x))-1。試判斷h(x)在(-π,0)上零點的個數。
  • EM算法初探
    它經過兩個步驟交替進行計算:計算期望(E步),基於現有的模型參數(或者隨機初始化的模型)對隱含變量的值進行猜測(估計),利用隱含變量現有的估計值,計算其最大似然的估計值。最大化(M步),最大化在E步上求得的最大似然值來計算參數的值。M步上找到的參數估計值被用於下一個E步計算中,這個過程不斷交替進行。
  • EM算法簡介
    四 推導接近EM的優化算法小綠同學算法分為1.0和2.0兩個版本對該小紅一頓瞎扔製造的難題進行了嘗試:a) 小綠算法1.0: 迭代,分步計算未知量借鑑KMeans算法的思想,小綠構造出這樣一個迭代算法,我們稱之為小綠算法1.0:1 設定各個硬幣的參數的初始估計值
  • 為什麼∫∫Dxy^4(sinx)^4dxdy=0?
    本文主要內容,在積分區域D={(x,y),|x|≤1,|y|≤2}上,分別先以dy、dx來求解二重積分∫∫Dxy^4(sinx)^4dxdy的值。※.先對dy,再對dx積分∫∫Dxy^4(sinx)^4dxdy=∫(-1,1)x(sinx)^4dx∫(-2,2)y^4dy=∫(-1,1)x(sinx)^4*(y^5/5)(-2,2)dx=(2*2
  • EM算法原理總結
    這就是EM算法可以派上用場的地方了。EM算法解決這個的思路是使用啟發式的迭代方法,既然我們無法直接求出模型分布參數,那麼我們可以先猜想隱含數據(EM算法的E步),接著基於觀察數據和猜測的隱含數據一起來極大化對數似然,求解我們的模型參數(EM算法的M步)。由於我們之前的隱藏數據是猜測的,所以此時得到的模型參數一般還不是我們想要的結果。
  • EM算法詳解
    EM算法簡介EM算法是一種迭代優化策略,由於它的計算方法中每一次迭代都分兩步,其中一個為期望步(E步),另一個為極大步(M步),所以算法被稱為EM算法(Expectation-Maximization Algorithm)。
  • 三角函數「給值求角」問題
    「給值求角」問題的求解分為兩步走,缺一不可:(1)根據題設條件,求角的某個三角函數值;(2)討論角的範圍,必要時,還需根據已知三角函數值縮小角的範圍,從而確定角的大小.例1,(1)已知x、y、z均為銳角,且 sinx + sinz =siny, cosx -cosz =cosy。求x-y的值;(2)已知tan(α-β)=1/2, tanβ=-1/7。且α、β∈(0,π),求2α-β的值.
  • CT原理之圖像重建算法的辨別
    CT原理4Image Reconstruction Algrithm圖像重建算法的辨別           在CT原理系列的第2期給大家介紹了CT原理之圖像重建算法,並通過最簡單2x2矩陣為大家演示了反投影重建法與迭代求最優解重建法的區別,為了讓大家充分理解二者的區別,在第3期又做個有獎競猜來幫助大家進一步掌握和辨別CT圖像重建算法
  • f(x)=sinx+1/2sin2x無法變成一個角函數咋判斷性質?只需做到一點
    圖一這道題給出的函數是f(x)=sinx+1/2sin2x,無法將其變成一個角的函數值,那如何去判斷其性質呢由半角公式得到f(x)=sinx+1/2sin2x=sinx+sinxcosx=sinx(1+cosx)=0,所以sinx=0或者cosx=-1.
  • 梯度下降算法詳解
    梯度下降算法是一種非常經典的求極小值的算法,比如在線性回歸裡我們可以用最小二乘法去解析最優解,但是其中會涉及到對矩陣求逆,由於多重共線性問題的存在是很讓人難受的,無論進行L1正則化的Lasso回歸還是L2正則化的嶺回歸,其實並不讓人滿意,因為它們的產生是為了修復此漏洞,而不是為了提升模型效果,甚至使模型效果下降。