241
CHƯƠNG 5: CÁC PHƯƠNG TRÌNH PHI TUYẾN
§1.KHÁINIỆMCHUNG
Nếuphươngtrìnhđạisốhaysiêuviệtkháphứctạpthìítkhitìmđược
nghiệmđúng.Bởivậyviệctìmnghiệmgầnđúngvàướclượngsaisốlàrất
c
ầnthiết.
Taxétphươngtrình:
f(x)=0(1)
vớif(x)làhàmchotrướccủabiếnx.Chúngtacầntìmgiátrịgầnđúngcủa
nghiệmcủaphươngtrìnhnày.
Quátrìnhgi
ảithườngchialàmhaibước:bướcsơbộvàbướckiệntoàn
nghiệm.
Bước giải sơ bộ có 3 nhiệm vụ: vây nghiệm,tách nghiệmvàthuhẹp
khoảngchứanghiệm.
Vây
nghiệmlàtìmxemcácnghiệmcủaphươngtrìnhcóthểnằmtrên
nhữngđoạnnàocủatrụcx.Táchnghiệmlàtìmcáckhoảngchứanghiệmsao
cho trong mỗi khoảng chỉ cóđúng m
ột nghiệm. Thu hẹp khoảng chứa
nghiệmlà làmchokhoảngchứanghiệmcàngnhỏcàngtốt.Saubướcsơbộta
cókhoảngchứanghiệmđủnhỏ.Đểxácđịnhkhoảngchứanghiệmta
cóthể
dùngphươngphápđồthị.Ngoàiratacũngcóthểtìmnghiệmbằngphương
pháptìmtăngdần.Ýtưởngcủaphươngphápnàylànếyf
1(x).f2(x)<0thìcóít
nhấtmộtnghiệmcủaphươngtrìnhtrongđoạn[x
1,x2].Nếuđoạn[x1,x2]đủ
nhỏthìtrongđạonđósẽcómộtnghiệmduynhất.Nhưv ậytacóthểphát
hiệnranghiệmbằngcáchtínhtrịcủahàmtrêncácđoạn∆xvàxemchúngcó
đổidấukhông.
Taxây
dựnghàmrootsearch()đểtìmkhoảngchứanghiệm.
function[x1,x2]=rootsearch(func,a,b,dx)
%Timdoanchuanghiemcuahamf(x).
%Cuphap:[x1,x2]=rootsearch(func,a,d,dx)
%func=hamf(x).
%a,b=daontim.
%dx=khoangtang
%x1,x2=doanchunghiem
(a,b);
%datlaNaNneukhongthaynghiem
242
x1=a;f1=feval(func,x1);
x2=a+dx;f2=feval(func,x2);
whilef1*f2>0.0
ifx1>=b
x1=NaN;x2=NaN;
return
end
x1=x2;f1=f2;
x2=x1+dx;f2=feval(func,x2);
end
Khipháthi
ệnthấykhoảng chứanghiệm,hàm trảvềgiátrịbiên củađoạn.
Nếukhôngcónghiệm,x1=x2=NaN.Tagọirootsearch()nhiềulầnđểphát
hiệnhếtcácđoạnchứanghiệm.
Vớivídụtìmkhoảngchứanghiệmcủahàm
f(x)=x
3
‐10x
2
+5tadùngchươngtrìnhctrootsearch.m
clearall,clc
f=inline(ʹx^3‐10*x^2+5ʹ);
[x1,x2]=rootsearch(f,2,10,.2)
Bướckiệntoànnghiệmtìmcácnghiệmgầnđúngtheoyêucầuđặtra.
Córấtnhiềuph
ươngphápxácđịnhnghiệmcủa(1).Sauđâychúngta
xéttừngphươngpháp.
§2.PHƯƠNGPHÁPLẶPĐƠN
Giảsửphươngtrình(1)đượcđưavềdạngtươngđương:
x=g(x)(2)
từgiátrịx
onàođógọilàgiátrịlặpđầutiêntalậpdãyxấpxỉbằngcôngthức:
x
n=g(xn‐1)(3)
vớin=1,2,
Hàmg(x)đượcgọilàhàmlặp.Nếudãyx
n→αkhin→∝thìtanóiphéplặp
(3)hộitụ.
Tacóđịnhlí:Xétphươngpháplặp(3),giảsử:
‐[a,b]làkhoảngchứanghiệmαcủaphươngtrình(1)tứclàc
ủa(2)
‐mọix
ntínhtheo(3)đềuthuộc[a,b]
‐g(x)cóđạohàmthoảmãn:
243
g(x) q 1 a x b
′
≤< <<(4)
trongđóqlàmộthằngsốthìphươngpháplặp(3)hộitụ
Tacóthểminhhoạphéplặptrênbằnghìnhvẽsau.
Taxâydựnghàm
simpiter()đểlặp
function[x,err,xx]=simpiter(g,x0,tolx,maxiter)
%giaiptx=g(x)tux0bangcahlap
%vao:g,x0=hamvagiatridau
%tolx=saisomongmuon
%maxiter=solanlapmax
%ra:x=nghiem
%err=
saiso|x(k)‐x(k‐1)|
%xx=cacgiatritrunggian
ifnargin<4
maxiter=100;
end
ifnargin<3
tolx=1e‐6;
end
xx(1)=x0;
fork=2:maxiter
xx(k)=feval(g,xx(k‐1));
err=abs(xx(k)‐xx(k‐1));
if
err<tolx
break;
end
x1
xo
x1
xo
244
end
x=xx(k);
ifk==maxiter
fprintf(ʹKhonghoitusau%dlanlap\nʹ,maxiter)
else
fprintf(ʹHoitusau%dlanlap\nʹ,k)
end
Đểtínhlạivídụtrêntadùngchươngtrình
ctsimpiter4_2.m
clearall,clc
f=inline(ʹ‐0.5*((x‐1).^2‐3)ʹ);
[x,ss,xx]=simpiter(f,0.5,.00001,200)
§3.PHƯƠNGPHÁPCHIAĐÔICUNG
Giả sử cho phương trình f(x) = 0 với
f(x)liêntụctrênđoạn[a,b]vàf(a).f(b)<0.
Chiađoạn [a, b]thành 2 phần bởi chính
điểmchia(a+b)/2.
1.Nếuf((a+b)/2)=0thì
ξ=(a+b)/2
2. Nếu f((a + b)/2) ≠ 0 thì chọn
[a,(a+b)/2]hay[(a+ b)/2,b]màgiátrịhàm
haiđầutráidấuvàkíhiệulà[a
1,b1].Đốivới
[a
1,b1]talạitiếnhànhnhư[a,b].
Taxâydựnghàm
bisection()thựchiệnthuậttoántrên
function[x,err,xx]=bisection(f,a,b,tolx,maxiter)
%bisection.mdegiaiptf(x)=0bangphuongphapchiadoicung
%vao:f=hamcantimnghiem
%a/b=biencuadoancantimnghiem
%tolx=saisomongmuon
%maxiterlanlapmax
%ra:x
=nghiem
%err=saiso
%xx=cacgiatritrunggian
y
x
a
b
ξ
b
1
245
tol=eps;
fa=feval(f,a);
fb=feval(f,b);
iffa*fb>0
error(ʹNghiemkhongotrongdoannayʹ);
end
fork=1:maxiter
xx(k)=(a+b)/2;
fx=feval(f,xx(k));
err=(b‐a)/2;
ifabs(fx)<tol|abs(err)<
tolx
break;
elseiffx*fa>0
a=xx(k);
fa=fx;
elseb=xx(k);
end
end
x=xx(k);
ifk==maxiter
fprintf(ʹKhonghoitusau%dlanlap\nʹ,maxiter),
else
fprintf(ʹHoitusau%dlanlap\nʹ,k),
end
Đểtìmnghiệmcủahàmf(x)=tg(π‐)‐xtadùngchươngtrình
ctbisection.m
clearall,clc
f=inline(ʹtan(pi‐x)‐xʹ);
[x,ss,xx]=bisection(f,1.6,3,1e‐4,50)
§4.PHƯƠNGPHÁPDÂYCUNG
Giảsửf(x)liêntụctrêntrênđoạn[a,b]vàf(a).f(b)<0.Cầntìmnghiệm
củaf(x)= 0.Đểxácđịnhtaxemf(a)<0vàf(b)>0.Khiđóthayvìchiađôi
đoạn[a,b]tachia[a,b]
theotỉlệ‐f(a)/f(b).Điềuđóchotanghiệmgầnđúng:
x
1=a+h1
246
Trongđó
1
f(a)
(b a)
h
f(a) f(b)
=
−
−
−+
Tiếptheodùngcáchđóvớiđoạn[a,x
1]
hay[x
1,b]màhaiđầuhàmnhậngiátrịtrái
dấutađượcnghiệmgầnđúngx
2v.v.
Vềmặthìnhhọc,phươngphápnàycó
nghĩalàkẻdâycungcủađườngcongf(x)
quahaiđiểmA[a,f(a)]vàB[b,f(b)]haynóicáchkháclàtuyếntínhhoáhàm
f(x)trongđoạn[a,b].
Thật
vậyphươngtrìnhdâycungABcódạng:
f(a) f(b) af(b) bf(a)
yx
ab ab
−−
=+
−−
Chox=x
1,y=0tacó
1
af(b) bf(a)
x
f( b) f(a)
−
=
−
(1)
Taxâydựnghàm
chord()đểthựchiệnthuậttoántrên
function[x,err,xx]=chord(f,a,b,tolx,maxiter)
%giaiptf(x)=0bgphuongphapdaycung.
%vao:f‐hamcantimnghiem
%a/b‐khoangtimnghiem
%tolx‐saisomongmuoncuanghiem
%maxiterlanlapmax
%ra:x‐nghiem
%err‐sai
so
%xx‐cacgiatritrunggian
tolfun=eps;
fa=feval(f,a);
fb=feval(f,b);
iffa*fb>0
error(ʹNghiemkhongotrongdoannay!ʹ);
end
fork=1:maxiter
xx(k)=(a*fb‐b*fa)/(fb‐fa);%pt.(1)
fx=feval(f,xx(k));
err=min(abs(xx(k)‐a),abs(b‐xx(k)));
a
b
x
y
x1
ξ
247
ifabs(fx)<tolfun|err<tolx
break;
elseiffx*fa>0
a=xx(k);
fa=fx;
else
b=xx(k);
fb=fx;
end
end
x=xx(k);
ifk==maxiter
fprintf(ʹKhonghoitusau%dlanlap\nʹ,maxiter)
else
fprintf(ʹ
Hoitusau%dlanlap\nʹ,k)
end
Đểtìmnghiệmcủahàmf(x)=tg(π‐x)‐xtadùngchươngtrình
ctchord.m
clearall,clc
f=inline(ʹtan(pi‐x)‐xʹ);
[x,ss,xx]=falsp(f,1.7,3,1e‐4,50)
§5.PHƯƠNGPHÁPNEWTON‐RAPHSON
Phương pháp lặp Newton(còn gọi là ph ương pháp tiếp tuyến)được
dùngnhiềuvìnóhộitụnhanh.Tuynhiênphươngphápnàyđòihỏitínhfʹ(x).
CôngthứcNewton‐RaphsonđượcsuytừkhaitriểnTaylorc
ủaf(x)lâncậnx:
2
i1 i i i1 i i1 i
f(x ) f(x) f(x)(x x) O(x x)
+++
′
=+ −+ −(1)
Nếux
i+1lànghiệmcủaphươngtrìnhf(x)=0thì(1)trởthành:
2
iii1i i1i
0 f(x ) f (x )(x x ) O(x x )
++
′
=+ −+ −(2)
Giảsửrằngx
igầnvớixi+1,tacóthểbỏquasốhạngcuốitrong(2)vàcócông
thứcNewton‐Raphson:
i
i1 i
i
f(x )
xx
f(x)
+
=−
′
(3)
Nếux
i+1lànghiệmđúngcủaphươngtrìnhthìsaisốlàei=x‐xi.Khinghiệm
đượctínhtheo(3)thìsaisốlà:
248
2
i
i1 i
i
f(x)
ee
2f (x )
+
′′
=−
′
Minh hoạ hình học của thuật toán
Newton‐Raphsonnhưhìnhbên.
Thuậttoánđượctómlượcnhưsau:
‐chox
o
‐tính
f(x)
x
fʹ(x)
∆=−
‐chox=x+∆x
‐lặplạibước2và3chođếnkhi|∆x|≤ε
Taxâydựnghàm
newtonraphson()đểthựchiệnthuậttoántrên.
function[x,fx,xx]=newtonraphson(f,df,x0,tolx,maxiter)
%giaiptf(x)=0bangppNewton‐Raphson.
%vao:f=ftntobegivenasastring’f’ifdefinedinanM‐file
%df=df(x)/dx(neukhongchosedungdaohamso.)
%x0
=giatribandau
%tolx=saisomongmuon
%maxiter=solanlapmax
%ra:x=nghiem
%fx=f(x(last)),xx=cacgiatritrunggian
h=1e‐4;
h2=2*h;
tolf=eps;
ifnargin==4&isnumeric(df)
maxiter=tolx;
tolx=x0;
x0=df;
end
xx(1)=x0;
fx=feval(f,x0);
fork=1:maxiter
if~isnumeric(df)
dfdx=feval(df,xx(k));%daohamcuaham
else
dfdx=(feval(f,xx(k)+h)‐feval(f,xx(k)‐h))/h2;%daohamso
a
b
=xo
x1
y
x
249
end
dx=‐fx/dfdx;
xx(k+1)=xx(k)+dx;%pt.(3)
fx=feval(f,xx(k+1));
ifabs(fx)<tolf|abs(dx)<tolx,
break;
end
end
x=xx(k+1);
ifk==maxiter
fprintf(ʹKhonghoitusau%dlanlap\nʹ,maxiter)
else
fprintf(ʹ
Hoitusau%dlanlap\nʹ,k)
end
Để tính lại nghiệm của hàm cho trong ví dụ trên ta dùng chương trình
ctnewraph.m
clearall,clc
f=inline(ʹx.^3‐10*x.^2+5ʹ);
[x,ss,xx]=newtonraphson(f,0.7,1e‐4,50)
§6.PHƯƠNGPHÁPCÁTTUYẾN
Phươngphápcáttuy ếncóthểcoilàbiếnthểcủaphươngphápNewton
‐Raphsontheonghĩađạohàmđượcthaybằngxấpxỉ:
kk1
kk1
f( x ) f(x )
f(x)
xx
−
−
−
′
≈
−
(1)
vàtốnítthờigiantínhhơnkhidùngđạohàmgiảitíchhayđạohàmsố.
Bằngcáchxấpxỉ,biểuthức:
k
k1 k
k
f(x )
xx
f(x )
+
=−
′
trởthành:
−
+
−
⎡⎤
−
=− =−
⎢⎥
−
⎣⎦
kk1 k
k1 k k k
kk1 k
xx f(x)
xxf(x) x
f(x ) f(x ) dfdx
(2)
với
kk1
k
kk1
f( x ) f(x )
dfdx
xx
−
−
−
=
−
250
Phươngtrình(2)chínhlàbiểuthứctổngquátcủaphéplặp.Haigiátrịđầu
tiênx
1vàx2cầnđểkhởiđộngphépl ặp.Quátrìnhlặpđượcminhhoạbằng
hìnha
Phéplặpcóthểkhônghộitụ(hìnhb).Tuynhiênkhihộitụ,nóhộirấtnhanh.
Taxâydựnghàm
secant()đểthựchiệnthuậttoántrên.
function[x,fx,xx]=secant(f,x0,x1,tolx,maxiter)
%giaiptf(x)=0bgphuongphapdaycung
%vao:f‐hamcantimnghiem
%x0,x1‐giatrikhoidongpheplap
%tolx‐saisomongmuon
%maxiter‐solanlapmax
%ra:x
=nghiem
%fx=f(x(last)),xx=cacgiatritrunggian
h=(x1‐x0)/100;
h2=2*h;
tolfun=eps;
xx(1)=x0;
fx=feval(f,x0);
fork=1:maxiter
ifk<=1
dfdx=(feval(f,xx(k)+h)‐feval(f,xx(k)‐h))/h2;
else
dfdx
=(fx‐fx0)/dx;
x0
x1
x2
f(x)
x
y
a
x0
x1
f(x)
x
y
b
251
end
dx=‐fx/dfdx;
xx(k+1)=xx(k)+dx;%pt.(2)
fx0=fx;
fx=feval(f,xx(k+1));
ifabs(fx)<tolfun|abs(dx)<tolx,
break;
end
end
x=xx(k+1);
ifk==maxiter
fprintf(ʹKhonghoitusau%dlan
lap\nʹ,maxiter)
else
fprintf(ʹHoitusau%dlanlap\nʹ,k)
end
Đểtính nghiệm của hàm f(x) = x
3
‐10x
2
+ 5 ta dùng chương trình
ctsecant.m
clearall,clc
f=inline(ʹx.^3‐10*x.^2+5ʹ);
[x,ss,xx]=secant(f,0.5,1,1e‐4,50)
§7.PHƯƠNGPHÁPBRENT
Phương pháp Brent kêt hợp phương pháp chiađôi cung và phương
phápnộisuybậchaiđểtạo ra mộtphươngpháptìmnghiệm của phương
trìnhf(x) =0rấthiệuquả.Phương
phápnàydùngkhiđạohàmcủaf(x)khó
tínhhaykhôngthểtínhđược.Giảsửtacầntìmnghiêmtrong đoạn[x
1,x2].
Quátrìnhtìmnghiệmbắtđầubằngviệcchiađôiđoạn[x
1,x2]bằngđiểmx3.
x2
x
x3
x
x1
x
x3
x
x2
x1
252
Trongquátrìnhnàytatínhđượcf(x1),f(x2)vàf(x3).Qua 3điểm nàytacómột
đườngcongbậc2vàtìmđượcnghiệmxcủađườngcongbậc2này.Nếux
nằmtrongđoạn[x
1,x2]nhưhìnhtrên thìgiátrịnàyđượcchấpnhận. Tiếp
theotatìmnghiệmtrongđoạn[x
1,x3]hay[x3,x2]tuỳtheovịtrícủax.
ĐathứcnộisuyLagrangequa3điểmlà:
23 13 12
123
1213 2123 3132
(f f )(f f ) (f f )(f f ) (f f )(f f )
x(y) x x x
(f f )(f f ) (f f )(f f ) (f f )(f f )
−− −− −−
=++
−− −− −−
Choy=0tacó:
2312 3 1323 1 1231 2
122331
ffx(f f) ffx(f f) ffx(f f)
x
(f f )(f f )(f f )
−+ −+ −
=−
−−−
(1)
Độthayđổicủanghiệmlà:
31 2 2 3 1 212 3 123 1
33
122331
x (f f )( f f f ) f x (f f ) f x (f f )
xxx f
(f f )(f f )(f f )
−−++ −+ −
∆= − =
−−−
(2)
Taxâydựnghàm
brent()đểthựchiệnthuậttoántrên
functionroot=brent(f,a,b,tol)
%giaiptf(x)=0bangthuattoanBrent.
%Cuphap:root=brent(f,a,b,tol)
%vao:f=hamcantimnghiem
%a,b=doanchuanghiem
%tol=saisochotruoc
ifnargin<
4;
tol=1.0e6*eps;
end
%lanchiadoidautien
x1=a;
f1=feval(f,x1);
iff1==0;
root=x1;
return;
end
x2=b;
f2=feval(f,x2);
iff2==0;
root=x2;
return;
253
end
iff1*f2>0.0
error(ʹNghiemkhongnamtrongdoannayʹ)
end
x3=0.5*(a+b);
%batdaulap.
fori=1:30
f3=feval(f,x3);
ifabs(f3)<tol
root=x3;
return
end
%xacdinhdoanchuanghiem.
if
f1*f3<0.0;
b=x3;
else
a=x3;
end
if(b‐a)<tol*max(abs(b),1.0)
root=0.5*(a+b);
return
end
%noisuybac2.
denom=(f2‐f1)*(f3‐f1)*(f2‐f3);
numer=x3*(f1‐f2)*(f2‐f3+f1)
+f2*x1*(f2‐f3)+
f1*x2*(f3‐f1);
ifdenom==0;
dx=b‐a;
else
dx=f3*numer/denom;
end
x=x3+dx;
%neulaprangoaidoan(a,b),dungcachchiadoicung
if(b‐x)*(x‐a)<0.0
dx=0.5*(b‐a);
x=a+dx;
254
end
%chox=x3&chonx1,x2moisaochox1<x3<x2.
ifx<x3
x2=x3;
f2=f3;
else
x1=x3;
f1=f3;
end
x3=x;
end
root=NaN;
Để tìm nghiệm của phương trìnhx|cos(x)|‐1 = 0 ta dùng chương trình
ctbrent.m
clearall,clc
f=inline(ʹx.*abs(cos(x))‐1ʹ);
x=brent(f,0.0,4,1e‐4)
§8.PHƯƠNGPHÁPNGOẠISUYAITKEN
Xétphươngpháplặp:
x=f(x)(1)
vớif(x)thoảmãnđiềukiệnhộitụcủaphéplặp,nghĩalàvớimọix∈[a,b]ta
có:
|f’(x)|≤q<1(2)
Nhưvậ
y:
x
n+1=f(xn)(3)
x
n=f(xn‐1)(4)
Trừ(3)cho(4)vàápdụngđịnhlíLagrangechovếphảivớic∈[a,b]tacó:
x
n+1‐xn=f(xn)‐f(xn‐1)=(xn‐xn‐1)f’(c)(5)
Vìphéplặp(1)nên:
|x
n+1‐xn|≤q|xn‐xn‐1|(6)
Do(6)đúngvớimọinnênchon=1,2,3,...tacó:
|x
2‐x1|≤q|x1‐xo|
|x
3‐x2|≤q|x2‐x1|
255
...................
|x
n+1‐xn|≤q|xn‐xn‐1|
Điềunàycónghĩalàdãyx
i+1‐xi,mộtcáchgầnđúng,là mộtcấpsốnhân.Ta
cũngcoirằngdãyx
n‐yvớiylànghiệmđúngcủa(1),gầnđúngnhưmộtcấp
sốnhâncócôngsaiq.Nhưvậy:
n1
n
xy
q1
xy
+
−
=<
−
(7)
hay:
n1 n
xyq(xy)
+
−= − (8)
Tươngtựtacó:
n2 n1
xyq(xy)
++
−= − (9)
Từ(8)và(9)tacó:
n2 n1
n1 n
xx
q
xx
++
+
−
=
−
(10)
Thaygiátrịcủaqvừatínhở(10)vàobiểuthứccủaqởtrêntacó:
(
)
2
nn1
n
nn1n2
xx
yx
x2x x
+
++
−
=−
−+
(11)
Công thức (11)được gọi là công thức ngoại suy Adam. Nhưvậytheo(11)
trướchếttadùngphươngpháplặpđểtínhgiátrịgầnđúngx
n+2,xn+1,xncủa
nghiệmvàsauđótheo(11)tìmđượcnghiệmvớisaisốnhỏhơn.
Khi phương pháp lặpđược k ết hợp với phương pháp Aitken ta có
phươngphápSteffensen.Bắtđầulặptừx
0,haibướclặpđượcdùngđểtính:
x
1=f(x0) x2=f(x1)
vàsauđódùngthuậttoánAitkenđểtinhy
0theo(11).Đểtiếptụclặptacho
x
0=y0vàlặplạibướctínhtrước.
Taxâydựnghàm
aitstef()đểthựchiệnhaithuậttoántrên
function[x,y]=aitstef(g,x0,tolx,maxiter)
%phuongphapAitken‐Steffenson
%giaiptx=g(x)
xstart=x0;
f0=0;
f0old=1.;
count=0;
while((count<maxiter)&(abs(f0‐f0old)>.0000001))
count=count+1;
f0old=f0;
256
x1=feval(g,x0);
x2=feval(g,x1);
f0=x0‐(x1‐x0)*(x1‐x0)/(x2‐2.*x1+x0);
x0=x1;
end
x=f0;
fprintf(ʹ\nʹ);
fprintf(ʹPhuongphapAitken‐Steffensonʹ);
x0=xstart;
count=0;
f0=0;
x2=1.;
while((count
<maxiter)&(abs(f0‐x2)>.0000001))
count=count+1;
x1=feval(g,x0);
x2=feval(g,x1);
f0=x0‐(x1‐x0)*(x1‐x0)/(x2‐2.*x1+x0);
x0=f0;
end
y=f0;
Đểtìm nghiệmcủaphươngtrìnhx=(2‐e
x
+x
2
)/3=g(x)tadùngchươngtrình
ctaitstef.m
clearall,clc
f=inline(ʹ(2.‐exp(x)+x.^2)/3ʹ);
[x,y]=aitstef(f,0.,1e‐4,50)
§9.PHƯƠNGPHÁPMUELLER
Trongphươngphápdâycungkhitìmnghiệmtrongđoạn[a,b]taxấp
xỉ hàm bằng mộtđường thẳng. Tuy nhiênđểgiảm lượng tính toán vàđể
nghiệmhộitụnhanhhơntacóthểdùngphương
phápMuller.Nộidungcủa
phươngphápnàylàthayhàmtrongđoạn[a,b]bằngmộtđườngcongbậc2
màtahoàntoàncóthểtìmnghiệmchínhxáccủanó.
257
Gọicácđiểmđócóhoànhđộlầnlượtlàa=x2,b=x1vàtachọnthêm
mộtđiểmx
0nằmtrongđoạn[x2,x1].Gọi
h
1=x1‐x0
h
2=x0‐x2
v=x‐x
0
f(x
0)=f0
f(x1)=f1
f(x
2)=f2
1
2
h
h
=γ
Qua3điểmnàytacómộtđườngparabol:
y=av
2
+bv+c
Tatìmcáchệsốa,b,ctừcácgiátrịđãbiếtv:
2
00
2
11 11 1
2
22 22 2
v0(xx) a(0) b(0)cf
vh(xx) ah bh cf
vh(xx)ahbhcf
== ++=
== ++=
=− = − + =
Từđótacó:
0
1
2
101
2
1
201
fc
h
ahff
b
)1(h
f
)1(
f
f
a
=
−−
=
γ+γ
+γ+−γ
=
Sauđótatìmnghiệmcủaphươngtrìnhav
2
+bv+c=0vàcó:
0
2
2c
nx
b
b 4ac
=−
±−
Dấucủa mẫusốđượcchọnsaochonócógiátrịtuy ệtđốilớnnhất,nghĩalà
khib>0,talấydấu+,khib<0talấydấu‐.
Tiếpđó
tachọnx0làmmộttrong3điểmđểtínhxấpxỉmới.Cácđiểmnày
đượcchọngầnnhaunhất,nghĩalànếunghiệmnởbênphảix
0 thìbađiểm
tínhmớilàx
0,x1vàn;nếunnằmbêntráix0thì3điểmtínhmớilàx0,x2và
nghiệm.Tiếptụcquátrìnhtínhđếnkhiđạtđộchínhxácyêucầuthìdừnglại.
Taxâydựnghàm
muller()đểthựchiệnthuậttoántrên
functionp=muller(f,a,b,maxiter)
%giaiptf(x)=0
h1
h2
f(x)
x0,
f
0
x1,
f
1
x2,
f
2
258
%vao‐flahamcantimnghiem
%‐a,bladoanchuanghiem
%‐maxitersolanlapmax
%ra‐pxapxiMullercuaf
%‐ylagiatriy=f(p)
%‐errsaisothuccuanghiem.
%khoigana,b,x0vacacgiatrituongung
cuaham
x0=(a+b)/2.;
P=[x0ab];
Y=feval(f,P);
delta=1e‐4;
%tinhcachesocuaptbachai
fork=1:maxiter
h0=P(1)‐P(3);
h1=P(2)‐P(3);
e0=Y(1)‐Y(3);
e1=Y(2)‐Y(3);
c=Y(3);
denom=h1*h0^2‐h0*h1^2;
a=(e0*h1‐e1*h0)/denom;
b=(e1*h0^2‐e0*h1^2)/denom;
%neunghiemphuc
ifb^2‐4*a*c>0
disc=sqrt(b^2‐4*a*c);
else
disc=0;
end
%timnghiemnhonhat
ifb<0
disc=‐disc;
end
z=‐2*c/(b+disc);
p=P(3)+z;
%sapxeplaicactritinhlap
ifabs(p‐P(2))<abs(p‐P(1))
Q=[P(2)P(1)P(3)];
259
P=Q;
Y=feval(f,P);
end
ifabs(p‐P(3))<abs(p‐P(2))
R=[P(1)P(3)P(2)];
P=R;
Y=feval(f,P);
end
%cactritinhlanmoi
P(3)=p;
Y(3)=feval(f,P(3));
y=Y(3);
%dieukien
dunglap
err=abs(z);
relerr=err/(abs(p)+delta);
if(err<delta)|(relerr<delta)|(abs(y)<eps)
break
end
end
Đểgiảiphươngtrìnhsin(x)‐0.5*x=0tadùngchươngtrình
ctmuller.m
clearall,clc
formatlong
f=inline(ʹsin(x)‐0.5*xʹ);
x=muller(f,1.8,2.2,50)
§10.PHƯƠNGPHÁPHALLEY
PhéplặpNewtontìmnghiệmcủahàmphươngtrìnhx=g(x)là:
′
f(x)
g(x)=x‐
f(x)
(1)
Tốcđộhộitụtăngđángkểkhihàmcónghiệm đơn.Đểtăngtốcđộhội
tụ,EdmonHalleyđưaracôngthứclặp:
[]
−
⎧⎫
′′
⎪⎪
−
⎨⎬
′
′
⎪⎪
⎩⎭
1
2
f(x) f(x)f (x)
h(x)=x‐ 1
f(x)
2f(x)
(2)
Taxâydựnghàm
halley1()đểthựchiệnthuậttoántrên
260
functionx=halley1(f,x,maxiter)
%hamdungdetimnghiemcuaptf(x)=0
%vao:‐hamcantimnghiemf
%‐giatridaux0
%‐solanlapcucdaimaxiter
%ra‐nghiemx
%dungdaohamso
i=0;
h=1e‐4;
while(i
<maxiter)
f1=feval(f,x);
df1=(feval(f,x+h)‐feval(f,x‐h))/(2*h);
ddf1=(feval(f,x+h)‐2*feval(f,x)+feval(f,x‐h))/(h*h);
hx=x‐(f1/df1)*1./(1‐(f1*ddf1)/(2*(df1)^2))
x=hx;
i=i+1;
if(abs(f1)<eps)
break;
end
end
haydùnghàm
halley2()
functionx=halley2(f,x,maxiter)
%hamdungdetimnghiemcuaptf(x)=0
%vao:‐hamcantimnghiemf
%‐giatridaux
%‐solanlapcucdaimaxiter
%ra‐nghiemx
%dungdaohamsymbolic
df=diff(f,x);
ddf=diff(f,x,2);
i=0;
while(i<maxiter)
f1=eval(f);
261
df1=eval(df);
ddf1=eval(ddf);
hx=x‐(f1/df1)*1./(1‐(f1*ddf1)/(2*(df1)^2));
x=hx;
i=i+1;
if(abs(f1)<eps)
break;
end
end
Đểgiảiphươngtrìnhf(x)=x
3
‐3x+2=0tadùngchươngtrìnhcthalley.m:
clc,clearall
%f=inline(ʹx.^3‐3*x+2ʹ);%khidunghalley1()
%x=halley1(f,‐3,50);
symsx
f=x^3‐3*x+2;%khidunghalley2()
x=halley2(f,‐3,50)
§11.PHƯƠNGPHÁPCHEBYSHEV
Khitìmnghiệmcủaphươngtrìnhđạisốtuyếntínhhayphương trình
siêuviệtf(x)=0tacóthểdùngmộthàmcó4thôngsốđểxấpxỉhàmf(x)
y(x)=p
1+p2(x‐p3)
e
(1)
Cácthôngsốp
1 và p3tạosựchuyểndịchtheocáctrục;thôngsốpxácđịnh
biênđộvàecungcấpđộcongcủahàm.
Takhảosáthàmf(x)trênđoạn[a,b]trongđóf(a).f(b)<0,nghĩalàtrong
đoạn[a,b]
tồntạinghiệmcủaphươngtrìnhf(x) =0.Tacóthêmđiềukiện
fʹ(x).fʹʹ(x) ≠ 0 ∀x∈[a,b]. Gọi x
i∈[a,b]làlầnxấp xỉ thứ i của nghiệmthì
nghiệmlầnthứi+1theocôngthứcPopovskilà:
1
e
i1 i
2
fef.f
xx(e1)1 1
fe1f
+
⎡⎤
′′′
⎛⎞
⎢⎥
−=− − −
⎜⎟
′′ ′
−
⎢⎥
⎝⎠
⎣⎦
(2)
Khie=‐1
i1 i
2
f.f
xx
0.5f.f f
+
′
−=
′′ ′
−
vàđólàphéplặpHalley
262
Khie→1:
i1 i
f
xx
f
+
−=−
′
vàđólàphéplặpNewton
Khie=0.5
2
2
iii
i1 i
33
ii
10.5f.f
f
f(x) f(x) f(x)
f
xx
ff(x)2f(x)
+
′′
+
⎛⎞
−
⎜⎟
′
′
×
′
⎝⎠
−= =− −
′′′
vàtacóphéplặpChebyshev.
Taxâydựmghàm
chebyiter()đểthựchiệnthuậttoántrên
function[x,fx,xx]=chebyiter(f,x0,tol,maxiter)
%giaiptf(x)=0bangppChebyshev.
%vao:f=hamcantimnghiem
%x0=giatribandau
%tol=saisomongmuon
%maxiter=solanlapmax
%ra:x=nghiem
%fx
,xx=cacgiatritrunggian
ifnargin<4
maxiter=200;
end
ifnargin<3
maxiter=100;
tol=1e‐4;
end
h=1e‐4;
h2=2*h;
xx(1)=x0;
fx=feval(f,x0);
fork=1:maxiter
df=
(feval(f,xx(k)+h)‐feval(f,xx(k)‐h))/h2;%daohamso
d2f=(feval(f,xx(k)+h)‐2*feval(f,xx(k))+feval(f,xx(k)‐h))/h^2;
dx=‐fx/df^3‐0.5*fx^2*d2f/df^3;
xx(k+1)=xx(k)+dx;
fx=feval(f,xx(k+1));
263
ifabs(fx)<tol|abs(dx)<tol
break;
end
end
x=xx(k+1);
Đểgiảiphươngtrìnhtadùngchươngtrình
ctchebyiter
clearall,clc
f=inline(ʹx.^3‐10*x.^2+5ʹ);
x=chebyiter(f,‐3,1e‐4)
§12.PHƯƠNGPHÁPNEWTONDÙNGCHOHỆPHITUYẾN
Phương pháp Newton có thể được tổng quát hoáđểgiải hệ phương
trìnhphituyếndạng:
1123 n
2123 n
n123 n
f (x ,x ,x , ,x ) 0
f (x ,x ,x , ,x ) 0
f (x ,x ,x , ,x ) 0
=
⎧
⎪
=
⎪
⎨
⋅⋅⋅⋅⋅
⎪
⎪
=
⎩
hayviếtgọnhơndướidạng:
F(X)=0
Trongđó:
X=(x
1,x2,x3, ,xn)
Vớimộtphươngtrìnhmộtbiến,côngthứcNewtonlà:
)x(f
)x(
f
xx
i
i
i1i
′
−=
+
hay:
fʹ(x
i).∆x=‐f(xi)
với ∆x=x
i+1‐xi
Đốivớihệphươngtrình,côngthứclặplà:
J(X
i)∆X=‐F(Xi)
TrongđóJ(X
i)làtoántửJacobi.Nólàmộtmatrậnbậcn(n‐tươngứngvới
sốthànhphầntrongvectơX)códạng:
264
⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎝
⎛
∂
∂
⋅⋅⋅
∂
∂
∂
∂
∂
∂
⋅⋅⋅⋅⋅⋅
⋅⋅⋅⋅⋅⋅
∂
∂
⋅⋅⋅
∂
∂
∂
∂
∂
∂
∂
∂
⋅⋅⋅
∂
∂
∂
∂
∂
∂
=
n
n
3
n
2
n
1
n
n
2
3
2
2
2
1
2
n
1
3
1
2
1
1
1
i
x
f
x
f
x
f
x
f
x
f
x
f
x
f
x
f
x
f
x
f
x
f
x
f
)X(J
và∆X=X
i+1‐Xi
PhươngphápNewtontuyếntínhhoáhệvànhưvậyvớimỗibướclặp
cầngiảimộthệphươngtrìnhtuyếntính(màbiếnlà∆X
i)xácđịnhbởicông
thứclặpchotớikhivectơX(x
1,x2,x3, ,xn)gầnvớinghiệm.
Taxâydựnghàm
new4sys()đểthựchiệnthuậttoánnày
function[P,iter,err]=new4sys(f,jf,P,max1)
%vao‐FlaheptluutrongM‐filef.m
%‐JFlamatranjacobiluutrongM‐filejf.m
%‐Pvectonghiembandau
%‐max1solanlapcucdai
%ra‐Plavetonghiem
%
‐itersolanlapthucte
%‐errsaiso
Y=f(P);
fork=1:max1
J=jf(P);
Q=P‐(J\Yʹ)ʹ;
Z=f(Q);
err=norm(Q‐P);
relerr=err/(norm(Q)+eps);
P=Q;
Y=Z;
iter=
k;
if(err<eps)|(relerr<eps)|(abs(Y)<eps)
break
end
end
265
Đểgiảihệphươngtrình:
2
2
xxy20
2xy y 3 0
⎧
+−=
⎪
⎨
+−=
⎪
⎩
tadùngchươngtrình
ctnew4sys.m
clearall,clc
formatlong
p=[.5,.5];
[n,ll,ss]=new4sys(@f,@jf,p,50)
Nộidungcủa
f.m:
functionf=f(p)
f=[(p(1)^2+p(1)*p(2)‐2),(2*p(1)*p(2)+p(2)^2‐3)];
Nộidungcủa
jf.m:
functionjf=jf(p)
jf=[(2*p(1)+p(2))p(1)
(2*p(1))(2*p(1)+2*p(2))];
Tacóthểdùnghàm
new4sys2()đểthựchiệnthuậttoán:
functionroot=new4sys2(func,x,maxiter)
%PhuongphapNewton‐Raphsondetimnghiem
%cuaheptfi(x1,x2, ,xn)=0,i=1,2, ,n.
%Cuphap:root=new4sys2(func,x,tol)
%vao:
%func=controham,trave[f1,f2, ,fn].
%x=vec
tobandau[x1,x2, ,xn].
%tol=saisomongmuon
%ra:
%root‐nghiemcuahe
ifsize(x,1)==1;
x=xʹ;