武汉理工大学-数值分析-(4)方程求根的数值方法

文章目录

    • 实验目标
    • 编程语言与扩展库
      • 二分法求根
      • 牛顿法求根
      • 弦截法求根
    • 写在最后

实验目标

在这里插入图片描述
用编程语言编程实现以下算法:
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学年数值分析方法课程实验,仅供学习参考
如有不足地方,还请指出。祝愿读者能够在编程之路上不断进步!

你可能感兴趣的:(数值分析)