Professional Documents
Culture Documents
1.BITONCAUCHY
(1)
y
(
a
)
=
Ngitachngminhrngbitonnycmtnghimduynhtnuf
thomniukinLipschitz:
f( x , y 1 ) f( x , y 2 ) L y 1 y 2
viLlmthngsdng.
Ngitacngchngminhrngnufy(ohmcaftheoy)llin
tcvbchnthfthomniukinLipschitz.
Mtcchtngquthn,ngitanhnghahphngtrnhbc1:
y1 = f1 ( x , y 1 , y 2 ,..., y n )
y2 = f2 ( x , y 1 , y 2 ,..., y n )
yn = fn ( x , y 1 , y 2 ,..., y n )
Taphitmnghimy1,y2,...,ynsaocho:
Y( x) = f( x , X )
Y(a ) =
vi:
y1
y2
Y = ..
..
yn
f1
f2
F = ..
..
fn
y1
y2
Y = ..
..
y
n
360
Nuphngtrnhviphncbccaohn(n),nghimsphthucvo
nhngstu.nhncmtnghimring,taphichoniukinu.
Bitonscgitrunuvigitrxochotachoy(xo),y(xo),y(xo),....
y(a ) = , y(a ) =
Khitu=yvv=ytanhnchphngtrnhviphncp1:
u = v
v
=
g
(
x
,
u
,
v
)
viiukinu:u(a)=vv(a)=
(1)
y(a ) =
v cn tm nghim ca n. Ta chia on [xo,x ] thnh n phn bi cc im
chia:
xo<x1<x2<...<xn=x
TheocngthckhaitrinTaylormthmlncnxitac:
( x i +1 x i ) 2
( x i +1 x i ) 3
y( x i +1 ) = y( x i ) + ( x i +1 x i )y ( x i ) +
y (x i ) +
y( x i ) +
2
6
Nu(xi+1xi)khbthtacthbquaccshng(xi+1xi)2vccs
hngbccao
y
y(xi+1)=y(xi)+(xi+1xi)y(xi)
Trnghpccmccchu:
yi+1
(xi1xi)=h=(xxo)/n
yi
thtanhnccngthcEulerngin:
yi+1=yi+hf(xi,yi)
(2)
x
V mt hnh hc ta thy (1) cho kt qu cng
xi xi+1
chnhxcnubchcngnh.
Taxydnghmeuler()thchinthuttontrn:
361
function[X,Y]=euler(fxy,xo,xf,yo,n)
%%Giaiphuongtrinhy(x)=f(x,y(x))hayy=f(x)
ifn<2
n=2;
end
h=(xfxo)/n;
X=zeros(n+1,1);
M=max(size(yo));%sophuongtrinh(socotcuamatranY)
Y=zeros(n+1,M);
%datdieukiendau
x=xo;
X(1)=x;
y=yo;
Y(1,:)=y;
fori=1:n
ifnargin(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
functiondy=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);
giiphngtrnhchobihmf1(x,y)tadngchngtrnhcteuler.m:
clearall,clc
a=0;
362
b=1;
y=@f1;
ya=[011];
m=200;
[x,y]=euler(y,a,b,ya,m)
plot(x,y);
3.PHNGPHPHEUN
y=f(t,y)
Tac:
t k +1
yt
t k +1
f(t,y)dt
tk
hay:
y(t k+1 ) = y(t k ) +
t k +1
f(t,y)dt
viy(t0)=y0
tk
Nutasdngquytctchphnhnhthangthtac:
h
2
Vphi(RHS)caphngtrnhnycyk+1lgitrchabittithiimtk.
giiquytvnnytathayyk+1RHSbngcngthcxpx:
y k+1 y k + hf(t k ,y k )
Nhvy:
h
function[X,Y]=heun(fxy,xo,xf,yo,n)
%Giaiphuongtrinhy(x)=f(x,y(x))hayy=f(x)
%dungthuattoanHeunvoinbuoctinh
ifn<2
n=2;
end
363
h=(xfxo)/n;
X=zeros(n+1,1);
M=max(size(yo));%sophuongtrinh(socotcuamatranY)
Y=zeros(n+1,M);
%datdieukiendau
x=xo;
X(1)=x;
y=yo;
Y(1,:)=y;
fori=1:n
ifnargin(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
giiphngtrnhtadngchngtrnhctheun.m:
clearall,clc
a=0;
b=1;
y=inline(2*x+y);
ya=0.5;
n=10;%solantinhchin=10
[x,y]=heun(y,a,b,ya,n)
plot(x,y);
4.PHNGPHPRUNGEKUTTA
364
McdphngphpHeuntthnphngphpEulernhngnvn
chachnhxciviccbitonthct.
XtbitonCauchy(1).Gistatmcgitrgnngyica
y(xi)vmuntnhyi+1cay(xi+1).TrchttavitcngthcTaylor:
h2
h m (m)
h m + 1 ( m + 1)
y( x i +1 ) = y( x i ) + hy( x i ) +
y( x i ) + +
y (x i ) +
y
(c) (11)
2
m!
m!
vic(xi,xi+1)v:
y(x i ) = f[x i , y( x i )]
d k 1
( k)
y ( x i ) = k 1 f [x i , y( x i )]
dx
Tavitli(11)didng:
h2
h m (m)
h m + 1 ( m + 1)
y i +1 y i = hy ( x i ) +
y (x i ) + +
y (x i ) +
y
(c) (12)
2
m!
m!
TakodikhaitrinTaylorktquchnhxchn.tnhyi,yiv.v.ta
cthdngphngphpRungeKuttabngccht:
y i + 1 y i = r1 k (1i ) + r2 k (2i ) + r3 k (3i ) + r4 k (4i )
(13)
trong:
k (1i ) = hf( x i , y i )
(i)
(i)
k 2 = hf( x i + ah , y i + k 1 )
(14)
(i)
(i)
(i)
k
=
hf
(
x
+
bh
,
y
+
k
+
k
)
3
i
i
1
2
.......
(15)
(i)
k 2 = hf( x i + ah , y i + k (1i ) )
v y i +1 y i = r1 k (1i ) + r2 k (2i )
(16)
Tac:
y(x)=f[x,y(x)]
y( x) = fx [x , y( x)] + fy [x , y( x)]
................
Dovphica(12)l:
h2
hf( x i , y i ) +
fx ( x i , y i ) + fy ( x i , y i ) y( x) +
2
Mtkhctheo(15)vtheocngthcTaylortac:
(17)
365
Dovphica(16)l:
(18)
Bygicho(17)v(18)khcnhaumtvcngbcpO(h3)tatmccc
hschabitkhicnbngccshngchahvchah2:
r1+r2=1
a.r1=1/2
.r2=1
Nhvy: =a,r1=(2a1)/2a,r2=1/2aviacchnbtk.
Nua=1/2thr1=0vr2=1.LcnytanhnccngthcEuler.Nu
a=1thr1=1/2vr2=1/2.LcnytanhnccngthcEulercitin.
MtcchtngtchngtanhnccngthcRungeKuttabc4.
Cngthcnyhaycdngtrongtnhtonthct:
k1=h.f(xi,yi)
k2=h.f(xi+h/2,yi+k1/2)
k3=h.f(xi+h/2,yi+k2/2)
k4=h.f(xi+h,yi+k3)
yi+1=yi+(k1+2k2+2k3+k4)/6
Taxydnghmrungekutta()thchincngthcRungeKuttabc4:
function[x,y]=rungekutta(f,a,b,y0,n)
%Phuong phap RungeKutta de giai phuong trinh y(x) = f(x,y(x)) hay y =
%f(x)
ifnargin<4|n<=0
n=100;
end
ifnargin<3
y0=0;
end
y(1,:)=y0(:);%
h=(ba)/n;
x=a+[0:n]*h;
ifnargin(f)>1
fork=1:n
366
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
fork=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
giiphngtrnhtadngchngtrnhctrungekutta.m:
clearall,clc
a=0;
b=1;
y=inline(x+y);
ya=0.5;
n=10;%solantinhchin=10
[x,y]=rungekutta(y,a,b,ya,n)
plot(x,y);
5.PHNGPHPRUNGEKUTTATHCHNGHI
367
Vnxcnhbctnhhlrtquantrng.Numuncchnh
xccaothbctnhhphinh.Tuynhinkhihnh,talitnthigiantnh
ton. Hn na bc hng s s khng thch hp trn ton b min tm
nghim. V d nu ng cong nghim ban u thay i nhanh ri sau
gnnhkhngithtaphidnghnhonuvhlnonsau.
ylchmccphngphpthchnghichimuth.Chngnhgisai
slmtrntimilntchphnvtnghiuchnhlncahsais
nmtronggiihnchophp.
(1)
E(h)=ym+1(x+h)ym(x+h)
Chng ta dng cng thc kt hp bc 4 v 5 m o hm c tnh bng
cngthcFehlenberg.DovycngthcRungeKuttathchnghicnc
gilcngthcRungeKuttaFehlenberg:
K 1 = hF(x,y)
i 1
K i = hF x + A i h, y + Bi ,jK j
j= 0
y 4 (x + h) = y(x) + Di K i (cngthcbc4)
i=1,2,..,6
(2)
(3)
(4)
i =1
6
i =1
Cc h s xut hin trong cc cng thc ny khng duy nht. Bng sau cho
cchstnhtheoCashvKarp:
i
Ai
Bi,j
Ci
Di
37
2825
378 27648
1
1
2
0
0
5
5
3
3
9
250 18575
10
40
40
621 48384
9
3
3
6
125 13525
10
5
10
5
594 55296
368
11
54
1631
55296
70
27
575
13824
2
175
512
35
27
44275
110592
277
14336
512
1
1771
4
253
4096
Saissl:
6
E(h)=y5(x+h)y4(x+h)= (Ci Di )K i
(5)
i =1
ChlE(h)lmtvect,thnhphnEi(h)biudinsaiscabinyi.Sai
se(h)tacnkimsotl:
e(h) = max E(h)
(6)
Tacngcthkimsotsaistrungbnhbnhphng:
1
e(h) =
n
E (h)
n
2
i
(7)
i =1
vinlsphngtrnhbc1.
Vic kim sot sai s t c bng cch thay i h sao cho sai s ti mi
bctnhiphcsaismongmun.SaiskhithchinthuttonRunge
KuttabcbnlO(h5)nn:
5
e(h1 ) h1
e(h 2 ) h 2
(8)
Gisltatnhnghimtibctnhvih1vcsaisle(h1).Tibc
tnhvih2tamunce(h2)=th:
1/ 5
h 2 = h1
e(h
)
1
dphng,taly:
(9)
1/ 5
h 2 = 0.9h1
(10)
e(h
)
1
Taxydnghmadaptrk()thchinthuttonny:
function[xsol,ysol]=adaptrk(f,xo,x1,y,n)
%TichphanRungeKuttabac5dunggiapphuongtrinhy=f(x,y)hayy=
%f(x).
%xo,x1doantimnghiem.
%ygiatridau,ndungtimhbandau
369
h=(x1xo)/n;
ifsize(y,1)>1;
y=y;%yphailavectohang
end
eTol=1.0e9;
n=length(y);
A=[01/53/103/517/8];
B=[00000
1/50000
3/409/40000
3/109/106/500
11/545/270/2735/270
1631/55296175/512575/1382444275/110592253/4096];
C=[37/3780250/621125/5940512/1771];
D=[2825/27648018575/4838413525/55296277/143361/4];
%nghiembandau
xsol=zeros(2,1);
ysol=zeros(2,n);
xsol(1)=xo;
ysol(1,:)=y;
stopper=0;
k=1;
forp=2:5000
%TinhKtu(2)
K=zeros(6,n);
ifnargin(f)>1
K(1,:)=h*feval(f,xo,y);
else
K(1,:)=h*feval(f,xo);
end
fori=2:6
BK=zeros(1,n);
forj=1:i1
BK=BK+B(i,j)*K(j,:);
end
ifnargin(f)>1
370
K(i,:)=h*feval(f,xo+A(i)*h,y+BK);
else
K(i,:)=h*feval(f,xo+A(i)*h);
end
end
%tinhsuthaydoicuaytheo(3)&(4)
dy=zeros(1,n);
E=zeros(1,n);
fori=1:6
dy=dy+C(i)*K(i,:);
E=E+(C(i)D(i))*K(i,:);
end
e=sqrt(sum(E.*E)/n);
%neusaisodatdengiatrichophep,chapnhanketqua
%kiemtrdieukienketthuc
ife<=eTol
y=y+dy;
xo=xo+h;
k=k+1;
xsol(k)=xo;
ysol(k,:)=y;
ifstopper==1;
break
end
end
%tinhlaihtheo(10)
ife~=0;
hnext=0.9*h*(eTol/e)^0.2;
else;
hnext=h;
end
if(h>0)==(xo+hnext>=x1)
hnext=x1xo;
stopper=1;
end
h=hnext;
371
end
tmnghimcaphngtrnhviphntadngchngtrnhctadaptrk.m:
clearall,clc
a=0;
b=1;
y=inline(x+y);
ya=0.5;
n=10;%solantinhchin=10
%y=@f4;
[u,v]=adaptrk(y,a,b,ya,n)
plot(u,v)
6.PHNGPHPBURLIRSCHSTR
1. Phng php im gia: Cng thc im gia ca tch phn s ca
y = f(x,y) l:
y(x + h) y(x h) =
(1)
y(x)
x
xh
x+h
x+ h
y(x)dx
xh
vbngdintchbndingcong.Xpximgiacadintchnyl
dintchcahnhchnhtcgchcho.
Bygitaxtuimcaphngphpimgiakhitmnghimca
phngtrnh y = f(x,y) tx=x0nx=x0+Hvicngthcimgia.
Tachiaontchphnthnhnonnhcdimionl h = H / n nh
hnhbnvtnh:
y1 = y 0 + hf0
y 2 = y 0 + 2hf1
372
y 3 = y1 + 2hf2
(2)
H
h
x2
x1
x3
xo
xn1 xn
y n = y n2 + 2hfn 1
Tadngkhinimyi=y(xi)vfi=f(xi,yi).Phngtrnhutintrong(2)
dngcngthcEulerthaychophngphpimgia.Ccphngtrnh
khclcccngthcimgia.Ktqucuicngltrungbnhcngcayn
trong(2)vtac:
(3)
2.NgoisuyRichardson:Tacththysaistrong(3)l:
E = c 1h 2 + c 2 h 4 + c 3 h 6 + L
gimbtsaistadngphngphpngoisuyRichardson.Cthtatnh
y(xo+H)vimtgitrnocahvrilpliqutrnhtnhvih/2.Gi
ktqulg(h)vg(h1)tacngoisuyRichardson:
4g(h1 ) g(h)
y(x o + H) =
3
Taxydnghm midpoint()kthpphngphpimgiavphng
phpngoisuyRichardson.utinphngphpimgiacdngcho
2tchphn.Sbctnhctnggpitrongcclnlpsau,milnlp
udngngoisuyRichardson.Chngtrnhdngkhisaisnhhnsais
chophp.
functiony=midpoint(f,x,x1,y,tol)
%Phuongphapdiemgiuadungchophuongtrinhy=f(x,y)hayy=f(x).
ifsize(y,1)>1;
y=y;
end%yphailavectohang
ifnargin<5
tol=1.0e6;
end
kmax=51;
n=length(y);
r=zeros(kmax,n);
%Batdaubang2buoctichphan
nsteps=2;
r(1,1:n)=mid(f,x,x1,y,nsteps);
rold=r(1,1:n);
373
fork=2:kmax
%Tanggapdoisobuocvatinhchinhketqua
%ngoaisuyRichardson
nsteps=2*k;
r(k,1:n)=mid(f,x,x1,y,nsteps);
r=richardson(r,k,n);
%kiemtrahoitu.
dr=r(1,1:n)rold;
e=sqrt(dot(dr,dr)/n);
ife<tol;y=r(1,1:n);
return;
end
rold=r(1,1:n);
end
error(Phuongphapdiemgiuakhonghoitu)
functiony=mid(f,x,xf,y,nsteps)
%Congthucdiemgiua
h=(xfx)/nsteps;
y0=y;
ifnargin(f)>1
y1=y0+h*feval(f,x,y0);
else
y1=y0+h*feval(f,x);
end
fori=1:nsteps1
x=x+h;
ifnargin(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
ifnargin(f)>1
374
y=0.5*(y1+y0+h*feval(f,x,y2));
else
y=0.5*(y1+y0+h*feval(f,x));
end
functionr=richardson(r,k,n)
%Richardsonextrapolation.
forj=k1:1:1
c=(k/(k1))^(2*(kj));
r(j,1:n)=(c*r(j+1,1:n)r(j,1:n))/(c1.0);
end
function[xout,yout]=burlischstoer(f,x,x1,y,H,tol)
%PhuongphapBulirschStoergiaiphuongtrinhy=F(x,y)hayy=f(x).
%[x,x1]lakhoangtimnghiem.
%H=dotangsaumoilantinh
ifsize(y,1)>1
y=y;
end%yphailavectohang
ifnargin<6
tol=1.0e8;
end
n=length(y);
xout=zeros(2,1);
yout=zeros(2,n);
xout(1)=x;
yout(1,:)=y;
k=1;
whilex<x1
375
k=k+1;
H=min(H,x1x);
y=midpoint(f,x,x+H,y,tol);
x=x+H;
xout(k)=x;
yout(k,:)=y;
end
giiphngtrnhtadngchngtrnhctburlischstoer.m:
clearall,clc
a=0;
b=1;
y=@f3;
ya=1;
H=.1;
[u,v]=burlischstoer(y,a,b,ya,H)
plot(u,v)
7.PHNGPHPCHUITAYLOR
PhngphpchuiTaylornginvtngvcchnhxccao.
CscaphngphpnylctchuiTaylorcaytheox:
1
1
1 (m)
E=
y(m +1) ()h m +1
x < < x + h
(m + 1)!
Dngxpxohm:
y(m) (x + h) y(m) (x)
y(m +1) ()
h
tac:
h m (m)
E=
y (x + h) y(m) (x)
(2)
(m + 1)!
Taxydnghmtaylor()giibitontrn:
376
function[xout,yout]=taylor(deriv,x,y,x1,h)
%TichphanchuoiTaylorbac4.
%x,y=cacgiatridau;ilavectohang.
%x1=giatricuoicuax
ifsize(y,1)>1;
y=y;
end
xout=zeros(2,1);
yout=zeros(2,length(y));
xout(1)=x;
yout(1,:)=y;
k=1;
whilex<x1
h=min(h,x1x);
d=feval(deriv,x,y);%Daohamcua[y]
hh=1;
forj=1:4%taochuoiTaylor
hh=hh*h/j;
y=y+d(j,:)*hh;
end
x=x+h;
k=k+1;
xout(k)=x;
yout(k,:)=y;
end
Tadngchngtrnhcttaylor.mgiiphngtrnh:
clearall,clc
y=@f5;
a=0;
b=2;
ya=[01];
h=0.2;
[x,y]=taylor(y,a,ya,b,h)
377
plot(x,y);
8.PHNGPHPDONHIUCHNH
1.PhngphpAdamBashfortMoulton:Nm1855,nhtonhcngi
AnhAdamsxutmtphngphpabcgiibitonCauchytheoyu
cucangBashforth,mtchuyngiakthutphobinhAnh.Ktquca
Adamssaunybqunlng.Minuthk20,nhtonhcNauykhi
tnhquocahtintchrixamttrivivntclnphtminhli
cng thc Adams. Sau ny vin s Krylov hon thin phng php
Adams. Phng php Adams Bashfort Moulton (ABM) gm hai bc.
Bcdutinlxpxf(x,y)bngmtathc(vdathcLagrange)bc4
qua4im:
vthaythathcnyvophngtrnhviphnccgitrdbo
yk+1:
h
h
Bcthhaillplicngvicvi4imccpnht:
c k = y k + l3 (t)dt = y k +
0
h
fk2 5fk 1 + 19fk + 9fk +1
24
TavitkhaitrinTaylorcayk+1lncntkvcayklncntk+1:
h2
h3
y k+1 = y k + hfk + fk + fk + L
2
3!
h2
h3
2
3!
vthaythccohmbc1,2,3bngccxpx
3
11
1
+
f
3f
fk
2 fk 3 +
k
2
k
1
h 3
1
2
6 + h 3f (4) + L
y k+1 = y k + hfk +
k
2
h
4
(1b)
(2a)
(2b)
378
2
3!
h
12
4
h fk3 + 3fk2 3fk1 + fk 3 (4)
h 5 (4)
fk + L
+
+ hfk + L +
4!
h3
2
120
h
251 5 (4)
= y k +
9fk3 + 37fk2 59fk1 + 55fk +
h fk + L
24
720
251 5 (4)
h fk
(3a)
pk+1 +
720
1 f + 3 f 3f + 11 f
k
k +1
h 2 3 k 2 2 k 1
1
6
L
+ h 3fk(4)
+
y k+1 = y k + hfk+1
+1
2
h
4
3
h f + 4fk1 5fk + 2fk+1 11 2 (4)
+ k 2
+ h fk+1 + L
2
3!
h
12
4
h fk2 + 3fk1 3fk + fk+1 3 (4)
h 5 (4)
+ hfk+1 + L +
fk+1 + L
4!
h3
2
120
h
19 5 (4)
= y k +
fk2 5fk1 + 19fk + 9fk+1
h fk+1 + L
24
720
19 5 (4)
h fk +1
(3b)
c k +1
720
(4)
Tccphngtrnhnyvgisrng fk(4)
+1 fk K tacthvitccsais
don/hiuchnh:
251 5 (4) 251 5
EP ,k +1 = y k +1 pk+1
h fk
Kh
(4a)
720
720
19 5 (4)
19
EC ,k +1 = y k +1 c k+1
h fk+1
Kh 5
(4b)
720
720
DoKchabitnntaphitmn.Tac;
270
270
270
EP ,k +1 EC ,k +1 = c k +1 pk+1
Kh 5
EP ,k+1
EC ,k+1
(5)
720
251
19
Dovytaccccngthcdngnhgisais:
251
EP ,k +1 = y k +1 pk+1
(6a)
( c k+1 pk+1 )
720
19
EC ,k +1 = y k +1 c k+1
(6b)
( c k +1 p k +1 )
270
Tmli,thuttonAdamsBashforthMoultongm:
h
9fk3 + 37fk2 59fk1 + 55fk
Don:
p k +1 = y k +
(7a)
24
379
Bini:
m k +1 = p k + 1 +
251
( c k pk )
720
(7b)
h
fk2 5fk1 + 19fk + 9f ( t k+1 ,m k+1 )
(7c)
24
19
y k + 1 = c k +1
(7d)
( c k +1 p k +1 )
270
Taxydnghmodeabm()thchinthuttonny:
function[t,y]=odeabm(f,to,tf,y0,n)
%PhuongphapAdamsBashforthMoulton
%degiaipty(t)=f(t,y(t))hayy(t)=f(t)
if(nargin<5)|(n<0)
n=10;
end
h=(tfto)/n;
t1=to+3*h;
[t,y]=rungekutta(f,to,t1,y0,3);%khoiganbangppRungeKutta
t=[t(1:3)t(4):h:tf];
fork=1:4
ifnargin(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*[9375955];
h242=h24*[15199];
fork=4:n
p1=y(k,:)+h241*F;%Pt.(7a)
m1=p1+KC22*(cp);%Pt.(7b)
ifnargin(f)>1
Hiuchnh:
ck = yk +
380
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,:)=c1KC12*(c1p1);%Pt.(7d)
p=p1;
c=c1;%capnhatcacgiatridudoan/hieuchinh
ifnargin(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
giiphngtrnhtadngchngtrnhctodeabm.m:
clearall,clc
a=0;
b=1;
y=@f1;
ya=[011];
n=10;
[t,y]=odeabm(y,a,b,ya,n)
plot(t,y)
(8a)
3
112
m k +1 = p k + 1 +
(8b)
Bini:
( c k pk )
121
c k = 0.125 9y k y k2 + 3h fk 1 + 2fk + f ( t k +1 ,m k +1 ) (8c)
Hiuchnh:
( c k +1 pk +1 )
121
Taxydnghmhamming()thchinthuttonny:
function[t,y]=hamming(f,to,tf,y0,n)
y k + 1 = c k +1
(dd)
381
%PhuongphapHammingdegiaiphuongtrinhy(t)=f(t,y(t))hayy=f(t)
if(nargin<5)|(n<=0)
n=100;
end
h=(tfto)/n;
ts=to+3*h;
[t,y]=rungekutta(f,to,ts,y0,3);%KhoiganbangRungeKutta
t=[t(1:3)t(4):h:tf];
fork=2:4
ifnargin(f)>1
F(k1,:)=feval(f,t(k),y(k,:));
else
F(k1,:)=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*[121];
fork=4:n
p1=y(k3,:)+h34*(2*(F(1,:)+F(3,:))F(2,:));%Pt.(8a)
m1=p1+KC1*(cp);%Pt.(8b)
ifnargin(f)>1
c1=(y(k2,:)+9*y(k,:)+h312*[F(2:3,:);
feval(f,t(k+1),m1)])/8;%Pt.(8c)
else
c1=(y(k2,:)+9*y(k,:)+h312*[F(2:3,:);
feval(f,t(k+1))])/8;Pt.(8c)
end
y(k+1,:)=c1KC2*(c1p1);%Pt.(8d)
p=p1;c=c1;%capnhatcacgiatridubao/hieuchinh
ifnargin(f)>1
F=[F(2:3,:);feval(f,t(k+1),y(k+1,:))];
else
382
F=[F(2:3,:);feval(f,t(k+1))];
end
end
giiphngtrnhtadngchngtrnhcthamming.m:
clearall,clc
a=0;
b=1;
y=@f1;
ya=[011];
n=10;
tic
[t,y]=hamming(y,a,b,ya,n);
toc
plot(t,y)
9.PHNGPHPMILNE
Qutrnhtnhtonnghimcthchinquababc:
Tnhgnngym+1theocngthc(don):
4h
y(1)
(1)
( 2ym2 ym 1 + 2ym )
m +1 = y m 3 +
3
Dng y(1)
m +1 tnh:
ym +1 = f(x m +1 ,y(1)
(2)
m +1 )
Dng ym +1 vatnhctnhgmngth2caym+1(hiuchnh)
h
y(2)
(3)
( ym1 + 4ym + ym+1 )
m +1 = y m 1 +
3
Taxydnghmmilne()thchinthuttontrn:
function[t,y]=milne(f,to,tf,y0,n)
h=(tfto)/n;
y(1,:)=y0;
ts=to+3*h;
[t,y]=rungekutta(f,to,ts,y0,3);
t=[t(1:3)t(4):h:tf];
fori=2:4
383
ifnargin(f)>1
F(i1,:)=feval(f,t(i),y(i,:));
else
F(i1,:)=feval(f,t(i));
end
end
fori=4:n
p=y(i3,:)+(4*h/3)*(2*F(1,:)F(2,:)+2*F(3,:));%Pt.(1)
ifnargin(f)>1
F(4,:)=f(t(i+1),p);%Pt.(2)
else
F(4,:)=f(t(i+1));
end
y(i+1,:)=y(i1,:)+(h/3)*(F(2,:)+4*F(3,:)+F(4,:));%Pt.(3)
F(1,:)=F(2,:);
F(2,:)=F(3,:);
ifnargin(f)>1
F(3,:)=f(t(i+1),y(i+1,:));
else
F(3,:)=f(t(i+1));
end
end
giiphngtrnhtadngchngtrnhctmilne.m:
clearall,clc
a=0;
b=1;
y=@f2;
ya=1;
n=10;
[t,y]=milne(y,a,b,ya,n);
plot(t,y)
10.BITONGITRBIN
1.Khinimchung:Taxtbitontmnghimcaphngtrnh:
384
Mtphngphpkhcgiibitongitrbinlphngphpsai
phn hu hn trong cc o hm c thay bng cc xp x bng sai phn
huhnticcntlicchu.Nhvytasnhnchphngtrnh
isiviccsaiphn.
(1)
y = f(x, y,y) y(a) = ,y(b) =
Tatmcchabitonvdngbitongitru:
(2)
thtacnghimcabiton.Nukhngtaphihiuchnhuvlmli.
Tuy nhin lm nh vy cha hay. Do nghim ca bi ton gi tr u ph
thucunngitrbintnhcy(b)lhmcau,nghal:
y(b)=(u)
Doulnghimcaphngtrnh:
r(u)=(u)=0
(3)
Trong (u) gi l s d bin(hiu s gia gi
tr tnh c v gi tr bin cho trc). Phng
trnh (3) c th gi bng cc phng php tm
nghim trong chng trc. Tuy nhin phng
php chia i cung i hi tnh ton lu cn
phngphpNewtonRaphsonihitmo
hmd/dt.Dovycngtasdngphngphp
Brent.Tmlithutongiibitongitrbin
gmccbc:
Mtgitru1vu2vynghimuca(3)
DngphngphpBrenttmnghimuca(3).Chlmibclp
i hi tnh (u) bng cch gii phng trnh vi phn nh l bi ton iu
kinu.
Khicu,giiphngtrnhviphnlnnatmnghim
Taxydnghmbvp2shoot()giiphngtrnhbc2:
function[t,x]=bvp2shoot(f,t0,tf,x0,xf,n,tol,kmax)
%Giaiphuongtrinh:[x1,x2]=f(t,x1,x2)voix1(t0)=x0,x1(tf)=xf
ifnargin<8
kmax=10;
end
ifnargin<7
tol=1e8;
end
ifnargin<6
n=100;
end
dx0(1)=(xfx0)/(tft0);%chogiatridaucuax(t0)
y0=[x0dx0(1)];
[t,x]=rungekutta(f,t0,tf,y0,n);%khoiganbgRK4
386
e(1)=x(end,1)xf;
dx0(2)=dx0(1)0.1*sign(e(1));
fork=2:kmax1
y1=[x0dx0(k)];
[t,x]=rungekutta(f,t0,tf,y1,n);
%saisogiuagiatricuoivadich
e(k)=x(end,1)xf;%x(tf)xf
ddx=dx0(k)dx0(k1);
ifabs(e(k))<tol|abs(ddx)<tol
break;
end
deddx=(e(k)e(k1))/ddx;
dx0(k+1)=dx0(k)e(k)/deddx;
end
giiphngtrnh:
y = 2y 2 + 4xyy viiukinbin:y(0)=0.25,y(1)=1/3
t: y = y1 , y = y 2 taaphngtrnhvhphngtrnhviphncp1:
y1 = y 2
y 2 = 2y1 + 4xy 2 y1
vbiudinnbnghmf7():
functiondx=f7(t,x)%Eq.(6.6.5)
dx(1)=x(2);
dx(2)=(2*x(1)+4*t*x(2))*x(1);
giiphngtrnhtadngchngtrnhctbvp2shoot.m:
clearall,clc
t0=0;
tf=1;
x0=1/4;
xf=1/3;%thoigiandau/cuoivacacvitri
n=100;
tol=1e8;
387
kmax=10;
y=@f7;
[t,x]=bvp2shoot(y,t0,tf,x0,xf,n,tol,kmax);
xo=1./(4t.*t);
err=norm(x(:,1)xo)/(n+1)
plot(t,x(:,1))
3.Phngphpsaiphnhuhn:Taxtphngtrnh:
y = f(x, y,y) y(a) = ,y(b) =
tngcaphngphpnylchiaon[a,b]thnhnonnhcbch
vxpxccohmbngccsaiphn:
y yi
y = i+1
2h
y 2y i + y i+1
y = i1
h2
Nhvy:
y 2y i + y i+1
y yi
y = i1
= f x i ,y i , i+1
i=1,2,3,...
2
h
2h
function[t,x]=bvp2fdf(a1,a0,u,t0,tf,x0,xf,n)
%Giaipt:x+a1*x+a0*x=uwithx(t0)=x0,x(tf)=xf
%bangppsaiphanhuuhan
h=(tft0)/n;
h2=2*h*h;
t=t0+[0:n]*h;
if~isnumeric(a1)
a1=a1(t(2:n));
else
length(a1)==1
a1=a1*ones(n1,1);
end
if~isnumeric(a0)
a0=a0(t(2:n));
elselength(a0)==1
388
a0=a0*ones(n1,1);
end
if~isnumeric(u)
u=u(t(2:n));
elseiflength(u)==1
u=u*ones(n1,1);
else
u=u(:);
end
A=zeros(n1,n1);
b=h2*u;
ha=h*a1(1);
A(1,1:2)=[4+h2*a0(1)2+ha];
b(1)=b(1)+(ha2)*x0;
form=2:n2
ha=h*a1(m);
A(m,m1:m+1)=[2ha4+h2*a0(m)2+ha];
end
ha=h*a1(n1);
A(n1,n2:n1)=[2ha4+h2*a0(n1)];
b(n1)=b(n1)(ha+2)*xf;
x=[x0trid(A,b)xf];
functionx=trid(A,b)
%giaihepttrdiagonal
n=size(A,2);
form=2:n
tmp=A(m,m1)/A(m1,m1);
A(m,m)=A(m,m)A(m1,m)*tmp;
A(m,m1)=0;
b(m,:)=b(m,:)b(m1,:)*tmp;
end
x(n,:)=b(n,:)/A(n,n);
form=n1:1:1
x(m,:)=(b(m,:)A(m,m+1)*x(m+1))/A(m,m);
end
389
giiphngtrnh:
2
2
y + y 2 = 0
x
x
viy(1)=5vy(2)=3tadngchngtrnhctbvp2fdf.m:
clear,clc
x0=1;%toadobiendau
y0=5;%giatribiendau
xf=2;%toadobiencuoi
yf=3;%giatribiencuoi
n=100;%sobuoctinh
a1=inline(2./x,x);
a0=inline(2./x./x,x);
u=0;%vephaicuaphupngtrinh
[x,y]=bvp2fdf(a1,a0,u,x0,xf,y0,yf,n);
plot(x,y)
11.PHNGPHPLPPICARD
VicgiibitonCauchy:
y = f(t,y) , y(t o ) = y o
(1)
hontontngngvivictmnghimy(t)caphngtrnhtchphn:
t1
y(t) = y o + f [ z,y(z)] dz
(2)
to
y n +1 = y o + f [ z, y(z)] dz
(3)
to
Trongngintachnnghimgnngutinl:
yo(x)=yo
Taxydnghmpicard()thchinthuttontrn:
functiong=picard(f,y0,maxiter)
symsxy
g=subs(f,y0);
390
g=int(g,x);
fori=1:maxiter
g=subs(f,g);
g=int(g,x);
end
g=sort(g);
12.PHNGPHPGILL
Phngphp GillcngtngtnhphngphpRungeKutta,gi
trnghimtiyn+1ctnhbng:
1
y n +1 = y n + k1 + (2 2)k 2 + (2 + 2)k 4 + k 4
6
Vi:
k1 = hf(x n ,y n )
1
1
k 2 = hf x n + h, y n + k1
2
2
1
1
2
k 3 = hf x n + h, y n + 1 + 2 k1 + 1
k2
2
2
2
2
2
k 4 = hf x n + h,y n
k2 + 1 +
k3
2
2
Taxydnghmgill()thchinthuttontrn:
function[x,y]=gill(f,a,b,y0,n)
%PhuongphapGilldegiaiphuongtrinhy(x)=f(x,y(x))
ifnargin<4|n<=0
391
n=100;
end
ifnargin<3
y0=0;
end
y(1,:)=y0(:);
h=(ba)/n;
x=a+[0:n]*h;
ifnargin(f)>1
fork=1:n
k1=h*feval(f,x(k),y(k,:));
k1=k1(:);
k2=h*feval(f,x(k)+h/2,y(k,:)+k1/2);
k2=k2(:);
k3=h*feval(f,x(k)+h/2,y(k,:)+(sqrt(2)1)*k1/2+(1sqrt(2)/2)*k2);
k3=k3(:);
k4=h*feval(f,x(k)+h,y(k,:)sqrt(2)/2*k2+(1+sqrt(2)/2)*k3);
k4=k4(:);
y(k+1,:)=y(k,:)+(k1+(2sqrt(2))*k2+(2+sqrt(2))*k3+k4)/6;
end
else
fork=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+(2sqrt(2))*f2+(2+sqrt(2))*f3+f4)/6;
end
end
giiphngtrnhtadngchngtrnhctgill.m:
392
clearall,clc
a=0;
b=1;
y=inline(x+y);
ya=0.5;
n=10;%solantinhchin=10
[t,u]=gill(y,a,b,ya,n);
plot(t,u);
[l,v]=rungekutta(y,a,b,ya,n);
holdon
plot(l,v,.r)
13.PHNGPHPRUNGEKUTTAFEHLBERG
1
1
k 2 = hf t i + h,y i + k1
4
4
3
3
9
k 3 = hf t i + h, y i + k1 + k 2
8
32
32
12
1932
7200
7296
k 4 = hf t i + h,y i +
k1
k2 +
k3
13
2197
2197
2197
439
3680
845
k 5 = hf t i + h,y i +
k1 8k 2 +
k3
k 4
216
513
4104
1
8
3544
1859
11
k 5 = hf t i + h,y i k1 + 2k 2
k3 +
k 4 k 5
2
27
2565
4104
40
XpxnghimtheophngphpRungeKuttabc4:
393
25
1408
2197
1
k1 +
k3 +
k4 k5
216
2565
4104
5
VnghimtthndngphngphpRungeKuttabc5:
16
6656
28561
9
2
z i +1 = y i +
k1 +
k3 +
k4 k5 + k6
135
12825
56430
50
55
Bctnhtiucxcnhbngshvisl:
y i +1 = y i +
4
h
h
=
s=
0.840896
2 z y
z
y
i +1
i +1
i +1
i +1
Taxydnghmrkf()thchinthuttontrn:
function[t,y]=rkf(f,t0,tf,x0,parms)
%timnghiemcuaphuongtrinhy(t)=f(t,y),y(t0)=x0
%dungphuongphapRungeKuttaFehlbergbac4,bac5
neqn=length(x0);
hmin=parms(1);
hmax=parms(2);
tol=parms(3);
t(1)=t0;
y(1:neqn,1)=x0;
count=0;
h=hmax;
i=2;
while(t0<tf)
ifnargin(f)>1
k1=h*feval(f,t0,x0);
k2=h*feval(f,t0+h/4,x0+k1/4);
k3=h*feval(f,t0+3*h/8,x0+3*k1/32+9*k2/32);
k4=h*feval(f,t0+12*h/13,x0+1932*k1/2197...
7200*k2/2197+7296*k3/2197);
k5=h*feval(f,t0+h,x0+439*k1/2168*k2+...
3680*k3/513845*k4/4104);
k6=h*feval(f,t0+h/2,x08*k1/27+2*k2...
3544*k3/2565+1859*k4/410411*k5/40);
else
k1=h*feval(f,t0);
k2=h*feval(f,t0+h/4);
394
k3=h*feval(f,t0+3*h/8);
k4=h*feval(f,t0+12*h/13);
k5=h*feval(f,t0+h);
k6=h*feval(f,t0+h/2);
end
r=max(abs(k1/360128*k3/42752197*k4/75240+...
k5/50+2*k6/55)/h);
q=0.84*(tol/r)^(1/4);
if(r<tol)
x0=x0+16*k1/135+6656*k3/12825+28561*k4/56430...
9*k5/50+2*k6/55;
t0=t0+h;
t(i)=t0;
y(1:neqn,i)=x0;
i=i+1;
end;
h=min(max(q,0.1),4.0)*h;
if(h>hmax)
h=hmax;
end;
if(t0+h>tf)
h=tft0;
elseif(h<hmin)
disp(Cangiamkichthuocbuoctinh);
return;
end;
end;
giiphngtrnhtadngchngtrnhctrkf.m:
clearall,clc
a=0;
b=1;
y=@f2;
ya=0.5;
p=[1e51e31e8];%[hminhmaxtol]
395
[t,y]=rkf(y,a,b,ya,p)
plot(t,y);
396