第一部分:趣味算法入門;第六題牛頓迭代法求一元三次方程的根

100個不一樣類型的python語言趣味編程題

在求解的過程當中培養編程興趣,拓展編程思惟,提升編程能力。python

第一部分:趣味算法入門;第六題算法

'''
6.牛頓迭代法求方程的根:方程爲:ax**3 + bx**2 + cx + d = 0,係數a,b,c,d由主函數輸入。
求x在1附近的一個實根。求出根後,由主函數輸出。
牛頓迭代法的公式是:x = x0 - f(x0)/f'(x0)  設迭代到|x-x0|<=10**-5時結束。
'''
#解題方法示例以下;


#輸入方程的係數
a = int(input('請輸入a的值:'))
b = int(input('請輸入b的值:'))
c = int(input('請輸入c的值:'))
d = int(input('請輸入d的值:'))

#用牛頓迭代法求方程的根            
x = 1.5          
i =1                            #隨機定義一個i的值,是其可以進入while循環語句

while i >=  1e-5:               #(1e-5 = 10**-5)
    x0 = x                      #用所得的x代替x0原來的值
    f = ((a*x0+b)*x0+c)*x0 +d   #f用來描述方程的值
    fd = (3*a*x0 + 2*b)*x0 +c   #fd用來描述方程求導以後的值
    x = x0 - f/fd               #求得更接近方程根的x的值
    i = abs(x - x0)
    
#輸出所求方程的根
print('方程的一個根爲:{:7f}'.format(x))  #format的格式化輸出,輸出保留7位小數的浮點數。

#解本問題有多種方法,此方法並非標準答案,讀者能夠本身嘗試各類方法

問題分析:編程

​ 牛頓迭代法是取x0以後,在這個基礎上,找到比x0更接近的方程的根,一步一步迭代,從而找到更接近方程的近似根。函數

​ 設r是f(x)=0的根,選取x0做爲r的初始近似值。過點(x0, f(x0))做爲曲線y = f(x)的切線L,L的方程爲y = f(x0) +f‘(x0)(x-x0),求出L於x軸交點的橫座標x1 = x0 -f(x0)/f’(x0),稱x1爲r的一次近似值,過點(x1, f(x1))做爲曲線y = f(x)的切線並求改切線於x軸的橫座標x2 = x1 -f(x1)/f’(x1),稱x2爲r的二次近似值,重複以上過程,得r的近似值xn。上述即爲牛頓迭代法的求解過程。設計

​ 算法設計:code

  1. 在1附近找任意一實數做爲x0的初值,咱們去1.5,即x0 = 1.5.
  2. 用初值x0帶入方程中計算此時的f(x0)及f'(x0);程序中f用來描述方程的值,fd用來描述方程求導以後的值。
  3. 計算增量h=f/fd。
  4. 計算下一個x (x = x0-h)。
  5. 用所得的x代替x0原來的值。
  6. 若|x - x0|>=1e-5,則轉到第三步繼續執行,不然轉到步驟7
  7. 所求x就是方程的根,將其輸出。

若是你喜歡個人文章,請滑到下方點個推薦再走. ,以給我動力哦;轉載請註名出處。而後..請多來作客鴨。orm

注:100個不一樣類型的python語言趣味編程題是參考100個不一樣類型的c語言趣味編程題而寫,陸續會更新。歡迎你們分享出大家的方案。input

相關文章
相關標籤/搜索