泰勒級數 牛頓迭代公式 最簡單的C語言求根號的值

2021-05-28 11:24:34 字數 1440 閱讀 8179

無意間在csdn上看見一哥們討論tecent的兩道面試題,其中一道題目就是求根號2的值,並且保留指點的小數字。我想我一定是不能進tecent了,並且我一定是乙個數學小白,不,就是乙個小白。查了一些資料。mark一下先...

泰勒級數

泰勒級數的冥級數如下所示:

取前面兩項等於0得:f(a) + f'(a)(x-a) = 0;

化簡後得:x = a - f(a)/f'(a);

其中a為自變數的取值,x為a的乙個近視解,使用x0代替a,x1代替x,則上式可表示為:x1 = x0 - f(x0)/f'(x0);

牛頓迭代公式

牛頓迭代法結論其實就是取泰勒級數前兩項等於0求得的,為:x(n+1) = x(n) - f(x(n))/f'(x(n));

思路如下:

假設有一條曲線c,在曲線上面任選一點x0 = 1, 求的曲線的值為f(1), 即(1, f(1))為曲線上得一點。過點(1, f(1)), 作一條曲線c的切線,切線與x軸相交於點x1。同理使用x1求得x2、x3、x4......。所求得的一些列與x軸相交的點位曲線與x軸相交點得近視值。如設定某一誤差e,當x(n+1)-x(n) < e,則可認為x(n+1)是曲線的乙個近視解。因為x(n+1)作為曲線的解誤差為可以接受的e。

其實,對於某個點,相對於曲線的切線方程是確定的,即為:f(x0) = f'(x0)(x - x0), 其中f'(x0)為切線的斜率。化簡即為x1 = x0 - f(x0)/f'(x0);和泰勒級數中求得的公式不謀而合。由此可得牛頓迭代公式為:x(n+1) = x(n) - f(x(n))/f'(x(n));

最簡單的c語言求根號2

採用上述方法求得了曲線的近視解,如要求根號2,可假設f(x) = x^2 - 2 = 0;即曲線x^2 -2 = 0的解即為根號2的值,通過控制誤差的大小,即可求得根號2的保留小數點位數的取值。如要取得小數點為8為的根號2的值,可取誤差e=0.00000001, 即誤差為10的負8次方。取根號2小數點保留10位的最簡單c**如下:

#include int main()    while (1);

return 0;

}

執行結果如下:
# ./a.out 

1.0000000000, 1.5000000000

1.5000000000, 1.4166666269

1.4166666269, 1.4142156839

1.4142156839, 1.4142135382

btw,根號2的值也就是方程x^2 - 2 = 0的解。而以上輸出中第2列均為方程的解,只是精度不同而已。而精度的控制就靠diff和0.0000000001控制了。當然,**寫得很sb,並且條件全都寫死在**裡面,旨在用最簡單的**講清楚怎樣使用牛頓迭代法求根號的值。

另外,大家別噴我,上述**肯定不是最簡單的,只是想要表達比較簡潔,希望能夠更清楚的看出牛頓迭代法的使用。

牛頓迭代法的公式推導

牛頓迭代法求平方根 求n的平方根,先假設一猜測值x0 1,然後根據以下公式求出x1 再將x1 代入公式右邊,繼續求出x2 通過有效次迭代後即可求出n的平方根,xk 1 先讓我們來驗證下這個巧妙的方法準確性,來算下2的平方根 computed by mathomatic 1 x new x old y...

c 迭代器的簡單使用

begin end。begin指向首元素 end指向尾元素後邊的位址 vectorvec1 for auto it vec1.begin it vec1.end it 迭代器型別 iterator vectorvec2 vector iterator it vector iterator is fo...

C 迭代器的簡單使用

此文為閱讀筆記,內容基本出自書中。使用下標訪問物件的成員的最基本方法有三種 string物件的字元訪問,vector物件的元素訪問,迭代器。迭代器類似於指標型別,也提供了對物件的間接訪問。使用迭代器可以訪問某個元素,也能從乙個元素移動到另外乙個元素。迭代器分為有效和無效,有效的迭代器或者指向某個元素...