目錄
1、概述
2、案例
3、程式源代碼
(1)C語言實作
(2)Matlab實作
(3)Python實作
(4)Python中Sympy庫
4、總結
5、參考文獻
1、概述
詳細知識點我在前面的牛頓疊代法開方已經總結啦,這裡就稍做補充。下面我們就直接給出案例,然後分享代碼和結果。
2、案例
3、程式源代碼
(1)C語言實作
#include<stdio.h>
#include<math.h>
int main()
{
double pow(double x,double y);
double x0,x,f1,f2;
x0=1;
do
{
x=x0; //初值
f1=pow(x,7)-28*pow(x,4)+14;
f2=7*pow(x,6)-112*pow(x,3); //對函數 f1 求導
x0=x-f1/f2; //疊代公式
}
while(fabs(x0-x)>1e-5);
printf("%9.8f\n",x0);
return 0;
}
[注]C語言中math.h的全面總結。
(2)Matlab實作
%Newton 疊代法
x=1;
while abs(x.^(7)-28*x.^(4)+14)>0.00001
x=x-(x.^(7)-28*x.^(4)+14)/(7*x.^(6)-112*x.^(3));
end
vpa(x,8)
[注]Matlab中vpa()函數的應用。(本例中精度為保留8位有效數字)
(3)Python實作
import numpy as np
from sympy import *
import matplotlib.pyplot as plt
plt.style.use('ggplot') #設定繪圖風格
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] #進行中文亂碼
plt.rcParams['axes.unicode_minus']=False #坐标軸負号的處理
x = symbols('x')
x1= 0 #區間下限
x2= 0.11 #區間上限
x0 = (x1+x2)/2 #疊代初始值
x_list = [x0]
i = 0
def f(x):
f = x**7-28*x**4+14
return f
x_values = []
y_values = []
while True:
if diff(f(x),x).subs(x,x0) == 0: #導數為零
print('極值點:',x0)
break
else:
x0 = x0 - f(x0)/diff(f(x),x).subs(x,x0) #diff()求導,subs()指定位置求導
x_list.append(x0)
'''if len(x_list) > 1:
i += 1
error = abs((x_list[-1] - x_list[-2]) / x_list[-1])
if error < 10 ** (-6):
print(f'疊代第{i}次後,誤差小于10^-5')
break
else:
pass'''
#誤差為零時:
if len(x_list) > 1:
i += 1
error = abs((x_list[-1] - x_list[-2]) / x_list[-1])
x_values.append(i)
y_values.append(error)
if error == 0:
print(f'疊代第{i}次後,誤差等于0')
break
else:
pass
print(f'所求方程式的根為{x_list[-1]}')
#橫坐标是疊代次數,縱坐标是誤內插補點
plt.plot(x_values,
y_values,
color = 'steelblue', # 折線顔色
marker = '*', # 折線圖中添加圓點
markersize = 3, # 點的大小
)
# 修改x軸和y軸标簽
plt.xlabel('疊代次數')
plt.ylabel('誤內插補點')
# 顯示圖形
plt.show()
疊代第44次後,誤差等于0
所求方程式的根為3.03057732650459
(4)Python中Sympy庫
在(3)中有一個Python中很重要的一個庫:sympy。遇到複雜計算找python絕對不讓你失望,sympy是一個Python的科學計算庫,用一套強大的符号計算體系完成諸如多項式求值、求極限、解方程、求積分、微分方程、級數展開、矩陣運算等等計算問題。雖然Matlab的類似科學計算能力也很強大,但是Python以其文法簡單、易上手、異常豐富的三方庫生态,個人認為可以更優雅地解決日常遇到的各種計算問題。
SymPy是一個符号計算的Python庫。它的目标是成為一個全功能的計算機代數系統,同時保持代碼簡潔、易于了解和擴充。它完全由Python寫成,不依賴于外部庫。
SymPy支援符号計算、求導,求偏導,高精度計算、模式比對、繪圖、解方程、微積分、組合數學、離散數學、幾何學、機率與統計、實體學等方面的功能。