MATLAB-非线性方程的数值解法——二分法

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

本文主要使用MATLAB实现二分法解非线性方程的功能
二分法在用计算机求非线性方程解的数值方法中是最简单的一种,用人工算效率很低,但用计算机运算时还是一种很有效的方法。本文主要参考《计算方法》李大美 李素贞 朱方生编著

目录

  1. 原理
  2. 计算步骤
  3. 程序框图
  4. MATLAB实现
    4.1.按照程序框图进行编写
    4.2.先估算二分次数再进行二分
  5. 例题

原理

二分法的数学理论基础是闭区间上连续函数的一个基本性质,即设f(x)在闭区间[a,b]上连续且f(a)(b)<0,则在区间内至少存在一个点α,使得f(α)=0
MATLAB-非线性方程的数值解法——二分法
​​​
记a0=a, b0=b, 称区间[a0, b0]为方程f(x)=0的有根区间

对分区间[a0, b0]可得中点​​​​​​ x0 并计算出f(x0)

若恰好有f(x0)=0,则方程的根为

MATLAB-非线性方程的数值解法——二分法
若f(x0)≠0,则计算乘积f(x0)f(b0)

1.若f(x0)f(b0)>0,则根在区间[a0, x0]内,记a1=a0,b1=x0

2.若f(x0)f(b0)<0,则根在区间[x0, b0]内,记a1=x0,b1=b0

区间[a1, b1]是包含根的新区间,在旧的有根区间内

MATLAB-非线性方程的数值解法——二分法

记d1为区间[a1, b1]的长度,则

再将区间[a1, b1]对分,重复上述过程,可得方程新的有根区间[a2, b2],其长度为

如此重复n次,若还没有找到方程的根,就得到了包含方程根的区间的一个序列:[a0, b0], [a1, b1], ···, [an, bn], ···

这个闭区间序列具有这样的特点:后一个区间落在前一个区间内,且其长度只有前一个区间长度的一半

记区间[an, bn]的长度为dn,则该区间与最初区间[a, b]的长度关系为

但n充分大时,可取区间[an, bn]的中点作为方程f(x)=0的一个实根α的近似值,且它们满足关系式

方程根的近似值x*的绝对误差小于最初区间长度的2n+1分之一

对于给定的精度ε,可估算出二分法所需的二分次数

计算步骤

MATLAB-非线性方程的数值解法——二分法

程序框图

MATLAB-非线性方程的数值解法——二分法

MATLAB实现

按照程序框图进行编写

有两个允许误差ε1,ε2,且未估算二分次数n

clear;clc;

%使用二分法求非线性连续函数的根,无法求复数根和偶数重根
%初始未计算二分次数

a0=1;b0=2; %输入有根区间

accuracy_1=10^(-4);accuracy_2=5*10^(-4); %设定两个允许误差

syms x; %定义变量x
f(x)=x^6-x-1; %设定方程

y1=f(a0);y2=f(b0); %求初始两端点f(x)值

a=zeros(100,1);b=a;x=a;form=zeros(100,5); %提前创建矩阵,提高运算速度,因未计算二分次数,所以设定了100次,可适当修改
if y1*y2>0
    fprintf ('区间内有偶数个根或者无实根')
else
    n=0; %n为2分次数
    a(1)=a0;b(1)=b0;
    while ((b(n+1)-a(n+1))>accuracy_2) %循环至满足误差要求
        x(n+1)=(a(n+1)+b(n+1))/2;%求当前区间中点
        y=f(x(n+1));yb=f(b(n+1)); %求此区间中点、右端点对应的f(x)
        if abs(y)<accuracy_1 %若满足第一个允许误差,即|f(x)|<ε1,填充表格并中断循环
            form(n+1,1)=n;form(n+1,2)=a(n+1);form(n+1,3)=b(n+1);form(n+1,4)=x(n+1);form(n+1,5)=y;
            break;
        else
            if y*yb>0 %y*yb大于0则让右端点等于中点,左端点保持不变,若y*yb<0则相反
                b(n+2)=x(n+1);
                a(n+2)=a(n+1);
            else
                a(n+2)=x(n+1);
                b(n+2)=b(n+1);
            end
        end
        form(n+1,1)=n;form(n+1,2)=a(n+1);form(n+1,3)=b(n+1);form(n+1,4)=x(n+1);form(n+1,5)=y; %填充表格
        n=n+1; %累计二分次数
    end
end

