数学建模算法(基于matlab和python)之 方程求根的一般迭代法与牛顿法(5/10)

实验目的及要求:

1、掌握一般迭代法与Newton法的基本原理。

2、能够编写一般迭代法与Newton法通用子程序求解方程根的近似解。

实验内容:

1、编写非线性方程求根的一般迭代法通用子程序,并求的一

 

个实根,精确到4位小数。

 2、编写非线性方程求根牛顿法的通用子程序。

        早在1225年,有人曾求解方程并给出了高精度的实根,试用牛顿法求得这个结果。

 

实验步骤与程序:

一般迭代法基本思想:

算法分析

 

一般迭代法算法流程图:

一般迭代法算法python主程序:

import math

def f(x):

    return math.exp(x) / 5

 

accuracy = 0.0001#精确度

x0 = 2

N = 100

k = 1

x_data = []#列表记录

y_data = []

x1 = f(x0)

# 记录初始节点

x_data.append(0)

y_data.append(x1)

while k < N:

    error = abs(x1 - x0)

    x_data.append(k)

    y_data.append(x1)

    if (error < accuracy):

        break

    k += 1

    x0 =x1

    x1 = f(x0)

if k >= N:

    print('错误')

else:

    print("\n迭代过程")

for x in x_data:

    print("X{}={}".format(x, y_data[x]))

print("次数=", k)

print("方程解=", x1)

print("误差=",error)

牛顿迭代格式:

算法分析

 

一般迭代法算法流程图:

 

一般迭代法算法python主程序:

import sympy as sympy#它可以进行符号计算、解方程、求导、积分、矩阵计算等操作。

def solve(x0, f):

    result = f.subs(x, x0)#相减函数

    return result

def Newton(x0, f, g):

    times = 0

    while True:

        x1 = x0

        x0 = x0 - (solve(x0, f) / solve(x0, sympy.diff(f)))

        times += 1

        if abs(x0 - x1) < g:

            break

        elif times > 100:

            print('迭代失败')

            break

    print(f'x^*= {x0}\n迭代次数 = {times}')

x = sympy.symbols("x")#定义变量

f = x**3 + 2 * x**2 + 10 * x - 20

x0 = 0.5

g = 1e-10#g为精度

Newton(x0, f, g)

运行结果:

1

 

2

结果分析与讨论:

  1. 非线性方程求根的一般迭代法是一种基于某个函数的反复迭代来逼近方程解的方法。这个函数通常被称为迭代函数, 当迭代过程不断进行时,误差将不断减小。为了使误差收敛,迭代函数必须满足一些条件。如果迭代函数满足这些条件,那么误差将按指数级别逐步收敛到0。但是,如果迭代函数不满足条件,那么可能会发生跳跃、发散和震荡等问题。因此,为了避免这些情况发生,需要选择适当的迭代函数,以使其具有良好的收敛性。
  2. 在使用一般迭代法时,必须首先检验迭代格式的收敛性.
  3. 牛顿法的迭代函数,本质上,其实是关于f(x)的微分中值定理的变形,也可以说是对于一阶的泰勒展开的变形。其实,是一种切线下降法,对于低精度下的要求的话,下降应该是非常迅速的
  4. 非线性方程求根的牛顿法是基于逐步优化近似解的观念,每次迭代会生成一个新的近似解,该解在下一次迭代中作为初始估计值。
  5. 牛顿法的基本思想是利用函数的局部线性性质,将函数在当前点展开成一个一次泰勒多项式,然后求解该一次多项式的根,得到下一个近似解。
  6. 牛顿法通常具有快速的收敛速度,但它的一个缺点是,它可能会停留在一个局部极小值处,而不是全局最小值点。因此,在某些情况下,可能需要使用其他迭代方法来获得更好的结果。此外,在计算导数时,需要进行数值计算,可能会带来舍入误差的问题。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君无戏言。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值