Thông tin tài liệu
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
[...]... (p(1)^2 + 2*p(2)^2 ‐ p(3) ‐ 6 (p(1) ‐3*p(2 )^2 + p(3)^2 + 2)]; Để giải hệ phương trình ta dùng chương trình ctnew4sys2.m: clear all, clc format long p = [1 1 1 ]; r = new4sys2(@t, p, 50) §13. PHƯƠNG PHÁP BROYDEN DÙNG CHO HỆ PHI TUYẾN 1. Phương pháp Broyden: Để giải hệ phương trình phi tuyến tính F([X]) = [0] bằng phương pháp lặp Newton ta cho vec tơ nghiệm ban đầu [P0] và tạo ra dãy [Pk] hội tụ về nghiệm [P], nghĩa là F([P]) = [0]. Khi này ta cần tính ma trận ... if abs(fx) .
241
CHƯƠNG 5: CÁC PHƯƠNG TRÌNH PHI TUYẾN
§1.KHÁINIỆMCHUNG
Nếu phương trì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.
. 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ột phương pháptìmnghiệm của phương
trình f(x)
Ngày đăng: 23/01/2014, 06:20
Xem thêm: Tài liệu CHƯƠNG 5: CÁC PHƯƠNG TRÌNH PHI TUYẾN docx, Tài liệu CHƯƠNG 5: CÁC PHƯƠNG TRÌNH PHI TUYẾN docx