1. 基本問題
收斂階
lim
?
k
→
∞
∣
e
k
+
1
∣
∣
e
k
∣
r
=
C
>
0
??
,
??
r
為收斂階
\lim_{k\to\infty} \frac{|e_{k+1}|}{|e_k|}^r=C>0 \,\,,\,\, r為收斂階
k→∞lim?∣ek?∣∣ek+1?∣?r=C>0,r為收斂階
2. 二分法
二分法是線性收斂的,如果指定精度
?
{ \epsilon }
? ,則最多需要迭代步數(shù)
k
=
?
log
?
2
(
b
?
a
?
)
?
k= \lceil \log_2(\frac{b-a}{\epsilon }) \rceil
k=?log2?(?b?a?)?
matlab實現(xiàn)
%% 二分法例子
f = @(x) x^3-x-1;
format long
[x,i] = bisect(f,1,2,1e-5,1000)
%% 二分法求非線性方程的根
% 輸入函數(shù),范圍,精度,最大迭代次數(shù)
% 輸出根,迭代次數(shù)
function [x,i] = bisect(f,a,b,eps,max_iter)
if sign(f(a))~=sign(f(b))
for i = 1:max_iter
c = a/2+b/2;
if (b-a)<eps || abs(f(c))<eps
x = c;
break
end
if sign(f(a))==sign(f(c))
a = c;
else
b = c;
end
end
end
end
3. 不動點迭代加速
不動點
x
=
x
?
{x=x ^{*} }
x=x?
x
k
+
1
=
?
(
x
k
)
x_{k+1}=\phi(x_k)
xk+1?=?(xk?)
x
k
+
1
?
x
?
=
?
(
x
k
)
?
?
(
x
?
)
=
?
′
(
ξ
k
)
(
x
k
?
x
?
)
??
,
??
ξ
k
∈
(
x
k
,
x
?
)
x_{k+1}-x ^{*} =\phi(x_k)-\phi(x ^{*} )=\phi'(\xi_k)(x_k-x ^{*} ) \,\,,\,\, \xi_k\in(x_k,x ^{*} )
xk+1??x?=?(xk?)??(x?)=?′(ξk?)(xk??x?),ξk?∈(xk?,x?)
let
???
?
′
(
ξ
k
)
=
L
\text{let} \,\,\, \phi'(\xi_k) =L
let?′(ξk?)=L
x
?
≈
x
k
+
1
?
L
x
k
1
?
L
=
?
ˉ
(
x
)
x ^{*} \approx \frac{x_{k+1}-Lx_k}{1-L}=\bar\phi(x)
x?≈1?Lxk+1??Lxk??=?ˉ?(x)
為加速后的不動點迭代格式。
6. 割線法
割線法比起牛頓迭代法不需要計算導(dǎo)數(shù)。
雙點割線法
需要知道兩個的函數(shù)初始值,不需要函數(shù)值異號。迭代公式如下:
x
k
+
1
=
x
k
?
f
(
x
k
)
x
k
?
x
k
?
1
f
(
x
k
)
?
f
(
x
k
?
1
)
x_{k+1}=x_k-f(x_k) \frac{x_k-x_{k-1}}{f(x_k)-f(x_{k-1})}
xk+1?=xk??f(xk?)f(xk?)?f(xk?1?)xk??xk?1??
收斂階:
r
=
5
+
1
2
≈
1.618
r= \frac{\sqrt{5}+1}{2} \approx 1.618
r=25?+1?≈1.618
matlab編程實現(xiàn)文章來源:http://www.zghlxwxcb.cn/news/detail-815155.html
%% 割線法例子
f = @(x) x-sin(x)-0.5;
[x,e,i] = cutSolve(f,1.4, 1.6, 0.01, 100)
%% 雙點割線法
% 輸入函數(shù),根所在的區(qū)間下限上限,精度,最大迭代次數(shù)
% 輸出根,根的值,迭代次數(shù)
function [x,e,i] = cutSolve(f,a,b,eps,max_iter)
x0 = a;
x1 = b;
for i = 1:max_iter
x = -f(x0)*(x1-x0)/(f(x1)-f(x0))+x0
if abs(x-x1)<=eps
e = abs(f(x));
break;
end
x0=x1;
x1=x;
end
end
單點割線法
固定初始點,有
x
k
+
1
=
x
k
?
f
(
x
k
)
x
k
?
x
0
f
(
x
k
)
?
f
(
x
0
)
x_{k+1}=x_k-f(x_k) \frac{x_k-x_{0}}{f(x_k)-f(x_{0})}
xk+1?=xk??f(xk?)f(xk?)?f(x0?)xk??x0??
算是一種不動點迭代。文章來源地址http://www.zghlxwxcb.cn/news/detail-815155.html
到了這里,關(guān)于【數(shù)值分析】非線性方程求根,二分法,割線法,matlab實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!