用编程语言编程实现以下算法:
1、用 二分法 求解方程的根;
2、用 牛顿(Newton)迭代法 求解方程的根;
3、用 弦截法 求解方程的根.
语言:Python
扩展模块:numpy
# 函数 f(x)
def f(x):
y = x**3 - x - 1
return y
# 二分求根法 求解f(x)=0
def Dicphoni(a,b,tol):
# 初始值
y0 = f(a)
# 迭代直到区间小于tol
while b-a > tol:
x = (a+b)/2
y = f(x)
# 对半区间
if y * y0>0:
a = x
else:
b = x
return x,y
if __name__ == '__main__':
# 求根区间与误差范围
a,b = 1,1.5
tol = 0.5e-5
x,y = Dicphoni(a,b,tol)
print('x = {}'.format(x))
print('y = {}'.format(y))
# 导入模块
from math import exp
# 函数f(x)
def f(x):
y = x * exp(x) - 1
return y
# 导函数f ' (x)
def f_(x):
y = (1+x) * exp(x)
return y
# 牛顿法 求解f(x)=0
def Newton(x0,tol,N):
# 初值
x_k = x0
print('x0 = {}'.format(x0))
# 迭代
for i in range(N):
x_k_plus = x_k - f(x_k)/f_(x_k)
print('x{} = {}'.format(i + 1, x_k_plus))
# 达到误差要求
if abs(x_k_plus - x_k)<tol:
print('迭代次数: {}'.format(i+1))
break
x_k = x_k_plus
if __name__ == '__main__':
Newton(0.5,1e-5,100)
# 导入模块
from math import exp
# 函数f(x)
def f(x):
y = x * exp(x) - 1
return y
# 弦截法 求解f(x)=0
def String_Interception(x0,x1,tol,N):
# 初值
x_k_sub = x0
x_k = x1
print('x0 = {}'.format(x0))
print('x1 = {}'.format(x1))
# 迭代
for i in range(N):
x_k_plus = x_k - f(x_k)/(f(x_k)-f(x_k_sub))*(x_k - x_k_sub)
print('x{} = {}'.format(i + 2, x_k_plus))
# 达到误差要求
if abs(x_k_plus - x_k)<tol:
print('迭代次数: {}'.format(i+1))
break
x_k = x_k_plus
if __name__ == '__main__':
String_Interception(0.5,0.6,1e-5,100)
声明:本文内容来源于武汉理工大学2019-2020学年数值分析方法课程实验,仅供学习参考。
如有不足地方,还请指出。祝愿读者能够在编程之路上不断进步!