CHƯƠNG2:GIẢIGẦNĐÚNGPHƯƠNGTRÌNH
ĐẠISỐVÀSIÊUVIỆT
§1.KHÁINIỆMCHUNG
Nếu phương trìnhđại số hay siêuviệt khá phứctạp thìít khi tìm
đượcnghiệmđúng.Bởivậyviệctìmnghiệmgầnđúngvàướclượngsaisố
làr
ấtcầ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ướcgiảisơbộcó3nhiệmvụ:vâynghiệm,táchnghiệmvàthuhẹp
khoảngchứanghiệm.
Vâynghiệmlàtìmxem cácnghiệmcủaph ươngtrìnhcóthểnằmtrên
nhữngđoạnnàocủatrụcx.Táchnghiệmlàtìmcáckhoảngchứanghiệm
soachotrongmỗi khoảngchỉcó
đúngmộtnghiệm.Thuhẹpkhoảngchứa
nghiệmlàlàmchokhoảngchứanghiệmcàngnhỏcàngtốt.Saubướcsơbộ
tacókhoảngchứanghiệmđủnhỏ.
Bướckiệntoànnghiệm
tì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ịxonàođógọilàgiátrịlặpđầutiêntalậpdãyxấpxỉbằngcông
thức:
x
n=g(x+‐1)(3)
vớin=1,2,
Hàmg(x)đượcgọilàhàmlặp.Nếudãyx
n→αkhin→∝thìtanói
phéplặp(3)hộitụ.
x
1xoxox1
13
Tacóđịnhlí:Xétphươngpháplặp(3),giảsử:
‐[a,b]làkhoảngphânlinghiệ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:
b
xa,1
q
)x(g
<
<<
≤
′
(4)
trongđóqlàmộthằngsốthìphươngpháplặp(3)hộitụ
Tacóthểminhhoạphéplặptrênbằnghìnhvẽtrên.
Cáchđưaphươngtrìnhf(x)=0vềdạngx=g(x)đượcthự
chiệnnhư
sau:tathấyf(x) =0cóthểbiếnđổithànhx=x+
λf(x)vớiλ≠0.Sauđóđặt
x+λf(x)=g(x)saochođiềukiện(4)đượcthoảmãn.
Vídụ:xétphươngtrình
x
3
+x‐1000=0
Saubướcgiảisơbộtacónghiệmx
1∈(9,10)
Nếuđưaphươngtrìnhvềdạng:
x=1000‐x
3
=g(x)
thìdễthấy|g
ʹ
(x)|>1trongkhoảng(9,10)nênkhôngthoảmãnđiềukiện
(4)
Chúngtađưaphươngtrìnhvềdạng
3
x1000x −=
thìtathấyđiềukiện(4)đượcthoảmãn.Xâydựngdãyxấpxỉ
3
n
1n
x1000
x
−
=
+
vớix
ochọnbấtkìtrong(9,10)
Trêncơsởphươngphápnàychúngtacócácchươngtrìnhtínhtoán
sau:
Chương trình giải phương trình exp((1/3)*ln(1000‐x)) với số lần lặp cho
trước
Chươngtrình2‐1
//lapdon
#include<conio.h>
#include<stdio.h>
#include<math.h>
voidmain()
{
inti,n;
floatx,x0;
floatf(float);
14
clrscr();
printf(ʺChosolanlapn=ʺ);
scanf(ʺ%dʺ,&n);
printf(ʺChogiatribandaucuanghiemx0=ʺ);
scanf(ʺ%fʺ,&x0);
x=x0;
for(i=1;i<=n;i++)
x=f(x);
printf(ʺNghiemcuaphuongtrinhla:%.4fʺ,x);
getch();
}
floatf(floatx)
{
floata=exp((1./3.)*log(1000‐x));
return(a);
}
vàchươngtrìnhgiảibàitoánbằngphươngpháplặpvớisaisốchotrước
Chươngtrình2‐2
//lapdon
#include<conio.h>
#include<stdio.h>
#include<math.h>
voidmain()
{
inti;
floatepsi,x,x0,y;
floatf(float);
clrscr();
printf(ʺChosaisoepsilon=ʺ);
scanf(ʺ%fʺ,&epsi);
printf(ʺChogiatribandaucuanghiemx0=ʺ);
scanf(ʺ%fʺ,&x0);
x=x0;
y=f(x);
if(abs(y‐x)>epsi)
15
{
x=y;
y=f(x);
}
printf(ʺNghiemcuaphuongtrinhla%.6fʺ,y);
getch();
}
floatf(floatx)
{
floata=exp((1./3.)*log(1000‐x));
return(a);
}
Chogiátrịđầuxo=1.Kếtquảtínhtoánx=9.966555
§3.PHƯƠNGPHÁPCHIAĐÔICUNG
Giảsửchophươngtrìnhf(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.
b
1
ξ
b
a
x
y
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ái dấuvà kíhiệu là[a
1,b1].Đối
với[a
1,b1]talạitiếnhànhnhư[a,b]
Cách làm trênđược mô tả trong chương trình sau dùngđểtìm
nghiệmcủaphươngtrình:
x
4
+2x
3
‐x‐1=0
trênđoạn[0,1]
Chươngtrình2‐3
//chiadoicung
#include<conio.h>
#include<stdio.h>
#include<math.h>
#defineepsi0.00001
voidmain()
{
16
floatx0,x1,x2;
floaty0,y1,y2;
floatf(float);
intmaxlap,demlap;
clrscr();
printf(ʺTimnghiemcuaphuongtrinhphituyenʺ);
printf(ʺ\nbangcachchiadoicung\nʺ);
printf(ʺChocacgiatrix0,x1,maxlap\nʺ);
printf(ʺChogiatrix0=ʺ);
scanf(ʺ%fʺ,&x0);
printf(ʺChogia
trix1=ʺ);
scanf(ʺ%fʺ,&x1);
printf(ʺChosolanlapmaxlap=ʺ);
scanf(ʺ%dʺ,&maxlap);
y0=f(x0);
y1=f(x1);
if((y0*y1)>0)
{
printf(ʺNghiemkhongnamtrongdoanx0‐x1\nʺ);
printf(ʺx0=%.2f\nʺ,x0);
printf(ʺx1=%.2f\nʺ,x1);
printf(ʺf(x0)=
%.2f\nʺ,y0);
printf(ʺf(x1)=%.2f\nʺ,y1);
}
demlap=0;
do
{
x2=(x0+x1)/2;
y2=f(x2);
y0=f(x0);
if(y0*y2>0)
x0=x2;
else
x1=x2;
demlap=demlap+1;
}
while(((abs((y2‐y0))>epsi)||(demlap<maxlap)));
if(demlap>maxlap)
{
17
printf(ʺPheplapkhonghoitusau%dlanlapʺ,maxlap);
printf(ʺx0=%.2f\nʺ,x0);
printf(ʺx1=%.2f\nʺ,x1);
printf(ʺf(x2)=%.2f\nʺ,y2);
}
else
{
printf(ʺPheplaphoitusau%dlanlap\nʺ,demlap);
printf(ʺNghiemx=%.2fʺ,x2);
}
getch();
}
floatf(floatx)
{
floata=x*x*x*x+2*x*x*x‐x‐1;
return(a);
}
Kếtquảtínhchonghiệm:x=0.87
§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
Trongđó
)ab(
)b(f)a(f
)a(
f
h
1
−
+−
−
=
Tiếptheodùng cáchđóvớiđoạn[a,x
1]hay[x1,b]màhaiđầuhàm
nhậngiátrịtráidấutađượcnghiệmgầnđúngx
2v.v.
Vềmặthìnhhọc,phươngphápnàycónghĩalàkẻdâycungcủađườngcong
f(x)quahaiđiểmA[a,f(a)]vàB[b,f(b)].ThậtvậyphươngtrìnhdâycungAB
códạng:
18
)a(f)b(f
)a(
f
y
ab
ax
−
−
=
−
−
ax
1ξb
Chox=x
1y=0tacó
)ab(
)a(f)b(f
)a(
f
ax
1
−
−
−=
Trên cơ sở của phương pháp ta có
chươngtrìnhtínhnghiệmcủaphương
trình
x
4
+2x
3
‐x‐1=0
trênđoạn[0,1]
Chươngtrình2‐4
//phuongphapdaycung
#include<conio.h>
#include<stdio.h>
#include<math.h>
#defineepsi0.00001
voidmain()
{
floata,b,fa,fb,dx,x;
floatf(float);
clrscr();
printf(ʺTimnghiemcuaphuongtrinhphituyen\nʺ);
printf(ʺbangphuongphapdaycung\nʺ);
printf(ʺChocacgiatria,b\nʺ);
printf(ʺCho
giatricuaa=ʺ);
scanf(ʺ%fʺ,&a);
printf(ʺChogiatricuab=ʺ);
scanf(ʺ%fʺ,&b);
fa=f(a);
fb=f(b);
dx=fa*(b‐a)/(fa‐fb);
while(fabs(dx)>epsi)
{
x=a+dx;
fa=f(x);
19
if((fa*fb)<=0)
a=x;
else
b=x;
fa=f(a);
fb=f(b);
dx=fa*(b‐a)/(fa‐fb);
}
printf(ʺNghiemx=%.3fʺ,x);
getch();
}
floatf(floatx)
{
floate=x*x*x*x+2*x*x*x‐x‐1;
return(e);
}
Kếtquảtínhchonghiệm:x=0.876
§5.PHƯƠNGPHÁPLẶPNEWTON
PhươngpháplặpNewton(còngọilàphươngpháptiếptuyến)được
dùngnhiềuvìnóhộitụnhanh.Giảsửf(x)
cónghiệmlàξđãđượctáchtrênđoạn[a,
b]đồng thời fʹ(x) và fʺ
(x) liên tục và giữ
nguyên dấu trênđoạn [a, b]. Khiđã tìm
được xấp xỉ nàođó xn ∈ [a, b] ta có thể
kiện toàn nó theo phương phápNewton.
TừmútBtavẽtiếptuyếnvớiđườ
ngcong.
Phươngtrìnhđườngtiếptuyếnlà
x1
b
=xo
a
)xx)(
b
(
f
)x(
f
y
00
−
′
=−
Tiếptuyếnnàycắttrụchoànhtạiđiểmcó
y=0,nghĩalà:
)xx)(
b
(
f
)x(
f
010
−
′
=−
hay:
)x(f
)x(
f
xx
0
0
01
′
−=
Từx
1talạitiếptụcvẽtiếptuyếnvớiđườngcongthìgiaođiểmxisẽtiếntới
nghiệmcủaphươngtrình.
20
Việcchọnđiểmbanđầuxorấtquantrọng.Trênhìnhvẽtrêntathấy
nếuchọnđiểmbanđầux
o=athìtiếptuyếnsẽcắttrụctạimộtđiểmnằm
ngoàiđoạn[a,b].Chọnx
o=bsẽthuậnlợichoviệctínhtoán.Chúngtacó
địnhlí:
Nếuf(a).f(b)<0;f(x)vàfʺ(x)kháckhôngvàgiữnguyêndấuxácđịnhkhix
∈
[a,b]thìxuấtpháttừxo
∈
[a,b]thoảmãnđiềukiệnf(xo).f
″
(xo)>0cóthểtính
theophươngphápNewtonnghiệm
ξ
duynhấtvớiđộchínhxáctuỳý.
KhidùngphươngphápNewtoncầnlấyxolàđầumútcủađoạn[a,b]
đểtạiđóf(xo).fʺ(xo)>0.Ápdụnglíthuyếttrênchúngtaxâydựngchương
trìnhtínhsau:
Chươngtrình2‐5
//phuongphapNewton
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#definen50
#defineepsi1e‐5
voidmain()
{
floatt,x0;
floatx[n];
inti;
floatf(float);
floatdaoham(float);
clrscr();
printf(ʺTimnghiemcuaphuongtrinhphituyen\nʺ);
printf(ʺbangphuongphaplap
Newton\nʺ);
printf(ʺChogiatricuax0=ʺ);
scanf(ʺ%fʺ,&x0);
i=1;
x[i]=x0;
do
{
x[i+1]=x[i]‐f(x[i])/daoham(x[i]);
21
t=fabs(x[i+1]‐x[i]);
x[i]=x[i+1];
i=i+1;
if(i>100)
{
printf(ʺBaitoankhonghoitu\nʺ);
getch();
exit(1);
}
else
;
}
while(t>=epsi);
printf(ʺNghiemx=%.5fʺ,x[i]);
getch();
}
floatf(floatx)
{
floata=x*x‐x‐2;
return(a);
}
floatdaoham(floatx)
{
floatd=2*x‐1;
return(d);
}
Chươngtrìnhnàyđượcdùngxácđịnhnghiệmcủahàmđãđượcđịnh
nghĩatrongfunction.Trongtrườnghợpnàyphươngtrìnhđólà:
x
2
‐x‐1=0
Kếtquảtínhvớigiátrịđầux
o=0chonghiệmx=2.
§6.PHƯƠNGPHÁPMULLER
Trongphươngphápdâycungkhitìmnghiệmtrongđoạn[a,b]taxấp
xỉhàmbằngmộtđườngthẳng.Tuynhiênđểgiảmlượngtínhtoánvàđể
nghiệmhộitụnhanhhơntacóthểdùngphương
phápMuller.Nộidung
củaphươngphápnàylàthayhàmtrongđoạn[a,b]bằngmộtđườngcong
bậc2màtahoàntoàncóthểtìmnghiêmchínhxáccủanó.Gọicácđiểmđó
22
cóhoànhđộlầnlượtlàa=x2,b=x1vàtachọn thêmmộtđiểmx0nằmtrong
đoạn[x
2,x1].Gọi
h
1=x1‐x0
h2=x0‐x2
v=x‐x0
f(x
0)=f0
f(x1)=f1
f(x2)=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:
22
2
222
11
2
111
0
2
0
fcbhah)xx(hv
fcbhah)xx(hv
f
c)0(
b
)0(a)xx(0v
=++==
=++==
=
+
+==
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ó:
ac4
b
b
c2
xn
2
02,1
−±
−=
Tiếpđóta chọnnghiệmgầnx
0nhấtlàmmộttrong3điểmđểtínhxấpxỉ
mới.Cácđiểmnàyđượcchọngầnnhaunhất.Tiếptụcquátrìnhtínhđến
khiđạtđộchínhxácyêucầuthìdừnglại.
Vídụ:Tìmnghiệmcủahàmf(x)=sin(x)‐x/2trongđoạn[1.8,2.2].Tach ọn
x
0=2
Tacó: x
0=2 f(x0)=‐0.0907h1=0.2
x
1=2.2 f(x1)=‐0.2915h2=0.2
x
2=1.8 f(x2)=0.07385 γ=1
Vậythì:
45312.0
)11(2.01
07385.0)11()0907.0()2915.0(1
a
2
−=
+××
+
+
×
−−−×
=
0907.0c
91338.0
2.0
2.0)45312.0()097.0(2915.0
b
2
−=
−=
×−−−−−
=
23
Tacónghiệmgầnx0nhấtlà:
89526.1
)0907.0()45312.0(4)91338.0(91338.0
)0907.0(2
0.2n
2
1
=
−×−×−−−−
−
×
−=
Vớilầnlặpthứhaitacó:
x
0=1.89526 f(x0)=1.9184×10
‐4
h1=0.10474
x
1=2.0 f(x1)=‐0.0907 h2=0.09526
x
2=1.8 f(x2)=0.07385γ=0.9095
Vậythì:
4
24
2
4
109184.1c
81826.0
10474.0
10474.0)4728.0(109184.10907.0
b
4728.0
9095.110474.09095.0
07385.09095.1)109184.1()0907.0(9095.0
a
−
−
−
×=
−=
×−−×−−
=
−=
××
+××−−×
=
Tacónghiệmgầnx
0nhấtlà:
89594.1
109184.1)4728.0(4)81826.0(81826.0
109184.12
89526.1n
42
4
1
=
××−×−−−
××
−=
−
−
Tacóthểlấyn1=1.895494làmnghiệmcủabàitoán.
ChươngtrìnhgiảibàitoánbằngphươngphápMullernhưsau:
Chươngtrình2‐6
//phuongphapMuller
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
voidmain()
{
floatx0,x1,x2,h1,h2,eps;
floata,b,c,gamma,n1,n2,xr;
intdem;
floatf(float);
clrscr();
printf(ʺPHUONGPHAPMULLER\nʺ);
printf(ʺ\nʺ);
printf(ʺChokhoangcantimnghiem[a,b]\nʺ);
printf(ʺChogiatriduoia
=ʺ);
24
scanf(ʺ%fʺ,&x2);
printf(ʺChogiatritrenb=ʺ);
scanf(ʺ%fʺ,&x1);
if(f(x1)*f(x2)>0)
{
printf(ʺ\nʺ);
printf(ʺNghiemkhongnamtrongdoannay\nʺ);
getch();
exit(1);
}
eps=1e‐5;
x0=(x1+x2)/2;
dem=0;
do
{
dem=dem+1;
h1=x1‐x0;
h2=x0‐x2;
gamma=h2/h1;
a=(gamma*f(x1)‐
f(x0)*(1+gamma)+f(x2))/(gamma*(h1*h1)*(1+gamma));
b=(f(x1)‐f(x0)‐a*(h1*h1))/h1;
c=f(x0);
if((a==0)&&(b!=0))
{
n1=‐c/b;
n2=n1;
}
if((a!=0)&&(b==0))
{
n1=(‐sqrt(‐c/a));
n2=(sqrt(‐c/a));
}
if((a!=0)&&(b!=0))
{
n1=x0‐2*c/(b+(sqrt(b*b‐4*a*c)));
n2=x0‐2*c/(b‐(sqrt(b*b‐4*a*c)));
}
if(fabs(n1‐x0)>fabs(n2‐x0))
xr=n2;
25
else
xr=n1;
if(xr>x0)
{
x2=x0;
x0=xr;
}
else
{
x1=x0;
x0=xr;
}
}
while(fabs(f(xr))>=eps);
printf(ʺ\nʺ);
printf(ʺPhuongtrinhconghiemx=%.5fsau%dlanlapʺ,xr,dem);
getch();
}
floatf(floatx)
{
floata=sin(x)‐x/2;
return(a);
}
§7.PHƯƠNGPHÁPLẶPBERNOULLI
Có nhiều phương phápđểtìm nghiệm của mộtđa thức. Ta xét
phươngtrình:
a
ox
n
+a1x
n‐1
+⋅⋅⋅+an=0
Nghiệmcủaphươngtrìnhtrênthoảmãnđịnhlí:
Nếumax{|a1|,|a2|, ,|an
|}=Athìcácnghiệmcủaphươngtrìnhthoảmãnđiềukiện|x|<1+A/|a
0|
PhươngphápBernoullichophéptínhtoánnghiệmlớnnhấtαcủamột
đathứcP
n(x)cónnghiệmthựcphânbiệt.Saukhitìmđượcnghiệmlớnnhất
αtachiađathứcP
n(x)cho(x‐α)vànhậnđượcđathứcmớiQn‐1(x).Tiếptục
dùngphươngphápBernoulliđểtìmnghiệmlớnnhấtcủaQ
n‐1(x).
SauđólạitiếptụccácbướctrênchođếnkhitìmhếtcácnghiệmcủaP
n(x).
Chúngtakhảosátphươngtrìnhsaiphânϕcódạngnhưsau:
ϕ=a
oyk+n+a1yk+n‐1+ +anyk=0(1)
26
Đâylàmộtphươngtrìnhsaiphântuyếntínhhệsốhằng.Khichotrướccác
giá trịđầu y
o, y1, yn‐1ta tìmđược các giátrị yn,yn+1, Chúngđược gọi là
nghiệmcủaphươngtrìnhsaiphântuyếntính(1).
Đathức
P
n(x)=a0x
n
+a1x
n‐1
+ +an‐1x+an(2)
vớicùngmộthệsốa
inhư(1)đượcg ọilàđathứcđặctínhcủaphươngtrình
saiphântuyếntính(1).Nếu(2)cónnghiệmphânbiệtx
1,x2, ,xnthì(1)có
cácnghiệmriênglà
k
ii
xy =
Nếuy
ilàcácnghiệmcủaphươngtrìnhsaiphânlàtuyếntính(1),thì
(3)
k
nn
k
22
k
11
k
xcxcxcy +⋅⋅⋅++=
vớicáchệsốc
ibấtkìcũnglà nghiệmcủaphươngtrình saiphântuyếntính
hệsốhằng(1).
Nếucácnghiệmcầnsaocho:
|x
1|≥|x2|≥ |xn|
Vậy
⎥
⎥
⎦
⎤
⎢
⎢
⎣
⎡
⋅⋅⋅+
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
+=
k
1
2
2
1
k
11
k
x
x
c
c
1xcy
và
⎥
⎥
⎦
⎤
⎢
⎢
⎣
⎡
⋅⋅⋅+
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
+=
+
+
+
1k
1
2
2
1
1k
11
1k
x
x
c
c
1xcy
dođó:
⎥
⎥
⎦
⎤
⎢
⎢
⎣
⎡
⋅⋅⋅+
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
+
⎥
⎥
⎦
⎤
⎢
⎢
⎣
⎡
⋅⋅⋅+
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
+
=
+
+
k
1
2
2
1
1k
1
2
2
1
1
k
1k
x
x
c
c
1
x
x
c
c
1
x
y
y
do x
1>x2> >xn
nên: 0
x
x
,
x
x
1k
1
2
k
1
2
→
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
+
khik→∞
vậy:
0
y
y
k
1k
→
+
khik→∞
Nghĩalà:
1
k
1k
k
x
y
y
lim =
+
∞→
Nếuphươngtrìnhviphâng ồmn+1hệsố,mộtnghiệmriêngy
kcóthể
đượcxácđịnhtừngiátrịy
k‐1,yk‐2, ,yn‐1.Điềuchophéptínhtoánbằngcách
truyhồicácnghiệmriêngcủaphươngtrìnhviphân.
Đểtínhnghiệmlớnnhấtcủađathức,taxuấtpháttừcácnghiệmriêng
y
1=0,y1=0, ,yn=1đểtínhyn+1.Cáchtínhnàyđượctiếptụcđểtínhyn+2
27
xuấtpháttừy1=0,y 2=0, ,yn+1và tiếptụcchođếnkhiyk+1/ykkhôngbiến đổi
nữa.Trịsốcủay
k+nđượctínhtheocôngthứctruyhồi:
(
k
n
1nk
1
0
nk
yaya
a
1
y +⋅⋅⋅+−=
−++
)
(4)
Vídụ:TínhnghiệmcủađathứcPn(x)=P3(x)=x
3
‐10x
2
+31x‐30.
Nhưvậya
o=1,a1=‐10,a2=31vàa3=‐30.
Phươngtrìnhsaiphântươngứnglà:
y
k+3‐10yk+2+31yk+1‐30yk=0
Tachotrướccácgiátrịy
1=0;y2=0vày3=1.Theo(4)tatínhđược:
y
4=‐(‐10y3+31y2‐30y1)=10
y
5=‐(‐10y4+31y3‐30y2)=69
y
6=‐(‐10y5+31y5‐30y3)=410
y
7=‐(‐10y6+31y5‐30y4)=2261
y
8=‐(‐10y7+31y6‐30y5)=11970
y
9=‐(‐10y8+31y7‐30y6)=61909
y
10=‐(‐10y9+31y8‐30y8)=315850
y
11=‐(‐10y10+31y9‐30y8)=1598421
y
12=‐(‐10y11+31y10‐30y9)=8050130
y
13=‐(‐10y12+31y11‐30y10)=40425749
y
14=‐(‐10y13+31y12‐30y11)=202656090
y
15=‐(‐10y14+31y13‐30y12)=1014866581
y
16=‐(‐10y15+31y14‐30y13)=5079099490
y
17=‐(‐10y16+31y15‐30y14)=24409813589
y18=‐(‐10y17+31y16‐30y15)=127092049130
y
19=‐(‐10y18+31y17‐30y16)=635589254740
Tỉsốcácsốy
k+1/yklậpthànhdãy:
10;6.9;5.942;5.5146;5.2941;5.172;5.1018;5.0607;5.0363;5.0218;
5.013;5.0078;5.0047;5.0028;5.0017;5.001
nghĩalàchúngsẽhộitụtớinghiệmlớn
nhấtlà5củađathức.
Chươngtrình2‐7
//phuongphapBernoulli
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#definemax50
28
voidmain()
{
floata[max],y[max];
intk,j,i,n,l;
floats,e1,e2,x0,x1,x;
clrscr();
printf(ʺChobaccuadathuccantimnghiemn=ʺ);
scanf(ʺ%dʺ,&n);
e1=1e‐5;
printf(ʺChocachesocuadathuccantimnghiem\nʺ);
for(i=0;i<=n;i++)
{
printf(ʺa[%d]=
ʺ,i);
scanf(ʺ%fʺ,&a[i]);
}
for(k=0;k<=n;k++)
a[k]=a[k]/a[0];
tt:x1=0;
for(k=2;k<=n;k++)
y[k]=0;
y[1]=1;
l=0;
do
{
l=l+1;
s=0;
for(k=1;k<=n;k++)
s=s+y[k]*a[k];
y[0]=‐s;
x=y[0]/y[1];
e2=fabs(x1‐x);
x1=x;
for(k=n;k>=1;k‐‐)
y[k]=y[k‐1];
}
while((l<=50)||(e2>=e1));
if(e2>=e1)
{
printf(ʺKhonghoituʺ);
29
getch();
exit(1);
}
else
printf(ʺNghiemx=%.4f\nʺ,x);
n=n‐1;
if(n!=0)
{
a[1]=a[1]+x;
for(k=2;k<=n;k++)
a[k]=a[k]+x*a[k‐1];
gotott;
}
getch();
}
Kếtquảnghiệmcủađathứcx
3
‐10x
2
+31x‐30là:5;3và2
§8.PHƯƠNGPHÁPLẶPBIRGE‐VIETTE
Cácnghiệmthực,đơngiảncủamộtđathứcP
n(x)đượctínhtoánkhi
sửdụngphươngphápNewton
)x(P
)x(P
xx
in
in
i1i
′
−=
+
(1)
Đểbắtđầutínhtoáncầnchọnmộtgiátrịbanđầux
o.Chúngtacóthể
chọnmộtgiátrịx
onàođó,vídụ:
1n
n
0
a
a
x
−
−=
vàtínhtiếpcácgiátrịsau:
)x(P
)x(P
xx
0n
0n
01
′
−=
)x(P
)x(P
xx
1n
1n
12
′
−=
TiếptheocóthểđánhgiáP
n(xi)theothuậttoánHorner:
P
0=a0
P1=P0xi+a1(2)
P
2=P1xi+a2
P3=P2xi+a3
P(x
i)=Pn=Pn‐1xi+an
30
MặtkháckhichiađathứcPn(x)chomộtnhịthức(x‐xi)tađược:
P
n(x)=(x‐xi)Pn‐1(x)+bn(3)
vớib
n=Pn(xi).ĐathứcPn‐1(x)códạng:
P
n‐1(x)=box
n‐1
+b1x
n‐2
+p3x
n‐3
+ +bn‐2x+bn‐1(4)
Đểxácđịnhcáchệsốcủađathức(4)tathay(4)vào(3)vàcânbằng
cáchệsốvớiđathứccầntìmnghiệmP
n(x)màcáchệsốaiđãcho:
(x‐x
i)(box
n‐1
+b1x
n‐2
+b3x
n‐3
+ +bn‐2x+bn‐1)+bn
=aox
n
+a1x
n‐1
+a2x
n‐2
+ +a
n
‐1x+a=(5)
Từ(5)rútra:
b
o=ao
b1=a1+boxi(6)
b
2=a2+b1xi
b
k=ak+bk‐1xi
b
n=an+bn‐1xi=Pn(xi)
Đạohàm(3)tađược:
)x(P)x(P)xx()x(P
1n1nin −−
+
′
−=
′
và:
(7)
)x(P)x(P
i1nin −
=
′
Nhưvậyvớimộtgiátrịx
inàođótheo(2)tatínhđượcPn(xi)vàkết
hợp(6)với(7)tínhđượcP′
n(xi).Thaycáckếtquảnàyvào(1)tatínhđược
giátrịx
i+1.Quátrìnhđượctiếptụcchođếnkhi|xi+1‐xi|<εhayPn(xi+1)≈0
nênα
1≈xi+1làmộtnghiệmcủađathức.
Phép chiaPn(x) cho(x‐α1)cho taPn‐1(x) vàmột nghiệmmới khác
đượctìmtheocáchtrênkhichọnmộtgiátrịx
omớihaychọnchínhxo=α1.
Khi bậc củađa thức giảm xuống còn bằng 2 ta dùng các công thức tìm
nghiệmcủatamthứcđểtìmcácnghiệmcònlại.
Vídụ:TìmnghiệmcủađathứcP3(x)=x
3
‐x
2
‐16x+24
ao
=1 a1=‐1a2=‐16 a3=24
Chọnx
o=3.5tacó:
P
o=ao=1
P
1=a1+pox0=‐1+3.5*1=2.5
P
2=a2+p1x0=‐16+3.5*2.5=‐7.25
P3=a3+p2x0=24+3.5*(‐7.25)=‐1.375
b
0=a0=1;
b
1=a1+box0=‐1+3.5*1=2.5
b
2=a2+b1x0=‐16+3.5*2.5=‐7.25
P2(3.5)=b0x
2
+b1x+b2=13.75
31
6.3
75.13
375.1
5.3
)x(P
)x(P
xx
0n
0n
01
=+=
′
−=
Lặplạibướctínhtrênchox
1tacó:
P
o=ao=1
P
1=a1+pox1=‐1+3.6*1=2.6
P
2=a2+p1x1=‐16+3.6*2.6=‐6.64
P3=a3+p2x1=24+3.6*(‐6.64)=‐0.096
b
o=ao=1
b
1=a1+box1=‐1+3.6*1=2.6
b
2=a2+p1x1=‐16+3.6*2.6=‐6.64
P2(3.6)=b0x
2
+b1x+b2=15.68
606.3
68.15
096.0
6.3
)x(P
)x(P
xx
1n
1n
12
=+=
′
−=
Quátrìnhcứthếtiếptụcchođếnkhisaisốchấpnhậnđược.Chươngtrình
dướiđâymôtảthuậttínhtrên.
Chươngtrình2‐8
//phuongphapBirge‐Viette
#include<conio.h>
#include<stdio.h>
#include<math.h>
#definemax20
voidmain()
{
floata[max],p[max],d[max],x[max];
intk,j,i,n;
floate1,e2,x0,x1;
clrscr();
printf(ʺChobaccuadathucn=ʺ);
scanf(ʺ%dʺ,&n);
e1=0.0001;
printf(ʺChocachesocuadathuccantim
nghiem\nʺ);
for(i=0;i<=n;i++)
{
printf(ʺa[%d]=ʺ,i);
scanf(ʺ%fʺ,&a[i]);
32
}
x0=a[0];
for(i=0;i<=n;i++)
a[i]=a[i]/x0;
printf(ʺNghiemcuaphuongtrinh:\nʺ);
tt:x0=‐a[n]/a[n‐1];
j=0;
do
{
j=j+1;
p[1]=x0+a[1];
d[1]=1.0;
for(k=2;k<=n;k++)
{
p[k]=p[k‐1]*x0+a[k];
d[k]=d[k‐1]*x0+p[k‐1];
}
x1=x0‐p[n]/d[n];
e2=fabs(x1‐x0);
if(e2>e1)
x0=x1;
}
while((j<=50)||(e2>=e1));
if(e2>=e1)
printf(ʺKhonghoituʺ);
else
printf(ʺx=%.4f\nʺ,x1);
n=n‐1;
if(n!=0)
{
for(k=1;k<=n;k++)
a[k]=p[k];
gotott;
}
getch();
}
Dùngchươngtrìnhtrênđểtìmnghiệmcủađathứcx
4
+2x
3
‐13x
2
‐14x
+24tađượccácnghiệmlà:‐4;3;‐2và1.
§9.PHƯƠNGPHÁPNGOẠISUYAITKEN
33
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)
β=an‐pb‐2
Chúngtanhậnthấyrằngαđượctínhtoánxuấtpháttừcùngmộtcông
thứctruyhồinhưcáchệsốb
kvàtươngứngvớihệsốbn‐1
bn‐1=an‐1+sbn‐2‐pbn‐3=α
Hệsốbnlà:
b
n=an+sbn‐1‐pbn‐2=sbn‐1+β
vàcuốicùng:
R
1(x)=αx+β=b+‐1(x‐s)+bn
Ngoàiracáchệsốbiphụthuộcvàosvàpvàbâygiờchúngtacần
phảitìmcácgiátrịđặcbiệts
*
vàp
*
đểchobn‐1vàbntriệttiêu.Khiđór1(x)=0
vànghiệmcủatamthứcx
2
‐s
*
x+p
*
xsẽlànghiệmcủađathứcPn(x).Tabiết
rằngb
n‐1vàbnlàhàmcủasvàp:
b
n‐1=f(s,p)
b
n=g(s,p)
Việctìms
*
vàp
*
đưađếnviệcgiảihệphươngtrìnhphituyến:
⎩
⎨
⎧
=
=
0)p,s(g
0)p,s(
f
PhươngtrìnhnàycóthểgiảidễdàngnhờphươngphápNewton.Thậtvậy
vớimộtphươngtrìnhphituyếntacócôngthứclặp:
x
i+1=xi‐f(xi)/fʹ(xi)
hay fʹ(x
i)(xi+1‐xi)=‐f(xi)
Vớimộthệcóhaiphươngtrình,côngthứclặptrởthành:
J(X
i)(Xi+1‐Xi)=‐F(Xi)
34
với Xi={si,pi}
T
và Xi+1={si+1,pi+1}
T
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
=
)p,s(g
)p,s(
f
)X(F
ii
ii
i
⎟
⎟
⎟
⎟
⎠
⎞
⎜
⎜
⎜
⎜
⎝
⎛
∂
∂
∂
∂
∂
∂
∂
∂
=
p
g
s
g
p
f
s
f
)X(J
i
Quanhệ:J(X
i)∆X=‐F(Xi)với∆X={si+1 ‐s i,pi+1‐pi}
T
tươngứngvớimộthệ
phươngtrìnhtuyếntínhhaiẩnsố
∆s=si+1‐sivà∆p=pi+1‐pi:
⎪
⎪
⎩
⎪
⎪
⎨
⎧
−=∆
∂
∂
+∆
∂
∂
−=∆
∂
∂
+∆
∂
∂
)p,s(gp
p
g
s
s
g
)p,s(fp
p
f
s
s
f
ii
ii
TheocôngthứcCramertacó:
δ
∂
∂
+
∂
∂
−
=∆
p
f
g
p
g
f
s
δ
∂
∂
+
∂
∂
−
=∆
s
g
f
s
f
g
p
s
g
p
f
p
g
s
f
∂
∂
∂
∂
−
∂
∂
∂
∂
=δ
Đểdùngđượccôngthứcnàytacầntínhđượccácđạohàm
s
f
∂
∂
,
p
f
∂
∂
,
s
g
∂
∂
,
p
g
∂
∂
.
Cácđạohàmnàyđượctínhtheocôngthứctruyhồi.
Dob
o=aonên
0
s
b
0
=
∂
∂
0
p
b
0
=
∂
∂
b
1=a1+sbonên
0
1
b
s
b
=
∂
∂
0
p
b
1
=
∂
∂
b
2=a2+sb1‐pbonên
s
)pb(
s
)sb(
s
a
s
b
0
122
∂
∂
−
∂
∂
+
∂
∂
=
∂
∂
Mặtkhác:
0
s
a
2
=
∂
∂
1
11
b
s
)
b
(
s
s
)sb(
+
∂
∂
=
∂
∂
0
s
)pb(
0
=
∂
∂
nên:
01
2
sbb
s
b
+=
∂
∂
b
3=a3+sb2‐pb1nên:
35
s
b
p
s
b
sb
s
b
12
2
3
∂
∂
−
∂
∂
+=
∂
∂
Nếuchúngtađặt:
1k
k
c
s
b
−
=
∂
∂
thì:
c
o=bo(2)
c
1=b1+sbo=b1+sco
c2=b2+sc1‐pco
c
k=bk+sck‐1‐pck‐2
cn‐1=bn‐1+scn‐2‐pcn‐3
Nhưvậycáchệsốcũngđượctínhtheocáchnhưcáchệsốb
k.Cuốicùngv ới
f=b
n‐1vàg=bntađược:
2n1n3n2n
c
s
f
c
s
f
c
s
f
c
s
f
−−−−
=
∂
∂
=
∂
∂
=
∂
∂
=
∂
∂
2
2n3n1n
3nn2n1n
ccc
c
b
c
b
s
−−−
−−−
−
−
=∆ (3)
2
2n3n1n
2nn1n1n
ccc
c
b
c
b
p
−−−
−−−
−
−
=∆ (4)
SaukhiphântíchxongP
n(x)tatiếptụcphântíchPn‐2(x)theophương
pháptrên.Cácbướctínhtoángồm:
‐Chọncácgiátrịbanđầubấtkìs
0vàp0
‐Tínhcácgiátrịbo, ,bntheo(1)
‐Tínhcácgiátrịc
o, ,cntheo(2)
‐Tính∆s
ovà∆potheo(3)và(4)
‐Tínhs
1=s0+∆sovàp1=po+∆po
‐Lặplạibước1chođếnkhipi+1=pi=pvàsi+1=si=s
‐Giảiphươngtrìnhx
2‐sx+pđểtìm2nghiệmcủađathức
‐BắtđầuquátrìnhtrênchođathứcP
n‐2(x)
Vídụ:TìmnghiệmcủađathứcP4(x)=x
4
‐1.1x
3
+2.3x
2
+0.5x
2
+3.3.
Vớilầnlặpbanđầutachọns=‐1vàp=1,nghĩalàtamthứccódạng:x
2
+x+1
a
0 a1 a2 a3 a4
1 ‐1.1 2.3 0.5 3.3
36
sbi‐1 2.1 ‐3.4 0.8
‐pb
i‐1‐1 2.1 ‐3.4
b
i 1 ‐2.1 3.4 ‐0.8=bn‐1 0.7=bn
sbi‐1.0 3.1 ‐5.5
‐pb
i‐1‐1.0 3.1
c
i 1 ‐3.1 5.5 ‐3.2
11.0
5.52.3
1.35.5
5.57.0
1.38.0
s =
−
−
−
−
=∆
06.0
5.52.3
1.35.5
7.02.3
8.05.5
p =
−
−
−
=∆
s
*
=‐1+0.11=‐0.89
p
*
=1+0.06=1.06
Tiếptụclặplần2vớis
1=s
*
vàp1=p
*
tacó:
a
0 a1 a2 a3 a4
1 ‐1.1 2.3 0.5 3.3
sbi‐0.89 1.77 ‐2.68 0.06
‐pbi
‐1‐1.06 2.11 ‐3.17
bi 1 ‐1.99 3.01 ‐0.07=b
n‐1 0.17=bn
sbi‐0.89 2.56 ‐4.01
‐pbi
‐1‐1.0 3.1
ci 1 ‐2.88 4.51 ‐1.03
01.0
51.403.1
88.251.4
5.57.0
88.207.0
s −=
−
−
−
−
=∆
04.0
51.403.1
88.251.4
17.003.1
07.051.4
p =
−
−
−−
=∆
s
*
=‐0.89‐0.01=‐0.9
p
*
=1.06+0.04=1.1
37