欢迎光临
我们一直在努力

机器学习与深度学习实验项目1 迭代法求解方程

一、实验目的

1)初步掌握Python的应用

2)强化对迭代法的理解

3)掌握应用迭代法求解方程x^{5}+x^{4}+e^{x}-11x+1=0的方法

二、实验内容

1)分析问题,确定迭代法应用中的初始条件和结束条件

2)用数学方法建立迭代关系式,并编写代码实现求解方程

3)用爬山法建立迭代关系式,并编写代码实现求解方程

三、实验原理

1)定点迭代法:

定点迭代法的核心思想是将求解方程 f(x) = 0 的问题,转化为寻找一个函数 g(x) 的不动点问题,即转化为等价形式 x = g(x)。这个不动点就是原方程的根。该方法从一个初始猜测值 x₀开始,通过迭代公式 xₙ₊₁ = g(xₙ) 产生一个序列 {x₀, x₁, x₂, …},如果该序列收敛于某个值a,且函数 g(x) 连续,则a就是方程 x = g(x) 的根,也就是原方程 f(x) = 0 的解。迭代过程需要设定一个结束条件,通常当两次迭代值的绝对误差xₙ₊₁- x或相对误差小于某个预设的精度阈值ε时停止。

该方法成功的关键在于迭代函数 g(x) 的构造。同一个方程 f(x)=0 可以构造出多种不同的 g(x) 形式,但并非所有形式都收敛。根据收敛定理,如果在一个包含根 α 的区间内,迭代函数 g(x) 的一阶导数满足 |g'(x)|< 1,那么迭代过程必定收敛。对于本实验的方程 x⁵ + x⁴+ eˣ – 11x + 1 = 0,可以尝试将其改写为诸如 x = (x⁵ + x⁴+ eˣ + 1)/11 等形式进行迭代。

2)爬山法:

爬山法是一种优化算法,其基本思想类似于通过不断向“更高处”(即函数的最大值)攀登来寻找最优解。

本实验中,我们将求解方程 f(x) = 0 的问题转化为一个优化问题:寻找 x 使得函数 F(x) = -f(x)的值最大。因为当 f(x) 无限接近于 0 时,F(x) 达到最大值。算法从初始点 x₀开始,在当前点的邻域内(如 x₀+ h 和 x₀- h,h为一个小的步长)探测函数值 F(x) 的变化。通过比较这三个点的函数值,判断“上山”的方向。如果 F(x₀+ h) 最大,则下一步移动到x₁= x₀+ h;如果 F(x₀- h) 最大,则移动到 x₁= x₀- h;如果 F(x₀) 最大,则说明可能位于山顶附近,可以缩小步长 h 以提高精度。重复此过程,直到步长 h 小于精度要求 ε,此时的 x 即为方程的近似根。

与需要推导和计算导数的梯度下降法不同,爬山法是一种直接搜索法,它只依赖函数值的比较,实现更简单直观,尤其适用于导数难以求解的情况。但它的收敛速度通常较慢,且参数(如初始步长)的选择对结果有较大影响。

四、实验步骤

1)分析实验要求,设置迭代法的初始点和结束条件

2)用数学方法建立迭代关系式,并编写代码完成方程求解

3)用爬山法建立迭代关系式,并编写代码完成方程求解

4)记录并分析实验结果

代码和执行结果展示:

1)实验核心代码分析如下:

①定点迭代法核心实现:

def fixed_point_iteration(x0, max_iter=100, tol=1e-8):

    x = x0

    for i in range(1, max_iter+1):

        x_new = (x**5 + x**4 + math.exp(x) + 1.0) / 11.0

        fx = f(x_new)

        if abs(x_new – x) < tol:

            break

        x = x_new

    return x_new, i

定点迭代法通过将非线性方程转化为等价形式x=g(x),实现了高效的数值求解。该实现的核心在于精心设计的迭代公式x = (x⁵ + x⁴+ eˣ + 1)/11,该公式保证了在根附近|g'(x)|<1的收敛条件。收敛判断采用相邻迭代值差值的绝对值小于预设容差10^{-8},确保了高精度解的同时避免了无限迭代。异常处理机制则保证了数值稳定性,防止指数项溢出导致计算失败。

②爬山法核心实现:

def hill_climbing(x, f, delta=0.01, max_iter=100):

    for i in range(1, max_iter+1):

        current_f = abs(f(x))

        right_f = abs(f(x + delta))

        left_f = abs(f(x – delta))

        if right_f < current_f:

            x += delta

        elif left_f < current_f:

            x -= delta

        else:

            break

    return x, i

爬山法将方程求解转化为目标函数|f(x)|的最小化问题,采用局部搜索策略实现稳健求解。算法在当前位置向两侧试探,通过比较函数值选择移动方向,这种设计避免了对导数的计算需求,增强了算法的适用性。步长δ=0.01的选择平衡了搜索精度和收敛速度,而最大迭代次数限制则防止了无限循环。该实现特别适合导数难以计算或函数形态复杂的场景,展现了良好的鲁棒性。

③主函数控制逻辑:

def main():

    initial_values = [-2, 0.5, 1.5]

    for i, x0 in enumerate(initial_values, 1):

        root_fp = fixed_point_iteration(x0)

        root_hc = hill_climbing(x0 + random.uniform(-0.1, 0.1), f)

        diff = abs(root_fp – root_hc)

主函数设计了系统的实验框架,通过选择三个不同初始值[-2,0.5,1.5]实现了方程多根的全面搜索。对每种方法都采用相同的初始点进行求解,为方法比较提供了公平基准。特别为爬山法添加随机扰动,有效避免了局部最优陷阱。结果差异分析则通过计算两种方法解的绝对差值,为算法可靠性提供了量化评估依据,体现了严谨的实验设计思想。

2)结果展示如下图:

图 1  方程的解结果图

通过实验结果我们可以进行方法比较分析:

①定点迭代法:

  优点: 实现简单,计算量小

  缺点: 收敛速度较慢,对初始值敏感

②爬山法:

  优点: 稳定性好,适用范围广

  缺点: 收敛速度慢,需要选择合适的步长

最后总结可得到实验结论:通过本实验,我们掌握了使用迭代法求解非线性方程的方法。定点迭代法通过建立迭代关系式,逐步逼近方程的解。爬山法通过局部搜索,寻找函数值绝对值最小的点。两种方法都能有效求解非线性方程,但需要根据具体问题选择合适的方法。

赞(0)
未经允许不得转载:171主机测评 » 机器学习与深度学习实验项目1 迭代法求解方程
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址