Tải bản đầy đủ (.pdf) (70 trang)

Tài liệu CHƯƠNG 5: CÁC PHƯƠNG TRÌNH PHI TUYẾN docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (551.56 KB, 70 trang )


241
CHƯƠNG 5: CÁC PHƯƠNG TRÌNH PHI TUYẾN

§1.KHÁINIỆMCHUNG
Nếuphươngtrìnhđạisốhaysiêuviệtkháphứctạpthìítkhitìmđược
nghiệmđúng.Bởivậyviệctìmnghiệmgầnđúngvàướclượngsaisốlàrất
c
ầnthiết.
 Taxétphươngtrình:
 f(x)=0(1)
vớif(x)làhàmchotrướccủabiếnx.Chúngtacầntìmgiátrịgầnđúngcủa
nghiệmcủaphươngtrìnhnày.
 Quátrìnhgi
ảithườngchialàmhaibước:bướcsơbộvàbướckiệntoàn
nghiệm.
 Bước giải sơ bộ có 3 nhiệm vụ: vây nghiệm,tách nghiệmvàthuhẹp
khoảngchứanghiệm.
 Vây
nghiệmlàtìmxemcácnghiệmcủaphươngtrìnhcóthểnằmtrên
nhữngđoạnnàocủatrụcx.Táchnghiệmlàtìmcáckhoảngchứanghiệmsao
cho trong mỗi khoảng chỉ cóđúng m
ột nghiệm. Thu hẹp khoảng chứa
nghiệmlà làmchokhoảngchứanghiệmcàngnhỏcàngtốt.Saubướcsơbộta
cókhoảngchứanghiệmđủnhỏ.Đểxácđịnhkhoảngchứanghiệmta
cóthể
dùngphươngphápđồthị.Ngoàiratacũngcóthểtìmnghiệmbằngphương
pháptìmtăngdần.Ýtưởngcủaphươngphápnàylànếyf
1(x).f2(x)<0thìcóít
nhấtmộtnghiệmcủaphươngtrìnhtrongđoạn[x
1,x2].Nếuđoạn[x1,x2]đủ


nhỏthìtrongđạonđósẽcómộtnghiệmduynhất.Nhưv ậytacóthểphát
hiệnranghiệmbằngcáchtínhtrịcủahàmtrêncácđoạn∆xvàxemchúngcó
đổidấukhông.
Taxây
dựnghàmrootsearch()đểtìmkhoảngchứanghiệm.

function[x1,x2]=rootsearch(func,a,b,dx)
%Timdoanchuanghiemcuahamf(x).
%Cuphap:[x1,x2]=rootsearch(func,a,d,dx)
%func=hamf(x).
%a,b=daontim.
%dx=khoangtang
%x1,x2=doanchunghiem
(a,b);
%datlaNaNneukhongthaynghiem


242
x1=a;f1=feval(func,x1);
x2=a+dx;f2=feval(func,x2);
whilef1*f2>0.0
ifx1>=b
x1=NaN;x2=NaN;
return
end
x1=x2;f1=f2;
x2=x1+dx;f2=feval(func,x2);
end

Khipháthi

ệnthấykhoảng chứanghiệm,hàm trảvềgiátrịbiên củađoạn.
Nếukhôngcónghiệm,x1=x2=NaN.Tagọirootsearch()nhiềulầnđểphát
hiệnhếtcácđoạnchứanghiệm.
Vớivídụtìmkhoảngchứanghiệmcủahàm
f(x)=x
3
‐10x
2
+5tadùngchươngtrìnhctrootsearch.m

clearall,clc
f=inline(ʹx^3‐10*x^2+5ʹ);
[x1,x2]=rootsearch(f,2,10,.2)

 Bướckiệntoànnghiệmtìmcácnghiệmgầnđúngtheoyêucầuđặtra.
 Córấtnhiềuph
ươngphápxácđịnhnghiệmcủa(1).Sauđâychúngta
xéttừngphươngpháp.

§2.PHƯƠNGPHÁPLẶPĐƠN
Giảsửphươngtrình(1)đượcđưavềdạngtươngđương:
 x=g(x)(2)
