MATLAB 方程求解算法:逐步搜索法、二分法和迭代法
使用 MATLAB 编写三个程序,分别实现以下三个功能:
- 用逐步搜索法求方程 f(x) = x^3 - x - 1 = 0 的一个有根区间,要求有根区间的范围不得超过 0.1
- 用二分法求解方程 f(x) = 1 - x - sin(x) = 0 在区间 [0, 1] 内的一个实根,使误差不大于 0.5 * 10^-4
- 用迭代法求解方程 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 著作权归作者所有。请勿转载和采集!