Tải bản đầy đủ

Tài liệu CHƯƠNG 7: CÁC PHƯƠNG TRÌNH VI PHÂN THƯỜNG docx


360
CHƯƠNG 7: CÁC PHƯƠNG TRÌNH VI PHÂN THƯỜNG

§1.BÀITOÁNCAUCHY
 Một phương trình vi phân cấp 1 có thể viết dưới dạng giảiđược

=yf(x,y)
màtacóthểtìmđượchàmytừđạohàmcủanó.Tồntạivôsố
nghiệmthoảmãnphươngtrìnhtrên.Mỗinghiệm phụthuộcvàomộthằngsố
tuỳý.Khichotrướcgiátrịbanđầ
ucủaylàyotạigiátrịđầuxotanhậnđược
mộtnghiệmriêngcủaphươngtrình.BàitoánCauchy(haybàitoáncóđiều
kiệnđầu)tóm lạinhưsau:choxsaochob
≥x≥a,tìmy(x)thoảmãnđiều
kiện:



α=
=


)a(y
)y,x(
f
)x(y
(1)
 Ngườitachứngminhrằngbàitoánnàycómộtnghiệmduynhấtnếuf
thoảmãnđiềukiệnLipschitz:

2121
yyL)y,x(f)y,x(f −≤− 
vớiLlàmộthằngsốdương.
 Ngườitacũngchứngminhrằngnếuf′
y(đạohàmcủaftheoy) làliên
tụcvàbịchặnthìfthoảmãnđiềukiệnLipschitz.
 Mộtcáchtổngquáthơn,ngườitađịnhnghĩahệphươngtrìnhbậc1:

)y, ,y,y,x(fy
)y, ,y,y,x(fy
)y, ,y,y,x(
f
y
n21nn
n2122
n2111
=

⋅⋅⋅⋅
=

=


Taphảitìmnghiệmy
1,y2, ,ynsaocho:




α=


=

)a(Y
)X,x(
f
)x(Y

với:



















=

n
2
1
y


y
y
Y

















=
n
2
1
f


f
f
F

















=
n
2
1
y


y
y
Y
 

361
Nếuphươngtrìnhviphâncóbậccaohơn(n),nghiệmsẽphụthuộcvào
nhằngsốtuỳý.Đểnhậnđượcmộtnghiệmriêng,taphảichonđiềukiệnđầu.
Bàitoánsẽcógiátr
ịđầunếuvớigiátrịxođãchotachoy(xo),y′(xo),y″(xo), 
 Mộtphươngtrìnhviphânbậcncóthểđưavềthànhmộthệphương
trìnhviphâncấp1.Vídụnếutacóphươngtrìnhviphâncấp2:




β=

α=

=
′′
)a(y,
)a(y
)y,y,x(
f
y

Khiđặtu=yvàv=y′tanhậnđượchệphươngtrìnhviphâncấp1:




=

=

)v,u,x(gv
vu

vớiđiềukiệnđầu:u(a)=αvàv(a)=β
 Các phương
 pháp giải phương trình vi phânđược trình bày trong
chươngnàylàcácphươngpháprờirạc:đoạn[a,b]đượcchiathànhnđo ạn
nhỏbằngnhauđượcgọilàcácʺbướcʺtíchphânh=(
b‐a)/n.

§2.PHƯƠNGPHÁPEULER
Giảsửtacóphươngtrìnhviphân:




α=
=

)a(y
)y,x(
f
)x(y
(1)
vàcầntìmnghiệmcủanó.Tachiađoạn[x
o,x]thànhnphầnbởicácđiểm
chia:
x
o<x1<x2< <xn=x
TheocôngthứckhaitriểnTaylormộthàmlâncậnx
itacó:

⋅⋅⋅+
′′′

+
′′

+

−+=
++
++
)x(y
6
)xx(
)x(y
2
)xx(
)x(y)xx()x(y)x(y
i
3
i1i
i
2
i1i
ii1ii1i

Nếu(x
i+1‐xi)khábéthìtacóthểbỏquacács ốhạng(xi+1‐xi)
2
vàcácsố
hạngbậccao
y(x
i+1)=y(xi)+(xi+1‐xi)y′(xi)
Trườnghợpcácmốccáchđều:
(x
i‐1‐xi)=h=(x‐xo)/n
thìtanhậnđượccôngthứcEulerđơngiản:
 y
i+1=yi+hf(xi,yi)   (2)
Vềmặthìnhhọctathấy(1)chokếtquảcàng
chínhxácnếubướchcàngnhỏ.
Taxâydựnghàm
euler()đểthựchiệnthuậttoántrên:
y
x
x
i
xi+1
yi
yi+1

362
function[X,Y]=euler(fxy,xo,xf,yo,n)
%%Giaiphuongtrinhy ʹ(x)=f(x,y(x))hayy’=f(x)
ifn<2
n=2;
end
h=(xf‐xo)/n;
X=zeros(n+1,1);
M=max(size(yo));%sophuongtrinh(socotcuamatranY)
Y
=zeros(n+1,M);
%datdieukiendau
x=xo;
X(1)=x;
y=yo;
Y(1,:)=yʹ;
fori=1:n
ifnargin(fxy)>1
k1=h*feval(fxy,x,y);
else
k1=h*feval(fxy,x);
end
y=y+k1;
x=x
+h;
X(i+1)=x;
Y(i+1,:)=yʹ;
end

functiondy=f1(t,y)
dy=zeros(3,1);
dy(1)=y(2)*y(3);
dy(2)=‐y(1)*y(3);
dy(3)=‐0.51*y(1)*y(2);


Đểgiảiphươngtrìnhchobởihàmf1(x,y)tadùngchươngtrình
cteuler.m:

clearall,clc
a=0;

363
b=1;
y=@f1;
ya=[011]ʹ;
m=200;
[x,y]=euler(y,a,b,ya,m)
plot(x,y);

§3.PHƯƠNGPHÁPHEUN
 Phương pháp Heun cònđược gọi là phương pháp hình thang hay
phươngpháp.Chophươngtrình:
 y’=f(t,y)
Tacó:
+
+
+
=−=

k1
k1
k
k
t
t
k1 k
t
t
y y(t ) y(t ) f(t, y)dt
hay:
+
+
=+

k1
k
t
k1 k
t
y(t ) y(t ) f(t,y)dt  vớiy(t0)=y0
Nếutasửdụngquytắctíchphânhìnhthangthìtacó:

+++
⎡⎤
=+ −
⎢⎥
⎣⎦
k1 k k k k1 k1
h
y y f(t ,y ) f(t ,y )
2

Vếphải(RHS)củaphươngtrìnhnàycóy
k+1làgáitrịchưabiếttạithờiđiểmtk.
Đểgiảiquyếtvấnđềnàytathayy
k+1ởRHSbằngcôngthứcxấpxỉ:

+
≅+
k1 k k k
yyhf(t,y)
Nhưvậy:

[]
{
}
++
=+ + +
k1 k k k k1 k k k
h
y y f(t ,y ) f (t ,y hf(t ,y )
2

ĐâychínhlàcôngthứcHeun.
Taxâydựnghàm
heun()đểthựchiệnthuậttoántrên:

function[X,Y]=heun(fxy,xo,xf,yo,n)
%Giaiphuongtrinhyʹ(x)=f(x,y(x))hayy’=f(x)
%dungthuattoanHeunvoinbuoctinh
ifn<2
n=2;
end

364
h=(xf‐xo)/n;
X=zeros(n+1,1);
M=max(size(yo));%sophuongtrinh(socotcuamatranY)
Y=zeros(n+1,M);
%datdieukiendau
x=xo;
X(1)=x;
y=yo;
Y(1,:)=yʹ;
fori=1:n
ifnargin(fxy)>1
f1
=feval(fxy,x,y);
f2=feval(fxy,x+h,y+h*f1);
else
f1=feval(fxy,x);
f2=feval(fxy,x+h);
end
y=y+h*(f1+f2)/2;
x=x+h;
X(i+1)=x;
Y(i+1,:)=y.ʹ;
end


Đểgiảiphươngtrìnhtadùngchương trình
ctheun.m:

clearall,clc
a=0;
b=1;
y=inline(ʹ2*x+yʹ);
ya=0.5;
n=10;%solantinhchin=10
[x,y]=heun(y,a,b,ya,n)
plot(x,y);

§4.PHƯƠNGPHÁPRUNGE‐KUTTA

365
MặcdùphươngphápHeuntốthơnphươngphápEulernhưngnóvẫn
chưađủđộchínhxácđốivớicácbàitoánthựctế.
XétbàitoánCauchy(1).Giảsửtađãtìmđượcgiátrịgầnđúngy
icủa
y(x
i)vàmuốntínhyi+1củay(xi+1).TrướchếttaviếtcôngthứcTaylor:
)c(y
!m
h
)x(y
!m
h
)x(y
2
h
)x(yh)x(y)x(y
)1m(
1m
i
)m(
m
i
2
ii1i
+
+
+
++⋅⋅⋅+
′′
+

+= (11)
vớic∈(x
i,xi+1)và:

[
]
)x(y,x
f
)x(y
iii
=


[]
)x(y,xf
dx
d
)x(y
ii
1k
1k
i
)k(


= 
Taviếtlại(11)dướidạng:
)c(y
!m
h
)x(y
!m
h
)x(y
2
h
)x(yhyy
)1m(
1m
i
)m(
m
i
2
ii1i
+
+
+
++⋅⋅⋅+
′′
+

=−  (12)
TađãkéodàikhaitriểnTaylorđểkếtquảchínhxáchơn.Đểtínhy′
i,y″iv.v.ta
cóthểdùngphươngphápRunge‐Kuttabằngcáchđặt:
)i(
44
)i(
33
)i(
22
)i(
11i1i
krkrkrkryy
+
++=−
+
(13)
trongđó:








γ+β++=
α++=
=

)kky,bhx(hfk
)ky,ahx(hfk
)y,x(hfk
)i(
2
)i(
1ii
)i(
3
)i(
1ii
)i(
2
ii
)i(
1
(14)
vàtacầnxácđịnhcáchệsốa,b, ;α,β,γ, ;r
1,r2, saochovếphảicủa(13)
khácvớivếphảicủa(12)mộtvôcùngbécấpcaonhấtcóthểcóđốivớih.
KhidùngcôngthứcRunge‐Kuttabậchaitacó:






α++=
=
)ky,ahx(hfk
)y,x(hfk
)i(
1ii
)i(
2
ii
)i(
1
(15)
và
)i(
22
)i(
11i1i
krkryy +=−
+
(16)
Tacó: 
y′(x)=f[x,y(x)]
[
]
[
]
)x(y,x
f
)x(y,x
f
)x(y
yx

+

=
′′


Dođóvếphảicủa(12)là:
[]
⋅⋅⋅+
′′
+

+ )x(y)y,x(f)y,x(f
2
h
)y,x(hf
iiyiix
2
ii
(17)
Mặtkháctheo(15)vàtheocôngthứcTaylortacó:

366

iii
)i(
1
yh)y,x(h
f
k

== 

])y,x(
f
k)y,x(
f
ah)y,x(
f
[hk
iiy
)i(
1iixii
)i(
2



+

α
+

+= 
Dođóvếphảicủa(16)là:




+


α
+

++ )]y,x(
f
yr)y,x(
f
ar[h)y,x(
f
)rr(h
iiyi2iix2
2
ii21
(18)
Bâygiờcho(17)và(18)khácnhaumộtvôcùngbécấpO(h
3
)tatìmđượccác
hệsốchưabiếtkhicânbằngcácsốhạngchứahvàchứah
2
:
 r
1+r2=1
 a.r
1=1/2
 α.r
2=1
Nhưvậy: α=a,r
1=(2a‐1)/2a,r2=1/2avớiađượcchọnbấtkì.
Nếua=1/2thìr
1=0vàr2=1.LúcnàytanhậnđượccôngthứcEuler.Nếu
a=1thìr
1=1/2vàr2=1/2.LúcnàytanhậnđượccôngthứcEulercảitiến.
 MộtcáchtươngtựchúngtanhậnđượccôngthứcRunge‐Kuttabậc4.
Côngthứcnàyhayđượcdùngtrongtínhtoánthựctế:

k1=h.f(xi,yi)
k
2=h.f(xi+h/2,yi+k1/2)
k
3=h.f(xi+h/2,yi+k2/2)
k
4=h.f(xi+h,yi+k3)
yi
+1=yi+(k1+2k2+2k3+k4)/6
Taxâydựnghàm
rungekutta()đểthựchiệncôngthứcRunge‐Kuttabậc4:

function[x,y]=rungekutta(f,a,b,y0,n)
%Phuong phap Runge‐Kutta de giai phuong trinh yʹ(x) = f(x,y(x)) hay y’ =
%f(x)
ifnargin<4|n<=0
n=100;
end
ifnargin<3
y0=0;
end
y(1,:)=y0(:)ʹ;%

h=(b‐a)/n;
x=a+[0:n]ʹ*h;
ifnargin(f)>1
fork=1:n

367
f1=h*feval(f,x(k),y(k,:));
f1=f1(:)ʹ;
f2=h*feval(f,x(k)+h/2,y(k,:)+f1/2);
f2=f2(:)ʹ;
f3=h*feval(f,x(k)+h/2,y(k,:)+f2/2);
f3=f3(:)ʹ;
f4=h*feval(f,x(k)+h,y(k,:)+
f3);
f4=f4(:)ʹ;
y(k+1,:)=y(k,:)+(f1+2*(f2+f3)+f4)/6;
end
else
fork=1:n
f1=h*feval(f,x(k));
f1=f1(:)ʹ;
f2=h*feval(f,x(k)+h/2);
f2=f2(:)ʹ;
f3=h*feval(f,x(k)
+h/2);
f3=f3(:)ʹ;
f4=h*feval(f,x(k)+h);
f4=f4(:)ʹ;
y(k+1,:)=y(k,:)+(f1+2*(f2+f3)+f4)/6;
end
end


Đểgiảiphươngtrìnhtadùngchươngtrình
ctrungekutta.m:

clearall,clc
a=0;
b=1;
y=inline(ʹx+yʹ);
ya=0.5;
n=10;%solantinhchin=10
[x,y]=rungekutta(y,a,b,ya,n)
plot(x,y);

§5.PHƯƠNGPHÁPRUNGE‐KUTTATHÍCHNGHI

368
 Vấnđềxácđịnhbướctínhhlà rấtquantrọng.Nếumuốncóđộchính
xáccaothìbướctínhhphảinhỏ.Tuynhiênkhihnhỏ,talạitốnthờigiantính
toán. Hơn nữ
a bước hằng số sẽ không thích hợp trên toàn bộ miền tìm
nghiệm.Vídụnếuđườngcongnghiệmbanđầuthayđổinhanhrồisauđó
gầnnhưkhôngđổithìtaphảidùnghnhỏởđoạnđầu
vàhlớnởđoạnsau.
đâylàchỗmàcácphươngphápthíchnghichiếmưuthế.Chúngđánhgiásai
sốlàmtròntạimỗilầntíchphânvàtựđộnghiệuchỉnhđộlớncủahđểsai
số
nằmtronggiớihạnchophép.
 Phương pháp Runge‐Kutta thích nghi còn gọi là phương pháp tích
phânkếthợp.Cáccôngthức nàyđithànhcặp:mộtcôngthứctíchphânbậcm

mộtcôngthứctíchphânbậcm+1.Ýtưởnglàdùnghaicôngthứcnàycải
thiệnnghiệmtrongđoạn[x,x+h].Gọikếtquảlày
m(x+h)vàym+1(x+h)tacósai
sốđốivớicôngthứcbậcmlà:
 E(h)=y
m+1(x+h)‐ym(x+h)(1)
Chúngtadùngcôngthứckếthợpbậc4và5màđạohàmđượctínhbằng
côngthứcFehlenberg.DovậycôngthứcRunge‐Kuttathíchnghicònđược
gọilàcôngthứcRunge‐Kutta‐Fehlenberg:

=
1
KhF(x,y)



=
⎛⎞
=+ +
⎜⎟
⎝⎠

i1
iii,jj
j0
KhFxAh,y BK i=1,2, ,6(2)

=
+= +

6
5ii
i1
y(x h) y(x) CK
(côngthứcbậc5)(3)

=
+= +

6
4ii
i1
y(x h) y(x) DK
(côngthứcbậc4)(4)
Cáchệsốxuấthiệntrongcáccôngthứcnàykhôngduy nhất.Bảngsaucho
cáchệsốtínhtheoCashvàKarp:

i A
i Bi,j Ci Di
1
∗ ∗ ∗ ∗ ∗ ∗
37
378

2825
27648
2
1
5

1
5

∗ ∗ ∗ ∗
0 0
3
3
10

3
40

9
40

∗ ∗ ∗
250
621

18575
48384
4
3
5

3
10


9
10

6
5

∗ ∗
125
594

13525
55296

369
5 1

11
54

5
2


70
27

35
27

∗
0
277
14336
6
7
8

1631
55296

175
512

575
13824

44275
110592
253
4096

512
1771

1
4


Saisốsẽlà:
 E(h)=y
5(x+h)‐y4(x+h)=
=


6
iii
i1
(C D )K
(5)
ChúýlàE(h)làmộtvectơ,thànhphầnE
i(h)biểudiễnsaisốcủabiếnyi.Sai
sốe(h)tacầnkiểmsoátlà:

=
i
e(h) max E (h) (6)
Tacũngcóthểkiểmsoátsaisốtrungbìnhbìnhphương:

=
=

n
2
i
i1
1
e(h) E ( h)
n
(7)
vớinlàsốphươngtrìnhbậc1.
Việckiểmsoátsaisốđạtđượcbằngcáchthayđổihsaochosai sốtạimỗi
bướctínhậiphỉcỡsaisốmongmuốnε.Saisố
khithựchiênthuậttáonRunge
‐KuttabậcbốnlàO(h
5
)nên:

⎛⎞

⎜⎟
⎝⎠
5
11
22
e(h ) h
e(h ) h
(8)
Giảsửlàtađãtính nghiệmtạibướctínhvớih
1vàcósaisốlàe(h1).Tạibước
tínhvớih
2tamuốncóe(h2)=εthì:

⎡⎤
ε
=
⎢⎥
⎣⎦
1/ 5
21
1
hh
e(h )
(9)
Đểdựphòng,talấy:

⎡⎤
ε
=
⎢⎥
⎣⎦
1/ 5
21
1
h0.9h
e(h )
(10)
Taxâydựnghàm
adaptrk()đểthựchiệnthuậttoánnày:

function[xsol,ysol]=adaptrk(f,xo,x1,y,n)
%TichphanRunge‐Kuttabac5dunggiapphuongtrinhy’=f(x,y)hayy’=
%f(x).
%xo,x1‐doantimnghiem.
%ygiatridau,ndungtimhbandau

370
h=(x1‐xo)/n;
ifsize(y,1)>1;
y=yʹ;%yphailavectohang
end
eTol=1.0e‐9;
n=length(y);
A=[01/53/103/517/8];
B=[00000
1/50000

3/409/40000
3/10‐9/106/500
‐11/545/2‐70/2735/270
1631/55296175/512575/1382444275/110592253/4096];
C=[37/3780250/621125/5940512/1771];
D=[2825/27648018575/4838413525/55296277/143361/4];
%nghiembandau
xsol=zeros(2,1);
ysol=zeros(2,n);
xsol(1)
=xo;
ysol(1,:)=y;
stopper=0;
k=1;
forp=2:5000
%TinhKtu(2)
K=zeros(6,n);
ifnargin(f)>1
K(1,:)=h*feval(f,xo,y);
else
K(1,:)=h*feval(f,xo);
end
fori=2:6
BK=
zeros(1,n);
forj=1:i‐1
BK=BK+B(i,j)*K(j,:);
end
ifnargin(f)>1

371
K(i,:)=h*feval(f,xo+A(i)*h,y+BK);
else
K(i,:)=h*feval(f,xo+A(i)*h);
end
end
%tinhsuthaydoicuaytheo(3)&(4)
dy=zeros(1,n);
E=zeros(1,n);
fori=1:6
dy=dy
+C(i)*K(i,:);
E=E+(C(i)‐D(i))*K(i,:);
end
e=sqrt(sum(E.*E)/n);
%neusaisodatdengiatrichophep,chapnhanketqua
%kiemtrdieukienketthuc
ife<=eTol
y=y+dy;
xo=xo+h;

k=k+1;
xsol(k)=xo;
ysol(k,:)=y;
ifstopper==1;
break
end
end
%tinhlaihtheo(10)
ife~=0;
hnext=0.9*h*(eTol/e)^0.2;
else;
hnext=h;
end
if(h>0)==(xo+hnext>=x1)

hnext=x1‐xo;
stopper=1;
end
h=hnext;

372
end

Đểtìmnghiệmcủaphươngtrìnhviphântadùngchươngtrình
ctadaptrk.m:

clearall,clc
a=0;
b=1;
y=inline(ʹx+yʹ);
ya=0.5;
n=10;%solantinhchin=10
%y=@f4;
[u,v]=adaptrk(y,a,b,ya,n)
plot(u,v)


§6.PHƯƠNGPHÁPBURLIRSCH‐STÖR
1. Phương phápđiểm giữa
: Công thứcđiểm giữa của tích phân số của

=yf(x,y)là:

[
]
+= −+y(x h) y(x h) 2hf x,y(x) (1)
Đây là công thức bậc 2, giống như công thức
Euler.Taxemxétphươngphápnàyvìđâylàcơ
sở của phương pháp Burlisch‐Stör dùng tìm
nghiệmcóđộchínhxáccao.Hìnhbênminhhoạ
công thứcđ
iểm giữađối với phương trìnhđơn
dạng

=yf(x,y)
.Sựthayđổiytrênhaiphíađược
xácđịnhbằng:

+


+− −=

xh
xh
y(x h) y(x h) y (x)dx
vàbằngdiệntíchbêndướiđườngcong.Xấpxỉđiểmgiữacủadiện tíchnàylà
diệntíchcủahìnhchữnhậtcógạchchéo.
 Bâygiờtaxétưuđiểmcủaphương
phápđiểmgiữakhitìmnghiệmcủa
phươngtrình

=yf(x,y)từx=x
0đếnx=x0+Hvớicôngthứcđiểmgiữa.
Tachia đoạntíchphânthànhnđoạnnhỏcóđộdàimỗiđoạnlà
=hH/n
như
hìnhbênvàtính:

=+
10 0
yyhf
 =+
20 1
yy2hf
x‐h
h
x+h
x
y’(x)

373
 =+
31 2
yy2hf (2)

M

−−
=+
nn2 n1
yy 2hf
Tađãdùngkháiniệmy
i=y(xi)vàfi=f(xi,yi).Ph ương trìnhđầutiêntrong(2)
dùngcôngthứcEulerđểthaychophươngphápđiểmgiữa.Cácphươngtrình
kháclàcáccôngthứcđiểmgiữa.Kếtquảcuốicùnglàtrungbìnhcộngcủay
n
trong(2)vàtacó:

[]

+= + +
onn1n
y(x H) 0.5 y (y hf ) (3)
2.NgoạisuyRichardson:Tacóthểthấysaisốtrong(3)là:

=+++L
246
123
Echchch

ĐểgiảmbớtsaisốtadùngphươngphápngoạisuyRichardson.Cụthểtatính
y(x
o+H)vớimộtgiátrịnàođócủahvàrồilặplạiquátrìnhtínhvớih/2.Gọi
kếtquảlàg(h)vàg(h
1)tacóngoạisuyRichardson:


+=
1
o
4g(h ) g(h)
y(x H)
3

Taxâydựnghàm
midpoint()đểkếthợpphươngphápđiểmgiữavàphương
phápngoạisuyRichardson.Đầutiênphươngphápđiểmgiữađượcdùngcho
2tíchphân.Sốbướctính đượctănggấpđôitrongcáclầnlặp
sau,mỗilầnlặp
đềudùngngoạisuyRichardson.Chươngtrìnhdừngkhisaisốnhỏh ơnsaisố
chophép.

functiony=midpoint(f,x,x1,y,tol)
%Phuongphapdiemgiuadungchophuongtrinhyʹ=f(x,y)hayy’=f(x).
ifsize(y,1)>1;
y=yʹ;
end%yphailavectohang
ifnargin<5
tol=1.0e‐6;

end
kmax=51;
n=length(y);
r=zeros(kmax,n);
%Batdaubang2buoctichphan
nsteps=2;
r(1,1:n)=mid(f,x,x1,y,nsteps);
rold=r(1,1:n);
xo
x1
x2
x3
xn‐1 xn
H
h

374
fork=2:kmax
%Tanggapdoisobuocvatinhchinhketqua
%ngoaisuyRichardson
nsteps=2*k;
r(k,1:n)=mid(f,x,x1,y,nsteps);
r=richardson(r,k,n);
%kiemtrahoitu.
dr=r(1,1:n)‐rold;
e=
sqrt(dot(dr,dr)/n);
ife<tol;y=r(1,1:n);
return;
end
rold=r(1,1:n);
end
error(ʹPhuongphapdiemgiuakhonghoituʹ)

functiony=mid(f,x,xf,y,nsteps)
%Congthucdiemgiua
h=(xf‐x)/nsteps;
y0=y;
ifnargin(f)
>1
y1=y0+h*feval(f,x,y0);
else
y1=y0+h*feval(f,x);
end
fori=1:nsteps‐1
x=x+h;
ifnargin(f)>1
y2=y0+2.0*h*feval(f,x,y1);
else
y2=y0+2.0*h*feval(f,x);
end

y0=y1;
y1=y2;
end
ifnargin(f)>1

375
y=0.5*(y1+y0+h*feval(f,x,y2));
else
y=0.5*(y1+y0+h*feval(f,x));
end

functionr=richardson(r,k,n)
%Richardsonextrapolation.
forj=k‐1:‐1:1
c=(k/(k‐1))^(2*(k‐j));
r(j,1:n)=(c*r(j+1,1:n)‐r(j,1:n))/(c‐1.0);
end


3. Thuật toán Burlisch‐Stör: Phương phápđiểm giữa có nhượcđiểm là
nghiệm nằm tạiđiểm giữa của khoảng tìmnghiệmkhôngđược tinh chỉnh
bằngphươngphápngoạisuyRichardson.Khuyếtđiểmnàyđược
khácphục
trongphươngphápBurlisch‐Stör.Ýtưởngcủaphươngphápnàylàápdụng
phươngphápđiểmgiữatrêntừngđoạn.Taxâydựnghàm
burlischstoer()để
thựchiệnthuậttoánnày:

function[xout,yout]=burlischstoer(f,x,x1,y,H,tol)
%PhuongphapBulirsch‐Stoergiaiphuongtrinhyʹ=F(x,y)hayy’=f(x).
%[x,x1]lakhoangtimnghiem.
%H=dotangsaumoilantinh
ifsize(y,1)>1
y=yʹ;
end%yphailavectohang
ifnargin<6
tol=1.0e‐8;
end
n=length(y);
xout=zeros(2,1);
yout=zeros(2,n);
xout(1)=x;
yout(1,:)=y;
k=1;
whilex<x1

376
k=k+1;
H=min(H,x1‐x);
y=midpoint(f,x,x+H,y,tol);
x=x+H;
xout(k)=x;
yout(k,:)=y;
end


Đểgiảiphươngtrìnhtadùngchương trình
ctburlischstoer.m:

clearall,clc
a=0;
b=1;
y=@f3;
ya=1;
H=.1;
[u,v]=burlischstoer(y,a,b,ya,H)
plot(u,v)

§7.PHƯƠNGPHÁPCHUỖITAYLOR

PhươngphápchuỗiTaylorđơngiảnvềýtưởngvàcóđộchínhxáccao.
CơsởcủaphươngphápnàylàcắtchuỗiTaylorcủaytheox:

′′′ ′′
+≈ + + + ++
L
23(m)m
11 1
y(x h) y(x) y (x)h y (x)h y (x)h y (x)h
2! 3! m!
(1)
Dophươngtrình(1)dựđoántrướcytại(x+h)từcácthôngtincótạix,nó
cũnglàcôngthứctíchphân.Sốhạngcuốitrong(1)làbậccủatíchphân.Như
vậ
y(1)làtíchphânbậcm.Saisốlà:

++
=ξ<ξ<+
+
(m 1) m 1
1
Ey()hxxh
(m 1)!

Dùngxấpxỉđạohàm:

+
+−
ξ≈
(m) (m)
(m 1)
y(xh)y(x)
y()
h

tacó:

⎡⎤
=+−
⎢⎥
+
⎣⎦
m
(m) (m)
h
Ey(xh)y(x)
(m 1)!
(2)
Taxâydựnghàm
taylor()đểgiảibàitoántrên:

377
function[xout,yout]=taylor(deriv,x,y,x1,h)
%TichphanchuoiTaylorbac4.
%x,y=cacgiatridau;ilavectohang.
%x1=giatricuoicuax

ifsize(y,1)>1;
y=yʹ;
end
xout=zeros(2,1);
yout=zeros(2,length(y));
xout(1)=x;
yout(1,:)=y;
k=1;
whilex<x1
h=min(h,x1‐x);
d=feval(deriv,x,y);%Daohamcua[y]
hh=1;
forj=1:4%taochuoiTaylor
hh=hh*h/j;
y=y+
d(j,:)*hh;
end
x=x+h;
k=k+1;
xout(k)=x;
yout(k,:)=y;
end


Tadùngchươngtrình
cttaylor.mđểgiảiphươngtrình:

clearall,clc
y=@f5;
a=0;
b=2;
ya=[01];
h=0.2;
[x,y]=taylor(y,a,ya,b,h)

378
plot(x,y);

§8.PHƯƠNGPHÁPDỰĐOÁN‐HIỆUCHỈNH
1.PhươngphápAdam‐Bashfort‐Moulton
:Năm1855,nhàtoánhọcngười
AnhAdamsđềxuấtmộtphươngphápđabướcgiảibàitoánCauchytheoyêu
cầucủaôngBashforth,mộtchuyêngiakỹthuậtpháobinhAnh.Kếtquảcủa
Adams
saunàybịquênlãng.Mãiđếnđầuthếkỷ20,nhàtoánhọcNauykhi
tínhquỹđạocủahạtđiệntíchrờixamặttrờivớivậntốclớnđãphátminhlại
công thức
Adams. Sau này viện sỹ Krylovđã hoàn thi ện phương pháp
Adams. Phương pháp Adams‐Bashfort‐Moulton (ABM) gồm hai bước.
Bướcdầutiênlàxấpxỉf(x,y)bằngmộtđathức(vídụđathứcLagrange)b
ậc4
qua4điểm:

(
)
(
)
(
)
(
)
{
}
−− −− −−k3 k3 k2 k2 k1 k1 k k
t,f ,t,f ,t,f ,t,f
vàthaythếđathứcnàyvàophươngtrìnhviphânđểcóđượcgiátrịdựbáo
y
k+1:

(
)
+−−−
=+ =+ − + − +

h
k1 k 3 k k3 k2 k1 k
0
h
pyl(t)dty 9f37f59f55f
24
 (1a)
Bướcthứhailàlặplạicôngviệcvới4điểmđượccậpnhật:

(
)
(
)
(
)
(
)
{
}
−− −− ++k2 k2 k1 k1 k k k1 k1
t,f ,t,f ,t,f,t,f 
vànhậngiátrịhiệuchỉnh:
+++
=
k1 k1 k1
ff(t,p)

(
)
−− +

=+ =+ − + +

h
kk 3 k k2 k1 k k1
0
h
c y l (t)dt y f 5f 19f 9f
24
  (1b)
TaviếtkhaitriểnTaylorcủay
k+1lâncậntkvàcủayklâncậntk+1:

+
′′′
=+ + + +L
23
k1 k k k k
hh
yyhf f f
23!
(2a)

++ + +
′′′
=− + − +L
23
kk1 k1 k1 k1
hh
yy hf f f
23!


++++
′′′
=+ − + +L
23
k1 k k1 k1 k1
hh
yyhf f f
23!
(2b)
vàthaythếcácđạohàmbậc1,2,3bằngcácxấpxỉ

−−−
+
⎛⎞
−+−+
⎜⎟
=+ + + +
⎜⎟
⎜⎟
⎝⎠
L
2
k3 k2 k1 k
3(4)
k1 k k k
13 11
ff3f f
h1
32 6
yyhf hf
2h4


379

−−−
−+ − +
⎛⎞
+++
⎜⎟
⎝⎠
L
3
2(4)
k3 k2 k1 k
k
2
hf 4f 5f2f11
hf
3! h 12



−−−
−+ − +
⎛⎞
+++++
⎜⎟
⎝⎠
LL
45
(4) (4)
k3 k2 k1 k
kk
3
h f 3f 3f f 3 h
hf f
4! h 2 120


(
)
−−−
=+ − + − + + +L
5(4)
kk3k2k1k k
h251
y9f37f59f55fhf
24 720


+
≈+
5(4)
k1 k
251
phf
720
(3a)

−− +
++ +
⎛⎞
−+−+
⎜⎟
=+ − + +
⎜⎟
⎜⎟
⎝⎠
L
2
k2 k1 k k1
3(4)
k1 k k1 k1
13 11
ff3ff
h1
32 6
yyhf hf
2h4



−− +
+
−+ −+
⎛⎞
+++
⎜⎟
⎝⎠
L
3
2(4)
k2 k1 k k1
k1
2
h f 4f 5f 2f 11
hf
3! h 12



−− +
++
−+ −+
⎛⎞
−++++
⎜⎟
⎝⎠
LL
45
(4) (4)
k2 k1 k k1
k1 k1
3
h f 3f 3f f 3 h
hf f
4! h 2 120


(
)
−− + +
=+ − + + − +L
5(4)
k k2 k1 k k1 k1
h19
yf5f19f9f hf
24 720


++
≈−
5(4)
k1 k1
19
chf
720
(3b)
Từcácphươngtrìnhnàyvàgiảsửrằng
+


(4) (4)
k1 k
ffKtacóthểviếtcácsaisố
dựđoán/hiệuchỉnh:

+++
=−≈ ≅
5(4) 5
P,k1 k1 k1 k
251 251
Eyp hf Kh
720 720
(4a)

+++ +
=−≈− ≅−
5(4) 5
C,k1 k1 k1 k1
19 19
Eyc hf Kh
720 720
(4b)
DoKchưabiếtnêntaphảitìmnó.Tacó;

++++ + +
−=−≅ ≡ ≡−
5
P,k1 C,k1 k1 k1 P,k1 C,k1
270 270 270
EEcp Kh E E
720 251 19
 (5)
Dovậytacócáccôngthứcdùngđểđánhgiásaisố:

()
+++ ++
=−≅ −
P,k1 k1 k1 k1 k1
251
Eyp cp
720
(6a)

()
+++ ++
=−≅− −
C,k1 k1 k1 k1 k1
19
Eyc cp
270
(6b)
Tómlại,thuậttoánAdams‐Bashforth‐Moultongồm:
Dựđoán:
(
)
+−−−
=+ − + − +
k1 k k3 k2 k1 k
h
p y 9f 37f 59f 55f
24
  (7a)

380
Biếnđổi:
()
++
=+ −
k1 k1 k k
251
mp cp
720
(7b)
Hiệuchỉnh:
()
−− ++


=+ − + +




kk k2 k1 k k1k1
h
c y f 5f 19f 9f t ,m
24
 (7c)

()
++ ++
=− −
k1 k1 k1 k1
19
yc cp
270
(7d)
Taxâydựnghàm
odeabm()đểthựchiệnthuậttoánnày:

function[t,y]=odeabm(f,to,tf,y0,n)
%PhuongphapAdams‐Bashforth‐Moulton
%degiaiptyʹ(t)=f(t,y(t))hayyʹ(t)=f(t)
if(nargin<5)|(n<0)
n=10;
end
h=(tf‐to)/n;
t1=to+3*h;
[t,y]=rungekutta(f,
to,t1,y0,3);%khoiganbangppRunge‐Kutta
t=[t(1:3)ʹt(4):h:tf]ʹ;
fork=1:4
ifnargin(f)>1
F(k,:)=feval(f,t(k),y(k,:));
else
F(k,:)=feval(f,t(k));
end
end
p=y(4,:);
c=y(4,:);
KC22=251/270;
KC12
=19/270;
h24=h/24;
h241=h24*[‐937‐5955];
h242=h24*[1‐5199];
fork=4:n
p1=y(k,:)+h241*F;%Pt.(7a)
m1=p1+KC22*(c‐p);%Pt.(7b)
ifnargin(f)>1

381
c1=y(k,:)+h242*[F(2:4,:);feval(f,t(k+1),m1)ʹ];%Pt.(7c)
else
c1=y(k,:)+h242*[F(2:4,:);feval(f,t(k+1))ʹ];%Pt.(7c)
end
y(k+1,:)=c1‐KC12*(c1‐p1);%Pt.(7d)
p=p1;
c=c1;%capnhatcacgiatridudoan/hieu
chinh
ifnargin(f)>1
F=[F(2:4,:);feval(f,t(k+1),y(k+1,:))ʹ];
else
F=[F(2:4,:);feval(f,t(k+1))ʹ];
end
end


Đểgiảiphươngtrìnhtadùngchươngtrình
ctodeabm.m:

clearall,clc
a=0;
b=1;
y=@f1;
ya=[011]ʹ;
n=10;
[t,y]=odeabm(y,a,b,ya,n)
plot(t,y)


2. Phương pháp Hamming: Thuật toán Hamming cũng như thuật toán
Adams‐Bashforth‐Moultonnhưngcáccôngthứcdựbáo/hiệuchỉnhlà:
Dựđoán:
(
)
+− −−
=+ −+
k1 k3 k2 k1 k
4h
py 2ff2f
3
(8a)
Biếnđổi:
()
++
=+ −
k1 k1 k k
112
mp cp
121
(8b)
Hiệuchỉnh:
(
)
{
}
−− ++
=−+−++




kkk2k1kk1k1
c0.1259yy 3hf 2fft,m
 (8c)

()
++ + +
=− −
k1 k1 k1 k1
9
yc cp
121
(dd)
Taxâydựnghàm
hamming()đểthựchiệnthuậttoánnày:
function[t,y]=hamming(f,to,tf,y0,n)

382
%PhuongphapHammingdegiaiphuongtrinhyʹ(t)=f(t,y(t))hayyʹ=f(t)
if(nargin<5)|(n<=0)
n=100;
end
h=(tf‐to)/n;
ts=to+3*h;
[t,y]=rungekutta(f,to,ts,y0,3);%KhoiganbangRunge‐Kutta
t=
[t(1:3)ʹt(4):h:tf];
fork=2:4
ifnargin(f)>1
F(k‐1,:)=feval(f,t(k),y(k,:));
else
F(k‐1,:)=feval(f,t(k));
end
end
p=y(4,:);
c=y(4,:);
h34=h/3*4;
KC1=112/121;
KC2=9/121;
h312=3*h*[‐121];
for
k=4:n
p1=y(k‐3,:)+h34*(2*(F(1,:)+F(3,:))‐F(2,:));%Pt.(8a)
m1=p1+KC1*(c‐p);%Pt.(8b)
ifnargin(f)>1
c1=(‐y(k‐2,:)+9*y(k,:)+h312*[F(2:3,:);
feval(f,t(k+1),m1)ʹ])/8;%Pt.(8c)
else

c1=(‐y(k‐2,:)+9*y(k,:)+h312*[F(2:3,:);
feval(f,t(k+1))ʹ])/8;Pt.(8c)
end
y(k+1,:)=c1‐KC2*(c1‐p1);%Pt.(8d)
p=p1;c=c1;%capnhatcacgiatridubao/hieuchinh
ifnargin(f)>1
F=[F(2:3,:);
feval(f,t(k+1),y(k+1,:))ʹ];
else

383
F=[F(2:3,:);feval(f,t(k+1))ʹ];
end
end


Đểgiảiphươngtrìnhtadùngchươngtrình
cthamming.m:

clearall,clc
a=0;
b=1;
y=@f1;
ya=[011]ʹ;
n=10;
tic
[t,y]=hamming(y,a,b,ya,n);
toc
plot(t,y)


§9.PHƯƠNGPHÁPMILNE
 Quátrìnhtínhtoánnghiệmđượcthựchiệnquababước:
‐Tínhgầnđúngy
m+1theocôngthức(dựđoán):

()
+− −−
′′ ′
=+ −+
(1)
m1 m3 m2 m1 m
4h
yy 2yy2y
3
(1)
‐Dùng
+
(1)
m1
y đểtính:

+++

=
(1)
m1 m1 m1
yf(x,y)(2)
‐Dùng
+

m1
y
vừatínhđượcđểtínhgầmđúngthứ2củaym+1(hiệuchỉnh)

()
+− − +
′′′
=+ ++
(2)
m1 m1 m1 m m1
h
yy y4yy
3
(3)
Taxâydựnghàm
milne()đểthựchiệnthuậttoántrên:

function[t,y]=milne(f,to,tf,y0,n)
h=(tf‐to)/n;
y(1,:)=y0ʹ;
ts=to+3*h;
[t,y]=rungekutta(f,to,ts,y0,3);
t=[t(1:3)ʹt(4):h:tf]ʹ;
fori=2:4

384
ifnargin(f)>1
F(i‐1,:)=feval(f,t(i),y(i,:));
else
F(i‐1,:)=feval(f,t(i));
end
end
fori=4:n
p=y(i‐3,:)+(4*h/3)*(2*F(1,:)‐F(2,:)+2*F(3,:));%Pt.(1)
ifnargin(f)>1
F(4,:)=f(t(i+1),
p);%Pt.(2)
else
F(4,:)=f(t(i+1));
end
y(i+1,:)=y(i‐1,:)+(h/3)*(F(2,:)+4*F(3,:)+F(4,:));%Pt.(3)
F(1,:)=F(2,:);
F(2,:)=F(3,:);
ifnargin(f)>1
F(3,:)=f(t(i+1),y(i+1,:));
else
F(3,:)
=f(t(i+1));
end
end


Đểgiảiphươngtrìnhtadùngchươngtrình
ctmilne.m:

clearall,clc
a=0;
b=1;
y=@f2;
ya=1;
n=10;
[t,y]=milne(y,a,b,ya,n);
plot(t,y)


§10.BÀITOÁNGIÁTRỊBIÊN
1.Kháiniệmchung
:Taxétbàitoántìmnghiệmcủaphươngtrình:

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×