使用 MATLAB 编写三个程序,分别实现以下三个功能:

  1. 用逐步搜索法求方程 f(x) = x^3 - x - 1 = 0 的一个有根区间,要求有根区间的范围不得超过 0.1
  2. 用二分法求解方程 f(x) = 1 - x - sin(x) = 0 在区间 [0, 1] 内的一个实根,使误差不大于 0.5 * 10^-4
  3. 用迭代法求解方程 f(x) = x^3 - x - 1 = 0 在区间 [1.4, 1.6] 上的根,要求保留至少 5 位有效数字

1. 逐步搜索法求方程有根区间

function [a,b] = searchRoot(f,a0,b0,delta)
% f: 方程函数句柄
% a0, b0: 初始搜索区间
% delta: 搜索步长
% 返回搜索到的有根区间[a,b]

a = a0;
b = b0;
fa = f(a);
fb = f(b);

while fa*fb > 0 || abs(b-a) > 0.1
    if abs(fa) < abs(fb)
        a = a - delta;
        fa = f(a);
    else
        b = b + delta;
        fb = f(b);
    end
end
end

2. 二分法求解方程

function root = bisection(f,a,b,tol)
% f: 方程函数句柄
% a, b: 初始搜索区间,要求f(a)*f(b)<0
% tol: 误差容限
% 返回方程的一个实根

fa = f(a);
fb = f(b);

if fa*fb>0
    error('初始搜索区间无法保证方程有根')
end

while abs(b-a) > tol
    c = (a+b)/2;
    fc = f(c);
    if fc==0
        root = c;
        return
    end
    if fa*fc<0
        b = c;
        fb = fc;
    else
        a = c;
        fa = fc;
    end
end

root = (a+b)/2;
end

3. 迭代法求解方程

function root = iteration(f,x0,tol)
% f: 方程函数句柄
% x0: 初始迭代点
% tol: 误差容限
% 返回方程的一个实根

g = @(x) x + f(x)/3/x^2 - 1/3;
x = x0;
for i = 1:100
    xnew = g(x);
    if abs(xnew - x) < tol
        root = xnew;
        return
    end
    x = xnew;
end

error('迭代法未收敛')
end

原文地址: https://www.cveoy.top/t/topic/nama 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录