zoukankan      html  css  js  c++  java
  • 借助 Matlab 使用二分法求解方程的根

    第一次使用 Matlab,遂将过程详细记录之。

    20210317185838

    图中标注 ① 是工作目录,即代码存放的目录;标注 ② 是编辑器,即我们写代码的地方;标注 ③ 是命令行,是我们执行语句的地方。本次实验我们是在这里执行二分法的函数。

    例题: 应用二分法求解方程 (x^3 - x - 1 = 0) 在区间 ([1, 1.5]) 内的数值解 (x_k),要求绝对误差小于 (10^{-8}).

    解答 如下。

    代码:

    half.m 脚本:

    function x = half(a, b, tol)% tol 是 tolerance 的缩写,表示绝对误差
    c = (a + b) / 2; k = 1;
    m = 1 + round((log(b - a) - log(2 * tol)) / log(2)); % <1>
    while k <= m
        if f(c) == 0
            c = c;
        return;
        elseif f(a) * f(c) < 0
            b = (a + b) / 2;
        else
            a = (a + b) / 2;
        end
        c = (a + b) / 2; k = k + 1;
    end
    x = c; % 这里加分号是为了不再命令行中输出
    k % 不加分号就会在控制台输出
    c
    

    f.m 脚本,这是 half.m 中调用的 f() 函数。

    function y = f(x)
    y = x^3 - x -1;
    

    然后我们在命令行执行:

    20210317190826

    可以看出,最后求解得到的 (x = 1.3247),即输出的 ans,迭代次数 (k = 27).

    关于代码 half.m 中的标注 <1>,有如下解释:

    20210317191251

    20210317191337

    注意,在 Matlab 中,log() 函数的底是 (e).

    补充例题(感兴趣的朋友可以自行测试):

    20210317191627

  • 相关阅读:
    Openresty+redis实现灰度发布
    Nginx keepalived
    Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问
    MYCAT扩容
    MYCAT全局序列
    MYCAT分库分表
    MySQL主从复制
    [redis] linux下集群篇(4) docker部署
    [nginx] CORS配置多域名
    [mysql] 归档工具pt-archiver,binlog格式由mixed变成row
  • 原文地址:https://www.cnblogs.com/fanlumaster/p/14551258.html
Copyright © 2011-2022 走看看