在求解的過程當中培養編程興趣,拓展編程思惟,提升編程能力。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
若是你喜歡個人文章,請滑到下方點個推薦再走. ,以給我動力哦;轉載請註名出處。而後..請多來作客鴨。orm
注:100個不一樣類型的python語言趣味編程題是參考100個不一樣類型的c語言趣味編程題而寫,陸續會更新。歡迎你們分享出大家的方案。input