từgiátrịx
onàođógọilàgiátrịlặpđầutiêntalậpdãyxấpxỉbằngcôngthức:
 x
n=g(xn‐1)(3)
vớin=1,2, 
Hàmg(x)đượcgọilàhàmlặp.Nếudãyx
n→αkhin→∝thìtanóiphéplặp
(3)hộitụ.

Tacóđịnhlí:Xétphươngpháplặp(3),giảsử:
‐[a,b]làkhoảngchứanghiệmαcủaphươngtrình(1)tứclàc
ủa(2)
‐mọix
ntínhtheo(3)đềuthuộc[a,b]
‐g(x)cóđạohàmthoảmãn:

243
g(x) q 1 a x b

≤< <<(4)
trongđóqlàmộthằngsốthìphươngpháplặp(3)hộitụ
Tacóthểminhhoạphéplặptrênbằnghìnhvẽsau.









Taxâydựnghàm
simpiter()đểlặp

function[x,err,xx]=simpiter(g,x0,tolx,maxiter)
%giaiptx=g(x)tux0bangcahlap
%vao:g,x0=hamvagiatridau
%tolx=saisomongmuon
%maxiter=solanlapmax

%ra:x=nghiem
%err=
saiso|x(k)‐x(k‐1)|
%xx=cacgiatritrunggian

ifnargin<4
maxiter=100;
end
ifnargin<3
tolx=1e‐6;
end
xx(1)=x0;
fork=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);
ifk==maxiter
fprintf(ʹKhonghoitusau%dlanlap\nʹ,maxiter)
else

fprintf(ʹHoitusau%dlanlap\nʹ,k)
end


Đểtínhlạivídụtrêntadùngchươngtrình
ctsimpiter4_2.m

clearall,clc
f=inline(ʹ‐0.5*((x‐1).^2‐3)ʹ);
[x,ss,xx]=simpiter(f,0.5,.00001,200)

§3.PHƯƠNGPHÁPCHIAĐÔICUNG
Giả sử cho phương trình f(x) = 0 với
f(x)liêntụctrê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ểmchia(a+b)/2.
 1.Nếuf((a+b)/2)=0thì