先估算二分次数再进行二分

先用误差估计式进行估算,求出n,再进行二分

clear;clc;

%使用二分法求非线性连续函数的根,无法求复数根和偶数重根
%初始根据误差估计式计算二分次数n

a0=1;b0=2; %输入有根区间

accuracy=5*10^(-4); %设定允许误差

syms x; %定义变量x
f(x)=x^6-x-1; %设定方程
y1=f(a0);y2=f(b0); %求初始两端点f(x)值

n=ceil(log2((b0-a0)/accuracy/2)); %由误差估计式计算二分次数,ceil:向正无穷取整
a=zeros(n,1);b=a;x=a;form=zeros(n,5); %根据二分次数提前创建矩阵,提高运算速度
if y1*y2>0
    fprintf ('区间内有偶数个根或者无实根')
else
    a(1)=a0;b(1)=b0;
    for i=1:n+1
        x(i)=(a(i)+b(i))/2;%求当前区间中点
        y=f(x(i));yb=f(b(i)); %求此区间中点、右端点对应的f(x)
        if y*yb>0 %y*yb大于0则让右端点等于中点,左端点保持不变,若y*yb<0则相反
            b(i+1)=x(i);
            a(i+1)=a(i);
        else
            a(i+1)=x(i);
            b(i+1)=b(i);
        end
        form(i,1)=i-1;form(i,2)=a(i);form(i,3)=b(i);form(i,4)=x(i);form(i,5)=y; %填充表格
    end
end

运算结果如下图

方法一
MATLAB-非线性方程的数值解法——二分法
方法二
MATLAB-非线性方程的数值解法——二分法

例题

求x3-x-1=0在[1, 1.5]内的解,要求ε<0.01

将a=1,b=1.5,accuracy=0.01,代码里的方程也改为x3-x-1,然后运算代码,可得图表
MATLAB-非线性方程的数值解法——二分法
MATLAB-非线性方程的数值解法——二分法
运行所得结果与例题参考答案高度重合,因此所求方程的近似解为x*=1.3203,满足允许的误差精度文章来源地址https://www.toymoban.com/news/detail-412711.html

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

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

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

相关文章

  • 数模3—Matlab线性规划、非线性规划、多目标规划(超全解法合集)

    线性规划,非线性规划,多目标规划都归于优化类模型 🎐例题 张麻子既要攻碉楼又要追替身,他们一伙6人,总共1200发子弹;每有一人攻碉楼会给百姓带来40点士气值,每有一人追替身会给百姓带来30点士气值;攻碉楼每人需240发子弹,追替身每人需120发。 问攻碉楼和追替身各

    2023年04月19日
    浏览(40)
  • matlab实现牛顿迭代法求解非线性方程

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

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

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

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

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

    2024年02月12日
    浏览(53)
  • 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日
    浏览(48)
  • 【数值分析实验】(五)线性方程组的迭代解法(含matlab代码)

            迭代法就是用某种极限过程去逐步逼近线性方程精确解的方法。迭代法具有需要计算机的存储单元较少、程序设计简单、原始系数矩阵在计算过程中始终不变等优点,但存在收敛性及收敛速度问题。 3.1.1 算法过程 3.1.2 代码 3.1.3 计算结果 3.2.1 算法过程 3.2.2 代码

    2024年02月03日
    浏览(45)
  • 非线性方程组——牛顿迭代求根

    三维曲面函数的参数方程 x(u,v),y(u,v) ,z(u,v),且曲面满足凸性质,u属于[0,1],v属于[0,1],则在xoy平面任给一点p,过点p做一条平行与z轴的直线,假如该直线与曲面相交与一点,求该点的u,v值。用c++程序编写该数学案例,考虑继承和多态,要求用户给定的曲面作为输入,输

    2023年04月17日
    浏览(45)
  • 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日
    浏览(49)
  • 线性方程组AX=b,AX=0以及非线性方程组的最小二乘解(解方程组->优化问题)

    超定方程组无解是因为方程组包含了过多的约束条件,无法满足所有的约束条件,在这种情况下,方程组的某些方程必然是矛盾的,也就是说,他们描述的条件是不兼容的,无法同时满足。 所以求解超定方程组其实是一个拟合问题,其基本思想是最小化所有方程的误差平方和

    2024年02月08日
    浏览(47)
  • MATLAB 非线性规划

    ✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 非线性规划问题 仍是规划问题的一种,但是

    2024年02月05日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包