非线性方程二分法

这篇具有很好参考价值的文章主要介绍了非线性方程二分法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

非线性方程二分法

优点:算法直观、简单、总能保证收敛;局限:收敛速度慢、一般不单独用它求根,仅为了获取根的粗略近似

1 二分法基本思想

f ( x ) f(x) f(x) [ a , b ] [a,b] [a,b]上连续、严格单调、满足条件
f ( a ) f ( b ) < 0 f(a)f(b)<0 f(a)f(b)<0
则在区间 [ a , b ] [a,b] [a,b]内必有一根 x ∗ x^* x。通过反复对分有根区间,以极限思想求解出非线性方程的数值解。具体步骤如下:

  • [ a , b ] [a,b] [a,b]的中点 x 0 = ( a + b ) / 2 x_0=(a+b)/2 x0=(a+b)/2,计算 f ( x 0 ) f(x_0) f(x0),当
    • f ( a ) f ( x 0 ) < 0 f(a)f(x_0)<0 f(a)f(x0)<0,则令 a 1 = a , b 1 = x 0 a_1=a,b_1=x_0 a1=a,b1=x0;
    • f ( x 0 ) f ( b ) < 0 f(x_0)f(b)<0 f(x0)f(b)<0,则令 a 1 = x 0 , b 1 = b a_1=x_0,b_1=b a1=x0,b1=b;

通过重复上述步骤,得到一系列有根区间
[ a , b ] ⊃ [ a 1 , b 1 ] ⊃ [ a 2 , b 2 ] ⊃ ⋯ ⊃ … [a,b]\supset [a_1,b_1]\supset[a_2,b_2]\supset\dots \supset\dots [a,b][a1,b1][a2,b2]
由于后一个区间长度是前一个区间的一半,通过递归公式求解出区间长度的通项公式
b k − a k = b − a 2 k b_k-a_k=\frac{b-a}{2^k} bkak=2kba
k → ∞ k\to \infty k时, ∣ ∣ b k − a k ∣ ∣ → 0 ||b_k-a_k||\to0 ∣∣bkak∣∣0,此时序列 { a k } , { b k } , { x k } → x ∗ \{a_k\},\{b_k\},\{x^k\} \to x^* {ak},{bk},{xk}x,其中
x ∗ = a k + b k 2 x^*=\frac{a_k+b_k}{2} x=2ak+bk
由于方程根和中点间的距离真包含于 [ a k , b k ] [a_k,b_k] [ak,bk],故收敛速度
0 ≤ ∣ x ∗ − x k ∣ ≤ ( b k − a k ) / 2 = ( b − a ) / 2 k + 1 0\le|x^*-x_k|\le(b_k-a_k)/2=(b-a)/2^{k+1} 0xxk(bkak)/2=(ba)/2k+1
k → ∞ k\to \infty k时,利用夹逼定理
lim ⁡ k → ∞ 0 ≤ lim ⁡ k → ∞ ∣ x ∗ − x k ∣ ≤ lim ⁡ k → ∞ ( b − a ) / 2 k + 1 = 0 \mathop {\lim }\limits_{k\to \infty}0 \le \mathop {\lim }\limits_{k\to \infty}|x^*-x_k|\le\mathop {\lim }\limits_{k\to \infty}(b-a)/2^{k+1}=0 klim0klimxxkklim(ba)/2k+1=0
故有 x k → x ∗ x^k\to x^* xkx。给定终止条件 ε \varepsilon ε,当
( b − a ) / 2 k + 1 < ε (b-a)/2^{k+1}<\varepsilon (ba)/2k+1<ε
时,可求出满足精度 ε \varepsilon ε的最少二分次数 k k k


2 二分法实现

求解:
f ( x ) = 2 x + x − 2 f(x)=2^x+x-2 f(x)=2x+x2

function[xstar,index,it] = bisect(fun,a,b,ep)
% 非线性方程二分法
% fun为目标函数
% a,b为初始区间
% ep为精确度,当(b-a)/2<ep循环结束,迭代失败输出两端点函数值
% index指标变量,index = 1,迭代成功,index  = 0表明初始区间不是有根区间
% it迭代次数
if nargin < 4
    ep = 1e-5;
end
fa = feval(fun,a); %计算a处的函数值
fb = feval(fun,b); %计算b处的函数值
if fa*fb>0
    xstar = [fa,fb];
    index = 0;
    it = 0;
    return
end
k = 0;
while abs(b-a)/2 >= ep
    x = (a+b)/2;
    fx = feval(fun,x);
    if fx*fa<0
        b = x;fb = fx;
    else
        a = x;fa = fx;
    end
    k = k +1;
end
xstar = (a+b)/2;index = 1;it = k
%具体函数
function f = fun1(x)
%测试函数
f = 2^x+x-2;  %任意可改
end

format long
[xstar,index,it] = bisect(@fun1,0,2,0.0000001)

xstar = 0.543000400066376

index = 1

it = 24


-END-

参考文献

曾繁慧. 数值分析[M]. 中国矿业大学出版社,2009文章来源地址https://www.toymoban.com/news/detail-440421.html