ξ=(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đầutráidấuvàkíhiệulà[a
1,b1].Đốivới
[a
1,b1]talạitiếnhànhnhư[a,b].
Taxâydựnghàm
bisection()thựchiệnthuậttoántrên

function[x,err,xx]=bisection(f,a,b,tolx,maxiter)
%bisection.mdegiaiptf(x)=0bangphuongphapchiadoicung
%vao:f=hamcantimnghiem

%a/b=biencuadoancantimnghiem
%tolx=saisomongmuon
%maxiterlanlapmax
%ra:x
=nghiem
%err=saiso
%xx=cacgiatritrunggian

y
x
a
b
ξ

b
1

245
tol=eps;
fa=feval(f,a);
fb=feval(f,b);
iffa*fb>0
error(ʹNghiemkhongotrongdoannayʹ);
end
fork=1:maxiter
xx(k)=(a+b)/2;
fx=feval(f,xx(k));
err=(b‐a)/2;
ifabs(fx)<tol|abs(err)<
tolx

break;
elseiffx*fa>0
a=xx(k);
fa=fx;
elseb=xx(k);
end
end
x=xx(k);
ifk==maxiter
fprintf(ʹKhonghoitusau%dlanlap\nʹ,maxiter),
else
fprintf(ʹHoitusau%dlanlap\nʹ,k),
end


Đểtìmnghiệmcủahàmf(x)=tg(π‐)‐xtadùngchươngtrình
ctbisection.m

clearall,clc
f=inline(ʹtan(pi‐x)‐xʹ);
[x,ss,xx]=bisection(f,1.6,3,1e‐4,50)


§4.PHƯƠNGPHÁPDÂYCUNG

Giảsửf(x)liêntụctrêntrênđoạn[a,b]vàf(a).f(b)<0.Cầntìmnghiệm
củaf(x)= 0.Đểxácđịnhtaxemf(a)<0vàf(b)>0.Khiđóthayvìchiađôi
đoạn[a,b]tachia[a,b]
theotỉlệ‐f(a)/f(b).Điềuđóchotanghiệmgầnđúng:
 x

1=a+h1

246
Trongđó

1
f(a)
(b a)
h
f(a) f(b)
=


−+

 Tiếptheodùngcáchđóvớiđoạn[a,x
1]
hay[x
1,b]màhaiđầuhàmnhậngiátrịtrái
dấutađượcnghiệmgầnđúngx
2v.v.
Vềmặthìnhhọc,phươngphápnàycó
nghĩalàkẻdâycungcủađườngcongf(x)
quahaiđiểmA[a,f(a)]vàB[b,f(b)]haynóicáchkháclàtuyếntínhhoáhàm
f(x)trongđoạn[a,b].
Thật
vậyphươngtrìnhdâycungABcódạng:

f(a) f(b) af(b) bf(a)
yx

ab ab
−−
=+
−−

Chox=x
1,y=0tacó

1
af(b) bf(a)
x
f( b) f(a)

=

(1)
Taxâydựnghàm
chord()đểthựchiệnthuậttoántrên

function[x,err,xx]=chord(f,a,b,tolx,maxiter)
%giaiptf(x)=0bgphuongphapdaycung.
%vao:f‐hamcantimnghiem
%a/b‐khoangtimnghiem
%tolx‐saisomongmuoncuanghiem
%maxiterlanlapmax
%ra:x‐nghiem
%err‐sai
so
%xx‐cacgiatritrunggian
tolfun=eps;

fa=feval(f,a);
fb=feval(f,b);
iffa*fb>0
error(ʹNghiemkhongotrongdoannay!ʹ);
end
fork=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
ifabs(fx)<tolfun|err<tolx
break;
elseiffx*fa>0
a=xx(k);
fa=fx;
else
b=xx(k);
fb=fx;
end
end
x=xx(k);
ifk==maxiter

fprintf(ʹKhonghoitusau%dlanlap\nʹ,maxiter)
else
fprintf(ʹ
Hoitusau%dlanlap\nʹ,k)
end

Đểtìmnghiệmcủahàmf(x)=tg(π‐x)‐xtadùngchươngtrình
ctchord.m

clearall,clc
f=inline(ʹtan(pi‐x)‐xʹ);
[x,ss,xx]=falsp(f,1.7,3,1e‐4,50)


§5.PHƯƠNGPHÁPNEWTON‐RAPHSON
Phương pháp lặp Newton(còn gọi là ph ương pháp tiếp tuyến)được
dùngnhiềuvìnóhộitụnhanh.Tuynhiênphươngphápnàyđòihỏitínhfʹ(x).
CôngthứcNewton‐RaphsonđượcsuytừkhaitriểnTaylorc
ủaf(x)lâncậnx:
2
i1 i i i1 i i1 i
f(x ) f(x) f(x)(x x) O(x x)
+++

=+ −+ −(1)
Nếux
i+1lànghiệmcủaphươngtrìnhf(x)=0thì(1)trởthành:

2
iii1i i1i

0 f(x ) f (x )(x x ) O(x x )
++

=+ −+ −(2)
Giảsửrằngx
igầnvớixi+1,tacóthểbỏquasốhạngcuốitrong(2)vàcócông
thứcNewton‐Raphson:

i
i1 i
i
f(x )
xx
f(x)
+
=−

(3)
Nếux
i+1lànghiệmđúngcủaphươngtrìnhthìsaisốlàei=x‐xi.Khinghiệm
đượctínhtheo(3)thìsaisố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‐Raphsonnhưhìnhbên.
Thuậttoánđượctómlượcnhưsau:
‐chox
o
‐tính
f(x)
x
fʹ(x)
∆=−

‐chox=x+∆x
‐lặplạibước2và3chođếnkhi|∆x|≤ε
Taxâydựnghàm
newtonraphson()đểthựchiệnthuậttoántrên.

function[x,fx,xx]=newtonraphson(f,df,x0,tolx,maxiter)
%giaiptf(x)=0bangppNewton‐Raphson.
%vao:f=ftntobegivenasastring’f’ifdefinedinanM‐file
%df=df(x)/dx(neukhongchosedungdaohamso.)
%x0
=giatribandau
%tolx=saisomongmuon
%maxiter=solanlapmax

%ra:x=nghiem
%fx=f(x(last)),xx=cacgiatritrunggian
h=1e‐4;
h2=2*h;
tolf=eps;
ifnargin==4&isnumeric(df)

maxiter=tolx;
tolx=x0;
x0=df;
end
xx(1)=x0;
fx=feval(f,x0);
fork=1:maxiter
if~isnumeric(df)
dfdx=feval(df,xx(k));%daohamcuaham
else
dfdx=(feval(f,xx(k)+h)‐feval(f,xx(k)‐h))/h2;%daohamso
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));

