当前位置: 首页 > news >正文

非线性方程二分法

非线性方程二分法

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

文章目录

  • 非线性方程二分法
    • @[toc]
    • 1 二分法基本思想
    • 2 二分法实现

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 < 4ep = 1e-5;
end
fa = feval(fun,a); %计算a处的函数值
fb = feval(fun,b); %计算b处的函数值
if fa*fb>0xstar = [fa,fb];index = 0;it = 0;return
end
k = 0;
while abs(b-a)/2 >= epx = (a+b)/2;fx = feval(fun,x);if fx*fa<0b = x;fb = fx;elsea = x;fa = fx;endk = k +1;
end
xstar = (a+b)/2;index = 1;it = k
%具体函数
function f = fun1(x)
%测试函数
f = 2^x+x-2;  %任意可改
endformat long
[xstar,index,it] = bisect(@fun1,0,2,0.0000001)

xstar = 0.543000400066376

index = 1

it = 24


-END-

参考文献

曾繁慧. 数值分析[M]. 中国矿业大学出版社,2009

http://www.lryc.cn/news/66827.html

相关文章:

  • H3C防火墙单机旁路部署(网关在防火墙)
  • 基于密度的无线传感器网络聚类算法的博弈分析(Matlab代码实现)
  • 宕机了?!DolphinScheduler 高可用和 Failover 机制关键时刻保命
  • try(){}用法try-with-resources、try-catch-finally
  • 常见Http错误码学习
  • qemu-基础篇——ARM 链接过程分析(六)
  • Java企业工程项目管理系统+spring cloud 系统管理+java 系统设置+二次开发
  • Eureka与Zookeeper的区别
  • 顺序表和链表的各种代码实现
  • C# 介绍三种不同组件创建PDF文档的方式
  • 极简面试题 --- Redis
  • 可视化图表API格式要求有哪些?Sugar BI详细代码示例(4)
  • 学习vue(可与知乎合并)
  • 【UEFI实战】Linux下如何解析ACPI表
  • Java-Redis持久化之RDB操作
  • 信号signal编程测试
  • Linux学习记录——이십삼 进程信号(2)
  • Revit中如何创建曲面嵌板及一键成板
  • STM32F4_DHT11数字温湿度传感器
  • WiFi(Wireless Fidelity)基础(十一)
  • 操作系统—— 精髓与设计原理--期末复习
  • 每天一道算法练习题--Day21 第一章 --算法专题 --- ----------位运算
  • D1. LuoTianyi and the Floating Islands (Easy Version)(树形dp)
  • rk3588移植ubuntu server
  • 如何更好地刷力扣
  • 上采样和下采样
  • 小猪,信息论与我们的生活
  • 【鸿蒙应用ArkTS开发系列】- http网络库使用讲解和封装
  • 【Java零基础入门篇】第 ⑥ 期 - 异常处理
  • 计算职工工资