非線性方程二分法
優(yōu)點(diǎn):算法直觀、簡(jiǎn)單、總能保證收斂;局限:收斂速度慢、一般不單獨(dú)用它求根,僅為了獲取根的粗略近似
1 二分法基本思想
設(shè)
f
(
x
)
f(x)
f(x)在
[
a
,
b
]
[a,b]
[a,b]上連續(xù)、嚴(yán)格單調(diào)、滿足條件
f
(
a
)
f
(
b
)
<
0
f(a)f(b)<0
f(a)f(b)<0
則在區(qū)間
[
a
,
b
]
[a,b]
[a,b]內(nèi)必有一根
x
?
x^*
x?。通過(guò)反復(fù)對(duì)分有根區(qū)間,以極限思想求解出非線性方程的數(shù)值解。具體步驟如下:
- 取
[
a
,
b
]
[a,b]
[a,b]的中點(diǎn)
x
0
=
(
a
+
b
)
/
2
x_0=(a+b)/2
x0?=(a+b)/2,計(jì)算
f
(
x
0
)
f(x_0)
f(x0?),當(dāng)
- f ( a ) f ( x 0 ) < 0 f(a)f(x_0)<0 f(a)f(x0?)<0,則令 a 1 = a , b 1 = x 0 a_1=a,b_1=x_0 a1?=a,b1?=x0?;
- f ( x 0 ) f ( b ) < 0 f(x_0)f(b)<0 f(x0?)f(b)<0,則令 a 1 = x 0 , b 1 = b a_1=x_0,b_1=b a1?=x0?,b1?=b;
通過(guò)重復(fù)上述步驟,得到一系列有根區(qū)間
[
a
,
b
]
?
[
a
1
,
b
1
]
?
[
a
2
,
b
2
]
?
?
?
…
[a,b]\supset [a_1,b_1]\supset[a_2,b_2]\supset\dots \supset\dots
[a,b]?[a1?,b1?]?[a2?,b2?]???…
由于后一個(gè)區(qū)間長(zhǎng)度是前一個(gè)區(qū)間的一半,通過(guò)遞歸公式求解出區(qū)間長(zhǎng)度的通項(xiàng)公式
b
k
?
a
k
=
b
?
a
2
k
b_k-a_k=\frac{b-a}{2^k}
bk??ak?=2kb?a?
當(dāng)
k
→
∞
k\to \infty
k→∞時(shí),
∣
∣
b
k
?
a
k
∣
∣
→
0
||b_k-a_k||\to0
∣∣bk??ak?∣∣→0,此時(shí)序列
{
a
k
}
,
{
b
k
}
,
{
x
k
}
→
x
?
\{a_k\},\{b_k\},\{x^k\} \to x^*
{ak?},{bk?},{xk}→x?,其中
x
?
=
a
k
+
b
k
2
x^*=\frac{a_k+b_k}{2}
x?=2ak?+bk??
由于方程根和中點(diǎn)間的距離真包含于
[
a
k
,
b
k
]
[a_k,b_k]
[ak?,bk?],故收斂速度
0
≤
∣
x
?
?
x
k
∣
≤
(
b
k
?
a
k
)
/
2
=
(
b
?
a
)
/
2
k
+
1
0\le|x^*-x_k|\le(b_k-a_k)/2=(b-a)/2^{k+1}
0≤∣x??xk?∣≤(bk??ak?)/2=(b?a)/2k+1
當(dāng)
k
→
∞
k\to \infty
k→∞時(shí),利用夾逼定理
lim
?
k
→
∞
0
≤
lim
?
k
→
∞
∣
x
?
?
x
k
∣
≤
lim
?
k
→
∞
(
b
?
a
)
/
2
k
+
1
=
0
\mathop {\lim }\limits_{k\to \infty}0 \le \mathop {\lim }\limits_{k\to \infty}|x^*-x_k|\le\mathop {\lim }\limits_{k\to \infty}(b-a)/2^{k+1}=0
k→∞lim?0≤k→∞lim?∣x??xk?∣≤k→∞lim?(b?a)/2k+1=0
故有
x
k
→
x
?
x^k\to x^*
xk→x?。給定終止條件
ε
\varepsilon
ε,當(dāng)
(
b
?
a
)
/
2
k
+
1
<
ε
(b-a)/2^{k+1}<\varepsilon
(b?a)/2k+1<ε
時(shí),可求出滿足精度
ε
\varepsilon
ε的最少二分次數(shù)
k
k
k。
2 二分法實(shí)現(xiàn)
求解:
f
(
x
)
=
2
x
+
x
?
2
f(x)=2^x+x-2
f(x)=2x+x?2
function[xstar,index,it] = bisect(fun,a,b,ep)
% 非線性方程二分法
% fun為目標(biāo)函數(shù)
% a,b為初始區(qū)間
% ep為精確度,當(dāng)(b-a)/2<ep循環(huán)結(jié)束,迭代失敗輸出兩端點(diǎn)函數(shù)值
% index指標(biāo)變量,index = 1,迭代成功,index = 0表明初始區(qū)間不是有根區(qū)間
% it迭代次數(shù)
if nargin < 4
ep = 1e-5;
end
fa = feval(fun,a); %計(jì)算a處的函數(shù)值
fb = feval(fun,b); %計(jì)算b處的函數(shù)值
if fa*fb>0
xstar = [fa,fb];
index = 0;
it = 0;
return
end
k = 0;
while abs(b-a)/2 >= ep
x = (a+b)/2;
fx = feval(fun,x);
if fx*fa<0
b = x;fb = fx;
else
a = x;fa = fx;
end
k = k +1;
end
xstar = (a+b)/2;index = 1;it = k
%具體函數(shù)
function f = fun1(x)
%測(cè)試函數(shù)
f = 2^x+x-2; %任意可改
end
format long
[xstar,index,it] = bisect(@fun1,0,2,0.0000001)
xstar = 0.543000400066376
index = 1
it = 24
參考文獻(xiàn)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-440421.html
曾繁慧. 數(shù)值分析[M]. 中國(guó)礦業(yè)大學(xué)出版社,2009文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-440421.html
到了這里,關(guān)于非線性方程二分法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!