ifabs(fx)<tolf|abs(dx)<tolx,
break;
end
end
x=xx(k+1);
ifk==maxiter
fprintf(ʹKhonghoitusau%dlanlap\nʹ,maxiter)
else
fprintf(ʹ
Hoitusau%dlanlap\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

clearall,clc
f=inline(ʹx.^3‐10*x.^2+5ʹ);
[x,ss,xx]=newtonraphson(f,0.7,1e‐4,50)


§6.PHƯƠNGPHÁPCÁTTUYẾN

Phươngphápcáttuy ếncóthểcoilàbiếnthểcủaphươngphápNewton
‐Raphsontheonghĩađạohàmđượcthaybằngxấpxỉ:
kk1
kk1
f( x ) f(x )
f(x)
xx







(1)
vàtốnítthờigiantínhhơnkhidùngđạohàmgiảitíchhayđạohàmsố.
 Bằngcáchxấpxỉ,biểuthứ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ươngtrình(2)chínhlàbiểuthứctổngquátcủaphéplặp.Haigiátrịđầu
tiênx
1vàx2cầnđểkhởiđộngphépl ặp.Quátrìnhlặpđượcminhhoạbằng
hìnha













Phéplặpcóthểkhônghộitụ(hìnhb).Tuynhiênkhihộitụ,nóhộirấtnhanh.
Taxâydựnghàm
secant()đểthựchiệnthuậttoántrên.

function[x,fx,xx]=secant(f,x0,x1,tolx,maxiter)
%giaiptf(x)=0bgphuongphapdaycung
%vao:f‐hamcantimnghiem
%x0,x1‐giatrikhoidongpheplap
%tolx‐saisomongmuon
%maxiter‐solanlapmax
%ra:x
=nghiem
%fx=f(x(last)),xx=cacgiatritrunggian
h=(x1‐x0)/100;
h2=2*h;
tolfun=eps;
xx(1)=x0;
fx=feval(f,x0);
fork=1:maxiter
ifk<=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));
ifabs(fx)<tolfun|abs(dx)<tolx,
break;
end
end
x=xx(k+1);
ifk==maxiter
fprintf(ʹKhonghoitusau%dlan

lap\nʹ,maxiter)
else
fprintf(ʹHoitusau%dlanlap\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

clearall,clc
f=inline(ʹx.^3‐10*x.^2+5ʹ);
[x,ss,xx]=secant(f,0.5,1,1e‐4,50)


§7.PHƯƠNGPHÁPBRENT
 Phương pháp Brent kêt hợp phương pháp chiađôi cung và phương
phápnộisuybậchaiđểtạo ra mộtphươngpháptìmnghiệm của phương
trìnhf(x) =0rấthiệuquả.Phương
phápnàydùngkhiđạohàmcủaf(x)khó
tínhhaykhôngthểtínhđược.Giảsửtacầntìmnghiêmtrong đoạn[x
1,x2].
Quátrìnhtìmnghiệmbắtđầubằngviệcchiađôiđoạn[x
1,x2]bằngđiểmx3.








x2
x
x3
x
x1
x
x3
x
x2
x1

252
Trongquátrìnhnàytatínhđượcf(x1),f(x2)vàf(x3).Qua 3điểm nàytacómột
đườngcongbậc2vàtìmđượcnghiệmxcủađườngcongbậc2này.Nếux
nằmtrongđoạn[x
1,x2]nhưhìnhtrên thìgiátrịnàyđượcchấpnhận. Tiếp
theotatìmnghiệmtrongđoạn[x
1,x3]hay[x3,x2]tuỳtheovịtrícủax.
ĐathứcnộisuyLagrangequa3điểmlà:

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 )

