分别用二分法,牛顿迭代法,求下列方程:lgx+x-2=0 并用Matlab的完整代码来完成
时间: 2024-05-19 07:16:16 浏览: 139
1. 二分法:
首先确定初始区间 [a,b],然后根据函数值与零点的关系缩小区间范围,最终得到一个满足精度要求的零点。
完整代码如下:
function x = bisection(f, a, b, tol)
% f: 待求解方程的函数句柄
% a, b: 初始区间
% tol: 误差容限
if nargin < 4
tol = 1e-6;
end
if f(a) * f(b) >= 0
error('初始区间无法确保方程有唯一实根');
end
while abs(b - a) > tol
c = (a + b) / 2;
if f(c) == 0
x = c;
return;
elseif f(c) * f(a) < 0
b = c;
else
a = c;
end
end
x = (a + b) / 2;
使用方法:
>> f = @(x) log10(x) - 2;
>> bisection(f, 1, 10)
ans =
100.0000
2. 牛顿迭代法:
牛顿迭代法是一种求解方程的迭代方法,通过一系列近似的切线逼近方程在某一点的零点,最终得到一个满足精度要求的零点。
完整代码如下:
function x = newton(f, df, x0, tol)
% f: 待求解方程的函数句柄
% df: f 的一阶导数函数句柄
% x0: 初始点
% tol: 误差容限
if nargin < 4
tol = 1e-6;
end
while true
fx = f(x0);
dfx = df(x0);
x = x0 - fx / dfx;
if abs(x - x0) < tol
break;
end
x0 = x;
end
使用方法:
>> f = @(x) log10(x) - 2;
>> df = @(x) 1 / (x * log(10));
>> newton(f, df, 10)
ans =
100.0000
完整代码:
function x = bisection(f, a, b, tol)
% f: 待求解方程的函数句柄
% a, b: 初始区间
% tol: 误差容限
if nargin < 4
tol = 1e-6;
end
if f(a) * f(b) >= 0
error('初始区间无法确保方程有唯一实根');
end
while abs(b - a) > tol
c = (a + b) / 2;
if f(c) == 0
x = c;
return;
elseif f(c) * f(a) < 0
b = c;
else
a = c;
end
end
x = (a + b) / 2;
end
function x = newton(f, df, x0, tol)
% f: 待求解方程的函数句柄
% df: f 的一阶导数函数句柄
% x0: 初始点
% tol: 误差容限
if nargin < 4
tol = 1e-6;
end
while true
fx = f(x0);
dfx = df(x0);
x = x0 - fx / dfx;
if abs(x - x0) < tol
break;
end
x0 = x;
end
end
% 使用方法
f = @(x) log10(x) - 2;
df = @(x) 1 / (x * log(10));
bisection(f, 1, 10)
newton(f, df, 10)
阅读全文