设 f ( x ) f(x) f(x)在 [ a , b ] [a,b] [a,b]中有二阶连续导数,且满足条件:
(1)
f
(
a
)
⋅
f
(
b
)
<
0
;
f(a) \cdot f(b)<0;
f(a)⋅f(b)<0;
(2)
f
′
(
x
)
在
(
a
,
b
)
保号
;
f^{\prime}(x)在(a,b)保号;
f′(x)在(a,b)保号;
(3)
f
′
′
(
x
)
在
(
a
,
b
)
保号
;
f^{''}(x)在(a,b)保号;
f′′(x)在(a,b)保号;
取
x
0
x_0
x0是a和b满足:
f
(
x
0
)
⋅
f
′
′
(
x
0
)
>
0
f(x_0) \cdot f^{''}(x_0)>0
f(x0)⋅f′′(x0)>0
的那一个点,则以
x
0
x_0
x0为初值的
N
e
w
t
o
n
Newton
Newton迭代过程:
x
k
+
1
=
x
k
−
f
(
x
k
)
f
′
(
x
k
)
,
k
=
1
,
2
,
⋯
x_{k+1}=x_{k}-\frac{f(x_{k})}{f^{\prime}(x_{k})},k=1,2,\cdots
xk+1=xk−f′(xk)f(xk),k=1,2,⋯
产生的序列
x
n
{x_n}
xn单调收敛于方程
f
(
x
)
=
0
f(x)=0
f(x)=0
在
[
a
,
b
]
[a,b]
[a,b]中唯一解。
clear
% f: 表示要求解根的函数
syms x;
% f =sin(x) - x/2;
% f=x^3+3*x-5
f=exp(-x)-x
df=diff(f, x, 1);
% x0: 初始估计值
x0 = 0.5;
% maxIterations: 最大迭代次数
% tolerance: 容忍误差
x0 = 1;
maxIterations = 100;
tolerance = 1e-6;
% 初始化迭代次数和当前的近似根
iterations = 0;
root = x0;
% 开始迭代
while iterations < maxIterations
% 计算当前迭代的函数值和导数值
fval=double(subs(f, x, root));
dfval=double(subs(df, x, root));
% 使用Newton迭代公式更新根的值
root = root - fval / dfval;
% 检查是否满足容忍误差
if abs(fval) < tolerance
break;
end
iterations = iterations + 1;
end
fprintf('Root: %.6f\n', root);
fprintf('Iterations: %d\n', iterations);
% disp(root);%matlab默认为四位数字
% disp(iterations);