−− −− −−
=++
−− −− −−

Choy=0tacó:

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đổicủanghiệmlà:

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)
Taxâydựnghàm
brent()đểthựchiệnthuậttoántrên


functionroot=brent(f,a,b,tol)
%giaiptf(x)=0bangthuattoanBrent.
%Cuphap:root=brent(f,a,b,tol)
%vao:f=hamcantimnghiem
%a,b=doanchuanghiem
%tol=saisochotruoc
ifnargin<
4;
tol=1.0e6*eps;
end
%lanchiadoidautien
x1=a;
f1=feval(f,x1);
iff1==0;
root=x1;
return;
end
x2=b;
f2=feval(f,x2);
iff2==0;
root=x2;
return;

253
end
iff1*f2>0.0
error(ʹNghiemkhongnamtrongdoannayʹ)
end
x3=0.5*(a+b);
%batdaulap.

fori=1:30
f3=feval(f,x3);
ifabs(f3)<tol
root=x3;
return
end
%xacdinhdoanchuanghiem.
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
%noisuybac2.
denom=(f2‐f1)*(f3‐f1)*(f2‐f3);
numer=x3*(f1‐f2)*(f2‐f3+f1) 
+f2*x1*(f2‐f3)+
f1*x2*(f3‐f1);
ifdenom==0;
dx=b‐a;
else
dx=f3*numer/denom;
end
x=x3+dx;
%neulaprangoaidoan(a,b),dungcachchiadoicung
if(b‐x)*(x‐a)<0.0

dx=0.5*(b‐a);
x=a+dx;

254
end
%chox=x3&chonx1,x2moisaochox1<x3<x2.
ifx<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ìnhx|cos(x)|‐1 = 0 ta dùng chương trình
ctbrent.m

clearall,clc
f=inline(ʹx.*abs(cos(x))‐1ʹ);
x=brent(f,0.0,4,1e‐4)

§8.PHƯƠNGPHÁPNGOẠISUYAITKEN
Xétphươngpháplặp:
 x=f(x)(1)