到了这里,关于非线性方程二分法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 数值分析——关于非线性方程求根的迭代法

    数值分析——关于非线性方程求根的迭代法

    目录 一、Aitken算法: 二、Steffensen算法: 三、牛顿切线法 四、定端点弦截法 五、动端点弦截法 六、不动点迭代法 七、二分迭代法 Aitken算法是一种加速级数收敛的方法,适用于递推计算和迭代解法,其核心思想是通过利用级数中的部分和之间的线性关系来加速收敛。 对应的迭

    2024年02月03日
    浏览(9)
  • PINN解偏微分方程实例2(一维非线性薛定谔方程)

    PINN解偏微分方程实例2(一维非线性薛定谔方程)

       考虑偏微分方程如下: i h t + 0.5 h x x + ∣ h ∣ 2 h = 0 h ( 0 , x ) = 2 s e c h ( x ) h ( t , − 5 ) = h ( t , 5 ) h x ( t , − 5 ) = h x ( t , 5 ) begin{align} begin{aligned} ih_t + 0.5h_{xx} + |h|^2h = 0 \\\\ h(0,x) = 2 sech(x) \\\\ h(t,-5) = h(t,5) \\\\ h_x(t,-5) = h_x(t,5) end{aligned} end{align} ​ i h t ​ + 0.5 h xx ​ + ∣ h ∣

    2024年02月01日
    浏览(10)
  • 牛顿(Newton)迭代法求解非线性方程以及方程组的Matlab实现

    牛顿(Newton)迭代法求解非线性方程以及方程组的Matlab实现

    必做题目比较简单,写得有些随意,主要还是第二个拓展题目的难度比较高 传入题设数据有: 另附运行截图  

    2024年02月11日
    浏览(15)
  • matlab实现牛顿迭代法求解非线性方程

    非线性方程是指含有未知数的方程,且方程中至少有一个未知数的次数大于一或者含有非一次幂的函数(如指数、对数、三角函数等)。例如,$f(x) = x^3 - 2x - 5 = 0$就是一个非线性方程。非线性方程通常没有显式的解析解,因此需要使用数值方法来近似求解。 牛顿迭代法(N

    2024年02月11日
    浏览(13)
  • 节点不连续伽辽金方法在求解线性和非线性平流方程中的一维实现(Matlab代码实现)

    节点不连续伽辽金方法在求解线性和非线性平流方程中的一维实现(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 本文提

    2024年02月12日
    浏览(8)
  • Matlab数据处理:用离散数据根据自定义多变量非线性方程拟合解析方程求取参数

    Matlab数据处理:用离散数据根据自定义多变量非线性方程拟合解析方程求取参数

    问题:已知xlsx表格[X,Y,Z]的离散取值,希望用  来拟合,用matlab求得[C1,C2,C3,C5,C6]的值 解答: 运行结果:  备注: 1.rsquare=0.8668认为接近1,拟合效果不错 2.fill函数的startpoint如何设置[C1,...C6]得到一个收敛点?(我找了没找到什么设置startpoint好方法,摸索用如下方法找到了一个

    2024年02月11日
    浏览(10)
  • MATLAB 之 非线性方程数值求解、最优化问题求解和常微分方程初值问题的数值求解

    MATLAB 之 非线性方程数值求解、最优化问题求解和常微分方程初值问题的数值求解

    非线性方程的求根方法很多,常用的有牛顿迭代法,但该方法需要求原方程的导数,而在实际运算中这一条件有时 是不能满足的,所以又出现了弦截法、二分法等其他方法。 在 MATLAB 中,非线性方程的求解和最优化问题往往需要调用最优化工具箱来解决。优化工具箱提供了一

    2024年02月08日
    浏览(13)
  • 6自由度并联机器人 运动学算法 正解 逆解6个耦合的非线性方程组求解

    6自由度并联机器人 运动学算法 正解 逆解6个耦合的非线性方程组求解

    6自由度并联机器人 运动学算法   正解  逆解 6个耦合的非线性方程组求解 正解快速收敛可用在机器人控制中 已实际使用 6自由度并联机器人运动学算法及其在机器人控制中的应用 随着社会科技的不断发展,机器人技术在工业自动化和服务业中的应用越来越广泛。其中,高自

    2024年04月28日
    浏览(13)
  • Python调用二分法和牛顿法求方程的根

    二分法是最简单的求根算法。 对于方程 f ( x ) = 0 f(x)=0 f ( x ) = 0 ,如果 f ( a ) ⋅ f ( b ) 0 f(a)cdot f(b)0 f ( a ) ⋅ f ( b ) 0 ,则说明 a , b a,b a , b 之间必有根,如果按照某个步长对其进行搜索,那么最终一定能够不断缩小根的取值范围,不断精确化。 二分法就是基于这种思想的一种

    2024年02月02日
    浏览(18)
  • 深度学习-多层感知器-建立MLP实现非线性二分类-MLP实现图像多分类

    深度学习-多层感知器-建立MLP实现非线性二分类-MLP实现图像多分类

    多层感知器模型框架 MLP模型框架 MLP实现多分类预测 Keras Keras是一个用Python编写的用于神经网络开发的应用接口,调用开接口可以实现神经网络、卷积神经网络、循环神经网络等常用深度学习算法的开发 特点: 集成了深度学习中各类成熟的算法,容易安装和使用,样例丰富

    2024年01月24日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包