非线性方程的数值解法:二分法的MATLAB实现

非线性方程的数值解法之二分法:
  • 摘 要 : 摘要: 求解非线性方程 f ( x ) = 0 f(x)=0 f(x)=0的数值解主要有二分法、简单迭代法以及 N e w t o n Newton Newton类迭代法等,本文主要介绍二分法及其MATLAB程序实现。

  • 二 分 法 介 绍 [ 1 ] 二分法介绍^{[1]} [1]
    假设已找到有根区间[ a a a, b b b],满足 f ( a ) f ( b ) < 0 f(a)f(b)<0 f(a)f(b)<0,并且上述非线性方程在所给区间[ a a a, b b b]上只有一个根。下面用简单的方法形成有根区间的序列。先设 a 1 = a a_1= a a1=a b 1 = b b_1 = b b1=b,即[ a 1 a_1 a1, b 1 b_1 b1] = = = [ a a a, b b b],对于一般的区间[ a n a_n an, b n b_n bn],设其中点为 x n x_n xn = = = a n + b n 2 \dfrac{a_n+b_n}{2} 2an+bn,若 f ( x n ) = 0 f(x_n)=0 f(xn)=0或者 b n − a n 2 \dfrac{b_n-a_n}{2} 2bnan < ε <\varepsilon <ε,其中 ε \varepsilon ε为根的容许误差,则 x n x_n xn即为所求,否则检验 f ( x n ) f(x_n) f(xn)的符号,若它与 f ( a n ) f(a_n) f(an)同号,就取 a n + 1 = x n a_{n+1}=x_n an+1=xn b n + 1 = b n b_{n+1}=b_n bn+1=bn。反之,取 a n + 1 = a n a_{n+1}=a_n an+1=an b n + 1 = x n b_{n+1}=x_n bn+1=xn。这样必定有 f ( a n + 1 ) f ( b n + 1 ) < 0 f(a_{n+1})f(b_{n+1})<0 f(an+1)f(bn+1)<0,所以[ a n + 1 , b n + 1 a_{n+1}, b_{n+1} an+1,bn+1]就是新的有根区间。继续上述过程即可。

  • MATLAB 程 序 实 现 程序实现

%Date:2019-10-28
%Writer:无名十三

%% 本程序目的是利用二分法输出非线性方程的数值解
function result = dichotomy(fun,x1,x2,eps) %参数fun为待输入函数,eps为容许误差,示例如下文
if nargin ~= 4
    errordlg('输入参数个数不符合要求!', 'Error!')  %参数输入报错
elseif fun(x1) * fun(x2) >= 0
    errordlg('二分法不能确定该区间内是否有根存在!', 'Warning!')
else
    is_eps = (x2-x1) / 2;
    x = (x2+x1) / 2;  
    while is_eps >= eps
        if fun(x) == 0
            fprintf('\n该方程的根为%f.\n\n', x)
            break
        elseif fun(x1)*fun(x) < 0
            x2 = x;
        elseif fun(x2)*fun(x) < 0
            x1 = x;
        end
        is_eps = (x2-x1) / 2;
        x = (x2+x1) / 2;        
    end
    if is_eps < eps
        fprintf('\n该方程的近似根为%f.\n\n', x)
    end
end
end
%%
  • 示例1:求非线性方程 s i n ( x ) = 0 sin(x)=0 sin(x)=0在区间[-0.7, 0.1]上的数值解。
>> dichotomy(@(x)sin(x), -0.7, 0.1, 0.0001)

该方程的近似根为-0.000098.
  • 示例2:求非线性方程 9 x 3 − 13 x + 97 = 0 9x^3-13x+97=0 9x313x+97=0在区间[-11, 29]上的数值解。
>> dichotomy(@(x)(9*x^3 - 13*x + 97), -11, 29, 0.0001)

该方程的近似根为-2.426163.
  • 结 束 语 : 上 述 代 码 根 据 本 人 理 解 进 行 整 理 编 写 , 如 有 错 误 或 不 妥 之 处 , 请 指 正 ! 结束语:上述代码根据本人理解进行整理编写,如有错误或不妥之处,请指正!

  • 参 考 文 献 参考文献
    [ 1 ] 黄 云 清 . 数 值 计 算 方 法 [ M ] . 北 京 . 科 学 出 版 社 . 2018 年 11 月 [1] 黄云清.数值计算方法[M].北京.科学出版社.2018年11月 [1].[M]...201811

你可能感兴趣的:(MATLAB基础)