Thứ Năm, 20 tháng 2, 2014

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


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|

Không có nhận xét nào:

Đăng nhận xét