vớif(x)thoảmãnđiềukiệnhộitụcủaphéplặp,nghĩalàvớimọix∈[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àápdụngđịnhlíLagrangechovếphảivớic∈[a,b]tacó:
 x
n+1‐xn=f(xn)‐f(xn‐1)=(xn‐xn‐1)f’(c)(5)
Vìphéplặp(1)nên:
 |x
n+1‐xn|≤q|xn‐xn‐1|(6)
Do(6)đúngvớimọinnênchon=1,2,3,...tacó:
|x
2‐x1|≤q|x1‐xo|
|x
3‐x2|≤q|x2‐x1|

255
...................
|x
n+1‐xn|≤q|xn‐xn‐1|
Điềunàycónghĩalàdãyx
i+1‐xi,mộtcáchgầnđúng,là mộtcấpsốnhân.Ta
cũngcoirằngdãyx
n‐yvớiylànghiệmđúngcủa(1),gầnđúngnhưmộtcấp
sốnhâncócôngsaiq.Nhưvậy:

n1
n

xy
q1
xy
+

=<

(7)
hay:
n1 n
xyq(xy)
+
−= − (8)
Tươngtựtacó: 
n2 n1
xyq(xy)
++
−= − (9)
Từ(8)và(9)tacó:

n2 n1
n1 n
xx
q
xx
++
+

=


   (10)
Thaygiátrịcủaqvừatínhở(10)vàobiểuthứccủaqởtrêntacó:

(
)
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ậytheo(11)
trướchếttadùngphươngpháplặpđểtínhgiátrịgầnđúngx
n+2,xn+1,xncủa
nghiệmvàsauđótheo(11)tìmđượcnghiệmvớisaisố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ươngphápSteffensen.Bắtđầulặptừx
0,haibướclặpđượcdùngđểtính:
 x
1=f(x0)  x2=f(x1)
vàsauđódùngthuậttoánAitkenđểtinhy
0theo(11).Đểtiếptụclặptacho
x

0=y0vàlặplạibướctínhtrước.
Taxâydựnghàm
aitstef()đểthựchiệnhaithuậttoántrên

function[x,y]=aitstef(g,x0,tolx,maxiter)
%phuongphapAitken‐Steffenson
%giaiptx=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(ʹPhuongphapAitken‐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ệmcủaphươngtrìnhx=(2‐e
x
+x
2
)/3=g(x)tadùngchươngtrình
ctaitstef.m

clearall,clc
f=inline(ʹ(2.‐exp(x)+x.^2)/3ʹ);
[x,y]=aitstef(f,0.,1e‐4,50)

§9.PHƯƠNGPHÁPMUELLER
Trongphươngphápdâycungkhitìmnghiệmtrongđoạn[a,b]taxấp
xỉ hàm bằng mộtđường thẳng. Tuy nhiênđểgiảm lượng tính toán vàđể
nghiệmhộitụnhanhhơntacóthểdùngphương
phápMuller.Nộidungcủa
phươngphápnàylàthayhàmtrongđoạn[a,b]bằngmộtđườngcongbậc2
màtahoàntoàncóthểtìmnghiệmchínhxáccủanó.

257
Gọicácđiểmđócóhoànhđộlầnlượtlàa=x2,b=x1vàtachọnthêm

mộtđiểmx
0nằmtrongđ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


Qua3điểmnàytacómộtđườngparabol:
 y=av
2
+bv+c
Tatìmcáchệsốa,b,ctừcácgiátrịđãbiếtv:

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ừđótacó:

0
1
2
101
2
1
201
fc
h
ahff
b
)1(h
f
)1(
f
f
a
=
−−

=
γ+γ
+γ+−γ
=

Sauđótatìmnghiệmcủaphươngtrìnhav
2
+bv+c=0vàcó:
0
2
2c
nx
b
b 4ac
=−
±−

Dấucủa mẫusốđượcchọnsaochonócógiátrịtuy ệtđốilớnnhất,nghĩalà
khib>0,talấydấu+,khib<0talấydấu‐.
Tiếpđó
tachọnx0làmmộttrong3điểmđểtínhxấpxỉmới.Cácđiểmnày
đượcchọngầnnhaunhất,nghĩalànếunghiệmnởbênphảix
0 thìbađiểm
tínhmớilàx
0,x1vàn;nếunnằmbêntráix0thì3điểmtínhmớilàx0,x2và
nghiệm.Tiếptụcquátrìnhtínhđếnkhiđạtđộchínhxácyêucầuthìdừnglại.
Taxâydựnghàm
muller()đểthựchiệnthuậttoántrên

functionp=muller(f,a,b,maxiter)

%giaiptf(x)=0
h1
h2
f(x)
x0,
f
0
x1,
f
1
x2,
f
2

258
%vao‐flahamcantimnghiem
%‐a,bladoanchuanghiem
%‐maxitersolanlapmax
%ra‐pxapxiMullercuaf
%‐ylagiatriy=f(p)
%‐errsaisothuccuanghiem.
%khoigana,b,x0vacacgiatrituongung
cuaham
x0=(a+b)/2.;
P=[x0ab];
Y=feval(f,P);
delta=1e‐4;
%tinhcachesocuaptbachai
fork=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;
%neunghiemphuc
ifb^2‐4*a*c>0
disc=sqrt(b^2‐4*a*c);
else
disc=0;
end
%timnghiemnhonhat
ifb<0
disc=‐disc;
end

z=‐2*c/(b+disc);
p=P(3)+z;
%sapxeplaicactritinhlap
ifabs(p‐P(2))<abs(p‐P(1))
Q=[P(2)P(1)P(3)];

259
P=Q;
Y=feval(f,P);
end
ifabs(p‐P(3))<abs(p‐P(2))
R=[P(1)P(3)P(2)];

P=R;
Y=feval(f,P);
end
%cactritinhlanmoi
P(3)=p;
Y(3)=feval(f,P(3));
y=Y(3);
%dieukien
dunglap
err=abs(z);
relerr=err/(abs(p)+delta);
if(err<delta)|(relerr<delta)|(abs(y)<eps)
break
end
end

Đểgiảiphươngtrìnhsin(x)‐0.5*x=0tadùngchươngtrình
ctmuller.m

clearall,clc
formatlong
f=inline(ʹsin(x)‐0.5*xʹ);
x=muller(f,1.8,2.2,50)


§10.PHƯƠNGPHÁPHALLEY
PhéplặpNewtontìmnghiệmcủahàmphươngtrìnhx=g(x)là:


f(x)

g(x)=x‐
f(x)
(1)
Tốcđộhộitụtăngđángkểkhihàmcónghiệm đơn.Đểtăngtốcđộhội
tụ,EdmonHalleyđưaracôngthứclặp:

[]

⎧⎫
′′
⎪⎪

⎨⎬


⎪⎪
⎩⎭
1
2
f(x) f(x)f (x)
h(x)=x‐ 1
f(x)
2f(x)
(2)
Taxâydựnghàm
halley1()đểthựchiệnthuậttoántrên

260
functionx=halley1(f,x,maxiter)
%hamdungdetimnghiemcuaptf(x)=0

%vao:‐hamcantimnghiemf
%‐giatridaux0
%‐solanlapcucdaimaxiter
%ra‐nghiemx
%dungdaohamso
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


haydùnghàm
halley2()

functionx=halley2(f,x,maxiter)
%hamdungdetimnghiemcuaptf(x)=0
%vao:‐hamcantimnghiemf
%‐giatridaux
%‐solanlapcucdaimaxiter
%ra‐nghiemx

%dungdaohamsymbolic

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ảiphươngtrìnhf(x)=x
3
‐3x+2=0tadùngchươngtrìnhcthalley.m:

clc,clearall
%f=inline(ʹx.^3‐3*x+2ʹ);%khidunghalley1()
%x=halley1(f,‐3,50);
symsx
f=x^3‐3*x+2;%khidunghalley2()

x=halley2(f,‐3,50)


§11.PHƯƠNGPHÁPCHEBYSHEV
 Khitìmnghiệmcủaphươngtrìnhđạisốtuyếntínhhayphương trình
siêuviệtf(x)=0tacóthểdùngmộthàmcó4thôngsốđểxấpxỉhàmf(x)
 y(x)=p
1+p2(x‐p3)
e
(1)
Cácthôngsốp
1 và p3tạosựchuyểndịchtheocáctrục;thôngsốpxácđịnh
biênđộvàecungcấpđộcongcủahàm.
 Takhảosáthàmf(x)trênđoạn[a,b]trongđóf(a).f(b)<0,nghĩalàtrong
đoạn[a,b]
tồntạinghiệmcủaphươngtrìnhf(x)  =0.Tacóthêmđiềukiện
fʹ(x).fʹʹ(x) ≠ 0 ∀x∈[a,b]. Gọi x
i∈[a,b]làlầnxấp xỉ thứ i của nghiệmthì
nghiệmlầnthứi+1theocôngthứcPopovskilà:

1
e
i1 i
2
fef.f
xx(e1)1 1
fe1f
+
⎡⎤
′′′

⎛⎞
⎢⎥
−=− − −
⎜⎟
′′ ′

⎢⎥
⎝⎠
⎣⎦
(2)
Khie=‐1

i1 i
2
f.f
xx
0.5f.f f
+

−=
′′ ′


vàđólàphéplặpHalley

262
Khie→1:

i1 i
f

xx
f
+
−=−


vàđólàphéplặpNewton
Khie=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àtacóphéplặpChebyshev.
Taxâydựmghàm
chebyiter()đểthựchiệnthuậttoántrên

function[x,fx,xx]=chebyiter(f,x0,tol,maxiter)
%giaiptf(x)=0bangppChebyshev.
%vao:f=hamcantimnghiem
%x0=giatribandau
%tol=saisomongmuon
%maxiter=solanlapmax
%ra:x=nghiem
%fx
,xx=cacgiatritrunggian
ifnargin<4
maxiter=200;
end
ifnargin<3
maxiter=100;
tol=1e‐4;
end
h=1e‐4;
h2=2*h;
xx(1)=x0;
fx=feval(f,x0);
fork=1:maxiter

df=
(feval(f,xx(k)+h)‐feval(f,xx(k)‐h))/h2;%daohamso
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
ifabs(fx)<tol|abs(dx)<tol
break;
end
end
x=xx(k+1);

Đểgiảiphươngtrìnhtadùngchươngtrình
ctchebyiter

clearall,clc
f=inline(ʹx.^3‐10*x.^2+5ʹ);
x=chebyiter(f,‐3,1e‐4)


§12.PHƯƠNGPHÁPNEWTONDÙNGCHOHỆPHITUYẾN
Phương pháp Newton có thể được tổng quát hoáđểgiải hệ phương
trìnhphituyếndạ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
=


=


⋅⋅⋅⋅⋅


=


hayviếtgọnhơndướidạng:
 F(X)=0
Trongđó: 
X=(x
1,x2,x3, ,xn)
 Vớimộtphươngtrìnhmộtbiến,côngthứcNewtonlà:

)x(f
)x(
f
xx
i
i
i1i

−=

+

hay:
fʹ(x
i).∆x=‐f(xi)
với ∆x=x
i+1‐xi
Đốivớihệphươngtrình,côngthứclặplà:
J(X
i)∆X=‐F(Xi)
TrongđóJ(X
i)làtoántửJacobi.Nólàmộtmatrậnbậcn(n‐tươngứngvới
sốthànhphầntrongvectơ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ươngphápNewtontuyếntínhhoáhệvànhưvậyvớimỗibướclặp
cầngiảimộthệphươngtrìnhtuyếntính(màbiếnlà∆X
i)xácđịnhbởicông
thứclặpchotớikhivectơX(x
1,x2,x3, ,xn)gầnvớinghiệm.
Taxâydựnghàm
new4sys()đểthựchiệnthuậttoánnày

function[P,iter,err]=new4sys(f,jf,P,max1)
%vao‐FlaheptluutrongM‐filef.m
%‐JFlamatranjacobiluutrongM‐filejf.m
%‐Pvectonghiembandau
%‐max1solanlapcucdai
%ra‐Plavetonghiem
%
‐itersolanlapthucte
%‐errsaiso
Y=f(P);
fork=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ảihệphươngtrình:
2
2
xxy20
2xy y 3 0

+−=


+−=



tadùngchươngtrình
ctnew4sys.m


clearall,clc
 formatlong
 p=[.5,.5];
 [n,ll,ss]=new4sys(@f,@jf,p,50)

Nộidungcủa
f.m:


functionf=f(p)
f=[(p(1)^2+p(1)*p(2)‐2),(2*p(1)*p(2)+p(2)^2‐3)];

Nộidungcủa
jf.m:

functionjf=jf(p)
jf=[(2*p(1)+p(2))p(1)
(2*p(1))(2*p(1)+2*p(2))];

Tacóthểdùnghàm
new4sys2()đểthựchiệnthuậttoán:

functionroot=new4sys2(func,x,maxiter)
%PhuongphapNewton‐Raphsondetimnghiem
%cuaheptfi(x1,x2, ,xn)=0,i=1,2, ,n.
%Cuphap:root=new4sys2(func,x,tol)
%vao:
%func=controham,trave[f1,f2, ,fn].
%x=vec
tobandau[x1,x2, ,xn].
%tol=saisomongmuon
%ra:
%root‐nghiemcuahe

ifsize(x,1)==1;
x=xʹ;

×