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

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


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

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

Đăng nhận xét