100個不同類型的python語言趣味編程題 在求解的過程中培養編程興趣,拓展編程思維,提高編程能力。 第一部分:趣味演算法入門;第六題 問題分析: 牛頓迭代法是取x0之後,在這個基礎上,找到比x0更接近的方程的根,一步一步迭代,從而找到更接近方程的近似根。 設r是f(x)=0的根,選取x0作 ...
100個不同類型的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。上述即為牛頓迭代法的求解過程。
演算法設計:
- 在1附近找任意一實數作為x0的初值,我們去1.5,即x0 = 1.5.
- 用初值x0帶入方程中計算此時的f(x0)及f'(x0);程式中f用來描述方程的值,fd用來描述方程求導之後的值。
- 計算增量h=f/fd。
- 計算下一個x (x = x0-h)。
- 用所得的x代替x0原來的值。
- 若|x - x0|>=1e-5,則轉到第三步繼續執行,否則轉到步驟7
- 所求x就是方程的根,將其輸出。
如果你喜歡我的文章,請滑到下方點個推薦再走. ,以給我動力哦;轉載請註名出處。然後..請多來做客鴨。
註:100個不同類型的python語言趣味編程題是參考100個不同類型的c語言趣味編程題而寫,陸續會更新。歡迎大家分享出你們的方案。