非线性方程,单根的迭代求解(python,数值积分)

本文探讨了非线性方程的求解,特别是使用迭代替换法解决单根问题。通过f(x)=x^(1/3)为例,介绍了如何选择迭代函数和收敛判据,以及不同函数对迭代效果的影响。重点强调了初始猜测值对收敛速度的影响。

第十六篇 一个单根的迭代求解

非线性方程

在前面的内容中,我们讨论了不涉及未知量的乘方或乘积的“线性”方程。在实践中经常出现的一种常见形式的“非线性”方程包含下面的乘积,例如,
在这里插入图片描述
将是由x1和x2的各种组合形成的一对非线性方程。
在最简单的形式,我们可以有一个非线性方程,例如
在这里插入图片描述
一个图形注释有助于我们理解满足上面方程x解的性质。f(x)-x的曲线图下面图所示。其中f(x)与直线y = 0相交,相交点叫做方程的解,通常称为“根”,在这个例子中,其值为x ≈ 1.3247。我们也可以将等式写成下面的形式
在这里插入图片描述
寻找g(x)与直线y = 1的交点,作为方程的解,也在图中展示了。
既然我们现在知道x ≈ 1.3247是一个解,我们就可以把f(x)分解为下面的形式
在这里插入图片描述
根据二次方程的求根公式,可以得到解为
在这里插入图片描述
表明剩下的两个根是虚构的。
显而易见,寻找一个通常的非线性方程组的解将是一项相当艰巨的数值任务。但值得开心的是,在许多非线性方程组的情况下,问题的性质限制了根可能具有的值的范围。比如我们可能提前就知道所有的根都必须是实数,甚至都必须是正定的实数。我们将集中讨论这些有限制范围的问题。
在这里插入图片描述
我们也会看出求解非线性方程的方法本质上也是一种迭代方法。参考上面的图,应该清楚的是,这样的迭代过程可能很大程度上依赖于初始猜测解的准确度。例如,在这种情况下,猜测x = 1或x = 2可能比猜测x = -100或x = 100成功的机率会大很多。

迭代替换

一个简单的迭代过程是替换一个下面这个方程
在这里插入图片描述
通过一个等价方程
在这里插入图片描述
迭代过程通过对x给与一个猜测值,在上面方程的右侧替换该猜测值,并将结果与猜测的x值进行比较。如果根据判断标准,基本相同,则判定这个x为方程的解。如果不是,则假设新的F(x)是对x更好的估计量,并重复上述迭代过程。
一个 重要的问题是,没有唯一的方法来确定F(x)。可以有下面几种方式来确定x。
在这里插入图片描述
把上面三个右侧函数都画在最下面的图中,从图中可以很明显看出一个问题。在每种情况下,根都是由y = Fi(x)与y = x的交点正确给出的。然而,函数F3(x)在x <-1.0的范围时没有实数值,函数F2(x)在x =正负1.0处有奇点。而且,F1(x)和F2(x)在根附近的值(x = 1.3247)变化非常快,而F3(x)变化非常慢。下面的分析给出了对该方法的收敛性质的判断方法。
考虑“接近”真实解的判别标准,采用下面的步骤
在这里插入图片描述
如果精确解是α,那么
在这里插入图片描述
因此从等式上面推出
在这里插入图片描述
如果这种方法是收敛的,|α-Xi+1 | < |α-Xi |,因此
在这里插入图片描述
在这里插入图片描述

从上图中可以清楚地看出,在根附近只有F3(x)满足这个收敛准则。此外,等式F3(x)只有在开始猜测值x > -1.0时才会产生正确的结果。
程序如下,分为一个主程序和检查程序是否收敛的子程序check,同时有一个内部函数,用来定义非线性方程,也就是上面的F3(x)
主程序:

#对于一个单根的迭代替换
import B
x0=1.2;tol=1.0e-5;limit=100
print('开始的猜测值',x0)
print('前几次迭代值')
iters=0
def f31(x):
    f31=(x+1.0)**(1.0/3.0)
    return f31
while(True):
    iters=iters+1
    x1=f31(x0)
    if  B.check(x1,x0,tol)==True or iters==limit:
        break
    x0=x1
    if iters<5:
        print(x1)
print('迭代到收敛的次数',iters)
print('解',x1)

check
def check(x1,x0,tol):
  check=not abs(x1-x0)/abs(x0)>tol
  return check

终端输出结果如下:
在这里插入图片描述
输出结果与图上所画结果一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

深渊潜航

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

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

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

打赏作者

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

抵扣说明:

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

余额充值