2015-11-04 36 views
1

我想交流的程序編寫,爲LN的泰勒級數的「N」次迭代迭代次數,從而獲得所需的精度在C(LN X,泰勒多項式)

  1. GET結果(X)
  2. 獲得與相對於來自

到目前爲止,我已經創建了兩個函數的泰勒級數,第一個爲0 < X < 1和第二對於x>日誌(x)的期望的精度的結果所需的迭代

  • GET數爲了簡單起見,我會發布第二個,因爲這些功能正常工作。輸入是「x」作爲ln()和「n」的參數作爲迭代次數。因爲我不能使用math.h,所以我必須創建「xTOn」函數,它只是簡單地執行x^n。在這個函數中我已經實現以下公式:

    Taylor series

    double taylorTheSecond(double x, int n) // second formula for taylor x > 1 
    { 
        double sum = 0.0; 
    
        for (int i = 1; i <= n; i++) 
        { 
         sum += xTOn((x-1)/x, i)/i; 
        } 
    
        return sum; 
    } 
    

    我也算所需的迭代的數目的函數,但它的結果與函數的日誌進行比較()從math.h中,這是undiserable。它應該通過比較兩個連續迭代來完成,但我不知道該怎麼做,因爲我不明白當你比較兩個不準確的數字時有什麼意義。現在,「x」是ln函數的參數,「eps」是期望的精度(例如0.001或1e-3 ...)。

    #include <math.h> 
    
    int iterations(double x, double eps) 
    { 
        int i = 1; 
    
        while(1) 
        { 
         if (fabs(taylorTheSecond(x, i) - log(x)) <= eps) 
         { 
          break; 
         } 
         i++; 
        } 
    
        return i; 
    } 
    

    這很簡單。但是爲了在不使用數學庫的情況下對迭代進行計數,對我來說看起來是不可能的。我將不勝感激任何建議如何完成這項工作:)。

  • 回答

    0

    當連續迭代結果的波動低於所需分辨率時,您可以嘗試退出循環。即fabs(taylorTheSecond(x, i) - taylorTheSecond(x, i - 1)) < 1e-3或其他。

    ..顯然使用一個變量來存儲以前的值;也不是每次重新計算泰勒級數,只是計算下一項,並看看它是否低於所需的分辨率。

    +1

    我明白了你的觀點,起初這也是我的想法,但後來我沒有得到確切的迭代次數,因爲與精確結果相比,波動值可能遠低於準確度的實際值。儘管感謝你的反應。 –