You are on page 1of 474

CHNG 1: MATLAB C BN

1. CC TON T C BN CA MATLAB
1. Cc ton t c bn: Matlab l mt phn mm cao cp dng gii cc bi ton.
khi ng MATLAB ta bm p vo icon ca n. Cc file MATLAB c dng *.m
v ch chy trong mi trng MATLAB. MATLAB x l s liu nh l ma trn. Khi
ta nh lnh vo ca s lnh, n s c thi hnh ngay v kt qu hin ln mn hnh.
Nu ta khng mun cho kt qu hin ln mn hnh th sau lnh ta t thm du ;.
Nu lnh qu di, khng va mt dng dng c th nh lnh trn nhiu dng v cui
mi dng t thm du ... ri xung dng. Khi son tho lnh ta c th dng cc phm
tt :

Ctrl-P gi li lnh trc

Ctrl-N
gi lnh sau

Ctrl-B li li mt k t

Ctrl-F tin ln mt k t
Ctrl- Ctrl-R sang phi mt t
Ctrl- Crtl-L sang phi mt t
home
Ctrl-A
v u dng
end
Ctrl-E v cui dng
esc
Ctrl-U
xo dng
del
Ctrl-D
xo k t ti ch con nhy ng
backspace Ctrl-H xo k t trc ch con nhy ng
) Cc php ton c bn ca MATLAB gm:
+
cng
tr
*
nhn
/
chia phi
\
chia tri
^
lu tha

chuyn v ma trn hay s phc lin hp


) Cc ton t quan h :
<
nh hn
<=
nh hn hay bng
>
ln hn
>=
ln hn hoc bng
==
bng
~=
khng bng
) Cc ton t logic :
&
v
|
or
~
not
) Cc hng :
1

pi
i
j
eps
realmin
realmax
inf
NaN

3.14159265
s o
tng t i
sai s 2-52
s thc nh nht 2-1022
s thc ln nht 21023
v cng ln
Not a number

2. Nhp xut d liu t dng lnh: MATLAB khng i hi phi khai bo bin
trc khi dng. MATLAB phn bit ch hoa v ch thng. Cc s liu a vo
mi trng lm vic ca MATLAB c lu li sut phin lm vic cho n khi gp
lnh clear all. MATLAB cho php ta nhp s liu t dng lnh. Khi nhp ma trn t
bn phm ta phi tun theo cc quy nh sau :
ngn cch cc phn t ca ma trn bng du , hay du trng
dng du ; kt thc mt hng
bao cc phn t ca ma trn bng cp du ngoc vung [ ]
nhp cc ma trn sau:

1 2 4
A = 3 2 5
1 5 3

B = 1 4 2 1

1
C = 4
7

ta dng cc lnh:
A = [ 1 2 3; 3 -2 4; 1 5 3]
B = [ 1 4 2 1]
C = [ 1; 4; 7]
3. Nhp xut d liu t file: MATLAB c th x l hai kiu file d liu: file
nh phn *.mat v file ASCII *.dat. lu cc ma trn A, B, C di dng file nh phn
ta dng lnh:
save ABC A B C
v np li cc ma trn A, B bng lnh:
load ABC A B
Nu mun lu s liu ca ma trn B di dng file ASCII ta vit:
save b.dat B /ascii
2

Ta vit chng trnh ct1_1.m nh sau:


clear
A = [1 2 3; 4 5 6]
B = [3; -2; 1];
C(2) = 2; C(4) = 4
disp(Nhan phim bat ky de xem nhap/xuat du lieu tu file)
save ABC A B C %luu A,B & C duoi dang MAT-file co ten ABC.mat
clear(A, C) %xoa A va C khoi bo nho
load ABC A C %doc MAT - file de nhap A va C vao bo nho
save b.dat B /ascii %luu B duoi dang file ASCII co ten b.dat
clear B
load b.dat %doc ASCII
b
x = input(Nhap x:)
format short e
x
format rat, x
format long, x
format short, x
4. Nhp xut d liu t bn phm: Lnh input cho php ta nhp s liu t bn phm.
V d:
x = input(Nhap x: )
Lnh format cho php xc nh dng thc ca d liu. V d:
format rat % so huu ti
format long % so s c 14 chu so sau dau phay
format long e % so dang mu
format hex % so dang hex
format short e %so dang mu ngan
format short %tro ve so dang ngan (default)
Mt cch khc hin th gi tr ca bin v chui l nh tn bin vo ca s lnh
MATLAB. Ta cng c th dng disp v fprintf hin th cc bin. V d:
disp('Tri so cua x = '), disp(x)
Ta vit chng trnh ct1_2.m nh sau:
3

clc
f = input('Nhap nhiet do Fahrenheit[F]:');
c = 5/9*(f - 32);
fprintf('%5.2f(do Fahrenheit) la %5.2f(do C).\n', f, c)
fid = fopen('ct1_2.dat', 'w');
fprintf(fid, '%5.2f(do Fahrenheit) la %5.2f(do C).\n', f, c);
fclose(fid);
Trong trng hp ta mun nhp mt chui t bn phm, ta cn phi thm k t s vo
i s. V d:
ans = input('Ban tra loi <co> hoac <khong>: ','s')
5. Cc hm ton hc:
a. Cc hm ton hc c bn:
exp(x)
hm e x
sqrt(x)
cn bc hai ca x
log(x) logarit t nhin
log10(x)
logarit c s 10
abs(x) modun ca s phc x
angle(x)
argument ca s phc a
conj(x)
s phc lin hp ca x
imag(x)
phn o ca x
real(x)
phn thc ca x
sign(x)
du ca x
cos(x)
sin(x)
tan(x)
acos(x)
asin(x)
atan(x)
cosh(x)
coth(x)
sinh(x)
tanh(x)
acosh(x)
acoth(x)
asinh(x)
atanh(x)
b. Cc hm ton hc t to: MATLAB cho php ta to hm ton hc v lu n
vo mt file dng nh l hm c sn ca MATLAB. V d ta cn to hm:
1
f1 (x) =
1 + 8x 2
4

v hm:

x12 + 4x 22 5
f1 (x1 ,x 2 )
f2 (x) =
= 2

f2 (x1 ,x 2 ) 2x1 2x1 3x 2 2.5


Mun th ta to ra file f1.m nh sau:
function y = f1(x)
y = 1./(1+8*x.^2);
v file f2.m:
function y = f2(x)
y(1) = x(1)*x(1)+4*x(2)*x(2) -5;
y(2) = 2*x(1)*x(1)-2*x(1)-3*x(2) -2.5;
Khi nhp lnh f1(2) ta c gi tr ca hm f1 ti x = 2. Khi nhp lnh f2([2 4]) ta c
gi tr ca hm f2 ti x1 = 2 v x2 = 4. Lnh feval(f1, 2) v feval(f2, [2 4]) cng
cho kt qu tng t.
Cch th hai biu din mt hm ton hc mt bin trn dng lnh l to ra
mt i tng inline t mt biu thc chui. V d ta c th nhp t dng lnh hm
nh sau:
f1 = inline(1./(1 + 8*x.^2),x);
f1([0 1]), feval(f1, [0 1])
Ta cng c th vit:
f1 = '1./(1 + 8*x.^2)';
x = [0 1];
eval(f1)
Nu hm l a thc ta ch cn nhp ma trn cc h s t s m cao nht. V d
vi a thc P4(x) = x4 + 4x3 + 2x + 1 ta vit:
P = [1 4 0 2 1]
nhn hai a thc ta dng lnh conv; chia 2 a thc ta dng lnh deconv.
Mun tnh tr s ca a thc ta dng lnh polyval v lnh polyvalm dng khi a thc
l ma trn.
c. Cc lnh x l hm: Lnh fplot v th hm ton hc gia cc gi tr
cho. V d:
fplot(f1, [-5 5 ])
5

grid on
Cho mt hm ton hc mt bin, ta c th dng lnh fminbnd ca MATLAB
tm cc tiu a phng ca hm trong khong cho. V d:
f = inline('1./((x - 0.3).^2+0.01) + 1./((x - 0.9).^2 + 0.04) - 6 ');
x = fminbnd(f, 0.3, 1)
Lnh fminsearch tng t hm fminbnd dng tm cc tiu a phng ca
hm nhiu bin. Ta c hm 3 bin lu trong file three_var.m nh sau:
function b = three_var(v)
x = v(1);
y = v(2);
z = v(3);
b = x.^2 + 2.5*sin(y) - z^2*x^2*y^2;
By gi tm cc tiu i vi hm ny bt u t x = -0.6 , y = -1.2 v z = 0.135 bng
cc lnh:
v = [-0.6 -1.2 0.135];
a = fminsearch('three_var', v)
Lnh fzero dng tm im zero ca hm mt bin. V d tm gi tr khng ca
hm ln cn gi tr -0.2 ta vit:
f = inline('1./((x - 0.3).^2 + 0.01) + 1./((x - 0.9).^2 + 0.04) - 6');
a = fzero(f, -0.2)
Zero found in the interval: [-0.10949, -0.264].
a=
-0.1316
6. Cc php ton trn ma trn v vec t:
a. Khi nim chung: Gi s ta to ra cc ma trn a v b bng cc lnh:
a = [1 2 3; 4 5 6];
b = [3 -2 1];
Ta c th sa i chng:
A = [a; 7 8 9]
B = [b; [1 0 -1]]'
6

Ton t dng chuyn v mt ma trn thc v chuyn v lin hp mt ma trn


phc. Nu ch mun chuyn v ma trn phc, ta dng thm ton t . ngha l phi
vit .. V d:
C = [1 + 2*i
X = C'
Y = C.

2 - 4*i; 3 + i

2 - 2*j];

b. Ch s: Phn t hng i ct j ca ma trn mn c k hiu l A(i, j). Tuy


nhin ta cng c th tham chiu ti phn t ca mng nh mt ch s, v d A(k) vi k
= i + (j - 1)m. Cch ny thng dng tham chiu vec t hng hay ct. Trong trng
hp ma trn y th n c xem l ma trn mt ct di to t cc ct ca ma trn
ban u. Nh vy vit A(5) c ngha l tham chiu phn t A(2, 2).
xc nh kch thc ca mt ma trn ta dng lnh length(tr v kch thc
ln nht) hay size(s hng v ct). V d:
c = [1 2 3 4; 5 6 7 8];
length(c)
[m, n] = size(c)
c. Ton t : : Ton t : l mt ton t quan trng ca MATLAB. N xut
hin nhiu dng khc nhau. V d:
1:10
to mt vec t hng cha 10 s nguyn t 1 n 10. Lnh:
100: -7: 50
to mt dy s t 100 n 51, gim 7 mi ln. Lnh:
0: pi/4: pi
to mt dy s t 0 n pi, cch u nhau pi/4
Cc biu thc ch s tham chiu ti mt phn ca ma trn. Vit A(1:k, j) l tham
chiu n k phn t u tin ca ct j. Ngoi ra ton t : tham chiu ti tt c cc
phn t ca mt hng hay mt ct. V d:
B = A(:, [1 3 2 ])
to ra ma trn B t ma trn A bng cch i th t cc ct t [1 2 3] thnh [1 3 2]
7

d. To ma trn bng hm c sn: MATLAB cung cp mt s hm to cc


ma trn c bn:
zeros
to ra ma trn m cc phn t u l zeros
z = zeros(2, 4)
ones

to ra ma trn m cc phn t u l 1
x = ones(2, 3)
y = 5*ones(2, 2)

rand

to ra ma trn m cc phn t ngu nhin phn b u


d = rand(4, 4)

randn

to ra ma trn m cc phn t ngu nhin phn b trc giao


e = randn(3, 3)

magic(n) to ra ma trn cp n gm cc s nguyn t 1 n n2 vi tng cc hng


bng tng cc ct n phi ln hn hay bng 3.
pascal(n) to ra ma trn xc nh dng m cc phn t ly t tam gic Pascal.
pascal(4)
eye(n) to ma trn n v
eye(3)
eye(m, n) to ma trn n v m rng
eye(3, 4)
e. Lp ghp: Ta c th lp ghp(concatenation) cc ma trn c sn thnh mt
ma trn mi. V d:
a = ones(3, 3)
b = 5*ones(3, 3)
c = [a + 2; b]
f. Xo hng v ct : Ta c th xo hng v ct t ma trn bng dng du [].
xo ct th 2 ca ma trn b ta vit:
b(:, 2) = []
8

Vit x(1: 2: 5) = [] ngha l ta xo cc phn t bt u t n phn t th 5 v cch 2


ri sp xp li ma trn.
g. Cc lnh x l ma trn:
Cng
: X= A + B
Tr
: X= A - B
Nhn
: X= A * B
: X.*A nhn cc phn t tng ng vi nhau
Chia
: X = A/B lc X*B = A
: X = A\B lc A*X = B
: X=A./B chia cc phn t tng ng vi nhau
Lu tha : X = A^2
: X = A.^2
Nghch o : X = inv(A)
nh thc
: d = det(A)
7. To s ngu nhin: MATLAB c cc lnh to s ngu nhin l rand v randn to
ra cc s ngu nhin theo phn b Gauss.
rand(m, n) to ra ma trn cc s ngu nhin phn b ng nht.
randn(m, n) to ra ma trn cc s ngu nhin theo phn b chun Gauss.
rand(3, 3)
randn(3, 3)
8. Cc lnh dng lp trnh:
a. Cc pht biu iu kin if, else, elseif:
C php ca if:
if <biu thc iu kin>
<pht biu>
end
Nu <biu thc iu kin> cho kt qu ng th phn lnh trong thn ca if c thc
hin.
Cc pht biu else v leseif cng tng t.
V d: Ta xt chng trnh) ct1_4. m on tui nh sau:
clc
disp(Xin chao! Han hanh duoc lam quen);
x = fix(30*rand);
disp(Tuoi toi trong khoang 0 - 30);
gu = input(Xin nhap tuoi cua ban: );
if gu < x
disp(Ban tre hon toi);
elseif gu > x
9

disp(Ban lon hon toi);


else
disp(Ban bang tuoi toi);
end
b. switch: C php ca switch nh sau :
switch <biu thc>
case n1 : <lnh 1>
case n2 : <lnh 2>
...............
case nn : <lnh n>
otherwise : <lnh n+1>
end
c. while: vng lp while dng khi khng bit trc s ln lp. C php ca n
nh sau:
while <biu thc>
<pht biu>
end
Xt chng trnh in ra chuoi Xin chao ln m hnh vi s ln nhp t bn
phm ct1_5.m nh sau:
clc
disp('xin chao');
gu = input('Nhap so lan in: ');
i = 0;
while i ~= gu
disp(['Xin chao' i]);
i=i+1
end
d. for: vng lp for dng khi bit trc s ln lp. C php nh sau:
for <ch s> = <gi tr u> : <mc tng> : <gi tr cui>
Ta xy dng chng trnh on s ct1_6.m:
clc
x = fix(100*rand);
n = 7;
t = 1;
for k = 1:7
num = int2str(n);
disp(['Ban co quyen du doan ', num, ' lan']);
disp('So can doan nam trong khoang 0 - 100');
gu = input('Nhap so ma ban doan: ');
10

if gu < x
disp('Ban doan nho hon');
elseif gu > x
disp('So ban doan lon hon');
else
disp('Ban da doan dung. Xin chuc mung');
t = 0;
break;
end
n = n - 1;
end
if t > 0
disp('Ban khong doan ra roi');
numx = int2str(x);
disp(['Do la so: ', numx]);
end
e. break: pht biu break kt thc vng lp for hay while m khng quan
tm n iu kin kt thc vng lp tho mn hay cha.
2. HO TRONG MATLAB
1. Cc lnh v: MATLAB cung cp mt lot hm v biu din cc vec t s liu
cng nh gii thch v in cc ng cong ny.
plot
ha 2-D vi s liu 2 trc v hng v tuyn tnh
plot3
ha 3-D vi s liu 2 trc v hng v tuyn tnh
polar
ho trong h to cc
loglog ho vi cc trc logarit
semilogx ho vi trc x logarit v trc y tuyn tnh
semilogy
ho vi trc y logarit v trc x tuyn tnh
plotyy ho vi trc y c nhn bn tri v bn phi
2. To hnh v: Hm plot c cc dng khc nhau ph thuc vo cc i s a vo.
V d nu y l mt vec t th plot(y) to ra mt ng thng quan h gia cc gi tr
ca y v ch s ca n. Nu ta c 2 vec t x v y th plot(x, y) to ra th quan h
gia x v y.
t = [0: pi/100: 2*pi]
y = sin(t);
plot(t, y)
grid on
polar(t, y)

11

3. c t kiu ng v: Ta c th dng cc kiu ng v khc nhau khi v hnh.


Mun th ta chuyn kiu ng v cho hm plot. Ta vit chng trnh ct1_7.m to ra
th hm hnh sin:
t = [0: pi/100: 2*pi];
y = sin(t);
plot(t, y, . ) % v bng ng chm chm
grid on
4. c t mu v kch thc ng v: c t mu v kch thc ng v ta
dng cc tham s sau:
LineWidth
rng ng thng,tnh bng s im
MarkerEdgeColor
mu ca cc cnh ca khi nh du
MarkerFaceColor
mu ca khi nh du
MarkerSize
kch thc ca khi nh du
Mu c xc nh bng cc tham s:
M
r
g
b
c

Mu
red
green
blue
cyan

M
m
y
k
w

Mu
magenta
yellow
black
white

Cc dng im nh du xc nh bng:
M
+
o
*
d
^
>
p

Kiu nh du
du cng
vng trn
du sao
ht kim cng
im tam gic hng ln
tam gic sang phi
ng gic

M
.
x
s
v
<
h

Kiu nh du
im
ch thp
hnh vung
im tam gic hng xung
tam gic sang tri
lc gic

Cc dng ng thng xc nh bng:


M
--

Kiu ng
ng lin
ng t nt

M
:
-.

Kiu ng
ng chm chm
ng chm gch

Ta xt chng trnh ct1_8.m nh sau:


x = -pi : pi/10 : pi;
12

y = tan(sin(x)) - sin(tan(x));
plot(x, y, '--rs, 'LineWidth', 2, 'MarkerEdgeColor', 'k',...
'MarkerFaceColor', 'g', 'MarkerSize', 10)
Chng trnh ny s v ng cong y = f(x) c cc c t sau :
- ng v l ng t nt(--)
- khi nh du hnh vung (s), ng v mu (r)
- ng v rng 2 point
- cc cnh ca khi nh mu en
- khi nh du mu green
- kch thc khi nh du 10 point
5. Thm ng v vo th c: lm iu ny ta dng lnh hold. Khi ta nh
lnh hold on th MATLAB khng xo th ang c. N thm s liu vo th mi
ny. Nu phm vi gi tr ca th mi vt qu cc gi tr ca trc to c th n
s nh li t l xch.
6. Ch v cc im s liu: v cc im nh du m khng ni chng li vi
nhau ta dng c t ni rng khng c cc ng ni gia cc im, ngha l ta gi
hm plot ch vi c t mu v im nh du. Ta xt chng trnh ct1_9.m nh sau:
x = -pi : pi/10 : pi;
y = tan(sin(x)) - sin(tan(x));
plot(x, y, 's', 'MarkerEdgeColor', 'k')
7. V cc im v ng: v c cc im nh du v ng ni gia chng ta
cn m t kiu ng v kiu im. Ta xt chng trnh ct1_10.m:
x = 0:pi/15:4*pi;
y = exp(2*sin(x));
plot(x, y, '-r', x, y, 'ok')
dng v ng cong y = f(x) c ng ni lin, mu . im nh du l
ch o c mu en.
8. V vi hai trc y: Lnh plotyy cho php to mt th c hai trc y. Ta cng c
th dng plotyy cho gi tr trn hai trc y c kiu khc nhau nhm tin so snh. Ta
xt chng trnh ct1_11.m:
t = 0:900;
A = 1000;
b = 0.005;
a = 0.005;
13

z2 = sin(b*t);
z1 = A*exp(-a*t);
[haxes, hline1, hline2] = plotyy(t, z1, t, z2,'semilogy', 'plot');
9. V ng cong vi s liu 3 - D: Nu x, y, z l 3 vec t c cng di th plot3 s
v ng cong 3D. Ta vit chng trnh ct1_12.m:
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
axis square;
grid on
10. t cc thng s cho trc: Khi ta to mt hnh v, MATLAB t ng chn cc
gii hn trn trc to v khong cch nh du da trn s liu dng v. Tuy
nhin ta c th m t li phm vi gi tr trn trc v khong cch nh du theo
ring. Ta c th dng cc lnh sau:
axis
t li cc gi tr trn trc to
axes
to mt trc to mi vi cc c tnh c m t
get v set cho php xc nh v t cc thuc tnh ca trc to ang
c
gca
tr v trc to c
MATLAB chn cc gii hn trn trc to v khong cch nh du da trn s
liu dng v. Dng lnh axis c th t li gii hn ny. C php ca lnh:
axis[ xmin , xmax , ymin , ymax]
Ta xt chng trnh ct1_13.m nh sau:
x = 0:0.025:pi/2;
plot(x, tan(x), '-ro')
axis([0 pi/2 0 5])
MATLAB chia vch trn trc da trn phm vi d liu v chia u. Ta c th m t
cch chia nh thng s xtick v ytick bng mt vec t tng dn. V d xt chng
trnh ct1_14.m:
x = -pi: .1: pi;
y = sin(x);
plot(x, y)
set(gca, 'xtick', -pi :pi/2:p);
set(gca, 'xticklabel', {'-pi', '-pi/2', '0', 'pi/2', 'pi'})
11. Ghi nhn ln cc trc to : MATLAB cung cp cc lnh ghi nhn ln ho
gm :
title
thm nhn vo ho
14

xlabel thm nhn vo trc x


ylabel thm nhn vo trc y
zlabel thm nhn vo trc z
legend
thm ch gii vo th
text
hin th chui vn bn v tr nht nh
gtext
t vn bn ln ho nh chut
\bf
bold font
\it
italics font
\sl
oblique font (ch nghing)
\rm
normal font
Cc k t c bit xem trong String properties ca Help.
Ta dng cc lnh xlabel , ylabel , zlabel thm nhn vo cc trc to . Ta c th
thm vn bn vo bt k ch no trn hnh v nh hm text. Ta c chng trnh
ct1_15.m:
x = -pi: .1: pi;
y = sin(x);
plot(x, y)
xlabel('t = 0 to 2\pi', 'Fontsize', 16)
ylabel('sin(t)', 'Fontsize', 16)
title('\it{Gia tri cua sin tu zero n 2 pi}', 'Fontsize', 16)
text(3*pi/4, sin(3*pi/4),'\leftarrowsin(t ) = 0.707', 'FontSize', 12)
12. nh v vn bn trn hnh v: Ta c th s dng i tng vn bn ghi ch
cc trc v tr bt k. MATLAB nh v vn bn theo n v d liu trn trc. V d
v hm y = Aet vi A = 0.25 , t = 0 n 900 v = 0.005 ta vit chng trnh
ct1_16.m:
t = 0: 900;
plot(t, 0.25*exp(-0.005*t))
plot(t, y)
text(300, .25*exp(-.005*300),...
'\bullet\leftarrow\fontname{times}0.25{\ite}^{- 0.005{\itt}} tai,...
{\itt} = 300', 'FontSize', 14)%ghi chu tai t = 300
Tham s HorizontalAlignment v VerticalAlignment nh v vn bn so vi cc to
x, y, z cho.
13. ho c bit:
a. Khi v vng: ho khi v vng biu din s liu l vec t hay ma trn.
MATLAB cung cp cc hm ho khi v vng :
bar
hin th cc ct ca ma trn m*n nh l m nhm, mi nhm c n
bar
15

barh

hin th cc ct ca ma trn m*n nh l m nhm, mi nhm c n


bar nm ngang
bar3
hin th cc ct ca ma trn m*n nh l m nhm, mi nhm c n
bar dng 3D
bar3h
hin th cc ct ca ma trn m*n nh l m nhm, mi nhm c n
bar dng 3D nm ngang
Mc nh, mi phn t ca ma trn c biu din bng mt bar. Ta xt chng trnh
ct1_17.m:
y=

[5 2 1
6 7 3
8 6 3
5 5 5
1 5 8];

bar(y)
b. M t d liu trn trc: Ta dng cc hm xlabel v ylabel m t cc d
liu trn trc. Ta xt chng trnh ct1_18.m:
nhdo = [29 23 27 25 20 23 23 27];
ngay = 0: 5: 35;
bar(ngay, nhdo)
xlabel('Ngay')
ylabel('Nhiet do (^{o}C)')
set(gca,'YLim',[15 30],'Layer','top')
grid on
set(gca,'YLim',[15 30])
Mc nh,phm vi gi tr ca trc y l t 0 n 30. xem nhit trong khong t
15 n 30 ta thay i phm vi gi tr ca trc y:
set(gca,'YLim',[15 30],'Layer','top')
v trn th, phm vi gi tr ca trc y thay i.
c. Xp chng th: Ta c th xp chng s liu trn th thanh bng cch
to ra mt trc khc trn cng mt v tr v nh vy ta c mt trc y c lp vi b s
liu khc.
TCE = [515 420 370 250 135 120 60 20];
nhdo = [29 23 27 25 20 23 23 27];
ngay = 0:5:35;
bar(ngay, nhdo)
xlabel('Ngay')
16

ylabel('Nhiet do (^{o}C)')
xp chng mt s liu ln mt th thanh trn, c trc th 2 cng v tr
nh trc th nht ta vit:
h1 = gca;
v to trc th 2 v tr trc th nht trc nht v b s liu th 2:
h2 = axes('Position',get(h1,'Position'));
plot(days,TCE,'LineWidth',3)
trc th 2 khng gy tr ngi cho trc th nht ta vit:
set(h2,'YAxisLocation','right','Color','none','XTickLabel',[])
set(h2,'XLim',get(h1,'XLim'),'Layer','top')
ghi ch ln th ta vit:
text(11,380,'Mat do','Rotation',--55,'FontSize',16)
ylabel('TCE Mat do (PPM)')
title('Xep chong do thi','FontSize',16)
(lu trong ct1_19.m)
d. ho vng: Hm area hin th ng cong to t mt vec t hay t mt
ct ca ma trn. N v cc gi tr ca mt ct ca ma trn thnh mt ng cong
ring v t y vng khng gian gia cc ng cong v trc x. ta xt chng trnh
ct1_20.m:
Y = [5 1 2
837
968
555
4 2 3];
area(Y)
hin th th c 3 vng, mi vng mt ct. cao ca mi th vng l tng cc
phn t trong mt hng. Mi ng cong sau s dng ng cong trc lm c s.
hin th ng chia li ta dng lnh:
set(gca,'Layer','top')
set(gca,'XTick',1:5)
grid on
f. th pie: th pie hin th theo t l phn trm ca mt phn t ca mt
vec t hay mt ma trn so vi tng cc phn t. Cc lnh pie v pie3 to ra th 2D
v 3D. ta xt chng trnh ct1_21.m:
X = [19.3 22.1 51.6;
17

34.2 70.3 82.4;


61.4 82.9 90.8;
50.5 54.9 59.1;
29.4 36.3 47.0];
x = sum(X);
explode = zeros(size(x));
[c,offset] = max(x);
explode(offset) = 1;
h = pie(x,explode)
%A = [ 1 3 6];
%pie3(A)
Khi tng cc phn t trong i s th nht bng hay ln hn 1, pie v pie3 chun ho
cc gi tr. Nh vy cho vec t x, mi phn c din tch xi / sum( x i ) vi xi l mt
phn t ca x. Gi tr c chun ho m t phn nguyn ca mi vng. Khi tng cc
phn t trong i s th nht nh hn 1, pie v pie3 khng chun ho cc phn t ca
vec t x. Chng v mt phn pie.
x = [.19 .22 .41];
pie(x)
g. Lm hnh chuyn ng: Ta c th to ra hnh chuyn ng bng 2 cch
to v lu nhiu hnh khc nhau v ln lt hin th chng
v v xo lin tc mt i tng trn mn hnh,mi ln v li c s thay i.
Vi cch th nht ta thc hin hnh chuyn ng qua 3 bc:
dng hm moviein dnh b nh cho mt ma trn ln nhm lu cc
khung hnh.
dng hm getframes to cc khung hnh.
dng hm movie hin th cc khung hnh.
Sau y l v d s dng movie quan st hm fft(eye(n)).Ta to chng trnh
ct1_22.m nh sau :
axis equal
M = moviein(16, gcf);
set(gca, 'NextPlot', 'replacechildren')
h = uicontrol('style', 'slider', 'position',[100 10 500 20], 'Min', 1, 'Max', 16)
for j = 1:16
plot(fft(eye(j + 16)))
set(h, 'Value', j)
M(:, j) = getframe(gcf);
end
clf;
axes('Position', [0 0 1 1]);
18

movie(M, 30)
Bc u tin to hnh nh chuyn ng l khi gn ma trn. Tuy nhin trc khi
gi hm moviein, ta cn to ra cc trc to c cng kch thc vi kch thc m
ta mun hin th hnh. Do trong v d ny ta hin th cc s liu cch u trn vng
trn n v nn ta dng lnh axis equal xc nh t l cc trc. Hm moviein to ra
ma trn ln cha 16 khung hnh. Pht biu:
set(gca, 'NextPlot', 'replacechildren')
ngn hm plot a t l cc trc v axis normal mi khi n c gi. Hm getframe
khng i s tr li cc im nh ca trc hin hnh hnh hin c. Mi khung hnh
gm cc s liu trong mt vec t ct. Hm getframe(gcf) chp ton b phn trong ca
mt ca s hin hnh. Sau khi to ra hnh nh ta c th chy chng mt s ln nht
nh v d 30 ln nh hm movie(M, 30) .
Mt phng php na to hnh chuyn ng l v v xo, ngha l v mt
i tng ho ri thay i v tr ca n bng cch thay i to x, y v z mt
lng nh nh mt vng lp. Ta c th to ra cc hiu ng khc nhau nh cc cch
xo hnh khc nhau. Chng gm:
none
MATLAB khng xo i tng khi n di chuyn
background
MATLAB xo i tng bng cch v n c mu
nn
xor
MATLAB ch xo i tng
Ta to ra M-file c tn l ct1_23.m nh sau:
A = [ -8/3 0 0; 0 -10 10; 0 28 -1 ];
y = [35 -10 -7]';
h = 0.01;
p = plot3(y(1), y(2), y(3),'.', ...
'EraseMode', 'none', 'MarkerSize', 5);
axis([0 50 -25 25 -25 25])
hold on
for i = 1:4000
A(1,3) = y(2);
A(3,1) = -y(2);
ydot = A*y;
y = y + h*ydot;
set(p, 'XData', y(1), 'YData', y(2), 'ZData', y(3)) % thay doi toa do
drawnow
i = i + 1;
end
13. ho 3D:
19

a.Cc lnh c bn: Lnh mesh v surf to ra li v mt 3D t ma trn s liu.


Gi ma trn s liu l z m mi phn t ca n z(i, j) xc nh tung ca mt th
mesh(z) to ra mt li c mu th hin mt z cn surf(z) to ra mt mt c mu z.
b. th cc hm hai bin: Bc th nht th hin hm 2 bin z=f(x,y) l
to ma trn x v y cha cc to trong min xc nh ca hm. Hm meshgrid s
bin i vng xc nh bi 2 vec t x v y thnh ma trn x v y. Sau ta dng ma
trn ny nh gi hm.
Ta kho st hm sin(r)/r. tnh hm trong khong -8 v 8 theo x v y ta ch
cn chuyn mt vec t i s cho meshgrid:
[x,y] = meshgrid(-8:.5:8);
r = sqrt(x.^2 + y.^2) + 0.005;
ma trn r cha khong cch t tm ca ma trn. Tip theo ta dng hm mesh v
hm.
z = sin(r)./r;
mesh(z)
c. th ng ng mc: Cc hm contour to, hin th v ghi ch cc ng
ng mc ca mt hay nhiu ma trn. Chng gm:
clabel
to cc nhn s dng ma trn contour v hin th nhn
contour
hin th cc ng ng mc to bi mt gi tr cho trc ca ma
trn Z.
contour3 hin th cc mt ng mc to bi mt gi tr cho trc ca ma
trn Z.
contourf
hin th th contour 2D v t mu vng gia 2 cc ng
contourc hm cp thp tnh ma trn contour
Hm meshc hin th contour v li v surfc hin th mt contour.
[X,Y,Z] = peaks;
contour(X,Y,Z,20)
Mi contour c mt gi tr gn vi n. Hm clabel dng gi tr ny hin th nhn
ng ng mc 2D. Ma trn contour cha gi tr clabel dng cho cc ng contour
2D. Ma trn ny c xc nh bi contour, contour3 v contourf.
hin th 10 ng ng mc ca hm peak ta vit:
Z = peaks;
[C,h] = contour(Z,10);
clabel(C,h)
title({'Cac contour co nhan','clabel(C,h)'})
20

Hm contourf hin th th ng ng mc trn mt mt phng v t mu vng


cn li gia cc ng ng mc. kim sot mu t ta dng hm caxis v
colormap. Ta vit chng trnh ct1_26.m:
Z = peaks;
[C, h] = contourf(Z, 10);
caxis([-20 20])
colormap autumn;
title({'Contour co to mau', 'contourf(Z, 10)'})
Cc hm contour(z, n) v contour(z, v) cho php ta ch r s lng mc
contour hay mt mc contour cn v no vi z l ma trn s liu, n l s ng
contour v v l vec t cc mc contour. MATLAB khng phn bit gia vec t mt
phn t hay i lng v hng. Nh vy nu v l vec t mt phn t m t mt
contour n mt mc hm contour s coi n l s lng ng contour ch khng
phi l mc contour. Ngha l, contour(z, v) cng nh contour(z, n). hin th mt
ng ng mc ta cn cho v l mt vec t c 2 phn t vi c hai phn t bng mc
mong mun. V d to ra mt ng ng mc 3D ca hm peaks ta vit chng
trnh ct1_27.m:
xrange = -3: .125: 3;
yrange = xrange;
[X,Y] = meshgrid(xrange, yrange);
Z = peaks(X, Y);
contour3(X, Y, Z)
hin th mt mc Z = 1, ta cho v l [1 1]
v = [1 1]
contour3(X, Y, Z, v)
Hm ginput cho php ta dng chut hay cc phm mi tn chn cc im v.
N tr v to ca v tr con tr. V d sau s minh ho cc dng hm ginput v
hm spline to ra ng cong ni suy hai bin.
Ta to mt M-file c tn ct1_28.m nh sau:
disp('Chuot phai tro cac diem tren duong ve')
disp('Chuot trai tro diem cuoi cua duong ve')
axis([0 10 0 10])
hold on
x = [];
y = [];
n = 0;
21

but = 1;
while but = =1
[xi,yi,but] = ginput(1);
plot(xi, yi, 'go')
n = n + 1;
x(n, 1) = xi;
y(n,1) = yi;
end
t = 1:n;
ts = 1: 0.1: n;
xs = spline(t, x, ts);

22

ys = spline(t, y, ts);
plot(xs, ys, 'c-');
hold off
14. V cc vect: C nhiu hm MATLAB dng hin th cc vec t c hng v vec
t vn tc. Ta nh ngha mt vec t bng cch dng mt hay 2 i s. Cc i s m
t thnh phn x v thnh phn y ca vec t. Nu ta dng 2 i s th i s th nht s
m t thnh phn x v i s th ha m t thnh phn y. Nu ta ch dng mt i s
th MATLAB x l n nh mt s phc, phn thc l thnh phn x v phn o l
thnh phn y.
Cc hm v vec t gm:
compass
v cc vc t bt u t gc to ca h to cc
feather
v cc vec t bt u t mt ng thng
quiver
v cc vec t 2D c cc thnh phn (u, v)
quiver3
v cc vec t 3D c cc thnh phn (u, v, w)
a. Hm compass: Ta xt v d v hng v tc gi. Cc vec t xc nh
hng (gc tnh bng ) v tc gi (km/h) l:
hg = [45 90 90 45 360 335 360 270 335 270 335 335];
td = [6 6 8 6 3 9 6 8 9 10 14 12];
Ta bin i hng gi thnh radian trc khi bin i n thnh to vung
gc.
hg1 = hg * pi/180;
[x, y] = pol2cart(hg1, td);
compass(x, y)
v to ra ghi ch trn th:
gc = {'Huong gio v suc gio tai san bay Da Nang')
text(28, 15, gc)
b. Hm feather: Hm feather hin th cc vec t bt u t mt ng thng
song song vi trc x. V d to ra cc vec t c gc t 900 n 00 v cng di ta
vit chng trnh ct1_30.m:
theta = 90: 10: 0;
r = ones(size(theta));
trc khi v, chuyn cc s liu sang to vung gc v tng ln thnh r d
nhn:
26

[u, v] = pol2cart(theta*pi/180, r*10);


feather(u, v)
axis equal
Nu i s l s phc z th feather coi phn thc l x v phn o l y. Ta xt chng
trnh ct1_31.m:
t = 0: 0.3: 10;
s = 0.05 + i;
Z = exp(s*t);
feather(Z)
c. Hm quiver: Hm quiver hin th cc vec t cc im cho trong mt
phng. Cc vec t ny c xc nh bng cc thnh phn x v y.
V d to ra 10 contour ca hm peaks ta dng chng trnh ct1_32.m:
n = 2.0: .2: 2.0;
[X,Y,Z] = peaks(n);
contour(X, Y, Z, 10)
By gi dng hm gradient to cc thnh phn ca vec t dng lm i s cho
quiver:
[U, V] = gradient(Z, .2);
t hold on thm ng contour:
hold on
quiver(X,Y,U,V)
hold off
d. Hm quiver3: Hm quiver3 hin th cc vec t c cc thnh phn (u,v,w) ti
im (x, y, z). V d ta biu din qu o ca mt vt c nm i theo t. Phng
trnh ca chuyn ng l:
at 2
z( t) = v 0 t +
2
Ta vit chng trnh ct1_33.m. Trc ht ta gn vn tc ban u v gia tc a:
v0 = 10; % Van toc ban dau
a = 32; % gia toc
Tip theo tnh z ti cc thi im:
27

t = 0:.1:1;
z = vz*t + 1/2*a*t.^2;
Tnh v tr theo hng x v y:
vx = 2;
x = vx*t;
vy = 3;
y = vy*t;
Tnh cc thnh phn ca vec t vn tc v hin th bng cc dng quiver3:
u = gradient(x);
v = gradient(y);
w = gradient(z);
scale = 0;
quiver3(x, y, z, u, v, w, scale)
axis square
3. GIAO DIN HO
1. Khi nim chung: tin dng ta c th to nn giao din ho(GUI - Graphic
User Interface) gia ngi dng v MATLAB. Trong giao din ny ta c th xut d
liu di 2 dng: vn bn v ho. Mi mt GUI c mt hay nhiu layout(din
mo). Vic to GUI to nn mt cng c ho phc v nhp xut d liu mt cch
trc gic, rt thun tin. Ngoi ra c th dng GUI gim st cc qu trnh, hin th
cc i tng.
2. Nhp xut k t, s liu ra GUI:
a. To khung hnh: Ta xt cc lnh sau(ct1_35.m):

28

f = input('Nhap nhiet do(do K): ');


c = (f - 32)*5/9;
fprintf(1,'nhiet do(do C) la: %g\n', c)
Ba dng lnh trn thc hin cc cng vic sau:
- nhp gi tr u vo
- thc hin php tnh quy i nhit
- xut kt qu ra mn hnh
By gi ta tm cch ci cc dng lnh trn sao cho chng thc hin trn khun
kh mt khung ho c dng nh trn
Cc lnh sau(ct1_36.m) thc hin cng vic trn:
set(gcf,'DefaultUicontrolUnit', 'Normalized')
frame_1 = uicontrol(gcf, 'Style', 'Frame',...
'Position', [0.1 0.1 0.8 0.3]);
frame_2 = uicontrol(gcf, 'Style', 'Frame',...
'Position', [0.1 0.6 0.8 0.3]);
set(frame_1, 'BackgroundColor', [0.5 0.5 0.5]);
set(frame_2, 'BackgroundColor', [0.5 0.5 0.5]);
text_f = uicontrol(gcf, 'Style', 'Text',...
'String',
'Fahrenheit: ',...
'Position', [0.3 0.7 0.2 0.05],'HorizontalAlignment','Left');
edit_f = uicontrol(gcf, 'Style', 'Edit',...
'String', '168.0',...
'Position', [0.6 0.7 0.1 0.05 ],...
'HorizontalAlignment', 'Right',...
'Callback', 'ct1_38');
text_c1 = uicontrol(gcf,'Style', 'Text',...
'String', 'Celcius: ',...
'Position', [0.3 0.3 0.2 0.05],...
'HorizontalAlignment', 'Left');
text_c2 = uicontrol(gcf,'Style', 'Text',...
'String', '100.0',...
'Position', [0.6 0.3 0.1 0.05],...
'HorizontalAlignment', 'Left');
By gi ta s xem cc lnh trn hot ng nh th no. Cc lnh sau:
set(gcf,'DefaultUicontrolUnit', 'Normalized')
frame1 = uicontrol(gcf,'Style', 'Frame',...
'Position', [0.1 0.1 0.8 0.3]);
29

frame2 = uicontrol(gcf,'Style', 'Frame',...


'Position', [0.1 0.6 0.8 0.3]);
set(frame1,'BackgroundColor', [0.5 0.5 0.5]);
set(frame2,'BackgroundColor', [0.5 0.5 0.5]);
to hai khung hnh ch nht trong ca s Figure hin hnh vi nn mu xm. Hai
khung (Frames) c to cc gc di tri l (0.1, 0.1) v (0.1, 0.6), cng chiu cao
0.3 n v v b rng 0.8 n v. n v c tnh bng % ca kch c ngoi ca
Figure. Vy ta c th din gii nh sau:
- Khung th nht c gc tri di ti im c to 10% chiu ngang v 10%
chiu cao ca khung ngoi Figure.
- Khung th 2 c gc tri pha di ti im c to ng vi 10% chiu
ngang v 60% chiu cao ca khung ngoi Figure.
- C hai khung c chiu cao bng 30% chiu cao v b ngang bng 80% b
ngang ca khung ngoi Figure.
b. Dng lnh edit v text nhp xut k t v s liu: Trn y ta dng
lnh uicontrol to v xc nh v tr hai khung hnh. on lnh sau s dng
uicontrol vit chui k t Fahrenheit ln khung bn trn:
text_ f = uicontrol(gcf,'Style','Text','String','Fahrenheit: ',...
'Position',[0.3 0.7 0.2 0.05],'HorizontalAlignment','Left');
Chui k t Fahrenhaeit c t vo ng v tr dn tri ca c Position
ghi trong on chng trnh trn. on lnh sau dng Edit vit chui k t 68.0
vo v tr bn cnh ca Fahrenheit. Chui k t c v tr dn phi trong (Position
Box).
edit_f = uicontrol(gcf,'Style', 'Edit',...
'String', '168.0',...
'Position', [0.6 0.7 0.1 0.05 ],...
'HorizontalAlignment', 'Right',...
'Callback', 'ct1_38');
Do s dng edit, chui k t 68.0 l chui c th vit li c trc tip trn GUI.
Sau khi nhn nt trn, gi tr mi vit li c tip nhn v MATLAB s gi lnh vit
trong phn callback ct1_38.m.
Cui cng ta cn phi dng uicontrol to ta chui text, hin th chui
Celcius v 20.0 trong khung bn di.
text_c1 = uicontrol(gcf,'Style','Text','String','Celcius: ',...
'Position',[0.3 0.3 0.2 0.05],'HorizontalAlignment','Left');
text_c2 = uicontrol(gcf,'Style','Text','String','20.0','Position',...
30

[0.6 0.3 0.1 0.05],'HorizontalAlignment','Left');


c. T ng cp nht gi tr ln GUI: hon thin v d GUI ta thc hin
chng trnh vi nhim v tnh quy i t K sang C v t ng in kt qu
vo cc bn cnh chui Celcius. on m sau phc v mc ch callback (hon tr
gi tr) c lu vo file ct1_38.m v c ni dung nh sau:
f = get(edit_f, 'String');
f = str2num(f);
c = ( f - 32)*5/9;
c = num2str(c);
set(text_c2, 'String',c);
on m trn nhn gi tr do lnh uicontrol edit c vo di dng chui (string) v
sau :
- bin i t dng string sang dng s
- tnh quy i t nhit fahrenheit sang nhit celcius
- bin i t s sang string
- xut kt qu di dng string ra GUI nh text_c2
3. Nhp s liu t thanh trt: Ngoi cch nhp s liu t bn phm, ta c th nhp
s liu t thanh trt. Ta mun to ra mt giao din nh sau:

Trong giao din ny, con trt s lm thay i gi tr nhit ua vo v nhit quy
i tnh theo C cng s thay i tng ng. Cc lnh to ra giao din ny
(ct1_37.m) l:
set(gcf, 'DefaultUicontrolUnit', 'Normalized')
frame_1 = uicontrol(gcf, 'Style', 'Frame', 'Position', [0.1 0.1 0.8 0.3]);
frame_2 = uicontrol(gcf, 'Style', 'Frame', 'Position', [0.1 0.6 0.8 0.3]);
31

set(frame_1, 'BackgroundColor' ,[0.5 0.5 0.5]);


set(frame_2, 'BackgroundColor', [0.5 0.5 0.5]);
text_ f = uicontrol(gcf, 'Style', 'Text', 'String', 'Fahrenheit: ','Position',...
[0.3 0.7 0.2 0.05], 'HorizontalAlignment', 'Left');
edit_f = uicontrol(gcf, 'Style', 'Edit',...
'String', '168.0'.,,,
'Position', [0.6 0.7 0.1 0.05 ],...
'HorizontalAlignment', 'Right',...
'Callback', 'ct1_38');
text_c1 = uicontrol(gcf,'Style', 'Text',...
'String', 'Celcius: ',...
'Position', [0.3 0.3 0.2 0.05],...
'HorizontalAlignment', 'Left');
text_c2 = uicontrol(gcf,'Style', 'Text',...
'String', '100.0',...
'Position', [0.6 0.3 0.1 0.05],...
'HorizontalAlignment', 'Left');
slider_f = uicontrol(gcf,'Style', 'Slider',...
'Min', 32.0, 'Max', 212.0,...
'Value', 68.0,...
'Position', [0.6 0.8 0.2 0.05],...
'Callback', 'ct1_39; ct1_38');
to thanh trt ta dng lnh:
slider_f = uicontrol(gcf,'Style','Slider','Min',32.0,'Max',212.0,...
'Value',68.0,'Position',[0.6 0.8 0.2 0.05],...
'Callback','ct1_39; ct1_38');
Nh vy Callback c th gi mt chui cc lnh MATLAB, phn cch nhau
bng du chm than hay du phy. Chui callback gi ct1_39.m:
f = get(slider_f,'Value');
f = num2str(f);
set(edit_f,'String',f,'CallBack','ct1_40; ct1_38');
vi tc dng nhp nhit gi ti Value ca slider_f vo v tr bn cnh cha
chui Fahrenheit. Sau Callback gi tip ct1_38.m tnh quy i
gi tr nhit v gn vo cnh chui Celcius. File ct1_40.m nh sau:
f = get(edit_f,'String');
f = str2num(f);
32

set(slider_f,'Value',f);
c nhim v cp nht gi tr gi ti Value ca slider_f ri sau ct1_38.m lm
nt phn vic cn li: tnh i nhit v gn vo v tr cnh cha chui Celcius.
4. Chn la khi xut s liu:
a. Khi nim chung: Ngoi kh nng xut d liu c nh theo kiu string hay
kiu s, ta c th xut d liu theo mt danh mc no . minh ho, ta to file
ct1_41.m nh sau:
f = input('Nhap nhiet do: ');
r = f + 459.7;
c = (f - 32)*5/9;
k = c + 273.15;
choice = input(['Nhap 1 cho Rankie', '2 cho Celcius', '3 cho Kelvin: ']);
if choice = = 1
fprintf(1, 'Nhiet do (do R) la: %g\n', r);
elseif choice = = 2
fprintf(2, 'Nhiet do (do C) la: %g\n', c);
elseif choice = = 3
fprintf(2, 'Nhiet do (do C) la: %g\n', c);
end
T ca s lnh, nhp lnh ct1_41 th MATLAB s hi nhit v ch quy i ri
hin th kt qu. Tuy nhin cng c GUI ca MATLAB cho php ta thc hin vic la
chn thun li hn. Ta c th chn mt trong 4 phng xut d liu sau y:
- dng popupmenu
- dng list box
- dng radio button
- dng check box
b. Dng popupmenu: Ta to ra giao din nh sau:

33

Cc lnh thc hin cng vic trn (ct1_42.m) l:


set(gcf, 'DefaultUicontrolUnit', 'Normalized')
frame_1 = uicontrol(gcf, 'Style', 'Frame',...
'Position', [0.1 0.1 0.8 0.3]);
frame_2 = uicontrol(gcf, 'Style', 'Frame',...
'Position', [0.1 0.6 0.8 0.3]);
set(frame_1, 'BackgroundColor', [0.5 0.5 0.5]);
set(frame_2, 'BackgroundColor' ,[0.5 0.5 0.5]);
text_f = uicontrol(gcf,'Style', 'Text',...
'String', 'Fahrenheit: ',...
'Position', [0.3 0.7 0.2 0.05],...
'HorizontalAlignment', 'Left');
edit_f = uicontrol(gcf,'Style', 'Edit',...
'String',...'168.0',...
'Position', [0.6 0.7 0.1 0.05 ],...
'HorizontalAlignment', 'Right',...
'Callback', 'ct1_38');
popup_c = uicontrol(gcf,...
'Style','Popupmenu',...
'String','Rankine|Celcius|Kelvin',...
'Value',2,...
'Position',[0.3 0.3 0.2 0.05],...
'Callback','ct1_43; ct1_45');
text_c2 = uicontrol(gcf, 'Style', 'Text',...
'String', '100.0',...
'Position', [0.6 0.3 0.1 0.05],...
'HorizontalAlignment', 'Left');
slider_f = uicontrol(gcf, 'Style', 'Slider',...
34

'Min', 32.0, 'Max', 212.0,...


'Value', 68.0,...
'Position', [0.6 0.8 0.2 0.05],...
'Callback', 'ct1_39; ct1_45');
Khi kch chut vo Popupmenu , c ba kh nng chn la s xut hin. Tip tc nhy
chut vo mt trong 3 kh nng , Popupmenu bin mt ch cn li n v c
chn. Khi dng chut ko thanh trt frame pha trn, ta c c gi tr quy i
sang n v c chn hin th pha di. Trong on m trn, gi tr Value t
sn l 2. Khi Callback gi ct1_43.m:
choice = get(popup_c,Value);
th gi tr ca bin choice c a ti Value. Sau Callback gi tip ct1_45.m
xem kt qu gi trong choice. File ct1_45.m nh sau:
f = get(edit_f, 'String');
f = str2num(f);
r = f + 459.7;
c = (f - 32)*5/9;
k = c + 273.15;
choice = input(['Nhap 1 cho Rankie', '2 cho Celcius', '3 cho Kelvin: ']);
if choice = = 1
t = r;
elseif choice = = 2
t = c;
elseif choice = = 3
t=k
end
t = num2str(t);
set(text_c2, 'String',t);
Bng cch thay Popupmenu bng Radiobutton uicontrol ta c phng n
Radiobutton. Giao din s c dng:

35

Cc lnh thc hin cng vic ny (ct1_46.m) l:


set(gcf, 'DefaultUicontrolUnit', 'Normalized')
frame_1 = uicontrol(gcf, 'Style', 'Frame', 'Position', [0.1 0.1 0.8 0.3]);
frame_2 = uicontrol(gcf, 'Style', 'Frame', 'Position', [0.1 0.6 0.8 0.3]);
set(frame_1,'BackgroundColor', [0.5 0.5 0.5]);
set(frame_2,'BackgroundColor', [0.5 0.5 0.5]);
text_f = uicontrol(gcf, 'Style', 'Text', 'String', 'Fahrenheit: ','Position',...
[0.3 0.7 0.2 0.05], 'HorizontalAlignment', 'Left');
edit_f = uicontrol(gcf, 'Style', 'Edit', 'String','168.0', 'Position',...
[0.6 0.7 0.1 0.05 ], 'HorizontalAlignment',...
'Right', 'Callback','ct1_41');
strings = ['Rankine'; 'Celcius'; 'Kelvine'];
show = [ 0;
1;
0];
ys = [ 3;
2;
1]*0.075 + 0.075;
for i = 1:3
radio_c(i) = uicontrol(gcf,...
'Style', 'Radiobutton',...
'String', strings(i),...
'Value', show(i),...
'Position', [0.3 ys(i) 0.2 0.05],...
'Callback',
'ct1_47; ct1_45');
end
text_c2= uicontrol(gcf, 'Style', 'Text', 'String','100.0', 'Position',...
36

[0.6 0.3 0.1 0.05], 'HorizontalAlignment', 'Left');


slider_f = uicontrol(gcf, 'Style', 'Slider', 'Min',32.0, 'Max', 212.0,...
'Value', 68.0, 'Position', [0.6 0.8 0.2 0.05],...
'Callback', 'ct1_39; ct1_45');
File ct1_47.m:
for i = 1:3
if gcbo = = radio_c(i)
choice = i;
set(radio_c(i), 'Value', 1);
elseif
set(radio_c(i), 'Value', 0);
end;
end;
on lnh trn l mt vng lp, so snh s (handle) Callback thu c (gi tr do hm
gcbo tr v) vi handle ca mi nt. Nt no c s trng s c ng (turn on,
Value = 1) v nt no khc s s b ngt (turn off,Value = 0). Cui cng Callback
gi ct1_45.m thc hin vic tnh quy i c chn v hin th kt qu. im khc
duy nht l khi chn, Popupmenu ch cha mt phn t th radiobutton c th ng
thi cha nhiu phn t.
Cui cng ta xt phng n dng listbox. Giao din cn to nh sau:

Cc m to ra giao din trn (ct1_48.m) l:


set(gcf, 'DefaultUicontrolUnit', 'Normalized')
frame_1 = uicontrol(gcf, 'Style', 'Frame', 'Position', [0.1 0.1 0.8 0.3]);
37

frame_2 = uicontrol(gcf, 'Style', 'Frame', 'Position', [0.1 0.6 0.8 0.3]);


set(frame_1, 'BackgroundColor', [0.5 0.5 0.5]);
set(frame_2, 'BackgroundColor', [0.5 0.5 0.5]);
text_f = uicontrol(gcf, 'Style', 'Text', 'String', 'Fahrenheit: ', 'Position',...
[0.3 0.7 0.2 0.05], 'HorizontalAlignment', 'Left');
edit_f = uicontrol(gcf, 'Style', 'Edit', 'String', '168.0', 'Position',...
[0.6 0.7 0.1 0.05 ], 'HorizontalAlignment',...
'Right', 'Callback', 'ct1_38');
listbox_c = uicontrol(gcf,...
'Style', 'Listbox',...
'String', 'Rankine|Celcius|Kelvin',...
'Value', 2,...
'Position', [0.3 0.3 0.2 0.05],...
'Callback', 'ct1_49;ct1_45');
text_c2 = uicontrol(gcf, 'Style', 'Text', 'String', '100.0', 'Position',...
[0.6 0.3 0.1 0.05], 'HorizontalAlignment', 'Left');
slider_f = uicontrol(gcf, 'Style', 'Slider', 'Min',32.0, 'Max', 212.0,...
'Value', 68.0, 'Position', [0.6 0.8 0.2 0.05],...
'Callback', 'ct1_39; ct1_45');
5. Cng c ho to GUI
a. To GUI bng cng c ho: Trn y ta xem xt cch to GUI bng
phng php th cng. Ta c th to GUI bng cng c ho. Khi nhp lnh guide
ta gi trnh ho (Graphics User Interface Development Environment) son tho
layout. Kt qu u tin l ta c mt layout rng nh sau:

Alignment

Sontho
thuctnh
Chyth

Sonmenu

Vngthit
k
Ccphnt

38

Vic u tin l ta thit k giao din mong mun. Ta s dng chut ko cc


phn t cn dng t bn tri v th vo layout rng bn phi. Ta c th dch chuyn
cc phn t ny cc v tr mong mun v cn chnh bng cng c Alignment. Vi
mi phn t ta cn xc nh thuc tnh cho n bng cch bm p vo phn t hay
bm vo cng c son tho thc tnh
Sau khi thit k xong ta lu n li. Lc ny MATLAB t ng to ra file *.fig
dng lu giao din va to v file *.m cha cc m lnh cn thc hin. Vic cui
cng l vit cc m lnh vo file *.m. Trong qu trnh thit k ta c th chy th xem
sau mi bc thit k t yu cu cha bng cch bm vo chy th
b. Mt s v d to GUI:
) m s ln bm chut: Ta thit k mt giao din nh sau:

Ta mun l khi bm chut, s ln bm s c m v ghi li. Trc ht ta gi


guide v c c mt layout rng. Vo Property Inspector ( son tho thuc tnh) v
ghi vo Name chui "ct1_52" v chp nhn thuc tch Tag mc nh ca n l
figure1; dng Font ch mc nh, c ch 12, bold. Ta dng Edit Text ghi li s
ln bm. Ta vo Property Inspector ri chn String. Ta nhp vo ny chui "So lan
bam chuot: 0". Ta ghi vo Tag chui "editmot" v cng dng Font ch mc nh, c
ch 12 v bold. Tip theo ko Pushbutton vo layout v son tho thuc tnh cho n
vi Font ch mc nh, c ch 12, bold. Trong thuc tnh String ghi chui " Bam
chuot"; ghi v Tag chui "pushbuttonmot". Nh vy l ta thit k xong. By gi ta
lu li vi tn l ct1_52.fig v ct1_52.m.
Nhim v tip theo l ghi cc lnh cn thit vo file ct1_52.m. File ny c
MATLAB t ng to ra. Ta phi thm vo cc m lnh khi bm chut th s
ln bm c th hin trn Edit Text. Ta s ghi cc m lnh ny vo phn:
function varargout = pushbuttonmot_Callback(h, eventdata, handles, varargin)
39

do lnh cn c thc hin khi gi pushbutton. Ni dung ca ct1_52.m l:


function varargout = Ct1_52(varargin)
if nargin = = 0
fig = openfig(mfilename,'reuse');
set(fig, 'Color', get(0, 'defaultUicontrolBackgroundColor'));
handles = guihandles(fig);
guidata(fig, handles);
if nargout > 0
varargout{1} = fig;
end
elseif
ischar(varargin{1})
try
[varargout{1:nargout}] = feval(varargin{:});
catch
disp(lasterr);
end
end
function varargout = pushbuttonmot_Callback(h, eventdata, handles, varargin)
persistent dem;%bien dem la persistent de no ton tai giua lan goi ham
if isempty(dem)
dem = 0;
end
dem = dem + 1;
str = sprintf('So lan bam chuot: %d',dem);
set(handles.editmot,'String',str);
) Chuyn i t Fahrenheit sang Celcius: Ta thit k mt GUI
chuyn i nhit . Giao din c dng nh sau:

40

Thuc tnh ca Layout c ghi Name: ct1_53 cn cc thuc tnh khc l mc


nh.
Ta dng hai Frame vi cc Tag l frmmot v frame2. Cc thuc tnh khc chp
nhn gi tr mc nh.
Edit Text th nht c cc thuc tnh FontName: Arial, FontSize: demi,
FntWeight: demi, String: Fahrenheit, Tag: editmot cn cc thuc tnh khc l mc
nh.
Edit Text th hai c cc thuc tnh FontName: Arial, FontSize: demi,
FntWeight: demi, String: trng, Tag: edithai cn cc thuc tnh khc l mc nh.
Edit Text th ba c cc thuc tnh FontName: Arial, FontSize: demi,
FntWeight: demi, String: Celcius, Tag: editba cn cc thuc tnh khc l mc nh.
Edit Text th t c cc thuc tnh FontName: Arial, FontSize: demi,
FntWeight: demi, String: trng, Tag: editbon cn cc thuc tnh khc l mc nh.
Sau khi thit k xong, lu n vi tn ct3_18.fig. MATLAB to thm ct1_53.m.
By gi ta cn vit m cho n. Nhim v ca on m l khi ta nhp nhit
Fahrenheit vo Edit text th hai th trong Edit Text th 4 phi xut hin gi tr
nhit Celcius tng ng. Do vy ni dung ca ct1_53.m l:
function varargout = Ct1_53(varargin)
if nargin == 0 % LAUNCH GUI
fig = openfig(mfilename,'reuse');
set(fig,'Color',get(0,'defaultUicontrolBackgroundColor'));
handles = guihandles(fig);
guidata(fig, handles);
if nargout > 0
varargout{1} = fig;
end
elseif ischar(varargin{1})
try
[varargout{1:nargout}] = feval(varargin{:}); % FEVAL
switchyard
catch
disp(lasterr);
end
end
function varargout = edithai_Callback(h, eventdata, handles, varargin)
f = get(handles.edithai,'String');
f = str2num(f);
c = (f - 32)*5/9;
c = num2str(c);
set(handles.editbon,'String',c);
41

Trong on m cn vit nm trong on:


function varargout = edithai_Callback(h, evendata, handles, varargin)
Cc lnh khc l do MATLAB t ng to ra.
) Dng slider nhp s liu: Ta dng v d chuyn i nhit trn nhng
by gi s thm slider thay i nhit u vo. Giao din s c dng:

Nh vy ta cn 5 phn t, trong c mt phn t l slider v 4 phn t Edit


Text.
Layout c thuc tnh Name: ct1_54, cn cc thuc tnh khc ta chp nhn gi
tr mc nh.
Slider c thuc tnh Max: 1.0 v Min: 0.0.
Edit Text th nht c thuc tnh FontSize: 12, FntWeight: bold, String:
Fahrenheit cn cc thuc tnh khc chp nhn gi tr mc nh.
Edit Text th 2 c thuc tnh FontSize: 12, FntWeight: bold, String: trng.
Edit Text th 3 c thuc tnh FontSize: 12, FntWeight: bold, String: Celcius.
Edit Text th 4 c thuc tnh FontSize: 12, FntWeight: bold, String:
trng. (Cc thuc tnh m ta khng nhc n c ngha l chp nhn gi tr mc nh).
Layout c lu vi tn ct1_54.fig.
By gi ta vit m cho phn ct1_54.m m MATLAB t ng to ra. Nhim
v ca n l nhn gi tr thay i t con trt, cp nht cho Edit Text 2 v Edit Text
4. Ta c ni dung ca ct1_54.m:
function varargout = ct1_54(varargin)
if nargin = = 0
fig = openfig(mfilename,'reuse');
handles = guihandles(fig);
guidata(fig, handles);
42

if nargout > 0
varargout{1} = fig;
end
elseif ischar(varargin{1})
try
[varargout{1:nargout}]
switchyard
catch
disp(lasterr);
end
end

feval(varargin{:});

FEVAL

function varargout = slider1_Callback(h, eventdata, handles, varargin)


f = get(handles.slider1,'Value');%nhan gia tri tu con truot
f = f*180 + 32;%tinh ra do Fahrenheit
a = num2str(f);%bien lai thanh chuoi
set(handles.edit2,'String',a);%ghi vao o do Fahrenheit
b = (f-32)*5/9;%doi thanh do Celcius
b = num2str(b);%doi lai thanh chuoi
set(handles.edit4,'String',b);%ghi vao o do Celcius
) Xut s liu c la chn: Ta vn dng v d trn nhng by gi nhit
quy i c th c tnh theo thang nhit Kenvine, Celcius hay Rankine. c th
chn la ta dng mt trong cc phng n: Popupmenu, Rdiobutton, Listbox hay
Checkbox. Giao din khi dng Popupmenu nh sau:

Nh vy l ta cn mt Slider, ba Edit Text v mt Popupmenu. Layout c thuc


tnh Name: ct13_55.
Slider c thuc tnh Max: 1 v Min: 0
43

Edit Text th nht c thuc tnh FontSize: 12, FntWeight: bold v String:
Fahrenheit.
Edit Text th hai c thuc tnh FontSize: 12, FntWeight: bold v String
trng.
Edit Text th 3 c thuc tnh FontSize: 12, FntWeight: bold v String
trng.
Popupmenu c thuc tnh FontSize: 12, FontWeight: bold. ghi vo thuc
tnh String ta bm p chut vo icon ca n v vit 3 dng: Kelvine, Celcius v
Rankine.
File c lu vi tn ct1_55.fig. Vn cn li l vit m trong file ct1_55.m.
M cn thc hin nhn gi tr t Slider, xem Popupmenu no c chn hin th
nhit tng ng. File ct1_55.m nh sau:
function varargout = ct1_55(varargin)
if nargin == 0 % LAUNCH GUI
fig = openfig(mfilename,'reuse');
set(fig,'Color',get(0,'defaultUicontrolBackgroundColor'));
handles = guihandles(fig);
guidata(fig, handles);
if nargout > 0
varargout{1} = fig;
end
elseif ischar(varargin{1})
try
[varargout{1:nargout}] = feval(varargin{:});
catch
disp(lasterr);
end
end
function varargout = slider1_Callback(h, eventdata, handles, varargin)
f = get(handles.slider1,'Value');
f = f*180 + 32;
a = num2str(f);
set(handles.edit2,'String',a);
r = f + 495.7;
c = (f - 32)*5/9;
k = c + 273.15;
chon = get(handles.popupmenu1,'Value');
if chon = = 1
t = k;
elseif chon = = 2
t = c;
44

elseif chon = = 3
t = r;
end
t = num2str(t);
set(handles.edit3,'String',t);
Tip theo ta xt trng hp dng listbox. Thay v dng Popupmenu ta dng Listbox.
Cc phn t khc v thuc tnh ca n khng thay i. Thuc tnh Name ca Layout
l ct1_56. Ta vo String ca Listbox v ghi vo 3 dng Kelvine, Celcius v
Rankine. Giao din nh sau:

File c lu vi tn ct1_56.fig. Tip theo vit lnh cho ct1_56.m. Ta c file


ny nh sau:
function varargout = ct1_56(varargin)
if nargin = =
fig = openfig(mfilename,'reuse');
set(fig,'Color',get(0,'defaultUicontrolBackgroundColor'));
handles = guihandles(fig);
guidata(fig, handles);
if nargout > 0
varargout{1} = fig;
end
elseif ischar(varargin{1})
try
[varargout{1:nargout}] = feval(varargin{:});
catch
disp(lasterr);
end
45

end
function varargout = slider1_Callback(h, eventdata, handles, varargin)
f = get(handles.slider1,'Value');
f = f*180 + 32;
a = num2str(f);
set(handles.edit2,'String',a);
r = f + 495.7;
c = (f - 32)*5/9;
k = c + 273.15;
chon = get(handles.listbox1,'Value');
if chon = = 1
t = k;
elseif chon = = 2
t = c;
elseif chon = = 3
t = r;
end
t = num2str(t);
set(handles.edit3,'String',t);
Ta tip tc xt phng n dng Radiobutton. Giao din c dng:

Ta dng ba Radiobutton thay cho Listbox. Radiobutton th nht c thuc tnh


FontSize: 12, FntWeight: bold v String: Rankine. Radiobutton th 2 c thuc tnh
FontSize: 12, FntWeight: bold v String: Celcius. Radibutton th 3 c thuc tnh
FontSize: 12, FntWeight: bold v String: Kelvine. Cc phn t khc v thuc tnh
ca chng vn nh c. Layout c thuc tnh Name: ct1_57. Lu GUI vi tn
ct1_57.fig.
Tip theo ta vit cc m lnh trong ct1_57.m:
46

function varargout = ct1_57(varargin)


if nargin = = 0
fig = openfig(mfilename,'reuse');
set(fig,'Color',get(0,'defaultUicontrolBackgroundColor'));
handles = guihandles(fig);
guidata(fig, handles);
if nargout > 0
varargout{1} = fig;
end
elseif ischar(varargin{1})
try
[varargout{1:nargout}] = feval(varargin{:});
catch
disp(lasterr);
end
end
function mutual_exclude(off)
set(off,'Value',0);
function varargout = slider1_Callback(h, eventdata, handles, varargin)
global chon
f = get(handles.slider1,'Value');
f = f*180 + 32;
a = num2str(f);
set(handles.edit2,'String',a);
r = f + 495.7;
c = (f - 32)*5/9;
k = c + 273.15;
if chon = = 1
t = r;
elseif chon = = 2
t = c;
elseif chon == 3
t = k;
end
t = num2str(t);
set(handles.edit3,'String',t);
function varargout = radiobutton1_Callback(h, eventdata, handles, varargin)

47

global chon;
off = [handles.radiobutton2, handles.radiobutton3];
mutual_exclude(off);
chon = 1;
function varargout = radiobutton2_Callback(h, eventdata, handles, varargin)
global chon;
off = [handles.radiobutton1, handles.radiobutton3];
mutual_exclude(off);
chon = 2;
function varargout = radiobutton3_Callback(h, eventdata, handles, varargin)
global chon;
off = [handles.radiobutton1, handles.radiobutton2];
mutual_exclude(off);
chon = 3;
on lnh:
function mutual_exclude(off)
set(off,'Value',0);
lm cho 3 nt lnh tr thnh mt nhm. Cc cu lnh:
off = [handles.radiobutton1, handles.radiobutton2];
mutual_exclude(off);
lm cho khi chn mt nt Radiobutton ny th khng chn c nt khc na. Cui
cng ta xt phng n dng Checkbox. Giao din nh sau:

Cng nh phng n dng Radiobutton, ta dng ba Checkbox.


Checkbox th nht c thuc tnh FontSize: 12, FntWeight: bold v String:
Rankine.

51

Checkbox th hai c thuc tnh FontSize: 12, FntWeight: bold v String:


Celcius.
Checkbox th ba c thuc tnh FontSize: 12, FntWeight: bold v String:
Kelvine.
Cc phn t khc khng co g thay i. Ta lu file vi tn ct1_58.fig. Tip theo
ta vit m lnh cho ct1_58.m:
function varargout = ct1_58(varargin)
if nargin = = 0
fig = openfig(mfilename,'reuse');
set(fig,'Color',get(0,'defaultUicontrolBackgroundColor'));
handles = guihandles(fig);
guidata(fig, handles);
if nargout > 0
varargout{1} = fig;
end
elseif ischar(varargin{1})
try
[varargout{1:nargout}] = feval(varargin{:});
catch
disp(lasterr);
end
end
function mutual_exclude(off)
set(off,'Value',0);
function varargout = slider1_Callback(h, eventdata, handles, varargin)
global chon
f = get(handles.slider1,'Value');
f = f*180 + 32;
a = num2str(f);
set(handles.edit2,'String',a);
r = f + 495.7;
c = (f - 32)*5/9;
k = c + 273.15;
if chon = = 1
t = r;
elseif chon = = 2
t = c;
elseif chon = = 3
t = k;
end
t = num2str(t);
set(handles.edit3,'String',t);
function varargout = checkbox1_Callback(h, eventdata, handles, varargin)
52

global chon;
off = [handles.checkbox2, handles.checkbox3];
mutual_exclude(off);
chon = 1;
function varargout = checkbox2_Callback(h, eventdata, handles, varargin)
global chon;
off = [handles.checkbox1, handles.checkbox3];
mutual_exclude(off);
chon = 2;
function varargout = checkbox3_Callback(h, eventdata, handles, varargin)
global chon;
off = [handles.checkbox2, handles.checkbox1];
mutual_exclude(off);
chon = 3;
) GUI c dng ho: Ta xy dng mt GUI dng v th hm
y=tsin(t). Giao din nh sau:

Ta dng mt Axes, bn Pushbutton to nn giao din ny. Khi nhn Plot,


th ca hm y = tsin(t) c v. Khi nhn Grid on, th c chia li. Khi nhn
Grod off, li b xo. Nhn Close ng th.
Layout c thuc tnh Name: ct1_59, HandleVisibility: callback.
Cc Pushbutton u c thuc tnh FontSize: 12, FntWeight: bold v cc String l cc
tn lnh. GUI c lu vi tn file l ct1_59.fig. Tip theo ta son tho lnh cho
ct1_59.m:
function varargout = ct1_59(varargin)
if nargin = = 0
fig = openfig(mfilename,'reuse');
handles = guihandles(fig);
guidata(fig, handles);
53

if nargout > 0
varargout{1} = fig;
end
elseif ischar(varargin{1})
try
[varargout{1:nargout}] = feval(varargin{:}); % FEVAL
switchyard
catch
disp(lasterr);
end
end
function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)
grid on
function varargout = pushbutton2_Callback(h, eventdata, handles, varargin)
grid off
function varargout = pushbutton3_Callback(h, eventdata, handles, varargin)
close
function varargout = pushbutton4_Callback(h, eventdata, handles, varargin)
t = 0:0.01:20;
y = t.*sin(t);
plot(t,y);
Tip theo ta xt mt GUI c giao din nh sau:

Nhim v ca GUI l v th ca hm peaks theo cc dng khc nhau( mesh,


surf v contour) vi cc Colormap khc nhau(hsv, hot, gray, prism, cool, winter v
summer). Vic v cc dng th thc hin nh cc Pushbutton. Vic chn Colormap
thc hin nh Listbox.
54

Layout c thuc tnh Name: ct1_60 v thuc tnh HandleVisbility: on. Cc


Pushbutton u c thuc tnh FontSize: 12 v FntWeight: bold. Ta lu GUI vi tn
ct1_60.fig. M trong ct1_60.m gm:
function varargout = ct1_60(varargin)
if nargin = = 0
fig = openfig(mfilename,'reuse');
set(fig,'Color',get(0,'defaultUicontrolBackgroundColor'));
handles = guihandles(fig);
guidata(fig, handles);
if nargout > 0
varargout{1} = fig;
end
elseif ischar(varargin{1})
try
[varargout{1:nargout}] = feval(varargin{:});
catch
disp(lasterr);
end
end
function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)
z = peaks(40);
chon = get(handles.listbox1,'Value');
if chon = =1
colormap(hsv(256));
elseif chon = =2
colormap(hot(256));
elseif chon = =3
colormap(gray(256));
elseif chon = =4
colormap(prism(256));
elseif chon = =5
colormap(cool(256));
elseif chon = =6
colormap(winter(256));
elseif chon = =7
colormap(summer(256));
end
mesh(z);
function varargout = pushbutton2_Callback(h, eventdata, handles, varargin)
z = peaks(40);
chon = get(handles.listbox1,'Value');
if chon = =1
55

colormap(hsv(256));
elseif chon = =2
colormap(hot(256));
elseif chon = =3
colormap(gray(256));
elseif chon = =4
colormap(prism(256));
elseif chon = =5
colormap(cool(256));
elseif chon = =6
colormap(winter(256));
elseif chon = =7
colormap(summer(256));
end
surf(z);
function varargout = pushbutton3_Callback(h, eventdata, handles, varargin)
z = peaks(40);
chon = get(handles.listbox1,'Value');
if chon = =1
colormap(hsv(256));
elseif chon = =2
colormap(hot(256));
elseif chon = =3
colormap(gray(256));
elseif chon = = 4
colormap(prism(256));
elseif chon = = 5
colormap(cool(256));
elseif chon = = 6
colormap(winter(256));
elseif chon = = 7
colormap(summer(256));
end
contour(z);
) GUI c dng ho: Ta xy dng mt GUI dng menu. Giao din ca GUI
nh sau:

56

Menu Draw gm cc menu con Mesh, Contour v Close. GUI c lu trong


file ct1_61.fig v chng trnh c lu trong file ct1_61.m:
function varargout = ct1_61(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @ct1_61_OpeningFcn, ...
'gui_OutputFcn', @ct1_61_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
handles.output = hObject;
function varargout = ct1_61_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function mnumesh_Callback(hObject, eventdata, handles)
z = peaks(40);
mesh(z);
function Untitled_3_Callback(hObject, eventdata, handles)
z = peaks(40);
contour(z);
function mnuclose_Callback(hObject, eventdata, handles)
57

clf
close
function mnudraw_Callback(hObject, eventdata, handles)

58

CHNG 2: MA TRN
1. MT S KHI NIM
( Ma trn [A] gi l i xng nu [A]T = [A]
( Cho mt ma trn vung [A], cp n. Ta ni ma trn [A] khng suy bin (non
singular) nu ma trn c th nghch o c hay ni cch khc, nh thc ca ma
trn khc khng.
( Ma trn Hermite l mt ma trn vung c cc phn t l s phc bng
chuyn v lin hp ca n, ngha l phn t hng i ct j bng s phc lin hp ca
2 + j
T
3
phn t hng j ct i A = A . V d ma trn [ A ] =
l ma trn
1
2 j
Hermite.
( Ma trn Householder l mt ma trn vung dng:
2
[ H] = [E ] T [ U ][ U ]T
[U] [U]
Trong v l vec t ct khc zero
( Ma trn [A] gi l trc giao nu [A]T[A] = [E]
T
( Ma trn phc [U] gi l ma trn unita nu U U = E . V d ma trn
1 + j 1 + j

2
[ U] = 2
l ma trn unita
1
+
j
1

2
2
( Mt ma trn ch c mt ct gi l mt vec t
( Chun ca mt vec t X, k hiu l X , l mt s thc tho mn:
- X >0
- cX = c X
- X+Y X + Y
Gi thit X = [x1, x2,,xn]T, ta thng dng mt trong 3 chun sau y:
- X 1 = max x j
j

- X 2 = xj
j=1

- X3=

x
j=1

2
j

( Chun ca mt ma trn [A], k hiu l A , l mt s thc tho mn:


- A >0
59

- cA = c A
- A+B A + B
- AB A B
Ta thng dng mt trong 3 chun sau y:
n

- A 1 = max a i ,j
i

j=1
n

- A 1 = max a i ,j
j

- A3=

i =1

ai ,j

i ,j=1

( Ma trn [A] gi l xc nh dng nu vi vec t [x] bt k ta c:


[ x]T[ A][ x] > 0
( Ma trn [A] gi l na xc nh dng nu vi vec t [x] bt k ta c:
[ x]T[ A][ x] 0
Ta nh ngha ma trn xc nh m v na xc nh m mt cch tng t.
( Hng ca ma trn l cp ca ma trn con ca ma trn y c nh thc khc
khng cn mi ma trn con cp cao hn u c nh thc bng khng(ma trn con l
ma trn c c bng cch xo mt s hng v ct ca ma trn ban u).
2. BIN I HOUSEHOLDER
1. Ma trn Householder: Ta bin i ma trn [A] v dng c cc phn t thuc
ng cho chnh, cc phn t pha trn v pha di ng cho chnh khc zero,
cn cc phn t cn li bng zero(ma trn ba ng cho) bng cch dng php bin
i Householder.
Php bin i Householder dng ma trn Householder.
T
U ][ U ]
[
(1)
[ H] = [ E]
Q
Trong :
1
1
2
T
(2)
Q = [ U] [ U] = [ U]
2
2
Do [H] i xng nn:
T
T

U ][ U ]
U ][ U ]
[
[
[ H] [ H] = [ H][ H] = [ E]
[ E ]

Q
Q

T
T
T
U ][ U ] [ U ] [ U ][ U ] [ U ]
[
= [ E] 2
+
Q
Q2
T

60

T
T
U ][ U ] [ U ] ( 2Q ) [ U ]
[
= [E] 2
+
= [E]
2

Q
Q
T y ta thy [H] cng l ma trn trc giao.
Cho [X] l vec t bt k v kho st php bin i [H][X]. Chn:
[U] = [X] + k[I1]
Trong :
T
k = [X]
[I1 ] = 1 0 " 0
Ta c:
T
T

[ U] ([ X ] + k [I1 ])
U ][ U ]
[
[ H][ X ] = [E]
[ X ]
[ X ] = [ E ]
Q
Q

[ U ] ([ X ]T[ X ] + k [I1 ] [ X ])
T

= [X]

Nhng:

= [X]

(3)

[ U ] ( k 2 + k[ X1 ])
Q

2Q = ([ X ] + k [ I1 ]) ([ X ] + k [ I1 ]) = [ X ] + k [ X ] [ I1 ] + [ I1 ] [ X ] + k 2 [ I1 ] [ I1 ]
T

= k 2 + 2kx1 + k 2 = 2(k 2 + kx1 )

Nh vy:
T
(4)
[ H][ X ] = [ X ] [ U ] = k [ I1 ] = k 0 0 " 0
ngha l php bin i loi tr tt c cc phn t ca [X] tr phn t u tin.
2. Bin i Householder mt ma trn i xng: By gi ta p dng php bin i
cho ma trn [A] i xng:
1 [ 0 ]T a11 [ X ]T a11
[ X ]T
(5)
P1 [ A ] =
=

X
A
H
X
H
A
0
H
[
]
[
][
]
[
]
[
]
[
]
[
]
[
]

Trong [X] l ct u tin ca [A] vi phn t u tin b b i. [A] c c t [A]


bng cch b i ct v hng u tin. Ma trn [H] cp (n -1) c xy dng theo cc
cng thc (1) (3). Do (4) ta thy php bin i ny lm ct u tin ca [A] tr
thnh:
a11
k
a11
H H = 0
[ ][ ] #

0
Php bin i:

61

T
a11
[ H][ X ])
(
(6)
[ A]
P1 [ A ]P1 =

H
X
H
A
H
[ ][ ] [ ][ ][ ]
s ng cho ho hng u tin v ct u tin ca ma trn [A]. S bin i ca
ma trn 44 l:

1 0 0 0
a11 a12 a13 a14
1 0 0 0
a11 k 0 0
0
0
k
a21
[Q][A]

[Q]
[Q]
0
0
0
a31 [A]
[Q]
0
0
0
a41
Hng v ct th 2 ca ma trn [A] c bin i tip bng cch dng php bin i
i vi phn bn phi, pha di ca ma trn. Php bin i ny c th biu din bng
[P2 ][ A ][P2 ] [ A ] , trong :
[ E 2 ] [ 0 ]T
(7)
[P2 ] =

0
H
[
]
[
]

vi [E2] l ma trn n v 22 v [H] l ma trn (n - 2)(n - 2) c c bng cch


chn [X] t (n - 2) phn t pha di ca ct th 2 ca ma trn [A]. Thc hin (n - 2)
php bin i:
[ Ei ] [ 0 ]T
[Pi ] =
i = 1, 2,..., n - 2
0
H
[
]
[
]

c c ma trn ba ng cho(tridiagonal). Ta c:
T

U ][ U ]
[ A][ U] U T = A V U T
[
[ ] [ ] [ ][ ]
[ A][H] = [ A] [E]
= [ A]
Q
Q

Trong :

[V] =

[ A][ U]

(8)

Do vy:
T

U ][ U ]
[
T
[ H][ A][ H] = [ E ]
[ A] [ V ][ U ]
Q

T
U ][ U ]
[
T

= [ A ] [ V ][ U ]
[ A] [ V ][ U ]T
Q

= [ A] [ V ][ U ]
T

[ U ] ([ U ]T [ A]) [ U ]([ U ]T [ V ])[ U ]T


Q

= [ A] [ V ][ U ] [ U ][ V ] + 2g [ U ][ U ]
T

62

Trong :
T
U] [V]
[
g=

(9)
2Q
t: [W] = [V] - g[U]
(10)
Ta thy ngay php bin i c dng:
(11)
[ H][ A][ H] = [ A] [ W ][ U ]T [ U ][ W ]T
Thut ton c th tm li nh sau:
- Cho [A] l ma trn vung cp (n - i) c c t phn di bn phi ca ma
trn [A]
T

- t X = a i+1,i a i+ 2 ,i " a n ,i
- Tnh [ X ] . Cho k = [ X ] nu x1 > 0 v k = - [ X ] nu x1 < 0
T

- Cho U = k + x1 x 2 " x n i
2
[U]
- Tnh Q =
2
[ A][ U]
- Tnh [ V ] =
Q
[ U ]T[ V ]
- Tnh g =
2Q
- Tnh [W] = [V] - g[U]
T
T
- Tnh [ A ] = [ A] [ W ][ U ] [ U ][ W ]
- t a i ,i+1 = a i+1,i = k
Ta xy dng hm housetrans() thc hin thut ton trn:
function A = housetrans(A)
% Bien doi Householder ma tran A thanh ma tran
% ba ng cho dang[c\d\c].
% De co c va d dung d = diag(A), c = diag(A,1).
n = size(A, 1);
for k = 1:n-2
u = A(k+1:n, k);
uMag = sqrt(dot(u, u));
if u(1) < 0;
uMag = -uMag;
end
u(1) = u(1) + uMag;
A(k+1:n, k) = u; % Luu u vao phan duoi cua A.

63

H = dot(u, u)/2;
v = A(k+1:n,k+1:n)*u/H;
g = dot(u, v)/(2*H);
v = v - g*u;
A(k+1:n, k+1:n) = A(k+1:n, k+1:n) - v*u' - u*v';
A(k, k+1) = -uMag;
end
k = zeros(n);
for i = 1:n
k(i, i) = A(i, i);
end
for i = 1:n-1
k(i, i+1) = A(i, i+1);
k(i+1, i) = A(i, i+1);
end
A = k;
tnh ma trn ba ng cho theo php bin i Householder ta dng chng trnh
cthousetrans.m:
clear all, clc
a = [ 1 2 3 4; 2 9 3 5; 3 3 3 7; 4 5 7 6];
b = householder(a)
d = diag(b)
c = diag(b, 1)
3. BIN I THNH MA TRN HESSENBERG
Nu ma trn [A] l ma trn i xng, phng php Householder c th c s
dng bin i n thnh ma trn ng dng i xng ba ng cho. Nu ma trn
[A] khng i xng, phng php Householder bin i ma trn [A] thnh ma trn
ng dng Hessenberg.
Ma trn Hessenberg l ma trn c dng:
a 11 a 12 a 13 " a 1,n
a
a 22 a 23 " a 2 n
21

"
0
a
a
a

H
=
[ ]
32
33
2n
#
#
# " #

0
0
0 " a nn
Ta thc hin php bin i Householder trn ma trn [A] v c c:
[Q][H][Q] = [A]
trong [Q] l ma trn trc giao (ta gi y l phn tch Hessenberg ma trn [A]) .

64

Thut ton c th tm li nh sau:


- Cho [Q] l ma trn n v cp n
T

- t X = 0 a i+ 2 ,i " a n ,i
- Tnh [ X ] . Cho = [ X ] nu ai+2,i > 0 v = - [ X ] nu ai+2,i < 0
T

- Cho U = 0 + x 2 " x n i
2
[U]
- Tnh =
2
[ U ][ U]
- Tnh [ P ] = [ E ]

- Tnh [ Q] = [ Q ][ P ]

- Tnh [ A ] = [ P ][ A ][ P ]
Ta xy dng hm hessenberg() thc hin php phn tch trn:
function [H, Q] = hessenberg(a)
[n, n] = size(a);
q = eye(n);
for k = 1:n - 2
alfa = 0;
for j = k+1:n
alfa = alfa + a(j, k)^2;
end
alfa = sign(a(k+1, k))*sqrt(alfa);
u = zeros(1, n);
u(k+1:n) = a(k+1:n, k);
u(k+1) = u(k+1) + alfa;
beta = .5*u*u';
p = eye(n);
for i = 1:n
p(i, 1:n) = p(i, 1:n) - (u(i)*u(1:n))/beta;
end
q = q*p;
a = p*a*p;
end
H = a;
Q = q;
phn tch ma trn ta dng chng trnh cthessenberg.m:

65

clear all, clc


a = [ 1 2 3 4; 5 6 7 4; 6 4 8 9; 3 5 7 9];
[H, Q] = hessenberg(a)
4. PHN TCH MA TRN THEO PHNG PHP DOOLITTLE
Mt ma trn khng suy bin [A] gi l phn tch c thnh tch hai ma trn
[L] v [R] nu:
[A] = [L] [R]
Vic phn tch ny, nu tn ti, l khng duy nht.
Nu ma trn [L] c cc phn t nm trn ng cho chnh bng 1, ta c php
phn tch Doolittle.
Nu ma trn [R] c cc phn t nm trn ng cho chnh bng 1, ta c php
phn tch Crout.
Nu [R] = [L]T (hay [L] = [R]T) ta c php phn tch Choleski.
Vi ma trn bc 3, [L] v [R] c dng:
1 0 0
r11 r12 r13

[ L] = l 21 1 0
[ R ] = 0 r22 r23
l 31 l 32 1
0 0 r33
tm lij v rij ta thc hin php nhn. Sau khi nhn ta c:
r12
r13
r11

r13l 21 + r23
[ A ] = r11l 21 r12l 21 + r22

r11l 31 r12 l 31 + r22 l 32 r13l 31 + r23l 32 + r33


By gi ta thc hin php kh Gauss i vi phng trnh trn. u tin ta chn hng
th nht lm tr v thc hin php bin i:
hng 2 - l21 hng 1 (kh a21) hng 2
hng 3 - l31 hng 1 (kh a31) hng 3
kt qu ta c:
r13
r11 r12

[ A1 ] = 0 r22 r23

0 r22 l 32 r23l 32 + r33


Sau ta ly hng th hai lm tr v thc hin bin i:
hng 3 - l32 hng 2 (kh a32) hng 3
v c:
r11 r12 r13
[ A 2 ] = 0 r22 r23
0 0 r33

66

Nh vy ta thy ngay rng ma trn [R] l ma trn c c khi thc hin loi tr
Gauss tin ma trn [A] v cc phn t ca [L] l cc nhn t dng khi loi tr aij. iu
c ngha l tm ma trn [L] v [R] ta dng php kh Gauss tin. Ta xy dng
hm doolittle() thc hin loi phn tch Doolittle.
function [l,r] = doolittle(A)
%Phan tich ma tran A thanh A = L*U
n = size(A, 1);
u = zeros(n);
for k = 1:n-1
for i = k+1:n
if A(i, k)~= 0.0
lambda = A(i, k)/A(k, k);
A(i, k+1:n) = A(i, k+1:n) - lambda*A(k, k+1:n);
A(i, k) = lambda;
end
end
end
l = tril(A);
for i = 1:n
l(i, i) = 1;
end
l = triu(A);
for i = 1:n
l(i,i) = A(i, i);
end
5. PHN TCH MA TRN THEO PHNG PHP CROUT
Tng t nh thut ton Doolittle, ta c th phn tch ma trn [A] theo thut
ton Crout thnh tch ca ma trn [L] v [R]. Cc ma trn bc 3 theo Crout c dng:
l11 0 0
1 r12 r13
[ L] = l 21 l 22 0
[ R ] = 0 1 r23
l 31 l 32 l 33
0 0 1
tm lij v rij ta thc hin php nhn. Sau khi nhn ta c:
l11r13
l11 l11r12

[ A ] = l 21 l 21r12 + l 22 l 21r13 + l 22r23

l 31 l 31r12 + l 32 l 31r13 + l 32r23 + l 33


Nh vy:
a11 = 1. r11 + 0.0 + 0.0 = r11 ;
67

a12 = r12 ; a13 = r13


a21 = l21r11 ;
a22 = l21r12 + r22 ; a23 = l31r11
a31 = l31r11 ; a32 = l31r12 ;
a33 = l31r13 + l32r23 + r33
Mt cch tng qut ta c :
vi j > i : lij = rji = 0
vi i = 1 : r1j = a1j (j = 1 ti n)
lj1 = aj1/r11 (j = 1 ti n)
vi i = 2 ti n
i 1

rij = a ij l ik rkj ( j = i ti n)
k =1
i 1

l ji =

a ji l jk rki
k =1

(j = i ti n)
rii
Ta xy dng hm crout() phn tch ma trn theo thut ton Crout:
function [l, r] = crout(a)
n = size(a, 1);
l = zeros(n);
r = zeros(n);
for i = 1:n
r(1, i) = a(1, i);
l(i, i) = 1.;
l(i, 1) = a(i, 1)/a(1, 1);
end
for k = 2:n
r(k, k:n) = a(k, k:n) - l(k, 1:k)*r(1:k, k:n);
if k~= n
for i = 1:n
l(i, k) = (a(i, k)- l(i, 1:k-1)*r(1:k-1, k))/r(k, k);
end
end
end
6. PHN TCH MA TRN THEO PHNG PHP CHOLESKI
Thut ton Choleski cho php phn tch ma trn [A] thnh tch hai ma trn:
[A] = [L][L]T.
Thut ton ny i hi:
- [A] l ma trn thc, i xng

68

- [A] l ma trn xc nh dng


Ta vung [A] cp 3 theo thut ton Choleski:
a11 a12 a13 l11 0 0 l11 l 21
a

21 a 22 a 23 = l 21 l 22 0 0 l 22
a 31 a 32 a 33 l 31 l 32 l 33 0 0

l 31
l 32
l 33

Sau khi thc hin php nhn ta c:


2

l11l 21
l11l 31
a11 a12 a13 l11

a
= l l
2
2
a
a
l
+
l
l
l
+
l
l
21
22
23
11
21
21
22
21
31
22
32


2
2
2
a 31 a 32 a 33 l11l 31 l 21l 31 + l 22 l 32 l 31
+ l 32 + l 33
V phi l ma trn i xng. Cn bng cc phn t ca hai ma trn ta c:
l11 = a11
l 21 = a 21 / l11
l 31 = a 31 / l11

l 22 = a 22 l 221
l 32 = (a 32 l 21l 31 ) / l 22
Tng qut, vi ma trn cp n, ta c:

([L][L] )

l 33 = a 33 l 231 l 232

ij

= l i1l j1 + l i2 l j2 + + = l ik l jk i j
k =1

Cn bng vi phn t ca ma trn [A] ta c:


j

a ij = l ik l jk i = j, j + 1,...,n j = 1,2,...,n
k =1

Do ma trn [L] l ma trn tam gic tri nn i vi ct th nht ta c:


l11 = a11
l i1 = a i1 / l11
i vi ct khc, rt lij ra khi tng ta c:
j1

a ij = l ik l jk + l ijl jj
k =1

Nu i = j (phn t trn ng cho) th:


j1

l jj = a jj l 2jk

j = 2,3,...,n

k =1

v phn t nm ngoi ng cho:


j1

1
l ij = a ij l ik l jk
j = 2, 3,..., n
i = j + 2, j + 3,...,n
k =1

l jj
Da vo thut ton trn ta xy dng hm choleski()
function L = choleski(A)
% Phan tich ma tran a thanh A = LL.
% Cu phap: L = choleski(A)
f = posdef(A);
69

if f == 0
error('Ma tran khong xac dinh duong!');
return
end
n = size(A, 1);
for j = 1:n
temp = A(j, j) - dot(A(j, 1:j-1),A(j, 1:j-1));
if temp < 0.0
error('Ma tran khong xac dinh duong')
end
A(j, j) = sqrt(temp);
for i = j+1:n
A(i, j)=(A(i, j) - dot(A(i, 1:j-1),A(j, 1:j-1)))/A(j, j);
end
end
L = tril(A);
function f = posdef(M)
%Kiem tra lieu ma tran M co xac dinh duong hay kong
isposdef = true;
for i=1:length(M)
if ( det( M(1:i, 1:i) ) <= 0 )
isposdef = false;
break;
end
end
f = isposdef;% 0 neu sai, 1 neu dung
7. PHN TCH QR BNG THUT TON HOUSEHOLDER
Cho ma trn [A], phn tch QR ca n cho ta:
[A] = [Q]*[R]
Trong [Q] l ma trn trc giao v [R] l ma trn tam gic phi.
Ta dng bin i Householder tm cc ma trn [Q] v [R].
(1)
[Hn1 ][Hn2 ] [H1 ][ A ] = [ R ]
Nh vy:
1
1
1
[ A ] = ([ Hn1 ][ H n2 ] [ H1 ]) [ R ] = [ H1 ] [ Hn2 ] [H n1 ][ R ]
(2)
= [ H1 ] [ H n 2 ][ H n 1 ][ R ] = [ Q ][ R ]
Tch ca tt c cc ma trn Householder:
(3)
[ Q] = [H1 ]"[Hn2 ][Hn1 ]

70

khng nhng i xng m cn trc giao nh mi ma trn [Hk]:


T
T
[ Q] [Q] = ([H1 ] [Hn2 ][Hn1 ]) [H1 ] [Hn2 ][Hn1 ]

= [ H n 1 ] [ H n 2 ] [ H1 ] [ H1 ] [ H n 2 ][ H n 1 ] = [ E ]
Ta xy dng hm qrdecom() phn tch ma trn:
T

function [Q, R] = qrdecom(A)


%Phan tich QR
n = size(A, 1);
R = A;
Q = eye(n);
for k = 1:n - 1
H = householder(R(:, k), k);
R = H*R; %Pt.(1)
Q = Q*H; %Pt.(3)
end
Hm householder() dng to ra ma trn Householder:
function H = householder(x, k)
% Tao ma tran Householder
n = length(x);
tmp = sum(x(k+1:n).^2);
g = sqrt(x(k)^2 + tmp);
c = sqrt((x(k) + g)^2 + tmp);
u = zeros(n, 1);
u(k) = (x(k) + g)/c;
u(k + 1:n) = x(k + 1:n)/c;
H = eye(n) - 2*u*u'; %ma tran Householder
phn tch ma trn ta dng chng trnh ctqrdecom.m:
clear all, clc
a = [4 1 3 -2; 1 -2 4 1; 3 4 1 2; -2 1 2 3];
[q, r] = qrdecom(a)
8. PHN TCH QR BNG THUT TON QUAY GIVENS
K thut quay Givens l mt phng php phn tch ma trn [A] thnh tch
ca ma trn [Q] v ma trn [R] bng cch lm cho cc phn t ln lt bng zero cho
n khi c c ma trn tam gic phi. tng l dng mt ma trn quay n gin 2
2 t dc theo ng cho chnh ca mt ma trn n v v lm cho mt phn t
71

ca ma trn bng zero. Cc phn t ca ma trn quay quay mt vec t ngc chiu
kim ng h mt gc l:
cos sin
[ Q ] = sin cos

Nu ta mun quay vec t [x1 x2]T v mun lm cho x2 bng zero ri quaytheo chiu
kim ng h mt gc (hay ngc chiu kim ng h mt gc -) trong :
x
= arctg 2
x1
th ma trn quay thc hin php quay ny theo chiu kim ng h mt gc l:
cos sin
[ Q ] = sin cos

Trong :

x1

cos = c =

x12 + x 22

sin = s =

x2
x12 + x 22

Do :

x1

x12 + x 22 x 2
Ch l nh mong mun:

[ Q ] =

x2 c s
=
x1 s c

x12 + x 22
x12 + x 22
x1 cx1 + sx 2 2
2
Q
=
=
=
[ ] x sx + cx x1 + x 2

0
1
2
2

Nu A l ma trn m n, ta s xem iu g xy ra khi ta thay cc phn t ca [Q] vo


ma trn con xc nh bng cc ct v hng th i, cc ct v hng th j. Ni cch khc
ta thay ma trn 2 2 ny dc theo ng cho chnh ti mt s im:
1 " 0 " 0 " 0
# %
# # # % #

kl k i, l j
0
c
s
0
"
"
"

c k, l = i; k,l = j

# % # # #
=# #
[ Gkl ] = s k = i; l = j

0 " s " c " 0


s k = j; l = i

# # % #
# # 0
0 " 0 " 0 " 1
Nh vy [G] l ma trn n v m m ngoi tr cc gi tr b thay th:
gii = gjj = c
gij = -gij = s
72

iu ny s to ra ma trn unita:
[G]T[G] = [E]
ngha l:
g lkg lp = kp
l

v i hi:
c2 + s2 = 1
iu ny ng v cos2 + sin2 = 1 . Khi ma trn ny c p dng cho ma trn m
n ta c:

kla lp = a kp k i, j
l
b kp = g kla lp = g ila lp = ca ip + sa jp k = i
l
l
g jla lp = sa ip + ca jp k = j
l
Nh vy ma trn mi ch b thay i hng i v ct j. Ta chn s v c sao cho cc phn
t ct r v hng j bng zero:
a jr
a ir
s= 2
c
=
a 2jr + a ir2
a jr + a ir2
Nh vy ta s c:
a jra ir + a ir b jr
=0
b jr =
2
2
a jr + a ir
Ta xy dng hm givens() thc hin thut ton trn:
function [Q, R] = givens(A);
% Phan tich QR bang thuat toan quay Givens
n = size(A, 1);
Q = eye(n);
for j = 1:n-1
for i = n:-1:j+1
z = 1/sqrt(A(i-1, j)^2 + A(i, j)^2);
c = A(i-1, j)*z;
s = A(i, j)*z;
A(i-1:i,:) = [c s; -s c]*A(i-1:i,:);
Q(i-1:i,:) = [c s; -s c]*Q(i-1: i,:);
end
end
R = A;

73

Q = Q';
phn tch mt ma trn ta dng chng trnh ctgivens.m:
clear all, clc
A = [17 24 30 17; 8 13 20 7; 2 10 8 6; -23 -43 -54 -26];
[Q, R] = givens(A)
9. PHN TCH QR BNG THUT TON GRAM - SCHMIDT
Ta c th thc hin vic phn tch ma trn [A] thnh tch cc ma trn [Q] v [R]
bng cch trc giao ho cc ct ca ma trn [A]. Ta gi cc ct ca ma trn [A] l
a1,...,an. T cc vec t ny ta mun c n vec t trc giao v1,...,vn. Vec t trc giao u
tin c chn l:
v1 = a1
c vec t th hai, ta dng y2 nhng tr bt i phn y2 cng chiu vi v2. Nh vy
ta c:
v 2 = y1 ba1
vi b c chn sao cho v1 trc giao vi v2:
v1v 2 = v1 (a 2 bv1 ) = v1a 2 bv1v1 = 0
hay:
va
b= 1 2
v 1v 1
Tip tc qu trnh n bc th k ta c:
k 1
v ia k
vk = ak
vi
v
v
i i
i =1

Nh vy thut ton gm cc bc:


a
- r11 = a1 , q1 = 1
r11
- lp t k = 2 n n
k 1

q k = a k rik q i rkk
i =1

vi
rik = q iTa k
v rkk c chn sao cho q k = 1 , ngha l:
z = a k q k rik
rkk = z
Ta xy dng hm qrgramschmidt() thc hin thut ton trn:

76

function [Q, R] = qrgramschmidt(A);


% Phan tich mt bang thuat toan Gram - Schmidt
[m,n] = size(A);
R(1,1) = norm(A(:, 1));
Q(:,1) =A(:, 1)/R(1, 1);
for k = 2:n
R(1:k-1, k) = Q(1:m, 1:k-1)'*A(1:m, k);
z = A(1:m, k) - Q(1:m, 1:k-1)*R(1:k-1, k);
R(k,k) = norm(z);
Q(1:m,k) = z/R(k, k);
end
phn tch mt ma trn ta dng chng trnh chng trnh
ctqrgamschmidt.m:
clear all, clc
a = [ 1 2 3 4 5; 6 7 8 9 0; 3 4 5 6 7; 8 9 0 1 2; 2 4 6 8 1];
[q, r] = qrgramschmidt(a)
10. PHN TCH MA TRN THEO GI TR RING
Cho ma trn [A], ta c:
[A][X] = [X]
Nu ta t [U] l mt ma trn m cc ct ca n l cc vec t ring ca ma trn [A] v
ma trn [] l ma trn ng cho c cc phn t trn ng cho chnh l i th:
[A][U] = [][U]
hay:
[A] = [U][][U]-1
Dng ny ca ma trn c gi l dng phn tch theo gi tr ring v vec t ring. Ta
dng chng trnh cteigdecom.m phn tch ma trn:
clear all, clc
a = [ 1 3 5; 3 4 9; 5 9 6];
[L, U] = eigjacobi(a)
11. PHN TCH LQ
Cho ma trn [A] , ta c th phn tch QR ma trn ny thnh:
[A]T = [Q1][R1]
Do ([Q][R])T = [R1]T[Q1]T nn:
([A]T)T = [A] = [L][Q]
v ta nhn c phn tch LQ ca ma trn [A]. Ta xy dng hm lqdecom() thc
hin thut ton ny:
T

77

function [Q, L] = lqdecom(A)


A = A';
[Q, L] = qrdecom(A);
L = L';
Q = Q';
phn tch mt ma trn ta dng chng trnh ctlqdecom.m:
clear all, clc
a = [ 1 3 5; 2 4 6; 7 8 9];
[Q, L] = lqdecom(a)
12. PHN TCH JORDAN
1. Ma trn c th ng cho ho: Ma trn [A] gi l c th ng cho ho nu v
ch nu tn ti php bin i ng dng [V] sao cho [A] = [V][][V]-1 trong [] l
ma trn ng cho [] = diag(1, 2,..., n). iu kin cn [A] c th ng cho
ho l [A] c n vec t ring c lp tuyn tnh. iu kin [A] c th ng cho
ho l [A] c n gi tr ring phn bit v khi [A] c n gi tr ring phn bit th cc vec
t ring tng ng l c lp tuyn tnh. S ln lp li mi ca gi tr ring i gi l v
s i s (algebraic multiplicity) ca i, k hiu l AM(i ). S vec t ring c lp
tuyn tnh tng ng vi gi tr ring i gi l v s hnh hc (geometric multiplicity)
ca i, k hiu l GM(i ).
2. Dng Jordan: Khi khng th tm c n gi tr ring phn bit, ngha l ma trn
[A] khng c n vec t ring c lp tuyn tnh th ma trn [A] khng th ng cho
ho. Tuy nhin, nu c php bin i ng dng [M] bin i [A] thnh [J]:
[A] = [M][J][M]-1
Trong [J] l ma trn gn ng cho:
[J] = diag(J1,..., Jn)
0
i 1 0
0 1

[ Ji ] =

1
i

0 i
l khi Jordan v ma trn [J] c gi l dng Jordan kinh in ca ma trn [A]. S
khi Jordan bng s vec t ring c lp tuyn tnh ca ma trn [A], ngha l bng
GM(i). C th, mi vec t ring c lp tuyn tnh tng ng vi mi khi. Do vy
nu ma trn [A] c cc vec t ring c lp tuyn tnh th dng Jordan trng vi dng

78

ng cho ca ma trn [S]-1[A][S] = [] trong [] = diag(1,..., n) v [S] c cc


ct l cc vec t ring ca [A]
3. Xy dng dng Jordan ca ma trn [A]: Khi [A] khng c n vec t ring c lp
tuyn tnh to ra cc ct ca ma trn [M] th ta c th thm cc vec t c lp tuyn
tnh vo cc vec t ring to ra ma trn ny.
Trc ht ta kho st mt gi tr ring i c GM(i) < AM(i). Nu GM(i) = pi
, AM(i) = mi th ta cn tm mi - pi vec t c lp tuyn tnh kt hp vi gi tr
ring ny. Cc vec t ny c to t cc vec t ring v c gi l vec t ring tng
qut ho ca [A]. Gi l gi tr ring v [x] l vec t ring tng ng. k - 1 vec t
ring tng qut ho {[x1],..., [xk]} c to ra nh sau:
[ A ][ x 1 ] = [ x 1 ]

[ A ][ x 2 ] = [ x 2 ] + [ x 1 ]

[ A ][ x k ] = [ x k ] + [ x k1 ]
{[x1],..., [xk]} to thnh chui cc vec t c vec t
ng vi khi Jordan n.
1 0
0 1 0

[ A ][ x1 , ,x n ] = [ x1 , ,x n ]

0
0
0

[x1] ng u. Chui ny tng

Xut pht t vec t tng qut ho bc k ca [A] ng vi , k hiu l [xk] ta c:


[xk]
[xk-1] = ([A] - [E])[xk]
[xi] = ([A] - [E])k-i[xk]
[x1] = ([A] - [E])k-1[xk]

Ch l [x1] l mt vec t ring ca [A] v:


([A] - [x1]) = ([A] - [E])([A] - [E])k-1[xk]

phn tch ma trn [A] ta dng thut ton Filipov gm cc bc sau:


- Gi s rng kch thc khng gian ct ca ma trn [A] l r < n. Phi c r vec
t c lp tuyn tnh [xi] trong khng gian ct m n l cc vec t ring hay vec t
ring tng qut ho, ngha l [A][xi] = [xi] hay [A][xi] = [xi] + [xi-1]
- Gi s rng khng gian khng v khng gian ct ca ma trn [A] c phn
chung vi kch thc p. Mi vec t [xi] trong jg guan khng ca [A] l mt vec t

79

ring tng ng vi = 0, nhvy [A][xi] = 0. By gi nu [xi] cng l khng gian


ct ca [A] th [xi] = [A][yi] vi mi [yi]
- Cui cng do kch thc ca khng gian khng ca [A] l n - r v p ca cc
vec t l trong c khng gian khng ln khng gian ct nn c n - r - p vec t [zi]
trong khng gian khng m khng trong khng gian ct.
Cc vec t [xi], [yi] v [zi] tm c l c lp tuyn tnh. Chng to nn cc
ct ca [M] v [J] = [M][A][M]-1 l dng Jordan.
Ta xy dng hm jordandecom() thc hin thut ton trn:
function [M, J] = jordandecom(a)
%Tinh phan tich Jordan cua ma tran A
% sao cho A*M = M*J
small = 2*sqrt(eps);
[r, c] = size(a);
if r ~= c
error('Ma tran A phai la ma tran vuong!')
end
n = r;
if n == 1
J = a;
M = 1;
return
end
if n<1
J = [];
M = [];
return
end
[m, d] = eig(hess(a));
d = sort(diag(d));
tiny = norm(a)*eps;
%lam cac gia tri bang zero
p = find(abs(d)<=tiny);
if ~isempty(p)
d(p) = 0;
end
%A*M=M*J
[M, J] = jord(a, d, small);
function [M, D] = jord(a, d, small)
%Tinh phan tich Jordan cua ma tran A
80

norma = sqrt(mean(mean(abs(a))));
tiny = norma*eps;
if nargin<3
small = (1 + norma)*sqrt(eps);
end
[r, c] = size(a);
if r~=c
error('A phai la ma tran vuong!')
end
n = r;
I = eye(n);
if r == 1
D = a;
M = 1;
return
end
if r<1
D = [];
M = [];
return
end
condofa = cond(a);
if condofa>1e6
Condition_number_of_A = condofa
warning('So dieu kien cua A qua lon!');
end
d = d(:);
if size(d,1) ~= n
d=d
error('Gia tri rieng khong dung!')
end
da = det(a);
dp = prod(d);
e = abs(abs(da) - abs(dp));
if e>sqrt(eps)
disp(' ')
warning('Cac gia tri rieng co the khong chinh xac!')
end
ds = flipud(sort(d));
sds = size(ds,1);
du = flipud(unique(ds));
81

sdu = size(du, 1);


if sdu == sds
[M, D] = eig(a);
return
end
M = [];
for kk = 1:sdu
e = du(kk);
ameig = sum(ismember(ds, e));
a1 = a - e*I;
if ameig == 1
[u, s, v] = svd(a1);
M =[M v(:, end)];
else
pp = 0;
ns = [];
pp = pp + 1;
aa = I;
for k = 1:ameig
aa = a1*aa;
nn = size(nulld(aa, small), 2);
ns(k) = nn;
end
nsaa = [0; ns(:)]';
dns = diff(nsaa);
if max(dns) ~= dns(1)
Cond_of_A = cond(a)
save jord
M = I;
D = I;
error('Kich thuoc khong gian khong sai')
end
clear ec;
ec(1:dns(1)) = 1;
for k = 2:length(dns)
ec(1: dns(k)) = ec(1:dns(k)) + 1;
end
if sum(ec) ~=a meig
Cond_of_A = cond(a)
save jord
M = I;
82

D = I;
error('Kich thuoc khong gian khong sai')
end
k = 1;
clear jv;
while k<= dns(1)
p = find(ec == ec(k));
if isempty(p)
Cond_of_A = cond(a);
save jord
M = I;
D = I;
error('Kich thuoc khong gian khong sai');
end
aa = I;
for m = 1:ec(k)
aa = aa*a1;
end
pp = max(size(p));
v = nulld(aa, small);
jv(:,p) = v*(rand(size(v, 2), pp) - 0.5)*16;
k = k + pp;
end
clear v;
for k = 1:dns(1)
v(:,1) = jv(:, k);
for p = 2:ec(k)
v(:, p) = a1*v(:, p-1);
end
vv = fliplr(v(:, 1:ec(k)));
M = [M vv];
end
end
end
k = abs(det(M))^(-1/n);
M = k*M;
Mi = inv(M);
D = Mi*a*M;
d0 = diag(D);
d1 = diag(D, 1);
D = diag(d0) + diag(d1, 1);
83

function Z = nulld(A, small)


norma = sqrt(mean(mean(abs(A))));
tiny = norma*eps;
if nargin<2
small = (1 + norma)*sqrt(eps);
end
[m, n] = size(A);
if m~= n
error('Ma tran phai vuong!')
end
p = find(abs(A)<tiny);
if ~isempty(p)
A(p) = 0;
end
[U,S,V] = svd(A, 0);
S = diag(S);
s = S;
norma = max(s);
smax = max(s);
if smax == 0;
smax = 1;
end
s = s/smax;
snorm = s;
t = find(s>0);
if isempty(t);
Z = V;
return;
end
p = find(s<tiny);
if ~isempty(p)
s(p) = tiny;
end
p = find(s == 0);
if ~isempty(p)
s(p) = small*min(s(t));
end
logs = log10(s);
sdifflog = -diff(logs);
smax = max(sdifflog);
84

r = find(sdifflog == smax);
if min(size(r))>0
r = r(end);
else
r = 0;
end
Z = V(:,r+1:n);
if snorm == ones(n, 1);
Z = zeros(n, 0);
end
if max(S) <= small;
Z = V;
end
13. PHN TCH MA TRN THEO CC GI TR K D
Phn tch ma trn theo cc gi tr k d (k d value) c thc hin trn cc ma
trn vung hay ch nht. Ta c:
[Anp] = [Unn][Snp][Vpp]
Trong :
[U]T[U] = [Enn]
[V]T[V] = [Epp]
ngha l cc ma trn [U] v [V] l trc giao.
Cc ct ca [U] l cc vec t k d tri, [S] c cc gi tr k d v l ma trn ng
cho v [V]T c cc hng l cc vec t k d phi. tnh cc ma trn [U], [S] v [V]
ta tm cc gi tr ring ca [A][A]T v [A]T[A]. Cc vec t ring ca [A]T[A] to nn
cc ct ca [V]. Cc vec t ring ca [A][A]T to nn cc ct ca [U]. Cc gi tr k d
ca [S] l cn bc hai ca cc gi tr ring ca [A][A]T hay [A]T[A]. Cc gi tr ring
trn ng cho ca [S] c sp xp theo th t gim dn. hiu c thut ton
ny ta xt v d sau:
Ta xy dng hm svddecomp() thc hin thut ton ny:
function [U, S , V] = svddecomp(A)
[m, n] = size(A);
if (m > n)
% ta can timcac vec to k d phai truoc
%[V D] = eigs(A'*A)
[V, D] = eigs(A'*A);
[dummy, perm] = sort(-diag(D));
S = diag(sqrt(diag(D(perm, perm))));
V = V(:, perm);
sinv = diag(1./sqrt(diag(D)));
85

U = (A*V)*sinv;
else
% ta can tim cac vec to k d trai truoc
% [U D] = eigs(A*A')
[U, D] = eigs(A*A');
[dummy, perm] = sort(-diag(D));
S = diag(sqrt(diag(D(perm, perm))));
U = U(:, perm);
sinv = diag(1./sqrt(diag(D)));
V = sinv*(U'*A);
V = V';
end
phn tch mt ma trn ta dng chng trnh ctsvddecomp.m:
clear all, clc
%a = [ 1 2 3 4 5; 6 7 8 9 0; 3 4 5 6 7; 8 9 0 1 2; 2 4 6 8 1];
a = [ 1 1; 0 1; 1 0];
[u, s, v] = svddecomp(a)
14. PHN TCH SCHUR
Cho ma trn vung [A], cp n ta phn tch n thnh:
[A] = [T][U][T]*
Trong :
[T] - ma trn unita v [T]* l ma trn chuyn v lin hp ca [T](l chuyn v
ca [T] ri ly lin hp ca cc phn t).
[U] = [] + [N]
[] - l ma trn ng cho c cc phn t l cc gi tr ring ca [A]
[N] - ma trn tam gic phi, c cc phn t thuc ng cho chnh bng zero.
Mi ma trn vung u c th phn tch Schur. Tuy nhin phn tch ny khng
duy nht. Nu [A] l ma trn trc giao th [U] l ma trn ng cho v cc ct ca
[T] l cc vec t ring ca [A]. Phn tch Schur khi ny c gi l phn tch ph.
Nu [A] xc nh dng, phn tch Schur chnh l phn tch SVD.
phn tch ma trn theo thut ton Schur ta thc hin cc bc sau:
- Tm gi tr ring 1 ca [A] v vec t ring tng ng [v1]
- Chn n- 1 vec t [w1],...,[wn-1] c lp tuyn tnh v trc giao vi [v1]
- To [V1] l ma trn c cc ct l [v1], [w1],...,[wn-1] v tnh:

[ V1 ] [ A ][ V1 ] = 01 A
[ 1 ]

Trong [A1] l ma trn (n-1)(n-1)


86

- Lp li qu trnh vi ma trn [A1] ta c:


[ V2 ] [ A1 ][ V2 ] = 02 A
[ 2 ]

Trong [A2] l ma trn (n-2)(n-2)


- Do [ T2 ]

1
[ A ] [ T2 ] = 0 1
0 0


[ A 2 ]

1
vi V
=
Trong [ T2 ] = V1 V
2
2 0

0
[ V2 ]

- Tip tc qu trnh ta tm c [V1],...,[Vn]. Cui cng [U] = [T]*[A][T]



T2 = V1 V
2 Vn
Ta xy dng hm schurdecom() thc hin thut ton trn:
function [T, U] = schurdecom(a)
% Phan tich Schur ma tran A
n = size(a, 1);
v = zeros(n, 1);
v(1) = 1;
b = zeros(n, n);
b(:, n) = v;
for k = 2:n
v = a*v;
b(:, n-k+1) = v;
end
c = a*v;
rho = -b\c;
rho = [1 rho'];
lambda = roots(rho);
n = size(lambda, 1);
evec = zeros(n);
c = evec;
e = eye(n);
for i = 1:n
b = a - lambda(i)*e;
c = nulld(b);
evec(:, i) = c(:,1);
87

end
p = grams(evec);
T = conj(transpose(p))*a*p;
U = p;
phn tch ma trn ta dng chng trnh ctschur.m:
clear all, clc
a = [ 1 2 3 5; 4 5 6 2; 4 6 8 9; 9 3 6 7];
[t, u] = schurdecom(a)
15. NH THC CA MA TRN
Cho mt ma trn vung cp n. Ta cn tm nh thc ca n. Trc ht chng ta
nhc li mt s tnh cht quan trng ca nh thc:
- nu nhn tt c cc phn t ca mt hng (hay ct) vi k th nh thc c
nhn vi k
- nh thc khng i nu ta cng thm vo mt hng t hp tuyn tnh ca
cc hng cn li.
- nu i ch hai hng cho nhau th nh thc i du
Trc khi i n nh ngha v nh thc ta tm hiu khi nim v hon v v
php th.
Cho mt dy s, nu ta i ch cc s trong dy cho nhau th ta thc hin
mt php hon v. V d 123, 132,.. l cc hon v ca dy s {1, 2, 3}. Trong hon v
12ijn ta ni i lm mt nghch th vi j nu i < j m i > j. V d
trong hon v 1432 s 4 lm vi s 3 mt nghch th , s 4 lm vi s 2 mt nghch
th, s 3 lm vi s 2 mt nghch th. Mt hon v gi l chn nu tng s nghch th
trong hon v l mt s chn; mt hon v gi l l trong trng hp ngc li.
Nh vy 1432 l mt hon v l.
Cho mt dy s, nu ta to ra mt dy s mi bng cch i ch cc phn t
cho nhau th ta thc hin mt php th.
2 1 4 3
V d p =
l php th bin 2 thnh 1, 1 thnh 4, 4 thnh 2 v 3 thnh
1
4
2
3

3.
Mt php th gi l chn nu tnh chn l ca dng trn v dng di nh nhau
v l trong trng hp ngc li. Php th trn l php th l.
Cho ma trn vung [A] cp n. Cc phn t ca hng th i l ai,1, ai,2,,ai,n. Cc
phn t ca ct th j l a1,j, a2,j ,, an,j. Ta xem hng th i l mt vec t, k hiu l Ai*
v ct th j cng l mt vec t, k hiu l A*j. Vi mi php th:
in
i1 i 2
p=
(1)

j
j
j
n
1 1
88

ta lp tch:
a i1 j1 a i2 j2 a in jn
(2)
Trc mi tch (2) ta t du + nu v du - nu php th (1) l. Sau ta lp tng
ca n! tch c du nh vy, ngha l tng:
(3)
(1)t(p) ai1j1 ai2 j2 ain jn
p

trong :
t(p) = 1 nu php th p l
t(p) = 0 nu php th p chn
Tng (4) c gi l nh thc ca ma trn vung [A], cp n.
Ta xy dng hm determinant() tnh nh thc ca ma trn theo nh ngha:
function d = determinant(A)
% DETERMINANT tinh dinh thuc theo dinh nghia.
[m, n] = size(A);
if ( m ~= n )
fprintf ( '\n' );
fprintf ( ' Chi ma tran vuong moi co dinh thuc!\n' );
return
end
p = zeros(1, n);
nf = prod([1:n]);
d = 0.0;
for i = 1:nf
p = nextperm(p);
s = permsign(p);
x = diag(A([1:n],p));
d = d + s*prod(x);
end
function psign = permsign(p)
% PERMSIGN tra ve dau phep the .
% +1, neu phep the chan,
% -1, neu phep the le.
n = length ( p );
psign = 1;
for i = 1:n-1
j = i;
while (p(j) ~= i)
j = j + 1;

89

end
if ( j ~= i )
temp = p(i);
p(i) = p(j);
p(j) = temp;
psign = - psign;
end
end
function q = nextperm(p)
n = length(p);
q = p;
if(n == 1)
q = 1;
elseif (q == 0)
q = [1:n];
else
i = n - 1;
while (q(i) > q(i+1))
i = i - 1;
if (i == 0)
break;
end
end
if (i == 0)
q = [1:n];
else
j = n;
while (q(j) < q(i))
j = j - 1;
end
t = q(j);
q(j) = q(i);
q(i) = t;
q(i+1:n) = q(n:-1:i+1);
end
end
tnh nh thc ta dng chng trnh ctdeterminant.m:
clear all, clc
90

%a = [1 2; 3 5];
a = [1 3 5; 3 4 6; 4 6 3];
d = determinant(a)
16. TNH NH THC BNG CCH PHN TCH MA TRN
Cho ma trn [A]. Nu
[A] = [B][C]
th
det[A] = det[B]det[C]
Mt khc vi mt ma trn tam gic, v d:
b11 b12 b13 b14
0 b
b23 b 24
22

[ B] =
0
0
b
b

33
34

0
0 b 44
0
th
det [ B] = b11b 22 b 33 b 44
ngha l i vi ma trn tam gic, nh thc bng tch cc phn t trn ng cho
chnh.
Khi phn tch ma trn [A] theo thut ton Doolitte, ta dng chng trnh
ctdoodecmp.m tnh nh thc ca n:
clear all, clc
a = [1 2 3 4; 3 4 5 7; 2 3 8 5; 4 9 1 4];
[l, r] = doolittle(a);
d = prod(diag(l))*prod(diag(r))
Khi phn tch ma trn [A] theo thut ton Crout, ta dng chng trnh
ctcrotdecmp.m tnh nh thc ca n:
clear all, clc
a = [1 2 3 4; 3 4 5 7; 2 3 8 5; 4 9 1 4];
[l, r] = crout(a);
d = prod(diag(l))*prod(diag(r))
Khi phn tch ma trn [A] theo thut ton Choleski, ta dng chng trnh
ctcholdecmp.m tnh nh thc ca n:
clear all, clc
a = [4 -2 2;-2 2 -4;2 -4 11];

91

a = pascal(5);
l = choleski(a);
d = prod(diag(l))*prod(diag(l'))
17. THUT TON TR CHI
Cho ma trn [A] c a1,1 0 . Ta xy dng ma trn [B] c cc phn t
bi ,j = a1,1a i ,j a i ,na n ,j
th:
2n
[ A ] = a1,1
[ B]
ngha l:

92


a11 a12
a11 a13
det
det

21 a 22
21 a 23

a11 a12
a11 a13

det
det
n 2
a

det [ A ] = a11
det
31 a 32
31 a 33

#
#

a11 a12
a11 a13
det
det

a n1 a n2
a n1 a n3

Ta xy dng hm chiopivot() thc hin thut ton trn:

a11 a1n
" det

a 21 a 2n
a11 a1n
" det

a
a
31
3n

"
#

a11 a1n
" det

a n1 a nn

function d = chiopivot(a)
%tinh dinh thuc bang thuat toan Chio pivotal condensation
if a(1, 1) == 0
error('Khong dung phuong phap nay de tinh dinh thuc duoc !');
return;
end
c = a(1, 1);
n = size(a, 1);
if (n <= 2)
d = a(1, 1)*a(2, 2) - a(2, 1)*a(1, 2);
return
end
m = n - 1;
while (m >= 1)
for i = 1:m%hang
b(i, 1:m) = a(1, 1)*a(i+1, 2:m+1) - a(i+1, 1)*a(1, 2:m+1);
end
if (m > 2)
a = b;
c = c*a(1,1);
clear b;
end
m = m - 1;
end
d = b(1, 1)*b(2, 2) - b(2, 1)*b(1, 2);
d = d/c;
tnh nh thc ta dng chng trnh ctchiopivot.m:

95

clear all, clc


a = [1 2 3 4; 3 4 5 7; 2 3 8 5; 4 9 1 4];
d = chiopivot(a)
18. THUT TON LAPLACE
tnh nh thc theo thut ton Laplace, ta khai trin nh thc theo hng hay
ct. Cho ma trn vung [A] cp n. Nu b i hng i v ct j (tc xo hng v ct cha
phn t aij) th ta c mt ma trn cp (n - 1), nh thc ca n gi l nh thc con cp
(n - 1) ng vi phn t aij (minor) , k hiu l Mij. Ta ch n hng th i v aij l
mt phn t ca hng . Trong det[A] ta gp nhng s hng cha aij li v t aij lm
tha s chung, h s ca n k hiu l Aij v gi l phn b i s (cofactor) ca phn
t aij. Cofactor Aij ca ma trn [A] l:
A ij = ( 1)i+ j M ij
nh thc ca [A] khi khai trin theo hng l:
n

det [ A ] = a ijA ij
i =1

Ta xy dng hm cofactor() tnh cc phn b i s:


function c = cofactor(A, i, j)
% cac phan bu dai so cua ma tran
% dung de nghich dao mt
% C = cofactor(A, i, j) tra ve phan bu dai so cua
%ng i, cot j cua A.
if nargin == 3
M = A;
M(i,:) = [];
M(:,j) = [];
c = (-1)^(i+j) * det(M);
else
[n, n] = size(A);
for i = 1:n
for j = 1:n
c(i,j) = cofactor(A, i, j);
end
end
end
Sau khi phn b i s, ta xy dng hm cofactordet() tnh nh thc ca [A]
function d = cofactordet(A)
96

d = 0;
for i = 1:size(A, 1)
c = cofactor(A, i, 1);
d = d + A(i, 1)*c;
end
tnh nh thc ta dng chng trnh ctcofactordet.m:
clear all, clc
a = [1 2 3 4; 3 4 5 7; 2 3 8 5; 4 9 1 4];
det = cofactordet(a)
19. THUT TON DODGSON
Thut ton c c Dodgson ( Dodgson condensation) dng tnh nh thc
ca ma trn vung. N c Charles Ludwidge Dodgson a ra. tnh nh thc
ca ma trn cp n n, ta xy dng cc ma trn cp (n - 1) (n - 1) cho n ma trn
cp 1 1 l nh thc ca ma trn cn tm.
Bc u tin ta xy dng ma trn cp (n - 1)(n - 1) t cc nh thc ca cc
ma trn con 22. V d vi ma trn
5 1 0
2 8 5

0 6 7
ta c cc ma trn con l:
5 1
1 0
2 8
8 5

2 8
8 5
0 6
6 7

Cc ma trn ny s to ra cc phn t ca ma trn 22. Phn t hng r, ct c l nh


thc ca ma trn con 22 ca ma trn ban u vi hng r v ct c gc trn tri. Nh
vy ma trn mi l:
38 5
12 26

Ma trn kk c to ra bng cch ly nh thc ca ma trn con 22 ca ma trn


(k+1)(k+1) nh trn v chia n cho phn t tng ng ca ma trn trung tm,
ngha l ma trn b i hng trn cng, hng di cng, ct bn phi v ct bn tri
ca ma trn (k+2)(k+2)
Ta xy dng hm dodgson() thc hin thut ton trn:
function dt = dodgson(a)
if size(a, 1) ~= size(a, 2)
97

error('Ma tran A phai la mt tran vuong');


end;
n = size(a, 1);
if n == 2
dt = a(1, 1)*a(2, 2) - a(2, 1)*a(1, 2);
return
end;
if n == 3;
for i = 1:n-1
b(i, 1:n-1) = a(i, 1:n-1).*a(i+1, 2:n) - a(i+1, 1:n-1).*a(i, 2:n);
end
dt = (b(1, 1)*b(2, 2) - b(2, 1)*b(1, 2))/a(2,2);
return
end
c = a;
c(:, 1) = [];
c(:, n-1) = [];
c(1, :) = [];
c(n - 1, :) = [];
for i = 1:n-1
b(i, 1:n-1) = a(i, 1:n-1).*a(i+1, 2:n) - a(i+1, 1:n-1).*a(i, 2:n);
end
m = size(b, 1);
while m >= 2
for i = 1:m-1
for j = 1:m-1
d(i, j) = (b(i, j)*b(i+1, j+1) - b(i+1, j)*b(i, j+1))/c(i, j);
end
end
if m > 3
c = b;
c(:, 1) = [];
c(:, m-1) = [];
c(1, :) = [];
c(m - 1, :) = [];
b = d;
end
m = m - 1;
end
dt = (d(1, 1)*d(2, 2) - d(2, 1)*d(1, 2))/b(2,2);

98

tnh nh thc ta dng chng trnh ctdodgson.m:


clear all, clc;
a = [1 2 3 4; 5 1 3 2; 4 9 2 2; 6 3 4 1];
dt = dodgson(a)
20. NGHCH O MA TRN BNG CCH DNG MINOR
Cho ma trn [A], ta c:
A
( a 1 )i ,j = det [j,iA]
Trong :
( a 1 )i ,j l phn t hng i, ct j ca ma trn [A]-1
Ai,j l phn b i s ca phn t ai,j ca ma trn [A]
Ta xy dng hm minorinv() thc hin thut ton trn:
function c = minorinv(a)
% Tim ma tran nghich dao bang thuat toan minor
n = size(a, 1);
ms = det(a);
for i = 1:n
for k = 1:n
b = cofactor(a, i, k);
c(i, k) = b/ms;
end
end
c = transpose(c);
tm ma trn nghch o ta dng chng trnh ctminorinv.m:
clear all, clc;
a = [1 3 5; 3 4 9; 5 9 6];
b = minorinv(a)
21. NGHCH O BNG CCH PHN TCH MA TRN
Cho ma trn [A[, ta c th phn tch n thnh ma trn tam gic phi [R] v tam
gic tri [L]:
[A] = [L][R]
Do nh ngha ma trn nghch o:
[L]-1[L] = [L][L]-1 = [E]
nn:
99

[R] = [L]-1[L][R] = [L]-1[A]


v:

[L] = [L][R][R]-1 = [A][R]-1


Do vy:
[A] = [L][R] = ([A][R]-1)([L]-1[A]) = [A][R]-1[L]-1[A]
[A][R]-1[L]-1 = [E]
Kt qu l:
[R]-1[L]-1 = [R]-1
Vi ma trn tam gic phi [R], cc hng khi nghch o l l1,..,ln c tnh theo cch
sau:
- Cho [e1],.., [ei],..,[en] l cc ct ca ma trn n v [E] cp n
[e ]
- ln = n
a n ,n
1
- l i = ([ e i ] a i ,i+1 l i+1 "a i ,n l n )
a n ,n
Ta xy dng hm luinverse() thc hin thut ton tnh nh thc ca ma trn [R]:

function r = luinverse(a)
% Nghich dao ma tran tam giac phai
n = size(a, 1);
e = zeros(n, n);
c = zeros(n, 1);
l = e;
b = e;
for i = 1:n
c(i) = 1;
e(:, i) = c;
c(i) = 0;
end
l(:, n) = e(:, n)/a(n, n);
for i = n-1:-1:1
c = zeros(n, 1);
for k = i+1:n
c = c + a(i, k)*l(:, k);
end
l(:, i) = (e(:, i) - c)/a(i, i);
end
r = l';
nghich o ma trn tam gic ta dng chng trnh ctluinv.m:

100

clear all, clc


a = [1 2 3; 0 4 5; 0 0 2];
r = luinverse(a)
nghch o ma trn tam gic tri ta dng cc quan h:
[L]-1 = ([LT]-1)T
v [L]T s l mt ma trn tam gic phi. Ta dng chng trnh ctluinverse.m
nghch o ma trn thng thng:
clear all, clc
a = [ 1 3 5; 3 4 9; 5 9 6];
[l, r] = doolittle(a);
b = luinverse(r)*(luinverse(l'))'
22. NGHCH O MA TRN BNG THUT TON GAUSS - JORDAN
Cho ma trn [A] v ma trn n v [E] tng ng. Dng ca ma trn [E] cp 4,
l:

1 0 0 0

0 1 0 0
E=
0 0 1 0

0
0
0
1

Nh vy, vn l ta cn tm ma trn [A]-1. Phng php loi tr nhn c ma


trn nghch o [A]-1 c thc hin qua n giai on, mi mt giai on gm hai
bc. i vi giai on th k:
- chun ho phn t akk bng cch nhn hng vi nghch o ca n
- lm cho bng khng cc phn t pha trn v pha di ng cho cho n
ct th k. Khi k = n th [A](k) s tr thnh ma trn n v v [E] tr thnh [A]-1
Ta xy dng mt hm nghch o invmat():
function x = invmat(a)
% Nghich dao ma tran a
%Cu phap: x = invmat(a)
k = size(a, 1);
n = k;
b = eye(n);
a = [a, b];
i = 1;
while i<=n
if a(i, i) ~= 0
c = a(i, i);
101

a(i, i:2*n) = a(i, i:2*n)/c;


end
for k = 1:n
if k~=i
c = a(k, i);
a(k, i:2*n) = a(k, i:2*n)- a(i, i:2*n)*c;
end
end
i = i+1;
end
x(:, 1:k) = a(:, (1+k):(2*k));
nghch o ma trn
2 1 1
[ A ] = 1 2 1
1 1 2

ta dng chng trnh ctinvmat.m


clear all, clc
a = [ 2 1 1; 1 2 1; 1 1 2];
b = invmat(a)
23. NGHCH O BNG THUT TON MOORE - PENROSE
Cho ma trn [A] cp mn. Ma trn nghch o tng qut ho Moore Pensore
l ma trn nm c Moore a ra nm 1920 v sau Pensore a ra nm 1955. Ma
trn Moore Pensore [B] tho mn cc iu kin:
[A][B][A] = [A]
[B][A][B] = [B]
T cc iu kin ny ta c:
[B] = [A]T([M][M])-1
tnh ma trn [B] ta dng chng trnh ctpseudoinv.m:
clear all, clc
a = [ 3 4 5 6 7; 3 6 7 8 9; 2 3 4 5 4];
b = a'*invmat(a*a')
24. GI TR RING V VEC T RING CA MA TRN
Cho ma trn [A] vung, cp n. Ta gi s v hng l gi tr ring ca ma trn
[A] v [V] l vec t ring phi ca [A] tng ng vi nu:
(1)
[A][V] = [V]

102

[V] gi l vec t ring tri ca [A] tng ng vi nu:


[V]T[A] = [V]T
Ta c th vit li (1) di dng:
([ A ] [ E ]) [ V ] = 0
T ta c h n phng trnh thun nht. Nghim tm thng ca h chnh l [X] =
0. H s c nghim khng tm thng nu:
det ([ A ] [ E ]) = 0
(2)
Khai trin (2) ta nhn c phng trnh c tnh:
a1 n + a 2 n 1 + " + a n + a n +1 = 0
Cc nghim i ca phng trnh c tnh l cc gi tr ring ca [A]. Nghim [Vi] ca:
([ A ] i [ E ]) [ V ] = 0
l cc vec t ring ca [A]. Ta xy dng hm nulld() gii h phng trnh tuyn
tnh thun nht ny:
function Z = nulld(A, small)
norma = sqrt(mean(mean(abs(A))));
tiny = norma*eps;
if nargin<2
small = (1 + norma)*sqrt(eps);
end
[m, n] = size(A);
if m~= n
error('Ma tran phai vuong!')
end
p = find(abs(A)<tiny);
if ~isempty(p)
A(p) = 0;
end
[U,S,V] = svd(A,0);
S = diag(S);
s = S;
norma = max(s);
smax = max(s);
if smax == 0;
smax = 1;
end
s = s/smax;
snorm = s;
t = find(s>0);

103

if isempty(t);
Z = V;
return;
end
p = find(s<tiny);
if ~isempty(p)
s(p) = tiny;
end
p = find(s == 0);
if ~isempty(p)
s(p) = small*min(s(t));
end
logs = log10(s);
sdifflog = -diff(logs);
smax = max(sdifflog);
r = find(sdifflog == smax);
if min(size(r))>0
r = r(end);
else
r = 0;
end
Z = V(:,r+1:n);
if snorm == ones(n,1);
Z = zeros(n,0);
end
if max(S) <= small;
Z = V;
end
25. BIN I NG DNG
Ta kho st bi ton v gi tr ring ca ma trn:
[A][X] = [X]
vi [A] l ma trn i xng. By gi ta p dng php bin i:
[X] = [P][X]*
vi [P] l ma trn khng suy bin.
Thay (2) vo (1) v nhn hai v vi [P]-1 ta c:
[ P ]1 [ A ][ P ][ X ] = [ P ]1 [P ][ X ]
hay: [ A ] [ X ] = [ X ]
Trong
[ A ] [ P ][ X ] = [ P ]1 [ A ][ P ]

(1)
(2)

(3)

104

Do khng i khi thc hin php bin i nn gi tr ring ca ma trn [A] cng
chnh l gi tr ring ca ma trn [A]*. Cc ma trn c cng gi tr ring c gi l
ma trn ng dng v php bin i gia chng gi l php bin i ng dng.
Php bin i ng dng thng dng a bi ton tm gi tr ring v dng
d gii hn. Gi s ta c cch no tm ma trn [P] m n ng cho ho ma
trn [A], lc (3) c dng:
A11
"
0
0 x1 0

"
0
A
0
22

x1 =
#
#
"
0 # #


" Ann x1 0
0
0
Nghim ca phng trnh trn l:
1 = A11 2 = A22 " n = Ann
(4)
1
0
0
0
1
0

[ X1 ] = # [ X 2 ] = # " [ X n ] = #



0
0
1


hay: [ X ] = X 1 X 2 " X n = [ E ]
Theo (2), vec t ring ca [A] l:
(5)
[X] = [P][X]* = [P][E] = [P]
Nh vy ma trn bin i [P] l ma trn cc vec t ring ca [A] v cc gi tr
ring ca [A] l cc s hng trn ng cho ca [A]*.

26. TM GI TR RING BNG CC PHNG PHP LU THA


1. Phng php lu tha v hng: Gi s ma trn vung [A] cp n c n gi tr
ring phn bit:
1 > 2 3 " n
(1)
v cc vec t ring tng ng [V1], [V2],...,[Vn]
Ta chn mt vec t [X] bt k c cc thnh phn khc zero. Khi [X] s c biu
din bng:
(2)
[ X ] = 1 [ V1 ] + 2 [ V2 ] + " + n [ Vn ]
Do [ A ][ Vn ] = n [ Vn ] nn:

105

[ A ][ X ] = [ A ] 1 [ V1 ] + [ A ] 2 [ V2 ] + " + [ A ] n [ Vn ]
= 1 [ A ][ V1 ] + 2 [ A ][ V2 ] + " + n [ A ][ Vn ]
= 11 [ V1 ] + 2 2 [ V2 ] + " + n n [ Vn ]

= 1 1 [ V1 ] + 2 2 [ V2 ] + " + n n [ V2 ]
1
1

Lp li ln th k ta c:
k
k

2
n
k
k
=
=

+
"
+

X
A
X
V
V
V
[ k ] [ ] [ 0 ] 1 1[ 1] 2 [ 2 ]
n
[ 2 ] (3)

1
1

Khi k , do (1) nn (3) hi t v [V1] khi 1 0. Vy l gi tr ring 1, c tr tuyt


i ln nht, v vec t ring tng ng [V1], c th tnh bng cch cho trc mt vec
t [X0] c cc thnh phn khc zero theo hng [V1] v lp theo th tc sau:
[X ]
(4)
[ X k+1 ] = [ A] k 1 [ V1 ]
[Xk ]
Trong :
[X]

= max { [ X n ] }

Tc hi t ph thuc vo ln ca 2 1 .
Thut ton tm li gm cc bc:
- cho vec t ban u [X0]
- tnh [X1] = [A][X0]
- tnh [ X ]
- cho [X] = [ X ] = [ X ] [ X ] v lp li cc bc 2 - 4 cho n khi hi t
Ta xy dng hm eigpower() thc hin thut ton trn:
function [lambda, x, iter] = eigpower(A, tol, maxiter, x0)
% Tim gia tri rieng lon nhat
% bang thuat loan lap luy thua
[n,m] = size(A);
if n ~= m
error('Chi dung cho cac ma tran vuong');
end
if nargin == 1
tol = 1e-8;
x0 = ones(n,1);
nmax = 200;
end
x0 = x0/norm(x0);
106

pro = A*x0;
lambda = x0'*pro;
err = tol + 1;
iter = 0;
while err > tol*abs(lambda) & abs(lambda) ~= 0 & iter <= nmax
x = pro;
x = x/norm(x);
pro = A*x;
lambdanew = x'*pro;
err = abs(lambdanew - lambda);
lambda = lambdanew;
iter = iter + 1;
end
tnh gi tr ring v vec t ring ta dng chng trnh cteigpower.m:
clear all, clc
A = [ 1 2 3 4 5; 6 7 8 9 0; 3 4 5 6 7; 8 9 0 1 2; 2 4 6 8 1];
[lambdamax, v, iter] = eigpower(A)
2. Phng php lu tha nghch o: Phng php ny dng tm gi tr ring c
tr tuyt i b nht v vec t ring tng ng bng cch p dng thut ton trong
mc 1 cho ma trn [A]-1. tng ca phng php phn ny da trn phng trnh:
(5)
[ A ][ V ] = [ V ] [ A ]1 [ V ] = 1 [ V ]
Ta xy dng hm inveigpower() thc hin phng trnh ny:
function [lambda, v] = inveigpower(A, tol, maxiter)
B = A^-1;
[lambda, v] = eigpower(B, tol, maxiter);
lambda = 1/lambda;
tnh gi tr ring c tr tuyt i b nht ta dng chng trnh ctinveigpower.m:
clear all, clc
A = [2 0 1; 0 -2 0; 1 0 2];
tol = 1e-8;
maxiter = 100;
[lambdamin, v] = inveigpower(A , tol, maxiter)

107

3. Phng php dch chuyn: Cho ma trn [A] i xng. Gi s cn tm gi tr ring


gn vi mt s s cho trc. Do:
[A][X] = [X]
nn tr hai v cho c[E][X] ta c:
([A] - s[E])[X] = ( - s)[X]
hay: [A*][X*] = *[X]
1
1

X
X
A
=
(6)

1
Dng phng php lp lu tha cho (6) ta nhn c hay

min =
- s = =
= s + = s +
Ta xy dng hm shiftpower() thc hin thut ton trn:
function [lambda, v] = shiftpower(A, s)
A = (A - s*eye(size(A)))^-1;
maxiter = 150;
tol = 1e-8;
[lambda, v] = eigpower(A, tol, maxiter);
lambda = 1/lambda + s;

tnh gi tr ring ca ma trn gn vi s ta dng chng trnh ctshiftpower.m:


clear all, clc
A = [2 0 1; 0 -2 0; 1 0 2];
tol = 1e-8;
maxiter = 100;
s = 0.5;
[lambda, v] = shiftpower(A, s)
27. TM GI TR RING CA MA TRN BA NG
CHO I XNG
1. Dy Sturm: Sau khi thc hin bin i ng dng bng phng php dng ma trn
Householder ta nhn c ma trn tridiagonal i xng. tim cc gi tr ring v
vec t ring tng ng ta c th dng thut ton lp QR. Tuy nhin phng php chia
i(bisection) cng rt hiu qu.
a thc c tnh ca ma trn c dng:

108

c1
0
0
0
"
d1
c
d2
c2
0
0
"
1

c2
d3
c3
0
"
0
Pn ( ) = det ([ A ] [ E ]) =

0
c3
d4 "
0
0
#
#
#
#
%
#

0
0
c n 1 d n
"
0
c th tnh vi 3(n - 1) php nhn dng dy sau:
P0 ( ) = 1
P1 () = d1
(1)
Pi ( ) = (d i )Pi1 ( ) c i21Pi2 ( )
i = 2, 3,..., n
Cc a thc P0 (), P1 ( ),...,Pn ( ) to nn dy Sturm c cc tnh cht sau:
- S ln i du trong dy P0 (a), P1 (a),...,Pn (a) bng s nghim ca Pn ( ) nh
hn
- Nu mt phn t Pi (a) ca dy l zero, du ca n ngc vi du ca Pi1 (a) .
Ta xy dng hm sturmseq() to ra dy Sturm:
function p = sturmseq(c, d, lambda)
% Cho day Sturm p gan voi ma tran
% tridiagonal A = [c\d\c] va lambda.
% Chu y |A - lambda*I| = p(n).
n = length(d) + 1;
p = ones(n, 1);
p(2) = d(1) - lambda;
for i = 2:n-1
p(i+1) = (d(i) - lambda)*p(i) - (c(i-1)^2 )*p(i-1);
end

Tip theo ta xy dng hm countevals() m s ln i du ca dy Sturm:


function num = countevals(c, d, lambda)
% Tinh so gia tri rieng nho hon lambda cua ma tran
% A = [c\d\c]. Dung day Sturm
p = sturmseq(c, d, lambda);
n = length(p);
oldsign = 1;
num = 0;
for i = 2:n
psign = sign(p(i));
109

if psign == 0;
psign = -oldsign;
end
if psign*oldsign < 0
num = num + 1;
end
oldsign = psign;
end
2. nh l Gerschgorin: nh l Gerschgorin rt c ch khi xc nh bin ton cc
trn cc gi tr ring ca ma trn vung [A] cp n. Bin ton cc l bin bao ly ton
b cc gi tr ring. i vi ma trn i xng th:
a i ri a i + ri i = 1, 2,..., n
Trong :
n

ri = a ij

a i = a ii

(2)

j=1
j i

Vy bin ton cc ca cc gi tr ring l:


min min(a i ri )
m ax max(a i + ri )
i

(3)

Ta xy dng hm gerschgorin() xc nh bin trn v di ca cc gi tr ring ca


ma trn i xng:
function [evalmin, evalmax] = gerschgorin(c, d)
% Danh gia cac bien cua gia tri rieng
n = length(d);
evalmin = d(1) - abs(c(1));
evalmax = d(1) + abs(c(1));
for i = 2:n-1
eval = d(i) - abs(c(i)) - abs(c(i-1));
if eval < evalmin;
evalmin = eval;
end
eval = d(i) + abs(c(i)) + abs(c(i-1));
if eval > evalmax
evalmax = eval;
end
end
eval = d(n) - abs(c(n-1));
if eval < evalmin
evalmin = eval;
110

end
eval = d(n) + abs(c(n-1));
if eval > evalmax
evalmax = eval;
end

Ta xy dng hm evalbrackets() vy cc gi tr ring nh nht ca ma trn ba


ng cho. N cho dy r1, r2,...,rm+1 trong mi on [ri, ri+1] cha mt gi tr ring.
Thut ton trc ht tm bin ton cc ca cc gi tr ring theo nh l Gerschorin.
Phng php chia i kt hp vi dy c tnh ca dy Sturm c dng xc nh
bin trn m, m-1,..., 1
function r = evalbrackets(c, d, m)
% Nhom m gia tri rieng min cua ma tran A = [c\d\c]

111

[evalmin, evalmax] = gerschgorin(c, d);


r = ones(m+1, 1);
r(1) = evalmin;
% Tim cac gia tri rieng theo thu tu giam dan
for k = m:-1:1
% chia doi doan (evalmin, evalmax)
eval = (evalmax + evalmin)/2;
h = (evalmax - evalmin)/2;
for i = 1:100
% Tim so gia tri rieng nho hon eval
numevals = countevals(c, d, eval);
% lai chia doi doan chua eval
h = h/2;
if numevals < k ;
eval = eval + h;
elseif numevals > k ;
eval = eval - h;
else;
break
end
end
valmax = eval;
r(k+1) = eval;
end
3. Tnh cc gi tr ring: Mt khi tm c khong cha cc gi tr ring ta c th
xc nh nghim ca a thc Pn() bng phng php Brent. Ta xy dng hm
eigenvals() tm cc gi tr ring nh nht ca ma trn ba ng cho i xng bng
phng php Brent.
function evals = eigenvals(c, d, m)
% Tinh m gia tri rieng be nhat cua a = [c\d\c].
% c va d phai khai bao 'global' trong chuong trinh goi
evals = zeros(m, 1);
r = evalbrackets(c, d, m); % nhom cac gia tri rieng
for i = 1:m
evals(i) = brent(@func, r(i), r(i+1));
end
Khi bit cc gi tr ring, cch tt nht tm cc vec t ring tng ng l phng
php lu tha nghch o. Ta dng hm invpower() thc hin cng vic ny:
114

function [eval, evec] = invpower(c, d, s, maxiter, tol)


% Tinh cac gia tri rieng cua A = [c\d\c] gan voi s va
% va vec to rieng tuong ung bang phuong phap lap nghich dao.
if nargin < 5;
tol = 1.0e-6;
end
if nargin < 4;
maxiter = 50;
end
n = length(d);
e = c;
d = d - s;
[c, d, e] = ludec3(c, d, e); % phan tich A* = A - sI
x = rand(n, 1);
xmag = sqrt(dot(x, x));
x = x/xmag; % chuan hoa x
for i = 1:maxiter
xold = x;
x = lusol3(c, d, e, x); % giai he A*x = xOld
xmag = sqrt(dot(x, x));
x = x/xmag; % chuan hoa x
xsign = sign(dot(xold, x)); %t hien su doi dau cua x
x = x*xsign;
% kiem tr tinh hoi tu
if sqrt(dot(xold - x, xold - x)) < tol
eval = s + xsign/xmag;
evec = x;
return
end
end
error('Qua nhieu lan lap')
function [c,d,e] = ludec3(c, d, e)
% Phan tich ma tran A thanh A = [c\d\e].
n = length(d);
for k = 2:n
lambda = c(k-1)/d(k-1);
d(k) = d(k) - lambda*e(k-1);
c(k-1) = lambda;
end
115

function x = lusol3(c, d, e, b)
% Giai he A*x = b voi A = [c\d\e]
n = length(d);
for k = 2:n % thay the tien
b(k) = b(k) - c(k-1)*b(k-1);
end
b(n) = b(n)/d(n); % thay the lui
for k = n-1:-1:1
b(k) = (b(k) -e(k)*b(k+1))/d(k);
end
x = b;
Ta xy dng hm symmateig() tm cc gi tr ring v vec t ring:
function [ eigenvalues, eigvec] = symmateig(a)
global c d
m = size(a, 1);
b = housetrans(a);
d = diag(b);
c = diag(b, 1);
p = householderp(a);
evals = eigenvals(c, d, m);
for i = 1:m
s = evals(i)*1.0000001;
eval = invpower(c, d, s);
end
eigenvalues = diag(evals');
n = size(eigenvalues, 1);
eigvec = zeros(n);
c = eigvec;
e = eye(n);
for i = 1:n
b = a - eigenvalues(i, i)*e;
c = nulld(b);
eigvec(:, i) = c(:,1);
end
tm gi tr ring ca mt ma trn i xng bng cch bin i Householder ta dng
chng trnh cthouseholdereig.m:
clear all, clc
116

global c d
a = [ 1 2 3 4; 2 7 6 5; 3 6 9 0;4 5 0 3];
[eval, evec] = symmateig(a)
n = size(a, 1);
28. TM GI TR RING BNG PHNG PHP QUT
tm cc gi tr ring khc ca ma trn ta dng phng php qut. Cho
phng trnh thun nht di dng ma trn:
[A][X] = [X]
(1)
Bng phng php lp lu tha ta nhn c gi tr ring ln nht. tm gi tr
ring ln th hai 2 ta dng phng php qut. Mun vy vec t ban u [X0] phi
chn sao cho khng cng phng vi vec t ring ng vi gi tr ring ln nht 1. V
cc vec t ring to thnh c s nn:
(2)
[ X 0 ] = c1 [ X 1 ] + c 2 [ X 2 ] + " + c n [ X n ]
Nhn c hai v ca (2) vi chuyn v [ X 1 ] ta c:
T

[ X 1 ] [ X 0 ] = c1 [ X 1 ] [ X 1 ]
T

hay:

[X ] [X ]
c 1= 1 T 0
[ X1 ] [ X1 ]
T

(3)

By gi ta chn vec t ban u l:

[ X ] [ X ][ X ]
(4)
[ Y0 ] = [ X 0 ] c1 [ X1 ] = [ X 0 ] 1 T 0 1
[ X1 ] [ X1 ]
Nh vy vec t [ Y0 ] khng trng phng vi [ X 1 ] v nu ta dng php lp cng sut
vi vec t ban u [ Y0 ] n s hi t ti gi tr ring ln th 2.
Vec t [ Y0 ] trong (4) c th vit di dng:
T

X 1 ][ X 1 ]
[
(5)
[ Y0 ] = [E]
[ X 0 ]
T
X
X
[
]
[
]
1
1

v:

A ][ X 1 ][ X 1 ]
[
[ A ][ Y0 ] = [ A]
[ X 0 ]
T
X
X
[
]
[
]
1
1

= [ D 1 ][ X 0 ]
Trong :
T
1[ X 1 ][ X 1 ]
[ D1 ] = [ A ]
T
[ X1 ] [ X1 ]

(6)
(7)
(8)

117

l ma trn dng cho php lp tnh gi tr ring ln th 2 ca [A]. tnh gi tr


ring ln th 3, th 4,... ta dng cc ma trn cho php lp lu tha:
T
2 [ X 2 ][ X 2 ]
[ D 2 ] = [ D1 ]
T
[X2 ] [X2 ]

[ D3 ] = [ D2 ]

3 [ X 3 ][ X 3 ]

[X3 ] [X3 ]
T

Tip tc qu trnh trn n ln ta thu c cc gi tr ring ca ma trn [A]. Ta xy dng


hm sweeping() thc hin thut ton trn:
function [t, s, iter] = sweeping(A)
%function t = sweeping(A)
%Tinh tat ca cac gia tri rieng va vec to rieng cua ma tran A doi xung
n = size(A, 1);
t = eye(n);
s = zeros(n);
k = zeros(n, 1);
[l, v, iter] = eigpower(A);
t(1, 1) = l;
s(:, 1) = v;
k(1, 1) = iter;
for i = 2:n
A = A - (l*v*v')/(v'*v);
[l, v, iter] = eigpower(A);
t(i,i) = l;
s(:, i) = v;
k(i, 1) = iter;
end
iter = max(k);
tnh gi tr ring v vec t ring ca ma trn ta dng chng trnh ctsweeping.m:
clear all, clc
A = [1 3 5; 3 4 9; 5 9 6];
%A = [17 24 30 17; 8 13 20 7; 2 10 8 6; -23 -43 -54 -26];
[t, s, iter] = sweeping(A)
29. TM GI TR RING BNG PHNG PHP JACOBI
Phng php ny cho php ta tm tt cc gi tr ring ca ma trn [A] i xng.
Ta to ra ma trn trc giao chun [V] gm cc cc vec t ring sao cho [V]T[V] = [E];

118

[V]-1 = [V]T v dng n bin i ng dng ma trn [A]. Khi ta s nhn c


ma trn ng cho c cc gi tr ring nm trn ng cho chnh:
(1)
[ V ]T [ A ][ V ] = [ V ]1 [ A][ V ] = [ ]
hiu phng php Jacobi, trc ht ta nh ngha ma trn quay pq:

0
#

R pq () = 0

0
#

0
#

p
0 "
1

#
#

"

"

"
"

"
#

0 " cos " " sin "


0 "

" "
"
0
# #
#
# #
#
#
0 " sin " " cos "
# #
#
# #
#
#
0

(2)

Do ma trn [R] trc giao nn cc vec t hng v ct ca n cng trc giao v chun
ho:
T

R pq R pq = E

R pq = R pq

(3)

Nhn trc v sau ma trn [A] vi R pq v R pq to nn bin i ng dng:


T

A(1) = R pq A R pq
(4)
Ch l php bin i ng dng khng lm thay i gi tr ring nn bt k ma trn
no c c t cc ln lp:
T

A(k+1) = R (k) A(k) R (k)

(5)
T
T
T

= R (k) R (k1) " R A R " R (k1) R (k)


c cng gi tr ring. Hn na, nu n l ma trn ng cho, cc gi tr ring s nm
trn ng cho chnh v ma trn c nhn vo bn phi ca ma trn [A] l ma trn
[V]:
V = R " R (k1) R (k)
(6)
Vn cn li l lm sao bin ma trn (5) thnh ma trn ng cho. Cn nh rng
php bin i (4) ch lm thay i hng v ct p v q.
v pq = v qp = a qp (c 2 s 2 ) + (a qq a pp )sc
(7a)
1
= a qpcos 2 + (a qq a pp )sin 2
2
119

v pn = v np = a pn c + a qn s
v qn = v nq = a pn s + a qn c

n p, q
n p, q

(7b)
(7c)

v pp = a ppc 2 + a qq s 2 + 2a pq sc = a ppc 2 + a qq s 2 + a pq sin 2

(7d)

v qq = a pps 2 + a qq c 2 2a pq sc = a pps 2 + a qq c 2 a pq sin 2

(7e)

c = cos, s = sin
Ta lm cho
v pq = v qp = 0

(8)

bng cch chn ca ma trn quay [Rpq()] sao cho:


2a pq
1
sin 2
cos 2 =
=
tg2 =
cos2
a pp a qq
1 + tg 2 2
sin2 = tg2cos2

(9)

1 + cos 2
sin 2
sin =
2
2 cos
cho ma trn gn ma trn ng cho sau mi ln lp, ta coi ch s hng v ct ca
phn t ln nht nm ngoi ng cho l p v q v lm cho n bng zero.
Ta xy dng hm eigjacobi() tnh cc gi tr ring i v cc vec t ring ca mt
ma trn i xng cp n bng phng php Jacobi.
cos = cos 2 =

function [lambda, v] = eigjacobi(A, tol, maxiter)


%Phuong phap Jacobi cho ma tran A doi xung
if nargin < 3
maxiter = 100;
end
if nargin < 2
tol = 1e-8;
end
n = size(A, 2);
lambda =[];
v = [];
for m = 1:n
if norm(A(m:n, m) - A(m, m:n)') > eps
error(' Ma tran khong doi xung !');
end
end
v = eye(n);
for k = 1: maxiter
for m = 1:n - 1
[Am(m), Q(m)] = max(abs(A(m, m + 1:n)));
120

end
[Amm, p] = max(Am);
q = p + Q(p);
if Amm < eps*sum(abs(diag(lambda)))
break;
end
if abs(A(p, p) - A(q, q))<eps
s2 = 1;
s = 1/sqrt(2);
c = s;
cc = c*c;
ss = s*s;
else
t2 = 2*A(p, q)/(A(p, p) - A(q, q)); %Pt.(9a) tg2(theta)
c2 = 1/sqrt(1 + t2*t2); %Pt.(9b) cos2(theta)
s2 = t2*c2; %Pt.(9c) sin2(theta)
c = sqrt((1 + c2)/2); %Pt.(9d) cos(theta)
s = s2/2/c; %Pt.(9e) sin(theta)
cc = c*c;
ss = s*s;
end
lambda = A;
lambda(p, :) = A(p,:)*c + A(q,:)*s; %Pt.(7b)
lambda(:, p) = lambda(p,:)';
lambda(q, :) = -A(p, :)*s + A(q, :)*c; %Pt.(7c)
lambda(:, q) = lambda(q, :)';
lambda(p, q) = 0;
lambda(q, p) = 0; %Pt.(7a)
lambda(p, p) = A(p, p)*cc +A(q, q)*ss + A(p, q)*s2; %Pt.(7d)
lambda(q, q) = A(p, p)*ss +A(q, q)*cc - A(p, q)*s2; %Pt.(7e)
A = lambda;
v(:, [p q]) = v(:, [p q])*[c -s;s c];
end
lambda = diag(diag(lambda));
tnh cc gi tr ring ta dng chng trnh chng trnh cteigjacobi.m:
clear all, clc ;
a = [ 1 3 5; 3 4 9; 5 9 6];
[eigval, eigvec] = eigjacobi(a)
Cc bi ton vt l thng a n bi ton gi tr ring di dng:
121

[A][X] = [B][X]
(10)
Trong [A] v [B] l cc ma trn i xng cp n. Ta gi s [B] xc nh dng. Bi
ton nh vy phi a v dng chun trc khi dng thut ton ng cho ho
Jacobi. Do [B] l ma trn i xng, xc nh dng nn theo thut ton Choleski ta
phn tch n thnh tch 2 ma trn [B] = [L][L]T . By gi ta a vo php bin i:

[ X ] = ([L ]1 ) [ Z ]
T

(11)

Thay (11) vo (10) ta c:

[ A ] ([ L ]1 ) [ Z ] = [ L][L]T ([ L]1 ) [ Z ]
T

Nhn trc hai v vi [L]-1 ta c:

[ L]1 [ A ] ([ L]1 ) [ Z ] = [ L ]1 [ L][ L]T ([ L]1 ) [ Z ]


T

Do [ L ]

[ L] = [ L]T ([ L]1 )T = [ E] nn:


[ H][ Z ] = [ Z ]
1

l dng chun ca bi ton tm gi tr ring v vec t ring vi:


[ H] = [ L]1 [ A ]([ L]1 )T
Tm li gii bi ton (10) ta theo cc bc sau:
- dng thut ton Choleski tnh [L]
- tnh [L]-1
- tnh [H] theo (13)
- gii bi ton (12) theo thut ton ng cho ho Jacobi
- tm vec t ring theo (11), gi tr ring khng i khi bin i
Ta xy dng hm stdform() to ra ma trn [H] v [T] = ([L]-1)T

(12)
(13)

function [H, T] = stdform(A, B)


% Bien doi A*x = lambda*B*x thanh H*z = lambda*z
n = size(A, 1);
L = choleski(B);
Linv = invert(L);
H = Linv*(A*Linv');
T = Linv';
function Linv = invert(L)
% nghich dao ma tran tam giac trai L.
n = size(L, 1);
for j = 1:n-1
L(j, j) = 1/L(j, j);
for i = j+1:n
L(i, j) = -dot(L(i, j:i-1), L(j:i-1, j)/L(i, i));

122

end
end
L(n, n) = 1/L(n, n);
Linv = L;
30. THUT TON QR
Cho ma trn [A] ta c th tm c ma trn [Q] v [R] sao cho:
[A] = [Q][R]
Trong [Q] l ma trn trc giao v [R] l ma trn tam gic phi.
tm cc ga tr ring ca ma trn [A], ta thc hin phn tch QR cho [A]
bng thut ton Householder hay thut ton Givens. Sau ta xy dng ma trn [A1]
= [R1][Q1]. Tip tc phn tch QR ma trn [A1] = [Q1][R1] v li xy dng ma trn
[A2]= [R2][Q2] cho n khi hi t. Thut ton ny c th p dng cho ma trn bt k.
Tuy nhin n s hiu qu hn nu ma trn [A] l ma trn ba ng cho hay ma trn
Hessenberg. Ta xy dng hm qreig() thc hin thut ton trn:
function [lambda, evec] = qreig(a)
% Tinh cac gia tri rieng bang thuat toan phan tich QR
for i = 1: 500
s1 = diag(a);
[q, r] = qrdecom(a);
a = r*q;
s2 = diag(a);
if abs(max(s2 - s1)) < 1e-8
break;
end
end
lambda = diag(a);
n = size(lambda, 1);
evec = zeros(n);
c = evec;
e = eye(n);
for i = 1:n
b = a - lambda(i)*e;
c = nulld(b);
evec(:, i) = c(:, 1);
end
lambda = diag(lambda);
tm gi tr ring ca mt ma trn i xng bng cch bin i Householder ta dng
chng trnh cthouseholder.m:
123

clear all, clc


global c d
a = [ 1 2 3 4; 2 7 6 5; 3 6 9 0;4 5 0 3];
[eval, evec] = symmateig(a)
n = size(a, 1);
31. THUT TON RUTISHAUSER
Cho ma trn [A] i xng, xc nh dng, ta dng thut ton Crout phn
tch n thnh:
[A] = [L][R]
(1)
Sau ta xy dng ma trn:
[A1] = [R][L]
(2)
Ma trn [A1] s c cng gi tr ring vi ma trn [A]. Ta li tip tc phn tch ma trn
[A1] theo thut ton Crout:
[A1] = [L1][R1]
(3)
V sau ta xy dng ma trn:
[A2] = [R1][L1]
Tip tc qu trnh ta nhn c ma trn:
[An] = [Ln][Rn]
[An+1] = [Rn][Ln]
Khi n , [An] tr thnh ma trn tam gic trn c cc phn t trn ng cho chnh
l cc gi tr ring ca ma trn [A]. Php lp ny hi t khi [A] l ma trn xng,
xc nh dng. Khi [A] khng xc nh dng, php lp khng n nh. Phn tch
Crout cng khng thc hin c khi c mt phn t rii = 0. Ta xy dng hm
rutishauser() thc hin thut ton trn:
function [lambda, evec] = rutishauser(a)
% Tinh cac gia tri rieng bang thuat toan phan tich LR
for i = 1: 500
s1 = diag(a);
[l, r] = crout(a);
a = r*l;
s2 = diag(a);
if abs(max(s2 - s1)) < 1e-8
break;
end
end
lambda = diag(a);
n = size(lambda, 1);
evec = zeros(n);
124

c = evec;
e = eye(n);
for i = 1:n
b = a - lambda(i)*e;
c = nulld(b);
evec(:, i) = c(:, 1);
end
lambda = diag(lambda);
tnh cc gi tr ring ca ma trn ta dng chng trnh ctrutishauser.m:
clear all, clc
a = [ 1 2 3 4; 5 6 7 8; 9 0 1 2; 3 4 5 6];
[lambda, evec] = rutishauser(a)
32. THUT TON FADDEEV LEVERIER - SOURIAU
Cho ma trn [A]:
a11 a11 " a1n
a
a 22 " a 2n
21

[A] =
# " #
#
a

n1 a n 2 " a nn
Cc gi tr ring ca ma trn [A] l nghim ca a thc c trng:
det ([ A ] [ E ]) = 0
(1)
Khi khai trin nh thc trn, ta c a thc cp n:
Pn ( ) = n p1 n 1 p1 n 1 " pn = 0
(2)
Gi vt ca ma trn l tng cc phn t trn ng cho chnh:
trace([A])=a11 + a 22 + " + a nn
(3)
Cc h s ca a thc (2) c xc nh theo:
p1 = trace([ B1 ])
[ B1 ] = [ A ]
1
p2 = trace([ B1 ])
[ B2 ] = [ A]([ B1 ] p1 [E])
2
1
p3 = trace([ B3 ])
[ B 3 ] = [ A ] ([ B 2 ] p2 [ E ] )
3
"

1
trace([ Bn ])
[ Bn ] = [ A ]([ Bn1 ] pn1 [E])
n
Gii h (3) ta c cc gi tr ring ca [A].
Ta xy dng hm fadlev() thc hin thut ton trn:
pn =

125

function [lambda, evec] = fadlev(a)


%Tim cac gia tri rieng va vec to rieng bang phuong phap Faddeev - Leverrier
n = size(a, 1);
b = a;
for i = 1:n
s = 0;
for k = 1:n
s = s + b(k, k);
end
p = s/i;
b = a*(b - p*eye(n));
r(i+1) = -p;
end
r(1) = 1;
lambda = roots(r);
n = size(lambda, 1);
evec = zeros(n);
c = evec;
e = eye(n);
for i = 1:n
b = a - lambda(i)*e;
c = nulld(b);
evec(:, i) = c(:, 1);
end
lambda = diag(lambda);
tm cc gi tr ring ca ma trn ta dng chng trnh ctfaclev.m:
clear all, clc
a = [11 2 3 1 4; 2 9 3 5 2; 4 5 6 7 8; 3 2 1 6 7; 4 9 6 8 2];
[lambda, evec] = fadlev(a)
33. THUT TON KRYLOV
a thc c trng ca ma trn [A] c dng:
Pn () = n p1 n 1 p1 n 2 " pn = 0
Ta vit li (1) di dng:
n 1

Pn ( ) = n + pi i

(1)
(2)

i =0

Theo nh l Hamilton - Kelly ta c P([A]) = 0. Xt dy lp:


v(i+1) = [ A ] v(i)
i = 0, 1,..., n-1

(3)
126

Do P([A]) = 0 nn:

n 1

([ A ]) v(0) = v(n) + i v(i) = 0

(4)

i =0

(i) T
n

t v = v ,...,v ta c:
(i)

(i)
1

n 1

v(n)
+ i v(i) = 0
j

(5)

i =0

hay:
1)
v(n
v(n)
" v(0)
1
1 n 1
1

" # # = #
#
1)
v(n

v(n)

" v(0)
n
n 0
n
V v(k+1) = [ A ] v(k)
nn:

(k +1)
i

= ([ A ] v

(k)

) = a
i

j=1

i ,j

v(k)
i = 1, 2,..., n
j

(6)

k = 0, 1,..., n-1

(7)

Tm li qu trnh tnh ton theo thut ton Krylov nh sau:


- Chn v(0) tu , tnh v(k)
theo (7)
i
- Gii h (6) tm
Khi tm c ta c a thc c trng.
Ta xy dng hm krylov() thc hin thut ton trn:
function [lambda, evec] = krylov(a)
% Tim gia tri rieng bang thuat toan Krylov
n = size(a, 1);
v = zeros(n, 1);
v(1) = 1;
b = zeros(n, n);
b(:, n) = v;
for k = 2:n
v = a*v;
b(:, n-k+1) = v;
end
c = a*v;
rho = -b\c;
rho = [1 rho'];
lambda = roots(rho);
n = size(lambda, 1);
evec = zeros(n);
127

c = evec;
e = eye(n);
for i = 1:n
b = a - lambda(i)*e;
c = nulld(b);
evec(:, i) = c(:, 1);
end
lambda = diag(lambda);
tm gi tr ring ca ma trn ta dng chng trnh ctkrylov.m:
clear all, clc
a = [17 24 30 17; 8 13 20 7; 2 10 8 6; -23 -43 -54 -26];
[lambda, evec] = krylov(a)
34. THUT TON HYMAN
Cho ma trn Hessenberg [B] v l mt gi tr ring ca [B]. Ta tm:
(), x1(), x2(),...,xn-1()
sao cho [X] = [x1(), x2(),...,xn-1(), xn]T vi xn = 1 l nghim ca bi ton:
( [ B] [ E ] ) [ X ] = [ e1 ]
ngha l:
(b1,1 )x1 + b1,2 x 2 + " + b1,n 1 =
b x + (b )x + " + b 1 = 0
2 ,2
2
2 ,n
2 ,1 1

b n ,n 1x n1 + (b n ,n )1 = 0

Thay th ngc ta c c cc nghim xn-1, xn-2,..., x1 v ().


Theo quy tc Cramer ta c:

b1,1
b

0
2 ,1

det
b n 1,n 1 0
0

0
b n ,n 1
0

1 = xn =
det ([ B] [ E ])

( )( 1)n 1 b 2 ,1 " b n ,n 1
=
det ([ B] [ E ])
Do :

128

( ) =

( 1)n 1
det ([ B] [ E ])
b 2 ,1 " b n ,n 1

a thc () ch sai khc a thc c trng p() mt nhn t hng. Do vy ta c th


dng () tm cc gi tr ring thay cho p(). Hm alffa() thc hin cng vic ny:
function r = alfa(a);
n = size(a, 1);
b = a;
l = 1;
for i = 2:n
l = l*a(i, i-1);
end
sign = (-1)^(n-1);
for i = 1:n
s = 0;
for k = 1:n
s = s + b(k, k);
end
p = s/i;
b = a*(b - p*eye(n));
r(i+1) = -p;
end
r(1) = 1;
r = sign*r/l;
Nu cho mt ma trn bt k [A], ta c th bin i Householder n thnh ma trn
Hessenberg [B] ng dng vi [A]. Sau khi c cc gi tr ring, ta tm cc vec t ring
tng ng. Hm hyman() thc hin thut ton ny:
function [lambda, evec] = hyman(a)
%Tim cac gia tri rieng va vec to rieng bang phuong phap Hyman
b = hessenberg(a);
r = alfa(b);
lambda = roots(r);
n = size(lambda, 1);
evec = zeros(n);
c = evec;
e = eye(n);
for i = 1:n
b = a - lambda(i)*e;
129

c = nulld(b);
evec(:, i) = c(:,1);
end
lambda = diag(lambda);
tm cc gi tr ring v vec t ring tng ng ca mt ma trn ta dng chng
trnh cthyman.m:
clear all, clc
a = [ 1 2 3 4; 2 5 2 3;7 1 4 1; 3 2 3 7];
[lambda, evec] = hyman(a)
35. TRC GIAO HO ARNOLDI
Trong i s tuyn tnh, phng php Arnoldi c W. Arnoldi a ra nm
1951. Phng php lp Arnoldi s dng trc giao ho Gram Schmidt to ra dy
cc vec t trc giao [q1], .., [qn] gi l cc vec t Arnoldi. Thut ton c th gm cc
bc:
- Cho vec t bt k [q1] c [ q1 ] = 1
- Lp t k = 2,3,...
[A][qk-1] = [qk]
for j = 1:k-1
T

q j q k = h j,k 1
q k = h j,k 1 q j
[ q k ] = h k ,k 1
qk
h k ,k 1
Ta gi [Qn] l ma trn to t n vec t Arnoldi u tin [q1],..,[qn] u tin v [Hn] l
ma trn (Hessenberg trn) to bi n hng u tin ca [H] v c:
[Hn] = [Q]T[A][Q]
Ta xy dng hm arnoldi() thc hin thut ton trn:
[q k ] =

function [Hn, Vn] = arnoldi(A);


k = 50;
m = size(A, 1);
v = rand(m, 1);
n = size(A, 1);
H = zeros(m+1, m);
V = zeros(n, m+1);
130

V(:,1) = v/norm(v);
for j = 1:m
w = A*V(:, j);
for i = 1:j
H(i, j) = V(:, i)'*w;
w = w - H(i, j)*V(:, i);
end
H(j+1, j) = norm(w);
if H(j+1, j) <= eps,
break;
end
V(:, j+1) = w/H(j+1, j);
end
Hn = H(1:m, :);
Vn = V(:, 1:m);
phn tch ma trn ta dng chng trnh ctarnoldi.m:
clear all, clc
A = [ 7 2 3 -1; 2 8 5 1; 3 5 12 9; -1 1 9 7];
[H, V] = arnoldi(A)
36. TRC GIAO HO LANCZOS
Cho ma trn [A] i xng. Ta phn tch ma trn thnh cc ma trn [Q] v [T]
sao cho:
[A] = [Q][T][Q]T
vi: [Q][Q]T = [E], ngha l [Q] l ma trn trc giao v [T] l ma trn ba ng
cho i xng. Thut ton Lanczos gm cc bc:
- Cho vec t [v1] c [ v1 ] = 1
- Cho v0 = 0, 0 = 0. [V] = [v1]
- Lp :
v j+1 = A v j j1 v j1
T

alfa = v j v j+1
v j+1 = v j+1 v j
T

v j+1 = v j+1 V V v j+1


j = v j+1
v j+1 = v j+1 j
131

[ V ] = V,v j+1
Ta xy dng hm lanczos() thc hin thut ton Lanczos
function [T, Q] = lanczos(A);
% thuat toan Lanczos cho ma tran doi xung
n = size(A, 1);
Q(:, 1) = rand(n, 1);
Q(:, 1) = Q(:, 1)./norm(Q(:, 1));
a(1) = Q(:, 1)'*A*Q(:, 1);
Q(:, 2) = A*Q(:, 1) - a(1)*Q(:, 1);
b(1) = norm(Q(:, 2));
Q(:, 2) = 1./b(1)*Q(:, 2);
for i = 2:n-1
a(i) = Q(:, i)'*A*Q(:, i);
Q(:, i+1) = A*Q(:, i) - a(i)*Q(:, i) - b(i-1)*Q(:, i-1);
b(i) = norm(Q(:, i+1));
Q(:, i+1) = 1./b(i)*Q(:, i+1);
end
a(n) = Q(:, n)'*A*Q(:, n);
T = diag(a) + diag(b, 1) + diag(b, -1);
phn tch ma trn ta dng chng trnh ctlanczos.m:
clear all, clc
A = [4 1 3 -2; 1 -2 4 1; 3 4 1 2; -2 1 2 3];
[T, Q] = lanczos(A);

132

CHNG 3: H PHNG TRNH I S TUYN TNH


1. KHI NIM CHUNG
Trong chng ny chng ta s xt cc phng php s gii cc phng trnh
i s tuyn tnh dng:
a11x1 + a12 x 2 + + a1n x n = b1
a x + a x + + a x = b
21 1
22 2
2n n
2

a n1x1 + a n2 x 2 + + a nn x n = b n
Cc phng trnh ny c th vit gn di dng:
[A] [x] = [b]
Trong :
b1
x1
a11 a12 a1n
b
x
a
a 22 a 2n
21
2

[ A] =
[ x] = 2
[ b] =

xn
a n1 a n2 a nn
bn
Ta s xt 3 trng hp:
) s phng trnh bng s n s nn ma trn [A] l ma trn vung
) s phng trnh nh hn s n s
) s phng trnh ln hn s n s
2. NGHIM CA H PHNG TRNH I S TUYN TNH
1. Trng hp khng suy bin: Khi s phng trnh m bng s n s n, ma trn [A]
vung v ta c:
(1)
[ x ] = [ A ]1 [ b]
nu ma trn A khng suy bin, ngha l nh thc ca ma trn khc khng. Cc lnh
MATLAB gii h l (ctsys.m):
clc
A = [1 2;3 4];
b = [-1;-1];
x = A^-1*b
%x = inv(A)*b
2. Trng hp s phng trnh t hn s n(nghim cc tiu chun): Nu s
phng trnh m t hn s n s n th nghim khng duy nht. Gi s m hng ca ma
trn h s [A] l c lp th vec t n chiu c th phn tch thnh hai thnh phn:
(2)
[ x] = [ x]+ + [ x]
136

Trong mt ma trn l ma trn khng gian hng ca ma trn [A] v c vit di


dng t hp ca:
(3)
[ x]+ = [ A]T [ ]
v ma trn kia l ma trn khng gian khng sao cho:
(4)
[ A ][ x] = 0
Nh vy:
(5)
[ A ] [ x ]+ + [ x] = [ A ][ A ]T [ ] + [ A ][ x] = [ A ][ A ]T [ ] = [ b]

Do [A][A] l ma trn khng suy bin m m c c bng cch nhn ma trn m n


vi ma trn n m nn ta c th gii phng trnh i vi [] c:
1

[ ]0 = AAT [ b]

(6)

Thay (6) vo (3) ta c:


1

[ ]0+ = [ A ]T [ ]0 = [ A ]T AAT [ b]

(7)

iu ny tho mn phng trnh [A][x] = [b]. Tuy nhin n khng l nghim duy
nht v nu thm bt k mt vec t [x] tho mn (4) th n s cng l nghim.
MATLAB dng lnh pinv gii h (ctpinv.m)
A = [1 2];
b = 3;
x = pinv(A)*b
3. Trng hp s phng trnh nhiu hn s n(nghim sai s bnh phng b
nht): Nu s phng trnh m ln hn s n s n th khng tn ti nghim tho mn
y cc phng trnh. Ta c gng tm vec t nghim c sai s [e] nh nht.
(8)
[ e ] = [ A][ x] [ b]
Vy th bi tim ca ta l cc tiu ho hm:
2
T
2
J = 0.5 e = 0.5 [ A ][ x ] [ b ] = 0.5 [ A ][ x ] [ b ] [ A ][ x ] [ b ]
(9)
Ta tm cc tiu ca J bng cch cho o hm theo x ca (9) bng khng.
1

T
J = [ A ] [ A ][ x ] [ b ] = 0
(10)
[ x ]0 = [ A ]T [ A ] [ A ]T [ b]
x
Ch l ma trn [A] c s hng ln hn s ct cho nn khng nghch o c.
Nghim sai s bnh phng b nht tm c nh dng lnh pinv hay php chia tri
(ctover.m):
A = [1; 2];
b = [2.1; 3.9];
x = pinv(A)*b
x = A\b
x = (A'*A)^-1*A'*b
137

tin dng ta vit hm pttt() gii h phng trnh trong c 3 trng hp


trn
function x = pttt(A, B)
%Ham nay tim nghiem cua pt Ax = B
[M, N] = size(A);
if size(B,1) ~= M
error('Kich thuoc A va B trong pttt() khong bang nhau!')
end
if M == N
x = A^-1*B;
elseif M < N
x = pinv(A)*B;
else
x = pinv(A)*B;
end
gii h phng trnh ta dng chng trnh ctpptt.m:
clear all, clc;
a = [ 1 3 4; 2 5 7; 3 1 2];
b = [8 14 6]';
x = pttt(a, b)
3. CC PHNG PHP KH
1. Phng php kh Gauss: Chng ta bit rng cc nghim ca h khng i nu ta
thay mt hng bng t hp tuyn tnh ca cc hng khc. Ta xt mt h
phng trnh i s tuyn tnh c ma trn [A] khng suy bin vi m = n = 3.
Phng trnh c dng:
a11x1 + a12 x 2 + a13 x 3 = b1

(1)
a 21x1 + a 22 x 2 + a 23 x 3 = b 2
a x + a x + a x = b
32 2
33 3
3
31 1
) Trc ht ta kh x1 ra khi cc phng trnh, ngoi tr phng trnh u tin, bng
cch nhn phng trnh u tin vi ai1/a11 (i l ch s hng) v tr i mi phng
trnh :
(0)
(0)
(0)
a(0)
11 x1 + a 12 x 2 + a 13 x 3 = b1

(1)
(1)
(2)
a(1)

22 x 2 + a 23 x 3 = b 2

(1)
(1)
a(1)
32 x 2 + a 33 x 3 = b 3

Trong :
138

a(0)
ij = a ij

b(0)
= bi
i

vi i = 1, j = 1, 2, 3

a(0)
a(0)
(0)
(1)
(0)
i1
i1
bi = bi (0)
b(0)
vi i, j = 2, 3
a = a (0) a1j
1
a11
a11
Vic ny gi l ly tr ti a11 v phn t a11 gi l tr.
) Tip theo ta kh x2 trong phng trnh th 3 ca (2) bng cch ly phng trnh
(1)
th 2 nhn vi a(1)
i2 / a 22 (i = 3) v tr i phng trnh th 3:
(1)
ij

(0)
ij

(0)
(0)
(0)
a(0)
11 x1 + a 12 x 2 + a 13 x 3 = b1

(1)
(1)
a(1)
(3)

22 x 2 + a 23 x 3 = b 2

(2)
a(2)
33 x 3 = b 3

Trong :
a(1)
a(1)
(2)
(1)
(1)
(2)
(1)
i2
i2
a ij = a ij (1) a 2 j
bi = bi (1)
b(1)
vi i, j = 3 (4)
2
a 22
a 22
Qu trnh ny c gi l thut ton kh Gauss tin v c tng qut ho thnh:
1)
a(k
(k)
(k 1)
1)
ik
a ij = a ij (k1) a(k
i, j = k + 1,k + 2,...,m
kj
a kk
(5)
(k 1)
a
1)
1)
ik
= b(k
(k
b(k)
b(k
i = k + 1,k + 2,...,m
i
i
k
1)
a kk
thc hin thut ton kh Gauss ta dng on m lnh:
for k = 1:n-1
for i= k+1:n
if A(i, k) = 0
lambda = A(i, k)/A(k, k);
A(i, k+1:n) = A(i, k+1:n) - lambda*A(k, k+1:n);
b(i)= b(i) - lambda*b(k);
end
end
end

Sau khi c h phng trnh dng ta gic ta tm nghim d dng. T phng trnh th 3
ca (3) ta c:
b(2)
3
x 3 = (2)
(6a)
a 33
Thay vo phng trnh th 2 ta c:
(1)
b(1)
2 a 23 x 3
(6b)
x2 =
a(1)
22
v cui cng t phng trnh th nht ta c:
139

x1 =

1 (0) 3 (0)
b1 a1j x j
a(0)
j= 2
11

(6c)

Ta cng c th tng qut ho qu trnh tm nghim bng cch tnh li v tm nghim


bng:
m

1
(7)
xi = (i1) b(ii 1) a(iij 1) x j
i = m,m 1,...,1
a ii
j= i +1

v tm nghim bng on m lnh:


for k = n:-1:1
b(k) = (b(k) - A(k, k+1:n)*b(k+1:n))/A(k, k);
end
Nh vy phng php Gauss gm hai bc:
- kh theo thut ton Gauss
- tm nghim ca phng trnh dng tam gic
on m lnh tro hng c vit trong hm swaprows():
function v = swaprows(v ,i ,j)
% Trao doi hang i va hang j cua ma tran v.
% Cu phap: v = swaprows(v, i, j)
temp = v(i, :);
v(i, :) = v(j, :);
v(j, :) = temp;
Ta xy dng hm gauss() thc hin thut ton kh Gauss
function x = gauss(A, B)
%Kich thuoc cua ma tran A, B la NA x NA va NA x NB.
%Ham nay dung giai he pt Ax = B bang phuong phap khu Gauss
NA = size(A,2);
[NB1, NB] = size(B);
if NB1 ~= NA
error('A va B phai co kich thuoc tuong ung');
end
N = NA + NB;
AB = [A(1:NA, 1:NA) B(1:NA, 1:NB)];
epss = eps*ones(NA, 1);
for k = 1:NA
%Chon tru AB(k, k)
[akx,kx] = max(abs(AB(k:NA, k))./ ...
140

max(abs([AB(k:NA, k + 1:NA) epss(1:NA - k + 1)]'))');


if akx < eps
error('Ma tran suy bien va nghiem khong duy nhat');
end
mx = k + kx - 1;
if kx > 1 % trao hang khi can
swaprows(AB, k, mx);
end
% Khu Gauss
AB(k,k + 1:N) = AB(k,k+1:N)/AB(k,k);
AB(k, k) = 1;
for m = k + 1: NA
AB(m, k+1:N) = AB(m, k+1:N) - AB(m, k)*AB(k, k+1:N); %(2.2.5)
AB(m, k) = 0;
end
end
%Tim nghiem
x(NA, :) = AB(NA, NA+1:N);
for m = NA-1: -1:1
x(m, :) = AB(m, NA + 1:N)-AB(m, m + 1:NA)*x(m + 1:NA, :); %(2.2.7)
end
gii h phng trnh ta dng ctgauss.m
clear all, clc
A = [1 1 1;2 -1 -1; 1 1 -1];
b = [2 0 1]';
x = gauss(A, b)
2. Phng php kh Gauss - Jordan: Xt h phng trnh AX = B. Khi gii h
bng phng php Gauss ta a n v dng ma trn tam gic sau mt lot bin i.
Phng php kh Gauss - Jordan ci tin cch kh Gauss bng cch a h v dng :
[E][X] = [B*]
v khi nghim ca h chnh l [B*]. Trong phng php Gauss - Jordan mi bc
tnh phi tnh nhiu hn phng php Gauss nhng li khng phi tnh nghim.
a ma trn [A] v dng ma trn [E] ti bc th i ta phi c aii = 1 v aij = 0. Nh
vy ti ln kh th i ta bin i:
1. aij = aij/aii (j = i + 1, i + 2,..., n)
2. k = 1, 2,..., n
akj = akj - aijaki (j = i + 1, i + 2,..., n)
bk = bk - biaki
141

gii h phng trnh bng phng php Gauss - Jordan ta to ra hm


gaussjordan()
function x = gaussjordan(A, B)
%Kich thuoc cua ma tran A, B la NA x va NA x NB.
%Ham nay dung giai he Ax = B bang thuat toan loai tru Gauss-Jordan
NA = size(A, 2);
[NB1,NB] = size(B);
if NB1 ~= NA
error('A va B phai co kich thuoc tuong ung');
end
for i = 1:NA
if A(i, i) == 0 % trao hang neu can
swaprows(A, i, mx);
end
c = A(i, i);
for j = i:NA
A(i,j) = A(i, j)/c;
end
B(i) = B(i)/c;
for k = 1:NA
if k~=i
c = A(k, i);
A(k, i:NA) = A(k, i:NA)-A(i, i:NA)*c;
B(k) = B(k) - B(i)*c;
end
end
end
x = B;
v dng chng trnh ctgaussjordan.m gii h:
clear all, clc
a = [5 3 1;2 -1 1; 1 -1 -1];
b = [9; 2; -1];
x = gaussjordan(a, b)
4. GII H PHNG TRNH BNG CCH PHN TCH MA TRN
1. Khi nim chung: Mt ma trn khng suy bin [A] gi l phn tch c thnh
tch hai ma trn [L] v [R] nu:
[A] = [L] [R]
142

Vic phn tch ny, nu tn ti, l khng duy nht. Nu ma trn [L] c cc phn t
nm trn ng cho chnh bng 1, ta c php phn tch Doolittle. Nu ma trn [R] c
cc phn t nm trn ng cho chnh bng 1, ta c php phn tch Crout. Nu [R] =
[L]T (hay [L] = [R]T) ta c php phn tch Choleski.
2. Phn tch Doolittle: Ta xt h phng trnh [A][X] = [B]. Nu ta phn tch ma trn
[A] thnh tch hai ma trn [L] v [R] sao cho:
[A] = [L][R]
trong [L] l ma trn tam gic tri v [R] l ma trn tam gic phi. Vi ma trn bc
3 [L] v [R] c dng:
1 0 0
r11 r12 r13

[ L] = l 21 1 0
[ R ] = 0 r22 r23
l 31 l 32 1
0 0 r33
Khi h phng trnh c vit li l:
[L][R][X] = [B]
Ta t [R][X] = [Y] v h tr thnh
[L][Y] = [B]
Do [L] l ma trn tam gic nn ta d dng tm c [Y]. Sau khi c [Y] ta tip
tc tm [X]. Nh vy bi ton a v vic phn tch ma trn [A].
gii h phng trnh bng cch phn tch ma trn theo thut ton Doolittle ta dng
hm doolittlesol():
function x = doolittlesol(A, b)
% Giai he AX = B, trong do A = LU
% nghia la A co dang [L\U].
% Cu phap: x = doolittlesol(A, b)
n = size(A, 1);
[l, r] = doolittle(A);
%tim nghiem mt tam giac trai
y(1,:) = b(1)/l(1, 1);
for m = 2:n
y(m, :) = (b(m) -l(m, 1:m-1)*y(1:m-1, :))/l(m, m);
end
%tim nghiem mt tam giac phai
x(n, :) = y(n)/r(n, n);
for m = n-1: -1:1
x(m, :) = (y(m) -r(m, m + 1:n)*x(m + 1:n, :))/r(m, m);
end
p dng hm doolittlesol() gii h phng trnh:

143

4 3 6 x 1 1
8 3 10 x = 0

2
4 12 10 x 3 0
ta dng chng trnh ctdoolitle.m:
a = [4 -3 6; 8 -3 10; -4 12 -10];
b = [1; 0; 0];
x = doolittlesol(a, b)
3. Phn tch Crout: Tng t nh thut ton Doolittle, ta c th phn tch ma trn
[A] theo thut ton Crout thnh tch ca ma trn [L] v [R]. gii h phng trnh
bng cch phn tch ma trn theo thut ton Crout ta dng hm croutsol():
function x = croutsol(a, b)
%Ham dung giai he pt AX = B bang thuat toan Crout
% Cu phap: x = croutsol(a, b)
n =size(a,1);
[l,r] = crout(a);
y(1,:) = b(1)/l(1, 1);
for m = 2:n
y(m,:) = (b(m) - l(m, 1:m-1)*y(1:m-1,:))/l(m, m);
end
x(n, :) = y(n)/r(n, n);
for m = n-1: -1:1
x(m, :) = (y(m) - r(m, m + 1:n)*x(m + 1:n, :))/r(m, m);
end
Khi gii phng trnh ta chng trnh ctcrout.m:
clear all, clc
a = [ 4 8 20; 6 13 16; 20 16 -91];
b = [24; 18; -110];
x = croutsol(a, b)
4. Phn tch Choleski: Sau khi phn tch ma trn [A] theo thut ton Choleski, h
phng trnh [A][X] = [B] tr thnh:
[L][L]T[X] = [B]
Trc ht ta tm nghim ca h phng trnh [L][Y] = [B] v sau tm nghim [X]
t h phng trnh ][L]T[X] = [Y]. Ta xy dng hm choleskisol() thc hin thut
ton ny:
144

function x = choleskisol(a, b)
%Giai he pt bang thuat toan Choleski
%Cu phap: x = choleskisol(a, b)
n =size(a,1);
l = choleski(a);
r = l';
y(1,:) = b(1)/l(1, 1);
for m = 2:n
y(m,:) = (b(m) - l(m, 1:m-1)*y(1:m-1, :))/l(m, m);
end
x(n, :) = y(n)/r(n, n);
for m = n-1: -1:1
x(m, :) = (y(m) -r(m, m + 1:n)*x(m + 1:n, :))/r(m, m);
end
gii h phng trnh
4 2 2 x1 5
2 2 4 x = 10

2 4 11 x1 27
ta dng chng trnh ctcholeski.m:
clear all, clc
a = [4 -2 2;-2 2 -4;2 -4 11];
b = [6; -10; 27];
x = choleskisol(a, b)
5. Phn tch QR: Ta xt h phng trnh [A][X] = [B]. Phn tch ma trn [A] thnh
tch ca hai ma trn [Q] v [R] sao cho:
[A] = [Q]*[R]
Trong [Q] l ma trn trc giao, ngha l [Q]T[Q] = [E], v [R] l ma trn tam gic
phi. Nh vy phng trnh tr thnh:
[Q]*[R]*[X] = [B]
Nhn hai v ca phng trnh vi [Q]T ta c:
[Q]T[Q]*[R]*[X] = [Q]T[B]
hay:
[R]*[X] = [Q]T[B]
H phng trnh ny d dng tm nghim v [R] l ma trn tam gic. Khi gii h
phng trnh ta dng chng trnh ctqrsol.m:
clear all, clc
145

A = [ 1 2 3 5; 4 5 6 2; 4 6 8 9; 9 3 6 7];
b = [2 4 6 8]';
[q, r] = qrdecomp(A);
c = transpose(q)*b;
x = r\c
5. CC MA TRN C BIT
1. Ma trn ng cho bc 3: Ta xt h phng trnh [A][X] = [B] vi [A] l ma
trn ng cho c dng:
0
d1 e1 0 0
c d e 0
0
1
2
2

0
0 c 2 d 3 e 3
[A] =

#
0
0
c
d
3
4

#
#
#
#
% #

"
0
0
0
c
d
n
1
n

Ta lu cc phn t khc 0 ca [A] di dng vec t:


d1
c1
e1
d
2
c
e

[c] =
[e] = 2
[d ] = #
#
#

n 1
e n 1
c n 1

d n
gim bt s lng phn t cn lu tr.
By gi ta phn tch ma trn theo thut ton Doolittle:
hng k - (ck-1/dk-1)hng k-1 hng k k = 1, 2,, n
v: dk - (ck-1/dk-1)ek-1 dk
hon tt thut vic phn tch, ta lu h s = ck-1/dk-1 vo v tr ca ck-1 trc
ck-1/dk-1 ck-1
Nh vy thut ton phn tch ma trn l:
for k = 2:n
lambda = c(k-1)/d(k-1);
d(k) = d(k) - lambda*e(k-1)
c(k-1) = lambda;
end
Sau ta tm nghim ca phng trnh [L][R][X] = [B] bng cch gii phng
trnh [L][Y] = [B] v sau l phng trnh [R][X] = [Y]. Phng trnh [L][Y] =
[B] c dng:
146

0 "
0 "
0 "
0 "
# "
0 c n 1

0 y 1 b1
0 y 2 b2

0 y 3 b3
=
0 y 4 b4
# " "

1 y n bn
tm nghim [Y] bng cch thay th tin ta dng on lnh:
1 0
c
1
1
0 c2

0 0
# #

0 0

0
0
1
c3
#
0

y(1) = b(1);
for k = 2:n
y(k) = b(k) - c(k-1)*y(k-1);
end
Phng trnh [R][X] = [Y] c dng:
d1 e 1 0 0 " 0 x 1 y 1
0 d e
0 " 0 x2 y2
2
2


0 0 d3 e 3 " 0 x3 y3

=
"
0
0
0
d
0
4

x4 y4
#
#
#
# " # " "


0 0 0 0 0 dn xn y n
tm nghim [X] bng cch thay th li ta dng on lnh:
x(n) = y(n);
for k = n-1:-1:1
x(k) = (y(k) - e(k)*x(k+1))/d(k);
end
Ta xy dng hm band3() phn tch ma trn dng ng cho:
function [c, d, e] = band3(c , d, e)
% Phan tich ma tran A = [c\d\e].
% Cu phap: [c, d, e] = band3(c, d, e)
n = length(d);
for k = 2:n
lambda = c(k-1)/d(k-1);
d(k) = d(k) - lambda*e(k-1);
c(k-1) = lambda;
end
147

Ta vit hm band3sol() dng gii h phng trnh c ma trn [A] dng ng


cho:
function x = band3sol(c ,d, e, b)
% Giai he A*x = b voi A = [c\d\e] la tich LU
% Cu phap: x =band3sol(c, d, e, b)
[c, d, e] = band3(c, d, e);
n = length(d);
for k = 2:n % thay the tien
b(k) = b(k) - c(k-1)*b(k-1);
end
b(n) = b(n)/d(n); % thay the lui
for k = n-1:-1:1
b(k) = (b(k) - e(k)*b(k+1))/d(k);
end
x = b;
Ta dng chng trnh ctband3eq. m gii h phng trnh:
clear all, clc
c = [-1; -2; 3; 3];
d = [6 7 8 7 5]';
e = [2 2 2 -2]';
b = [2; -3; 4; -3; 1];
x = band3sol(c, d, e, b);
2. Ma trn ng cho i xng bc 5: Khi gii phng trnh vi phn thng bc 4
ta thng gp mt h phng trnh i s tuyn tnh dng bng i xng c b rng
bng 5. Ma trn [A] khi c dng:

0
0
0
d1 e1 f1
e d e
f2
0
0
2
2
1
f3
0
f1 e 2 d 3 e 3

0 f2 e 3 d 4
[ A ] =
#
#
#
#
#
#

0 " 0 fn 4 e n 3 d n 2
0 " 0
0 fn3 e n 2

0
0
fn 2
0 " 0
v ta lu ma trn [A] di dng vec t:

0
"
0
"

0
"

0
"
%
#

e n 2 fn2
d n 1 e n 1

e n 1 d n
148

d1
d
1
#
[d ] =
d n 2
d n 1

dn

e1
e
2
[e] = #

e n2
e n 1

f1
f
[f ] = 2
#

fn 2

Ta thc hin thut ton bin i ma trn:


hng (k + 1) - (ek/dk) hng k hng (k + 1)
hng (k + 2) - (fk/dk) hng k hng (k + 2)
Cc s hng b thay i theo thut ton ny l:
dk+1 - (ek/dk) ek dk+1
ek+1 - (ek/dk) fk ek+1
dk+2 - (fk/dk) fk dk+2
v lu tr li:
fk/dk fk
ek/dk ek
sau khi bin i ma trn, ta gii h phng trnh c ma trn tam gic.
Hm band5() dng phn tch ma trn:
function [d, e, f] = band5(d, e, f)
% A = [f\e\d\e\f].
% Cu phap: [d, e, f] = band5(d, e, f)
n = length(d);
for k = 1:n-2
lambda = e(k)/d(k);
d(k+1) = d(k+1) - lambda*e(k);
e(k+1) = e(k+1) - lambda*f(k);
e(k) = lambda;
lambda = f(k)/d(k);
d(k+2) = d(k+2) - lambda*f(k);
f(k) = lambda;
end
lambda = e(n-1)/d(n-1);
d(n) = d(n) - lambda*e(n-1);
e(n-1) = lambda;
Ta vit hm band5sol() gii h phng trnh:
function x = band5sol(d, e, f, b)
% Giai he A*x = b voi A = [f\e\d\e\f]
149

% Cu phap: x = band5sol(d, e, f, b)
[e,d,f ] = band5(e, d, f);
n = length(d);
b(2) = b(2) - e(1)*b(1);
for k = 3:n
b(k) = b(k) - e(k-1)*b(k-1) - f(k-2)*b(k-2);
end
gii h phng trnh
1 1 2 0 0 0 x1 4
1 2 3 1 0 0 x 7

2
2 3 3 2 2 0 x 3 12

=
0
1
2
1
2
1

x4 7
0 0 2 2 2 1 x 5 5


0
0
0
1
1
1

x6 1
ta dng chng trnh cban5eq.m
clear all, clc
d = [1 2 3 1 2 1]';
e = [1 3 2 2 -1]';
f = [2 1 2 1]';
b = [4 7 12 7 5 1];
x = band5sol(d, e, f, b)
6. CC PHNG PHP LP GII H PHNG TRNH
I S TUYN TNH
Ni chung c hai phng php gii h phng trnh i s tuyn tnh: phng
php trc tip v phng php lp. Cc bi ton k thut thng a v h phng
trnh i s tuyn tnh c ma trn [A] tha v ln nn cc phng php lp rt thch
hp.
Cc phng php lp c chia thnh hai loi: phng php lp tnh v
phng php lp ng.
Ta xt h phng trnh i s tuyn tnh [A][X] = [B]. Ta a v dng lp:
[X] = [C][X] + [D]
Sau mi ln tnh ta c s d:
[R] = [B] - [A][X]
Khi lp t phng trnh ny, cc ma trn [C] v [D] khng i. V vy nn cc
phng php xut pht t y gi l cc phng php lp tnh. Cc phng php ny
d hiu, d lp trnh nhng khng hiu qu.
Cc phng php ny gm c:
150

Phng php lp Jacobi: Phng php ny tnh gi tr ca mt bin da trn


gi tr ca cc bin khc. N hi t chm v rt c th khng hi t trong mt
s trng hp.
Phng php lp Gauss - Seidel: N tng t nh phng php lp Jacobi
nhng khi tnh gi tr ca bin th k ta dng cc gi tr cc bin va c cp
nht. Phng php ny hi t nhanh hn phng php lp Jacobi nhng khng
nhanh bng cc phng php lp khng n nh.
Phng php lp c tng SOR: Phng php ny a ra t phng php
Gauss - Seidel bng cch a thm h s ngoi suy . Vi c chn ti u,
phng php ny hi t nhanh hn phng php Gaus - Seidel. Khi = 1
phng php SOR tr thnh phng php Gauss Seidel. Tc hi t ca phng php SOR ph thuc vo
Phng php lp c tng i xng SSOR: Phng php ny khng c u
im no tri hn SOR.
Cc phng php lp khng n nh mi c xy dng, kh hiu, nhng
hiu qu cao. Trong qu trnh lp, vic tnh ton bao hm cc thng tin thay i sau
mi bc tnh.
Cc phng php ny bao gm:
Phng php gradient lin hp CG(Conjugate Gradient): Phng php ny
to ra mt dy cc vec t lin hp (hay trc giao) l s d ca php lp. Chng
cng l gradient ca mt hm bc 2 m vic tm cc tiu tng ng vi vic
gii h phng trnh i s tuyn tnh. Phng php CG rt hiu qu khi ma
trn [A] i xng, xc nh dng v ch i hi lu tr mt s t phn t. Tc
hi t ca phng php ny ph thuc s iu kin ca ma trn (s iu
kin ca ma trn o nhy ca nghim ca h phng trnh i s tuyn tnh
vi sai s trong s liu. N cho bit chnh xc ca kt qu t php nghch
o ma trn v nghim ca h phng trnh i s tuyn tnh).
Phng php s d cc tiu MINRES(Minimum Residual) v phng php
LQ i xng SYMMLQ(Symmetric LQ)
Phng php gradient lin hp dng cho h thng CGNE(Conjugate
Gradient on Normal Equations) v CGNR(Conjugate Gradient on Normal
Equations minimizing the Residual): Cc phng php ny da trn vic p
dng phng php CG vo mt trong hai dng h phng trnh i s tuyn
tnh.
- CNGR dng gii h dng [A]T[A][X] = [B] vi [B] = [A]T[B]
- CGNE dng gii h dng [A][A]T[Y] = [B] i vi [Y] v sau gii
h [X] = [A]T[Y]
Khi ma trn [A] khng i xng, khng suy bin th [A][A]T v [A]T[A] i
xng, xc nh dng nn c th dng phng php CG.
Phng php s d cc tiu tng qut GMRES(Generalized Minimal
Residual): Phng php GMRES tnh ton dy cc vec t trc giao v kt hp
151

cc ny bng bi ton bnh phng b nht gii v cp nht. Tuy nhin n


i hi lu ton b dy. Do vy phng n khi ng li c dng trong
phng php ny. Phng php ny tin dng khi ma trn h s khng i
xng.
Phng php gradient lin hp kp BiCG(Biconjugate Gradient): Phng
php ny to ta hai dy vec t ging nh CG, mt da trn h vi ma trn [A]
v mt da trn [A]T. Thay v trc giao ho mi dy, chng trc giao tng h
hai trc giao kp. N rt hu t khi ma trn c ma trn h s khng i xng,
khng suy bin.
Phng php gn nh s d cc tiu QMR(Quasi - Minimal Residual):
Phng php QMR dng bnh phng ti thiu gii v cp nht s d BiCG.
Phng php ny dng cho h phng trnh c ma trn h s khng i xng.
Phng php gradient lin hp bc 2 CGS(Conjugate Gradient Squared):
Phng php CGS l mt bin th ca BiCG, dng cp nht dy [A] v [A]T.
Phng php ny c u im l khng cn nhn vi ma trn h s chuyn v v
c dng cho h phng trnh i s tuyn tnh c ma trn h s khng i
xng.
Phng php gradient lin hp kp n nh BiCGSTAB(Biconjugate
Gradient Stabilized): Phng php BiCGSTAB cng l mt bin th ca BiCG.
N c dng cho h phng trnh c ma trn h s khng i xng.
Phng php Chebyshev: Phng php ny tnh lp cc a thc vi cc h
s c chn cc tiu ho chun ca s d theo ngha min - max. Ma trn h
s phi xc nh dng. N c dng cho h phng trnh c ma trn h s
khng i xng.
Ta bit rng tc hi t ca php lp ph thuc rt nhiu vo ph ca ma trn(cc
gi tr ring ca ma trn). Do vy php lp thng a thm mt ma trn th hai
bin i ma trn h s thnh ma trn c ph thch hp. Ma trn bin i nh vy gi
l ma trn iu kin trc(preconditioner). Mt preconditioner tt s ci thin s hi
t ca phng php lp. Nhiu trng hp, nu khng c preconditioner, php lp s
khng hi t. Preconditioner n gin nht chnh l ma trn ng cho m Mi,j = Ai,j
nu i = j v cc phn t khc bng zero. Ma trn nh vy gi l ma trn iu kin
trc Jacobi.
Trong tnh ton, tn ti hai loi ma trn iu kin trc:
- ma trn [M] xp x ma trn [A] v lm cho vic gii h [M][X] = [B] d hn
gii h [A][X] = [B]
- ma trn [M] xp x [A]-1 sao cho ch cn tnh [M][B] l c [X]
Phn ln cc ma trn [M] thuc loi th nht.
7. PHNG PHP LP JACOBI
Xt h phng trnh AX = F. Bng cch no ta a h phng trnh v dng
X = BX + G
trong :
152

B = (bij)n,n
G = (g1,g2,...,gn)T
Chn vect:
X = ( x1(o),x2(o),....,xn(o) )T
lm xp x th 0 ca nghim ng v xy dng xp x
X(m+1) = BX(m) + G ( m = 0,1,....)
Ngi ta chng minh rng nu phng trnh ban u c nghim duy nht v
mt trong ba chun ca ma trn B nh hn 1 th dy xp x hi t v nghim duy nht
. Cho mt ma trn B, chun ca ma trn B, k hiu B l mt trong 3 s :
n

B 1 = max b ij
i

j=1
n

B 2 = max b ij
j

j=1

1/ 2

n n

B 3 = b ij2
i =1 j=1
(Chun ca ma trn quan h ti s hi t ca phng php lp)
Ta xy dng hm jacobi() thc hin thut ton trn:
function x = jacobi(a, b, x0, kmax)
%Tim nghiem cua pt Ax = B bang thuat toan Jacobi.
%Cu phap: x = jacobi(a, b, x0, kmax)
% hay jacobi(a, b, x0, kmax)
if nargin < 4
tol = 1e-6;
kmax = 100; % jacobi(a, b, x0)
elseif kmax < 1
tol = max(kmax, 1e-16);
kmax = 100; %jacobi(a, b, x0, tol)
else
tol = 1e-6; %jacobi(a, b, x0, kmax)
end
if nargin < 3
x0 = zeros(size(b)); end
na = size(a, 1);
x = x0;
At = zeros(na, na);
for m = 1:na
for n = 1:na
if n ~= m
At(m, n) = -a(m, n)/a(m, m);
153

end
end
Bt(m, :) = b(m, :)/a(m, m);
end
for k = 1: kmax
x = At*x + Bt;
if nargout == 0,
x
end
if norm(x - x0)/(norm(x0) + eps) < tol
break;
end
x0 = x;
end
gii phng trnh ta chng trnh ctjacobi.m:
b = [1 -1]';
a = [3 2;1 2];
x0 = [0 0]';
x = jacobi(a, b, x0, 20)
8. PHNG PHP LP GAUSS - SEIDEL
Phng php lp Gauss - Seidel c ci tin t phng php Jacobi. Ni dung
c bn ca phng php l ch khi tnh nghim xp x th (k+1) ca n xi ta s
dng cc xp x th (k+1) tnh ca cc n x1,...,xi-1. Gi s
cho h [A][X] = [B] th ta c nghim :
n

x i = i + ij x j

i = 1,..., n

j=1

Ly xp x ban u tu x1(o) , x2(o) ,...., xn(o) v tt nhin ta c gng ly chng tng


ng vi x1, x2 ,..., xn (cng gn cng tt). Tip theo ta gi s rng bit xp x th k
xi(k) ca nghim. Theo Seidel ta s tm xp x th (k+1) ca nghim theo cc cng
thc sau :
n

x (1k +1) = 1 + ij x (j k )
j=1

( k + 1)
2

= 1 + 21 x

( k + 1)
1

+ ij x (j k )
j= 2

......
i 1

j=1

j= i

x (i k +1) = i + ij x (j k +1) + ij x (j k )

......
154

n 1

x (nk +1) = n + ij x (j k +1) + nn x (nk )


j=1

Thng thng phng php Gauss - Seidel hi t nhanh hn phng php


Jacobi nhng tnh ton phc tp hn. D d hiu phng php ny chng ta xt mt
v d c th:
Cho h phng trnh :
10 x 1 + x 2 + x 3 = 12

2 x 1 + 10x 2 + x 3 = 13
2 x + 2x + 10 x = 14
2
3
1
nghim ng ca h l (1 , 1, 1)
Ta a v dng thun tin cho php lp :
x 1 = 1.2 0.1x 2 0.1x 3

x 2 = 1.3 0.2 x 1 0.1x 3


x = 1.4 0.2 x 0.2 x
1
2
3
(o)
(o)
(o)
Ly x1 = 1.2 ; x2 = 0 ; x3 = 0
S dng phng php lp Gauss - Seidel ta c:
x(1)
1 = 1.2 0.1 0 0.1 0 = 1.2
(1)
x 2 = 1.3 0.2 1.2 0.1 0 = 1.06
(1)
x 3 = 1.4 0.2 1.2 0.2 1.06 = 0.948

x(2)
1 = 1.2 0.1 1.06 0.1 0.948 = 0.9992
(2)
x 2 = 1.3 0.2 0.9992 0.1 0.948 = 1.00536
(2)
x 3 = 1.4 0.2 0.9992 0.2 1.00536 = 0.999098
v c th tip tc cho n khi hi t. Ta xy dng hm gausseidel() thc hin thut
ton trn:
function x = gausseidel(a, b, x0, kmax)
%Tim nghiem cua he AX = B bang cach lap GaussSeidel.
if nargin < 4
kmax = 100;
end
if nargin < 3

155

x0 = zeros(size(b));
kmax = 100;
end
na = size(a,1);
x = x0;
for k = 1: kmax
x(1, :) = (b(1, :) - a(1, 2:na)*x(2: na, :))/a(1,1);
for m = 2:na-1
tmp = b(m, :) - a(m, 1:m-1)*x(1: m - 1, :) - a(m, m + 1:na)*x(m + 1:na,:);
x(m, :) = tmp/a(m, m);
end
x(na, :) = (b(na,:) - a(na,1:na - 1)*x(1:na - 1,:))/a(na, na);
err = sqrt(x - x0)'*(x - x0);
if err < eps
break;
end
x0 = x;
end
if k == kmax
fprintf('Khong hoi tu sau %d lan lap',kmax);
else
fprintf('Hoi tu sau %d lan lap',k);
end
gii phng trnh ta chng trnh ctgausseidel.m:
b = [1 -1]';
a = [3 2;1 2];
x0 = [0 0]';
x = gausseidel(a, b, x0, 20)
9. PHNG PHP LP RICHARDSON
Trong cc php lp ni trn, ma trn [B] khng thay i. By gi ta xt cc
phng php lp c [B] thay i. Phng php n gin nht l phng
php lp Richardson. Ta c cng thc lp sau:
x(k +1) = x(k) + P 1r(k)
Trong l thng s relaxation v s d r(k) c tnh bng:
r(k) = b Ax(k)
Ma trn lp ln k l:
B k = E k P 1 A

159

Nh vy php lp Jacobi cng nh php lp Gauss - Seidel l trng hp ring ca


php lp Richardson vi = 1, P = D hay P = D + L. Ngi ta chng minh l php
lp Richardson hi t khi:
2Re( i )
0<<
2
i
Ta xy dng hm richardsoniter() thc hin thut ton trn:
function x = richardsoniter(a, b, x, maxiter, tol)
d = eig(a);
k = length(d);
alfa1 = abs(2*real(d(1))/(abs(d(1))^2));
for j = 2:k
alfa = abs(2*real(d(j))/(abs(d(j))^2));
if alfa < alfa1
alfa1 = alfa;
end
end
omega = alfa1/2;
for i = 1:maxiter
r = b - a*x;
x = x + omega*r;
if norm(r) < tol
break;
end
end
i
gii h phng trnh ta dng chng trnh ctrichardsoniter.m
clear all, clc
a = [ 10 1 1;1 10 2; 2 2 10];
b = [12 13 14]';
x = [ 0 0 0]';
maxiter = 50;
tol = 1e-6;
x = richardsoniter(a, b, x, maxiter, tol)
10. PHNG PHP SOR
Gi s ta dng phng php lp gii h phng trnh tuyn tnh [A][X] =
[B] v [Xk] l nghim gn ng. Nh vy ta c vec t s d l:
[Rk] = [B] - [A][Xk]
160

Nu xp x tt th [Rk] 0. Mt phng php da trn vic gim chun ca vec t d


s to ra dy s [Xk] hi t nhanh hn. Phng php SOR(succesive over relaxtion l phng php gii cc phng trnh trong sai s c gim lin tip cho n khi
t c sai s mong mun) a vo mt tham s tng tc hi t.
Ta kho st ma trn [A] bc n. Ta chia [A] thnh 3 phn: phn ng cho
chnh [D], phn bn di ng cho chnh [L] v phn bn trn ng cho chnh
[U].

a11 a12 " a1n a11


a
a 22 " a 2n 0
21
=
% #
# #
#


a n1 a n 2 " a nn 0
0
a
21

a n1

0
a 22
#
0

"

0
" 0

% #

" a nn

" 0 0 a12 " a1n


0 " a 2n
" 0 0

% # # %
#
#

0 "
0
" 0 0
Khi cho gi tr ca tham s , thng chn trong khong 0 < < 2, nghim
ca h phng trnh tuyn tnh, khi cho gi tr ban u [X0] c tnh bng cng thc
lp:
[Xk+1] = M[Xk] + C
Trong :
M = ([D] - [L])-1{ (1 - )[D] + [U]}
C = ([D] - [L])-1[B]
Khai trin cc phn t ta c:

+1)
(k)
(k +1)
(k)
=

x(k
1
x
b
a
x
a
x
(
)

i
i
i
ij j
ij j
a ii
j< i
j> i

0
0
#
a n 2

Phng php rt hiu qu khi s phng trnh ln. Nu = 1 ta c php lp Gauss Seidel.
Ta xy dng hm soriter() thc hin thut ton ny.
function y = soriter(a, b, omega, x0, kmax)
%cu phap y = soriter(a, b, omega, x0, kmax)
% giai he pt bang pp SOR
%vao
% - a, b la cac ma tran he so
% - x0 la nghiem ban dau
% - kmax so lan lap max
%ra
161

% - x la nghiem
n = size(a,1);
if nargin < 5
kmax = 100;
end
if nargin < 4
kmax = 100;
x0 = zeros(1,n);
end
if nargin < 3
kmax = 100;
x0 = zeros(1,n);
omega = 1;
end
if size(x0, 1) ==1
x0 = x0';
end
x = x0;
kmax = 100;
for k = 1: kmax
x(1, :) = (1-omega)*x(1,:) + omega*(b(1, :) - a(1, 2:n)*x(2: n, :))/a(1,1);
for m = 2:n-1
tmp = b(m, :) - a(m, 1:m-1)*x(1: m - 1, :) - a(m, m + 1:n)*x(m + 1:n,:);
x(m, :) = (1 - omega)*x(m,:) + tmp*omega/a(m, m);
end
x(n, :) = (1 - omega)*x(n,:) + omega*(b(n,:) - a(n,1:n - 1)*x(1:n - 1,:))/a(n,
n);
err = sqrt((x - x0)'*(x - x0));
if err < eps
break;
end
x0 = x;
end
if k == kmax
fprintf('Khong hoi tu sau %d lan lap',kmax);
else
fprintf('Hoi tu sau %d lan lap',k);
end
y = x;
gii h phng trnh

162

10 x 1 + x 2 + x 3 = 12

2 x 1 + 10x 2 + x 3 = 13
2 x + 2x + 10 x = 14
2
3
1
ta dng chng trnh ctsoriter.m
clear all, clc
a=[2 1 0 0 0 0 0
1 2 1 0 0 0 0
0 1 2 1 0 0 0
0 0 1 2 1 0 0
0 0 0 1 2 1 0
0 0 0 0 1 2 1
0 0 0 0 0 1 2
0 0 0 0 0 0 1
0 0 0 0 0 0 0
b = [1; 2; 3; 4; 5; 4; 3; 2; 1];
x0 = [1 1 1 1 1 1 1 1 1 ];
x = soriter(a, b,1.25, x0, 500)

0
0
0
0
0
0
1
2
1

0;
0;
0;
0;
0;
0;
0;
1;
2];

11. PHNG PHP SSOR


Nu ma trn h s [A] l i xng th php lp SSOR kt hp hai ln tnh theo
SOR sao cho ma trn kt qu ging vi ma trn i xng. c bit ln thc hin SOR
u tin l:
xk = ([D] - [L])-1{[U] + (1 - )[D]}xk-1 + ([D] - [L])-1[B]
Ln thc hin SOR th hai cc n s c cp nht theo hng ngc li. Nh vy
SSOR l lp SOR thun v sau l SOR ngc.
Di dng ma trn, php lp SSOR l:
[Xk] = [B1][B2][Xk-1] + (2 - )([D] - [U])-1[D]([D] - [L])-1[B]
Trong :
[B1] = ([D] - [U])-1{[L] - (1 - )[D]}
[B2] = ([D] - [L])-1{[U] - (1 - )[D]}
[B2] l ma trn ca php lp SOR cn [B2] cng tng t nhng i vai tr ca
[U] v [L]
Ta xy dng hm ssoriter() thc hin thut ton ny:
function x = ssoriter(a, b, x1, omega, maxiter, tol)
% ham thuc hien thuat toan SSOR
if size(x1, 1) == 1
x1 = x1';
end
n = length(a);
163

d = zeros(n);
for i = 1:n
d(i, i) = a(i, i);
end
l = tril(a);
for i = 1:n
l(i, i) = 0;
end;
u = triu(a);
for i = 1:n
u(i, i) = 0;
end;
u = -u;
l = - l;
b1 = inv(d - omega*u)*(omega*l + (1 - omega)*d);
b2 = inv(d - omega*l)*(omega*u + (1 - omega)*d);
for k = 1: maxiter
x = b1*b2*x1 + omega*(2 - omega)*inv(d - omega*u)*d*inv(d omega*l)*b;
if norm(x - x1) <= tol
break;
end
x1 = x;
end
gii h phng trnh ta dng chng trnh ctssoriter.m
clear all, clc
a = [4 -1 1;-1 4 -2;1 -2 4];
b = [ 12 -1 5]';
maxiter = 50;
tol = 1e-6;
x1 = [0 0 0]';
omega = 1.2;
x = ssoriter(a, b, x1, omega, maxiter, tol)
12. PHNG PHP ARNOLDI V LANCZOS
Mt bin th ca thut ton Arnoldi l thut ton do nh ton hc Hungary
Lanczos a ra. Thut ton gm cc bc sau:
- cho [X0]
- tnh [R0] = [B] - [A][X0]
[R ]
- = R 0 2 v v1 = 0

164

- lp k = 0, 1, 2,..., maxiter
w = [ A ] v j v j1 nu j = 1 cho 1v0 0

= w Tj v j
wj = wj - jvj
j+1 = w j nu j+1 = 0 thot khi vng lp
2

vj+1 =

wj
j+1

- Tm = tridiag(j, i, j+1)
- V = [v1, v2,..., vm]
- y = Tm1 ( e1 )
- xm = x0 + Vmym
Ta xy dng hm lanczos4sys() thc hin thut ton trn
function x = lanczos4sys(a, b, x0, maxiter, tol)
% hamf giai he phuong trinh bang thuat toan Lanczos
r0 = b - a*x0;
nres0 = norm(r0, 2);
if nres0 ~= 0
V = r0/nres0;
Z = V;
gamma(1) = 0;
beta(1) = 0;
k = 1;
nres = 1;
while k <= maxiter & nres > tol
vk = V(:, k);
zk = Z(:, k);
if k == 1,
vk1 = 0*vk;
zk1 = 0*zk;
else
vk1 = V(:, k-1);
zk1 = Z(:, k-1);
end
alpha(k) = zk'*a*vk;
tildev = a*vk - alpha(k)*vk - beta(k)*vk1;
tildez = a'*zk - alpha(k)*zk - gamma(k)*zk1;
gamma(k+1) = sqrt(abs(tildez'*tildev));
if gamma(k+1) == 0
165

k = maxiter + 2;
else
beta(k+1) = tildez'*tildev/gamma(k+1);
Z = [Z, tildez/beta(k+1)];
V = [V,tildev/gamma(k+1)];
end
if k ~= maxiter + 2
if k == 1
Tk = alpha;
else
Tk = diag(alpha) + diag(beta(2:k),1) + diag(gamma(2:k),-1);
end
yk = Tk \ (nres0*[1,0*[1:k-1]]');
xk = x0 + V(:, 1:k)*yk;
nres = abs(gamma(k+1)*[0*[1:k-1], 1]*yk)*norm(V(:, k+1), 2)/nres0;
k = k+1;
end
end
else
x = x0;
end
if k == maxiter + 2
niter = -k;
else
niter = k - 1;
end
gii h phng trnh ta dng chng trnh ctlanczos.m
clear all, clc
a = [ 1 3 5; 3 2 4; 5 4 6];
b = [ 9 9 15]';
maxiter = 50;
tol = 1e-6;
x0 = [0 0 0]';
x = lanczos4sys(a, b, x0, maxiter, tol)
13. PHNG PHP DC LN NHT
Ta kho st bi ton tm cc tr ca hm
f([X]) = 0.5[X]T[A][X] - [B][X]
(1)
vi [A] l ma trn i xng, xc nh dng.
Do f([X]) t cc tr khi gradient f([X]) = [A][X] - [B] = 0 nn bi ton tm cc
tr tng ng vi vic gii h phng trnh i s tuyn tnh:
166

[A][X] = [B]
(2)
Ta bit rng gradient l hng hm tng nhanh nht. Nh th mun i n cc tiu ta
cho [X], tnh gradient v tm theo hng ngc li cho n khi hm khng gim na.
Phng php dc ln nht (steepest descent) thc hin thut ton lp, bt u t
[X0]. Ti ln lp th k, nghim c hiu chnh bng:
(3)
[Xk+1] = [Xk] + k[Rk]
Gi tr ca c xc nh bng:
T
R k ] [R k ]
[
k =
T
[ R k ] [ A ][ R k ]
Nh vy thut ton steepest descent l:
- cho [X0]
- tnh [R0] = [B] - [A][X0]
- lp k = 1, 2,...
T
R k ] [R k ]
[
k =
T
[ R k ] [ A ][ R k ]
[Xk+1] = [Xk] + k[Rk]
[Rk+1] = [B] - [A][Xk+1]
cho n khi hi t
Thut ton ny c nhc im l hi t khng nhanh.
Ta xy dng hm steepest() thc hin thut ton trn:
function x = steepest(a, b, x, maxiter, tol)
% Steepest descent
r = b - a*x;
k = 1;
while k <= maxiter & norm(r)>tol
ar = a*r;
alpha = (r'*r)/(r'*ar);
x = x + alpha*r;
r = r - alpha*ar;
k = k + 1;
end
gii h phng trnh ta dng chng trnh ctsteepest.m
clear all, clc
a = [4 -1 1;-1 4 -2;1 -2 4];
b = [ 12 -1 5]';
maxiter = 50;
tol = 1e-6;
x = [0 0 0]';
167

x = steepest(a, b, x, maxiter, tol)


14. PHNG PHP CG
Thut ton gradient lin hp c Hestennes v Stiefel trnh by nm 1952. N
thch hp gii cc h phng trnh c ma trn [A] i xng, xc
nh dng. N l trng hp c bit ca phng php Lanczos khi ma trn h s
i xng, xc nh dng.
Phng php gradient thc hin thut ton lp, bt u t [X0]. Ti ln lp th
k, nghim c hiu chnh bng:
(1)
[Xk+1] = [Xk] + k[Sk]
di ca k c chn sao cho [Xk+1] cc tiu f([Xk+1]) theo hng tm [Sk]. Nh
vy [Xk+1] phi tho mn:
(2)
[A]([Xk] + k[Sk]) = [B]
S d ca php lp l:
[Rk] = [B] - [A][Xk]
(2)
Nh vy (4) tr thnh:
k[A][Sk] = [Rk]
(4)
T
Nhn c hai v ca (4) vi [Sk] ta c:
T
Sk ] [R k ]
[
k =
(5)
T
[ S k ] [ A ][ S k ]
Ta chn [Sk] theo gradient lin hp:
(6)
[Sk+1] = [Rk+1] + k[Sk]
Hng s k sao cho hai hng tm lin tip lin hp vi nhau, ngha l:
T
(7)
[ S k + 1 ] [ A ][ S k ] = 0

]T + k [S k ])[ A][S k ] = 0 , nn:


T
R k + 1 ] [ A ][ S k ]
[
k =
T
[ S k ] [ A ][ S k ]

Nh vy

([ R

k +1

(8)

Nh vy thut ton gradient lin hp l:


- cho [X0]
- tnh [R0] = [B] - [A][X0]
- [R0] = [S0]
- lp k = 0, 1, 2,...
T
Sk ] [R k ]
[
k =
T
[ S k ] [ A ][ S k ]
[Xk+1] = [Xk] + k[Sk]
[Rk+1] = [B] - [A][Xk+1]

168

[ R ] [ A ][ S k ]
k = k+1T
[ S k ] [ A ][ S k ]
T

[Sk+1] = [Rk+1] + k[Sk]


cho n khi hi t
Ta xy dng hm conjgradient() thc hin thut ton trn
function x = conjgradient ( a, b, x1, maxiter, tol )
% giai pt AX = B bang pp gradient lien hop
% cu phap
% x = conjgradient ( a, b, x1, maxiter, tol )
if nargin < 5
tol = 1e-6;
end
if nargin < 4
tol = 1e-6;
maxiter = 50;
end
if size(x1, 1) == 1
x1 = x1';
end
r1 = b - a*x1;
s1 = r1;
for k = 1:maxiter
alfa = (s1'*r1)/(s1'*a*s1);
x2 = x1 + alfa*s1;
r2 = b - a*x2;
if norm(r2) < tol
break
end
beta = -(r2'*a*s1)/(s1'*a*s1);
s2 = r2 + beta*s1;
s1 = s2;
x1 = x2;
end
x = x2
gii h phng trnh ta dng chng trnh ctconjgradient.m
clear all, clc
a = [4 -1 1;-1 4 -2;1 -2 4];
b = [ 12 -1 5]';
169

maxiter = 50;
tol = 1e-6;
x1 = [0 0 0]';
x = conjgradient(a, b, x1, maxiter, tol);
Ta cng c th dng k thut preconditionning cho phng php CG. Thut ton s
l:
- Chn [X0]
- tnh [R0] = [B] - [A][X0]
- Lp t i = 1, 2,..,maxiter
[Zi-1] = [M]-1[Ri-1]
T
i1 = [ R i1 ] [ Z i1 ]
Nu i = 1
[P1] = [Z0]
khng th:

i1 = i1
i 2
[Pi] = [Zi-1] + i-1[Pi-1]
[Qi] = [A][Pi]
i1
i =
T
[Pi ] [Qi ]
[Xi] = [Xi-1] + i[Pi]
[Ri] = [Ri-1] - i[Qi]
cho n khi hi t
Ta xy dng hm pcg() thc hin thut ton trn
function y = pcg ( a, b, x, M, maxiter, tol )
% giai pt AX = B bang pp gradient lien hop co preconditionner
% cu phap
% x = conjgradient ( a, b, x1, M, maxiter, tol )
r = b - a*x;
if nargin < 6
tol = 1e-6;
end
if nargin < 6
tol = 1e-6;
maxiter = 50;
end
170

if size(x, 1) == 1
x = x';
end
for iter = 1 : maxiter
z = M\r;
rho = ( r' * z );
if ( iter == 1 )
p = z;
else
beta = rho / rho_1;
p = z + beta * p;
end
q = a * p;
alpha = rho / ( p' * q );
x = x + alpha * p;
r = r - alpha*q;
if norm(r) < tol
break;
end
rho_1 = rho;
end
y = x;
gii h phng trnh ta dng chng trnh ctpcg.m
clear all, clc
a = [4 -1 1;-1 4 -2;1 -2 4];
b = [ 12 -1 5]';
maxiter = 50;
tol = 1e-6;
x = [0 0 0]';
for i = 1:3
M(i, i) = a(i, i);
end
x = pcg(a, b, x, M, maxiter, tol)
15. PHNG PHP CGNE
Ta xt h phng trnh
[A][X] = [B]
Khi ma trn [A] khng i xng v khng suy bin th [A][A]T s i xng v
xc nh dng nn c th p dng thut ton CG. Thut ton CGNE(thut ton
Craig) gm cc bc:
171

Chn [X0], tnh [R0] = [B] - [A][X0]


Tnh [S0] = [A]T[R0]
[P0] = [S0]
Lp cho n khi hi t
- [Vk] = [A][Pk]
T
S k1 ] [ S k1 ]
[
- k =
T
[ Vk1 ] [ Vk1 ]
- [Xk] = [Xk-1] + k[Pk-1]
- [Rk] = [Rk-1] - k[Vk]
- [Sk] = [A]T[Rk]
T
Sk ] [Sk ]
[
- k =
T
[ S k1 ] [S k1 ]
- [Pk] = [Sk] + k[Pk-1]
Ta xy dng hm cgne() thc hin thut ton trn
function x = cgne(a, b, x0, maxiter, tol) ;
%Ham nay thuc hien thuat toan CGNE
x = x0(:,:);
i = 1;
r = b - a*x;
s = a'*r;
p = s;
delta1 = norm(s)^2;
rnorm = norm(r);
rho = rnorm;
while ((rnorm/rho > tol) & (i < maxiter))
v = a*p;
alfa = delta1/norm(v)^2;
x = x + alfa*p;
r = r - alfa*v;
rnorm = norm(r);
s = a'*r;
delta2 = norm(s)^2;
beta = delta2/delta1;
p = s + beta*p;
delta1 = delta2;
i = i + 1;
end
gii h phng trnh ta dng chng trnh ctcgne.m
172

clear all, clc


a = [ 1 3 4; 2 5 7; 3 1 2];
b = [8 14 6]';
maxiter = 50;
tol = 1e-6;
x0 = [0 0 0]';
x = cgne(a, b, x0, maxiter, tol)
16. PHNG PHP CGNR
Khi ma trn h s [A] khng i xng ta khng dng c phng php CG.
V vy ta cn bin i h phng trnh dng c phng php CG. Xt h
phng trnh:
[A][X] = [B]
Ta a h v dng:
[A]T[M][A][X] = [A]T[M][B]
hay
X = B
A

v B i xng nn c th dng c phng php CG. Thut
vi cc ma trn A


ton ca phng php CGNR l:
X v v = r
- Cho [X0] tnh r = B A
0
- Lp cho n khi hi t
rkT rk
k = T

v k ([A]v
k)
x k +1 = x k k v k
v
rk+1 = rk k A
k
rkT rk
k = T
`
rk1rk1
v k +1 = rk +1 + k v k
Ta xy dng hm cgnr() thc hin thut ton trn

function x = cgnr(a, b, x, maxiter, tol)


% dung thuat toan cgnr der giai he phuong trinh
n = size(a,1);
m = ones(n,1);
m = diag(m);
m = 1.2*m;
am = a'*m*a;
173

bm = a'*m*b;
r = bm - am*x;
v = r;
delta1 = norm(r)^2;
for k = 1:maxiter
if norm(r) < tol
break
end
alfa = norm(r)^2/(v'*(am*v));
x = x + alfa*v;
r = r - alfa*am*v;
delta2 = norm(r)^2;
beta = delta2/delta1;
v = r + beta*v;
delta1 = delta2;
end
gii h phng trnh ta dng chng trnh ctcgnr.m
clear all, clc
a = [ 1 3 4; 2 5 7; 3 1 2];
b = [8 14 6]';
maxiter = 50;
tol = 1e-6;
x = [0 0 0]';
x = cgnr(a, b, x, maxiter, tol)
17. PHNG PHP CGLS
Phng php CGLS cng dng gii cc h phng trnh c ma trn h
s khng i xng vi cch tnh sao cho tng bnh phng s d b nht. Do vy ta
phi cho [ A ][ X ] [ B] 2 min. Thut ton CGLS gm cc bc sau:

174

- Cho [X0] tnh [ r ] = [ B] [ A ][ X 0 ] , [d] = [A]T[r] v = [d]T[d]


- Lp cho n khi hi t
k 1
k =
([A][d ])T ([A][d ])
x k +1 = x k k d k

rk+1 = rk k[ A ] d k

s k = [ A ] rk
sTk s k
k = T
s k1s k1
d k +1 = s k + k d k
Ta xy dng hm cgls() thc hin thut ton trn.
`

function x = cgls(a, b, x, maxiter, tol)


r = b - a*x;
d = a'*r;
rho1 = d'*d;
for j = 1:maxiter
ad = a*d;
alpha = rho1/(ad'*ad);
x = x + alpha*d;
r = r - alpha*ad;
s = a'*r;
rho2 = s'*s;
beta = rho2/rho1;
rho1 = rho2;
d = s + beta*d;
if norm(r) < 1e-6
break;
end
end
gii h phng trnh ta dng chng trnh ctcgls.m
clear all, clc
a = [ 1 3 4; 2 5 7; 3 1 2];
b = [8 14 6]';
maxiter = 50;
x = [0 0 0]';
tol = 1e-6;
x = cgls(a, b, x, maxiter, tol)
177

Nu dng k thut preconditionning vi ma trn [m] th thut ton s l:


- Cho [X0]
2
tnh [ r ] = [ B] [ A ][ X 0 ] , [p] =[m]-1[A]T[r], [s] = [p] v = s 2
- Lp cho n khi hi t
tk = [s]-1pk
qk = [A]tk

k = k 2
qk 2

x k +1 = x k k t k
rk+1 = rk k q k

s k+1 = [ m ] ([ A ] rk+1 )

k +1 = k +1
k
p k + 1 = s k +1 + k p k
1

Ta xy dng hm cglsp() thc hin thut ton trn.


function x = cglsp(a, b, x, maxiter, tol)
%giai he bg thuat toan CGLS co preconditionning
n = size(a,1);
m = ones(n,1);
m = diag(m);
m = 1.*m;
r = b - a*x;
p = inv(m)*(a'*r);
s = p;
k = 1;
gamma1 = norm(s)^2;
while k <= maxiter & norm(r) > tol
t = inv(m)*p;
q = a*t;
alfa = gamma1/(norm(q)^2);
x = x + alfa*t;
r = r - alfa*q;
s = inv(m)*(a'*r);
gamma2 = norm(s)^2;
beta = gamma2/gamma1;
gamma1 = gamma2;
178

p = s + beta*p;
k = k + 1;
end
18. PHNG PHP BiCG
Phng php gadient lin hp khng thch hp cho h phng trnh khng i
xng v cc vec t s d khng th trc giao vi mt s t ln lp. Phng php
gradient lin hp kp thay th dy vec t d trc giao bng hai dy trc giao tng
h.
Khi cp nht s d ta dng ma trn [A]T thay cho ma trn [A]. Nh vy ta c:
T
R i = R i1 i A P i
[R i ] = [R i1 ] i [ A ][Pi ]
v hai dy hng tm:
P i = R i1 + i1 P i1
[Pi ] = [R i1 ] + i1 [Pi1 ]


Vic chn:
T
T
R i1 R i1
R i R i

i = T
i = T
R i1 R i1
P i A Pi


bo m quan h trc giao kp:
T
T
R i R j = P i A Pj = 0
nu i j


Ta xy dng hm biconjgrad() thc hin thut ton trn
function x = biconjgrad(a, b, x, maxiter, tol)
%ham thuc hien thuat toan gradient lien hop kep
if size(x, 1) ==1
x = x';
end
r = b - a*x;
rn = r;
for i = 1:maxiter
z = r;
zn = rn;
rho = z'*rn;
if rho == 0
error(' Khong dung duoc phuong phap nay!');
break;
end
if i == 1
p = z;
pn = zn;
else
179

beta = rho/rho1;
p = z + beta*p;
pn = zn + beta*pn;
end
q = a*p;
qn = a*pn;
alfa = rho/(pn'*q);
x = x + alfa*p;
r = r - alfa*q;
rn = rn - alfa*qn;
if norm(r) <= tol
break
end
rho1 = rho;
end
gii h phng trnh ta dng chng trnh ctbiconjgrad.m
clear all, clc
a = [4 -1 1;-1 4 -2;1 -2 4];
b = [ 12 -1 5]';
maxiter = 50;
tol = 1e-6;
x = [0 0 0]';
x = biconjgrad(a, b, x, maxiter, tol)
19. PHNG PHP BiCGSTAB
Phng php gradient lin hp kp n nh c xy dng gii cc h
phng trnh tuyn tnh khng i xng. Thut ton gm c cc bc sau:
- cho vec t nghim ban u tnh [X0] ta tnh [R0] = [B] - [A][X0]
- ta chn R . n giin ta chn R = [ R 0 ]
- thc hin cc bc lp
T
i1 = R [ R i1 ]
nu i = 1 th [ P1 ] = [ R 0 ]

i1 = i1 i1
i2 i1

[ Pi ] = [ R i1 ] + i1 ([ Pi1 ] + i1 [ Vi1 ])
nu c iu kin trc ta gii h M P = Pi

180

Vi = A P
i 1
i =
T
R Vi

[ S ] = [ R i1 ] i [ Vi ]
kim tra chun ca [S]. Nu nh th X i = X i1 + i P v dng

gii h phng trnh M S = S



T = A S

T
[T ] [S]
i =
[ T ]T [ T ]
X i = X i1 + i P + i S


[ R i ] = [ S ] i [ T ]
cho n khi hi t
Ta xy dng hm bicgstab() thc hin thut ton ny
function x = bicgstab ( a, b, x, maxiter, tol )
% ham dung giai he pt bang pp gradient kep on dinh
if size(x, 1) == 1
x = x';
end
iter = 0;
r = b - a*x;
err = norm(r);
if ( err < tol )
fprintf('Hoi tu sau %d lan lap', iter);
return
end
omega = 1.0;
rm = r;
for iter = 1 : maxiter
rho = rm' * r;
if ( rho == 0.0 )
fprintf('Khong su dung duoc phuong phap nay');
break
end
if ( 1 < iter )
beta = ( rho/rho1 )*( alfa/omega );
p = r + beta*( p - omega*v );
181

else
p = r;
end
ph = p;
v = a*ph;
alfa = rho/( rm'*v );
s = r - alfa*v;
if ( norm ( s ) < tol )
fprintf('Phep lap hoi tu sau %d lan lap', iter);
x = x + alfa*ph;
resid = norm(s);
err = norm(s);
break;
end
sh = s;
t = a*sh;
omega = ( t'*s )/( t'*t );
x = x + alfa*ph + omega*sh;
r = s - omega*t;
err = norm(r);
if (err <= tol)
fprintf('Phep lap hoi tu sau %d lan lap', iter)
break
end
if ( omega == 0.0 )
fprintf('Khong dung duoc phuong phap nay');
break
end
rho1 = rho;
end
gii phng trnh ta dng chng trnh ctbicgstab.m
clear all, clc
a = [4 -1 1;-1 4 -2;1 -2 4];
b = [ 12 -1 5]';
maxiter = 50;
tol = 1e-6;
x = [0 0 0]';
x = bicgstab ( a, b, x, maxiter, tol )
20. PHNG PHP CGS
182

Phng php gradient lin hp bc 2 c Sonneveld a ra. N l mt bin


th ca phng php BiCG. Thut ton gm c cc bc sau:
- cho vec t nghim ban u tnh [X0] ta tnh [R0] = [B] - [A][X0]
T
- ta chn R sao cho R 0 R 0 . n giin ta chn R = [ R 0 ]
- thc hin cc bc lp
T
i1 = R [ R i1 ]
nu i = 1 th [ P1 ] = [ U1 ] = [ R 0 ]

i1 = i1
i 2
[ U i ] = [ R i1 ] + i1 [ Qi1 ]

[ Pi ] = [ U i ] + i1 ([ Qi1 ] + i1 [ Pi1 ])

nu c iu kin trc ta gii h [ M ] P = [ Pi ]


= A P
V

i 1
i =
T

R V

Qi = U i i V


= U + Q
gii h phng trnh M U
i i

X i = X i1 + i U

= A U

R i = R i1 i A Q

cho n khi hi t
Ta xy dng hm conjgradsq() thc hin thut ton trn:
function x = conjgradsq(a, b, x, maxiter, tol)
%ham thuc hien thuat toan gradient lien hop bac hai
if size(x, 1) ==1
x = x';
end
r = b - a*x;
rn = r;
for i = 1:maxiter
rho = rn'*r;
if rho == 0
183

error(' Khong dung duoc phuong phap nay!');


break;
end
if i == 1
u = r;
p = u;
else
beta = rho/rho1;
u = r + beta*q;
p = u + beta*(q + beta*p1);
end
pm = p;
vm = a*pm;
alfa = rho/(rn'*vm);
q = u - alfa*vm;
um = u + q;
x = x + alfa*um;
qm = a*um;
r = r - alfa*qm;
if norm(r) <= tol
break
end
rho1 = rho;
p1 = p;
end
gii h phng trnh ta dng chng trnh ctconjgradsq.m:
clear all, clc
a = [4 -1 1;-1 4 -2;1 -2 4];
b = [ 12 -1 5]';
maxiter = 50;
tol = 1e-6;
x = [0 0 0]';
x = conjgradsq(a, b, x, maxiter, tol)
21. PHNG PHP MINRES
Phng php ny nhm cc tiu ho s d [R] = [B] - [A][X]. Php lp tm
nghim ca h phng trnh cho bi:
x(k+1) = x(k) + kp(k)
vi p(k) l hng tm.
S d ca php lp:
184

r(k+1) = r(k) - k[A][R(k)] + kbk-1[A]p(k-1)


Cc h s c chn tng tnh trc giao. Nu [A] i xng, ta thy rng s d
c cc tiu ho v ta c thut ton MINRES. Thut ton c th gm cc bc sau:
- Cho [X0], tnh:
[R] = [B] - [A][X0], 0 = R 0 , v = 0; vnew = [R0]/0, new = 0
c = 0, s = 0, cnew = 1, snew = 0
p = 0, pnew = 0
- Lp vi k = 1, 2,
%thut ton Lanczos tm Tk
= new
[vold]= [v]; [v] = [vnew]
[vnew] = [A][v] - [vold]
= [vnew]T[v]
[vnew] = [vnew] - [v]
new = v new

v new
v = new

%dng php quay trn ct cui ca Tk


clod = c, sold = s, c = cnew, s = snew
1 = slod
2 = c.clod + s
 3 = c sc old
%loi tr Tk(k+1, k)
=  3 + new
new

= 3 + new


c new = 3

s new = new

3 =
%Tnh Pk
pold = p, p = pnew
v 1pold 2 pold
new
p =
3
%tnh x
x = x + cnewpnew
2

185

% iu kin ngng lp
= -snew

cho n khi
0
Ta xy dng hm minres() thc hin thut ton ny.
function x = minres(a, b, x, maxiter, tol)
k = 0;
r = b - a*x;
gamma0 = norm(r);
v = 0;
vnew = r/gamma0;
gamma = gamma0;
betanew = 0;
c = 1;
s = 0;
cnew = 1;
snew = 0;
p = 0;
pnew = 0;
for k = 1:maxiter
beta = betanew;
vold = v;
v = vnew;
vnew = a*v - beta*vold;
alfa = vnew'*v;
vnew = vnew - alfa*v;
betanew = norm(vnew);
vnew = vnew/betanew;
cold = c;
sold = s;
c = cnew;
s = snew;
rho1 = sold*beta;
rho2 = c*cold*beta + s*alfa;
rhon3 = c*alfa - s*cold*beta;
tho = abs(rhon3) + abs(beta);
nuy = tho*sqrt((rhon3/tho)^2 + (betanew/tho)^2);
cnew = rhon3/nuy;
snew = betanew/nuy;
rho3 = nuy;
pold = p;
186

p = pnew;
pnew = (v - rho1*pold - rho2*p)/rho3;
x = x + cnew*gamma*pnew;
gamma = -snew*gamma;
if abs(gamma)/gamma0 < tol
break;
end
end
gii h ta dng chng trnh ctminres.m
clear all, clc
a = [1 1 3 5;1 2 2 4;3 2 3 2;5 4 2 4];
b = [10 9 10 15]';
maxiter = 50;
tol = 1e-6;
x = [0 0 0 0]';
x = minres(a, b, x, maxiter, tol)
22. PHNG PHP QMR
Phng php gn nh cc tiu ho s d (quasi minimal residual - QMR) c
Freud v Nachtigal a ra. Thut ton c th ca phng php gm cc bc:
- Cho x0, tnh R0 = B - Ax0
- v (1) = R 0 , gii h M1y = v 1
 (1) v d bng R0
- 1 = y 2 , chn w
 (1)
- Gii h M T2 z = w
- 0 = 1, 0 = -1
- Lp cho n khi hi t
nu (i) = 0 hay i = 0 th khng dng phng php ny
v(i) = v (i) / i , y = y / i
 (i) / i , z = z / i
w(i) = w
i = z T y , nu i = 0 th khng dng phng php ny
gii h M 2 y = y
gii h M1T z = z
nu i = 1
* p(1) = y , q(1) = z
khng th
* p(i) = y ( i i / i1 ) p(i1)
* q (i) = z ( i i / i1 ) q (i1)
187

p = Ap(i)
i = q(i)T p , nu i = 0 th khng dng phng php ny
i = i / i , nu i = 0 th khng dng phng php ny
v (i+1) = p i v(i)
gii h M1y = v (i+1)
i +1 = y

2
T


w
= A q(i) i w(i)
 (i+1)
gii h M T2 z = w
i +1 = z 2
(i+1)

i = i+1 /( i1 i )
i = 1 + i2 , nu i = 0 th khng dng phng php ny
i = i1i i /(i i21 )
nu i =1 th
* d(1) = 1p(1) , s(1) = 1p
khng th
* d(i) = i p(i) + (i1 i )2 d(i1)
* s(i) = i p + (i1 i )2 s(i1)
x(i) = x(i-1) + d(i)
r(i) = r(i-1) - s(i)
Ta xy dng hm qmr() thc hin thut ton:
function x = qmr( a, x, b, maxiter, tol )
% qmr.m giai he phuong trinh ax = b theo thuat toan
% QMR co dung preconditioning.
r = b - a*x;
error = norm(r);
if ( error < tol )
return
end
n = size(a,1);
M = ones(n,1);
M = diag(M);
M = 1.2*M;
[M1,M2] = lu( M );
vn = r;
y = M1 \ vn;
rho = norm(y);
188

wn = r;
z = M2'\wn;
xi = norm(z);
gamma = 1.0;
eta = -1.0;
theta = 0.0;
for iter = 1:maxiter,
if ( rho == 0.0 | xi == 0.0 )
error('Khong dung duoc phuong phap nay')
break;
end
v = vn/rho;
y = y/rho;
w = wn/xi;
z = z/xi;
delta = z'*y;
if ( delta == 0.0 )
error('Khong dung duoc phuong phap nay')
break
end
yn = M2\y;
zn = M1\z;
if ( iter > 1 ),
p = yn - ( xi*delta/ep )*p;
q = zn - ( rho*delta/ep )*q;
else
p = yn;
q = zn;
end
pn = a*p;
ep = q'*pn;
if ( ep == 0.0 )
error('Khong dung duoc phuong phap nay')
break
end
beta = ep/delta;
if ( beta == 0.0 )
error('Khong dung duoc phuong phap nay')
break
end
vn = pn - beta*v;
y = M1\vn;
189

rho1 = rho;
rho = norm( y );
wn = ( a'*q ) - ( beta*w );
z = M2'\wn;
xi = norm( z );
gamma1 = gamma;
theta1 = theta;
theta = rho / ( gamma1*beta );
gamma = 1.0 / sqrt( 1.0 + (theta^2) );
if ( gamma == 0.0 )
error('Khong dung duoc phuong phap nay')
break
end
eta = -eta*rho1*(gamma^2) / ( beta*(gamma1^2) );
if ( iter > 1 ),
d = eta*p + (( theta1*gamma )^2)*d;
s = eta*pn + (( theta1*gamma )^2)*s;
else
d = eta*p;
s = eta*pn;
end
x = x + d;
r = r - s;
error = norm(r);
if ( error <= tol )
break
end
end
gii h phng trnh ta dng chng trnh ctqmr.m:
clear all, clc
a = [4 -1 1;-1 4 -2;1 -2 4];
b = [ 12 -1 5]';
maxiter = 50;
tol = 1e-6;
x = [0 0 0]';
x = qmr(a, b, x, maxiter, tol)
23. PHNG PHP GMINRES
Phng php ny thng dng gii h phng trnh c ma trn h s khng
suy bin, khng i xng. Phng php ny m rng phng php MINRES cho h
190

khng i xng. Ging nh phng php MINRES, phng php ny to ra mt dy


cc vec t trc giao c dng:
w(i) = Av(i)
for k = 1,..,i
w(i) = w(i) ( w(i) v(k) ) v(k)
end
v(i+1) = w(i) / w(i)
Cc ln lp theo GMINRES c dng:
x(i) = x(0) + y1v(1) + + yiv(i)
Thut ton c th gm cc bc sau:
- Cho x(0)
- Tnh r t h phng trnh Mr = b - Ax(0)
- Lp cho n khi hi t
v(1) = r / r 2

s = r 2 e1
for i = 1,2,..,m
gii h Mw = Av(i)
for k = 1,..,i
hk,i = (w, v(k))
w = w - hk,iv(k)
end
h i+1,i = w 2
v(i+1) = w/h i+1,i
dng bin i J1,,Ji-1 cho (h1,,hi+1,i)
cp nht x, m
end
Ta xy dng hm gmres() thc hin thut ton trn:
function x = gmres( a, b, x, restart, maxiter, tol )
%Giai he phuong trinh bang thuat toan GMINRES
n = size(a, 1);
M = ones(n, 1);
M = diag(M);
M = 1.2*M;
r = M\( b - a*x);
error = norm(r);
if ( error < tol )
return
end
191

[n, n] = size(a);
m = restart;
V(1:n,1:m+1) = zeros(n, m+1);
H(1:m+1, 1:m) = zeros(m+1, m);
cs(1:m) = zeros(m, 1);
sn(1:m) = zeros(m, 1);
e1 = zeros(n, 1);
e1(1) = 1.0;
for iter = 1:maxiter
r = M\( b - a*x );
V(:,1) = r/norm( r );
s = norm(r)*e1;
for i = 1:m
w = M\(a*V(:,i));
for k = 1:i
H(k, i)= w'*V(:, k);
w = w - H(k, i)*V(:,k);
end
H(i+1, i) = norm(w);
V(:, i+1) = w / H(i+1, i);
for k = 1:i-1
temp = cs(k)*H(k, i) + sn(k)*H(k+1, i);
H(k+1, i) = -sn(k)*H(k, i) + cs(k)*H(k+1, i);
H(k, i) = temp;
end
[cs(i), sn(i)] = rotmat(H(i, i), H(i+1, i));
temp = cs(i)*s(i);
s(i+1) = -sn(i)*s(i);
s(i) = temp;
H(i,i) = cs(i)*H(i, i) + sn(i)*H(i+1, i);
H(i+1,i) = 0.0;
error = abs(s(i+1));
if ( error <= tol )
y = H(1:i, 1:i) \ s(1:i);
x = x + V(:, 1:i)*y;
break;
end
end
if ( error <= tol )
break
end
y = H(1:m, 1:m) \ s(1:m);
192

x = x + V(:, 1:m)*y;
r = M \ ( b - a*x );
s(i+1) = norm(r);
error = s(i+1) / bnrm2;
if ( error <= tol )
break
end;
end
gii h phng trnh ta dng chng trnh ctgmres.m:
clear all, clc
a = [ 1 3 4; 2 5 7; 3 1 2];
b = [8 14 6]';
maxiter = 50;
tol = 1e-6;
x = [0 0 0]';
restart = 5;
x = gmres(a, b, x, restart, maxiter, tol)
24. PHNG PHP FOM
Full Orthogonalisation Method (FOM) l phng php trc giao ho ma trn h
s [A]. Ta xt h phng trnh [A][X] = [B] vi ma trn [A] khng suy bin. t
ai,n+1 = - bi v aj = (ai1, .., ain, ai, n+1) ta s i n h:
n

a
j=1

i ,j

x j + a i ,n +1 = 0

(1)

H (n + 1) vec t gm {a i }i=1 v an+1 c lp tuyn tnh. Ta p dng qu trnh trc


n

giao ho cho dy {a i }i=1 bng cch t u1 = a1, v1 = u1/ u1 . Ni chung


n +1

k 1

u k = c k ,i v i v v k = u k / u k . Cng thc tnh ton s l:


i =1

u k = a k (a k ,v i )v i
(2)
i =1

v = u / u ; v = a / a
k
k
1
1
1
k
Gi s vec t un+1 c cc thnh phn (z1, z2,, zn+1). Nu zn+1 = 0 th t iu kin un+1
trc giao vi ai ta c:

a
j=1

i ,j

zj = 0

193

Do

n +1

u n +1 = zi2 = z i2 > 0
2

i =1

Nn phng trnh

i =1

a
j=1

i ,j

z j = 0 c nghim khng tm thng. iu ny mu thun vi

iu kin det(A) 0. Nh vy zn+1 0. T iu kin un+1 trc giao vi ai ta c:


n

(u n +1 ,a i ) = a i ,jz j + a i ,n +1z n +1 = 0
j=1

Chia hai v cho zn+1 ta c

j=1

zj
a i ,j
+ a i ,n +1 = 0
z n +1

ng thc ny chng t xi =

zi
l nghim ca (1). Thut ton FOM c th gm cc
z n +1

bc:
- Cho [X0], tnh r0 = [B], = r0 , v1 = r0 / r0
- Lp cho n khi hi t
wj = [A]vj
trc giao ho Gram - Schmidt
h j+1,j = w j

nu hj+1,j = 0 th m = j, kt thc lp
- y m = H m1 ( e1 )
- xm = x0 + Vmym
Ta xy dng hm fom() thc hin thut ton trn:
function x = fom(a, b, x0, maxiter, tol)
%Giai he pt bang thuat toan FOM
i = 1;
x = x0(:);
r = b - a*x;
rnorm = norm(r);
rho = rnorm;
v (:,i) = r/rho;
while ((rnorm/rho > tol) & (i <= maxiter))
v(:, i+1) = a*v(:, i);
h(1:i, i) = v(:, 1:i)'* v(:, i+1);
v(:, i+1) = v(:, i+1) - v(:, 1:i)*h(1:i, i);
h(i+1, i) = norm(v(:, i+1));
v(:, i+1) = v(:, i+1)/h(i+1, i);
194

x = x0 + v(:, 1:i)*(h(1:i, 1:i)\[rho; zeros(i-1,1)]);


r = b - a*x;
rnorm = norm(r);
i = i + 1;
end
i
gii h phng trnh ta dng chng trnh ctfom.m:
clear all, clc
a = [ 1 3 4; 2 5 7; 3 1 2];
b = [8 14 6]';
maxiter = 50;
tol = 1e-6;
x0 = [0 0 0]';
x = fom(a, b, x0, maxiter, tol)
25. PHNG PHP LSQR
Phng php LSQR - Least Squares QR do Paige v Saunder a ra vo nm
1982. Phng php LSQR tng ng vi phng php CGLS nhng cho kt qu
tt hn i vi cc h phng trnh c ma trn h s c iu kin

195

xu. Trc ht ta cn ch l bi ton bnh phng b nht [A][X] = [B] tng


ng vi h phng trnh tuyn tnh dng:
[ E ] [ A ] [ R ] [ B]
(1)


=
T
X
0
[
]
[
]

[ A] [0]
To ra mt c s trc giao vi (1) vi vec t ban u:
1 [ B]
w1 =

[ B] 2 [ 0 ]
ta c vec t th hai

1 [ B]

. Sau khi trc giao ho n vi w1 v chun ho kt


B 2 [ A ]T [ B]

qu ta c vec t c s trc giao th hai:


[ B]
1
w2 =

T
[ A ]T [ B] 2 [ A ] [ B]
v tip tc.
Thut ton LSQR gii h phng trnh Ax = b gm cc bc sau:
- Cho x0, tnh 1 = b , u1 = b 2 1 , v = A T u1 , = v 2 , w1 = v1 = v
-  = ,  =
1

- Lp cho n khi hi t:
u = Av i i u i , 1 = u 2 , u i+1 = u i+1
v = A T u i + 1 i +1 v i , i + 1 = v 2 , v i +1 = v i + 1

i =  i2 + i2+1
c i =  i i
s i = i +1 i
i + 1 = s i i +1
 i+1 = c i i+1
i = c i i
 = s 
i +1

i i

xi = xi1 + (i i )w i
w i+1 = v i+1 (i+1 i )w i
Ta xy dng hm lsqr() thc hin thut ton trn:
function x = lsqr(A, b, maxiter)
%Giai he phuong trinh bang phuong phap LSQR.
% min || A x - b || .
s = 1;
198

tol = 1e-6;
[m,n] = size(A);
X = zeros(n, maxiter);
UV = 0;
eta = zeros(maxiter, 1);
rho = eta;
c2 = -1;
s2 = 0;
xnorm = 0;
z = 0;
% Chuan bi lap LSQR .
v = zeros(n, 1);
x = v;
beta = norm(b);
if (beta==0)
error('Ve phai phai khac khong')
end
u = b/beta;
if (UV)
U(:, 1) = u;
end
r = A'*u;
alpha = norm(r);
v = r/alpha;
if (UV)
V(:, 1) = v;
end
phi_bar = beta;
rho_bar = alpha;
w = v;
for i = 2:maxiter+1
alpha_old = alpha;
beta_old = beta;
% Tinh A*v - alpha*u.
p = A*v - alpha*u;
beta = norm(p);
u = p/beta;
% Tinh A'*u - beta*v.
r = A'*u - beta*v;
alpha = norm(r);
v = r/alpha;
% Luu U va V neu can
199

if (UV)
U(:,i) = u;
V(:,i) = v;
end
rrho = pythag(rho_bar, beta);
c1 = rho_bar/rrho;
s1 = beta/rrho;
theta = s1*alpha;
rho_bar = -c1*alpha;
phi = c1*phi_bar;
phi_bar = s1*phi_bar;
% Tinh chuan cua nghien va so du;
delta = s2*rrho;
gamma_bar = -c2*rrho;
rhs = phi - delta*z;
z_bar = rhs/gamma_bar;
eta(i-1) = pythag(xnorm,z_bar);
gamma = pythag(gamma_bar,theta);
c2 = gamma_bar/gamma;
s2 = theta/gamma;
z = rhs/gamma;
xnorm = pythag(xnorm,z);
rho(i-1) = abs(phi_bar);
% Cap nhat nghiem
x = x + (phi/rrho)*w;
w = v - (theta/rrho)*w;
if rho(i-1) < tol
break;
end
end
i
function x = pythag(y,z)
%tinh sqrt( y^2 + z^2 ).
rmax = max(abs([y;z]));
if (rmax == 0)
x = 0;
else
x = rmax*sqrt((y/rmax)^2 + (z/rmax)^2);
end
gii h phng trnh ta dng chng trnh ctlsqr.m:
200

clear all, clc


maxiter = 50;
A = [ 1 3 4; 2 5 7; 3 1 2];
b = [8 14 6]';
x = lsqr(A, b, maxiter)
26. PHNG PHP SYMMLQ
Lin quan n phng php MINRES v CG l thut ton SYMMLQ do Paige
v Saunders a ra. Ta xt h phng trnh [A][X] = [B] vi [A] l ma trn i xng
nhng khng cn xc nh dng. Ta chn nghim ban u l 1[v1] = {B],
1 = [ B] 2 . Ti ln lp th k ca phng php CG ta c c xk sao cho [rk] = [B] [A][Xk] trc giao. Do [Vk] l c s trc giao nn ta c th t [Xk] = [Vk][yk] v c:
T
[rk] = [B] - [A][Vk][yk] = 1[v1] - [Vk][Tk][yk] - k +1 ([ e ] [ y k ]) [ v k+1 ] (1)
Do [ Vk ] [ rk ] = 0 nn nhn (1) vi [ Vk ] v dng [ Vk ] [ v k+1 ] = 0 v [ Vk ] v1= e1 ta c:
T

0 = [ Vk ] [ rk ] = 1e1 [ Tk ][ y k ]
gii h (2), Paige v Saunders ngh thc hin php phn tch LQ:
T
[ Tk ] = [Lk ][ Qk ]
[Qk ] T[Qk ] = [E]
T

(2)

vi [ L k ] l ma trn tam gic v [ Q k ] l ma trn trc giao. Thut ton SYMMLQ gm


cc bc sau:
- Cho x0
- Tnh x = xo, r = b - Ax, = r , v = r
- = 0,  = 0 , c = -1, s = 0, k =
- vold = 0, w = v, g = 0, g = 0
- Lp khi k < tol:
v = Av v old
= v * v , v = v v
= v , v old = v , v = v /
l = s c , l = s
1

 = s c ,  = c
l 0 =  2 + 2
c =  l 0 ,s = l 0
g = g l1g, g = l 2g, g = g l 0
x = x + (gc)w +(gs)v
w=swcv
201

k = g 2 + g 2
Ta xy dng hm symmlq() thc hin thut ton ny:
function x = symmlq(A, b, x, maxiter, tol)
%Ham thuc hien thua toan SYMMLQ voi A la ma tran doi xung
[m,n] = size(A);
n2b = norm(b);
xmin = x;
imin = 0;
tolb = tol * n2b;
r = b - A * x;
normr = norm(r);
normrmin = normr;
v = r;
vold = r;
u = vold;
v = u;
beta1 = vold' * v;
beta1 = sqrt(beta1);
vv = v / beta1;
wbar = vv;
v = A * vv;
alpha = vv' * v;
v = v - (alpha/beta1) * vold;
numer = vv' * v;
denom = vv' * vv;
v = v - (numer/denom) * vv;
volder = vold;
vold = v;
u = vold;
v = u;
betaold = beta1;
beta = vold' * v;
beta = sqrt(beta);
gammabar = alpha;
deltabar = beta;
gamma = sqrt(gammabar^2 + beta^2);
cs = gammabar / gamma;
sn = beta / gamma;
zeta = beta1 / gamma;
epsilonzeta = 0;
202

normrcgcs = abs(beta1 * sn);


if (cs == 0)
normrcg = Inf;
else
normrcg = normrcgcs / abs(cs);
end
stag = 0;
for i = 1 : maxiter
vv = v / beta;
w = cs * wbar + sn * vv;
stagtest = zeros(n, 1);
ind = (x ~= 0);
stagtest(ind) = w(ind) ./ x(ind);
stagtest(~ind & (w ~= 0)) = Inf;
if (zeta == 0) | (abs(zeta)*norm(stagtest, inf) < eps)
stag = stag + 1;
else
stag = 0;
end
x = x + zeta * w;
wbar = sn * wbar - cs * vv;
v = A * vv;
v = v - (beta / betaold) * volder;
alpha = vv' * v;
v = v - (alpha / beta) * vold;
volder = vold;
vold = v;
u = vold;
v = u;
betaold = beta;
beta = vold' * v;
if (beta < 0)
break
end
beta = sqrt(beta);
delta = cs * deltabar + sn * alpha;
deltazeta = - delta * zeta;
gammabar = sn * deltabar - cs * alpha;
epsilon = sn * beta;
deltabar = - cs * beta;
gamma = sqrt(gammabar^2 + beta^2);
csold = cs;
203

snzeta = sn * zeta;
cs = gammabar / gamma;
sn = beta / gamma;
epszdelz = epsilonzeta + deltazeta;
epsilonzeta = - epsilon * zeta;
zeta = epszdelz / gamma;
mrcg = norm((csold*epszdelz/gammabar - snzeta)*vold);
normr = sqrt(epszdelz^2 + epsilonzeta^2);
normrcgcs = normrcgcs * abs(sn);
if (cs == 0)
normrcg = Inf;
else
normrcg = normrcgcs / abs(cs);
end
if (normr <= tolb)
r = b - A * x;
normr = norm(r);
if (normr <= tolb)
break
end
end
if (normrcg <= tolb)
xcg = x + (epszdelz/gammabar) * wbar;
r = b - A * xcg;
normrcg = norm(r);
if (normrcg <= tolb)
x = xcg;
break
end
end
if (stag >= 2)
break
end
if (normr < normrmin)
normrmin = normr;
xmin = x;
imin = i;
end
end
r = b - A * x;
normr = norm(r);
i
204

gii h phng trnh bng thut ton SYMMLQ ta dng chng trnh
ctsymmlq.m:
clear all, clc
A = [ 1 2 4 1;2 3 1 5;4 1 1 6;1 5 6 5];
b = [ 8 11 12 17]';
maxiter = 50;
x = [0 0 0]';
tol = 1e-12;
x = symmlq(A, b, x, maxiter, tol)
27. PHNG PHP CHEBYSHEV
Tnh hi t ca phng php lp ph thuc vo tnh cht ca ph - ngha l ca
cc gi tr ring - ca ma trn [A]. ci thin tnh cht ny ngi ta thng bin i
h phng trnh tuyn tnh bng mt php bin i tuyn tnh thch hp. Qu trnh
ny c gi l th trc(preconditioner). V d nu ma trn [M] xp x ma trn h s
[A] theo mt cch no , h c bin i
[M]-1[A][X] = [M]-1[B]
s c nghim nh h phng trnh [A][X] = [B] nhng tnh cht ph ca h s ca ma
trn [M]-1[A] c th thun li hn.
Ta xt phng trnh vi [A] l ma trn i xng, xc nh dng. Lc ph
ca ma trn [A] s nm trong on [min, max] vi min, max l cc gi tr ring ln
nht v nh nht ca [M]-1[A]. Thut ton tm nghim l:
- cho [X0], tnh [R0] = [B] - [A][X0]
- chn tham s v c sao cho ph ca [A] nm trn on [d - c, d + c] hay
trong ellip c tiu im d c khng cha gc to
v tnh vi n = 1, 2,..., n cho n khi hi t:
[Z] = [M]-1[R]
2
=
[P] = [Z] khi n = 1
d
2
c n 1
1

n =
n =
khi n 2
[Pn ] = [Z n ] + [Pn1 ]

d n
2
[ X n+1 ] = [ X n ] + n [Pn ]
[Rn+1] = [Rn] - n[A][Pn]
Ta xy dng hm chebyiter() thc hin thut ton trn:
function x = chebyiter ( A, x, b, M, maxiter, tol )
% Cu phap x = chebyiter ( A, x, b, M, maxiter, tol )
% Dung pp lap Chebyshev de giai he pt A*x = b.
% A(n, n) ma tran doi xung, xac dinh duong
205

% X(n), vec to nghiem ban dau


% B(n), ve phai
% M, ma tran preconditioner
% cho M bang mt don vi neu khong thu truoc
% X(n), nghiem
if size(x, 1) == 1
x = x';
end
r = b - A * x;
eigs = eig ( inv ( M ) * A );
eigmax = max ( eigs );
eigmin = min ( eigs );
c = ( eigmax - eigmin ) / 2.0;
d = ( eigmax + eigmin ) / 2.0;
for i = 1 : maxiter
z = M \ r;
if ( i == 1 )
p = z;
alfa = 2.0 / d;
else
beta = ( c * alfa / 2.0 )^2;
alfa = 1.0 / ( d - beta );
p = z + beta * p;
end
x = x + alfa * p;
r = r - alfa * A * p;
err = norm ( r );
if ( err <= tol )
break
end
end
Ta dng chng trnh ctchebyiter.m gii h phng trnh:
clear all, clc;
n = 10;
A = zeros ( n, n );
for i = 1 : n
A(i, i) = 3.0;
end
for i = 1 : n-1
A(i, i + 1) = -1;
206

end
for i = 1 : n-1
A(i + 1, i) = -1;
end
x = [1:n ]';
b = A * x;
x = ones ( n, 1 );
M = 2.0 * eye ( n );
maxiter = 50;
tol = 1e-6;
y = chebyiter ( A, x, b, M, maxiter, tol );
fprintf('Nghiem cua he phuong trinh\n');
fprintf(' %f\n', y)
28. PHNG PHP QR
Ta phn tch ma trn h s [A] thnh:
[A] = [Q][R]
Do [Q]T[Q] = [E]
nn:
[A][X] = [Q][R][X] = [B]
[Q]T[A][X] = [Q]T[Q][R][X] = [R][X] = [Q]T[B]
Do [R] l ma trn tam gic trn nn ta tm nghim d dng. Ta xy dng hm givens()
thc hin php quay Givens:
function [c, s, r] = givens(x, y);
% tinh c, s, r sao cho [c s] [x] = [r]
% [-s c] [y] = [0]
% voi c*c + s*s = 1;
if (y == 0)
c = 1;
s = 0;
r = x;
else
if (abs(x) >= abs(y))
t = y/x;
r = sqrt(1 + t*t);
c = 1/r;
s = t*c;
r = x*r;
else
t = x/y;
r = sqrt(1 + t*t);
207

s = 1/r;
c = t*s;
r = y*r;
end
end
Tip theo ta xy dng hm qrgivens() thc hin vic tm nghim ca h phng trnh
bng thut ton phn tch QR nh php quay Givens:
function x = qrgivens(A, b);
[m, n] = size(A);
tau = zeros(n, 1);
%R = [A(1:n+1, :) b(1:n+1)];
R = [A(1:n, :) b(1:n)];
for j = 2:n
for i = 1:j-1
[c, s, r] = givens(R(i, i), R(j, i));
R(i, i) = r;
R(j, i) = 0;
t = c*R(i, i+1:n+1) + s*R(j, i+1:n+1);
R(j, i+1:n+1) = -s*R(i, i+1:n+1) + c*R(j, i+1:n+1);
R(i, i+1:n+1) = t;
end
end
for k = n+2:m,
a = [A(k, :) b(k)];
for i = 1:n+1
[c, s, r] = givens(R(i, i),a(i));
R(i,i) = r;
a(i) = 0;
t = c*R(i, i+1:n+1) + s*a(i+1:n+1);
a(i+1:n+1) = -s*R(i, i+1:n+1) + c*a(i+1:n+1);
R(i, i+1:n+1) = t;
end
end
x = R(1:n, n+1);
for j = n:-1:2
x(j) = x(j)/R(j, j);
x(1:j-1) = x(1:j-1) - R(1:j-1, j)*x(j);
end
x(1) = x(1)/R(1, 1);
208

gii h phng trnh ta dng chng trnh ctqrgivens.m:


clear all, clc
A = [1 2 -1;2 1 1; 1 1 3];
b = [2 4 5]';
x = qrgivens(A, b)

209

CHNG 3: NI SUY V XP X HM
1. NI SUY LAGRANGE
Trong thc t nhiu khi ta cn tnh gi tr ca hm y = f(x) ti mt gi tr x
trong mt on [a, b] no m ch bit mt s nht nh cc gi tr ca hm ti mt
s im cho trc. Cc gi tr ny c cung cp qua thc nghim hay tnh ton. V
vy ny sinh vn ton hc l trn on a x b cho mt lot cc im xi ( i = 0, 1,
2...) v ti cc im xi ny gi tr ca hm l yi = f(xi) bit v ta cn tm y = f(x)
da trn cc gi tr bit . Lc ta cn tm a thc :
Pn(x) = aoxn + a1xn-1 + +an-1x + an
sao cho Pn(xi) = f(xi) = yi. a thc Pn(x) c gi l a thc ni suy ca hm y=f(x).
Ta chn a thc ni suy hm y = f(x) v a thc l loi hm n gin, lun c o
hm v nguyn hm. Vic tnh gi tr ca n theo thut ton Horner cng n gin.
By gi ta xy dng a thc ni suy kiu Lagrange. Gi Li l a thc:
( x x0 )...( x xi 1 )( x xi + 1 )...( x x n )
Li =
( xi x 0 )...( xi xi 1 )( x i x i + 1 )...( x i x n )
R rng l Li(x) l mt a thc bc n v :
j=i
1
L i (x j ) =
ji
0
Ta gi a thc ny l a thc Lagrange c bn.
By gi ta xt biu thc :
n

Pn ( x) = f( x i )L i ( x)
i =0

Ta thy Pn(x) l mt a thc bc n v cc Li(x) l cc a thc bc n v tho mn


iu kin Pn(xi) = f(xi) = yi. Ta gi n l a thc ni suy Lagrange.
Vi n = 1 ta c bng
x
y

x0
y0

x1
y1

a thc ni suy s l :
P1(x) = yoL0(x) + y1L1(x1)
x x0
x x1
L0 =
L1 =
x 0 x1
x1 x 0
x x1
x x0
nn P1 ( x) = y 0
+ y1
x 0 x1
x1 x 0
Nh vy P1(x) l mt a thc bc nht i vi x
Vi n = 2 ta c bng
x

x0

x1

x2
211

y0

y1

y2

a thc ni suy s l :
P2(x) = yoL0(x) + y1L1(x1) + y2L2(x2)
( x x1 )( x x 2 )
L0 =
( x 0 x1 )( x0 x 2 )
( x x0 )( x x 2 )
L1 =
( x1 x0 )( x1 x 2 )
( x x 0 )( x x1 )
L2 =
( x 2 x 0 )( x 2 x1 )
Nh vy P1(x) l mt a thc bc hai i vi x.
Ta xy dng hm lagrange() thc hin vic ni suy hm theo thut ton Lagrange:
function [l, L] = lagrange(x, y)
%Dua vao : x = [x0 x1 ... xn], y = [y0 y1 ... yn]
%ket qua: l = He so cua da thuc Lagrange bac n
% L = Da thuc Lagrange
n = length(x) - 1; %bac cua da thucl
l = 0;
for m = 1:n + 1
p = 1;
for k = 1:n + 1
if k ~= m
p = conv(p, [1 -x(k)])/(x(m) - x(k));
end
end
L(m, :) = p; %da thuc Lagrange
l = l + y(m)*p;
end
Cho hm di dng bng:
x
y

-2
-6

-1
0

1
0

2
6

v tm y(2.5) ta dng chng trnh ctlagrange.m:


clear all, clc
x = [-2 -1 1 2];
y = [-6 0 0 6];
l = lagrange(x, y);
yx = polyval(l, 2.5)
212

2. NI SUY NEWTON
By gi ta xt mt cch khc xy dng a thc ni suy gi l phng php
Newton. Trc ht ta a vo mt khi nim mi l t hiu
Gi s hm y = y(x) c gi tr cho trong bng sau:
x
y

x0
y0

x1
y1

x2
y2

xn-1
yn-1

xn
yn

T hiu cp 1 ca y ti xi, xj l :
yi y j
y[x i , x j ] =
xi x j
T hiu cp hai ca y ti xi, xj, xk l :
y[x i , x j ] y[x j , x k ]
y[xi , x j , x k ] =
xi xk
v.v.
Vi y(x) = Pn(x) l mt a thc bc n th t hiu cp 1 ti x, x0 :
P ( x) Pn ( x0 )
Pn [x , x0 ] = n
x x0
l mt a thc bc (n - 1). T hiu cp 2 ti x, x0, x1 :
P [x , x0 ] Pn [x0 , x1 ]
Pn [x , x 0 , x1 ] = n
x x1
l mt a thc bc (n-2) v.v v ti t hiu cp (n + 1) th :
Pn[ x, xo,.., xn] = 0
T cc nh ngha t hiu ta suy ra :
Pn(x) = Pn(x0) + ( x- x0)Pn[x, xo]
Pn[x, x0] = Pn[x0, x1] + ( x - x1)Pn[x, xo,x1]
Pn[x, xo, x1] = Pn[x0, x1, x2] + ( x - x2)Pn[x, xo, x1, x2]
............
Pn[x, xo,.., xn-1] = Pn[x0, x1,.., xn] + ( x - xn)Pn[x, xo,.., xn]
Do Pn[ x, xo,.., xn] = 0 nn t ta c :
Pn(x) = Pn(x0) + (x - x0)Pn[xo, x1] + (x - x0)(x - x1)Pn[x0, x1, x2] +
+(x - x0)(x - xn-1)Pn[x0,, xn]
Nu Pn(x) l a thc ni suy ca hm y = f(x) th:
Pn(xi) = f(xi) = yi vi i = 0 n
Do cc t hiu t cp 1 n cp n ca Pn v ca y l trng nhau v nh vy ta
c :
Pn(x) = y0 + (x - x0)y[x0, x1] + (x - x0)(x - x1)y[x0, x1, x2] + .. +
(x - x0)(x - x1)...(x - xn-1)y[x0,..,xn]
213

a thc ny gi l a thc ni suy Newton tin xut pht t nt x0 ca hm y =


f(x). Ngoi a thc tin cn c a thc ni suy Newton li xut pht t im xn c
dng nh sau :
Pn(x) = yn + (x - xn)y[xn, xn-1] + (x - xn)(x - xn-1)y[xn, xn-1,xn-2] +..+
(x - xn)(x - xn-1)...(x - x1)y[xn,.., x0]
Trng hp cc nt cch u th xi = x0 + ih vi i = 0, 1,.., n. Ta gi sai phn
tin cp 1 ti i l :
yi = yi+1 - yi
v sai phn tin cp hai ti i:
2yi = (yi) = yi+2 - 2yi+1 + yi
.........
v sai phn tin cp n l :
nyi = (n-1yi)
Khi ta c:
y 0
y[x 0 , x 1 ] =
h
2 y 0
y[x 0 , x 1 , x 2 ] =
2h 2
...........
n y 0
y[x 0 , x 1 , x 2 ,..., x n ] =
n! h n
By gi t x = x0 + ht trong a thc Newton tin ta c:
t( t 1) 2
t( t 1) ( t n + 1) n
Pn ( x 0 + ht) = y 0 + ty 0 +
y0 + +
y0
2!
n!
th ta nhn c a thc Newton tin xut pht t x0 trong trng hp nt cch u.
Vi n = 1 ta c :
P1(x0 + ht) = y0 + y0
Vi n = 2 ta c:
t( t 1) 2
Pn ( x 0 + ht) = y 0 + ty 0 +
y0
2!
Mt cch tng t ta c khi nim cc sai phn li ti i:
yi = yi - yi-1
2yi = (yi) = yi - 2yi-1 + yi-2
.........
nyi = (n-1yi)
v a thc ni suy Newton li khi cc im ni suy cch u:
t( t + 1) 2
t( t + 1) ( t + n 1) n
Pn ( x 0 + ht) = y n + ty n +
yn + +
yn
2!
n!
Ta xy dng hm newton() ni suy:
function [n,DD] = newton(x,y)
214

%Dua vao : x = [x0 x1 ... xN]


% y = [y0 y1 ... yN]
%Lay ra: n = he so cua da thuc Newton bac N
N = length(x) - 1;
DD = zeros(N + 1, N + 1);
DD(1:N + 1, 1) = y';
for k = 2:N + 1
for m = 1: N + 2 - k
DD(m,k) = (DD(m + 1, k - 1) - DD(m, k - 1))/(x(m + k - 1) - x(m));
end
end
a = DD(1, :);
n = a(N+1);
for k = N:-1:1
n = [n a(k)] - [0 n*x(k)];
end
Cho hm di dng bng:
x
y

-2
-6

-1
0

1
0

2
6

4
60

Ta dng chng trnh ctnewton.m ni suy:


clear all, clc
x = [-2 -1 1 2 4];
y = [-6 0 0 6 60];
a = newton(x, y)
yx = polyval(a, 2.5)
3. NI SUY AITKEN - NEVILLE
Mt dng khc ca a thc ni suy c xc nh bng thut ton Aitken Neville. Gi s ta c n im cho ca hm f(x). Nh vy qua hai im x0 v x1 ta c
a thc ni suy Lagrange ca hm f(x) c vit di dng:
y0 x0 x
y x1 x
P01 ( x) = 1
x1 x 0
y l mt a thc bc 1:
x x1
x x0
+ y1
P01 ( x) = y 0
x 0 x1
x1 x 0
Khi x = x0 th:
215

P01 ( x 0 ) =

y0
y1

x0 x0
x1 x 0
= y0
x1 x 0

Khi x = x1 th:

y 0 x 0 x1
y x1 x1
P01 ( x1 ) = 1
= y1
x1 x 0
a thc ni suy Lagrange ca f(x) qua 3 im x0, x1, x2 c dng:
P01 ( x) x0 x
P ( x) x 2 x
P012 ( x) = 12
x2 x0
v l mt a thc bc 2:
( x x1 )( x x 2 )
( x x 0 )( x x 2 )
( x x 0 )( x x1 )
P012 ( x) = y 0
+ y2
+ y1
( x 0 x1 )( x 0 x 2 )
( x1 x 0 )( x1 x 2 )
( x 2 x 0 )( x 2 x1 )
Khi x = x0 th:
y0
x0 x0
P ( x) x 2 x 0
P012 ( x0 ) = 12
= y0
x 2 x0
Khi x = x1 th:
y 1 x 0 x1
y x 2 x1
P012 ( x1 ) = 1
= y1
x2 x0
Khi x = x2 th:
P01 ( x 2 ) x0 x 2

y2
x2 x2
= y2
x2 x0
Tng qut a thc ni suy Lagrange qua n im l:
P01..( n 1) ( x) x 0 x
P12..n ( x) x n x
P012..n ( x) =
x2 x0
Nh vy ta c th dng php lp xc nh ln lt cc a thc Lagrange. S
tnh ton nh vy gi l s Neville - Aitken.
Ta xy dng hm aitkenneville() ni suy:
P012 ( x 2 ) =

function a = aitkenneville(xData, yData, x)


% Tra ve gia tri noi suy tai x.
216

% Cu phap: y = aitkenneville(xData, yData, x)


n = length(xData);
y = yData;
for k = 1:n-1
y(1:n-k) = ((x - xData(k+1:n)).*y(1:n-k)...
+ (xData(1:n-k) - x).*y(2:n-k+1))...
./(xData(1:n-k) - xData(k+1:n));
end
a = y(1);
Cho cc cp s (1, 3), (2, 5), (3, 7), (4, 9) v (5, 11), tm y ti x = 2.5 ta dng
chng trnh ctaitkennevile.m:
clear all, clc
x = [1 2 3 4];
y = [3 5 7 9];
yx = aitkenneville(x, y, 2.5)
4. NI SUY BNG NG CONG SPLINE BC BA
Khi s im cho trc dng khi ni suy tng, a thc ni suy c dng sng v
sai s tng. Ta xt hm thc:
1
f31(x) =
1 + 8x 2
v ni suy n bng thut ton Newton nh chng trnh cttestintp.m
%Noi suy Newton
x1 = [-1 -0.5 0 0.5 1.0];
y1 = f31(x1);
n1 = newton(x1,y1)
x2 = [-1 -0.75 -0.5 -0.25 0 0.25 0.5 0.75 1.0];
y2 = f31(x2);
n2 = newton(x2,y2)
x3 = [-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1.0];
y3 = f31(x3);
n3 = newton(x3,y3)
xx = [-1:0.02: 1]; %pham vi noi suy
yy = f31(xx); %ham thuc
yy1 = polyval(n1, xx); %ham xap xi qua 5 diem
yy2 = polyval(n2, xx); %ham xap xi qua 9 diem
yy3 = polyval(n3, xx); %ham xap xi qua 11 diem
subplot(221)
plot(xx, yy, 'k-', xx, yy1, 'b')
217

subplot(224)
plot(xx, yy1-yy, 'r', xx, yy2-yy, 'g', xx, yy3-yy,'b') %do thi sai so
subplot(222)
plot(xx,yy,'k-', xx, yy2, 'b')
subplot(223)
plot(xx, yy, 'k-', xx, yy3, 'b')
y
v nhn c kt qu.
fi,i+1
fi1,i
trnh hin tng sai s ln khi s
im mc tng ta dng ni suy ni
trn(spline). Trn cc on ni suy ta thay
hm bng mt ng cong. Cc ng cong
yi1 yi
yi+1
ny c ghp trn ti cc im ni. Ta chn
cc ng cong ny l
x
hm bc 3 v hm bc 1 v bc hai kh
xi
xi+1
xi1
bo m iu kin ni trn.
Cho mt lot gi tr ni suy (x1, y1),,(xi, yi),,(xn, yn). Trn mi on ta c
mt hm bc 3. Nh vy gia nt i v (i +1) ta c hm fi,i+1(x), ngha l ta dng (n - 1)
hm bc 3 f1,2(x), f2,3(x),, fn-1,n(x) thay th cho hm thc. Hm fi,i+1(x) c dng:
fi,i+1(x) = ai + bi(x - xi) + ci(x - xi)2 + di(x - xi)3
(1)
Hm ny tho mn:
fi,i+1(xi) = ai = yi
(3)
3
2
fi ,i+1 (xi+1 ) = di h i + c i h i + bi h i + a i = y i+1
(4)
fi,i+1 (x i ) = bi
(5)
2
fi,i+1 (xi+1 ) = 3di h i + 2c i h i + bi
(6)
(7)
fi,i+1 (x i ) = 2c i = yi
(8)
fi,i+1 (x i+1 ) = 6d i h i + 2c i = yi+1
Mun ni trn ta cn c o hm bc nht lin tc v do :
fi1,i (xi ) = fi,i+1 (xi ) = k i
Lc ny cc gi tr k cha bit, ngoi tr k1 = kn = 0(ta cc cc mt l im un).
im xut pht tnh cc h s ca fi,i+1(x) l biu thc ca fi,i+1 (xi ) . S dng ni
suy Lagrange cho hai im ta c:
fi,i+1 (x i ) = k i L i (x) + k i+1L i+1 (x)
Trong :
x x i +1
x xi
Li (x) =
Li+1 (x) =
x i x i +1
x i +1 x i
Do vy:
k (x xi+1 ) k i+1 (x x i )
fi,i+1 (xi ) = i
x i x i +1
218

Tch phn biu thc trn hai ln theo x ta c:


k (x xi+1 )3 k i+1 (x xi )3
fi ,i+1 (xi ) = i
+ A(x xi+1 ) B(x xi )
6(xi xi+1 )
Trong A v B l cc hng s tch phn
S hng cui trong phng trnh trn thng c vit l Cx + D.
t C = A - B v D = -Axi+1 + Bxi d dng tnh ton. T iu kin fi,i+1(xi) = yi ta
c:
k i (xi xi+1 )3
+ A(xi xi+1 ) = y i
6(xi x i+1 )
nn:
yi
k (x x i+1 )
A=
i i
x i x i +1
6
Tng t, iu kin fi,i+1(xi+1) = yi+1 cho ta:
y i +1
k (x xi+1 )
i +1 i
B=
x i x i +1
6
Kt qu l:

k i (x xi+1 )3
(x xi+1 )(xi xi+1 )
fi ,i+1 (xi ) =
6 x i x i +1

k i+1 (x xi )3
(x x i )(xi xi+1 )

6 x i x i +1

y i (x xi+1 ) y i+1 (x xi )
x i x i +1
o hm cp 2 ki ti cc nt bn trong c tnh t iu kin:
fi1,i (x i ) = fi,i+1 (x i )
Sau khi bin i ta c phng trnh:
k i1 (xi1 xi ) + 2k i (xi1 xi+1 ) + k i+1 (xi xi+1 )
+

y y i y i y i +1
= 6 i 1

x i 1 x i x i x i + 1
Khi cc im chia cch u (xi+1 - xi) = h ta c:
6
k i1 + 4k i + k i+1 = 2 ( y i1 2y i + y i+1 )
h
Ta xy dng hm cubicspline() ni suy:

i = 2, 3,, n - 1

function y = cubicspline(xData, yData, x)


%Ham nay xap xi bang da thuc bac 3 spline
%Cu phap: [yi,f] = cubicspline(xData, yData, x)
n = length(xData);
219

c = zeros(n-1, 1); d = ones(n, 1);


e = zeros(n-1, 1); k = zeros(n, 1);
c(1:n-2) = xData(1:n-2) - xData(2:n-1);
d(2:n-1) = 2*(xData(1:n-2) - xData(3:n));
e(2:n-1) = xData(2:n-1) - xData(3:n);
k(2:n-1) = 6*(yData(1:n-2) - yData(2:n-1))...
./(xData(1:n-2) - xData(2:n-1))...
- 6*(yData(2:n-1) - yData(3:n))...
./(xData(2:n-1) - xData(3:n));
[c, d, e] = band3(c, d e);
k = band3sol(c, d, e, k);
i = findseg(xData, x);
h = xData(i) - xData(i+1);
y = ((x - xData(i+1))^3/h - (x - xData(i+1))*h)*k(i)/6.0...
- ((x - xData(i))^3/h - (x - xData(i))*h)*k(i+1)/6.0...
+ yData(i)*(x - xData(i+1))/h...
- yData(i+1)*(x - xData(i))/h;
Ta c chng trnh ctcubicspline.m dng ni suy:
clear all, clc
x1 = 0:0.1:5;
y1 = (x1+1).^2;
while 1
x = input('x = ');
if isempty(x)
fprintf('Ket thuc');
break
end
y = cubicspline(xData, yData, x)
fprintf('\n')
end
5. NI SUY BNG A THC CHEBYSHEV
Khi ni suy bng a thc Newton hay Lagrange, ngha l thay hm thc bng
a thc xp x, c khong cch cch u th sai s gia a thc ni suy v hm thc
c xu hng tng ti hai mt ni suy. Ta thy r iu ny khi chy chng trnh
cttestintp.m.
Do vy ta nn chn cc im mc ni suy hai
mt dy hn gia. Mt trong nhng cch chn phn
b cc im mc l hnh chiu ln trc x ca cc im
1

x1

1220

cch u trn ng trn tm ti im gia ca on


ni suy. Nh vy vi on ni suy [-1, 1] ta c:
2n + 1 2k
xk = cos
k = 1, 2,,n
(1)
2(n + 1)
Vi on ni suy [a, b] bt k:
ba
b+a ba
2n + 1 2k
a+b
=
+
xk =
xk +
cos
k = 1, 2,,n (2)
2
2
2
2(n + 1)
2
Cc nt ni suy ny c gi l cc nt Chebyshev. a thc ni suy da trn cc nt
Chebyschev gi l a thc ni suy Chebyshev.
Ta xt hm thc:
1
f(x) =
1 + 8x 2
Ta chn s nt ni suy ln lt l 5, 9, 11 v xy dng cc a thc Newton (hay
Lagrange) c4(x), c8(x) v c10(x) i qua cc nt ny v v th ca hm thc cng nh
sai s khi ni suy bng chng trnh ctcomchebynew.m vi cc N khc nhau.
x1 = [-1 -0.5 0 0.5 1.0];
y1 = f31(x1);
n1 = newton(x1,y1);
xx = [-1:0.02: 1]; %pham vi noi suy
yy1 = polyval(n1,xx); %ham xap xi qua 5 diem
yy = f31(xx); %ham thuc
subplot(221)
plot(xx,yy,'k-', x, y, 'o', xx, yy1, 'b');
title('Newton')
subplot(223)
plot(xx, yy1-yy, 'r') %do thi sai so
N = 4;
k = [0:N];
x = cos((2*N + 1 - 2*k)*pi/2/(N + 1));
y = f31(x);
c = newton(x, y) %da thuc noi suy dua tren cac nut Chebyshev
xx = [-1:0.02: 1]; %doan noi suy
yy = f31(xx); %do thi ham thuc
yy1 = polyval(c, xx); %do thi ham xap xi
subplot(222)
plot(xx, yy, 'k-', x, y, 'o', xx, yy1, 'b')
title('Chebyshev')
subplot(224)
plot(xx, yy1-yy, 'r') %do thi sai so

221

Khi tng s im mc, ngha l tng bc ca a thc Chebyschev, sai s gim. a


thc Chebyshev bc n c xc nh bng:
Tn+1(x') = cos((n+1)arccos(x'))
(3)
v cc nt Chebyshev cho bi (1) l nghim ca (3).
Ta c:
Tn +1 (x) = cos(arccos(x) + narccos(x))
= cos(arccos(x))cos(narccos(x) sin(arccos(x))sin(narccos(x))

= xT n(x) + 0.5 cos((n + 1)arccos(x) cos((n 1)arccos(x)


= xT n(x) + 0.5T n +1(x) 0.5T n 1(x)
nn:

n1
Tn +1(x) = 2xT n(x) T n 1(x)
T1(x') = cos(arccos(x') = x'
v
T0(x') = 1
Cc a thc Chebyshev n bc 6 l:
T0(x) = 1
T1(x') = x'
T2(x') = 2x'2 - 1
T3(x') = 4x'3 - 3x'
T4(x') = 8x'4 - 8'x2 + 1
T5(x') = 16x'5 - 20'x3 + 5x'
T6(x') = 32x'6 - 48x'4 + 18x'2 - 1
T7(x') = 64x'7 - 112x'5 + 56x'3 - 7x'
Hm f(x) c xp x bng:
N

f(x) = d m Tm (x) x=
m =0

2 a+b
x

b a
2

(4)
(5)

(6)

Trong :
1 n
1 n

=
f(x
)T
(x
)
f(x k )
k 0 k n + 1
n + 1 k =0
k =0
2 n
dm =
f(xk )Tm (xk )
n + 1 k =0
2 n
m(2n + 1 2k)
=
m = 1,2,...,n
f(x k )cos

n + 1 k =0
2(n + 1)
Ta xy dng hm cheby() tm a thc ni suy Chebyshev:
d0 =

(7)

(8)

function [c, x, y] = cheby(f, N, a, b)


%vao : f = ten ham tren doan [a, b]
%Ra: c = Cac he so cua da thuc Newton bac N
% (x,y) = cac nut Chebyshev
if nargin == 2
a = -1;
222

b = 1;
end
k = [0: N];
theta = (2*N + 1 - 2*k)*pi/(2*N + 2);
xn = cos(theta); %pt.(1)
x = (b - a)/2*xn +(a + b)/2; %pt.(2)
y = feval(f,x);
d(1) = y*ones(N + 1,1)/(N+1);
for m = 2: N + 1
cos_mth = cos((m-1)*theta);
d(m) = y*cos_mth'*2/(N + 1); %pt.(7)
end
xn = [2 -(a + b)]/(b - a); %nghich dao cua t. (2)
T_0 = 1; T_1 = xn; %pt.(5)
c = d(1)*[0 T_0] +d(2)*T_1; %pt.(6)
for m = 3: N + 1
tmp = T_1;
T_1 = 2*conv(xn,T_1) -[0 0 T_0]; %pt.(4)
T_0 = tmp;
c = [0 c] + d(m)*T_1; %pt.(6)
end
tm a thc Chebyshev dng xp x hm f(x) =

1
ta dng chng trnh
1 + 8x 2

ctcheby.m:
clear all, clc
N = 2;
a = -2;
b = 2;
[c, x1, y1] = cheby('f31', N, a, b) %da thuc Chebyshev
%so sanh voi da thuc Lagrange/Newton
k = [0:N];
xn = cos((2*N + 1 - 2*k)*pi/2/(N + 1));%pt.(1):nut Chebyshev
x = ((b-a)*xn +a + b)/2; %pt.(2)
y = f31(x);
n = newton(x, y)
l = lagrange(x, y)
6. XP X HM BNG PHN THC HU T
Xp x Pad dng xp x hm f(x) ti x0 bng hm hu t:
223

Q m (x x 0 )
Dn (x x0 )
q 0 + q 1 (x x 0 ) + q 2 (x x 0 )2 + " + q m (x x 0 )m
=
1 + d1 (x x 0 ) + d 2 (x x 0 )2 + " + d n (x x 0 )n
vi m = n hay m = n + 1
Trong f(x0), f'(x0),, f(m+n)(x0) cho
Trc ht ta khai trin Taylor hm f(x) ti x = x0 n bc (m + n).
f(x) Tm + n (x) = f(x0 ) + f (x0 )(x x0 )
Pm ,n (x x 0 ) =

f(x0 )
f (m + n) (x0 )
2
+
(x x0 ) + " +
(x x0 )m + n
2!
(m + n)!

(1)

(2)

= a 0 + a1(x x0 ) + a 2(x x0 )2 + " + a m + n(x x0 )m + n


n gin ta coi x0 = 0. Ta cn tnh cc h s ca Dn(x) v Qm(x) sao cho:
Q (x)
= 0 hay Tm+n(x)Dn(n) - Qm(x) = 0
Tm + n (x) m
Dn (x)
ngha l:
(a 0 + a1x + " + a m + n x m + n )(1 + d1x + " + d n x n ) = (q 0 + q 1x + " + q m x m ) (3)
Cn bng cc s hng cng bc hai v ta c:
a 0 = q 0
a + a d = q
0 1
1
1
(4)
a 2 + a1d1 + a 0d 2 = q 2
"

a m + a m 1d1 + a m 2d 2 + " + a m nd n = q m

a m +1 + a md1 + a m 1d 2 + " + a m n +1d n = 0


a
m + 2 + a m +1d1 + a md 2 + " + a m n + 2d n = 0

"
a m + n + a m + n 1d1 + a m + n2d 2 + " + a md n = 0

(5)

Trc ht ta gii (5) tm di v sau thay vo (4) tm qi.


Ta xy dng hm padeapp() tnh xp x:
function [num, den] = padeapp(f, xo, M, N, x0, xf)
%Vao : f = Ham can xap xi trong doan [xo, xf]
%Ra: num = Cac he so cua tu so
% den = Cac he so cua mau so
a(1) = feval(f, xo);
h = .01;
224

tmp = 1;
for i = 1:M + N
tmp = tmp*i*h; %i!h^i
dix = difapx(i, [-i i])*feval(f, xo + [-i:i]*h)'; %dao ham
a(i + 1) = dix/tmp; %he so chuoi Taylor

225

end
for m = 1:N
n = 1:N;
A(m, n) = a(M + 1 + m - n);
b(m) = -a(M + 1 + m);
end
d = A\b'; %pt.(5)
for m = 1: M + 1
mm = min(m - 1,N);
q(m) = a(m:-1:m - mm)*[1; d(1:mm)]; %pt.(4)
end
num = q(M + 1:-1:1)/d(N); den = [d(N:-1:1)' 1]/d(N); %giam dan
if nargout == 0 % ve ham thuc, khai trien taylor va ham Pade
if nargin < 6
x0 = xo - 1;
xf = xo + 1;
end
x = x0 + [xf - x0]/100*[0:100];
yt = feval(f, x);
x1 = x - xo;
yp = polyval(num,x1)./polyval(den,x1);
yT = polyval(a(M + N + 1:-1:1),x1);
clf, plot(x, yt, 'k', x, yp, 'r', x, yT, 'b')
end
xp x hm ex ta dng chng trnh ctpadeapp.m:
f1 = inline('exp(x)', 'x');
M = 3;
N = 2; %bac cua Q(x) va D(x)
xo = 0; %tam cua chuoi Taylor
[n,d] = padeapp(f1, xo, M, N) %tinh cac he so cua Q(x)/P(x)
x0 = -3.5;
xf = 0.5; %bien trai va phai cua khoang xap xi
padeapp(f1, xo, M, N, x0, xf) %xem do thi
7. NI SUY BNG A THC HERMIT
Trong mt s trng hp, ta cn tm hm a thc khng nhng i qua cc im
cho trc m cn phi tho mn iu kin v o hm ti cc im . Ta gi a thc
nh vy l a thc ni suy Hermit. n gin, ta kho st mt a thc bc 3:
h(x) = H 3 x 3 + H 2 x 2 + H1x + H0
(1)
227

i qua hai im (x0, y0), (x1, y1) v c cc o hm l y0 , y1 . Ta tm cc h s Hi


bng cch gii h phng trnh:
h(x 0 ) = H 3 x03 + H 2 x02 + H1x0 + H0 = y 0

3
2
h(x1 ) = H 3 x1 + H 2 x1 + H1x1 + H0 = y1
(2)

h
(x
)
=
3H
x
+
2H
x
+
H
=
y
0
3 0
2 0
1
0

h(x1 ) = 3H 3 x1 + 2H 2 x1 + H1 = y1
Cc o hm bc nht c tnh gn ng bng:
h(x0 + ) h(x0 ) y 2 y 0
=
y0 =

(3)
h(x1 ) h(x1 ) y1 y 3
=
y1 =

By gi ta tm a thc ni suy Lagrange hay Newton i qua 4 im:


(x0, y0), (x 2 = x 0 + ,y2 = y0 + y0 ) , (x 3 = x1 , y3 = y1 y1) , (x1, y1)
Hm hermit() to nn phng trnh (2):
function H = hermit(x0, y0, dy0, x1, y1, dy1)
A = [x0^3 x0^2 x0 1; x1^3 x1^2 x1 1;
3*x0^2 2*x0 1 0; 3*x1^2 2*x1 1 0];
b = [y0 y1 dy0 dy1]; %Pt.(2)
H = (A\b);
Hm hermits() dng hm hermit() tnh cc h s ca a thc Hermit trn nhiu
on v gi tr ni suy:
function [H,yi] = hermits(x, y, dy, xi)
% Tim cac he so cua c da thuc Hermite tren c doan
clc
for n = 1:length(x)-1
H(n,:) = hermit(0, y(n), dy(n), x(n + 1)-x(n), y(n + 1), dy(n + 1));
end
yi = ppval(mkpp(x, H),xi)
ni suy ta dng chng trnh cthermite.m:
clear all, clc
x = [0 1 2 3];
y = [1 2 4 5];
dy = [0 2 4 6];
[h, y] = hermits(x, y, dy, 1.5)
228

8. BIN I FOURIER
1. Bin i Fourrier: Tn hiu thc t thng bao gm cc thnh phn c tn s khc
nhau. Chui Fourier v php bn i Fourier l cng c ton hc dng phn tch
c tnh tn s ca tn hiu. C 4 nh ngha tng t nhau v chui v php bin i
Fourier, gm: chui Fourier lin tc theo t(CFS), php bin i Fourier lin tc theo
t(CFT), chui Fourier gin on theo t(DFS) v php bin i Fourier gin on theo
t(DFT). Trong cc cng c ny, DFT d dng lp trnh trn my tnh nn trong phn
ny ta s ch n n.
Gi s chui s liu { x[n] = x(nT), n = 0 : M - 1} vi T l chu k ly mu c
c bng cch ly mu mt tn hiu lin tc x(t) T ln trong mt giy. N cp im
DFT v iDFT c nh ngha bng:
DFT:

N 1

X(k) = x[n]e j2nk/N

(1a)

n =0
N 1

1
(1b)
X(k)e j2nk/N

N n =0
Ni chung h s DFT ca X(k) l mt s phc v n xc nh bin v pha ca
thnh phn tn hiu c tn s s k = k0(rad), tng ng vi tn s tng t k =
k0 = k0/T = 2k/NT (rad/s). Ta gi 0 = 2/N v 0 = 2/NT l cc tn s c bn
s v tng t (tn s phn gii) v y l hiu tn s c th phn bit bi N im
DFT.
DFT v DFS c cng bn cht nhng khc nhau v phm vi thi gian/tn s.
C th l tn hiu x[n] v DFT X[k] ca n ko di hu hn trn phm vi thi gian/tn
s {0 n N-1} v {0 k N-1}. Tn hiu x[n] c phn tch bi DFS v DFS
ca n X(k) l chu k tn hiu vi chu k N trn ton b tp s nguyn.
Bin i Fourier nhanh FFT l thut ton hiu qu tnh DFT v iDFT c
xy dng bng cch dng tnh chu k v tnh i xng cu nhn t ei2nk/N gim bt
s nhn t phc t N2 thnh (N/2)log2N )N th hin kch thc ca DFT. Hm
MATLAB fft() v ifft() thc hin thut ton i vi N = 2l (l l s nguyn khng m).
Nu di M ca chui s liu ban u khng phi l bi s ca 2, c th m rng
bng cch m thm s 0 vo cui chui v gi l m zero.
Ta xem xt hiu qa ny bng cch thc hin on lnh trong ctcompdftfft.m.

iDFT:

x[n] =

%So sanh phep bien doi Fourier nhanh va roi rac


clear, clf
N = 2^10;
n = [0:N - 1];
x = cos(2*pi*200/N*n)+ 0.5*sin(2*pi*300/N*n);
tic %ngung dong ho
for k = 0:N - 1
X(k+1) = x*exp(-j*2*pi*k*n/N).';
229

end %DFT
k = [0:N - 1];
for n = 0:N - 1
xr(n + 1) = X*exp(j*2*pi*k*n/N).';
end %IDFT
time_dft = toc
plot(k,abs(X))
pause, hold on
tic
X1 = fft(x); %FFT
xr1 = ifft(X1); %IFFT
time_fft = toc %dua ra thoi gian thuc hien
clf, plot(k,abs(X1),'r') %pho bien do
Chy on lnh v so snh thi gian thc hin 1024 im tnh DFT/iDFT v
FFT/iFFT.
2. ngha vt l ca bin i Fourrier ri rc: hiu c ngha vt l ca FFt
ta thc hin cc lnh trong chng trnh ctmeanning.m. Chng trnh cho ta ph bin
ca tn hiu
x(t) = sin(1.5t) + 0.5cos(3t)
(2)
c ly mu mi T s.
T cc kt qu ta thy khi T = 0.1 v N = 32 th Xa(k) ln ti k = 2 v k= 5. Lc
k0 = 2k/NT = 2k/3.2 1.5 v 3.125 3.
Khi T = 0.05 v N = 64 th Xb(k) cng ln ti k = 2 v k = 5. Lc k0 =
1.25 1.5 v 3.125 3.
Khi T = 0.1 v N = 64 th Xc(k) ln ti k = 4 ,k = 5, k = 9 v k = 10. Lc k0
= 2k/NT = 2k/6.4 1.25 ~ 1.5625 v 2.8125 ~ 3.
Khi T = 0.1 v N = 64 th Xd(k) ln ti k = 5 v k = 10. Lc k0 = 1.5625
1.5 v 3.125 3.
Tn ti nhiu ph DFT khc nhau ca cng mt tn hiu tng t, tu thuc
vo kch thc DFT, chu k ly mu, khong bin thin ca hm v m zero. So snh
vi ph ti T = 0.1s, ph ti T = 0.05s c phm vi tn s tng t [0, 2/Tb] rng
hn nhng c cng tn s phn gii tng t l 0 = 0/Tb = 2/NbTb = /1.6 =
2/NaTa. Ph khi c m zero trn.
clear, clf
w1 = 1.5*pi;
w2 = 3*pi;
N = 32;
n = [0:N - 1];
T = 0.1; %chu ki lay mau
230

t = n*T;
xan = sin(w1*t) + 0.5*sin(w2*t);
subplot(421)
stem(t,xan,'.')
k = 0:N - 1;
Xa = fft(xan);
dscrp=norm(xan-real(ifft(Xa)))
subplot(423)
stem(k,abs(Xa),'.')
N = 32;
n = [0:N - 1];
T = 0.1;
t = n*T;
xan = sin(w1*t) + 0.5*sin(w2*t);
subplot(422)
stem(t,xan,'.')
k = 0:N - 1;
Xa = fft(xan);
Dscrp = norm(xan - real(ifft(Xa)))
subplot(424)
stem(k, abs(Xa),'.')
N = 64;
n = [0:N - 1];
T = 0.05;
t = n*T;
xbn = sin(w1*t) + 0.5*sin(w2*t);
subplot(425)
stem(t,xbn,'.')
k = 0:N - 1;
Xb = fft(xbn);
subplot(427)
stem(k,abs(Xb),'.')
N = 64;
n = [0:N-1];
T = 0.1;
t = n*T;
xbn = sin(w1*t) + 0.5*sin(w2*t);
subplot(426)
stem(t, xbn,'.')
k = 0:N - 1;
Xb = fft(xbn);
subplot(428)
231

stem(k, abs(Xb),'.')
Ta c nhiu ph DFT cho cng mt tn hiu tng t, tu thuc vo kch thc
DFT, chu k ly mu, khong ly mu v m zero. So snh ph khi gim chu k ly
mu T t 0.1s n 0.05s
3. Ni suy bng cc dng bin i Fourrier ri rc: Ta dng DFS/DFT ni suy
dy x[n] nhn c t kt qu ly mu tn hiu khong cch cch u. Th tc gm
hai bc: ly N im FFT X(k) ca x[n] v dng cng thc:
1
j2 kt / NT

x (t) =
X(k)e

N |k|<N / 2
(5)
N / 2 1
1

= X(0) + 2 Real X(k)e j2 kt / NT + X(N / 2)cos(/T)


N
k =1

Ta xy dng hm ni suy interpdfs():


function [xi,Xi] = interpdfs(T, x, Ws, ti)
%T : chu li lay mau
%x : thu tu roi rac hoa
%Ws: tan so dung chuan (1.0 = pi[rad])
%ti: khoang thoi gian noi suy
if nargin < 4
ti = 5;
end
if nargin < 3 | Ws > 1
Ws = 1;
end
N = length(x);
if length(ti) == 1
ti = 0:T/ti:(N-1)*T; %khoang con duoc chia cho ti
end
ks = ceil(Ws*N/2);
Xi = fft(x);
Xi(ks + 2:N - ks) = zeros(1,N - 2*ks - 1); %pho da loc
xi = zeros(1,length(ti));
for k = 2:N/2
xi = xi+Xi(k)*exp(j*2*pi*(k - 1)*ti/N/T);
end
xi = real(2*xi+Xi(1)+Xi(N/2+1)*cos(pi*ti/T))/N; %pt.(.5)
ni suy ta dng chng trnh ctfourier.m:
clear, clf
232

w1 = pi;
w2 = .5*pi; %hai tan so
N = 32;
n = [0:N - 1];
T = 0.1;
t = n*T;
x = sin(w1*t)+0.5*sin(w2*t)+(rand(1,N) - 0.5); %0.2*sin(20*t);
ti = [0:T/5:(N - 1)*T];
subplot(411), plot(t,x,'k.') %so lieu ban dau
title('So lieu ban dau va ket qua noi suy')
[xi,Xi] = interpdfs(T,x,1,ti);
hold on, plot(ti,xi,'r') %tai tao tin hieu
k = [0:N - 1];
subplot(412), stem(k,abs(Xi),'k.') %pho ban dau
title('Pho ban dau')
[xi,Xi] = interpdfs(T,x,1/2,ti);
subplot(413), stem(k,abs(Xi),'r.') %pho da loc
title('Pho da loc')
subplot(414), plot(t,x,'k.', ti,xi,'r') %tin hieu da loc
title('Tin hieu da loc')
9. XP X HM BNG PHNG PHP BNH PHNG B NHT
1. Khi nim chung: Trong cc mc trc ta ni suy gi tr ca hm. Bi ton
l cho mt hm di dng bng s v phi tm gi tr ca hm ti mt gi tr ca i
s khng nm trong bng.
Trong thc t, bn cnh bi ton ni suy ta cn gp mt dng bi ton khc.
l tm cng thc thc nghim ca mt hm.
Ni dung bi ton l t mt lot cc im cho trc (c th l cc gi tr ca
mt php o no ) ta phi tm mt hm xp x cc gi tr cho. Ta s dng phng
php bnh phng ti thiu gii bi ton.
Gi s c mu quan st (xi, yi) ca hm y = f(x). Ta chn hm f(x) c dng:
f(x) = a0f0(x) + a1f1(x) + a2f2(x)...
(1)
Trong cc hm f0(x), f1(x), f2(x) v.v. l (m+1) hm c lp tuyn tnh m ta c th
chn tu v cc h s ai l tham s cha bit m ta phi xc nh da vo h hm
chn v cc im quan st. Sai s gia tr o c v tr tnh theo (1) l :
ei = yi - f(xi)
(2)
Sai s ny c th m hay dng tu tng gi tr ca yi. Khi dng phng php bnh
phng b nht ta xt bnh phng ca sai s ti mt im:
e i2 = [ y i f(xi )] 2
(3)
Vi n im tng bnh phng ca sai s s l :

233

i =1

i =1

S = e i2 = {y i [a 0 f0 (x i ) + a1f1 (x i ) + + a m fm (x i )]}

R rng S l hm ca cc gi tr cn tm ai v chng ta s chn cc ai sao cho S


S
phi bng khng.
t gi tr min, ngha l cc o hm
a i
Ta s xt cc trng hp c th.
2. Hm xp x c dng a thc: Trong trng hp tng qut ta chn h hm xp x
l mt a thc, ngha l:
f(x) = a0 + a1x + a2x2 ++ amxm
Vy hm S l :

S = ( y i a 0 + a1x + a 2 x 2 + + a m x m )

Theo iu kin o hm

S
= 0 ta nhn c h phng trnh:
a i

n
n
a n x m + a
m 1
+ + na 0 = y i
i
m 1 x i
m
i =1
i =1
i =1
n
n
n
n
a x m + 1 + a x m + +a x = x y
m 1
i
0
i
i i
m i =1 i
i =1
i =1
i =1
n
n
n
n
a m xim + 2 + a m 1 x im + 1 + +a 0 xi2 = x i2 y i
i =1
i =1
i =1
i =1
n
n
n
n m+3
m+2
3
3
a m xi + a m 1 xi + +a 0 x i = xi y i
i =1
i =1
i =1
i =1

n
n
n
n
a m xi2 m + a m 1 x i2 m 1 + +a 0 x im = x im y i
i =1
i =1
i =1
i =1

y l mt h phng trnh tuyn tnh. Gii n ta nhn c cc ga tr ai.


Ta xy dng hm polynomfit() thc hin thut ton trn:
function x = polyfits(xData, yData, m)
%Dung de tinh he so cua da thuc xap xi
% Cu phap: x = polyfits(xData, yData, m)
m = m+1;
A = zeros(m);
b = zeros(m, 1);
s = zeros(2*m-1, 1);
for i = 1:length(xData)
temp = yData(i);
for j = 1:m
234

b(j) = b(j) + temp;


temp = temp*xData(i);
end
temp = 1;
for j = 1:2*m-1
s(j) = s(j) + temp;
temp = temp*xData(i);
end
end
for i = 1:m
for j = 1:m
A(i, j) = s(i+j-1);
end
end
x = A\b;
% Sap xep lai he so tu so mu cao nhat
x = flipdim(x, 1);
xp x mt dy s liu bng hm a thc ta dng chng trnh ctpolynomfit.m:
clear all, clc
xData = [0 1 2 3 4];
yData = [1 8 24 63 124];
x = polyfits(xData, yData, 3);
y = 0:0.1:4;
z = polyval(x', y);
hold on
plot(y, z,'-b', xData, yData, 'ro');
3.Hm dng Aecx: Khi cc s liu th hin mt s bin i n iu ta dng hm xp
x l y = Aecx. Ly logarit hai v ta c :
lny = lnA + cxlne
S
Theo iu kin o hm
= 0 ta c h phng trnh :
a i

c n x + n ln A = n ln y
i
i

i =1
i =1
n
n
n
c x i2 + ln A xi = x i ln y i
i =1
i =1
i =1
Gii h phng trnh ny ta c cc h s A v c.
Ta xy dng hm expfit() xp x
235

function [c,A] = expfit(x, y)


a = sum(x);
b = size(x,2);
c = sum(log(y));
d = sum(x.^2);
e = sum(x.*log(y));
d1 = a*a - d*b;
d2 = c*a - e*b;
d3 = a*e - c*d;
c = d2/d1;
A = exp(d3/d1);
Ta dng chng trnh ctexpfit.m xp x dy s liu cho
clear all, clc
x = [1.2 2.8 4.3 5.4
6.8 7.9];
y = [7.5
16.1 38.9 67
146.6 266.2];
[c, A] = expfit(x, y);
t = 0:0.1:8;
z = A*exp(c*t);
plot(t, z, '-b', x, y, 'ro');
4. Hm dng Axq: Khi cc s liu th hin mt s bin i n iu ta cng c th
dng hm xp x l y = Axq. Ly logarit hai v ta c:
lny = lnA + qlnx
Theo iu kin o hm trit tiu ta c h phng trnh :
q n ln x + n ln A = n ln y
i
i

i =1
i =1
n
n
n
q ln 2 x i + ln A ln x i = ln x i ln y i
i =1
i =1
i =1
Gii h phng trnh ny ta c cc h s A v q.
Ta xy dng hm powerfit() xp x:
function [q, A] = powerfit(x, y)
a = sum(log(x));
b = size(x, 2);
c = sum(log(y));
d = sum(log(x).^2);
e = sum(log(x).*log(y));
d1 = a*a - d*b;
d2 = c*a - e*b;
d3 = a*e - c*d;
q = d2/d1;
236

A = exp(d3/d1);
Ta dng chng trnh ctpowerfit.m xp x dy s liu cho:
clc
x=[ 1
2
3
4
5];
y = [1.5
15.1
52.5 130.5
[q,A] = powerfit(x, y)
t = 0.1:0.1:5;
z = exp(log(A)+q*log(t));
plot(t, z, '-b', x, y, 'ro');

253];

5. Hm lng gic: Khi quan h y = f(x) c dng tun hon ta dng hm xp x l t


hp tuyn tnh ca cc hm sin v cosin dng:
n

i =1

i =1

f( x) = a 0 + a i cos( ix) + b i sin(ix)


n gin trc ht ta xt hm ch c mt s hng sin-cos, ngha l :
f( x) = a 0 + a 1 cos x + b1 sin x
Hm S s c dng :
n

S = y i (a 0 + a1cosx + b1sinx)

i =1

Theo iu kin o hm trit tiu ta c h phng trnh i vi cc h s dng:

n
cosxi
sinxi a0 yi

cos2xi cos xisinxi a1 = yicosxi


cosxi
sinxi cos xi sinxi
sin 2xi b1 yisinxi

Do:
sinxi = 0
cos xi = 0
n
n
2
sin xi = 1 cos2xi = 1
n
2
n
2
cos xisinxi = 0
n
nn h phng trnh c dng n gin :

0 a 0 y i
n 0

0 n 2 0 a =
y
cos
x

1
i
i


0 0 n 2 b1 y i sinxi
Gii h ta c :
237

y
2
2
a0 = i
a1 = y i cos xi
b1 = y i sin xi
n
n
n
Trong trng hp tng qut, mt cch tng t ta c:
y
2
2
a0 =
a i = y cos ix
bi = y sin ix
n
n
n
Ta xy dng hm sinfit() xp x:
function [a, b, c, omega] = sinfit(x, y, T)
%T la chu ki
omega = 2*pi/T;
n = size(x,2);
a = sum(y)/n;
b = (2/n)*sum(y.*cos(omega*x));
c = (2/n)*sum(y.*sin(omega*x));
Ta dng chng trnh ctsinfit.m tnh:
c ear all, clc
x = [0 0.15 0.3 0.45 0.6 0.75 0.9 1.05 1.2 1.3];
y = [2.2
1.595 1.031 0.722 0.786 1.2 1.81 2.369 2.678 2.614];
T = 1.5;
[a, b, c, omega] = sinfit(x, y, T)
t = 0.:0.01:1.5;
z = a + b*cos(omega*t) + c*sin(omega*t);
plot(t, z,'-b', x, y, 'ro');
6. Hm hu t: Khi quan h y = f(x) c dng ng cong bo ho hay dng arctan,
tan v.v ta dng hm xp x l hm hu t dng n gin:
ax
y=
b+x
Ly nghch o ca n ta c :
1 b1 1
=
+
y ax a
t 1/y = Y, 1/x = X, b/a = B v 1/a = A phng trnh trn s c dng:
Y = A + BX
v l mt a thc bc mt. Do vy ta c h phng trnh i vi cc h s A v B l:
nA + B n 1 = n 1
x y

i =1 i
i =1 i
n
n
n
A 1 + B 1 = 1
2
i =1 x i
i =1 xi
i =1 xi y i
238

v t tnh c a v b.
Ta xy dng hm racfit() xp x:
function [a, b] = racfit(x, y)
a1 = size(x, 2);
b1 = sum(1./x);
c1 = sum(1./y);
d1 = sum(1./x.^2);
e1 = sum((1./x).*(1./y));
del = a1*d1 - b1*b1;
del1 = c1*d1 - e1*b1;
del2 = a1*e1 - b1*c1;
A = del1/del;
B = del2/del;
a = 1/A;
b = B/A;
xp x ta dng chng trnh ctracfit.m:
clear all, clc
x = [1 2 3 4 5];
y = [0.3333333
0.5 0.6
[a, b] = racfit(x, y)
t = 0.:0.01:5;
z = a*t./(b+t)
plot(t, z,'-b', x, y, 'ro');

0.66666

0.7142857];

239

CHNG 5: CC PHNG TRNH PHI TUYN


1. KHI NIM CHUNG
Nu phng trnh i s hay siu vit kh phc tp th t khi tm c nghim
ng. Bi vy vic tm nghim gn ng v c lng sai s l rt cn thit.
Ta xt phng trnh :
f(x) = 0
(1)
vi f(x) l hm cho trc ca bin x. Chng ta cn tm gi tr gn ng ca nghim
ca phng trnh ny.
Qu trnh gii thng chia lm hai bc: bc s b v bc kin ton nghim.
Bc gii s b c 3 nhim v: vy nghim, tch nghim v thu hp khong
cha nghim.
Vy nghim l tm xem cc nghim ca phng trnh c th nm trn nhng
on no ca trc x. Tch nghim l tm cc khong cha nghim sao cho trong mi
khong ch c ng mt nghim. Thu hp khong cha nghim l lm cho khong
cha nghim cng nh cng tt. Sau bc s b ta c khong cha nghim nh.
xc nh khong cha nghim ta c th dng phng php th. Ngoi ra ta cng
c th tm nghim bng phng php tm tng dn. tng ca phng php ny l
ny f1(x).f2(x) < 0 th c t nht mt nghim ca phng trnh trong on [x1, x2]. Nu
on [x1, x2] nh th trong on s c mt nghim duy nht. Nh vy ta c th
pht hin ra nghim bng cch tnh tr ca hm trn cc on x v xem chng c i
du khng.
Ta xy dng hm rootsearch() tm khong cha nghim.
function [x1,x2] = rootsearch(func,a,b,dx)
% Tim doan chua nghiem cua ham f(x).
% Cu phap: [x1,x2] = rootsearch(func,a,d,dx)
% func = ham f(x).
% a,b = daon tim.
% dx = khoang tang
% x1,x2 = doan chu nghiem (a,b);
% dat la NaN neu khong thay nghiem
x1 = a; f1 = feval(func,x1);
x2 = a + dx; f2 = feval(func,x2);
while f1*f2 > 0.0
if x1 >= b
x1 = NaN; x2 = NaN;
return
end
x1 = x2; f1 = f2;
x2 = x1 + dx; f2 = feval(func,x2);
242

end
Khi pht hin thy khong cha nghim, hm tr v gi tr bin ca on. Nu khng
c nghim, x1 = x2 = NaN. Ta gi rootsearch() nhiu ln pht hin ht cc on
cha nghim. Vi v d tm khong cha nghim ca hm f(x) = x3 - 10x2 + 5 ta dng
chng trnh ctrootsearch.m
clear all, clc
f = inline('x^3 - 10*x^2 + 5');
[x1, x2] = rootsearch(f,2,10,.2)
Bc kin ton nghim tm cc nghim gn ng theo yu cu t ra.
C rt nhiu phng php xc nh nghim ca (1). Sau y chng ta xt tng
phng php.
2. PHNG PHP LP N
Gi s phng trnh (1) c a v dng tng ng:
x = g(x)
(2)
t gi tr xo no gi l gi tr lp u tin ta lp dy xp x bng cng thc:
xn = g(xn-1)
(3)
vi n = 1,2,....
Hm g(x) c gi l hm lp. Nu dy xn khi n th ta ni php lp (3) hi
t.
Ta c nh l: Xt phng php lp (3), gi s:
- [a, b] l khong cha nghim ca phng trnh (1) tc l ca (2)
- mi xn tnh theo (3) u thuc [a, b]
- g(x) c o hm tho mn :
g(x) q < 1
a<x<b
(4)
trong q l mt hng s th phng php lp (3) hi t
Ta c th minh ho php lp trn bng hnh v sau.

xo
x1
Ta xy dng hm simpiter() lp

xo x1

function [x, err, xx] = simpiter(g, x0, tolx, maxiter)


243

% giai pt x = g(x) tu x0 bang cah lap


%vao : g, x0 = ham va gia tri dau
% tolx = sai so mong muon
% maxiter = so lan lap max
%ra: x = nghiem
% err = sai so |x(k) - x(k - 1)|
% xx = cac gia tri trung gian
if nargin < 4
maxiter = 100;
end
if nargin < 3
tolx = 1e-6;
end
xx(1) = x0;
for k = 2:maxiter
xx(k) = feval(g, xx(k - 1));
err = abs(xx(k) - xx(k - 1));
if err < tolx
break;
end
end
x = xx(k);
if k == maxiter
fprintf('Khong hoi tu sau %d lan lap\n', maxiter)
else
fprintf('Hoi tu sau %d lan lap\n',k)
end
tnh li v d trn ta dng chng trnh ctsimpiter4_2.m
clear all, clc
f = inline('-0.5*((x - 1).^2 - 3)');
[x, ss, xx] = simpiter(f, 0.5,.00001,200)
3. PHNG PHP CHIA I CUNG
Gi s cho phng trnh f(x) = 0 vi f(x)
lin tc trn on [a, b] v f(a).f(b) < 0. Chia
y
on [a, b] thnh 2 phn bi chnh im chia (a
+ b)/2.
1. Nu f((a+b)/2) = 0 th = (a+b)/2
a

b1

x
244

2. Nu f((a + b)/2) 0 th chn


[a,(a+b)/2] hay [(a + b)/2, b] m gi tr hm hai
u tri du v k hiu l [a1,b1]. i vi [a1, b1]
ta li tin hnh nh [a, b].
Ta xy dng hm bisection() thc hin thut ton trn
function [x,err,xx] = bisection(f, a, b, tolx, maxiter)
%bisection.m de giai pt f(x) = 0 bang phuong phap chia doi cung
%vao: f = ham can tim nghiem
% a/b = bien cua doan can tim nghiem
% tolx = sai so mong muon
% maxiter lan lap max
%ra: x = nghiem
% err = sai so
% xx = cac gia tri trung gian
tol = eps;
fa = feval(f, a);
fb = feval(f, b);
if fa*fb > 0
error('Nghiem khong o trong doan nay');
end
for k = 1: maxiter
xx(k) = (a + b)/2;
fx = feval(f, xx(k));
err = (b - a)/2;
if abs(fx) < tol | abs(err) < tolx
break;
elseif fx*fa > 0
a = xx(k);
fa = fx;
else b = xx(k);
end
end
x = xx(k);
if k == maxiter
fprintf('Khong hoi tu sau %d lan lap\n', maxiter),
else
fprintf('Hoi tu sau %d lan lap\n',k),
end
tm nghim ca hm f(x) = tg( - ) - x ta dng chng trnh ctbisection.m
245

clear all, clc


f = inline('tan(pi - x) - x');
[x, ss, xx] = bisection(f, 1.6, 3, 1e-4, 50)
4. PHNG PHP DY CUNG
Gi s f(x) lin tc trn trn on [a, b] v f(a).f(b) < 0. Cn tm nghim ca
f(x) = 0. xc nh ta xem f(a) < 0 v f(b) > 0. Khi thay v chia i on [a, b] ta
chia [a, b] theo t l -f(a)/f(b). iu cho ta nghim gn ng :
x1 = a + h1
y
Trong
f(a)
h = f(a)+ f(b) (ba)
Tip theo dng cch vi on [ a, x1]
hay [x1, b] m hai u hm nhn gi tr tri du ta

x
x1
a
c nghim gn ng x2 v.v.
b
V mt hnh hc, phng php ny c
ngha l k dy cung ca ng cong f(x)
qua hai im A[a, f(a)] v B[b, f(b)] hay ni cch khc l tuyn tnh ho hm f(x)
trong on [a, b].
Tht vy phng trnh dy cung AB c dng:
f(a) f(b)
af(b) bf(a)
y=
x+
ab
ab
Cho x = x1, y = 0 ta c
af(b) bf(a)
x1 =
(1)
f(b) f(a)
Ta xy dng hm chord() thc hin thut ton trn
1

function [x, err, xx] = chord(f, a, b, tolx, maxiter)


%giai pt f(x) = 0 bg phuong phap day cung.
%vao : f - ham can tim nghiem
% a/b - khoang tim nghiem
% tolx - sai so mong muon cua nghiem
% maxiter lan lap max
%ra: x - nghiem
% err - sai so
% xx - cac gia tri trung gian
tolfun = eps;
fa = feval(f, a);
fb = feval(f, b);
if fa*fb > 0
error('Nghiem khong o trong doan nay !');
246

end
for k = 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)));
if abs(fx) < tolfun | err<tolx
break;
elseif fx*fa > 0
a = xx(k);
fa = fx;
else
b = xx(k);
fb = fx;
end
end
x = xx(k);
if k == maxiter
fprintf('Khong hoi tu sau %d lan lap\n', maxiter)
else
fprintf('Hoi tu sau %d lan lap\n', k)
end
tm nghim ca hm f(x) = tg( -x) - x ta dng chng trnh ctchord.m
clear all, clc
f = inline('tan(pi - x) - x');
[x, ss, xx] = falsp(f, 1.7, 3, 1e-4, 50)
5. PHNG PHP NEWTON - RAPHSON
Phng php lp Newton(cn gi l phng php tip tuyn)c dng nhiu
v n hi t nhanh. Tuy nhin phng php ny i hi tnh f'(x). Cng thc Newton Raphson c suy t khai trin Taylor ca f(x) ln cn x:
f(x i+1 ) = f(x i ) + f(x i )(x i+1 x i ) + O(x i+1 x i )2
(1)
Nu xi+1 l nghim ca phng trnh f(x) = 0 th (1) tr thnh:
0 = f(xi ) + f(xi )(xi+1 xi ) + O(xi+1 xi )2
(2)
Gi s rng xi gn vi xi+1, ta c th b qua s hng cui trong (2) v c cng thc
Newton - Raphson:
f(xi )
(3)
x i +1 = x i
f(xi )
Nu xi+1 l nghim ng ca phng trnh th sai s l ei = x - xi. Khi nghim c
tnh theo (3) th sai s l:
247

f(x i ) 2
ei
y
2f(xi )
Minh ho hnh hc ca thut ton Newton Raphson nh hnh bn.
Thut ton c tm lc nh sau:
- cho xo
a
f(x)
- tnh x =
f (x)
- cho x = x + x
- lp li bc 2 v 3 cho n khi |x|
Ta xy dng hm newtonraphson() thc hin thut ton trn.
e i +1 =

x
x1 b=xo

function [x, fx, xx] = newtonraphson(f, df, x0, tolx, maxiter)


%giai pt f(x) = 0 bang pp Newton-Raphson.
%vao: f = ftn to be given as a string f if defined in an M-file
% df = df(x)/dx (neu khong cho se dung dao ham so.)
% x0 = gia tri ban dau
% tolx = sai so mong muon
% maxiter = so lan lap max
%ra: x = nghiem
% fx = f(x(last)), xx = cac gia tri trung gian
h = 1e-4;
h2 = 2*h;
tolf = eps;
if nargin == 4 & isnumeric(df)
maxiter = tolx;
tolx = x0;
x0 = df;
end
xx(1) = x0;
fx = feval(f,x0);
for k = 1: maxiter
if ~isnumeric(df)
dfdx = feval(df, xx(k)); %dao ham cua ham
else
dfdx = (feval(f, xx(k) + h)-feval(f, xx(k) - h))/h2; %dao ham so
end
dx = -fx/dfdx;
xx(k+1) = xx(k) + dx; %pt.(3)
fx = feval(f, xx(k + 1));
if abs(fx)<tolf | abs(dx) < tolx,
break;
248

end
end
x = xx(k + 1);
if k == maxiter
fprintf('Khong hoi tu sau %d lan lap\n', maxiter)
else
fprintf('Hoi tu sau %d lan lap\n', k)
end
tnh li nghim ca hm cho trong v d trn ta dng chng trnh ctnewraph.m
clear all, clc
f = inline('x.^3 - 10*x.^2 + 5');
[x, ss, xx] = newtonraphson(f, 0.7, 1e-4, 50)
6. PHNG PHP CT TUYN
Phng php ct tuyn c th coi l bin th ca phng php Newton Raphson theo ngha o hm c thay bng xp x:
f(x k ) f(x k 1 )
(1)
f(x)
x k x k 1
v tn t thi gian tnh hn khi dng o hm gii tch hay o hm s.
Bng cch xp x, biu thc:
f(x k )
x k +1 = x k
f(x k )
tr thnh:
x k x k 1
f(x k )
x k +1 = x k f(x k )
(2)
= xk

f(x
)
f(x
)
dfdx
k 1
k
k
f(x k ) f(x k 1 )
vi dfdx k =
x k x k 1
Phng trnh (2) chnh l biu thc tng qut ca php lp. Hai gi tr u tin x1 v
x2 cn khi ng php lp. Qu trnh lp c minh ho bng hnh a
y

f(x)
f(x)

x2

x1

x0

x1

x0

x
249

Php lp c th khng hi t (hnh b). Tuy nhin khi hi t, n hi rt nhanh. Ta xy


dng hm secant() thc hin thut ton trn.
function [x, fx, xx] = secant(f, x0, x1, tolx, maxiter)
% giai pt f(x) = 0 bg phuong phap day cung
%vao : f - ham can tim nghiem
% x0, x1 - gia tri khoi dong phep lap
% tolx - sai so mong muon
% maxiter - so lan lap max
%ra: x = nghiem
% fx = f(x(last)), xx = cac gia tri trung gian
h = (x1 - x0)/100;
h2 = 2*h;
tolfun = eps;
xx(1) = x0;
fx = feval(f, x0);
for k = 1: maxiter
if k <= 1
dfdx = (feval(f,xx(k) + h) - feval(f,xx(k) - h))/h2;
else
dfdx = (fx - fx0)/dx;
end
dx = -fx/dfdx;
xx(k + 1) = xx(k) + dx; %pt.(2)
fx0 = fx;
fx = feval(f, xx(k+1));
if abs(fx) < tolfun | abs(dx) < tolx,
break;
end
end
x = xx(k + 1);
if k == maxiter
fprintf('Khong hoi tu sau %d lan lap\n', maxiter)
else
fprintf('Hoi tu sau %d lan lap\n', k)
end
tnh nghim ca hm f(x) = x3 - 10x2 + 5 ta dng chng trnh ctsecant.m
clear all, clc
f = inline('x.^3 - 10*x.^2 + 5');
250

[x, ss, xx] = secant(f, 0.5, 1, 1e-4, 50)


7. PHNG PHP BRENT
Phng php Brent kt hp phng php chia i cung v phng php ni
suy bc hai to ra mt phng php tm nghim ca phng trnh f(x) = 0 rt hiu
qu. Phng php ny dng khi o hm ca f(x) kh tnh hay khng th tnh c.
Gi s ta cn tm nghim trong on [x1, x2]. Qu trnh tm nghim bt u bng vic
chia i on [x1, x2] bng im x3.

x1 x

x3

x2

x1

x3 x

x2

Trong qu trnh ny ta tnh c f(x1), f(x2) v f(x3). Qua 3 im ny ta c mt ng


cong bc 2 v tm c nghim x ca ng cong bc 2 ny. Nu x nm trong on
[x1, x2] nh hnh trn th gi tr ny c chp nhn. Tip theo ta tm nghim trong
on [x1, x3] hay [x3, x2] tu theo v tr ca x.
a thc ni suy Lagrange qua 3 im l:
(f f2 )(f f3 )
(f f1 )(f f3 )
(f f1 )(f f2 )
x(y) =
x1+
x2+
x3
(f1 f2 )(f1 f3 )
(f2 f1 )(f2 f3 )
(f3 f1 )(f3 f2 )
Cho y = 0 ta c:
f f x (f f ) + f1f3 x 2 (f3 f1 ) + f1f2 x 3 (f1 f2 )
x= 2 3 1 2 3
(1)
(f1 f2 )(f2 f3 )(f3 f1 )
thay i ca nghim l:
x (f f )(f f + f ) + f2 x1 (f2 f3 ) + f1x 2 (f3 f1 )
x = x x 3 = f3 3 1 2 2 3 1
(2)
(f1 f2 )(f2 f3 )(f3 f1 )
Ta xy dng hm brent() thc hin thut ton trn
function root = brent(f, a, b, tol)
% giai pt f(x) = 0 bang thuat toan Brent.
% Cu phap: root = brent(f, a, b, tol)
% vao: f = ham can tim nghiem
% a, b = doan chua nghiem
% tol = sai so cho truoc
if nargin < 4;
tol = 1.0e6*eps;
end
% lan chia doi dau tien
x1 = a;
251

f1 = feval(f,x 1);
if f1 == 0;
root = x1;
return;
end
x2 = b;
f2 = feval(f, x2);
if f2 == 0;
root = x2;
return;
end
if f1*f2 > 0.0
error('Nghiem khong nam trong doan nay')
end
x3 = 0.5*(a + b);
% bat dau lap.
for i = 1:30
f3 = feval(f, x3);
if abs(f3) < tol
root = x3;
return
end
% xac dinh doan chua nghiem.
if f1*f3 < 0.0;
b = x3;
else
a = x3;
end
if (b - a) < tol*max(abs(b),1.0)
root = 0.5*(a + b);
return
end
% noi suy bac 2.
denom = (f2 - f1)*(f3 - f1)*(f2 - f3);
numer = x3*(f1 - f2)*(f2 - f3 + f1)...
+ f2*x1*(f2 - f3) + f1*x2*(f3 - f1);
if denom == 0;
dx = b - a;
else
dx = f3*numer/denom;
end
x = x3 + dx;
%neu lap ra ngoai doan (a,b), dung cach chia doi cung
252

if (b - x)*(x - a) < 0.0


dx = 0.5*(b - a);
x = a + dx;
end
% cho x = x3 & chon x1, x2 moi sao cho x1 < x3 < x2.
if x < x3
x2 = x3;
f2 = f3;
else
x1 = x3;
f1 = f3;
end
x3 = x;
end
root = NaN;
tm nghim ca phng trnh x|cos(x)| - 1 = 0 ta dng chng trnh ctbrent.m
clear all, clc
f = inline('x.*abs(cos(x)) - 1');
x = brent(f, 0.0, 4,1e-4)
8. PHNG PHP NGOI SUY AITKEN
Xt phng php lp:
x = f(x)
(1)
vi f(x) tho mn iu kin hi t ca php lp, ngha l vi mi x [a, b] ta c:
(2)
| f(x) | q < 1
Nh vy :
xn+1 = f(xn)
(3)
xn = f(xn-1)
(4)
Tr (3) cho (4) v p dng nh l Lagrange cho v phi vi c [a, b] ta c :
xn+1- xn = f(xn) - f(xn-1) = (xn - xn-1)f(c)
(5)
V php lp (1) nn :
(6)
| xn+1- xn | q | xn - xn-1 |
Do (6) ng vi mi n nn cho n = 1 , 2 , 3 , . . . ta c :
| x2 - x1 | q | x1 - xo |
| x3 - x 2 | q | x2 - x 1 |
...................
| xn+1 - xn | q | xn - xn-1 |
iu ny c ngha l dy xi+1 - xi , mt cch gn ng, l mt cp s nhn. Ta cng
coi rng dy xn - y vi y l nghim ng ca (1), gn ng nh mt cp s nhn c

253

cng sai q . Nh vy :
x n +1 y
=q<1
(7)
xn y
hay : x n +1 y = q(x n y)
(8)
Tng t ta c :
x n + 2 y = q(x n +1 y)
(9)
T (8) v (9) ta c :
x x n +1
q = n+2
(10)
x n +1 x n
Thay gi tr ca q va tnh (10) vo biu thc ca q trn ta c :
2
x n x n +1 )
(
y = xn
(11)
x n 2x n +1 + x n + 2
Cng thc (11) c gi l cng thc ngoi suy Adam. Nh vy theo (11) trc ht ta
dng phng php lp tnh gi tr gn ng xn+2, xn+1, xn ca nghim v sau theo
(11) tm c nghim vi sai s nh hn.
Khi phng php lp c kt hp vi phng php Aitken ta c phng php
Steffensen. Bt u lp t x0, hai bc lp c dng tnh:
x1 = f(x0)
x2 = f(x1)
v sau dng thut ton Aitken tinh y0 theo (11). tip tc lp ta cho x0=y0 v
lp li bc tnh trc.
Ta xy dng hm aitstef() thc hin hai thut ton trn
function [x, y] = aitstef(g, x0, tolx, maxiter)
% phuong phap Aitken - Steffenson
% giai pt x = g(x)
xstart = x0;
f0 = 0;
f0old = 1.;
count = 0;
while ((count < maxiter) & (abs(f0 - f0old) > .0000001))
count = count + 1;
f0old = f0;
x1 = feval(g, x0);
x2 = feval(g, x1);
f0 = x0 - (x1 - x0)*(x1 - x0) / (x2 - 2.*x1 + x0);
x0 = x1;
end
x = f0;
fprintf('\n');
fprintf('Phuong phap Aitken-Steffenson');
254

x0 = xstart;
count = 0;
f0 = 0;
x2 = 1.;
while ((count < maxiter) & (abs(f0 - x2) > .0000001))
count = count+1;
x1 = feval(g, x0);
x2 = feval(g, x1);
f0 = x0 - (x1 - x0)*(x1 - x0) / (x2 - 2.*x1 + x0);
x0 = f0;
end
y = f0;
tm nghim ca phng trnh x = (2 - ex + x2)/3 = g(x) ta dng chng trnh
ctaitstef.m
clear all, clc
f = inline('(2.-exp(x)+x.^2)/3');
[x, y] = aitstef(f,0., 1e-4, 50)
9. PHNG PHP MUELLER
Trong phng php dy cung khi tm nghim trong on [a, b] ta xp x hm
bng mt ng thng. Tuy nhin gim lng tnh ton v nghim hi t nhanh
hn ta c th dng phng php Muller. Ni dung ca phng php ny l thay hm
trong on [a, b] bng mt ng cong bc 2 m ta hon ton c th tm nghim
chnh xc ca n.
Gi cc im c honh ln lt l a = x2, b = x1 v ta chn thm mt
im x0 nm trong on [x2, x1]. Gi
h1 = x1 - x0
x0,f0
h2 = x0 - x 2
v = x - x0
x1,f1
f(x0) = f0
f(x1) = f1
f(x2) = f2
h
= 2
f(x) x2,f2
h2
h1
h1
Qua 3 im ny ta c mt ng parabol:
y = av2 + bv + c
Ta tm cc h s a, b, c t cc gi tr bit v:

255

v = 0 (x = x 0 )

a(0)2 + b(0) + c = f0

v = h1 (x = x1 )

ah12 + bh1 + c = f1

v = h 2 (x = x 2 ) ah 22 bh 2 + c = f2
T ta c :
f f (1 + ) + f2
a = 1 02
h 1 (1 + )

f1 f0 ah 12
b=
h1
c = f0
Sau ta tm nghim ca phng trnh av2 + bv + c = 0 v c :
2c
n = x0
b b 2 4ac
Du ca mu s c chn sao cho n c gi tr tuyt i ln nht, ngha l khi b > 0,
ta ly du +, khi b < 0 ta ly du -.
Tip ta chn x0 lm mt trong 3 im tnh xp x mi. Cc im ny c chn
gn nhau nht, ngha l nu nghim n bn phi x0 th ba im tnh mi l x0, x1 v n;
nu n nm bn tri x0 th 3 im tnh mi l x0, x2 v nghim. Tip tc qu trnh tnh
n khi t chnh xc yu cu th dng li.
Ta xy dng hm muller() thc hin thut ton trn
function p = muller(f, a, b, maxiter)
% giai pt f(x) = 0
%vao - f la ham can tim nghiem
%
- a, b la doan chua nghiem
% - maxiter so lan lap max
%ra - p xap xi Muller cua f
% - y la gia tri y = f(p)
% - err sai so thuc cua nghiem.
%khoi gan a,b,x0 va cac gia tri tuong ung cua ham
x0 = (a + b)/2.;
P = [x0 a b];
Y = feval(f, P);
delta = 1e-4;
%tinh cac he so cua pt bac hai
for k = 1:maxiter
h0 = P(1) - P(3);
h1 = P(2) - P(3);
e0 = Y(1) - Y(3);
e1 = Y(2) - Y(3);
c = Y(3);
256

denom = h1*h0^2 - h0*h1^2;


a = (e0*h1 - e1*h0)/denom;
b = (e1*h0^2 - e0*h1^2)/denom;
%neu nghiem phuc
if b^2-4*a*c > 0
disc = sqrt(b^2 - 4*a*c);
else
disc = 0;
end
%tim nghiem nho nhat
if b < 0
disc = -disc;
end
z = -2*c/(b + disc);
p = P(3) + z;
%sap xep lai cac tri tinh lap
if abs(p - P(2)) < abs(p -P(1))
Q = [P(2) P(1) P(3)];
P = Q;
Y = feval(f, P);
end
if abs(p-P(3)) < abs(p-P(2))
R = [P(1) P(3) P(2)];
P = R;
Y = feval(f, P);
end
%cac tri tinh lan moi
P(3) = p;
Y(3) = feval(f, P(3));
y = Y(3);
%dieu kien dung lap
err = abs(z);
relerr = err/(abs(p) + delta);
if (err < delta)|(relerr < delta)|(abs(y) < eps)
break
end
end
gii phng trnh sin(x) - 0.5*x = 0 ta dng chng trnh ctmuller.m
clear all, clc
format long
f = inline('sin(x) - 0.5*x');
257

x = muller(f, 1.8, 2.2, 50)


10. PHNG PHP HALLEY
Php lp Newton tm nghim ca hm phng trnh x = g(x) l:
f(x)
g(x)=x
(1)
f (x)
Tc hi t tng ng k khi hm c nghim n. tng tc hi t,
Edmon Halley a ra cng thc lp:
1
f(x) f(x)f(x)
(2)
h(x)=x
1
2
f (x) 2 [ f(x)]
Ta xy dng hm halley1() thc hin thut ton trn
function x = halley1(f, x, maxiter)
%ham dung de tim nghiem cua pt f(x) = 0
%vao: - ham can tim nghiem f
%
- gia tri dau x0
%
- so lan lap cuc dai maxiter
%ra
- nghiem x
% dung dao ham so
i = 0;
h = 1e-4;
while (i < maxiter)
f1 = feval(f, x);
df1 = (feval(f, x + h)-feval(f, x - h))/(2*h);
ddf1 = (feval(f, x + h)-2*feval(f, x)+feval(f, x - h))/(h*h);
hx = x - (f1/df1)*1./(1 - (f1*ddf1)/(2*(df1)^2))
x = hx;
i = i + 1;
if (abs(f1) < eps)
break;
end
end
hay dng hm halley2()
function x = halley2(f, x, maxiter)
%ham dung de tim nghiem cua pt f(x) = 0
%vao: - ham can tim nghiem f
%
- gia tri dau x
%
- so lan lap cuc dai maxiter
%ra
- nghiem x
% dung dao ham symbolic
258

df = diff(f, x);
ddf = diff(f, x, 2);
i = 0;
while (i < maxiter)
f1 = eval(f);

259

df1 = eval(df);
ddf1 = eval(ddf);
hx = x - (f1/df1)*1./(1 - (f1*ddf1)/(2*(df1)^2));
x = hx;
i = i + 1;
if (abs(f1) < eps)
break;
end
end
gii phng trnh f(x) = x3 - 3x + 2 = 0 ta dng chng trnh cthalley.m:
clc, clear all
%f = inline('x.^3 - 3*x + 2');%khi dung halley1()
%x = halley1(f, -3, 50);
syms x
f = x^3 - 3*x + 2;%khi dung halley2()
x = halley2(f, -3, 50)
11. PHNG PHP CHEBYSHEV
Khi tm nghim ca phng trnh i s tuyn tnh hay phng trnh siu vit
f(x) = 0 ta c th dng mt hm c 4 thng s xp x hm f(x)
y(x) = p1 + p2(x - p3)e
(1)
Cc thng s p1 v p3 to s chuyn dch theo cc trc; thng s p xc nh bin v
e cung cp cong ca hm.
Ta kho st hm f(x) trn on [a, b] trong f(a).f(b) < 0, ngha l trong on
[a, b] tn ti nghim ca phng trnh f(x) = 0. Ta c thm iu kin f'(x).f''(x) 0 x
[a, b]. Gi xi [a, b] l ln xp x th i ca nghim th nghim ln th i + 1 theo
cng thc Popovski l:
1

f
e f.f e
xi+1 xi = (e 1) 1
(2)
1
f
e 1 f 2

Khi e = -1
f.f
x i +1 x i =
0.5f.f f2
v l php lp Halley
Khi e 1:
f
x i +1 x i =
f
v l php lp Newton
Khi e = 0.5
262

1 + 0.5f.f
f
2

f 2
= f(xi ) f (x i ) f (x i )
x i +1 x i =
f
f3 (xi )
2f3 (xi )
v ta c php lp Chebyshev.
Ta xy dmg hm chebyiter() thc hin thut ton trn
function [x, fx, xx] = chebyiter(f, x0, tol, maxiter)
%giai pt f(x) = 0 bang pp Chebyshev.
%vao: f = ham can tim nghiem
% x0 = gia tri ban dau
% tol = sai so mong muon
% maxiter = so lan lap max
%ra: x = nghiem
% fx , xx = cac gia tri trung gian
if nargin < 4
maxiter = 200;
end
if nargin < 3
maxiter = 100;
tol = 1e-4;
end
h = 1e-4;
h2 = 2*h;
xx(1) = x0;
fx = feval(f, x0);
for k = 1:maxiter
df = (feval(f, xx(k) + h) - feval(f, xx(k) - h))/h2; %dao ham so
d2f = (feval(f, xx(k) + h) - 2*feval(f, xx(k)) + feval(f, xx(k) - h))/h^2;
dx = - fx/df^3 - 0.5*fx^2*d2f/df^3;
xx(k+1) = xx(k) + dx;
fx = feval(f, xx(k+1));
if abs(fx) < tol | abs(dx) < tol
break;
end
end
x = xx(k + 1);
gii phng trnh ta dng chng trnh ctchebyiter
clear all, clc
f = inline('x.^3 - 10*x.^2 + 5');
x = chebyiter(f, -3, 1e-4)
263

12. PHNG PHP NEWTON DNG CHO H PHI TUYN


Phng php Newton c th c tng qut ho gii h phng trnh phi
tuyn dng :
f1 (x1 ,x 2 ,x 3 ,...,x n ) = 0
f (x ,x ,x ,...,x ) = 0
2 1 2 3
n


fn (x1 ,x 2 ,x 3 ,...,x n ) = 0
hay vit gn hn di dng :
F(X) = 0
Trong :
X = (x1, x2, x3,....., xn)
Vi mt phng trnh mt bin, cng thc Newton l :
f( x i )
x i +1 = x i
f ( x i )
hay :
f'(xi).x = -f(xi)
vi x = xi+1 - xi
i vi h phng trnh, cng thc lp l :
J(Xi)X = -F(Xi)
Trong J(Xi) l ton t Jacobi. N l mt ma trn bc n ( n - tng ng vi s thnh
phn trong vect X) c dng :
f1 f1 f1 f1

x n
x 1 x 2 x 3
f2 f2
f2
f2

x
x 2 x 3
x n
J( X i ) = 1


fn fn fn
fn

x n
x 1 x 2 x 3

X = Xi+1 - Xi
Phng php Newton tuyn tnh ho h v nh vy vi mi bc lp cn gii
mt h phng trnh tuyn tnh (m bin l Xi) xc nh bi cng thc lp cho ti
khi vect X(x1, x2, x3,....., xn) gn vi nghim.
Ta xy dng hm new4sys() thc hin thut ton ny

function [P, iter, err] = new4sys(f, jf, P, max1)


%vao -F la he pt luu trong M-file f.m
%
-JF la ma tran jacobi luu trong M-file jf.m
264

%
-P vec to nghiem ban dau
%
-max1 so lan lap cuc dai
%ra -P la ve to nghiem
%
-iter so lan lap thuc te
%
-err sai so
Y = f(P);
for k = 1:max1
J = jf(P);
Q = P - (J\Y')';
Z = f(Q);
err = norm(Q - P);
relerr = err/(norm(Q) + eps);
P = Q;
Y = Z;
iter = k;
if (err<eps)|(relerr<eps)|(abs(Y)<eps)
break
end
end
gii h phng trnh:
x 2 + xy 2 = 0

2
2xy + y 3 = 0
ta dng chng trnh ctnew4sys.m
clear all, clc
format long
p = [.5, .5];
[n ,ll, ss] = new4sys(@f, @jf, p, 50)
Ni dung ca f.m:
function f = f(p)
f = [(p(1)^2 + p(1)*p(2) - 2), (2*p(1)*p(2) + p(2)^2 - 3)];
Ni dung ca jf.m:
function jf = jf(p)
jf = [(2*p(1) + p(2)) p(1)
(2*p(1))
(2*p(1) + 2*p(2))];
Ta c th dng hm new4sys2() thc hin thut ton:
265

function root = new4sys2(func, x, maxiter)


% Phuong phap Newton-Raphson de tim nghiem
% cua he pt fi(x1,x2,...,xn) = 0, i = 1, 2,..., n.
% Cu phap: root = new4sys2(func, x, tol)
% vao:
% func = con tro ham, tra ve [f1, f2,..., fn].
% x = vec to ban dau [x1, x2,..., xn].
% tol = sai so mong muon
% ra:
% root - nghiem cua he
if size(x,1) == 1;
x = x';
end % x phai la vec to
i = 0;
while (i < maxiter)
[jac, f0] = jacobi(func, x);
dx = jac\(-f0);
x = x + dx;
root = x;
if max(abs(dx)) < eps
break;
else
i = i + 1;
end
end
if i == maxiter
fprintf('Khong hoi tu sau %d lan lap\n', maxiter);
else
fprintf('Hoi tu sau %d lan lap\n', i);
end
Hm jacobi() gm cc lnh:
function [jac, f0] = jacobi(func, x)
% Tinh ma tran Jacobi va ham f(x).
h = 1.0e-4;
n = length(x);
jac = zeros(n);
f0 = feval(func, x);
for i =1:n
temp = x(i);
x(i) = temp + h;
266

f1 = feval(func, x);
x(i) = temp;
jac(:,i) = (f1 - f0)/h;
end
Hm t() gm cc lnh:
function x = t(p)
x = [(p(1)^2 + p(2)^2 + p(3)^2 - 14)
(p(1)^2 + 2*p(2)^2 - p(3) - 6
(p(1) -3*p(2 )^2 + p(3)^2 + 2)];
gii h phng trnh ta dng chng trnh ctnew4sys2.m:
clear all, clc
format long
p = [1 1 1 ];
r = new4sys2(@t, p, 50)
13. PHNG PHP BROYDEN DNG CHO H PHI TUYN
1. Phng php Broyden: gii h phng trnh phi tuyn tnh F([X]) = [0] bng
phng php lp Newton ta cho vec t nghim ban u [P0] v to ra dy [Pk] hi t
v nghim [P], ngha l F([P]) = [0]. Khi ny ta cn tnh ma trn Jacobi ca h. Vic
tnh ma trn Jacobi i hi tnh n2 o hm ring.
o hm ca hm f(x) ti pk c th tnh gn ng bng cng thc:
f(pk ) f(pk 1 )
f(pk ) =
p k p k 1
nn:
f(pk )(pk pk1 ) = f(pk ) f(pk1 )
M rng cho h phng trnh ta c th vit:
J([Pk])([Pk]-[Pk-1]) = F([Pk]) - F([Pk-1])
Phng php Broyden bt u bng vic tnh ma trn Jacobi A0 = J([P0]). Sau
trong qu trnh lp lin tip ta dng ma trn Jacobi c cp nht Ak:
Ak([Pk] - [Pk-1]) = F([Pk]) - F([Pk-1])
Thut ton Broyden nh vy bao gm cc bc:
Bc 0: Tnh ma trn Jacobi ban u A0 = J([P0]).
S dng n tnh ln lp u tin theo phng php Newton
[P1] = [P0] - (A0)-1F([P0])
Vi k 1, gi s bit [Pk] s dng cc bc sau tnh [Pk+1]
f1 (pk ,q k )
Bc 1: Tnh hm F([ Pk ]) =

f2 (pk ,q k )
Bc 2: Cp nht ma trn Jacobi bng cch dng
267

v c:

[S] = [Pk] - [Pk-1] v [Yk] = F([Pk]) - F([Pk-1])

[ A k ] = [ A k1 ] +

[S] [S]
T

( [ Y ] [ A ][ S ] ) [ S ]

k 1

Bc 3: Gii h phng trnh tuyn tnh [Ak][Pk] = -F([Pk]) tm [Pk]


Bc 4: Lp tip vi [Pk+1] = [Pk] + [Pk]
thc hin thut ton ny ta xy dng hm broyden()
function root = broyden(g, p0, maxiter)
if nargin == 2
maxiter = 50;
end
if size(p0, 1) == 1;
p0 = p0';
end
[a0, f0] = jacobi(g, p0);
p1 = p0 - inv(a0)*f0;
i = 0;
while i < maxiter
s = p1 - p0;
d = (s')*s;
f1 = feval(g, p1);
y = feval(g, p1) - feval(g, p0);
m = y - a0*s;
a1 = a0 - (1/d)*(y - a0*s)*s';
dp = -inv(a1)*f1;
p2 = p1 + dp;
err = max(abs(dp));
if err < eps
root = p2;
break;
end
p0 = p1;
p1 = p2;
f0 = f1;
a0 = a1;
i = i + 1;
end
gii h phng trnh

268

2
3
2x 2y 4x + 1 = 0
4
4
x + 4y + 4y 4 = 0
ta dng chng trnh ctbroyden.m

clear all, clc


format long
p = [.1 .7 ];
root = broyden(@g, p, 50)
Ta c th dng hm broyden1( ):
function [t, k] = broyden1(fcn1, fcn2, x0, maxits, tol)
% Tim nghiem cua he pt phi tuyen
% cu phap [t, k] = broyden1(fcn1, fcn2, x0, maxits, tol)
% vao
%
- fcn1: ham thu nhat
%
- fcn2: ham thu hai
%
- x0: nghiem ban dau
%
- maxiter: so lan lap max
%
- tol sai so mong muon
% ra
%
- x: nghiem
%
- k: so lan lap
tol = 1e-8;
maxiter = 50;
if size(x0, 1) == 1
x0 = x0';
end
syms x y
B = [diff(fcn1, x) diff(fcn1, y);diff(fcn2, x) diff(fcn2, y)];
x = x0(1);
y = x0(2);
h = inline(fcn1);
g = inline(fcn2);
f(1:2,1) = [h(x, y);g(x, y)];
B = eval(B);
t = [x y]';
for k = 1:maxiter
s = B\(-f);
t = t + s;
fnew = [h(t(1), t(2));g(t(1), t(2))];
269

u = fnew-f;
if abs(fnew-f) < tol
break
end
f = fnew;
B = B + ((u - B*s)*s')/(s'*s);
end
v dng chng trnh ctbroyden1.m
clc, clear all
syms x y
f1 = 2*x^2 - 2*y^3 - 4*x + 1;
f2 = x^4 + 4*y^4 + 4*y - 4;
[n, l] = broyden1(f1, f2, [.1 .7 ], 50)
Ngoi ra ta c mt phin bn khc l hm broyden2():
function [t, k] = broyden2(f, x0, maxiter, tol)
% Tim nghiem cua he pt phi tuyen
% cu phap [t, k] = broyden2(fcn1, fcn2, x0, maxits, tol)
% vao
%
- fcn1: ham thu nhat
%
- fcn2: ham thu hai
%
- x0: nghiem ban dau
%
- maxiter: so lan lap max
%
- tol sai so mong muon
% ra
%
- x: nghiem
%
- k: so lan lap
tol = eps;
maxiter = 50;
if size(x0, 1) == 1
x0 = x0';
end
syms x y
B = [diff(f(1), x) diff(f(1), y);
diff(f(2), x) diff(f(2), y)];
x = x0(1);
y = x0(2);
h = inline(f(1));
g = inline(f(2));
270

f(1:2,1) = double( [h(x, y);g(x, y)]);


B = double(eval(B));
t = [x y]';
for k = 1:maxiter
s = double(B\(-f));
t = t + s;
fnew = [h(t(1),t(2));
g(t(1),t(2))];
u = fnew - f;
if abs(double(u)) < tol
break
end
f = fnew;
B = B + ((u - B*s)*s')/(s'*s);
end
v dng vi chng trnh ctroyden2.m
clc, clear all
syms x y
f = [ 2*x^2 - 2*y^3 - 4*x + 1;
x^4 + 4*y^4 + 4*y - 4];
[n, l] = broyden2(f, [.7 .7 ])
2. Phng php Broyden ci tin: Ma trn nghch o tnh ton rt phc tp. V vy
ta dng cng thc Sherman - Morison gim bt khi lng tnh ton khi nghch
o ma trn.
Nu [A]-1 khng suy bin v [U], [V] l 2 vec t sao cho [V]T[A]-1[U] -1 th:
[ A ]1 [ U ][ V ]T [ A ]1
T 1
1
[ A ] + [ U ][ V ] = [ A ]
T
1
1
1 + [ V ] [ A] [ U] [ A]

hay

[ A ]1 [ U ] [ V ]T 1

[ A ] + [ U ][ V ] = [E]
[ A ]
T
1
+
1
V
A
U
[
]
[
]
[
]

gii h phng trnh phi tuyn F([X]) = [0] ta cho vec t nghim ban u
[P0] v to ra dy [Pk] hi t v [P], ngha l F([P]) = [0].
Trc ht ta tnh ma trn Jacobi A0 = J([P0]) v dng n tnh ln lp th nht
theo phng php Newton.
[P1] = [P0] - [A]-1F([P0])
Gi s c [Pk] vi k 1 ta dng cc bc sau tnh [Pk+1]

T 1

271

Bc 1: Tnh hm Fk = F([ Pk ])
Bc 2: Cp nht ma trn Jacobi bng cch dng
[V] = [Pk] - [Pk-1]
1
[ U ] = T ([Fk ] [ Fk1 ] [ A k1 ][ V ])
[V] [V]
v c:

[ A k ] = [ A k1 ] + [ U ][ V ]T

Bc 3: Tnh [Bk] = [Ak]-1 bng cch dng cng thc Sherman - Morison
1
T

A
U
V
[
]
[
]
[
]
k

1
1
1

A
[ Bk ] = [ A k ] = [E]
[
]

1
1
T
1 + [ V ] [ A k 1 ] [ U ]

Bc 4: Lp tip vi [Pk+1] = [Pk] - [Bk]F([Pk])


thc hin thut ton trn ta xy dng hm improvedbroyden()
function [m, ll] = improvedbroyden(g, p0, maxiter);
% cu phap [n, ll] = improvedboyden(g, x0, maxiter);
% vao:
%
- g la fi chua ham can tim nghiem
%
- p0 la vec to nghiem ban dau
%
- maxiter so lan lap max
%ra:
%
- m la nghiem
% - ll so lan lap thuc te
if size(p0, 1) == 1
p0 = p0';
end
n = length(p0);
[a0, f0] = jacobi(g, p0);
b0 = inv(a0);
p1 = p0 - b0*g(p0);
for k = 1: maxiter
f1 = g(p1);
v = p1 - p0;
d = v'*v;
u = (1/d)*(f1 - f0 - a0*v);
a1 = a0 + u*v';
e = eye(n);
ts = (b0*u)*v';
ms = 1 + v'*b0*u;
b1 = (e - ts/ms)*b0;
p2 = p1 - b1*g(p1);
272

if abs(max(v)) < eps


break;
end
a0 = a1;
b0 = b1;
p0 = p1;
p1 = p2;
f0 = f1;
end
m = p2;
ll = k;
Ta gii h phng trnh:
2x 2 2y 3 4x + 1 = 0
4
4
x + 4y + 4y 4 = 0
bng cch dng chng trnh ctimprovedbroyden.m
clear all, clc
format long
p = [.1 .7 ];
[r, s] = improvedbroyden(@g, p, 50)
14. TNH TR S CA A THC
1. S Horner: Gi s chng ta cn tm gi tr ca mt a thc tng qut dng:
P(x) = a0xn + a1xn - 1 + a2xn - 2 +....+ an
(1)
ti mt tr s x no . Trong (1) cc h s ai l cc s thc cho. Chng ta vit li
(1) theo thut ton Horner di dng:
P(xo) = (...((a0x + a1)x+ a2x)+...+ an -1 )x + an
(2)
T (2) ta c :
P0 = a0
P1 = P0x + a1
P2 = P1x + a2
P3 = P2x + a3
..................
P(x) = Pn = Pn-1x + an
Tng qut ta c :
Pk = Pk-1x + ak vi k = 1, 2...n ; P0 = a0
Do chng ta ch quan tm n tr s ca Pn nn trong cc cng thc truy hi v sau
chng ta s b qua ch s k ca P v vit gn P := Px + ak vi k = 0...n. Khi ta tnh ti
k = n th P chnh l gi tr cn tm ca a thc khi cho x. Chng ta th cc bc
tnh nh sau :
Ban u
P=0
273

Bc 0
k=0
P = ao
Bc 1
k=1
P = aox + a1
Bc 2
k=2
P = (aox + a1)x + a2
.................................
Bc n-1 k = n - 1
P = P(xo) = (...((aox + a1)x+a2x)+...+an-1)x
Bc n
k=n
P = P(xo) = (...((aox + a1)x+a2x)+...+an-1)x + an
Ta xy dng hm horner() tnh tr ca a thc ti x:
function p = horner(a, x)
% Tinh tri so da thuc
% p = a(1)*xn + a(2)*x(n-1) + ... + a(n+1)
% cu phap: p = horner(a,x)
n = length(a) - 1;
p = a(1);
for i = 1:n
p = p*x + a(i+1);
end
tnh tr s ca a thc P3(x) = x3 + 3x2 + 2x - 5 ti x = 1 ta dng chng trnh
cthorner.m
clear all, clc
a = [1 3 2 -5];
p = horner(a, 1)
2. S Horner tng qut: Gi s chng ta c a thc :
Pn(x) = a0xn + a1xn - 1 + a2xn - 2 +....+ an
(1)
Khai trin Taylor ca a thc ti x = xo c dng :
P( x 0 )
P( x 0 )
P( n ) ( x 0 )
2
Pn ( x) = Pn ( x 0 ) +
( x x0 ) +
( x x0 ) + +
( x x0 )n (2)
1!
2!
2!
Mt khc chng ta c th bin i a thc v dng :
(3)
Pn(x) = (x - xo)Pn-1(x) + Pn(xo)
Trong Pn-1(x) l a thc bc n - 1 v c dng :
Pn-1 (x) = boxn-1 + bo-1xn - 2 + b2xn - 3 +....+ bn-1
(4)
Thut ton tm cc h s nhn c bng cch so snh (1) v (3) :
bo = ao
bi = ai + bi-1xo
bn = Pn(xo)
So snh (2) v (3) ta c :

274

P(x0 )
P(x0 )
(x x0 ) +
(x x 0 )2
1!
2!
(n)
P (x0 )
(x x0 )n
+ +
2!

(x x0 )Pn 1 (x0 ) + Pn (x0 ) = Pn (x 0 ) +

hay :

P( x0 )
P( x 0 )
P( n ) ( x 0 )
2
( x x0 )Pn 1 ( x) =
( x x0 ) +
(x x0 ) + +
( x x 0 )n
1!
2!
2!

v khi chia hai v cho (x - x0) ta nhn c :


P( x0 ) P( x 0 )
P( n ) ( x 0 )
Pn 1 ( x) =
+
( x x0 ) + +
( x x 0 )n 1
(5)
1!
2!
2!
So snh (4) v (5) ta nhn c kt qu :
P( x 0 )
Pn 1 ( x0 ) =
1!
Trong Pn-1(x) li c th phn tch ging nh Pn(x) dng (3) tm ra Pn-1(xo). Qu
trnh ny c tip tc cho n khi ta tm ht cc h s ca chui Taylor ca Pn(x).
Tng qut thut ton th hin bng sau:
Pn(x)
x = xo

ao
0

a1
boxo

a2
a3 ... an-1
b1xo b2xo ... bn-2xo

an
bn-1xo

Pn-1(x) bo
b1
b2
b3 ... bn-1
bn = Pn(xo)
Ta xy dng hm genhorner() thc hin thut ton trn
function b = genhorner(a, x)
% tra ve he so cua da thuc khai trien
% c(1)(x-x0)^n + c(2)(x-x0)^(n-1) + ...+ c(n+1)
m = length(a)
x = 2;
for k = 1:m
b(1) = a(1);
for i = 2:m-k+1
b(i) = b(i - 1)*x + a(i);
end
c(m-k+1) = b(m-k+1)
a = b(1:m-k);
end
khai trin a thc P(x) = x5 - 2x4 + x3 - 5x + 4 ti x0 = 2 ta dng chng trnh
ctgenhorner.m
clear all, clc
275

a = [1 -2 1 0 -5 4];
c = genhorner(a, 2)
15. PHNG PHP LAGUERRE
Ta xt a thc bc n:
Pn(x) = a1xn + a2xn-1 + + an+1
Nu a thc c nghim l r th ta c:
Pn(x) = (x - r)Pn-1(x)
Trong :
Pn-1(x) = b1xn-1 + b2xn-2 + + bn
Cn bng (1) v (2) ta c:
b1 = a1
b2 = a2 + rb1
......
bn = an +rbn-1
Ta xy dng hm deflpoly() tnh cc h s ca a thc Pn-1(x)

(1)
(2)

function b = deflpoly(a, r)
% ha bac da thuc
n = length(a) - 1;
b = zeros(n, 1);
b(1) = a(1);
for i = 2:n
b(i) = a(i) + r*b(i-1);
end
By gi ta xt a thc Pn(x) c nghim n x = r v (n-1) nghim trng nhau x
= q. a thc nh vy s c vit thnh:
Pn(x) = (x - r)(x - q)n-1
(3)
Bi ton ca ta l cho a thc (3) di dng:
Pn(x) = a1xn + a2xn-1 + + an+1
v cn tm r(ch l q cng cha bit).
o hm (3) theo x ta c:
Pn (x) = (x q)n 1 + (n 1)(x q)n 2 (x r)

1
n 1
= Pn (x)

xr xq
Nh vy:
Pn (x)
1
n 1
=

Pn (x) x r x q
T ta c:

(4)

276

Pn(x) Pn (x)
1
n 1

(5)

Pn (x) Pn (x)
(x r)2 (x q)2
Ta t:
P (x)
P(x)
(6)
G(x) = n
H(x) = G 2 (x) n
Pn (x)
Pn (x)
Nh vy (4) v (5) tr thnh:
P (x)
1
n 1
G(x) = n
=
+
(7)
Pn (x) x r x q
P(x)
1
n 1
=
+
(8)
H(x) = G 2 (x) n
2
Pn (x) (x r) (x q)2
Nu ta gii (7) theo (x - q) v thay kt qu vo (8) ta nhn c phng trnh bc 2
i vi (x - r). Nghim ca phng trnh ny l cng thc Laguerre:
n
xr=
(9)
G(x) (n 1) nH(x) G 2 (x)
Nh vy thut ton tm im zero ca a thc tng qut theo Laguerre l:
- cho gi tr ban u ca nghim ca a thc l x
- tnh Pn(x), Pn (x) v Pn(x)
- tnh G(x) v H(x) theo (6)
- tnh nghiem theo (9). Chn du sao cho mu s ln nht.
- cho x = r v tip tc lp t bc 2 cho n 5 n khi |Pn(x)| < hay |x - r| <
.
Ta xy dng hm laguerre() thc hin thut ton trn
function x = laguerre(a, tol)
% tim nghiem cua da thuc
x = randn; % cho x ngau nhien
n = length(a) - 1;
for i = 1:30
[p, dp, ddp] = evalpoly(a, x);
if abs(p) < tol;
return;
end
g = dp/p;
h = g*g - ddp/p;
f = sqrt((n - 1)*(n*h - g*g));
if abs(g + f) >= abs(g - f)
dx = n/(g + f);
else
dx = n/(g - f);
end
277

x = x - dx;
if abs(dx) < tol
return;
end
end
error('Lap qua nhieu')
tm tt c cc nghim ca a thc ta dng hm polyroots()
function root = polyroots(a, tol)
% Tim cac nghiem cua da thuc% a(1)*xn + a(2)*x(n-1) + ... + a(n+1).
% Cu phap: root = polyroots(a, tol).
% tol = sai so
if nargin == 1
tol = 1.0e-6;
end
n = length(a) - 1;
root = zeros(n, 1);
for i = 1:n
x = laguerre(a, tol);
if abs(imag(x)) < tol
x = real(x);
end
root(i) = x;
a = deflpoly(a, x);
end
tm nghim ca mt a thc theo thut ton Laguerre ta dng chng trnh
ctpolyroots.m
clear all, clc
a = [1 3 2 -5];
r = polyroots(a);
16. PHNG PHP LP BERNOULLI
C nhiu phng php tm nghim ca mt a thc. Ta xt phng trnh:
aoxn + a1xn-1 + + an = 0
Nghim ca phng trnh trn tho mn nh l:
Nu max{| a1 |, | a2 |,..., |an |} = A th cc nghim ca phng trnh tho mn
iu kin | x | < 1 + A/ | a0|
Phng php Bernoulli cho php tnh ton nghim ln nht ca mt a thc
Pn(x) c n nghim thc phn bit. Sau khi tm c nghim ln nht ta chia a thc
278

Pn(x) cho (x - ) v nhn c a thc mi Qn-1(x). Tip tc dng phng php


Bernoulli tm nghim ln nht ca Qn-1(x).
Sau li tip tc cc bc trn cho n khi tm ht cc nghim ca Pn(x).
Chng ta kho st phng trnh sai phn c dng nh sau :
= aoyk+n + a1yk+n-1 +.....+ anyk = 0
(1)
y l mt phng trnh sai phn tuyn tnh h s hng. Khi cho trc cc gi tr u
yo, y1,..yn-1 ta tm c cc gi tr yn, yn+1,.. Chng c gi l nghim ca phng
trnh sai phn tuyn tnh (1).
a thc
Pn(x) = a0xn + a1xn-1 +..+an-1x + an
(2)
vi cng mt h s ai nh (1) c gi l a thc c tnh ca phng trnh sai phn
tuyn tnh (1). Nu (2) c n nghim phn bit x1, x2,.., xn th (1) c cc nghim ring l
y i = x ik
Nu yi l cc nghim ca phng trnh sai phn l tuyn tnh (1),th
y k = c 1 x 1k + c 2 x k2 + + c n x kn
(3)
vi cc h s ci bt k cng l nghim ca phng trnh sai phn tuyn tnh h s hng
(1).
Nu cc nghim cn sao cho :
| x1| | x2 | ...| xn|
c x k

k
1
2
Vy y k = c 1 x 1 1 + +
c 2 x 1

c x k +1

k +1
v
y k +1 = c 1 x 1 1 + 1 2 +
c 2 x 1

c x k +1

1 + 1 2 +
c 2 x1

y
do : k +1 = x 1
k
yk
c x

1 + 1 2 +
c 2 x 1

do

x1 > x2 > ... > xn


k +1
k
x2 x2
nn: , 0 khi k
x1 x1
y k +1
0 khi k
vy:
yk
Ngha l :
y
lim k +1 = x 1
k y
k

279

Nu phng trnh vi phn gm n+1 h s, mt nghim ring yk c th c xc


nh t n gi tr yk-1, yk-2,...,yn-1. iu cho php tnh ton bng cch truy hi cc
nghim ring ca phng trnh vi phn.
tnh nghim ln nht ca a thc, ta xut pht t cc nghim ring y1 = 0, y1
= 0,.., yn =1 tnh yn+1. Cch tnh ny c tip tc tnh yn+2 xut pht t y1 = 0,
y2 = 0,..,yn+1 v tip tc cho n khi yk+1/yk khng bin i na. Tr s ca yk+n c
tnh theo cng thc truy hi :
1
y k + n = (a 1 y k + n 1 + + a n y k )
(4)
a0
Ta xy dng hm bernoulli() thc hin thut ton trn
function x = bernoulli(p)
%tim nghiem lon nhat cua P(x)
%theo thuat toan Bernoulli

280

%cu phap x = bernoulli(p)


n = length(p);
maxiter = 200;
y = zeros(maxiter);
y(n-1) = 1;
k = 0;
while (k < maxiter)
s = 0;
for i = 1:n-1
s = s + p(i+1)*y(k+n-i);
end
y(k+n) = -s/p(1);
x = y(k+n)/y(k+n-1);
err = polyval(p, x);
if err < 1e-6
break;
end
k = k + 1;
end
tm nghim ca a thc P4(x) = x4 - 22x3 + 179x2 - 638x + 840 ta dng
ctbernoulli.m
clear all, clc
p = [1 -22 179 -638 840];
m = length(p);
fprintf('Nghiem cua da thuc:\n');
while m > 3
x = bernoulli(p);
m = m - 1;
fprintf('%f\n',x);
p = deflpoly(p,x);
end
x1 = (-p(2) + sqrt(p(2)^2 - 4*p(1)*p(3)))/2*p(1);
fprintf('%f\n', x1);
x2 = (-p(2) - sqrt(p(2)^2 - 4*p(1)*p(3)))/2*p(1);
fprintf('%f\n', x2);
17. PHNG PHP LP BERGE - VIETTE
Cc nghim thc, n ca mt a thc Pn(x) c tnh ton khi s dng
phng php Newton

283

Pn ( x i )
(1)
Pn ( x i )
bt u tnh ton cn chn mt gi tr ban u xo. Chng ta c th chn mt
gi tr xo no , v d :
a
x0 = n
a n 1
v tnh tip cc gi tr sau :
P (x )
x1 = x 0 n 0
Pn ( x 0 )
P (x )
x 2 = x1 n 1
Pn ( x 1 )
Tip theo c th nh gi Pn(xi) theo thut ton Horner :
P0 = a0
P1 = P0xi + a1
(2)
P2 = P1xi + a2
P3 = P2xi + a3
..................
P(xi) = Pn = Pn-1xi + an
Mt khc khi chia a thc Pn(x) cho mt nh thc (x - xi) ta c :
Pn(x) = (x - xi)Pn-1(x) + bn
(3)
vi bn = Pn(xi). a thc Pn-1(x) c dng:
Pn-1(x) = boxn-1 + b1xn-2 + p3xn-3 +..+ bn-2x + bn-1
(4)
xc nh cc h s ca a thc (4) ta thay (4) vo (3) v cn bng cc h s
vi a thc cn tm nghim Pn(x) m cc h s ai cho:
(x - xi)( boxn-1 + b1xn-2+b3xn-3 +..+ bn-2x + bn-1 ) + bn
(5)
= aoxn + a1xn-1 + a2xn-2 +...+ an-1x + a
T (5) rt ra :
bo = ao
(6)
b1 = a1 + boxi
b2 = a2 + b1xi
......
bk = ak + bk-1xi
.......
bn = an + bn-1xi = Pn(xi)
o hm (3) ta c :
Pn ( x) = ( x xi )Pn 1 ( x) + Pn 1 ( x)
v: Pn ( x i ) = Pn 1 ( x i )
(7)
Nh vy vi mt gi tr xi no theo (2) ta tnh c Pn(xi) v kt hp (6) vi
(7) tnh c Pn(xi). Thay cc kt qu ny vo (1) ta tnh c gi tr xi+1. Qu trnh
c tip tc cho n khi | xi+1 - xi | < hay Pn(xi+1) 0 nn 1 xi+1 l mt nghim
ca a thc.
x i +1 = x i

284

Php chia Pn(x) cho (x - 1) cho ta Pn-1(x) v mt nghim mi khc c tm


theo cch trn khi chn mt gi tr xo mi hay chn chnh xo = 1. Khi bc ca a thc
gim xung cn bng 2 ta dng cc cng thc tm nghim ca tam thc tm cc
nghim cn li.
Ta xy dng hm birgeviette() thc hin thut ton trn
function x = birgeviette(a, x0)
%tim nghiem theo thuat toan lap Birge-Viette
%vao: - a da thuc can tim nghiem
%
- x0 gia tri dau
%cu phap x = birgeviete(a, x0, maxiter)
n = length(a) - 1;
k = 0;
x0 = 3.5;
maxiter = 50;
while (k < maxiter)
p = a(1);
b(1) = a(1);
for i = 1:n
p = p*x0 + a(i+1);
b(i+1) = p;
end
b = b(1, 1:n);
p1 = horner(b, x0);
x1 = x0 - p/p1;
k = k + 1;
err = horner(a, x1);
if (abs(err) < eps)
break;
end
x0 = x1;
end
x = x0;
tm nghim ca a thc P4(x) = x4 - 22x3 + 179x2 - 638x + 840 ta dng
ctbirgeviette.m
clear all, clc
p = [1 -22 179 -638 840];
m = length(p);
x0 = 1;
fprintf('Nghiem cua da thuc:\n');
285

while m > 3
x = birgeviete(p, x0);
m = m - 1;
fprintf('%f\n', x);
p = deflpoly(p, x);
end
x1 = (-p(2) + sqrt(p(2)^2 - 4*p(1)*p(3)))/2*p(1);
fprintf('%f\n', x1);
x2 = (-p(2) - sqrt(p(2)^2 - 4*p(1)*p(3)))/2*p(1);
fprintf('%f\n', x2);
18. PHNG PHP BAIRSTOW
Nguyn tc ca phng php Bairstow l trch t a thc Pn(x) mt tam thc
Q2(x) = x2 - rx - s m ta c th tnh nghim thc hay nghim phc ca n mt cch
n gin bng cc phng php bit. Vic chia a thc Pn(x) cho ta thc Q2(x) a
ti kt qu:
Pn(x) = Q2(x).Pn-2(x) + R1(x)
vi: Pn(x) = a1xn + a2xn-1 + a3xn-2 ++ an+1
Q2(x) = x2 - rx - s
Pn-2(x) = b1xn-2 + b2xn-3 + b3xn-4 ++ bn-1
R1(x) = x +
c c mt thng ng, cn tm cc gi tr s v p sao cho R1(x) = 0 (ngha l
v trit tiu). Vi r v s cho, cc h s bi ca a thc Pn-2(x) v cc h s v
c tnh bng phng php truy hi. Cc cng thc nhn c khi khai trin biu
thc Pn(x) = Q2(x).Pn-2(x) + R1(x) v sp xp li cc s hng cng bc:
a1xn + a2xn-1 + a3xn-2 +...+ an+1 = (x2 - rx - s)( b1xn-2 + b2xn-3 + b3xn-4 +...+ bn-1)
S hng bc
xn
xn-1
xn-2
......
xn-k
x
xo
Nh vy :
b1 = a1
b2 = a2 + rb1
b3 = a3 + rb2 + sb1
.............
bk = ak + rbk-1 + sbk-2
= an + rbn-1 + sbn-2

H s ca Pn(x)
a1
a2
a3
......
ak
an
an+1

H s ca Q2(x).Pn-2(x)
b1
b1 - rb1
b3 - rb2 - sb1
.....
bk - rbk-1 - sbk-2
- rbn-1 - sbn-2
- rbn-1
(1)

286

= an - pb-2
Chng ta nhn thy rng c tnh ton xut pht t cng mt cng thc truy
hi nh cc h s bk v tng ng vi h s bn
bn= an-1 + rbn-1 + sbn-2 =
H s bn+1 l :
bn+1 = an+1 + rbn-1 + sbn-2 = sbn-2 +
v cui cng :
R1(x) = x + = bn(x - r) + bn+1
Ngoi ra cc h s bi ph thuc vo r v s v by gi chng ta cn phi tm cc
gi tr c bit r* v s* cho bn v bn+1 trit tiu. Khi R1(x) = 0 v nghim ca tam
thc x2 - r*x - s*x s l nghim ca a thc Pn(x).
Ta bit rng bn-1 v bn l hm ca s v p :
bn = f(r, s)
bn+1 = g(r, s)
Vic tm r* v s* a n vic gii h phng trnh phi tuyn:
f(r ,s) = 0

g(r ,s) = 0
Phng trnh ny c th gii d dng nh phng php Newton. Tht vy vi mt
phng trnh phi tuyn ta c cng thc lp:
xi+1 = xi - f(xi)/f'(xi)
hay f'(xi)(xi+1 - xi) = -f(xi)
Vi mt h c hai phng trnh, cng thc lp tr thnh:
J(Xi)(Xi+1 - Xi) = -F(Xi)
vi Xi = { ri, si}T v Xi+1 = { ri+1, si+1}T
f(ri ,si )
F(X i ) =

g(ri ,si )

f f
r s
J(X i ) =

g
g

r s
Quan h : J(Xi)X = -F(Xi) vi X = {ri+1 - ri,si+1 - si}T tng ng vi mt h phng
trnh tuyn tnh hai n s r = ri+1 - ri v s = si+1 - si :
f
f

+
s = f(ri ,si )
r
r
s

g r + g s = g(ri ,si )
s
r
Theo cng thc Cramer ta c :
g
f
f + g
s
r = s

287

f g
+f
r

r
s =

f g f g
=

r s s r
g

dng c cng thc ny ta cn tnh c cc o hm

f f g g
, ,
,
. Cc o
r s r s

hm ny c tnh theo cng thc truy hi.


Do b1 = a1 nn
b1 a1
b1 a1
=
=0
=
=0
s
s
r
r
b2 = a2 + rb1 nn
b 2 a 2
b
b 2
b
=
+r 1 =0
= r 1 + b1 = b1
s
s
s
r
r
b3 = a3 + rb2 + sb1 nn
b 3 a 3 (rb 2 ) (sb1 )
=
+
+
r
r
r
r
Mt khc :
a 3
(rb 2 )
(b 2 )
(rb1 )
=0
=0
=r
+ b2
r
r
r
r
b 3
b
b
b 3
nn:
= r 2 + s 1 + b 1 = b1
= b 2 + rb1
s
s
s
r
b4 = a4 + rb3 + sb2 nn:
b 4
b
b
b 4
b
b
= r 3 + s 2 + b2
= b3 + r 3 + s 2
s
s
s
r
r
r
.....
b n
b
b
b n
b
b
= r n 1 + s n 2 + b n 1
= r n 1 + s n 2 + b n 2
r
r
r
s
r
r
Nu chng ta t:
b k
= c k 1
r
th :
c1 = b1
c2 = b2 + rc1
c3 = b3 + rc2 + sc1
..........
cn = bn + rcn-1 + scn-2
Nh vy ta c:
b c + b n +1c n 2
r = n 2 n 1
c n 1 c n c n 2

(2)

(3)

288

s =

b n +1c n 1 + b n c n
c 2n 1 c n c n 2

(4)

Sau khi phn tch xong Pn(x) ta tip tc phn tch Pn-2(x) theo phng php trn.
Cc bc tnh ton gm:
- Chn cc gi tr ban u bt k s0 v p0
- Tnh cc gi tr b1,..,bn+1 theo (1)
- Tnh cc gi tr c1,...,cn theo (2)
- Tnh ro v so theo (3) v (4)
- Tnh s1 = r0 + ro v s1 = so+ so
- Lp li bc 1 cho n khi ri+1 = ri = r v si+1 = si = s
- Gii phng trnh x2 - rx - s tm 2 nghim ca a thc
- Bt u qu trnh trn cho a thc Pn-2(x)
Ta xy dng hm bairstow() thc hin thut ton tm r, s
function [r,s] = bairstow(p, r0, s0, maxiter)
% tim da thuc bac 2 dang x^2 - rx - s
%vao -p la da thuc can tim nghiem
% -r0, s0 gia tri ban dau
% -maxiter so lan lap max
%ra -r, s
%cu phap [r,s] = bairstow(p, r0, s0 ,maxiter)
n = length(p) - 1;
c = zeros(n);
b = zeros(n);
j = 0;
while j < maxiter
b(1) = p(1);
b(2) = p(2) + r0*b(1);
for k = 3:(n+1)
b(k) = p(k) + r0*b(k-1) + s0*b(k-2);
end
c(1) = b(1);
c(2) = b(2) + r0*c(1);
for k = 3:(n)
c(k) = b(k) + r0*c(k-1) + s0*c(k-2);
end
d0 = det([c(n-1), c(n-2); c(n), c(n-1)]);
d1 = det([-b(n), c(n-2); -b(n+1), c(n-1)]);
d2 = det([c(n-1), -b(n); c(n) -b(n+1)]);
r = r0 + d1/d0;
289

s = s0 + d2/d0;
if ((abs(d1/d0))&(abs(d2/d0)))<eps
break;
end
r0 = r;
s0 = s;
j = j + 1;
end
tm nghim ca a thc P4(x) = x4 - 1.1x3 + 2.3x2 - 0.5x + 3.3 ta dng chng trnh
ctbairstow.m
clear all, clc
p = [1 -1.1 2.3 0.5 3.3];
m = length(p);
s0 = -1,;
r0 = -1;
fprintf('Nghiem cua da thuc:\n');
while m > 3
[r, s] = bairstow(p,r0,s0,50);
m = m - 2;
x1 = (r + sqrt(r^2+4*s))/2;
x2 = (r - sqrt(r^2+4*s))/2;
fprintf('%s\n',num2str(x1));
fprintf('%s\n',num2str(x2));
p = deconv(p,[1 -r -s]);
end
if length(p) == 3
x1 = (-p(2) + sqrt(p(2)^2-4*p(3)))/2;
x2 = (-p(2) - sqrt(p(2)^2-4*p(3)))/2;
fprintf('%s\n',num2str(x1));;
fprintf('%s\n',num2str(x2));;
else
x1 = -p(2)/p(1);
fprintf('%f\n',x1);;
end
19. PHNG PHP LOBACHEVSKY - GRAEFFE
Phng php ny c Karl Heinrich Grffe, Germinal Pierre Dandelin v
Nikolai Ivanovich Lobachevsky a ra. N c mt nhc im l cc kt qu trung
gian c tr s rt ln.
Xt phng trnh :
P(x) = a0xn + a1xn-1 + + an = 0
(1)
290

ch c nghim thc vi gi tr tuyt i khc nhau. Ta nh s cc nghim theo th


t gi tr tuyt i gim :
(2)
|x1| > |x2| > > |xn|
Da vo (1) ta xy dng mt phng trnh mi :
( c0 0)
(3)
Q(x) = c0xn + c1xn-1 + + cn = 0
m
m
m
c nghim l x1 , x 2 ,..., x n . Sau ta vit li phng trnh trn:
Q(x) = c 0 (x + x1m )(x + x 2m ) (x + x nm )
(4)
So snh (3) v (4) ta c:
x m + x m + + x m = c1
2
n
1
c0

x m x m + x m x m + + x m x m = c 2
2 3
n 1 n
1 2
c0
(5)

x m x m x m x m = c n
n 1 n
1 2
c0

V c gi thit (2) nn khi m tng th v tri ca cc ng thc (5) s hng u tri


ln, ln t cc s hng sau v vi m ln ta c :
x m c1
1 c
0

x m x m c 2
1 2
c0
(6)

x m x m x m x m c n
n 1 n
1 2
c0

T (6) ta c :
x m c1
1 c
0

x m c 2
2
c1
(7)

x m c n
n c
n 1

Ta suy ra tr tuyt i ca cc nghim l :

291


c
x1 m 1
c0

c
x2 m 2
(8)
c1

x m cn
n
c n 1

Sau ta thay |xi| vo (1) v tm c nghim. Nh vy vn l phi tm c


phng trnh (3) da vo phng trnh (1). Qu trnh bin i (1) thnh (3) c tin
hnh nh sau:
u tin t (1) ta xy dng phng trnh mi c nghim l x12 v qu trnh
ny c gi l bnh phng nghim. V P(x) c cc nghim l xi nn n c dng:
P(x) = a0(x - x1) (x - x2)( x - xn)
Do :
(-1)nP(-x) = a0(x + x1) (x + x2)( x + xn)
Ta suy ra :
( 1)n P(x)P( x) = a 02 (x 2 x12 )(x 2 x 22 ) (x 2 x 2n )
Thay x2 = -y ta c :
P1 (y) = P(x)P( x) = a 02 (y + x12 )(y + x 22 ) (y + x n2 )
a thc P1(y) c nghim l y i = x12 . a thc ny c dng :
n
(1) n 1
n 2
P1 (y) = a(1)
+ a(1)
+ + a(1)
(9)
0 y + a1 y
2 y
n
Do
P(x) = a0xn + a1xn-1 + + an = 0
nn
P(-x) = (-1)n[a0xn - a1xn-1 + + (-1)nan]
(-1)n P(-x) = a0xn - a1xn-1 + + (-1)nan
v
( 1)n P(x)P( x) = a 02 x 2n (a12 2a 0a 2 )x 2n 2 + (a 22 2a1a 3 + 2a 0a 4 )x 2n 4
+ + ( 1)n a 2n

Thay x2 = -y ta c :
P1 (y) = a 02 y n (a12 2a 0a 2 )y n 1 + (a 22 2a1a 3 + 2a 0a 4 )y n 2 + + ( 1)n a 2n
So snh (9) v (10) ta c cng thc tnh cc h s ca P1(y) t cc ak l :

(10)

292

2
a(1)
0 = a0
(1)
2
a1 = a1 2a 0a 2
a(1) = a 2 2a a + 2a a
2
1 3
0 4
2

k
(1)
2
a
a
2
( 1)i a k ia k +i
=
+

k
k
i =1


(1)
2
a n 1 = a n1 2a n 2a n
a(1) = a 2
n
n

(11)

Tip tc qu trnh bnh phng nghim a thc P1(y) ta c P2(y) c nghim


(1)
tng t nh (11) khi tnh
l y k = ( x12 )2 vi cc h s a(2)
k c tnh theo a k
(1)
a k theo ak. Tin hnh bnh phng nghim (s + 1) ln ta c (3). Lc cc h s
c xc nh bng:
a(s+1) = a(s) 2
0
0

k
a(s+1) = a(s) 2 + 2 ( 1)i a(s) a(s)
k i
k+i
k
k
i =1


(s+1)
2
(s) (s)

a n 1 = a(s)
n 1 2a n 2a n

2
a(sn +1) = a(s)

n
Vy khi s ln ta c :
a(s)
2s
m
i
xi = xi (s)
a i1
6
Ta c m = 2 = 64. Dng logarit ta tnh ra cc nghim : x1 = -4, x2 = 2, x3 = 1
Ta xy dng hm lobachevskygraeffe() thc hin thut ton trn
function y = lobachevskygraeffe(a, maxiter)
% giai pt bang pp Lochevsky - Graeffe
% a la da thuc can tim nghiem
% maxiter la so lan lap max
c = a;
n = length(a);
m = 1;
while m < maxiter
b = a;
293

for k = 2:n-1;
s = 0;
i = 1;
while (((k - i) >= 1)&((k + i) <= n))
s = s + (-1)^i*b(k - i)*b(k + i);
i = i + 1;
end
a(k) = b(k)^2 + 2*s;
end
a(1) = a(1)^2;
a(n) = a(n)^2;
j = 2^m;
for i = 1:n-1
err = 1;
x(i) = a(i + 1)/a(i);
if x(i) == 1
x(i) = 1;
else
x(i) = exp((1/j)*log(x(i)));
end
err = abs(horner(c, x(i)));
end
if err < eps
break;
end
m = m + 1;
end
for i = 1:n-1
if round(polyval(c, x(i))) ~= 0
x(i) = -x(i);
end
end
y = x;
tm nghim ca a thc P4(x) = x4 + 2x3 - 25x2 - 26x2 + 120 ta dng chng trnh
ctlobachevskygraeffe.m:
clc, clear all
a = [1 2 -25 -26 120];
x = lobachevskygraeffe(a, 50)
20. PHNG PHP SCHRODER
294

Phng php lp Schroder dng tm nghim bi, c dng tng t nh cng


thc lp Newton:
mf(x k )
x k +1 = x k
f(x k )
Trong m l bi ca nghim. Ban u ta c th cha bit m nn cn phi th. Ta
xy dng hm schroder() thc hin thut ton trn:
function [r, iter] = schroder(f1, df1, m, x0, tol)
%Ham tim nghiem boi bang thuat toan Schroder
iter = 0;
d = feval(f1, x0)/feval(df1, x0);
while abs(d) > tol
x1 = x0 - m*d;
iter = iter + 1;
x0 = x1;
d = feval(f1, x0)/feval(df1, x0);
end
r = x0;
gii phng trnh
(e x x)2 = 0
Ta dng chng trnh ctschroder.m vi m = 2:
clear all, clc
[x, iter] = schroder('f1', 'df1', 2, -2, 1e-4)
Trong :
function y = f1(x)
y = (exp(-x) - x).^2;
function y = df1(x)
y = 2.0*(exp(-x) - x).*(-exp(-x) - 1);

295

CHNG 6: O HM V TCH PHN S


1. TNH O HM BC NHT BNG PHNG PHP ROMBERG
o hm theo phng php Romberg l mt phng php ngoi suy xc
nh o hm vi mt chnh xc cao. Ta xt khai trin Taylor ca hm f(x) ti (x +
h) v (x - h):
h2
h3
h4 ( 4)

f( x + h) = f( x) + hf ( x) + f ( x) + f ( x) + f ( x) +
(1)
2
3!
4!
h2
h3
h4 (4)
f( x h) = f( x) hf ( x) + f ( x) f ( x) + f ( x)
(2)
2
3!
4!
Tr (1) cho (2) ta c:
2h 3
2h 5 ( 5)
f( x + h ) f( x h) = 2 hf ( x) +
f ( x) +
f ( x) +
(3)
3!
5!
Nh vy rt ra:
h 4 ( 5)
f( x + h) f( x h) h 2
f ( x) =
f ( x) f ( x)
(4)
2h
3!
5!
hay ta c th vit li:
1
[f( x + h) f( x h)] + a 2 h 2 + a 4 h 4 + a 6 h 6 +
(5)
f ( x) =
2h
trong cc h s ai ph thuc f v x.
Ta t:
1
( h) =
[f( x + h) f( x h)]
(6)
2h
Nh vy t (5) v (6) ta c:
D(1,1) = ( h) = f ( x) a 2 h 2 a 4 h 4 a 6 h 6
(7)
h
h2
h4
h6
D( 2 ,1) = = f ( x) a 2
a4
a6

(8)
4
16
64
2
v tng qut vi hi = h/2i-1 ta c :
D(i ,1) = ( h i ) = f ( x) a 2 h i2 a 4 h i4 a 6 h 6i
(9)
Ta to ra sai phn D(1,1) - 4D(2,1) v c:
h
3
15
( h) 4 = 3f ( x) a 4 h 4 a 6 h 6
(10)
4
16
2
Chia hai v ca (10) cho -3 ta nhn c:
4 D( 2 ,1) D(1,1)
1
5
D( 2 ,2) =
= f ( x) + a 4 h 4 + a 6 h 6 +
(11)
16
4
4
Trong khi D(1, 1) v D(2, 1) sai khc f(x) ph thuc vo h2 th D(2, 2) sai khc f(x)
ph thuc vo h4 . By gi ta li chia i bc h v nhn c:
4
6
1 h
5 h

D( 3 ,2) = f ( x) + a 4 + a 6 +
(12)
4 2 16 2
298

v kh s hng c h4 bng cch to ra:

D( 2 ,3) 16 D( 3,2) = 15f ( x) + +

15
a6h6
64

(13)

Chia hai v ca (13) cho -15 ta c:


16 D( 3,2) D( 2 ,2)
1
D( 3 ,3) =
= f ( x) a 6 h 6
(14)
15
64
Vi ln tnh ny sai s ca o hm ch cn ph thuc vo h6. Li tip tc chia i
bc h v tnh D(4, 4) th sai s ph thuc h8. S tnh o hm theo phng php
Romberg l :
D(1, 1)
D(2, 1)
D(2, 2)
D(3, 1)
D(3, 2)
D(3, 3)
D(4, 1)
D(4, 2)
D(4, 3)
D(4, 4)
............
trong mi gi tr sau l gi tr ngoi suy ca gi tr trc hng trn .
Vi 2 j i n ta c:
4 j1 D(i , j 1) D(i 1, j 1)
D(i , j) =
4 j1 1
v gi tr khi u l:
1
[f( x + h i ) f( x h i )]
D(i , j) = ( h i ) =
2h i
vi hi = h/2i-1 .
Chng ta ngng li khi hiu gia hai ln ngoi suy t chnh xc yu cu.
Ta xy dng hm diffromberg() thc hin thut ton trn:
function df = diffromberg(f, x, h, maxiter, tol)
%Tinh dao ham bang phuong phap Romberg
D(1, 1) = (feval(f,x+h) - feval(f, x-h))/(2*h);
for i = 1:maxiter
h = h/2;
D(i + 1, 1) = (feval(f,x+h) - feval(f, x-h))/(2*h);
for j = 1:i
D(i + 1, j + 1) = (4^j*D(i + 1, j) - D(i, j))/(4^j - 1);
end
if (abs( D(i + 1, i + 1) - D(i, i) ) < tol)
df = D(i+1, i+1);
break;
elseif ( i == maxiter )
error( 'Ngoai suy Richardson khong hoi tu' );
end
end
299

tnh o hm ca hm cho trc ta dng chng trnh ctdiffromberg.m:


clear all, clc
format long;
f = inline('x^2 + 2*x*exp(x) + 1');
x = 2;
h = 0.5;
tol = 1e-6;
maxiter = 10;
df = diffromberg(f, x, h, maxiter, tol)
2. TNH O HM BC CAO
Ta xt khai trin Taylor ca hm f(x):
h2
h3
h4 ( 4)
f( x + h) = f( x) + hf ( x) + f ( x) + f ( x) + f ( x) +
(1)
2
3!
4!
h2
h3
h 4 (4)
f(x h) = f(x) hf (x) +
f (x)
f (x) +
f (x)
(2)
2
3!
4!
T (1) v (2) ta c:
f(x + h) 2f(x) + f(x h)
D(2)
c2 (x, h) =
h2
(3)
h 2 (4)
2h 4 (6)
f (x) +
f (x) +
= f (x) +
12
6!
Nh vy nu ta tnh o hm cp 2 theo (3) th sai s c h2. Dng phng php ngoi
suy Richadson ta c:
(2)
2 2 D(2)
f(x + 2h) + 16f(x + h) 30f(x) + 16f(x + h) f(x 2h)
c2 (x, h) D c2 (x, 2h)
=
22 1
12h 2
h 4 ( 5)
f (x) +
= f (x)
90
Do vy:
f(x + 2h) + 16f(x + h) 30f(x) + 16f(x + h) f(x 2h)
D(2)
c2 (x, h) =
12h 2
(4)
h 4 ( 5)
f (x) +
= f (x)
90
Nu o hm cp c tnh theo (4) th sai s ch cn c h4. T (4) ta c:
c 2 f2 + c1f1 + c 0 f0 + c 1f1 + c 2 f2
(5)
D(2)
c2 (x, h) =
h2
Trong :
f2 = f(x + 2h)
300

f1 = f(x + h)
f0 = f(x)
f-1 = f(x - h)
f-2 = f(x - 2h)
Vit r cc khai trin Taylor ca f2, f1, f0, f-1, f-2 ta c:

(2h)2
h2

c
f
2hf
f
c
f
hf
f0 +
+
+
+
+
+
+
20
0
0
1 0
0

2!
2!
1

D(2)
(x,
h)
=

c2
2
h

h2
( 2h)2
f0 + c 2 f0 2hf0 +
f0
+c 0 f0 + c 1 f0 hf0 +

2!
2!

(c 2 + c1 + c 0 + c 1 + c 2)f0 + h(2c 2 + c1 + c 1 2c 2 )f0


1
2
D(2)

1
1
22
c2 (x, h) =
2 2
2
h + h c 2 + c1 + c 1 + c 2 f0 +
2
2
2
2

Ta phi gii h phng trnh sau tm cc h s ci.


1 1
1
1 c 2 0
1
2
1
2 c 1 0
1 0
2

2
2
2!
1
2!
0
1
2!
2
2!

c 0 = 1
2

3
2 3! 1 3! 0 1 3! 2 3! c 1 0
2 4 4! 1 4! 0 1 4! 2 4 4! c 2 0
Kt qu ta c c2 = -1/12, c1 = 4/3, c0 = -5/2, c-1 = 4/3 c-2 = -1/12. Do vy:
f2 + 16f1 30f0 + 16f1 f2
D(2)
(x,
h)
=
c2
12h 2
Tng t ta c o hm bc 4 ca hm:
f2 4f1 + 6f0 4f1 + f2
D(4)
(x,
h)
=
c2
12h 4
Ta xy dng hm diffn() tnh o hm ti bc 5:

(6)

(7)

function df = diffn(f, n, x)
% Tinh dao ham cap n cua f tai x
if n>5
error('Ham chi tinh duoc dao ham den bac 5');
return;
end;
N = 5;
xo = x;
T(1) = feval(f,xo);
301

h = 0.005;
tmp = 1;
for i = 1:N
tmp = tmp*h;
c = difapx(i,[-i i]); %he so cua dao ham
dix = c*feval(f,xo + [-i:i]*h)';
T(i+1) = dix/tmp; %dao ham
end
df = T(n+1);
h = 0.005;
tmp = 1;
for i = 1:N
tmp = tmp*h;
c = difapx(i,[-i i]); %he so cua dao ham
dix = c*feval(f,xo + [-i:i]*h)'; %/h^i; %dao ham
T(i+1) = dix/tmp; %he so cua chuoi Taylor
end
df = T(n+1);
tnh o hm ca hm ta dng chng trnh ctdiffn.m
clear all, clc
f = inline('x.^2 + atan(x)','x');
df = diffn(f, 5, 0)
3. TNH O HM BNG PHNG PHP NI SUY
Gi s ta c hm cho di dng bng:
x
y

x0
y0

x1
y1

x0
y0

...
...

xn
yn

tm o hm ca hm ti mt im no ta s ni suy hm ri sau tnh o


hm ca hm ti im cho. Ta xy dng hm diffinterp() thc hin cng vic
trn.
function df = diffinterp(x, y, n, x0)
%Tinh dao ham cap 1 hai 2 bang phuogphap noi suy
px = lagrange(x, y); % Tim da thuc noi suy Lagrange (x, y)
[p, dp, ddp] = peval(px, x0);
fprintf('Tri so cua ham la: %f\n',p)
if n ==1
df = dp;
302

else
df = ddp;
end
fprintf('Dao ham cap %d la: %f\n',n, df);
tnh o hm ta dng chng trnh ctdiffinterp.m:
clear, clc
x0 = pi/4;
x = [2:6]*pi/16;
y = sin(x);
x = [1.5 1.9 2.1 2.6 3.2];
y = [1.0628 1.3961 1.5432 1.8423 2.0397];
n = 2;
df = diffinterp(x, y, n, x0);
4. TCH PHN XC NH
Mc ch ca tnh tch phn xc nh, cn gi l cu phng, l nh gi nh
lng biu thc:
b
y
J = f( x)dx
B
a

trong f(x) l hm lin tc trong khong [a,b]


v c th biu din bi ng cong y = f(x). Nh
vy tch phn xc nh J l din tch SABba, gii
hn bi ng cong f(x), trc honh, cc ng
thng x = a v x = b. Tch phn ny thng c
tnh gn ng bng cng thc:

J = A i f(xi )
i =1

trong Ai l trng s, ph thuc phng php tnh tch phn.


Tt c cc phng php tnh tch phn c suy ra t phng php ni suy hm
di du tch phn. Do vy kt qu s chnh xc nu hm c th xp x bng a thc.
Cc phng php tnh tch phn xc nh bng phng php s c chia thnh 2
nhm: cc phng php Newton - Cotes v cc phng php Gauss. Khi dng cc
phng php Newton - Cotes khong ly tch phn c chia u nh trong phng
php hnh thang hay phng php Simpson. Khi dng cc phng php Gauss, ccc
dim chia c chn t chnh xc cao nht. Do phng php ny cn t ln tnh
gi tr hm dci du tch phn nn thch hp khi hm f(x) kh tnh.
5. CC CNG THC NEWTON - COTES
1. Khi nim chung: Ta kho st tch phn
303

J= f(x)dx

(1)

Ta chia min ly tch phn [a, b] thnh (n - 1) on bng nhau c chiu


di mi on h = (b - a)/(n - 1) nh hnh v v k hiu cc im chia l
x1, x2,.., xn. Sau ta xp x hm f(x) bng a
thc bc (n - 1) i qua cc nt. a thc ni suy
Lagrange ca f(x) c dng:
n

Pn 1 (x) = f(xi )Li (x)


i =1

Nh vy, xp x tch phn (1) l:


b

J= f(x)dx = Pn1 (x)dx =


a

i =1

f(x i ) L i (x)dx = A if(x i )


a

x1

xn

x2 x3

(2)

i =1

Trong :
b

A i = Li (x)dx

i = 1,2,...,n

(3)

Cng thc (2) l cng thc Newton - Cotes. Vi n = 2 ta c cng thc hnh thang v
vi n = 3 ta c cng thc Simpson.
2. Phng php hnh thang: Khi n = 2 ta c:
x x2
xb
L1 (x) =
=
x1 x 2
h
x x1 x a
L 2 (x) =
=
h
x 2 x1
h
b

1
1
h
A1 =
(x b)dx =
(b a)2 =
h
2h
2

x1=a

x2=b

A2 =

1
1
h
(x a)dx =
(b a)2 =
h
2h
2
a

Vy:

h
J = f(a) + f(b)

2
Trong thc t, phng php hnh thang c p dng trn tng on. Trn mi on
[xi, xi+1] ta c:
h
J i = f(x i ) + f(xi+1 )

2
n
h
v: J = J i = f(x1 ) + 2f(x 2 ) + 2f(x 3 ) + + 2f(x n 1 ) + 2f(x n )
(7)

2
i =1
Ta gi H = b - a. Nu tch phn trn c tnh ch bi k hnh thang th:
304

k = 1:
k = 2:

k = 3:

H
(8)
J1 = f(a) + f(b)

H 1
H
H H

J 2 = f(a) + 2f a + + f(b) = J1 + f a +
2
22

4 2

H
H
H
3H

+
J 2 = f(a) + 2f a + + 2f a + + 2f a +
f(b)

4
2
4

1
H
3H H

= J 2 + f a + + f a +

2
4
4 4

Tng qut, vi k > 1 ta c:


2 k 1

Jk =

1
H
J k1 + k1
2
2

i =1

f a +

(2i 1)H
2 k1

k = 2,3,...

(9)

Cng thc (8) l cng thc hnh thang lp. Ta thy rng tng ch cha cc nt mi
xut hin khi s hnh thang tng gp i. Tnh dy J1, J2,... bng (8) v (9) cn cng
mt s ln tnh nh khi dng (7). Nhng khi dng (8) v (9) ta kim tra c tnh hi
t v c th dng lp khi t chnh xc cho trc.
Ta xy dng hm trapezoid() thc hin thut ton trn.
function J = trapezoid(f, a, b, maxiter, tol)
% Quy tac hinh thang lap.
% Cu phap: J = trapezoid(f, a, b, k)
fa = feval(f, a);
fb = feval(f, b);
J1 = (fa + fb)*(b - a)/2;
for k = 2:maxiter
n = 2^(k -2 ); % so diem moi
h = (b - a)/n ; % khoang chia moi
x = a + h/2.0; % toa do diem moi thu nhat
sum = 0.0;
for i = 1:n
fx = feval(f, x);
sum = sum + fx;
x = x + h;
end
J = (J1 + h*sum)/2;
if abs(J1 - J) < tol
305

break;
end
J1 = J;
end
tnh tch phn ta dng chng trnh cttrapezoid.m
clear all, clc
f = inline('(x^3+1)*sin(x)','x');
a = 0;
b = 1;
maxiter = 50;
tol = 1e-6;
J = trapezoid(f, a, b, maxiter, tol)
3. Phng php Simpson: Khi n = 3 ta c cng thc
Simpson. Qua 3 im, hm f(x) c xp x bng mt hm
bc hai(mt parabol). tnh tch phn ta thay hm f(x)
v phi bng a thc ni suy Newton tin bc 2:
t(t 1) 2
P2 = y 0 + ty 0 +
y0
(10)
2!
v ta c :
b

x0=a x1 x2=b

f(x)dx = P (x)dx

(11)

i bin x = x1 + th th dx = hdt. Vi x = x1 th t = 0 v vi x = x3 th t = 2 nn:


b
2
y + ty + t(t 1) 2 y dt
P
(x)dx
h
=
2
0
0
a
0 0
2!

t =2

t2
1 t3 t2
= h y 0 t + y 0 + 2 y 0
2
2 3 2

t =0
1 8 4

= h 2y 0 + 2y 0 + 2 y 0
2 3 2

(12)

h
h
a+b

( y0 + 4y1 + y 2 ) = f(a) + 4f
+ f(b)
3
3
2

Thc t ta chia on [a, b] thnh 2n phn v tnh tch phn trn mi on con.
Cng cc tch phn trn cc on con ta c:
b
h
f(x)dx
y 0 + 4 ( y1 + y 3 + + y 2n 1 ) + 2 ( y 2 + y 4 + + y 2n 2 ) + y 2n (13)
=
a

3
Cng thc (13) i hi n l s chn.
=

306

Ta xy dng hm simpson() thc hin thut ton trn


function s = simpson(f, a, b, n)
%n so khoang chia
%neu f chua trong mot file dung ki hieu @ de goi
% s = simpson(@f, a, b, n).
%neu f la ham inline
% s = simpson(f, a, b, n).
if mod(n, 2) ~= 0
n=n+1
end
h = (b - a)/(2*n);
s1 = 0;
s2 = 0;
for k = 1:n
x = a + h*(2*k-1);
s1 = s1+ f(x);
end
for k = 1:(n-1)
x = a + h*2*k;
s2 = s2 + f(x);
end
s = h*(f(a) + f(b) + 4*s1 + 2*s2)/3;
clc
tnh tch phn ta dng chng trnh ctsimpson.m:
clear all, clc
f = inline('exp(x).*sin(x)','x');
a = 0;
b = 1;
n = 6;
s = simpson(f, a, b, n)
3. Phng php cu phng thch nghi: Trong
tch phn bng phng php Simpson, cc on
c chia u v lm cho sai s khng ging nhau
trn cc on: sai s ln trn cc on hm bin i
nhiu v sai s nh trn cc on hm tng i
bng phng. Ngc li
phng php cu phng thch nghi chia cc on khng u: ngn trn cc on
hm thay i nhiu v di trn cc on thay i t v s c sai s nh khi s on
chia nh.
307

Thut ton cu phng thch nghi bt u bng vic tnh tch phn int i vi
ton b on [a, b] v tng tch phn int12 = int1 + int2 trn 2 on bng nhau. Da
trn int v int12 ta tnh sai s. Nu cha t chnh xc, ta chia i mi on v lp
li qu trnh tnh. Ta dng hm adaptivesimpson() thc hin thut ton ny:
function int = adaptivesimpson(f, a, b, tol)
mid = (b + a)/2.0;
int = simpsonapprox (f, a, b);
int12 = simpsonapprox (f, a, mid) + simpsonapprox (f, mid, b);
if( abs(int - int12) < 15.0*tol )
int = int12;
else
leftint = adaptivesimpson (f, a, mid, tol/2);
rightint = adaptivesimpson (f, mid, b, tol/2);
int = leftint + rightint;
end
function int = simpsonapprox (f, a, b)
h = (b - a)/2.0;
int = h*( feval(f, a) + 4.0*feval(f, (a + h)) + feval(f, b) )/3.0;
tnh tch phn ta dng chng trnh ctadaptive.m:
clc, clear all
f = inline('sqrt(x).*cos(x)');
a = 0;
b = 1;
tol = 1e-5;
J = adaptivesimpson(f, a, b, tol)
6. TCH PHN ROMBERG
Tch phn Romberg kt hp quy tc tch phn hnh thang vi phng php
ngoi suy Richardson. Trc ht ta a vo khi nim:
Ri,1 = Ji
b

Trong Ji l gi tr xp x ca f(x)dx c c bng cch tnh theo quy tc lp hnh


a

thang ln th i.
Tch phn Romberg bt u t R1,1 = J1 (mt hnh thang) v R2,1 = J2 (hai hn
thang). Sau tnh R2,2 bng cch ngoi suy:
2 2 R 2 ,1 R 1,1 4
1
R 2 ,2 =
(1)
= R 2 ,1 R 1,1
2
2 1
3
3
308

tin dng ta lu cc kt qu vo mng dng:


R 1,1

2 ,1 R 2 ,2
Bc tip theo l tnh R3,1 = J3 (bn hnh thang) v lp li ngoi suy Richadson ta c:
2 2 R 3,1 R 2 ,1 4
1
R 3,2 =
=
R

R 2 ,1
(2)
3,1
22 1
3
3
2 4 R 3,2 R 2 ,2 16
1
= R 3,2 R 2 ,2
v: R 3,3 =
(3)
4
2 1
15
15
Cc phn t ca R by gi gm:
R 1,1

R 2 ,1 R 2 ,2

R 3,1 R 3,2 R 3,3


Cng thc tng qut dng trong s ny l:
4 j1 R i ,j1 R i1,j1
R i ,j =
i > 1, j = 2, 3,...
4 j1 1
Ta xy dng hm romberg() thc hin thut ton trn:

(4)

function J = romberg(f, a, b, maxiter, tol)


m = 1;
h = b-a;
err = 1;
j = 0;
R = zeros(4, 4);
R(1,1) = h*(f(a) + f(b))/2;
while((err > tol) & (j < maxiter))|(j < 4)
j = j + 1;
h = h/2;
s = 0;
for p =1:m
x = a + h*(2*p-1);
s = s + f(x);
end
R(j+1, 1) = R(j, 1)/2 + h*s;
m = 2*m;
for k = 1:j
R(j+1, k+1) = R(j+1, k) + (R(j+1, k) - R(j,k))/(4^k-1);
end
err = abs(R(j, j)-R(j+1, k+1));
end
309

J = R(j+1, j+1);
tnh tch phn ta dng chng trnh ctromberg.m:
clear all, clc
f = inline('exp(x).*sin(x)','x');
a = 0;
b = 1;
maxiter = 20;
tol = 1e-6;
J = romberg(f, a, b, maxiter, tol)
7. TCH PHN BOOL
Ta kho st hm y = f(x) trn on [x0, x4], vi:
x1 = x0 + h, x2 = x0 + 2h, x3 = x0 + 3h, x4 = x0 + 4h
Theo Bool, tch phn:
x4
2h m
J = f(x)dx =
7f(x0 ) + 32f(x1 ) + 12f(x 2 ) + 32f(x 3 ) + 7f(x 4 )

45
k =1
x0
Xt tch phn:
b

J = f(x)dx
a

ba
bi cc im
4m
chia xk = x0 + hk = a + hk, k = 0, 1,..., 4m. Cng thc Bool cho 4m on con l:
b
2h m
J = f(x)dx =
7f(x0 ) + 32f(x1 ) + 12f(x 2 ) + 32f(x 3 ) + 7f(x 4 )

45
k =1
a
Ta xy dng hm intbool() thc hin thut ton ny
Ta chia on [a, b] thnh 4m on con u nhau c rng h =

function tp = intbool(f, a, b, m)
%Tinh tich phan bang phuong phap Bool
a = 0;
b = 2;
m = 2;
h = (b - a)/(4*m);
for k = 1:4*m
x(k) = a + k*h;
end
tp = 0;
j = 1;
for k = 1:m
310

tp = tp + (7*feval(f, a) + 32*feval(f, x(j)) +...


12*feval(f, x(j+1)) + 32*feval(f, x(j+2)) + 7*feval(f, x(j+3)));
a = x(4*k);
j = 4*k + 1;
end
tp = tp*h*2/45;
tnh tch phn ca mt hm ta dng chng trnh ctintbool.m:
clear all, clc
format long
f = inline('x.*sin(x)');
a = 0;
b = 2;
m = 2;
J = intbool(f, a, b, m)
8. CNG THC TCH PHN FILON
Gi s cn tnh tch phn:
b

J = f(x)cos(x)dx
a

Lc ta c th dng cng thc tch phn Filon:


xn

f(x)cos(tx)dx

x0

= h (th) [ f2n sin(tx 2n )f2n sin(tx 2n )] + (th)C 2n + (th)C 2n 1 +

2 4
th S2n
45

Trong :
a = x0, b = xn, t =
n

C 2n = f2i cos(tx 2i ) 0.5 f2n cos(tx 2n ) + f0cos(tx0 )


i =0

C 2n 1 = f2i1cos(tx 2i1 )
i =0
n

S2n 1 = f2i1 sin(tx 2i1 )


i =1

1 sin 2 sin 2
() = +
3

2 2

2
1 + cos sin 2
() = 2

311

sin cos
() = 4 3 2


Ta xy dng hm filon() thc hin cc cng thc trn:
function int = filon(f, a, b, t, m, key)
% ham filon tinh gan dung tich phan
b

f (x)cos(tx)dx

neu key = 1,

% hay
b

f (x)sin(tx)dx

neu key = 2,

% dung m diem theo quy tac Filon (m le).


if (any(size(a) ~= [1 1]))
error ('Thong so a phai la so.') ;
end
if (any(size(b) ~= [1 1]))
error (Thong so b nhap vao phai la so.') ;
end
if (any(size(t) ~= [1 1]))
error ('Thong so t phai la so.') ;
end
if (any(size(m) ~= [1 1]))
error ('Thong so m phai la so.') ;
end
if (any([(fix(m) ~= m) (rem(m, 2) == 0)]))
error ('Thong so m phai la so le.') ;
end
if (m < 3)
error ('Thong so m phai lon hon 3.') ;
end
if (all([(key ~= 1) (key ~= 2)]))
error ('Thong so key phai la 1 hoac 2.') ;
end
n=m-1;
h = (b - a)/n;
th = t*h ;
thh = th*th ;
if (abs(th) >= 0.1)
s = sin(th) ;
c = cos(th) ;
alfa = (1.0 + s*(c - 2.0*s/th)/th)/th ;
312

beta = 2.0*(1.0 + c*c - 2.0*s*c/th)/thh ;


gamma = 4.0*(s/th - c)/thh ;
else
alfa = th*thh*(2.0/45.0 + thh*(-2.0/315.0 + 2.0*thh/4725.0)) ;
beta = 2.0/3.0 + thh*(2.0/15.0 + thh*(4.0/105.0 + 2.0*thh/567.0)) ;
gamma = 4.0/3.0 + thh*(-2.0/15.0 + thh*(1.0/210.0 - thh/11340.0)) ;
end
args = [a b];
fbounds = feval(f, args) ;
s1 = sin(a*t) ;
s2 = sin(b*t) ;
c1 = cos(a*t) ;
c2 = cos(b*t) ;
if (key == 1)
sum = s2*fbounds(2) - s1*fbounds(1) ;
sum0 = 0.5*(c1*fbounds(1) + c2*fbounds(2)) ;
if (n > 2)
args = (a + (2:2:n-2)*h)' ;
sum0 = sum0 + cos(t*args)'*feval(f, args) ;
end
args = (a + (1:2:n-1)*h)' ;
sum1 = cos(t*args)'*feval(f, args) ;
else
sum = c1*fbounds(1) - c2*fbounds(2) ;
%sum = -(c1*fbounds(1) - c2*fbounds(2)) ;
sum0 = 0.5*(s1*fbounds(1) + s2*fbounds(2)) ;
%if (n == 2)
if (n > 2)
args = (a + (2:2:n-2)*h)' ;
sum0 = sum0 + sin(t*args)'*feval(f, args) ;
end
args = (a + (1:2:n-1)*h)' ;
sum1 = sin(t*args)'*feval(f, args) ;
end
int = h*(alfa*sum + beta*sum0 + gamma*sum1) ;
Khi tnh tch phn ta dng chng trnh ctintfilon.m:
clear all, clc
a = 0;
b = 2;
key = 2;
313

t = 3;
m = 51;
f = inline('(x.^3+1).*sin(x)');
J = filon(f, a, b, t, key)
9. QUY TC HARDY
b

tnh tch phn

J = f(x)dx ta c th dng cng thc Hardy:


a

x7

f(x)dx = 0.01h ( 28f

+ 162f2 + 220f4 + 162f6 + 28f7 )

x1

tng chnh xc ta dng phng php chia on [a, b] thnh m on v trn mi


on ta dng cng thc Hardy. Ta xy dng hm inthardy() thc hin cng thc
trn:
function tp = inthardy(f, a, b, m)
%Tinh tich phan bang phuong phap Hardy
h = (b - a)/(6*m);
for k = 1:6*m
x(k) = a + k*h;
end
tp = 0;
j = 1;
for k = 1:m
tp = tp + (28*feval(f, a) + 162*feval(f, x(j)) +...
220*feval(f, x(j+2)) + 162*feval(f, x(j+4)) + 28*feval(f, x(j+5)));
a = x(6*k);
j = 6*k + 1;
end
tp = tp*h*0.01;
tnh tch phn ta dng chng trnh ctinthardy.m:
clear all, clc
format long
f = inline('exp(x).*sin(x)','x');
a = 0;
b = 2;
m = 20;
J = inthardy(f, a, b, m)
10. QUY TC DURANT
314

J = f(x)dx ta c th dng cng thc Durant:

tnh tch phn

xn

2 f + 11 f + f +
=
f(x)dx
h
1
2
3

10
5
x1

+ fn 2 +

11
2
fn 1 + fn
10
5

Ta xy dng hm intdurant() thc hin cng thc trn:


function tp = intdurant(f, a, b, n)
%Tinh tich phan bang phuong phap Durant
h = (b - a)/(n);
for k = 1:n
x(k) = a + k*h;
end
tp = 0;
for i = 2:n-2
tp = tp+ feval(f, x(i));
end
tp = tp + 0.4*feval(f, a) + 1.1*feval(f, x(1)) +...
1.1*feval(f, x(n-1)) + 0.4*feval(f, x(n));
tp = h*tp;
tnh tch phn ta dng chng trnh ctintdurant.m:
clear all, clc
format long
f = inline('1./(1 + x.^2)');
a = 0;
b = 2;
n = 50;
J = intdurant(f, a, b, n)
11. QUY TC SHOVELTON
b

tnh tch phn

J = f(x)dx ta c th dng cng thc Shovelton:


a

x11

f(x)dx = 126 h 8 ( f

+ f11 ) + 35 ( f2 + f4 + f8 + f10 ) + 15 ( f3 + f5 + f7 + f9 ) + 36f6

x1

tng chnh xc ta dng phng php chia on [a, b] thnh m on v trn mi


on ta dng cng thc Shovelton. Ta xy dng hm intshovelton() thc hin cng
thc trn:
315

function tp = intshovelton(f, a, b, m)
%Tinh tich phan bang phuong phap Shovelton
h = (b - a)/(10*m);
for k = 1:10*m
x(k) = a + k*h;
end
tp = 0;
j = 1;
for k = 1:m
tp = tp + 8*(feval(f, a) + feval(f, x(j+9))) +...
35*(feval(f, x(j)) + feval(f, x(j+2)) + feval(f, x(j+6)) + feval(f, x(j+8))) +...
15*(feval(f, x(j+1)) + feval(f, x(j+3)) + feval(f, x(j+5)) + feval(f, x(j+7)))
+...
36*feval(f, x(j+4));
a = x(10*k);
j = 10*k + 1;
end
tp = tp*h*5/126;
tnh tch phn ta dng chng trnh ctshovelton.m:
clear all, clc
format long
f = inline('1./(1 + x.^2)');
a = 0;
b = 2;
m = 20;
J = intshovelton(f, a, b, m)
12. QUY TC WEDDLE
b

tnh tch phn

J = f(x)dx ta c th dng cng thc Weddle:


a

x7

f(x)dx = 0.3h ( f

+ 5f2 + f3 + 6f4 + f5 + 5f6 + f7 )

x1

tng chnh xc ta dng phng php chia on [a, b] thnh m on v trn mi


on ta dng cng thc Weddle. Ta xy dng hm intweddle() thc hin cng thc
trn:
function tp = intweddle(f, a, b, m)
%Tinh tich phan bang phuong phap Weddle
h = (b - a)/(6*m);
316

for k = 1:6*m
x(k) = a + k*h;
end
tp = 0;
j = 1;
for k = 1:m
tp = tp + feval(f, a) + 5*feval(f, x(j)) +...
feval(f, x(j+1)) + 6*feval(f, x(j+2)) +...
feval(f, x(j+3)) + 5*feval(f, x(j+4)) + feval(f, x(j+5));
a = x(6*k);
j = 6*k + 1;
end
tp = tp*h*0.3;
tnh tch phn ta dng chng trnh ctweddle.m:
format long
f = inline('exp(x).*sin(x)','x');
a = 0;
b = 2;
m = 20;
J = intweddle(f, a, b, m)
13. CU PHNG GAUSS
1. Cc cng thc tch phn Gauss: Trong phn ny chng ta s xt mt s phng
php cu phng Gauss:
- Tch phn Gauss - Legendre dng xp x:
b

f(t)dt
a

- Tch phn Gauss - Hermite dng xp x:

t
e f(t)dt
2

- Tch phn Gauss - Laguerre dng xp x:

f(t)dt

- Tch phn Gauss - Chebyshev 1 dng xp x:


1

1
1 t

f(t)dt

- Tch phn Gauss - Chebyshev 2 dng xp x:


317

1 t 2 f(t)dt

2. Tch phn Gauss - Legendre: Nu hm di du tch phn f(t) l a thc bc nh


hn hay bng 3 ( bng 2n - 1) th tch phn:
b

f(t)dt

(1)

c th tnh chnh xc bi 2(n) im bng cch dng cng thc:


J[t1, t2] = w1f(t1) + w2f(t2)
vi w1 v w2 l cc trng s v t1, t2 l cc nt.

(2)

+1

w1f(t1 ) + w 2 f(t 2 ) = w1 + w 1dt = 2

f(t) = 1

(3a)

+1

w1f(t1 ) + w 2 f(t 2 ) = w1t1 + w 2 t 2 tdt = 0

f(t) = t

1
+1

2
3

(3c)

w1f(t1 ) + w 2 f(t 2 ) = w1t13 + w 2 t 32 t 3dt = 0

(3d)

w1f(t1 ) + w 2f(t 2 ) = w1t 12 + w 2 t 22 t 2dt =

f(t) = t2

1
+1

f(t) = t3

(3b)

Nhn (3b) vi t v tr kt qu cho (3d) ta c:


w 2 (t 32 t t ) = 0 nn t2 = -t1
Thay t2 = -t1 vo (3b) ta c:
(w1 - w2)t1 = 0
nn w1 = w2
Thay w1 = w2 vo (3a) ta c:
w1 + w2 = 2
nn w1 = w2 = 1
Thay w1 = w2 = 1 vo (3c) ta c:
2
1
t 12 + ( t 1 )2 =
nn t 1 = t 2 =
3
3
Nh vy (2) tr thnh:
1 1
(4)
J [ t 1 ,t 2 ] = f
+ f

3 3

ngha l cng thc xp x ny cho ta kt qu chnh xc ca (1) khi n 3.


Khi a thc di du tch phn c bc nh hn (2n - 1) th cng thc tch phn
Gauss - Legendre:
2
1
2
1 2

J GL [ t1 ,t 2 , ,t n ] = w i f(t i )

(5)

i =1

cho tch phn chnh xc ca a thc. Cc im nt (n nt) l nghim ca a thc


Legendre bc n:
318

(2n 2i)!
t n 2i
2 i!(n i)!(n 2i)!
i =0
hay tnh theo cng thc lp:
(2n 1)tL n 1 (t) (n 1)L n2 (t)
L n (t) =
n
to ra a thc Legendre ta dng hm legendre():
n/2

L n (t) = ( 1)i

(6a)

(6b)

function p = legendre(n)
%tao ra da thuc Legendre
p0 = 1;
p1 = [1 0];
if n <= 0
p = p0;
elseif n == 1
p = p1;
end
for k = 2:n
p = ((2*k - 1)*[p1 0] - (k - 1)*[0 0 p0])/k;
p0 = p1;
p1 = p;
end
Cho n im nt, ta c th tnh cc trng s tng ng ca cng thc tch phn Gauss Legendre n im bng cch gii h phng trnh tuyn tnh:

319

1
2
1
1
1 w n,1

t2
ti
t n w n,1
t1

t 22
t i2
t n2 w n,i = 1(1)i / n
(7)
t1

n 1 n 1 n 1

t2
ti
t nn 1 w n,n 1(1)n / n
t1


trong phn t th i ca v phi RHS(i) l:
+1
+1
1 i
1 ( 1)i
i 1
RHS(i) = t dt = t =
(8)
n
i
1
1
Th tc tm n im nt v cc trng s wn,i ca cng thc tch phn Gauss - Legendre
c vit trong hm gausslegendre():
function [t, w] = gausslegendre(n)
if n < 0
fprintf('\nBac cua da thuc Legendre phai la so duong\n');
return;
else
t = roots(legendre(n))'; %tao thanh mot hang cua ma tran;
A(1,:) = ones(1, n);
b(1) = 2;
for i = 2:n % Pt.(7)
A(i, :) = A(i - 1, :).*t;
if mod(n, 2) == 0
b(i) = 0;
else b(i) = 2/n; % Pt.(8)
end
end
w = b/A';
end
Khi tnh tch phn trn on [a, b] ta phi bin i n v on [-1, 1] bng cch
t:

(b a)t + a + b
ba
dx =
dt
(9)
2
2
Nh vy ta c th vit li cng thc tch phn Gauss - Legendre trn on [a, b]
x=

l:
+1

ba
J = f(x)dx =
f[x(t)]dt

2
a
1
v xp x bng cng thc:
b

323

ba n
(b a)t i + a + b
w i f(xi ) vi xi =

2 i =1
2
Vic chuyn i ny c thc hin bng hm intglegendre():
function J = intglegendre(f, a, b, n)
[t, w] = gausslegendre(n);
x = ((b - a)*t + a + b)/2;%Pt. (9)
fx = feval(f, x);
J = w*fx'*(b - a)/2;% Pt. (10)
J [ x1 ,x 2 , ,x n ] =

(10)

tnh tch phn ta dng chng trnh ctgausslegendre.m:


clc, clear all
% tinh tich phan ham f(x) tren doan [a, b]
% n <= 25;
f = inline('exp(x).*sin(x)','x');
a = 0;
b = 1;
n = 20;
J = intglegendre(f, a, b, n)
3. Tch phn Gauss - Hermite: Cng thc tch phn Gauss - Hermite c dng:
n

J GH [ t1 ,t 2 , ,t n ] = w i f(t i )

(11)

i =1

dng tnh tch phn ca hm m e t nhn vi f(t) l a thc bc nh hn (2n - 1)


trn on [-, ]:
2

J=

t
e f(t)dt
2

(12)

Cc im nt l nghim ca a thc Hermite:


n/2
( 1)i
(13a)
Hn =
n(n 1) (n 2i + 1)(2t)n 2i
i!
i =0
hay:
(13b)
H n (t) = 2tH n 1 (t) Hn 1 (t)
to ra cc h s ca a thc Hermite theo (13b) ta xy dng hm hermite():
function p = hermite(n)
%Hn + 1(x) = 2xHn(x)-Hn'(x)
if n <= 0
p = 1;
else
p = [2 0];
324

for n = 2:n
p = 2*[p 0] - [0 0 polyder(p)]; %Pt.(13b)
end
end
Cho n im nt ta tm cc trng s ca cng thc tch phn Gauss - Hermite bng
cch gii h phng trnh (7) vi v phi l:
+

RHS(1) =

e dt =
t2

+ +

(x
e

x2

+ y2 )

dx e y dy
2

(14a)

dxdy =

r
r
e 2rdr = e
2

RHS(n) = 0 nu n chn
+

RHS(n) =

e t

t 2 n 1

dt =

t
(2t)e

1 n2
t dt
2

(14b)

1
1
1
= e t t n 2 + (n 2) e t t n 3dt = (n 2)RHS(n 2)
2
2
2

Th tc tm n nt v cc trng s tng ng ca cng thc tch phn Gauss Hermite c thc hin trong hm gausshermite():
2

function [t, w] = gausshermite(n)


if n < 0
error('Bac cua da thuc Hermite phai la so duong');
end
t = roots(hermite(n))';
A(1,:) = ones(1, n);
b(1) = sqrt(pi);
for n = 2:n
A(n,:) = A(n - 1,:).*t; %Pt.(7)
if mod(n,2) == 1
b(n) = (n - 2)/2*b(n - 2); %Pt.(14)
else
b(n) = 0;
end
end
w = b/A';
Ta xy dng hm intghermite() tnh tch phn:
function J = intglegendre(f, n)
325

[t, w] = gausshermite(n);
fx = feval(f, t);
J = w*fx';% Pt. (11)
tnh tch phn ta dng chng trnh ctgausshermite.m:
clc, clear all
f = inline('(x^3+1)*sin(x)','x');
n = 15;
J = intghermite(@f1, n)
4. Tch phn Gauss - Laguerre: Khi dng cng thc tch phn Gauss - Laguerre (5)
tr thnh:
n

J GLa [ t 1 ,t 2 , ,t n ] = w i f(t i )

(16)

i =1

v cho ta kt qu ca tch phn:


+

J= e t f(t)dt

(17)

Cc im nt l nghim ca a thc Laguerre bc n:


n
( 1)i
ni
Ln =
ti
i! (n i)!i!
0
hay:
(n + 1)L n +1 (t) = (2n + 1 t)L n (t) nL n 1 (t)
to ra a thc Laguerre bc n ta dng hm laguerre():

(18a)
(18b)

function p = laguerre(n)
%Ln + 1(x) = (2n + 1 - x)Ln(x) - nLn-1(x)
p0 = 1;
p1 = [-1 1];
if n <= 0
p = p0;
elseif n == 1
p = p1;
end
for k = 2:n
p = (-[p1 0] + (2*k - 1)*[0 p1] - (k - 1)*[0 0 p0])/k;
p0 = p1;
p1 = p;
end

326

Cho n nt ti ta c th tm cc trng s tng ng bng cch gii h phng trnh i


s tuyn tnh (7) vi v phi l:

RHS(1) = e tdt = e t 0 = 1
0

RHS(n) = e t

(19a)

t n 1

t n 1

dt = e t

+ (n 1) e t t n 2dt
0

(19b)

= (n 1)RHS(n 1)
tnh to cc nt v trng s tng ng ta dng hm gausslaguerre():
function [t, w] = gausslaguerre(n)
if n < 0
error('Bac cua da thuc Laguerre phai la so duong');
end
t = roots(laguerre(n))';
A(1, :) = ones(1, n);
b(1) = 1;
for i = 2:n
A(i, :) = A(i - 1,:).*t; %Pt.(7)
b(i) = (i - 1)*b(i - 1); %Pt.(15)
end
w = b/A';
Hm intglaguerre() dng tnh tch phn:
function J = intglaguerre(f, n)
[t, w] = gausslaguerre(n);
fx = feval(f, t);
J = w*fx';% Pt. (10)
tnh tch phn ta dng chng trnh ctgausslaguerre.m:
clear all, clc
format long
f = inline('(x.^2).*cos(x)','x');
n = 10;
J = intglaguerre(f, n)
5. Tch phn Gauss - Chebyshev: Cng thc tnh tch phn Gauss - Chebyshev 1 c
dng:
n

J GC1 [ t 1 ,t 2 , ,t n ] = w i f(t i )

(20)

i =1

Cng thc (20) cho ta tnh tch phn:


327

+1

J=

1
1 t2

(21)

f(t)dt

Cc im nt l nghim ca a thc Chebyshev bc n:


(2i 1)
i = 1, 2,..., n
(22)
t i = cos
2n
Cc trng s tng ng l:

i = 1, 2,..., n
(23)
w in =
i
Ta xy dng hm gausscheb1() tnh cc to cc nt v trng s tng ng:
function [t, w] = gausscheb1(n)
if n < 0
error('Bac cua da thuc Chebyshev phai la so duong');
end
for i = 1:n
t(i) = cos((2*i - 1)*pi/(2*n));
w(i) = pi/n;
end
Hm intgcheb1() dng tnh tch phn theo cng thc Gauss - Chebyshev 1:
function J = intgcheb1(f, n)
[t, w] = gausscheb1(n);
fx = feval(f, t);
fx = sqrt(1 - t.^2).*fx;
J = w*fx';% Pt. (21)
tnh mt tch phn no ta dng chng trnh ctgausscheb1.m:
clear all, clc
format long
f = inline('1./(1 + x.^2)');
n = 16;
J = intgcheb1(f, n)
Cng thc tnh tch phn Gauss - Chebyshev 2 c dng:
n

J GC1 [ t 1 ,t 2 , ,t n ] = w i f(t i )

(24)

i =1

Cng thc (24) cho ta tnh tch phn:

J=

+1

1 t 2 f(t)dt

(25)

328

Cc im nt l nghim ca a thc Chebyshev bc n:


i
(26a)
t i = cos
i = 1, 2,..., n
n +1
Cc trng s tng ng l:

i
(26b)
w in =
sin 2
i = 1, 2,..., n
n+1
n + 1
Ta xy dng hm gausscheb2() tnh cc to cc nt v trng s tng ng:
function [t, w] = gausscheb2(n)
if n < 0
error('Bac cua da thuc Chebyshev phai la so duong');
end
for i = 1:n
t(i) = cos(i*pi/(n + 1));
w(i) = (pi/(n + 1))*(sin(i*pi/(n + 1))).^2;
end
Hm intgcheb2() dng tnh tch phn theo cng thc Gauss - Chebyshev 2:
function J = intgcheb2(f, n)
[t, w] = gausscheb2(n);
fx = feval(f, t);
fx = (1./sqrt(1 - t.^2)).*fx;
J = w*fx';% )
tnh mt tch phn no ta dng chng trnh ctgausscheb2.m:
clear all, clc
format long
f = inline('1./(1 + x.^2)');
n = 16;
J = intgcheb2(f, n)
6. Tch phn Gauss vi im k d logarit: Ta c cng thc cu phng:
0

i =1

f(x)ln(x)dx = A f(x )
i

Trong vi n = 6 ta c:
xi
Ai

0.0216334
0.238764

0.129583
0.308287

0.314020
0.245317

0.538657
0.142009

0.756916
0.0554546

0.922669
0.010169
329

Ta xy dng hm intlogarit() thc hin tch phn ny:


function tp = intlogarit(f)
n = 6;
x = [0.0216344; 0.129583; 0.314020; 0.538657; 0.756916; 0.922669];
A = [0.238764; 0.308287; 0.245317; 0.142009; 0.0554546; 0.010169];
tp = 0;
for i = 1:n
t = feval(f, x(i));
tp = tp + A(i)*t;
end
tp = - tp;
tnh tch phn ta dng chng trnh ctintlogarit.m:
clear all, clc
format long
f = inline('(x.^3+1).*sin(x)','x');
J = intlogarit(f)
14. TCH PHN GAUSS - LOBATTO
Trong tch phn ny cc im cn trn v di u l nt ca cu phng.
Cng thc cu phng Gauss - Lobatto c dng:
1

n 1

i=2

f(x)dx = w1f(1) + w 2f(1) + wif(xi )

Ngoi hai im nt x = 1 v x = -1, cc im nt khc c trng s c xc nh


bng:
2
wi =
2
n(n 1) [ Pn 1 (xi )]
Ta xy dng hm gausslobatto() tnh cc nt v cc trng s tng ng:
function [x, w ] = gausslobatto(N)
% Tinh cac nut va trong so Legendre-Gauss-Lobatto
N1 = N + 1;
% Dau tien dung cac nut Chebyshev-Gauss-Lobatto
x = cos(pi*(0:N)/N)';
% Tinh ma tran Legendre - Vandermonde
P = zeros(N1, N1);
xold = 2;
while max(abs(x-xold))>eps
xold = x;
330

P(:, 1) = 1;
P(:, 2) = x;
for k = 2:N
P(:,k+1) = ( (2*k-1)*x.*P(:, k) -(k-1)*P(:, k-1) )/k;
end
x = xold - ( x.*P(:, N1)-P(:, N) )./( N1*P(:, N1) );
end
w = 2./(N*N1*P(:, N1).^2);
Thng thng, ta cn tnh tch phn trn on [a, b] nn cn i bin. Tch phn trn
[a, b] ca hm f(x) c tnh nh hm intgausslobatto():
function J = intgausslobatto(f, n, a, b)
[t, w] = gausslobatto(n);
x = ((b - a)*t + a + b)/2;%Pt. (9)
fx = feval(f, x);
J = w'*fx*(b - a)/2;% Pt. (10)
tnh tch phn ca hm ta dng chng trnh chng trnh ctintgausslobatto.m:
clear all, clc
% tinh tich phan ham f(x) tren doan [a, b]
% n <= 25;
f = inline('(x.^3+1).*sin(x)','x');
a = 0;
b = 1;
n = 6;
J = intgausslobatto(f, n, a, b)
15. TCH PHN GAUSS - KRONROD
Ta xt tch phn:
b

J = f(x)dx
a

Theo cng thc cu phng Gaus - Krnod ta c:


b

i =1

J = f(x)dx = w i f(x i )
Trong cc nt l xi v cc trng s tng ng l wi. Cc gi tr nay khi n = 41
c lu trong hm kronrod:
function[x, w] = kronrod
%cac nut va trong so tuong ung trong tich phan Gauss - Kronrod
331

x(1) = - 0.9988590315882777;
x(2) = - 0.9931285991850949;
x(3) = - 0.9815078774502503;
x(4) = - 0.9639719272779138;
x(5) = - 0.9408226338317548;
x(6) = - 0.9122344282513259;
x(7) = - 0.8782768112522820;
x(8) = - 0.8391169718222188;
x(9) = - 0.7950414288375512;
x(10) = - 0.7463319064601508;
x(11) = - 0.6932376563347514;
x(12) = - 0.6360536807265150;
x(13) = - 0.5751404468197103;
x(14) = - 0.5108670019508271;
x(15) = - 0.4435931752387251;
x(16) = - 0.3737060887154196;
x(17) = - 0.3016278681149130;
x(18) = - 0.2277858511416451;
x(19) = - 0.1526054652409227;
x(20) = - 0.7652652113349733E-01;
x(21) = 0.0;
x(22) = 0.7652652113349733E-01;
x(23) = 0.1526054652409227;
x(24) = 0.2277858511416451;
x(25) = 0.3016278681149130;
x(26) = 0.3737060887154196;
x(27) = 0.4435931752387251;
x(28) = 0.5108670019508271;
x(29) = 0.5751404468197103;
x(30) = 0.6360536807265150;
x(31) = 0.6932376563347514;
x(32) = 0.7463319064601508;
x(33) = 0.7950414288375512;
x(34) = 0.8391169718222188;
x(35) = 0.8782768112522820;
x(36) = 0.9122344282513259;
x(37) = 0.9408226338317548;
x(38) = 0.9639719272779138;
x(39) = 0.9815078774502503;
x(40) = 0.9931285991850949;
x(41) = 0.9988590315882777;
332

w(1) = 0.3073583718520532E-02;
w(2) = 0.8600269855642942E-02;
w(3) = 0.1462616925697125E-01;
w(4) = 0.2038837346126652E-01;
w(5) = 0.2588213360495116E-01;
w(6) = 0.3128730677703280E-01;
w(7) = 0.3660016975820080E-01;
w(8) = 0.4166887332797369E-01;
w(9) = 0.4643482186749767E-01;
w(10) = 0.5094457392372869E-01;
w(11) = 0.5519510534828599E-01;
w(12) = 0.5911140088063957E-01;
w(13) = 0.6265323755478117E-01;
w(14) = 0.6583459713361842E-01;
w(15) = 0.6864867292852162E-01;
w(16) = 0.7105442355344407E-01;
w(17) = 0.7303069033278667E-01;
w(18) = 0.7458287540049919E-01;
w(19) = 0.7570449768455667E-01;
w(20) = 0.7637786767208074E-01;
w(21) = 0.7660071191799966E-01;
w(22) = 0.7637786767208074E-01;
w(23) = 0.7570449768455667E-01;
w(24) = 0.7458287540049919E-01;
w(25) = 0.7303069033278667E-01;
w(26) = 0.7105442355344407E-01;
w(27) = 0.6864867292852162E-01;
w(28) = 0.6583459713361842E-01;
w(29) = 0.6265323755478117E-01;
w(30) = 0.5911140088063957E-01;
w(31) = 0.5519510534828599E-01;
w(32) = 0.5094457392372869E-01;
w(33) = 0.4643482186749767E-01;
w(34) = 0.4166887332797369E-01;
w(35) = 0.3660016975820080E-01;
w(36) = 0.3128730677703280E-01;
w(37) = 0.2588213360495116E-01;
w(38) = 0.2038837346126652E-01;
w(39) = 0.1462616925697125E-01;
w(40) = 0.8600269855642942E-02;
w(41) = 0.3073583718520532E-02;
333

Ta dng hm intgkronrod() chuyn on ly tch phn t [-1 1] sang on [a, b]:


function J = intgkronrod(f, a, b)
[t, w] = kronrod;
x = ((b - a)*t + a + b)/2;)
fx = feval(f, x);
J = w*fx'*(b - a)/2;
tnh tch phn ta dng chng trnh ctgausskronrod.m:
clc, clear all
% tinh tich phan ham f(x) tren doan [a, b]
f = @f2;
a = 0;
b = 1;
J = intgkronrod(f, a, b)
16. TCH PHN GAUSS - JACOBI
Tch phn Gauss Jacobi, cn gi l tch phn Mehler, dng tnh tch phn
dng:
Ta xt tch phn:
b

J = (1 x) (1 + x) f(x)dx
a

Theo cng thc cu phng Gaus - Jacobi ta c:


b

i =1

J = f(x)dx = w i f(x i )
Trong xi ln nghim ca a thc Jacobi. Cc cng thc tnh a thc Jacobi l:
P0( , ) (x) = 1
P1( , ) (x) = 0.5 [ 2( + 1) + ( + + 2)(x 1)]

(b 2n + b 3n x)Pn( 1, ) (x) b4n Pn( 2,) (x)


P (x) =
b1n
Vi: b1n = 2i(i + + )(2i + + -2)
b2n = (2i + + -1)(2 - 2)
b3n = (2i + + - 2)(2i + + - 1)(2i + + )
b4n = 2(i + - 1)(i + - 1)(2i + + )
Cc trng s wi c xc nh bng:
(i + + 1)(i + + 1)
2 2i+++1 n!
wi =
2
(i + + + 1)
(1 xi2 ) [ Vn (xi )]
vi:
( , )
n

334

2 n n!
( 1)n
Ta xy dng hm gaussjacobi() tm xi v wi:
function [x, w] = gaussjacobi(n, alfa, beta)
%tinh cac trong so va hoanh do trong tich phan Gauss-Jacobi
p = [0.5*(alfa + beta + 2) 0.5*(alfa - beta)];
a = 1;
b = p;
for i = 2:n+1
b1 = 2*i*(i + alfa + beta)*(2*i + alfa + beta -2);
b2 = (2*i + alfa + beta -1)*(alfa^2 - beta^2)/b1;
b3 = ((2*i + alfa + beta -2)*(2*i + alfa + beta -1 )*(2*i + alfa + beta))/b1;
b4= (2*(i + alfa -1)*(i + beta - 1)*(2*i + alfa + beta))/b1;
s = [b3 b2];
if i == n+1
pn1 = conv(s, b) - [0 0 b4*a];
break;
else
p = conv(s, b) - [0 0 b4*a];
end
a = b;
b = p;
end
x = roots(p);
w = zeros(n, 1);
dv = polyder(p);
if mod(n, 2) == 1
sign = -1;
else
sign = 1;
end
dv = dv*(2^n)*factorial(n)/sign;
pn1 = -pn1*(2^(n+1))*factorial(n+1)/sign;
for i = 1:n
num = (2*n + alfa + beta +...
Vn = Pn( , ) (x)

2)*gamma(n+alfa+1)*gamma(n+beta+1)*(2^(2*n+alfa+beta+1))*factorial(n
);
den = (n + alfa + beta + 1)*gamma(n+alfa+beta+1)*polyval(dv,...
x(i))*polyval(pn1, x(i));
w(i) = num/den;
end
335

Tip theo ta xy dng hm intgaussjacobi() tnh tch phn:


function J = intgaussjacobi(f, n, alf, bta)
[t, w] = gaussjacobi(n, alf, bta);
fx = feval(f, t);
J = w'*fx;
tnh tch phn ta dng chng trnh ctgaussjacobi.m:
clear al, clc
f = inline('exp(x).*sin(x)','x');
n = 6;%n <= 40
alfa = 1;
beta = 0;
J = intgaussjacobi(f, n, alfa, beta)
17. TCH PHN RADAU
Cu phng Radau dng tnh tch phn:
1

J = f(x)dx

(1)

Theo cng thc cu phng Radau ta c:


1

i=2

J = f(x)dx = w1f( 1) + w i f(xi )

(2)

im (-1) l mt mt nt trong s cc nt ca cu phng. Cc honh cn li l


nghim ca a thc:
Pn 1 (x) Pn (x)
(3)
1+ x
Trong P(x) l a thc Legendre. Cc trng s tng ng c tnh theo:
1 xi
(4)
wi = 2
2
n [ Pn 1 (xi )]
v im cui c:
2
w1 = 2
n
Ta xy dng hm radau() tnh cc honh xi v trng s wi:
function [x , w] = radau(n)
%Tinh cac hoanh do va trong so trong cau phuong Radau
tol = 1e-8;
%danh gia ban dau cac hoanh do la ca nut Chebyshev-Gauss-Radau
x(1:n,1) = - cos(2.0*pi*(0:n-1)/(2*n-1))';
336

p = zeros ( n, n+1 );
xold(1:n,1) = 2.0;
while (tol < max(abs(x(1:n,1)-xold(1:n,1))))
xold = x;
p(1,1:n+1) = (-1.0).^(0:n);
p(2:n,1) = 1.0;
p(2:n,2) = x(2:n,1);
for j = 2:n
p(2:n,j+1) = ((2*j - 1)*x(2:n,1).*p(2:n,j)+ ( -j+1)*p(2:n,j-1))/j;
end
x(2:n,1) = xold(2:n,1) - ((1.0 - xold(2:n,1))/n)...
.*(p(2:n,n)+p(2:n,n+1))./(p(2:n,n) - p(2:n,n+1));
end
w = zeros(n,1);
w(1) = 2/n^2;
Tip theo ta xy dng hm intradau(), tnh tch phn. Trong hm ta i cn ly
tch phn trong khong [-1, 1] thnh tch phn trong khong:
function J = intradau(f, n, a, b)
[t, w] = radau(n);
x = ((b - a)*t + a + b)/2;
fx = feval(f, x);
J = w'*fx*(b - a)/2;
tnh tch phn ta dng chng trnh ctradau.m:
clear al, clc
f = inline('x.*sin(x)');
n = 6;%n <= 40
a = 1;
b = 3;
J = intradau(f, n, a, b)
18. TCH PHN CHEBYSHEV - RADAU
Cu phng Chebyshev Radau dng tnh tch phn:
1

J = f(x)dx

(1)

Theo cng thc cu phng Chebyshev - Radau ta c:


1

i=2

J = f(x)dx = w i [ f(xi ) f( xi )]

(2)
337

Cc honh xi v trng s tng ng wi cho trong bng:


xi
wi

0.3549416
0.1223363

0.6433097
0.1223363

0.7783202
0.1223363

0.9481574
0.1223363

Ta xy dng hm chebradau() cha cc gi tr x v w:


function [x, w] = chebradau
x(1) = 0.3549416;
x(2) = 0.6433097;
x(3) = 0.7783202;
x(4) = 0.9481574;
w(1) = 0.1223363;
w(2) = 0.1223363;
w(3) = 0.1223363;
w(4) = 0.1223363;
v hm intchebradau() tnh tch phn:
function J = intchebradau(f, a, b)
[t, w] = chebradau;
fx1 = feval(f, t);
fx2 = feval(f, -t);
J = (w*fx1' - w*fx2');
tnh tch phn ca mt hm c th ta dng chng trnh ctchebradau.m:
clear al, clc
f = inline('exp(x).*sin(x)','x');
J = intchebradau(f)
19. TCH PHN GAUSS RADAU
Cng thc cu phng Gauss - Radau c dng:
1

n 1

i=2

f(x)dx = w1f(1) + w 2f(1) + wif(xi )

Ngoi hai im nt x = 1, cc im nt khc l nghim ca a thc Pn(x) + Pn+1(x) ,


vi P(x) l a thc Legendre. Cc trng s c xc nh bng:
2
w1 =
(n + 1)2

338

1 xi
2
(n + 1) [ Pn +1 (xi )]
Ta xy dng hm gaussradau() tnh cc honh v trng s ca cu phng:
wi =

function [x, w] = gaussradau(N)


% tinh cac nut va trong so cua cau phuong Gauss - Radau
N1 = N + 1;
% dung cac nut Chebyshev-Gauss-Radau lam xap xi dau tien
x = -cos(2*pi*(0:N)/(2*N+1))';
P = zeros(N1, N1+1);
xold = 2;
free = 2:N1;
while max(abs(x-xold)) > eps
xold = x;
P(1, :) = (-1).^(0:N1);
P(free, 1) =1;
P(free, 2) = x(free);
for k = 2:N1
P(free, k+1) = ( (2*k - 1)*x(free).*P(free, k) - (k - 1)*P(free, k-1) )/k;
end
x(free) = xold(free) - ((1-xold(free))/N1).*(P(free, N1) + P(free,
N1+1))..../(P(free, N1) - P(free, N1+1));
end P = P(1:N1, 1:N1);
w = zeros(N1, 1);
w(1) =2/N1^2;
w(free) = (1-x(free))./(N1*P(free, N1)).^2;
Ta dng hm intgaussradau() tnh tch phn ca hm f(x) trn on [a, b]:
function J = intgaussradau(f, n, a, b)
[t, w] = gaussradau(n);
x = ((b - a)*t + a + b)/2;
fx = feval(f, x);
J = w'*fx*(b - a)/2;
tnh tch phn ca hm ta dng chng trnh ctgaussradau.m:
clear all, clc
f = inline('exp(x).*sin(x)','x');
n = 6;
a = 1;
b = 3;
339

J = intgaussradau(f, n, a, b)
20. A THC NI SUY V TCH PHN S
Khi hm c cho di dng bng s, tnh tnh phn ca hm ta thc hin
cc bc sau:
- Tm a thc ni suy, c th l a thc Lagrange, a thc Newton...
- Tm tch phn ca a thc ni suy
Sau y chng ta s xy dng chng trnh ctinterp.m tnh tch phn dng a thc
ni suy Lagrange:
clear all, clc
x = [1.0000 1.2000 1.4000 1.6000 1.8000 2.0000];
y = [1.9221 1.9756 1.6517 0.8501 -0.4984 -2.4199];
l = lagrange(x, y);
n = length(l);
p = conv(l, [1 0]);
n = length(p);
for i = 1:n-1
q(i) = p(i)/(n-i);
end
q(n) = p(n);
tp = polyval(q, x(length(x))) - polyval(q, x(1));
21. TCH PHN KP
1. Khi nim chung: Ta kho st tch phn ca hm z = f(x, y) trn min
R = {(x,y|a x b,c(x) y d(x)} nh hnh v. Ta cn tnh tch phn:
b

J = f(x, y)dxdy =
R

d(x)

f(x,y)dy dx
c(x)

d(x)
hx0,y2
hx0,y1

hx1,y2

c(x)

hx1,y1

a
x0 hx1 x1 hx2 x2

Cng thc gn ng ca tch phn l:

b
hxm xm

340

i =1

j=1

J [a,b,c(x),d(x)] = w i v jf(x i ,y i ,j )
vi cc trng s wi, vj tu thuc vo ch tnh tch phn hm mt bin.
Ta xy dng hm int2simpson() tnh tch phn kp bng cng thc Simpson.
function J = int2simpson(f, a, b, c, d, m, n)
% tich phan kep cua ham f(x,yen mien R = {(x,y)|a <= x <= b, c(x) <= y <=
d(x)}
% dung quy tac Simpson
if ceil(m) ~= floor(m) %be rong co dinh cua cac doan tren x
hx = m;
m = ceil((b - a)/hx);
end
if mod(m, 2) ~= 0
m = m + 1;
end
hx = (b - a)/m;
i = 1:m+1;
x = a + (i - 1)*hx;
if isnumeric(c)
cx(i) = c; %neu c la hang so
else
cx(i) = feval(c,x(i)); %khi c la ham cua c x
end
if isnumeric(d)
dx(i) = d; %neu d la hang so
else
dx(i) = feval(d,x(i)); %khi d la ham cua x
end
if ceil(n) ~= floor(n) %be rong co dinh theo y
hy = n;
nx(i) = ceil((dx(i)- cx(i))/hy);
ind = find(mod(nx(i),2) ~= 0);
nx(ind) = nx(ind) + 1;
else %so khoang co dinh
if mod(n, 2) ~= 0
n = n + 1;
end
nx(i) = n;
end
for i = 1:m + 1
sx(i) = simpsonfxy(f,x(i),cx(i),dx(i),nx(i));
341

end
kodd = 2:2:m;
keven = 3:2:m - 1; %the set of odd/even indices
J = hx/3*(sx(1) + sx(m + 1) + 4*sum(sx(kodd)) + 2*sum(sx(keven)));
function Jf = simpsonfxy(f, x, c, d, n)
%tich phan mot bien cua f(x,y) voi Ry = {c <= y <= d}
if nargin < 5
n = 100;
end
if abs(d - c)< eps | n <= 0
Jf = 0;
return;
end
if mod(n, 2) ~= 0
n = n + 1;
end
h = (d - c)/n;
y = c + [0:n]*h;
fxy = feval(f,x,y);
fxy(find(fxy == inf)) = realmax;
fxy(find(fxy == -inf)) = -realmax;
kodd = 2:2:n;
keven = 3:2:n - 1;
Jf = h/3*(fxy(1) + fxy(n + 1) + 4*sum(fxy(kodd)) + 2*sum(fxy(keven)));
tnh th tch ca hnh cu ta dng chng trnh ctint2simp.m:
clear all, clc
%Tinh the tich hinh cau
x = [-1:0.05:1];
y = [0:0.05:1];
[X,Y] = meshgrid(x,y);
f = inline('sqrt(max(1 - x.*x - y.*y,0))','x','y');
Z = f(X,Y);
mesh(x,y,Z);
a = -1;
b = 1;
c = 0;
d = inline('sqrt(max(1 - x.*x,0))','x');
Vs1 = int2simpson(f, a, b, c, d, 100, 100)% so diem cho truoc
error1 = Vs1 - pi/3
Vs2 = int2simpson(f, a, b, c, d, 0.01, 0.01) %be rong cac doan cho truoc
342

error2 = Vs2 - pi/3

343

CHNG 7: CC PHNG TRNH VI PHN THNG


1. BI TON CAUCHY
Mt phng trnh vi phn cp 1 c th vit di dng gii c y = f(x,y) m
ta c th tm c hm y t o hm ca n. Tn ti v s nghim tho mn phng
trnh trn. Mi nghim ph thuc vo mt hng s tu . Khi cho trc gi tr ban u
ca y l yo ti gi tr u xo ta nhn c mt nghim ring ca phng trnh. Bi ton
Cauchy (hay bi ton c iu kin u) tm li nh sau: cho x sao cho b x a, tm
y(x) tho mn iu kin:
y ( x) = f( x , y)
(1)

y
(
a
)
=

Ngi ta chng minh rng bi ton ny c mt nghim duy nht nu f tho mn


iu kin Lipschitz:
f( x , y 1 ) f( x , y 2 ) L y 1 y 2
vi L l mt hng s dng.
Ngi ta cng chng minh rng nu fy ( o hm ca f theo y ) l lin tc v b
chn th f tho mn iu kin Lipschitz.
Mt cch tng qut hn, ngi ta nh ngha h phng trnh bc 1:
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 )
Ta phi tm nghim y1, y2,..., yn sao cho:
Y( x) = f( x , X )

Y(a ) =
vi:
y1
f1
y1



y2
f2
y2
Y = ..
Y = ..
F = ..



..
..
..


y
n
fn
yn
Nu phng trnh vi phn c bc cao hn (n), nghim s ph thuc vo n hng
s tu . nhn c mt nghim ring, ta phi cho n iu kin u. Bi ton s c
gi tr u nu vi gi tr xo cho ta cho y(xo), y(xo), y(xo),....
Mt phng trnh vi phn bc n c th a v thnh mt h phng trnh vi
phn cp 1. V d nu ta c phng trnh vi phn cp 2:
347

y = f( x , y , y)

y(a ) = , y(a ) =
Khi t u = y v v = y ta nhn c h phng trnh vi phn cp 1:
u = v

v = g ( x , u , v )
vi iu kin u: u(a) = v v(a) =
Cc phng php gii phng trnh vi phn c trnh by trong chng ny l
cc phng php ri rc: on [a, b] c chia thnh n on nh bng nhau c gi
l cc "bc" tch phn h = ( b - a) / n.
2. PHNG PHP EULER
Gi s ta c phng trnh vi phn:
y ( x) = f( x , y)
(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
Theo cng thc khai trin Taylor mt hm ln cn xi ta c:
( 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+1 - xi) kh b th ta c th b qua cc s hng (xi+1 - xi)2 v cc s hng
bc cao
y
y(xi+1) = y(xi) + (xi+1- xi)y(xi)
Trng hp cc mc cch u:
yi+1
(xi-1 - xi) = h = (x - xo)/ n
th ta nhn c cng thc Euler n gin:
yi
yi+1 = yi + hf(xi, yi)
(2)
V mt hnh hc ta thy (1) cho kt qu cng chnh
x
xc nu bc h cng nh.
xi xi+1
Ta xy dng hm euler() thc hin thut ton trn:
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;
348

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);
gii phng trnh cho bi hm f1(x, y) ta dng chng trnh cteuler.m:
clear all, clc
a = 0;
b = 1;
y = @f1;
ya = [0 1 1]';
m = 200;
[x, y] = euler(y, a, b, ya, m)
plot(x, y);
3. PHNG PHP HEUN
Phng php Heun cn c gi l phng php hnh thang hay phng php.
Cho phng trnh:
y = f(t, y)
Ta c:
t k +1

yt

= y(t k+1 ) y(t k ) =

t k +1

f(t,y)dt

tk

hay:
349

y(t k+1 ) = y(t k ) +

t k +1

f(t,y)dt

vi y(t0) = y0

tk

Nu ta s dng quy tc tch phn hnh thang th ta c:


h
y k+1 = y k + f(t k ,y k ) f(t k +1 , y k +1 )

2
V phi (RHS) ca phng trnh ny c yk+1 l gi tr cha bit ti thi im tk.
gii quyt vn ny ta thay yk+1 RHS bng cng thc xp x:
y k+1 y k + hf(t k ,y k )
Nh vy:
h
y k +1 = y k + f(t k ,y k ) + f [(t k +1 , y k + hf(t k ,y k )]
2
y chnh l cng thc Heun.
Ta xy dng hm heun() thc hin thut ton trn:

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
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.';
350

end
gii phng trnh ta dng chng trnh 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. PHNG PHP RUNGE - KUTTA
Mc d phng php Heun tt hn phng php Euler nhng n vn cha
chnh xc i vi cc bi ton thc t.
Xt bi ton Cauchy (1). Gi s ta tm c gi tr gn ng yi ca y(xi) v
mun tnh yi+1 ca y(xi+1). Trc ht ta vit cng thc Taylor:
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!
vi c (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
Ta vit li (11) di dng:
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!
Ta ko di khai trin Taylor kt qu chnh xc hn. tnh yi, yi v.v. ta c th
dng phng php Runge-Kutta bng cch t:
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
.......

v ta cn xc nh cc h s a, b,..; , , ,...; r1, r2,.. sao cho v phi ca (13) khc vi


v phi ca (12) mt v cng b cp cao nht c th c i vi h.
Khi dng cng thc Runge-Kutta bc hai ta c:
351

v
Ta c:

k (1i ) = hf( x i , y i )
(i)
k 2 = hf( x i + ah , y i + k (1i ) )
y i + 1 y i = r1 k (1i ) + r2 k (2i )

(15)
(16)

y(x) = f[x,y(x)]
y( x) = fx [x , y( x)] + fy [x , y( x)]
................
Do v phi ca (12) l:
h2
hf( x i , y i ) +
fx ( x i , y i ) + fy ( x i , y i ) y( x) +
(17)
2
Mt khc theo (15) v theo cng thc Taylor ta c:
k (1i ) = hf( x i , y i ) = hyi
k (2i ) = h[f( x i , y i ) + ahfx ( x i , y i ) + k (1i ) fy ( x i , y i ) + ]
Do v phi ca (16) l:
h(r1 + r2 )f( x i , y i ) + h 2 [ar2 fx ( x i , y i ) + r2 yi fy ( x i , y i )] +
(18)
By gi cho (17) v (18) khc nhau mt v cng b cp O(h3) ta tm c cc h s
cha bit khi cn bng cc s hng cha h v cha h2:
r1 + r2 = 1
a.r1 = 1/ 2
.r2 = 1
Nh vy: = a, r1 = (2a - 1)/ 2a, r2 = 1/ 2a vi a c chn bt k.
Nu a = 1 / 2 th r1 = 0 v r2 = 1. Lc ny ta nhn c cng thc Euler. Nu a=1 th r1
= 1 / 2 v r2 = 1/2. Lc ny ta nhn c cng thc Euler ci tin.
Mt cch tng t chng ta nhn c cng thc Runge - Kutta bc 4. Cng
thc ny hay c dng trong tnh ton thc t :
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
Ta xy dng hm rungekutta() thc hin cng thc Runge - Kutta bc 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
352

y0 = 0;
end
y(1,:) = y0(:)'; %
h = (b - a)/n;
x = a + [0:n]'*h;
if nargin(f) >1
for k = 1:n
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
gii phng trnh ta dng chng trnh 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);
353

5. PHNG PHP RUNGE - KUTTA THCH NGHI


Vn xc nh bc tnh h l rt quan trng. Nu mun c chnh xc cao
th bc tnh h phi nh. Tuy nhin khi h nh, ta li tn thi gian tnh 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 gn nh khng i th ta phi dng h
nh on u v h ln on sau. y l ch m cc phng php thch nghi chim
u th. Chng nh gi sai s lm trn ti mi ln tch phn v t ng hiu chnh
ln ca h sai s nm trong gii hn cho php.
Phng php Runge - Kutta thch nghi cn gi l phng php tch phn kt
hp. Cc cng thc ny i thnh cp: mt cng thc tch phn bc m v mt cng
thc tch phn bc m+1. tng l dng hai cng thc ny ci thin nghim trong
on [x, x+h]. Gi kt qu l ym(x+h) v ym+1(x+h) ta c sai s i vi cng thc bc
m l:
E(h) = ym+1(x+h) - ym(x+h)
(1)
Chng ta dng cng thc kt hp bc 4 v 5 m o hm c tnh bng cng thc
Fehlenberg. Do vy cng thc Runge - Kutta thch nghi cn c gi l cng thc
Runge - Kutta - Fehlenberg:
K 1 = hF(x,y)
i 1

K i = hF x + A i h, y + Bi ,jK j
j= 0

i = 1, 2,..,6

(2)

y 5 (x + h) = y(x) + CiK i (cng thc bc 5)

(3)

y 4 (x + h) = y(x) + Di K i (cng thc bc 4)

(4)

i =1
6

i =1

Cc h s xut hin trong cc cng thc ny khng duy nht. Bng sau cho cc h s
tnh theo Cash v Karp:
i

Ai

1
5
3
10
3
5

1
5
3
40
3
10
11

54

9
40
9

10
5
2

6
5
70

27

2
3
4
5

Bi,j

Ci
37
378

Di
2825
27648

250
621
125
594

35
27

18575
48384
13525
55296
277
14336

354

7
8

1631
55296

175
512

575
13824

44275
110592

253
4096

512
1771

1
4

Sai s s l:
E(h) = y5(x+h) - y4(x+h) =

(C
i =1

Di )K i

(5)

Ch l E(h) l mt vec t, thnh phn Ei(h) biu din sai s ca bin yi. Sai s e(h)
ta cn kim sot l:
e(h) = max E(h)
(6)
i

Ta cng c th kim sot sai s trung bnh bnh phng:

1
e(h) =
n

Ei2 (h)

(7)

i =1

vi n l s phng trnh bc 1.
Vic kim sot sai s t c bng cch thay i h sao cho sai s ti mi bc tnh
iph c sai s mong mun . Sai s khi thc hin thut ton Runge - Kutta bc bn l
O(h5) nn:
5
e(h1 ) h1
(8)

e(h 2 ) h 2
Gi s l ta tnh nghim ti bc tnh vi h1 v c sai s l e(h1). Ti bc tnh vi
h2 ta mun c e(h2) = th:
1/ 5

h 2 = h1
(9)

e(h
)

1
d phng, ta ly:
1/ 5

h 2 = 0.9h1
(10)

e(h
)

1
Ta xy dng hm adaptrk() thc hin thut ton ny:
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
h = (x1 - xo)/n;
if size(y, 1) > 1 ;
y = y'; % y phai la vec to hang
end
eTol = 1.0e-9;
355

n = length(y);
A = [0 1/5 3/10 3/5 1 7/8];
B=[00000
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
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,:);
356

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;
end
tm nghim ca phng trnh vi phn ta dng chng trnh 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. PHNG PHP BURLIRSCH - STR
1. Phng php im gia: Cng thc im gia ca tch phn s ca y = f(x, y)
l:
357

y(x + h) = y(x h) + 2hf [ x,y(x)]


y l cng thc bc 2, ging nh cng thc Euler. Ta
xem xt phng php ny v y l c s ca phng
php Burlisch - Str dng tm nghim c chnh xc
cao. Hnh bn minh ho cng thc im gia i vi
phng trnh n dng y = f(x,y) . S thay i y trn
hai pha c xc nh bng:
y(x + h) y(x h) =

(1)
y(x)

x+ h

y(x)dx

xh

x+h

xh

v bng din tch bn di ng cong. Xp x im gia ca din tch ny l din


tch ca hnh ch nht c gch cho.
By gi ta xt u im ca phng php im gia khi tm nghim ca
phng trnh y = f(x,y) t x = x0 n x = x0 + H vi cng thc im gia.
Ta chia on tch phn thnh n on nh c di mi on l h = H / n nh hnh
bn v tnh:
y1 = y 0 + hf0
y 2 = y 0 + 2hf1
H
y 3 = y1 + 2hf2
(2)
h
#
x2
x1
x3
xo
xn1 xn
y n = y n2 + 2hfn 1
Ta dng khi nim yi = y(xi) v fi = f(xi, yi). Phng trnh u tin trong (2) dng
cng thc Euler thay cho phng php im gia. Cc phng trnh khc l cc
cng thc im gia. Kt qu cui cng l trung bnh cng ca yn trong (2) v ta c:
y(x o + H) = 0.5 [ y n + (y n 1 + hfn )]
(3)
2. Ngoi suy Richardson: Ta c th thy sai s trong (3) l:
E = c 1h 2 + c 2 h 4 + c 3 h 6 + "
gim bt sai s ta dng phng php ngoi suy Richardson. C th ta tnh y(xo+H)
vi mt gi tr no ca h v ri lp li qu trnh tnh vi h/2. Gi kt qu l g(h) v
g(h1) ta c ngoi suy Richardson:
4g(h1 ) g(h)
y(x o + H) =
3
Ta xy dng hm midpoint() kt hp phng php im gia v phng php
ngoi suy Richardson. u tin phng php im gia c dng cho 2 tch phn.
S bc tnh c tng gp i trong cc ln lp sau, mi ln lp u dng ngoi suy
Richardson. Chng trnh dng khi sai s nh hn sai s cho php.
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 ;
358

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);
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
359

y2 = y0 + 2.0*h*feval(f, x);
end
y0 = y1;
y1 = y2;
end
if nargin(f) > 1
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. Thut ton Burlisch - Str: Phng php im gia c nhc im l nghim
nm ti im gia ca khong tm nghim khng c tinh chnh bng phng php
ngoi suy Richardson. Khuyt im ny c khc phc trong phng php Burlisch
- Str. tng ca phng php ny l p dng phng php im gia trn tng
on. Ta xy dng hm burlischstoer() thc hin thut ton ny:
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
k = k + 1;
360

H = min(H, x1 - x);
y = midpoint(f, x, x + H, y, tol);
x = x + H;
xout(k) = x;
yout(k, :) = y;
end
gii phng trnh ta dng chng trnh 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. PHNG PHP CHUI TAYLOR
Phng php chui Taylor n gin v tng v c chnh xc cao. C s
ca phng php ny l ct chui Taylor ca y theo x:
1
1
1 (m)
y(x + h) y(x) + y(x)h + y(x)h 2 + y(x)h 3 + " +
y (x)h m (1)
2!
3!
m!
Do phng trnh (1) d on trc y ti (x + h) t cc thng tin c ti x, n cng l
cng thc tch phn. S hng cui trong (1) l bc ca tch phn. Nh vy (1) l tch
phn bc m. Sai s l:
1
E=
y(m +1) ()h m +1
x<<x+h
(m + 1)!
Dng xp x o hm:
y(m) (x + h) y(m) (x)
(m +1)
y
( )
h
ta c:
h m (m)
E=
y (x + h) y(m) (x)
(2)

(m + 1)!
Ta xy dng hm taylor() gii bi ton trn:
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;
361

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 dng chng trnh cttaylor.m gii phng trnh:
clear all, clc
y = @f5;
a = 0;
b = 2;
ya = [0 1];
h = 0.2;
[x, y] = taylor(y, a, ya, b, h)
plot(x, y);
8. PHNG PHP D ON - HIU CHNH
1. Phng php Adam - Bashfort - Moulton: Nm 1855, nh ton hc ngi Anh
Adams xut mt phng php a bc gii bi ton Cauchy theo yu cu ca ng
Bashforth, mt chuyn gia k thut pho binh Anh. Kt qu ca Adams sau ny b
qun lng. Mi n u th k 20, nh ton hc Nauy khi tnh qu o ca ht in
tch ri xa mt tri vi vn tc ln pht minh li cng thc Adams. Sau ny vin s
Krylov hon thin phng php Adams. Phng php Adams - Bashfort - Moulton
(ABM) gm hai bc. Bc du tin l xp x f(x, y) bng mt a thc(v d a thc
Lagrange) bc 4 qua 4 im:
{( t k3 ,fk3 ) , ( t k2 ,fk2 ) , ( t k1 ,fk1 ) , ( t k ,fk )}
362

v thay th a thc ny vo phng trnh vi phn c c gi tr d bo yk+1:


h
h
9fk3 + 37fk2 59fk1 + 55fk
(1a)
pk +1 = y k + l 3 (t)dt = y k +
24
0
Bc th hai l lp li cng vic vi 4 im c cp nht:
{( t k2 ,fk2 ) , ( t k1 ,fk1 ) , ( t k ,fk ) , ( t k+1 ,fk+1 )}
v nhn gi tr hiu chnh:
fk+1 = f(t k+1 ,pk+1 )

h
fk2 5fk 1 + 19fk + 9fk+1
24
0
Ta vit khai trin Taylor ca yk+1 ln cn tk v ca yk ln cn tk+1:
h2
h3
y k+1 = y k + hfk + fk + fk + "
2
3!
2
h
h3
y k = y k+1 hfk+1 + fk+1 fk+1 + "
2
3!
2
h
h3

y k+1 = y k + hfk+1 fk+1 + fk+1 + "


2
3!
v thay th cc o hm bc 1, 2, 3 bng cc xp x
3
11
1

+
f
3f
fk
2 fk 3 +
k
2
k
1

h 3
1
2
6 + h 3f (4) + "
y k+1 = y k + hfk +
k

2
h
4

3
h f + 4fk2 5fk1 + 2fk 11 2 (4)
+ k3
+ h fk + "
2
3!
h
12

4
h fk3 + 3fk2 3fk1 + fk 3 (4)
h 5 (4)

+
+ hfk + " +
fk + "
4!
h3
2
120
h
251 5 (4)
h fk + "
= yk +
9fk3 + 37fk2 59fk1 + 55fk +
24
720
251 5 (4)
p k +1 +
h fk
720
3
11
1

+
f
3f
fk+1
2 fk 2 +
k
1
k

h 3
1
2
6
+ h 3fk(4)
y k+1 = y k + hfk+1
+1 + "
2
h
4

3
h f + 4fk1 5fk + 2fk+1 11 2 (4)
+ k2
+ h fk+1 + "
2
3!
h
12

4
5
h f + 3fk1 3fk + fk+1 3 (4)
h (4)
"
k2
+
+
+
hf
fk+1 + "

k +1
4!
h3
2
120
c k = y k + l3 (t)dt = y k +

(1b)

(2a)

(2b)

(3a)

363

h
19 5 (4)
fk2 5fk1 + 19fk + 9fk+1
h fk+1 + "
24
720
19 5 (4)
h fk+1
c k +1
720
(4)
T cc phng trnh ny v gi s rng fk(4)
+1 fk K ta c th vit cc
on/hiu chnh:
251 5 (4) 251 5
EP ,k+1 = y k+1 pk+1
h fk
Kh
720
720
19 5 (4)
19
EC,k+1 = y k+1 c k+1
h fk+1
Kh 5
720
720
Do K cha bit nn ta phi tm n. Ta c;
270
270
270
EP ,k+1 EC,k+1 = c k+1 pk+1
Kh 5
EP ,k+1
EC,k+1
720
251
19
Do vy ta c cc cng thc dng nh gi sai s:
251
EP ,k+1 = y k+1 pk+1
( c k +1 pk +1 )
720
19
EC,k+1 = y k+1 c k+1
( c k +1 p k +1 )
270
Tm li, thut ton Adams - Bashforth - Moulton gm:
h
D on:
9fk3 + 37fk2 59fk1 + 55fk
pk +1 = y k +
24
251
Bin i:
m k +1 = p k + 1 +
( c k pk )
720
h
Hiu chnh: c k = y k + fk2 5fk1 + 19fk + 9f ( t k+1 ,m k+1 )
(7c)

24
19
y k + 1 = c k +1
( c k +1 p k +1 )
270
Ta xy dng hm odeabm() thc hin thut ton ny:
= yk +

(3b)
sai s d
(4a)
(4b)

(5)

(6a)
(6b)

(7a)
(7b)

(7d)

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
364

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
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
gii phng trnh ta dng chng trnh 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)
365

2. Phng php Hamming: Thut ton Hamming cng nh thut ton Adams Bashforth - Moulton nhng cc cng thc d bo/hiu chnh l:
4h
D on:
(8a)
pk +1 = y k 3 +
2fk2 fk1 + 2fk
3
112
Bin i:
(8b)
m k +1 = p k + 1 +
( c k pk )
121
Hiu chnh: c k = 0.125 9y k y k2 + 3h fk 1 + 2fk + f ( t k+1 ,m k+1 ) (8c)

9
( c k +1 pk +1 )
121
Ta xy dng hm hamming() thc hin thut ton ny:
y k + 1 = c k +1

(dd)

366

function [t, y] = hamming(f, to, tf, y0, n)


% 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
F = [F(2:3, :); feval(f, t(k + 1))'];
end
end
gii phng trnh ta dng chng trnh cthamming.m:
369

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. PHNG PHP MILNE
Qu trnh tnh ton nghim c thc hin qua ba bc:
- Tnh gn ng ym+1 theo cng thc (d on):
4h
(1)
y(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 va tnh c tnh gm ng th 2 ca ym+1(hiu chnh)
h
(3)
y(2)
( ym1 + 4ym + ym+1 )
m +1 = y m 1 +
3
Ta xy dng hm milne() thc hin thut ton trn:
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
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)
370

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
gii phng trnh ta dng chng trnh 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. BI TON GI TR BIN
1. Khi nim chung: Ta xt bi ton tm nghim ca phng trnh:
y = f(x, y,y) y(a) = ,y(b) =
y l bi ton tm nghim ca phng trnh vi phn khi bit iu kin bin v c
gi l bi ton gi tr bin hai im. Trong bi ton gi tr u ta c th bt u tm
nghim im c cc gi tr u cho v tip tc cho cc thi im sau. K thut
ny khng p dng c cho bi ton gi tr bin v khng c iu kin u cc
bin c nghim duy nht. Mt cch khc phc kh khn ny l cho cc gi tr
cn thiu. Nghim tm c d nhin s khng tho mn iu kin cc bin. Tuy
nhin ta c th cn c vo thay i iu kin u trc khi tch phn li.
Phng php ny cng ging nh bn bia. Trc ht ta bn ri xem c trng ch hay
khng, hiu chnh v bn li. Do vy phng php ny gi l phng php bn.
Mt phng php khc gii bi ton gi tr bin l phng php sai phn
hu hn trong cc o hm c thay bng cc xp x bng sai phn hu hn ti cc
nt li cch u. Nh vy ta s nhn c h phng trnh i s i vi cc sai
phn.
C hai phng php ny c mt vn chung: chng lm tng s phng trnh
phi tuyn nu phng trnh vi phn l phi tuyn. Cc phng trnh ny c gii bng
371

phng php lp nn rt tn thi gian tnh ton. V vy vic gii bi ton bin phi
tuyn rt kh. Ngoi ra, i vi phng php lp, vic chn gi tr u rt quan trng.
N quyt nh tnh hi t ca phng php lp.
2. Phng php shooting: Ta xt bi ton bin l phng trnh vi phn cp 2 vi
iu kin u ti x = a v x = b. Ta xt phng trnh:
(1)
y = f(x, y,y) y(a) = ,y(b) =
Ta tm cch a bi ton v dng bi ton gi tr u:
(2)
y = f(x, y,y) y(a) = ,y(a) = u
Cha kho thnh cng l tm ra gi tr ng u. ta c th thc hin vic ny bng
phng php th v sai: cho mt gi tr u v gii bi ton gi tr u bng cch i t
a n b. Nu nghim ging vi iu kin bin m t y(b) = th ta c nghim ca
bi ton. Nu khng ta phi hiu chnh u v lm li. Tuy nhin lm nh vy cha hay.
Do nghim ca bi ton gi tr u ph thuc u nn gi tr bin tnh c y(b) l hm
ca u, ngha l:
y(b) = (u)
Do u l nghim ca phng trnh:
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 phng php
Newton - Raphson i hi tm o hm d/dt. Do vy cng ta s dng phng php
Brent. Tm li thut on gii bi ton gi tr bin gm cc bc:
- M t gi tr u1 v u2 vy nghim u ca (3)
- Dng phng php Brent tm nghim u ca (3). Ch l mi bc lp i hi
tnh (u) bng cch gii phng trnh vi phn nh l bi ton iu kin u.
- Khi c u, gii phng trnh vi phn ln na tm nghim
Ta xy dng hm bvp2shoot() gii phng trnh bc 2:
function [t, x] = bvp2shoot(f, t0, tf, x0, xf, n, tol, kmax)
%Giai phuong trinh: [x1, x2]' = f(t, x1, x2) voi x1(t0) = x0, x1(tf) = xf
if nargin < 8
kmax = 10;
end
if nargin < 7
tol = 1e-8;
end
if nargin < 6
n = 100;
end
dx0(1) = (xf - x0)/(tf - t0); % cho gia tri dau cua x'(t0)
y0 = [x0 dx0(1)]';
372

[t, x] = rungekutta(f, t0, tf , y0, n); % khoi gan bg RK4


e(1) = x(end,1) - xf;
dx0(2) = dx0(1) - 0.1*sign(e(1));
for k = 2: kmax-1
y1 = [x0 dx0(k)]';
[t, x] = rungekutta(f, t0, tf, y1, n);
%sai so giua gia tri cuoi va dich
e(k) = x(end, 1) - xf; % x(tf)- xf
ddx = dx0(k) - dx0(k - 1);
if abs(e(k))< tol | abs(ddx)< tol
break;
end
deddx = (e(k) - e(k - 1))/ddx;
dx0(k + 1) = dx0(k) - e(k)/deddx;
end
gii phng trnh:
y = 2y 2 + 4xyy vi iu kin bin: y(0) = 0.25, y(1) = 1/3
t: y = y1 , y = y 2 ta a phng trnh v h phng trnh vi phn cp 1:
y1 = y 2

y 2 = 2y1 + 4xy 2 y1
v biu din n bng hm f7():
function dx = f7(t, x) %Eq.(6.6.5)
dx(1) = x(2);
dx(2) = (2*x(1) + 4*t*x(2))*x(1);
gii phng trnh ta dng chng trnh ctbvp2shoot.m:
clear all, clc
t0 = 0;
tf = 1;
x0 = 1/4;
xf = 1/3; % thoi gian dau/cuoi va cac vi tri
n = 100;
tol = 1e-8;
kmax = 10;
y = @f7;
[t, x] = bvp2shoot(y, t0, tf, x0, xf, n, tol, kmax);
xo = 1./(4 - t.*t);
err = norm(x(:,1) - xo)/(n + 1)
373

plot(t,x(:, 1))
3. Phng php sai phn hu hn: Ta xt phng trnh:
y = f(x, y,y) y(a) = ,y(b) =
tng ca phng php ny l chia on [a, b] thnh n on nh c bc h v xp
x cc o hm bng cc sai phn:
y yi
y = i+1
2h
y i1 2y i + y i+1
y =
h2
Nh vy:
y 2y i + y i+1
y yi
y = i1
= f x i ,y i , i+1
i = 1, 2, 3,...
2
h
2h

Phng trnh bny sec a n h phng trnh i vi xi, yi. Ta xy dng hm


bvp2fdf():
function [t, x] = bvp2fdf(a1, a0, u, t0, tf, x0, xf, n)
% Giai pt : x" + a1*x + a0*x = u with x(t0) = x0, x(tf) = xf
% bang pp sai phan huu han
h = (tf - t0)/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(n - 1, 1);
end
if ~isnumeric(a0)
a0 = a0(t(2:n));
else length(a0) == 1
a0 = a0*ones(n - 1, 1);
end
if ~isnumeric(u)
u = u(t(2:n));
elseif length(u) == 1
u = u*ones(n-1,1);
else
u = u(:);
end
A = zeros(n - 1, n - 1);
374

b = h2*u;
ha = h*a1(1);
A(1, 1:2) = [-4 + h2*a0(1) 2 + ha];
b(1) = b(1) + (ha - 2)*x0;
for m = 2:n - 2
ha = h*a1(m);
A(m, m - 1:m + 1) = [2-ha -4+h2*a0(m) 2+ha];
end
ha = h*a1(n - 1);
A(n - 1, n - 2:n - 1) = [2-ha -4+h2*a0(n - 1)];
b(n - 1) = b(n-1) - (ha+2)*xf;
x = [x0 trid(A,b)' xf]';
function x = trid(A, b)
% giai he pt trdiagonal
n = size(A, 2);
for m = 2:n
tmp = A(m, m - 1)/A(m - 1, m - 1);
A(m, m) = A(m, m) -A(m - 1, m)*tmp;
A(m, m - 1) = 0;
b(m, :) = b(m, :) -b(m - 1, :)*tmp;
end
x(n, :) = b(n, :)/A(n, n);
for m = n - 1: -1: 1
x(m, :) = (b(m, :) -A(m, m + 1)*x(m + 1))/A(m, m);
end
gii phng trnh:
2
2
y + y 2 = 0
x
x
vi y(1) = 5 v y(2) = 3 ta dng chng trnh ctbvp2fdf.m:
clear, clc
x0 = 1;%toa do bien dau
y0 = 5; %gia tri bien dau
xf = 2; %toa do bien cuoi
yf = 3; %gia tri bien cuoi
n = 100;%so buoc tinh
a1 = inline('2./x', 'x');
a0 = inline('-2./x./x','x');
u = 0;%ve phai cua phupng trinh
[x, y] = bvp2fdf(a1, a0, u, x0, xf, y0, yf, n);
375

plot(x, y)
11. PHNG PHP LP PICARD
Vic gii bi ton Cauchy:
(1)
y = f(t,y) , y(t o ) = y o
hon ton tng ng vi vic tm nghim y(t) ca phng trnh tch phn:
t1

y(t) = y o + f [ z,y(z)] dz

(2)

to

Ni dung ca phng trnh Picard l thay cho vic tm nghim ng ca phng trnh
(2) ta tm nghim gn ng theo cng thc:
t1

y n +1 = y o + f [ z, y(z)] dz

(3)

to

Trong n gin ta chn nghim gn ng u tin l:


yo(x) = yo
Ta xy dng hm picard() thc hin thut ton trn:
function g = picard(f, y0, maxiter)
syms x y
g = subs(f, y0);
g = int(g, x);
for i = 1:maxiter
g = subs(f, g);
g = int(g, x);
end
g = sort(g);
gii phng trnh ta dng chng trnh ctpicard.m:
clear all, clc
syms x y
%f = 1 + y^2;%Phuong trinh y' = 1+y^2
%y0 = 0;%dieu kien dau
f = y - x;
y0 = 2;
g = picard(f, y0, 4)
12. PHNG PHP GILL
Phng php Gill cng tng t nh phng php Runge - Kutta, gi tr
nghim ti yn+1 c tnh bng:
1

y n +1 = y n + k1 + (2 2)k 2 + (2 + 2)k 4 + k 4
6

376

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

Ta xy dng hm gill() thc hin thut ton trn:

function [x, y] = gill(f, a, b, y0, n)


%Phuong phap Gill de giai phuong trinh y'(x) = f(x,y(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
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+(1-sqrt(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 + (2 - sqrt(2))*k2 + (2+sqrt(2))*k3 + k4)/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);
377

f3 = f3(:)';
f4 = h*feval(f, x(k) + h);
f4 = f4(:)';
y(k+1, :) = y(k, :) + (f1 + (2 - sqrt(2))*f2 + (2+sqrt(2))*f3 + f4)/6;
end
end
gii phng trnh ta dng chng trnh ctgill.m:
clear all, clc
a = 0;
b = 1;
y = inline('x + y');
ya = 0.5;
n = 10;%so lan tinh chi n = 10
[t, u] = gill(y, a, b, ya, n);
plot(t, u);
[l, v] = rungekutta(y, a, b, ya, n);
hold on
plot(l, v, '.r')
13. PHNG PHP RUNGE KUTTA FEHLBERG
Mt phng php bo m chnh xc ca nghim ca phng trnh vi
phn l gi bi ton hai ln vi bc tnh l h v 0.5h ri so snh kt qu ti cc nt
ng vi h. Tuy nhin iu ny i hi tng s ln tnh v phi tnh li khi gi tr ti
cc nt khc nhau nhiu. Dng phng php Runge Kutta Fehlberg c th trnh
c kh khn ny. N c th tc xc nh liu kch thc bc tnh h thch
hp cha. Ti mi bc tnh, hai xp x khc nhau ca nghim c tnh v so snh
vi nhau. Nu chng sai khc trong phm vi sai s cho trc th nghim c chp
nhn. Nu sai khc cn ln hn sai s cho php th bc h c gim v ta li tm
nghim vi h mi. Mi bc tnh theo phng php Runge Kutta Fehlberg i hi
6 gi tr:
k1 = hf(t i ,y i )
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

378

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

Xp x nghim theo phng php Runge Kutta bc 4:


25
1408
2197
1
y i +1 = y i +
k1 +
k3 +
k4 k5
216
2565
4104
5
V nghim tt hn dng phng php Runge Kutta bc 5:
16
6656
28561
9
2
z i +1 = y i +
k1 +
k3 +
k4 k5 + k6
135
12825
56430
50
55
Bc tnh ti u c xc nh bng sh vi s l:
1

4
h
h
s=
= 0.840896
2 z y
z y
i +1
i +1
i +1

i +1
Ta xy dng hm rkf() thc hin thut ton trn:
function [t, y] = rkf ( f, t0, tf, x0, parms )
% tim nghiem cua phuong trinh y'(t) = f( t, y ), y(t0) = x0
% dung phuong phap Runge-Kutta-Fehlberg bac 4, bac 5
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 )
if nargin(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/216 - 8*k2 +...
3680*k3/513 - 845*k4/4104);
k6 = h*feval(f, t0 + h/2, x0 - 8*k1/27 + 2*k2 -...
3544*k3/2565 + 1859*k4/4104 - 11*k5/40);
else
k1 = h * feval(f, t0);
k2 = h * feval(f, t0 + h/4);
k3 = h * feval(f, t0 + 3*h/8);
k4 = h * feval(f, t0 + 12*h/13);
379

k5 = h * feval(f, t0 + h);
k6 = h * feval(f, t0 + h/2);
end
r = max(abs(k1/360 - 128*k3/4275 - 2197*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 = tf - t0;
elseif (h < hmin)
disp('Can giam kich thuoc buoc tinh');
return;
end;
end;
gii phng trnh ta dng chng trnh ctrkf.m:
clear all, clc
a = 0;
b = 1;
y = @f2;
ya = 0.5;
p = [1e-5 1e-3 1e-8];%[hmin hmax tol]
[t, y] = rkf(y, a, b, ya, p)
plot(t, y);

380

CHNG 8: TI U HO
1. KHI NIM CHUNG V TI U HO
Ti u ho l thut ng thng c dng cc tiu ho hay cc i ho mt
hm. Thng thng ta ch cn tm cc tiu mt hm l . Vic tm cc i ca f(x)
thc hin mt cch n gin bng cch tm cc tiu ca hm f(x) . Hm f l hm gi
tr hay hm i tng, cn c gi cc tiu. Bin x l bin c th hiu chnh t do.
Cc thut ton cc tiu ho l cc th thut lp i hi mt gi tr ban u ca
bin x. Nu f(x) c nhiu cc tiu a phng, vic chn gi tr u s xc nh cc
tiu no c tnh. Ta khng c cch no bo m l tm c cc tiu ton cc.
Cc bin c th b rng buc bng cc ng thc hay bt ng thc. Phn ln
cc phng php l tm cc tiu khng rng buc, ngha l khng c hn ch no i
vi bin x. Cc bi ton ny bao gm tm cc tiu ca hm, tm im tnh - im c
gradient trit tiu. Cc bi ton tm cc tiu c rng buc kh hn v thut ton kh
phc tp.
Trong chng ny chng ta s ln lt xt cc thut ton tm cc tiu khng
rng buc v c rng buc.
2. PHNG PHP TIT DIN VNG
Ta xt bi ton tm cc tiu ca hm mt bin f(x). im cc tiu c xc
nh theo iu kin df/dx = 0. Do c th c nhiu im cc tiu nn ta phi vy im
cc tiu(xc nh ln cn cha im cc tiu) trc. Th thut vy im cc tiu kh
n gin: cho im u x0 v tnh gi tr ca hm ang i xung ti cc im tip theo
x1, x2, x3,... cho n ti xn hm tng li th dng. im cc tiu b vy trong khong
(xn-2, xn). Khong (xi+1, xi) khng nn chn l hng s v nh vy cn nhiu bc tnh.
Hp l nht l nn tng kch thc bc tnh t c cc tiu nhanh hn, ngay c
khi cc tiu b vy trong mt on kh rng. Ta chn kch thc tng theo dng hng
s: h i+1 = ch i vi c > 1 . ta xy dng hm goldbracket() vy im cc tiu ca hm:
function [a, b] = goldbracket(func, x1, h)
% vay diem cuc tieu cua f(x).
c = 1.618033989;
f1 = feval(func, x1);
x2 = x1 + h;
f2 = feval(func,x2);
if f2 > f1
h = -h;
x2 = x1 + h;
f2 = feval(func, x2);
if f2 > f1
a = x2;
b = x1 - h;
383

return
end
end
for i = 1:100
h = c*h;
x3 = x2 + h;
f3 = feval(func, x3);
if f3 > f2
a = x1;
b = x3;
return
end
x1 = x2;
f1 = f2;
x2 = x3;
f2 = f3;
end
error('Goldbracket khong tim thay diem cuc tieu')
Tit din vng l mt bin th ca phng php chia i dng khi tm nghim
ca phng trnh f(x) = 0. Gi s im cc tiu b vy trong khong (a, b) c di
h. thu nh khong (a, b) ta tnh gi tr ca hm ti x1 = b rh v x 2 = a + rh nh
hnh v. Nu f1 = f(x1) ln hn f2 = f(x2) nh hnh a th cc tiu nm trong khong
(x1, b) nu ngc li cc tiu nm trong khong (a, x2).
Gi s f1 > f2 , ta t a = x1 v v x1 = x2
v c khong (a, b) mi nh hnh b. thc
2rhh
hin bc thu gn tip theo ta li tnh gi tr
ca hm ti x2 = a + rh v lp li qu trnh.
rh
Qu trnh lm vic ch nu hnh a v hnh b
rh
tng t, ngha l hng s r khng i khi xc
x1
x2
a
b
nh x1 v x2 c hai hnh. T hnh a ta thy:
h
x 2 x1 = 2rh h
a
Cng mt khong cch t hnh b ta c:
x1 - a = h - rh
Cn bng cc khong ny ta c:
rh
2rh - h = h - rh
rh
Thay h = rh v kh h:
2r - 1 = r(1 - r)
x2 b
a
x1
Gii phng trnh ny ta nhn c t l vng:
h
b
384

5 1
= 0.618033989...
2
Ch l mi ln thu gn khong cha im cc tiu th khong (a, b) gim t l vi r.
iu ny lm s ln tnh ln hn phng php chia i. Tuy nhin phng php t l
vng ch i hi tnh gi tr hm mt ln trong khi phng php chia i cn tnh gi
tr hm 2 ln. S ln tnh xc nh bng:
b a rn =

ln
ba

= 2.078087 n
hay: n =
ln
ba
h = b - a = 0.382
Ta xy dng hm golden() thc hin thut ton ny:
r=

function [xmin, ymin] = golden(f, a, b, delta, epsilon)


% a va b la doan tim cuc tieu
% delta sai so cua x
% epsilon sai so cua y
r1 = (sqrt(5) - 1)/2;
r2 = r1^2;
h = b - a;
fa = f(a);
fb = f(b);
x1 = a + r2*h;
x2 = a + r1*h;
f1 = f(x1);
f2 = f(x2);
k = 1;
while (abs(fb-fa) > epsilon)|(h > delta)
k = k + 1;
if (f1 < f2)
b = x2;
fb = f2;
x2 = x1;
f2 = f1;
h = b - a;
x1 = a + r2*h;
f1 = f(x1);
else
a = x1;
fa = f1;
x1 = x2;
385

f1 = f2;
h = b - a;
x2 = a + r1*h;
f2 = f(x2);
end
end
dp = abs(b - a);
dy = abs(fb - fa);
p = a;
yp = fa;
if (fb < fa)
p = b;
yp = fb;
end
xmin = p;
ymin = yp;
tm cc tiu ca hm ta dng chng trnh ctgolden.m:
clear all, clc
f = inline('1.6*x^3 + 3*x^2 -2*x');
x = 0;
delta = 1e-8;
epsilon = 1e-10;
[a, b] = goldbracket(f, x, 0.2);
[xmin, ymin] = golden(f, a, b, delta, epsilon)
3. PHNG PHP XP X BC HAI
tng ca phng php ny l:
- xp x hm i tng f(x) bng mt hm bc 2 p2(x) qua 3 im cho trc
- cp nht 3 im ny bng cch thay mt trong 3 im bng cc tiu ca hm
p2(x)

Qua 3 im:
{[(x0 ,f(x0 )] , [(x1 ,f(x1 )] , [(x2 ,f(x2 )]} x0 < x1 < x2
ta tm c a thc ni suy p2(x) v im c o hm bng zero:
f0 (x12 x 22 ) + f1 (x 22 x02 ) + f2 (x02 x12 )
x = x3 =
2 f0 (x1 x 2 ) + f1 (x 2 x 0 ) + f2 (x0 x1 )

(1)

c bit, nu cc im tm c trc y phn b u vi khong cch h( ngha l


x2 - x1 = x1 - x0 = h) th (1) tr thnh:

386

x3 =

f0 (x12 x 22 ) + f1 (x 22 x 02 ) + f2 (x02 x12 )


3f0 4f1 + f2
= x0 + h
(2)
2( f0 + 2f1 f2 )
2 f0 (x1 x 2 ) + f1 (x 2 x0 ) + f2 (x0 x1 )

Ta cp nht 3 im theo cch ny cho n khi x 2 x0 0 hay f(x 2 ) f(x0 ) 0 v


cc tiu l x3. Quy tc cp nht 3 im l:
- Trong trng hp x0 < x 3 < x1 ta dng (x0 , x 3 , x1 ) hay (x 3 , x1 , x 2 ) lm 3
im mi tu theo f(x3) < f(x1) hay khng
- Trong trng hp x1 < x 3 < x 2 ta dng (x1 , x 3 , x 2 ) hay (x0 , x1 , x 3 ) lm 3
im mi tu theo f(x3) f(x1) hay khng.
Qu trnh tm cc tiu c m t trn hnh sau:

Ta xy dng hm optquad() thc hin thut ton ny.


function [xo, fo] = optquad(f, x0, tolx, tolfun, maxiter)
%Tim cuc tieu cua f(x) bang phuong phap xap xi bac 2
if length(x0) > 2
x012 = x0(1:3);
else
if length(x0) == 2
a = x0(1);
b = x0(2);
else
a = x0 - 10;
b = x0 + 10;
end
x012 = [a (a + b)/2 b];
end
387

f012 = f(x012);
[xo, fo] = optquad0(f, x012, f012, tolx, tolfun, maxiter);
function [xo, fo] = optquad0(f, x012, f012, tolx, tolfun, k)
x0 = x012(1);
x1 = x012(2);
x2 = x012(3);
f0 = f012(1);
f1 = f012(2);
f2 = f012(3);
nd = [f0 - f2 f1 - f0 f2 - f1]*[x1*x1 x2*x2 x0*x0; x1 x2 x0]';
x3 = nd(1)/2/nd(2);
f3 = feval(f, x3); %Pt.(1)
if k <= 0 | abs(x3 - x1) < tolx | abs(f3 - f1) < tolfun
xo = x3;
fo = f3;
if k == 0
fprintf('Day co the xem la diem cuc tieu')
end
else
if x3 < x1
if f3 < f1
x012 = [x0 x3 x1];
f012 = [f0 f3 f1];
else
x012 = [x3 x1 x2];
f012 = [f3 f1 f2];
end
else
if f3 <= f1
x012 = [x1 x3 x2];
f012 = [f1 f3 f2];
else
x012 = [x0 x1 x3];
f012 = [f0 f1 f3];
end
end
[xo, fo] = optquad0(f, x012, f012, tolx, tolfun, k - 1);
end
tm im cc tiu ta dng chng trnh ctoptquad.m:
388

clear all, clc


%f = inline('(x.^2 - 4).^2/8 - 1');
a = 0;
b = 3;
delta = 1e-8;
epsilon = 1e-10;
maxiter = 100;
[xmin, ymin] = optquad(f, [a b], delta, epsilon, maxiter)
4. PHNG PHP NELDER - MEAD
Phng php Nelder - Mead c th dng tm cc tiu ca hm nhiu bin
m phng php tit din vng hay phng php xp x bc 2 khng dng c.
Thut ton Nelder - Mead gm cc bc nh sau:
Bc 1: Cho 3 im u tin a, b, c vi f(a) < f(b) < f(c)
Bc 2: Nu 3 im v cc gi tr tng ng ca hm gn nhau th ta coi a
l im cc tiu v kt thc qu trnh tnh
Bc 3: Nu khng ta coi
a
im cc tiu nm i din vi im
c2
c trn ng ab(xem hnh v) v ly:
c1
r
e
e = m + 2(m - c)
s
2
vi
s1 m
c
m = (a + b)/2
v nu f(e) < f(b) th ly:
b
r = (m + e)/2 = 2m - c
v nu f(r) < f(c) th ly r lm gi tr
m=(a+b)/2
r=m+(mc)
mi ca c; nu f(r) f(b) th ly:
e=m+2(mc) s1=(c+m)/2
s = (c + m)/2
s2=(m+r)/2
=(c+a)/2
v nu f(s) < f(c) th ly s lm gi tr mi ca
c; nu khng bc1cc
im b, c v dng
m v c1 = (a + c)/2 lm im b v c mi v ccho
rng cc tiu nm quanh im a.
2=(r+a)/2
Bc 4: Tr v bc 1
Ta xy dng hm neldermead() thc hin thut ton ny:
function [xo, fo] = neldermead(f, x0, tolx, tolfun, maxiter)
n = length(x0);
if n == 1 %truong hop ham 1 bien
[xo,fo] = optquad(f, x0, tolx, tolfun);
return
end
S = eye(n);
for i = 1:n
i1 = i + 1;
if i1 > n
389

i1 = 1;
end
abc = [x0; x0 + S(i,:); x0 + S(i1,:)];
fabc = [feval(f, abc(1, :)); feval(f,abc(2, :)); feval(f,abc(3, :))];
[x0, fo] = neldermead0(f, abc, fabc, tolx, tolfun, maxiter);
if n < 3,
break;
end
end
xo = x0;
function [xo, fo] = neldermead0(f, abc, fabc, tolx, tolfun, k)
[fabc, I] = sort(fabc);
a = abc(I(1), :);
b = abc(I(2), :);
c = abc(I(3), :);
fa = fabc(1);
fb = fabc(2);
fc = fabc(3);
fba = fb - fa;
fcb = fc - fb;
if k <= 0 | abs(fba) + abs(fcb) < tolfun | abs(b - a) + abs(c - b) < tolx
xo = a;
fo = fa;
if k == 0
fprintf('Xem day la diem cuc tieu')
end
else
m = (a + b)/2;
e = 3*m - 2*c;
fe = feval(f, e);
if fe < fb
c = e;
fc = fe;
else
r = (m + e)/2;
fr = feval(f, r);
if fr < fc
c = r;
fc = fr;
end
if fr >= fb
390

s = (c + m)/2;
fs = feval(f, s);
if fs < fc
c = s;
fc = fs;
else
b = m;
c = (a + c)/2;
fb = feval(f, b);
fc = feval(f, c);
end
end
end
[xo, fo] = neldermead0(f, [a;b;c], [fa fb fc], tolx, tolfun, k - 1);
end
tm cc tiu ca hm z = f(x,y) = x12 x1x 2 4x1 + x 22 x 2 ln cn [0 0] ta dng
chng trnh ctneldermead.m:
clear all, clc
f = inline('x(1)*x(1) - x(1)*x(2) - 4*x(1) + x(2) *x(2) - x(2)');
x0 = [0 0];
b = 1;
delta = 1e-8;
epsilon = 1e-10;
maxiter = 100;
[xmin, ymin] = neldermead(f, x0, delta, epsilon, maxiter)
5. PHNG PHP DC LN NHT
Phng php ny tm im cc tiu ca hm n bin theo hng gradient m:
f(x) f(x)
f(x)
g([ x ]) = f([ x ]) =
"
x 2
x n
x1
vi kch thc bc tnh k ti ln lp th k c hiu chnh sao cho gi tr hm cc
tiu theo hng tm. Thut ton gm cc bc sau:
Ti ln lp th k = 0, tm gi tr hm f(x0) vi im khi u x0
Ti ln lp th k, tm k theo hng -g(x)
k 1 = f ( x k 1 g k 1 / g k 1 )
(1)
Tnh gi tr xk:
x k = x k 1 k 1g k1 / g k 1

(2)
391

2.

Nu xk xk-1 v f(xk) f(xk-1) th coi l cc tiu, nu khng th quay v bc


function [xo, fo] = steepest(f, x0, tolx, tolfun, alpha0,maxiter)
if nargin < 6
maxiter = 100;
end
if nargin < 5
alpha0 = 10; %kich thuoc khoi gan
end
if nargin < 4
tolfun = 1e-8;
end %|f(x)| < tolfun mong muon
if nargin < 3
tolx = 1e-6;
end %|x(k)- x(k - 1)| < tolx mong muon
x = x0;
fx0 = feval(f, x0);
fx = fx0;
alpha = alpha0;
kmax1 = 25;
warning = 0;
for k = 1:maxiter
g = grad(f, x);
g = g/norm(g); %gradient la vec to hang
alpha = alpha*2; %de thu di theo huong gradient am
fx1 = feval(f, x - alpha*2*g);
for k1 = 1:kmax1 %tim buoc toi uu
fx2 = fx1;
fx1 = feval(f, x - alpha*g);
if fx0 > fx1+ tolfun & fx1 < fx2 - tolfun %fx0 > fx1 < fx2
den = 4*fx1 - 2*fx0 - 2*fx2;
num = den - fx0 + fx2; %
alpha = alpha*num/den;Pt.(1)
x = x - alpha*g;
fx = feval(f,x); %Pt.(2)
break;
else
alpha = alpha/2;
end
end
if k1 >= kmax1
392

warning = warning + 1; %kg tim duoc buoc toi uu


else
warning = 0;
end
if warning >= 2|(norm(x - x0) < tolx&abs(fx - fx0) < tolfun)
break;
end
x0 = x;
fx0 = fx;
end
xo = x; fo = fx;
if k ==maxiter
fprintf('Day la ket qua tot nhat sau %d lan lap', maxiter)
end
function g = grad(func, x)
% Tinh gradient cua ham f(x).
h = 1.0e-6;
n = length(x);
g = zeros(1, n);
f0 = feval(func, x);
for i = 1:n
temp = x(i);
x(i) = temp + h;
f1 = feval(func, x);
x(i) = temp;
g(1, i) = (f1 - f0)/h;
end
tm cc tiu ca hm ta dng chng trnh ctsteepest.m:
clear all, clc
f = inline('x(1)*x(1) - x(1)*x(2) - 4*x(1) + x(2) *x(2) - x(2)');
x0 = [0.5 0.5];
tolx = 1e-4;
tolfun = 1e-9;
alpha0 = 1;
maxiter = 100;
[xo, fo] = steepest(f, x0, tolx, tolfun, alpha0, maxiter)
6. PHNG PHP NEWTON
393

Vic tm im cc tiu ca hm f(x) tng ng vi vic xc nh x cho


gradient g(x) ca hm f(x) bng zero. Nghim ca g(x) = 0 c th tm c bng cch
dng phng php Newton cho h phng trnh phi tuyn. Hm newtons(x) dng
tm nghim ca phng trnh g(x) = 0 l:
function [x, fx, xx] = newtons(f, x0, tolx, maxiter)
h = 1e-4;
tolfun = eps;
EPS = 1e-6;
fx = feval(f, x0);
nf = length(fx);
nx = length(x0);
if nf ~= nx
error('Kich thuoc cua g va x0 khong tuong thich!');
end
if nargin < 4
maxiter = 100;
end
if nargin < 3
tolx = EPS;
end
xx(1, :) = x0(:).';
for k = 1: maxiter
dx = -jacob(f, xx(k, :), h)\fx(:);%-[dfdx]-1*fx
xx(k + 1, :) = xx(k, :) + dx.';
fx = feval(f, xx(k + 1, :));
fxn = norm(fx);
if fxn < tolfun | norm(dx) < tolx
break;
end
end
x = xx(k + 1, :);
if k == maxiter
fprintf('Ket qua tot nhat sau %dlan lap\n', maxiter)
end
function g = jacob(f, x, h) %Jacobian cua f(x)
if nargin < 3
h = 1e-4;
end
h2 = 2*h;
n = length(x);
394

x = x(:).';
I = eye(n);
for n = 1:n
g(:, n) = (feval(f, x + I(n, :)*h) - feval(f, x - I(n,:)*h))'/h2;
end
tm cc tiu ca hm bng phng php Newtons ta dng chng trnh
ctnewtons.m:
clear all, clc
f = inline('x(1).^2 - x(1)*x(2) - 4*x(1) + x(2).^2 - x(2)');
g = inline('[(2*x(1) - x(2) -4) ( 2*x(2) - x(1) - 1)]');
x0 = [0.1 0.1];
tolx = 1e-4;
maxiter = 100;
[xo, fo] = newtons(g, x0, tolx, maxiter)
7. PHNG PHP GRADIENT LIN HP
1. Khi nim chung: Mt trong cc phng php gii bi tn tm cc tiu ca hm
nhiu bin l tm cc tiu theo mt bin lin tip n gn im cc tiu. Chin
thut chung l:
chn im [x0]
lp vi i = 1, 2, 3,...
- chn vec t [vi]
- cc tiu ho f([x]) dc theo ng [xi-1] theo hng [vi]. Coi [xi] l cc
tiu. Nu [ x i ] [ x i1 ] < th kt thc lp
kt thc
2. Gradient lin hp: Ta kho st hm bc 2:
1
1 T
T
f ([ x ]) = c bi xi + A i ,jxi x j = c [ b] [ x ] + [ x ] [ A ][ x ]
(1)
2 i j
2
i
o hm ca hm theo xi cho ta:
f
= bi + A i ,jx j
x i
j
Vit di dng vec t ta c:
f = [ b ] + [ A ][ x ]
(2)
vi f l gradient ca f.
By gi ta kho st s thay i gradient khi ta di chuyn t [x0] theo hng ca
vec t [u] dc theo ng:
[x] = [x0] + s[u]
395

vi s l khong cch di chuyn. Thay biu thc ny vo (2) ta c gradient dc theo


[u]:
f [x0 ]+s[u] = [ b ] + [ A ] ([ x0 ] + s [ u ]) = f [x0 ] + s [ A ][ u ]
Nh vy s thay i gradient l s[A][u]. Nu ta di chuyn theo hng vung gc vi
vec t [v], ngha l
(3)
[v]T[u] = 0 hay [v]T[A][u] = 0
th hng ca [u] v [v] l lin hp. iu ny cho thy khi ta mun cc tiu ho f(x)
theo hng [v], ta cn di chuyn theo hng [u] khng lm hng cc tiu trc .
Vi hm bc hai n bin c lp ta c th xy dng n hng lin hp. Cc phng
php gradient lin hp khc nhau dng cc k thut khc nhau tm hng lin hp.
3. Phng php Powell: Phng php Powell l phng php bc zero, ch i hi
tnh f([x]). Thut ton gm cc bc:
chn im [x0]
chn vec t [vi], thng ly [vi] = [ei] vi [ei] l vec t n v theo hng [xi]
vng trn
- lp vi i = 1, 2,...
tm cc tiu ca f([x]) dc theo ng i qua [xi-1] theo hng
[vi]; coi [xi] l cc tiu
- kt thc lp
- [vn+1] = [x0] - [xn]; tm cc tiu ca f([x]) dc theo ng i qua[x0]
theo hng [vn+1]; coi [xn+1] l cc tiu
- nu [ x n +1 ] [ x n ] < th kt thc vng lp
- lp
[vi+1] = [v]
kt thc vng trn
Ta xy dng hm powell() thc hin thut ton trn:
function [xmin, fmin, ncyc] = powell(h, tol)
% Phuong phap Powell de tim cuc tieu cua ham f(x1,x2,...,xn).
global x func v
if nargin < 2;
tol = 1.0e-6;
end
if nargin < 1
h = 0.1;
end
if size(x,2) > 1
x = x';
end
n = length(x);
df = zeros(n, 1);
396

u = eye(n);
xold = x;
fold = feval(func, xold);
for i = 1:n
v = u(1:n, i);
[a, b] = goldbracket(@fline, 0.0, h);
[s, fmin] = golden(@fline, a, b);
df(i) = fold - fmin;
fold = fmin;
x = x + s*v;
end
v = x - xold;
[a, b] = goldbracket(@fline, 0.0, h);
[s,fMin] = golden(@fline, a, b);
x = x + s*v;
if sqrt(dot(x-xold, x-xold)/n) < tol
xmin = x;
ncyc = j;
return
end
imax = 1;
dfmax = df(1);
for i = 2:n
if df(i) > dfmax
imax = i;
dfmax = df(i);
end
end
for i = imax:n-1
u(1:n, i) = u(1:n, i+1);
end
u(1:n, n) = v;
end
error('Phuong phap Powell khong hoi tu')
function z = fiine(s) % f theo huong cua v
global x func v
z = feval(func, x+s*v);
function y = f(x)
y = 100.0*(x(2) - x(1).^2).^2 + (1.0 - x(1)).^2;
397

tm im cc tiu ta dng chng trnh ctpowell.m:


clear all, clc
global x func
func = @f;
x = [-1.0; 1.0];
[xmin, fmin, numcycles] = powell
fminsearch(func, x)
3. Phng php Fletcher - Reeves: Phng php Powell cn n ng cc tiu ho.
Ta c th ch cn dng mt ng vi phng php bc 1. Phng php ny c 2
phng n: thut ton Fletcher - Reeves(FR) v thut ton Polak - Ribiere(PR). Thut
ton tm tt nh sau:
- cho [x0], tnh f([x0])
- khi gn x(n) = xk; tnh [g0] = -f([x0]); s(k) = - g(xk)
- lp k = 0, 1, 2,...
[xk+1] = [xk] + k[sk]

[g
(
=

T
] [g k ] )[g k+1 ]
g k +1 ] [ g k +1 ]
[
k
(PR)
(FR) hay k =
T
T
[g k ] [g k ]
[g k ] [g k ]
[ s k +1 ] = [ g k +1 ] + k [ s k ]

k +1

cp nht [xk]
cho n khi hi t
Ta xy dng hm conjugate() thc hin thut ton trn:
function [xo, fo] = conjugate(f, x0, tolx, tolfun, alpha0, maxiter, KC)
%KC = 1: Phuong phap gradient lien hop PolakRibiere
%KC = 2: Phuong phap gradient lien hop FletcherReeves
if nargin < 7
KC = 0;
end
if nargin < 6
maxiter = 100;
end
if nargin < 5
alpha0 = 10;
end
if nargin < 4
tolfun = 1e-8;
end
if nargin < 3
398

tolx = 1e-6;
end
n = length(x0);
nmax1 = 20;
warning = 0;
h = 1e-4;
x = x0;
fx = feval(f, x0);
fx0 = fx;
for k = 1: maxiter
xk0 = x;
fk0 = fx;
alpha = alpha0;
g = grad(f, x);
s = -g;
for n = 1:n
alpha = alpha0;
fx1 = feval(f, x + alpha*2*s);
for n1 = 1:nmax1
fx2 = fx1;
fx1 = feval(f, x+alpha*s);
if (fx0 > fx1 + tolfun) & ( fx1 < fx2 - tolfun) %fx0 > fx1 < fx2
den = 4*fx1 - 2*fx0 - 2*fx2;
num = den - fx0 + fx2;
alpha = alpha*num/den;
x = x + alpha*s;
fx = feval(f, x);
break;
elseif n1 == nmax1/2
alpha = -alpha0;
fx1 = feval(f, x + alpha*2*s);
else
alpha = alpha/2;
end
end
x0 = x;
fx0 = fx;
if n < n
g1 = grad(f, x, h);
if KC <= 1
s = - g1 +(g1 - g)*g1'/(g*g'+ 1e-5)*s;
else
399

s = -g1 + g1*g1'/(g*g'+ 1e-5)*s;


end
g = g1;
end
if n1 >= nmax1
warning = warning + 1; %kg tim duoc kich thuoc toi uu
else
warning = 0;
end
end
if (warning >= 2)|((norm(x - xk0)<tolx) & (abs(fx - fk0)< tolfun))
break;
end
end
xo = x;
fo = fx;
if k == maxiter
fprintf('Gia tri tot nhat sau %d lan lap', maxiter)
end
8. PHNG PHP M PHNG QU TRNH
Tt c cc phng php tm im cc tiu m ta xt n nay ch lm vic c
hiu qu khi im ban u c lc chn gn vi im cc tiu. im cc tiu tm
c l mt trong nhiu im cc tiu c th c v ta khng chc l tm c im
cc tiu ton cc. Vn l lm sao lp li th tc tm c tt c cc im cc
tiu t cc im u khc nhau v a ra im cc tiu ton cc. y l mt bi ton
kh v khng c mt phng php no xc nh c cc im u thch hp
tm c tt c cc im cc tiu. Mt s la chn th v da trn s tng t gia s
v cc tiu ho. l qu trnh gia nhit khi kim loi ln n nhit cao hn nhit
nng chy v sau h nhit t t cc nguyn t b kch thch mnh c th
tr v trng thi nng lng thp, to thnh mt tinh th duy nht c cu trc hnh ch
nht. Lm ngui nhanh s c th to ra s khng ng nht v lm bin dng cu trc
tinh th ging nh khi tm cc tiu ton cc qu nhanh. Phng php m phng qu
trnh (simulated annealing - SA) c th thc hin bng cch dng phn b xc sut
Boltzmann ca mc nng lng E ti nhit T, c m t bng:

E
KT

p(E) = e
(1)
Ch l nhit cao, ng cong phn b xc sut phng trong mt phm vi E
rng, ng l h thng c th trng thi nng lng cao cng ngang bng trng
thi nng lng thp. Trong khi nhit thp ng cong phn b xc sut cao
nhit thp v thp nhit cao, ng l h thng c kh nng mc nng
400

lng thp nhiu hn nhng vn c mt c hi nh trng thi nng lng cao n


c th thot khi trng thi nng lng cc tiu a phng.
tng ca thut ton SA gm cc bc sau:
Cho gi tr ban u [xo], bin di [l], bin trn [u], s ln lp cc ai, kmax,
h s tt q > 0(tt nhanh hay chm) v sai s tng i f ca dao ng gi tr
ca hm.
Cho [x] = [xo]; [xo] = [x]; [fo] = f([x])
Lp t k = 1 n kmax
to ra vec t ngu nhin N1: [U] = [-1, +1]
k
100

k max

bin i vec t [U] bng lut nghch o vi = 10


to ra
[x] v ly [x1] = [x] + [x]
nu [f] = f([x1]) - f([x]) < 0
- [x] = [x1] v nu f([x]) < [fo] th [x] = [xo] v [fo] = f([xo])
khng th:
- to s ngu nhin z trong on [0, 1] v cho [x] = [x1] ch trong
trng hp z < p
o
Vi [x ] gn vi im cc tiu m ta ang tm ta c th dng n nh gi tr
u v dng cc quy tc tm cc tiu a phng khc tm im cc tiu ca
hm f([x])
Da trn thut ton ny ta xy dng hm simannealing(). Hm ny c hai phn c s
bc lp thay i khi nhit gim. Mt phn c kch thc ca bc tnh [x] to ra
bi vec t ngu nhin [y] c cc gi tr nm trong on [-1, 1] vi bin [x] c cng
kch thc v nhn -1([y]) vi hiu ([u] -[l]). Quy tc nghch o:
y
(1 + )
1
g =
sign(y) y 1
(2)

thc hin trong hm invmu() vi tng theo quy lut:


= 10

k
100

k max

(3)

function x = muinv(y, mu) % luat mu nghich dao Pt.(2)


x = (((1 + mu).^abs(y) - 1)/mu).*sign(y);
Phn cn li l xc sut ca vic dng bc [x]. Tng t (1) ta c:
q

k
f

k
f
x
[
]) f
(
max

p=e
f > 0
Ta xy dng hm simannealing() thc hin thut ton trn:

(4)

function [xo, fo] = simannealing(f, x0, l, u, kmax, q, tolfun)


% Phuong phap SA de tim cuc tieu cua ham f(x) l <= x <= u
401

n = length(x0);
x = x0;
fx = feval(f, x);
xo = x;
fo = fx;
if nargin < 7
tolfun = 1e-10;
end
if nargin < 6
q = 1;
end %he so tat
if nargin < 5
kmax = 100;
end %so lan lap max
for k = 0:kmax
Ti = (k/kmax)^q;
mu = 10^(Ti*100); % Pt.(3)
dx = muinv(2*rand(size(x))- 1, mu).*(u - l);
x1 = x + dx;
x1 = (x1 < l).*l +(l <= x1).*(x1 <= u).*x1 +(u < x1).*u;
fx1 = feval(f, x1);
df = fx1 - fx;
if (df <0)|(rand < exp(-Ti*df/(abs(f(x)+eps))/tolfun))%Pt.(4)
x = x1;
fx = fx1;
end
if fx < fo
xo = x;
fo = fx1;
end
end
tm cc tiu ca hm ta dng chng trnh ctsimannealing.m:
clear, clc
f = inline('x(1)^4 - 16*x(1)^2 - 5*x(1) + x(2)^4 - 16*x(2)^2 - 5*x(2)','x');
l = [-5 -5];
u = [5 5]; %bien duoi/tren
%x0 = [-0.5 -1];
x0 = [0 0];
kmax = 500;
q = 1;
402

tolfun = 1e-10;
[xmin, fmin] = simannealing(f, x0, l, u, kmax, q, tolfun)
[xmin1, fmin1] = neldermead(f, x0, 1e-5, 1e-8, kmax)
[xmin2, fmin2] = fminsearch(f, x0)
Trong chng trnh trn, ta dng thm cc thut ton khc so snh. Kt qu l thut
ton SA c th tm c cc tiu ton cc. Tuy nhin khng phi khi no thut ton
cng thnh cng. S thnh cng ca thut ton ny ph thuc gi tr u v may mn,
trong khi cc thut ton khc s thnh cng ch ph thuc gi tr u.
9. THUT TON DI TRUYN
Thut ton di truyn (genetic algorithm - GA) l mt k thut tm ngu nhin
c nh hng, m phng s chn lc t nhin c cc c th sng st thch nghi
nht. Cng nh thut ton SA, GA cho php tm c cc tiu ton cc ngay c khi
hm i tng c nhiu cc tr gm cc im un, cc cc tiu a phng, cc cc
i a phng. Thut ton di truyn lai gm cc bc: khi gn, chn lc, vt qua,
t bin. Thut ton gm cc bc sau:
Cho gi tr u [xo] = [xo1, xo2,...,xoN] (N l kch thc ca bin), bin di [l]
= [l1,...,lN], bin trn [u] = [u1,...,uN], kch thc ca qun th Np, vec t Nb =
[Nb1,..., NbN] gm s bit cc gn cho mi th hin ca mi bin xi, xc sut sng
st Pc, xc sut t bin Pm, t l hc (0 1, th

403

hin hc nhanh hay chm), s ln lp cc i kmax. Ch l kch thc ca [xo],


[u], [l] u l N.
Khi to ngu nhin s c th ban u ca qun th.
Cho [xo] = [xo], fo = f([xo]) v xy dng theo cch ngu nhin mng cc c th
ban u [X1] cha Np trng thi(trong vng cho php bo bi bin trn [u] v
bin di [l]) bao gm c trng thi ban u [xo] bng cch t:
(1)
[X1(1)] = [xo], [X1(k)] = [l] + rand.([u] - [l]) k = 2,..,Np
Sau m ho mi s ca mng qun th ny thnh mt chui nh phn bng:
m 1
m

P1 n,1 + N bi : N bi = biu din nh phn ca X1(n ,m) vi Nbm bit

i =1
i =1
X (n,m) l(m)
= ( 2 Nbm 1) 1
(2)
u(m) l(m)
vi n = 1,...,Np v m = 1,...,N
sao cho ton th mng qun th tr thnh mng m mi hng l mt nhin sc
th c biu din bng chui nh phn

N
i =1

bi

bit.

Lp t k = 1 n kmax:
gii m mi s ca mng thnh s thp phn bng:
m 1
m

X k (n,m) = biu din thp phn ca P1 n,1 + N bi : N bi vi

i =1
i =1
Nbm bit
u(m) l(m)
= Pk (n,.)
+ l(m)
(3)
( 2Nbm 1)
n = 1,...,N; m = 1,...,N
v tnh gi tr f(n) ca hm i vi mi hng Xk(n, :) = [x(n)]
tng ng vi mi nhim sc th v tm cc tiu fmin = f(nb) tng
ng vi Xk(n, :) = [x(nb)]
nu fmin = f(nb) < fo th t fo = f(nb) v [xo] = [x(nb)]
bin i gi tr ca hm thnh gi tr thch hp bng:
N
f1 (n) = Max n=1p {f(n)} f(n)
(4)

nu Max n=1p {f(n)} 0 , kt thc qu trnh v [xo]l gi tr tt nht. Nu


khng, to nhiu nhin sc th hn quanh im tt nht [x(nb)] cho th
h sau, ta dng quy tc chn lc:
f (n ) f (n)
(5)
[ x(n)] = [ x(n)] + 1 b 1 {[ x(n b )] [ x(n)]}
f1 (n b )
c c qun th mi [Xk+1] c Xk+1(n, :) = [x(n)] v m ho n
xy dng mng Pk+1 mi theo (2)
xo trn ch s hng ca mng Pk+1
N

407

vi xc sut tn ti Pc, thay i phn cui bt u t vi bit ngu nhin


ca cc s trong 2 cp nhim sc th ngu nhin(hng c Pk+1)vi cc
nhim sc th khc c ma trn Pk +1
vi xc sut t bin Pm, nghch o mt bt ngu nhin ca mi hng
biu din bi nhim sc th (hng ca Pk +1 ) to ra mng Pk+1
Lu thut ton nh sau:
Khign

nhgi

Nugitr
hmcaccnhimsc
thbngnhau

Ktthc

Chnlc

Vtqua

tbin

Ta xy dng hm genetic() thc hin thut ton trn:


function [xo, fo] = genetic(f, x0, l, u)
% Thuat toan Genetic Algorithm tim cuc tieu cua ham f(x) tg doan l <= x <= u
N = length(x0);
kmax = 100; %so lan lap(the he)
eta = 1;%ti le hoc(0 < eta < 1)
Pm = 0.01; %xac suat dot bien
Pc = 0.5; end %xac suat ton tai
Nb = 8*ones(1, N);
Np = 10; %so nhiem sac the
%khoi gan
NNb = sum(Nb);
xo = x0(:)';
l = l(:)';
408

u = u(:)';
fo = feval(f, xo);
X(1, :) = xo;
for n = 2:Np
X(n, :) = l + rand(size(x0)).*(u - l); %Pt.(1)
end
P = genencode(X, Nb, l, u); %Pt.(2)
for k = 1:kmax
X = gendecode(P, Nb, l, u); %Pt.(3)
for n = 1:Np
fX(n) = feval(f, X(n,:));
end
[fxb, nb] = min(fX);
if fxb < fo
fo = fxb;
xo = X(nb, :);
end
fX1 = max(fX) - fX; %Pt.(4)
fXm = fX1(nb);
if fXm < eps
return;
end %ket thuc neu tat ca cac nhiem sac the nhu nhau
%Chon loc the h tiep theo
for n = 1:Np
X(n, :) = X(n, :) + eta*(fXm - fX1(n))/fXm*(X(nb, :) - X(n, :)); %Pt.(5)
end
P = genencode(X,Nb,l,u);
is = shuffle([1:Np]);
for n = 1:2:Np - 1
if rand < Pc
P(is(n:n + 1), :) = crossover(P(is(n:n + 1), :), Nb);
end
end
%Dot bien
P = mutation(P, Nb, Pm);
end
function X = gendecode(P, Nb, l, u)
% giai ma
Np = size(P, 1);
N = length(Nb);
for n = 1:Np
409

b2 = 0;
for m = 1:N
b1 = b2 + 1;
b2 = b1 + Nb(m) - 1; %Pt.(3)
X(n, m) = bin2dec(P(n,b1:b2))*(u(m) - l(m))/(2^Nb(m) - 1) + l(m);
end
end
function P = genencode(X, Nb, l, u)
Np = size(X,1);
N = length(Nb);
for n = 1:Np
b2 = 0;
for m = 1:N
b1 = b2 + 1;
b2 = b2 + Nb(m);
Xnm = (2^Nb(m)- 1)*(X(n, m) - l(m))/(u(m) - l(m)); %Pt.(2)
P(n, b1:b2) = dec2bin(Xnm, Nb(m));
end
end
function chrms = crossover(chrms2, Nb)
Nbb = length(Nb);
b2 = 0;
for m = 1:Nbb
b1 = b2 + 1;
bi = b1 + mod(floor(rand*Nb(m)), Nb(m));
b2 = b2 + Nb(m);
tmp = chrms2(1, bi:b2);
chrms(1, bi:b2) = chrms(2, bi:b2);
chrms(2, bi:b2) = tmp;
end
function P = mutation(P, Nb, Pm)
Nbb = length(Nb);
for n = 1:size(P,1)
b2 = 0;
for m = 1:Nbb
if rand < Pm
b1 = b2 + 1;
bi = b1 + mod(floor(rand*Nb(m)),Nb(m));
b2 = b2 + Nb(m);
P(n,bi) = ~P(n,bi);
410

end
end
end
function is = shuffle(is)
N = length(is);
for n = N:-1:2
in = ceil(rand*(n - 1));
tmp = is(in);
is(in) = is(n);
is(n) = tmp;
end
tm cc tiu ca hm ta dng chng trnh ctgenetic.m:
clear all, clc
f = inline('x(1).^2 + 2*x(2).^2');
l = [-5 -5 ];
u = [5 5]; %bien duoi/tren
x0 = [0 0];
[xmin, fmin] = genetic(f, x0, l, u)
10. THUT TON FIBONACCI
Trong thut ton t l vng, hai ln tnh gi tr ca hm c thc hin ti ln
lp u tin v sau ch tnh gi tr hm mt ln trong cc ln lp tip theo. Gi tr
ca r l hng s trong mi on con v vic tm im cc tiu kt thc ti on con
th k c a k b k < hay f(b k f(a k ) < . Phng php tm theo thut ton
Fibonacci khc phng php t l vng ch r khng phi l hng s trn mi on
con. Ngoi ra s on con (s bc lp) c xc nh trc. Thut ton tm
Fibonacci da trn dy s Fibonacci c xc nh bng phng trnh:
fo = 0
f1 = 1
fn = fn-1 + fn-2 vi n = 2,3,...
Nh vy dy s Fibonacci l: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,...
Gi s ta c hm f(x) c cc tiu trn on [a, b]. Nh trong phng php t
l vng, 0.5 < ro < 1 c chn sao cho c hai im bn trong co v do s c dng
trong on con tip theo v nh vy ch cn tnh gi tr ca hm mt ln. Nu f(co) <
f(do) th cc tiu nm trong on [ao, do] v ta thay a1 = a o v b1 = do v tip tc tm
trong khong mi [a1 ,b1 ] = [a o ,do ] . Nu f(co) > f(do) th cc tiu nm trong on [co,

bo] v ta thay a1 = co v b1 = bo v tip tc tm trong khong mi [a1 ,b1 ] = [ c o ,bo ]


nh hnh v.

411

Nu f(co) < f(do) v ch mun tnh gi tr ca hm mt ln trong on [ao, bo] ta s


chn r1 (0.5 < r1 < 1) trong on con [a1 ,b1 ] = [a o , bo ] . Ta k hiu b1 = do v do co
[ao, do] nn ta c:
do - co = b1 - d1
(1)
T s ro c chn sao cho do - ao = ro(bo - ao) v co - ao = (1 -ro)(bo - ao) v thay th:
do - co = (do - ao) - (co - ao)
do - co = ro(bo - ao) - (1 - ro)(bo - ao)
do - co = (2ro - 1)(bo - ao)
(2)
v r1 c chn sao cho:
b1 - d1 = (1 - r1)(b1 - a1)
(3)
Thay (2) v (3) vo (1) ta c:
(2ro - 1)(bo - ao) = (1 - r1)(b1 - a1)
(4)
Nh vy on [a, b] b co ngn bng h s ro v (b1 - a1) = ro(bo - ao) v:
(2ro - 1)(bo - ao) = (1 - r1)ro(bo - ao)
(5)
Rt gn ta c:
(2ro - 1) = (1 - r1)ro
(6)
T (6) ta tnh c r1:
1 ro
r1 =
(7)
ro
f
Trong (7), thay ro = n 1 ta c:
fn
f
1 n 1
f f
f
fn
= n n 1 = n 2
r1 =
fn 1
fn 1
fn 1
fn
Ta rt ra rng thut ton tm Fibonacci c th bt u bng:
f
f
ro = n 1
r1 = n2
fn
fn 1
v:
f
rk = n 1k , k = 1, 2,..., n - 3
fn k
Bc cui cng l:
f 1
rn3 = 2 =
f3 2
412

Thut ton tm Fibonacci gm (n - 2) ln tnh. on con th (k+1) c c bng cch


f
gim di ca on th k bng h s rk = n 1k . Sau (n - 2) ln tnh, di ca
fn k
bc cui cng l:
fn 1 fn 2 fn 3 f3 f3
f
1
(bo a o ) = 2 (bo a o ) = (bo a o )
"
fn fn 1 fn 2 f4 f3
fn
fn
1
Nu sai s cho trc l , ngha l (bo a o ) < v cn dng n ln lp vi n l s
fn
nguyn nh nht sao cho:
b ao
(8)
fn > o

Cc im bn trong ck v dk c xc nh bng:

f
c k = a k + 1 + n 1k (b k a k )
(9)
f
nk

f
d k = a k +1 + n1k (b k a k )
(10)
fn k
Ta xy dng hm fibonacci() thc hin thut ton trn:
function [x, y] = fibonacci(f, a, b, n)
% Phuong phap Fibonacci de tim cuc tieu cua
% ham f trong (a, b) voi n buoc tinh
fn2 = 1;
fn1 = 1;
fn = fn1 + fn2;
for i = 3:n
fn2 = fn1;
fn1 = fn;
fn = fn1 + fn2;
end
l = (b - a)*fn2/fn;
x1 = a + l;
x2 = b - l;
f1 = feval(f, x1);
f2 = feval(f,x2);
fibn = fn;
ll1 = b - a;
for j = 3:n
llj = ll1*fn2/fibn;
fn = fn1;
fn1 = fn2;
413

fn2 = fn - fn1;
if f2 > f1
b = x2;
l = (b - a)*fn2/fn;
x2 = x1;
x1 = a + l;
f2 = f1;
f1 = feval(f, x1);
else
a = x1;
l = (b - a)*fn2/fn;
x1 = x2;
x2 = b - l;
f1 = f2;
f2 = feval(f, x2);
end
end
x = x1; y = f1;
tm cc tiu ca hm trong on (a, b) ta dng chng trnh ctfibonacci.m:
clear all, clc
f = inline('1.6*x^2 - 3*x + 2');
a = -0.;
b = 1;
n = 50;
[x, y] = fibonacci(f, a, b, n)

414

CHNG 9: PHNG TRNH VI PHN O HM RING


1. KHI NIM CHUNG
Phng trnh vi phn o hm ring(PDE) l mt lp cc phng trnh vi phn
c s bin c lp ln hn 1. Trong chng ny ta s kho st cc phng trnh vi
phn o hm ring cp 2 vi hai bin c lp x v y, c dng tng qut:

2u
2u
2u
u u
A(x,y) 2 + B(x,y)
(1)
+ C(x, y) 2 = f x,y,u, ,
x
y
x
xy
y

vi xo x xf, yo y yf v cc iu kin bin:


u(x,y o ) = b yo (x)
u(x,y f ) = b yf (x)

u(xo ,y) = bxo (y)


u(xf ,y) = bxf (y)
(2)
Cc PDE c phn thnh 3 loi:
PDE elliptic:
B2 4AC < 0
B2 4AC = 0
PDE parabolic:
PDE hyperbolic: B2 4AC > 0
Cc phng trnh ny gn mt cch tng ng vi trng thi cn bng, trng thi
truyn nhit, h thng dao ng
2. PHNG TRNH ELLIPTIC
Ta xt phng trnh Helmholz:
2 u(x,y) 2 u(x,y)
2
u(x,y) + g(x, y) =
+
+ g(x,y)u(x,y) = f(x,y)
x 2
y 2

(1)

trn min D = {(x,y) : xo x xf ,y o y y f } vi iu kin bin dng:


u(x,y o ) = b yo (x)
u(x, y f ) = b yf (x)

(2)
u(xo ,y) = b xo (y)
u(xf ,y) = b xf (y)
Phng trnh (1) c gi l phng trnh Poisson nu g(x, y) = 0 v gi l phng
trnh Laplace nu g(x, y) = 0 v f(x, y) = 0. dng phng php sai phn ta chia
min thnh Mx on, mi on di x = (xf - xo)/Mx dc theo trc x v thnh My on,
mi on di y = (yf - yo)/My dc theo trc y v thay o hm bc 2 bng xp x 3
im:
u i ,j+1 2u i ,j + u i ,j1
2 u(x,y)
vi xj = xo + jx, yj = yo + jy
(3.a)

x 2 x j ,yi
x 2

u i+1,j 2u i ,j + u i1,j
2 u(x,y)

vi ui,j = u(xj, yi)


y 2 x ,y
x 2
j

(3.b)

Nh vy ti mi im bn trong (xj, xi) vi 1 i My - 1 v 1 j Mx - it nhn c


phng trnh sai phn:
416

u i ,j+1 2u i ,j + u i ,j1
x 2

u i+1,j 2u i ,j + u i1,j
y 2

= g i ,ju i ,j = fi ,j

(4)

Trong :
ui,j = u(xj, yi) fi,j = f(xj, yi)
gi,j = g(xj, yi)
Cc phng trnh ny sp xp li theo cch no thnh h phng trnh vi (My 1)(Mx - 1) bin

{u

1,1

,u1,2 ,...,u1,Mx 1 ,u 2 ,1 ,...,u 2 ,Mx 1 ,...,u M y 1,2 ,...,u M y 1,Mx 1 . d

dng ta vit li phng trnh v iu kin bin di dng:


u i ,j = ry (u i ,j+1 + u i ,j1 ) + rx (u i+1,j + u i1,j ) + rxy (g i ,ju i ,j fi ,j )

(5a)

u i ,o = b xo (y i )

(5b)

u i ,Mx = b xf (y i )

u o ,j = b yo (x j )

u My ,j = b yf (x j )

Trong :

y 2
x 2 y 2
x 2
ry =
rxy =
rx =
(6)
2( x 2 + y 2 )
2( x 2 + y 2 )
2( x 2 + y 2 )
By gi ta kho st tip cc dng iu kin bin. Cc bi ton PDE c 2 loi iu kin
bin: iu kin bin Neumann v iu kin bin Dirichlet. iu kin bin Neumann
m t bng:
u(x,y)
= bxo (y)
(7)
x x=xo
Thay o hm bc 1 bin tri (x = xo) bng xp x 3 im:
u i ,1 u i ,1
= bxo (y i )
u i ,1 u i ,1 2bxo (y i )x i = 1, 2,..., My-1 (8)
2 x
Thay th rng buc ny vo (5a) cc im bin ta c:
u i ,0 = ry (u i ,1 + u i ,1 ) + rx (u i+1,0 + u i1,0 ) + rxy (g i ,0 u i ,0 fi ,0 )
= ry u i ,1 + u i ,1 2bx0 (y i )x + rx (u i+1,0 + u i1,0 ) + rxy (g i ,0 u i ,0 fi ,0 )
= 2ry u i ,1 + rx (u i+1,0 + u i1,0 ) + rxy g i ,0 u i ,0 fi ,0 2bx0 (y i )x

(9)

Nu iu kin bin trn bin di (y = yo) cng l kiu Neumann ta s vit cc


phng trnh tng t vi j = 1, 2,...,Mx-1:
u 0 ,j = 2rx u1,j + ry (u 0 ,j+1 + u 0 ,j1 ) + rxy g 0 ,j u 0 ,j f0 ,j 2by0 (x j )y
(10)
v b sung cho gc di tri(xo, yo):
by (x0 )
bx (y 0 )

+2 0
(11)
u 0 ,0 = 2(ry u 0 ,1 + rx u1,0 ) + rxy g 0 ,0 u 0 ,0 f0 ,0 2 0

x
y

iu kin bin Dirichlet cho gi tr hm trn bin nn c th thay trc tip vo


phng trnh. Ta c th ly gi tr trung bnh ca cc gi tr bin lm gi tr u ca
ui,j. Ta xy dng hm poisson() thc hin thut ton ny:
function [u, x, y] = poisson(f, g, bx0, bxf, by0, byf, D, Mx, My, tol, maxiter)
% giai a(u_xx + u_yy + g(x,y)u = f(x,y)
417

% tren mien D = [x0, xf, y0, yf] = {(x,y) |x0 <= x <= xf, y0 <= y <= yf}
% voi dieu kien bien:
% u(x0,y) = bx0(y), u(xf,y) = bxf(y)
% u(x,y0) = by0(x), u(x,yf) = byf(x)
% Mx - so doan con tren truc x
% My - so doan con tren truc y
% tol : sai so cho phep
% maxiter: so lan lap
x0 = D(1);
xf = D(2);
y0 = D(3);
yf = D(4);
dx = (xf - x0)/Mx;
x = x0 + [0:Mx]*dx;
dy = (yf - y0)/My;
y = y0 + [0:My]'*dy;
Mx1 = Mx + 1;
My1 = My + 1;
%dieu kien bien
for m = 1:My1
u(m, [1 Mx1]) = [bx0(y(m)) bxf(y(m))];
end
for n = 1:Mx1
u([1 My1], n) = [by0(x(n)); byf(x(n))];
end
sumbv = sum(sum([u(2:My, [1 Mx1]) u([1 My1], 2:Mx)']));
u(2:My, 2:Mx) = sumbv/(2*(Mx + My - 2));
for i = 1:My
for j = 1:Mx
F(i, j) = f(x(j), y(i));
G(i, j) = g(x(j), y(i));
end
end
dx2 = dx*dx;
dy2 = dy*dy;
dxy2 = 2*(dx2 + dy2);
rx = dx2/dxy2;
ry = dy2/dxy2;
rxy = rx*dy2;
for itr = 1:maxiter
for j = 2:Mx
for i = 2:My
418

u(i, j) = ry*(u(i, j + 1)+u(i,j - 1)) + rx*(u(i + 1,j)+u(i - 1,j))...


+ rxy*(G(i,j)*u(i,j)- F(i,j)); %Pt.(5a)
end
end
if itr > 1 & max(max(abs(u - u0))) < tol
break;
end
u0 = u;
end
Ta gii phng trnh Laplace:
2 u(x,y) 2 u(x, y)
2
u(x, y) =
+
=0
x 2
y 2
trong min 0 x 4, 0 y 4 vi iu kin bin:
u(0,y) = e y cosy
u(4,y) = e x cos4 e 4cosy

(vd1)
(vd2)

u(x,0) = cosxe x
u(x,4) = e 4 cosxe xcos4
(vd3)
Ta mun nhn c u(x, y), m t phn b nhit trn mt tm vung mi cnh di
4 n v. Ta dng chng trnh ctpoisson.m gi hm poisson() gii bi ton ny.
clear all, clc
f = inline('0','x','y');
g = inline('0','x','y');
x0 = 0;
xf = 4;
Mx = 20;
y0 = 0;
yf = 4;
My = 20;
bx0 = inline('exp(y) - cos(y)','y'); %(vd.2a)
bxf = inline('exp(y)*cos(4) - exp(4)*cos(y)','y'); %(vd.2b)
by0 = inline('cos(x) - exp(x)','x'); %(vd.3a)
byf = inline('exp(4)*cos(x) - exp(x)*cos(4)','x'); %(vd.3b)
D = [x0 xf y0 yf];
maxiter = 500;
tol = 1e-4;
[U, x, y] = poisson(f, g, bx0, bxf, by0, byf, D, Mx, My, tol, maxiter);
clf
mesh(x, y, U)
axis([0 4 0 4 -100 100])
3. PHNG TRNH PARABOLIC
419

1. Dng phng trnh: Mt phng trnh vi phn o hm ring dng parabolic l


phng trnh m t s phn b nhit im x ti thi im t ca mt thanh:
2 u(x,t) u(x,t)
(1)
A
=
x 2
t
phng trnh c th gii c ta phi cho iu kin bin u(0, t) = b0(t),
u(xf ,t) = bxf (t) v iu kin u u(x, 0) = i0(x)
2. Phng php Euler tin tng minh: p dng phng php sai phn hu hn,
ta chia min khng gian [0, xf] thnh M on, mi on di x = xf / M v chia thi
gian T thnh N phn, mi phn l t = T/N. Sau ta thay o hm bc 2 v tri v
o hm bc v phi ca (1) bng cc xp x 3 im v nhn c:
u ik+1 2u ik + u ik1 u ik+1 u ik
(2)
A
=
x 2
t
Cng thc ny c th gi gn vo thut ton sau, gi l thut ton Eul tin tng
minh:
t
(3)
u ik+1 = r(u ik+1 + u ik1 ) + (1 2r)u ik r = A 2
x
i = 1, 2,...,M-1
tm iu kin n nh ca thut ton, ta thay nghim th:
ji
P

u = e
vi P l s nguyn khc zero vo phng trnh (3) v c:
j
j

P
= r e + e P + (1 2r) = 1 2r 1 cos
P

Do ta phi c || 1 vi bi ton khng c ngun nn iu kin n nh l:


t 1
r=A 2
x
2
Ta xy dng hm fwdeuler() thc hin thut ton trn
k
i

(4)
(5)

(6)

function [u, x, t] = fwdeuler(a, xf, T, it0, bx0, bxf, M, N)


%giai au_xx = u_t voi 0 <= x <= xf, 0 <= t <= T
% dieu kien dau: u(x,0) = it0(x)
ieu kien bien: u(0,t) = bx0(t), u(xf,t) = bxf(t)
% M - so doan con theo x
% N - so diem theo t
dx = xf/M;
x = [0:M]'*dx;
dt = T/N;
t = [0:N]*dt;
for i = 1:M + 1
u(i,1) = it0(x(i));
420

end
for n = 1:N + 1
u([1 M + 1], n) = [bx0(t(n)); bxf(t(n))];
end
r = a*dt/dx/dx
r1 = 1 - 2*r;
for k = 1:N
for i = 2:M
u(i, k+1) = r*(u(i + 1, k) + u(i-1, k)) + r1*u(i, k); %Pt.(3)
end
end
3. Phng php Euler li n: Ta kho st mt thut ton khc gi l thut ton Euler
li, n sinh ra do thay th li xp x o hm i vi o hm bc 1 trn v phi ca
(1):
u ik+1 2u ik + u ik1 u ik u ik1
(7)
A
=
x 2
t
t
ru ik1 + (1 + 2r)u ik ru ik+1 = u ik 1 r = A 2
(8)
x
k
c hai u cho trc t iu kin bin kiu Dirichlet
Nu cc gi tr u 0k v u M
nn phng trnh (8) a ti h phng trnh:
k
k 1
k
1 + 2r
r
0
0
0
0 u1 u1 + ru 0

k
k 1
u
u
r
1
2r
r
0
0
0

2
k
k 1

1 + 2r
0
0
r
r
u3
u3

(9)

=
#
#
#
#
# #

#
#
k

k 1
"
0
0
1
2r
r
+

u
u

M2
M 2
0
"
r
0
0
1 + 2r u k u k1 + ru k
M

M1 M 1
u
iu kin bin Neumann
= b0 (t) c a vo phng trnh bng cch xp x:
x x=0
u1k u k1
= b0 (k)
(10)
2 x
v ghp n vi phng trnh c n u 0k :

ru k1 + (1 + 2r)u 0k ru1k = u 0k 1
c c phng trnh:
(1 + 2r)u 0k 2ru1k = u 0k 1 2rb0 (k)x
Kt qu ta c c h phng trnh:

(11)
(12)

421

1 + 2r
0
0
r

1 + 2r
0
r
r
0
1 + 2r
r
r

0
1 + 2r
r
0
#
#
#
#

0
0
0
0
0
0
0
0

"
"
"
"
#
"
"

0 u 0k u 0k 2rb0 (k)x

k 1
0
0 u1k
u
1


k
k 1

0
0 u2
u2

k
0
0 u3 =
u k3 1
(13

0 #
r
#

k 1
1 + 2r
r u 0k
uM

2
k
k 1
k

1 + 2r u 0 u M 1 + ru M
r
0

iu kin n nh ca nghim l:
j
j

1
re P + (1 + 2r) re P =

1
hay: =
1

1 + 2r 1 cos
P

Ta xy dng hm backeuler() thc hin thut ton ny:

(14)

function [u, x, t] = backeuler(a, xf, T, it0, bx0, bxf, M, N)


%Giai au_xx = u_t voi 0 <= x <= xf, 0 <= t <= T
% Dieu kien dau: u(x,0) = it0(x)
% ieu kien bien: u(0,t) = bx0(t), u(xf,t) = bxf(t)
% M - so khoang con tren truc x
% N - so khoang theo t
dx = xf/M;
x = [0:M]'*dx;
dt = T/N;
t = [0:N]*dt;
for i = 1:M + 1
u(i, 1) = it0(x(i));
end
for n = 1:N + 1
u([1 M + 1], n) = [bx0(t(n)); bxf(t(n))];
end
r = a*dt/dx/dx;
r2 = 1 + 2*r;
for i = 1:M - 1
A(i, i) = r2; %Pt.(9)
if i > 1
A(i - 1, i) = -r;
A(i, i - 1) = -r; end
422

end
for k = 2:N + 1
b = [r*u(1, k); zeros(M - 3, 1); r*u(M + 1, k)] + u(2:M, k - 1); %Pt.(9)
u(2:M, k) = trid(A, b);
end
4. Phng php Crank - Nicholson: Trong (7), xp x o hm v tri ly thi
im k, trong khi xp x o hm v phi. ci thin, ta ly o hm v tri l
trong bnh ca xp x o hm ti hai im l k v k+1 v c:
A u ik++11 2u ik+1 + u ik+11 u ik+1 2u ik + u ik1 u ik+1 u ik
+
(15)
=
x 2
x 2
t
2

v nhn c phng php Crank - Nicholson:


t
ru ik++11 + (1 + 2r)u ik+1 ru ik+11 = ru ik+1 + (1 2r)u ik + ru ik1 r = A 2 (16)
x
Vi iu kin bin Dirichlet ti x0 v iu kin bin Neumann ti xM ta c h phng
trnh:
k +1
2(1 + r)
0
0
0
0 u1
r

k +1
r
2(1
r)
r
0
0
0

u2
0
2(1 + r)
0
0 u k3 +1
r
r

#
#
#
#
#
#

0
0
0
2(1 + r)
"
r u k +1

M 1
0
0
0
2(1 + r) u k +1
"
r

M
k
2(1 r)
r
0
0
0
0 u1

k
2(1 r)
r
0
0
0 u2
r
0
r
2(1 r)
r
0
0 u k3

=
#
#
#
#
# #
#

"
0
0
2(1 r)
r u k
0
M 1
0
"
0
0
r
2(1 r) u k

M
k +1
k

r(u 0 + u 0 )

0
(17)
+

2r [ bM (k + 1) + bM (k)]
423

iu kin n nh c xc nh bng:

2 1 + r 1 cos = 2 1 r 1 cos
P
P

1 r 1 cos
P

hay: =
1

1 + r 1 cos
P

Ta xy dng hm cranknicholson() thc hin thut ton trn:

(18)

function [u, x, t] = cranknicholson(a, xf, T, it0, bx0, bxf, M, N)


%Giai au_xx = u_t voi 0 <= x <= xf, 0 <= t <= T
% Dieu kien dau: u(x,0) = it0(x)
% Dieu kien bien: u(0, t) = bx0(t), u(xf, t) = bxf(t)
% M - so khoang con tren truc x
% N - so khoang theo t
dx = xf/M;
x = [0:M]'*dx;
dt = T/N;
t = [0:N]*dt;
for i = 1:M + 1
u(i, 1) = it0(x(i));
end
for n = 1:N + 1
u([1 M + 1], n) = [bx0(t(n)); bxf(t(n))];
end
r = a*dt/dx/dx;
r1 = 2*(1 - r);
r2 = 2*(1 + r);
for i = 1:M - 1
A(i, i) = r2; %Pt.(17)
if i > 1
A(i - 1, i) = -r;
A(i, i - 1) = -r;
end
end
for k = 2:N + 1
b = [r*u(1, k); zeros(M - 3, 1); r*u(M + 1, k)] ...
+ r*(u(1:M - 1, k - 1) + u(3:M + 1, k - 1)) + r1*u(2:M, k - 1);
u(2:M, k) = trid(A,b); %Pt.(17)
end
424

gii phng trnh:


2 u(x,t) u(x,t)
=
0 x 1, 0 t 0.1
x 2
t
vi iu kin u:
u(x, 0) = sinx
u(0, t) = 0 u(1, t) = 0
Nh vy vi x = xf/M = 1/20 v t = T/N = 1/100 ta c:
t
0.001
r = A 2 = 1.
= 0.4
x
0.052
Ta dng chng trnh ctheat.m tm nghim ca (vd1):

(vd1)
(vd2)
(vd3)

clear all, clc


a = 1; %cac thong so cua (vd1)
it0 = inline('sin(pi*x)','x'); %dieu kien dau
bx0 = inline('0');
bxf = inline('0');%dieu kien bien
xf = 1;
M = 25;
T = 0.1;
N = 100;
[u1, x, t] = fwdeuler(a, xf, T, it0, bx0, bxf, M, N);
figure(1), clf, mesh(t, x, u1)
[u2, x, t] = backeuler(a, xf, T, it0, bx0, bxf, M, N);
figure(2), clf, mesh(t, x, u2)
[u3, x, t] = cranknicholson(a, xf, T , it0, bx0, bxf, M, N);
figure(3), clf, mesh(t, x, u3)
4. PDE parabolic 2 chiu: Ta xt bi ton phng trnh vi phn o hm ring
parabolic hai chiu m t s phn b nhit u(x, y, t):
2 u(x,y,t) 2 u(x,y,t) u(x, y,t)
A
+
(19)
=
2
2
x
y
t

phng trnh c th gii c ta cn cho iu kin bin:


u(x0 ,y,t) = b x0 (y,t)
u(xf ,y,t) = b xf (y,t)

u(x, y 0 ,t) = b y0 (x,t)


u(x,y f ,t) = b yf (x,t)
v iu kin u u(x, y, 0) = i0(x, y)
Ta thay o hm bc 1 theo t v phi bng sai phn 3 im ti im gia (tk+1 + tk)/2
nh phng php Crank - Nicholson. Ta cng thay th mt trong cc o hm bc hai
uxx v uyy bng xp x 3 im ti thi im tk v o hm kia ti tk+1 v c:
u ik,j+1 2u ik,j + u ik,j1 u ik,j+1 2u ik,j + u ik,j1 u ik,j+1 u ik,j
(20)
A

=
2
2

x
x
t

425

Ta vit phng trnh ti thi im tip theo tk+1:


u ik,j++11 2u ik,j+1 + u ik,j+11 u ik,j+1 2u ik,j + u ik,j1 u ik,j+ 2 u ik,j+1
(21)
A

=
2
2

x
x
t

Cng thc ny, c Peaceman v Rachford a ra, l phng php n v to nn h


phng trnh:
ry u ik+1,j1 + u ik++1,j1 + (1 + 2ry )u ik,j+1 = rx u ik,j1 u ik,j+1 + (1 2rx )u ik,j
(22a)

vi 0 j Mx - 1
rx u ik,j+21 + u ik,j++21 + (1 + 2rx )u ik,j+ 2 = ry u ik+1,j1 u ik++1,j1 + (1 2ry )u ik,j+1

vi 0 i My - 1
t
v: rx = A 2
x
x x0
x = f
Mx

t
y 2
y y0
y = f
My

(22b)

ry = A

t =

T
N

Ta xy dng hm heat2D() thc hin thut ton ny:


function [u, x, y, t] = heat2D(a, D, T, ixy0, bxyt, Mx, My, N)
% Giai au_t = c(u_xx + u_yy) voi D(1) <= x <= D(2), D(3) <= y <= D(4), 0
<= t %<= T
% Dieu kien dau: u(x, y, 0) = ixy0(x, y)
% Dieu kien bien: u(x, y, t) = bxyt(x, y, t) voi (x, y)cB
% Mx/My - cac doan co doc theo truc x/y
% N - cac khoang thoi gian
dx = (D(2) - D(1))/Mx;
x = D(1) + [0:Mx]*dx;
dy = (D(4) - D(3))/My;
y = D(3) + [0:My]'*dy;
dt = T/N;
t = [0:N]*dt;
%Khoi gan
for j = 1:Mx + 1
for i = 1:My + 1
u(i, j) = ixy0(x(j), y(i));
end
end
rx = a*dt/(dx*dx);
rx1 = 1 + 2*rx;
rx2 = 1 - 2*rx;
ry = a*dt/(dy*dy);
ry1 = 1 + 2*ry;
426

ry2 = 1 - 2*ry;
for j = 1:Mx - 1 %Pt.(22a)
Ay(j, j) = ry1;
if j > 1
Ay(j - 1, j) = -ry;
Ay(j, j-1) = -ry;
end
end
for i = 1:My - 1 %Pt.(22b)
Ax(i,i) = rx1;
if i > 1
Ax(i - 1, i) = -rx;
Ax(i, i - 1) = -rx;
end
end
for k = 1:N
u_1 = u;
t = k*dt;
for i = 1:My + 1 %Dieu kien bien
u(i, 1) = feval(bxyt, x(1), y(i), t);
u(i, Mx+1) = feval(bxyt, x(Mx+1), y(i), t);
end
for j = 1:Mx + 1
u(1, j) = feval(bxyt, x(j), y(1), t);
u(My+1, j) = feval(bxyt, x(j), y(My + 1), t);
end
if mod(k, 2) == 0
for i = 2:My
jj = 2:Mx;
bx = [ry*u(i, 1) zeros(1, Mx - 3) ry*u(i, My + 1)] ...
+rx*(u_1(i-1,jj)+ u_1(i + 1,jj)) + rx2*u_1(i,jj);
u(i, jj) = trid(Ay, bx')'; %Pt.(22a)
end
else
for j = 2:Mx
ii = 2:My;
by = [rx*u(1, j); zeros(My-3,1); rx*u(Mx + 1,j)] ...
+ ry*(u_1(ii, j-1) + u_1(ii, j + 1)) + ry2*u_1(ii, j);
u(ii, j) = trid(Ax, by); %Pt.(22b)
end
end
end
427

Ta xt phng trnh:
2
2 u(x,y,t) u(x,y,t)
4 u(x,y,t)
+
10
=
2
2
x
y

trong min: 0 x 4, 0 y 4 v trong khong thig gian 0 t 5000


iu kin u:
u(x, y, 0) = 0
v iu kin bin:
eycosx - excosy ti x = 0, x = 4; y = 0, y = 4
Chng trnh chng trnh ctheat2D.m dng gii phng trnh l:

(vd1)

(vd2a)
(vd2b)

clear, clc, clf


a = 1e-4;
it0 = inline('0','x','y'); %(vd2a)
bxyt = inline('exp(y)*cos(x)-exp(x)*cos(y)','x','y','t'); %(vd.2b)
D = [0 4 0 4];
T = 5000;
Mx = 40;
My = 40;
N = 50;
[u, x, y, t] = heat2D(a, D, T, it0, bxyt, Mx, My, N);
mesh(x, y, u)
4. PHNG TRNH HYPERBOLIC
1. Dng phng trnh: Phng trnh truyn sng mt chiu l PDE dng hyperbolic:
2 u(x,t) 2 u(x,t)
(1)
A
=
x 2
t 2
0 x x f, 0 t T
iu kin bin:
u(0, t) = b0(t), u(xf ,t) = b xf (t)
v iu bin:
u
u(x, 0) = i0(x),
= i0 (x)
t t =0
phi c cho trc phng trnh c th gii c
2. Phng php sai phn tng minh: Tng t nh khi gii PDE dng parabolic,
ta thay o hm bc hai hai v ca (1) bng sai phn 3 im:
u k 2u ik + u ik1 u ik +1 2u ik + u ik 1
(2)
A i +1
=
x 2
t 2
x
T
x = f
t =
M
N
428

v c c phng php sai phn tng minh:


u ik +1 = r ( u ik+1 + u ik1 ) + 2(1 r)u ik u ik1

(3)

t 2
vi: r = A 2
x
1
V u i = u(x i , t) khng cho trc nn ta khng th dng trc tip u1i t (3) vi k =
0:
u1i = r ( u i0+1 + u i01 ) + 2(1 r)u i0 u i1
(4)
Nh vy, ta xp x iu kin u v o hm bng sai phn:
u1i u i1
= i0 (xi )
2 t
v rt ra u i1 a vo (3):

(5)

u1i = r ( u 0i+1 + u i01 ) + 2(1 r)u i0 u1i 2i0 (x i )t

1
u1i = r ( u 0i+1 + u 0i1 ) + (1 r)u i0 + i0 (xi )t
(6)
2
Ta dng (6) cng vi iu kin u c u1i v ri thay vo (3). Ch l:
r 1 bo m n nh
chnh xc ca nghim tng khi r tng cho x gim
Hp l nht l ly r = 1. iu kin n nh c th nhn c bng cch thay (4) vo
(3):
1

= 2rcos + 2(1 r)
P

hay: 2 + 2 r 1 cos 1 + 1 = 0
P

Nh vy:
1
t 2
r
r =A 2 1
x

1 cos
P

Ta xy dng hm wave() thc hin thut ton trn:


function [u, x, t] = wave(a, xf, T, it0, i1t0, bx0, bxf, M, N)
% giai au_xx = u_tt voi 0<=x<=xf, 0<=t<=T
% dieu kien dau: u(x,0) = it0(x), u_t(x, 0) = i1t0(x)
% dieu kien bien: u(0, t)= bx0(t), u(xf, t) = bxf(t)
% M - khoang chia theo x
% N - khoang chia teo t
dx = xf/M;
x = [0:M]'*dx;
429

dt = T/N;
t = [0:N]*dt;
for i = 1:M + 1
u(i,1) = it0(x(i));
end
for k = 1:N + 1
u([1 M + 1],k) = [bx0(t(k)); bxf(t(k))];
end
r = a*(dt/dx)^2;
r1 = r/2;
r2 = 2*(1 - r);
u(2:M, 2) = r1*u(1:M - 1, 1) + (1 - r)*u(2:M, 1) + r1*u(3:M + 1, 1) ...
+ dt*i1t0(x(2:M)); %Pt.(6)
for k = 3:N + 1
u(2:M, k) = r*u(1:M - 1, k - 1) + r2*u(2:M, k-1) + r*u(3:M + 1, k - 1)...
- u(2:M,k - 2); %Pt.(3)
end
Ta xt phng trnh:
2 u(x,t) 2 u(x,t)
=
x 2
t 2
0 x 2, 0 t 2
iu kin u v iu kin bin:

u
=0
t t =0
u(0,t) = 0
u(1, t) = 0
Ta dng chng trnh ctwave.m gii phng trnh ny:

u(x, 0) = x(1 - x)

(vd1)

(vd2a)
(vd2b)

clear all, clc


a = 1;
it0 = inline('x.*(1-x)','x');
i1t0 = inline('0'); %(vd2a)
bx0t = inline('0');
bxft = inline('0'); %(vd2b)
xf = 1;
M = 20;
T = 2;
N = 50;
[u,x,t] = wave(a, xf, T, it0, i1t0, bx0t, bxft, M, N);
figure(1), clf
mesh(t, x, u)
430

figure(2), clf
for n = 1:N %hinh dong
plot(x, u(:, n)), axis([0 xf -0.3 0.3]), pause(0.2)
end
4. PDE hyperbolic 2 chiu: Phng trnh truyn sng hai chiu l PDE dng
hyperbolic:
2 u(x,y,t) 2 u(x,y,t) 2 u(x,y,t)
(8)
A
+
=
2
2
2

x
y
t

0 x x f, 0 y y f, 0 t T
iu kin bin:
u(0,y,t) = bx0 (y,t)
u(xf , y,t) = b xf (y,t)

u(x,0,t) = b y0 (x,t)
v iu bin:

u(x,y f ,t) = b yf (x,t)

u(x,y)
= i0 (x, y)
t
t =0
Tng t nh hm mt bin, ta thay o hm bc 2 bng xp x 3 im:
u ik,j+1 2u ik,j + u ik,j1 u ik+1,j 2u ik,j + u ik1,j u ik,j+1 2u ik,j + u ik,j1
+
A
=
2
2

t 2
x
y

y
x
T
x = f
y = f
t =
Mx
N
My
u(x,y,0) = i 0 (x,y)

v nhn i n phng php tng minh:


u ik,j+1 = rx u ik,j+1 + u ik,j1 + 2(1 r x ry )u ik,j + ry u ik+1,j + u ik1,j u ik,j1

(9)

(10)

vi:

t 2
t 2
r
A
=
y
y 2
x 2
V u i,j1 = u(xi ,y i , t) khng cho trc nn ta khng th dng trc tip u1i,j t (10)
vi k = 0:
u1i ,j = rx u 0i ,j+1 + u 0i ,j1 + 2(1 rx ry )u i0,j + ry u i0+1,j + u 0i1,j u i,j1
(11)
rx = A

Nh vy, ta xp x iu kin u v o hm bng sai phn:


u1i ,j u i,j1
= i0 (x j ,y i )
2 t
v rt ra u i,j1 a vo (11):

(12)

431

1
rx u 0i ,j+1 + u 0i ,j1 + ry u 0i+1,j + u 0i1,j

2
+ 2(1 rx ry )u i0,j + i0 (x j ,y i )t

u1i ,j =

(13)

iu kin n nh:
4At 2
r= 2
1
x + y 2
Ta xy dng hm wave2D() thc hin thut ton trn:
function [u,x,y,t] = wave2D(a, D, T, it0, i1t0, bxyt, Mx, My, N)
% giai a(u_xx + u_yy) = u_tt voi D(1) <= x <= D(2), D(3) <= y <= D(4), 0
<= t %<= T
% dieu kien dau: u(x,y,0) = it0(x,y), u_t(x,y,0) = i1t0(x,y)
% dieu kien bien: u(x,y,t) = bxyt(x,y,t) voi (x,y) tren bien
% Mx/My - so khoang chia tren truc x/y
% N - so khoang chai theo t
dx = (D(2) - D(1))/Mx;
x = D(1) + [0:Mx]*dx;
dy = (D(4) - D(3))/My;
y = D(3) + [0:My]'*dy;
dt = T/N; t = [0:N]*dt;
%khoi gan
u = zeros(My+1, Mx + 1);
ut = zeros(My + 1, Mx + 1);
for j = 2:Mx
for i = 2:My
u(i, j) = it0(x(j), y(i));
ut(i, j) = i1t0(x(j), y(i));
end
end
adt2 = a*dt*dt;
rx = adt2/(dx*dx);
ry = adt2/(dy*dy);
rxy1 = 1- rx - ry;
rxy2 = rxy1*2;
u_1 = u;
for k = 0:N
t = k*dt;
for i = 1:My + 1 %dieu kien bien
u(i, [1 Mx + 1]) = [bxyt(x(1), y(i),t) bxyt(x(Mx + 1), y(i),t)];
end
for j = 1:Mx + 1
432

u([1 My + 1], j) = [bxyt(x(j),y(1),t); bxyt(x(j),y(My + 1),t)];


end
if k == 0
for i = 2:My
for j = 2:Mx %Pt.(13)
u(i, j) = 0.5*(rx*(u_1(i, j - 1) + u_1(i, j + 1))...
+ ry*(u_1(i - 1,j)+u_1(i + 1,j))) + rxy1*u(i,j) + dt*ut(i,j);
end
end
else
for i = 2:My
for j = 2:Mx
u(i, j) = rx*(u_1(i, j - 1)+ u_1(i, j + 1))...
+ ry*(u_1(i - 1, j) + u_1(i + 1, j)) + rxy2*u(i, j) - u_2(i, j);
end
end
end
u_2 = u_1;
u_1 = u;
mesh(x, y, u), axis([0 2 0 2 -.1 .1])
pause(0.1);
end
Ta xt phng trnh:
1 2 u(x,y,t) 2 u(x,y,t) 2 u(x,t)
+

=
x 2
y 2
t 2
4

0 x 2, 0 y 2, 0 t 2
iu kin u v iu kin bin:
u(0, y, t) = 0 u(2, y, t) = 0
u(x, 0,t) = 0 u(x, 2,t) = 0
y
x
u
u(x,y,0) = 0.1sin sin
=0
t t =0
2
2
Ta dng chng trnh ctwave2D.m gii phng trnh ny:

(vd1)

(vd2)
(vd3)

clear all, clc


it0 = inline('0.1*sin(pi*x)*sin(pi*y/2)','x','y'); %(vd3)
i1t0 = inline('0','x','y');
bxyt = inline('0','x','y','t'); %(vd2)
a = .25;
D = [0 2 0 2];
T = 2;
Mx = 40;
433

My = 40;
N = 40;
[u, x, y, t] = wave2D(a, D, T, it0, i1t0, bxyt, Mx, My, N);
5. PHNG PHP PHN T HU HN (FEM) GII PDE
Phng php FEM dng tm nghim s ca PDE vi iu kin bin. Ta xt
mt PDE dng elliptic:
2 u(x,y) 2 u(x,y)
(1)
+
+ g(x,y)u(x, y) = f(x,y)
x 2
y 2
trong min D bao bi bin B v trn bin c cc iu kin:
u(x, y) = b(x, y) trn B
(2)
Cc bc dng FEM gii phng trnh gm:
) Chia min D thnh Ns min con {S1, S2,..., SNs} c dng hnh tam gic
) M t v tr ca Nn nt v nh s chng bt u t cc nt trn bin: n = 1,
2,..., Nb v cc nt bn trong: n = Nb + 1, Nb + 2,...,Nn
) Xc nh cc hm ni suy, hnh dng v c s:
n (x, y) = {n ,s s = 1,...,Ns } (x,y) D
(3a)
n ,s (x, y) = pn ,s (1) + pn ,s (2)x + pn ,s (3)y
(3b)
cho mi min Ss
i vi tt cc cc min con s = 1:Ns v cc nt n = 1:Nn sao cho n bng 1 ch
nt n v bng zero ti cc nt khc. Lc nghim xp x ca PDE l t hp
tuyn tnh ca cc hm c s n(x, y):
Nn

u(x,y) = [ c ] [ (x,y)] = c n n (x, y)


T

i =1
Nn

Nb

= c n n (x, y) +
i =1

i = N b +1

c n n (x,y)

= [ c1 ] [ 1 ] + [ c 2 ] [ 2 ]
T

Trong :
T
[1 ] = 1 2 " N b

[2 ] = N

b +1

N b +2 " N n

(4)

[c1 ] = c1
[c 2 ] = c N

c 2 " c N b

(5a)
T

b +1

c N b +2 " c N n (5b)

Vi mi min con , nghim ny c th vit di dng:


Nn

Nn

i =1

i =1

s (x, y) = c n n ,s (x, y) = c n pn ,s (1) + pn ,s (x) + pn ,s (3)y

(6)

) t cc gi tr ca h s nt bin trong [c1] bng cc gi tr bin tng ng


vi iu kin bin
) Xc nh tr s ca h s nt bn trong trong [c2] bng cch gii h phng
trnh:
[A2][c2] = [d]
(7)
434

trong :

Ns

[ A1 ] =

s =1

T
T



2 ,s 1,s + 2 ,s 1,s S s
x
y
y

x

Ns

{g(x ,y )
s

2 ,s

1,s

} S

(8)

s =1

1,s = 1,s 2 ,s " N b ,s


T

1,s = p1,s (2) p2 ,s (2) " pN b ,s (2)


x
T

1,s = p1,s (3) p2 ,s (3) " pN b ,s (3)


y

Ns

[ A2 ] =

s =1

T
T



2 ,s 2 ,s + 2 ,s 2 ,s S s
x
x
y
y

Ns

{g(x ,y )
s

2 ,s

2 ,s

} S

(9)

s =1

2 ,s = Nb +1,s Nb + 2 ,s " N n ,s
T

2 ,s = pNb +1,s (2) pNb + 2 ,s (2) " pN n ,s (2)


x
T

2 ,s = pNb +1,s (3) pNb + 2 ,s (3) " pN n ,s (3)


y
Ns

[d] = [ A1 ][c1 ] f(xs , ys )2 ,s S

(10)

s =1

(xs, ys) l trong tm ca min con Ss


FEM da trn nguyn tc l nghim ca (1) c th nhn c bng cch cc
tiu ho hm:

J=

u(x,y) + u(x,y)
y

g(x, y)u 2 (x,y) + 2f(x,y)u(x,y)} dxdy

(11)

Vi u(x, y) = [c]T[(x, y)] ta c:

J=
[c ]T [] [][ c ] + [c ]T [ ] [ ]T [c ]
x
x
y
y

{
R

435

g(x,y) [ c ] [ ][ ] [ c ] + 2f(x, y) [ c ] [ ] dxdy


T

(12)

iu kin hm ny cc tiu theo [c] l:


d

J=
[2 ] []T [c ] + []T [c ]
d [c2 ]
x
x
y

{
R

g(x,y)[ 2 ][ ] [ c ] + 2f(x,y) [ 2 ] dxdy = 0


T

Ns

[ A1 ][ c1 ] + [ A 2 ][ c 2 ] + f(xs ,y s ) 2 ,s S = 0

(13)
(14)

s =1

xy dng hm c s n ,s (x, y) th s i vi mi nt n = 1, 2,..., Nn v mi


min con s = 1, 2,...,Ns ta xy dng hm fembasisftn():
function p = fembasisftn(N, S)
%p(i,s,1:3): cac he so cua moi ham co so phi(i)
% cua mien tam giac(mien con) thu s
%N(n, 1:2) : x & y toa do cua nut thu n
%S(s, 1:3) :nut thu s cua mien con tam giac thu s
Nn = size(N, 1); % tong so nut
Ns = size(S, 1); % tong so cac nut cua mien con tam giac
for n = 1:Nn
for s = 1:Ns
for i = 1:3
A(i, 1:3) = [1 N(S(s, i), 1:2)];
b(i) = (S(s, i) == n); %ham co so thu n bang 1 chi o nut thu n
end
pnt = A\b';
for i = 1:3\
p(n, s, i) = pnt(i);
end
end
end
xc nh cc vec t h s [c] ca nghim (4) nh (7) v cc a thc nghim
s (x,y) nh (6) i vi mi min con s = 1, 2,..., Ns ta xy dng hm femcoef():
function [U, c] = femcoef(f, g, p, c, N, S, Ni)
%p(i,s,1:3): cac he so cua ham co so phi(i) cua mien con thu n
%c = [ .1 1 . 0 0 .] voi cac gia tri bien va 0 voi cac nut ben trong
%N(n, 1:2) : x & y toaj do cua nut thu n
%S(s,1:3) : nut thu s cua mien con thu s
%Ni : so nut ben trong
436

%U(s, 1:3) : cac he so cua p1 + p2(s)x + p3(s)y cua moi mien con
Nn = size(N, 1); % tong so nut bang Nb + Ni
Ns = size(S, 1); % tong so mien con
d = zeros(Ni, 1);
Nb = Nn - Ni;
for i = Nb+1:Nn
for n = 1:N_n
for s = 1:Ns
xy = (N(S(s, 1),:) + N(S(s, 2), :) + N(S(s, 3), :))/3; %trong tam
%phi(i,x)*phi(n,x) + phi(i,y)*phi(n,y) - g(x,y)*phi(i)*phi(n)
pvctr = [p([i n], s, 1) p([i n], s, 2) p([i n], s, 3)];
tmpg(s) = sum(p(i, s, 2:3).*p(n, s, 2:3))...
-g(xy(1), xy(2))*pvctr(1, :)*[1 xy]'*pvctr(2, :)*[1 xy]';
dS(s) = det([N(S(s, 1), :) 1; N(S(s, 2), :) 1;N(S(s, 3), :) 1])/2;
%dien tich mien con
if n == 1
tmpf(s) = -f(xy(1), xy(2))*pvctr(1,:)*[1 xy]';
end
end
A12(i - Nb, n) = tmpg*abs(dS)'; %Pt. (8),(9)
end
d(i-Nb) = tmpf*abs(dS)'; %Pt.(10)
end
d = d - A12(1:Ni, 1:Nb)*c(1:Nb)'; %Pt(10)
c(Nb + 1:Nn) = A12(1:Ni, Nb+1:Nn)\d; %Pt.(7)
for s = 1:Ns
for j = 1:3
U(s, j) = c*p(:, s, j); %Pt.(6)
end
end
Trc khi dng FEM gii mt PDE ta xem th hm c s(hm hnh dng) n(x, y)
i vi mi nt n = 1, 2,..., Nn c nh ngha i vi tt c cc min con hnh tam
gic sao cho n bng 1 ch ti nt n v bng 0 ti cc nt khc c to bi hm
fembasisfth() hot ng nh th no. Ta s v hm hnh dng ca min c chia
thnh 4 tam gic nh hnh sau:
1

n=2

n=1

S1
n=5

S4

S2

0
S3
n=4

n=3

Tocant: Sntmimincon
N=[11;

S=[125;
11;235;
11;345;
11;145];
437
00.5];

438

theo hai cch. Trc ht ta to cc hm c s bng cch dng hm fembasisftn() v


v mt hm trong s bng cch dng lnh MATLAB mesh() nh hnh a. Th hai,
khng to ra hm c s, ta dng lnh MATLAB trimesh() v cc hm hnh dng
cho cc nt n = 2, 3, 4 v 5 nh hnh b-e. Hnh f l th ca t hp tuyn tnh ca
cc hm c s:
Nn

u(x,y) = [ c ] [ (x,y)] = c n n (x, y)


T

(15)

n =1

c tr s cn ti mi nt n. Ta chy chng trnh ctshowbasic.m:


clear all, clc
N = [-1 1;1 1;1 -1;-1 -1;0.2 0.5]; %danh sach cac nut tren hinh 1
Nn = size(N,1); % so nut
S = [1 2 5; 2 3 5; 3 4 5; 1 4 5]; %danh sach ca mien con tren hinh 1
Ns = size(S,1); % so mien con
figure(1), clf
for s = 1:Ns
nodes = [S(s, :) S(s, 1)];
for i = 1:3
plot([N(nodes(i), 1) N(nodes(i + 1), 1)], ...
[N(nodes(i), 2) N(nodes(i+1),2)])
hold on
end
end
ins = [1 2 3 4 5]; %danh sach cac nut ma cac ham co so duoc ve
for itr = 1:5
in = ins(itr);
if itr == 1
for i = 1:length(xi)
for j = 1:length(yi)
Z(j, i) = 0;
for s = 1:Ns
if inpolygon(xi(i), yi(j), N(S(s, :), 1), N(S(s, :), 2)) > 0
Z(j, i) = p(in, s, 1) + p(in, s, 2)*xi(i) + p(in, s, 3)*yi(j);
break;
end
end
end
end
subplot(321), mesh(xi, yi, Z) %ham co so cua nut 1
else
c1 = zeros(size(c));
c1(in) = 1;
441

subplot(320 + itr)
trimesh(S,N(:,1),N(:,2),c1) %ham co so cua cac nut 2-5
end
end
c = [0 1 2 3 0]; %cac gia tri tai cac nut
subplot(326)
trimesh(S, N(:, 1),N(:, 2), c) %ham tong hop o hinh f
1

0.5

0.5

0
1

-1 -1

0
1

0.5

0.5

0
1

-1 -1

0
1

0.5

0
1

-1 -1

0
1

-1 -1

-1 -1

-1 -1

c = [0 1 2 3 0];
p = fembasisftn(N, S);
x0 = -1;
xf = 1;
y0 = -1;
yf = 1; %cac mien
figure(2), clf
Mx = 50;
My = 50;
dx = (xf - x0)/Mx;
dy = (yf - y0)/My;
xi = x0 + [0:Mx]*dx;
yi = y0 + [0:My]*dy;
V d: Gii phng trnh Laplace:
2 u(x, y) 2 u(x,y)
2
u(x, y) =
+
= f(x,y)
x 2
y 2

(1)
442

trn min 1 x 1; 1 y 1 vi:

1
vi(x,y)=(0.5,0.5)

f(x,y)= +1
vi(x,y)=(0.5,0.5)
0
ccchkhc

v iu kin bin l u(x, y) = 0 ti mi im trn bin.

(2)

gii bi ton ny bng FEM, ta xc nh 12 im trn bin v 19 im bn trong,


nh s chng v chia min ch nht thnh 36 min con hnh tam gic nh hnh v
trn. Tip theo ta xy dng chng trnh ctlaplace.m gii bi ton
clear all, clc
N = [-1 0;-1 -1;-1/2 -1;0 -1;1/2 -1; 1 -1;1 0;1 1;1/2 1; 0 1;
-1/2 1;-1 1; -1/2 -1/4; -5/8 -7/16;-3/4 -5/8;-1/2 -5/8;
-1/4 -5/8;-3/8 -7/16; 0 0; 1/2 1/4;5/8 7/16;3/4 5/8;
1/2 5/8;1/4 5/8;3/8 7/16;-9/16 -17/32;-7/16 -17/32;
-1/2 -7/16;9/16 17/32;7/16 17/32;1/2 7/16]; %nut
Nb = 12; %so nut tren bien
443

S = [1 11 12;1 11 19;10 11 19;4 5 19;5 7 19; 5 6 7;1 2 15; 2 3 15;


3 15 17;3 4 17;4 17 19;13 17 19;1 13 19;1 13 15;7 8 22;8 9 22;
9 22 24;9 10 24; 10 19 24; 19 20 24;7 19 20; 7 20 22;13 14 18;
14 15 16;16 17 18;20 21 25;21 22 23;23 24 25;14 26 28;
16 26 27;18 27 28; 21 29 31;23 29 30;25 30 31;
26 27 28; 29 30 31]; %mien con tam giac
fexemp = '(norm([x y] + [0.5 0.5])<0.01) - (norm([x y] - [0.5 0.5]) < 0.01)';
f = inline(fexemp,'x','y'); %(Pt.2)
g = inline('0','x','y');
Nn = size(N, 1); %tong so nut
Ni = Nn - Nb; %so nut ben trong
c = zeros(1, Nn); %gia tri tren bien
p = fembasisftn(N, S);
[U, c] = femcoef(f, g, p, c, N, S, Ni);
%do thi luoi tam giac
figure(1);
clf;
trimesh(S, N(:, 1), N(:, 2), c);
%do thi luoi chu nhat
Ns = size(S, 1); %tong so mien con tam giac
x0 = -1;
xf = 1;
y0 = -1;
yf = 1;
Mx = 16;
dx = (xf - x0)/Mx;
xi = x0 + [0:Mx]*dx;
My = 16;
dy = (yf - y0)/My;
yi = y0 + [0:My]*dy;
for i = 1:length(xi)
for j = 1:length(yi)
for s = 1:Ns
if inpolygon(xi(i), yi(j), N(S(s,:), 1), N(S(s,:),2)) > 0
Z(i, j) = U(s,:)*[1 xi(i) yi(j)]'; %Pt.(4.5b)
break;
end
end
end
end
figure(2);
clf;
444

mesh(xi, yi, Z)
%de so sanh
bx0 = inline('0');
bxf = inline('0');
by0 = inline('0');
byf = inline('0');
D = [x0 xf y0 yf];
[U, x, y] = poisson(f, g, bx0, bxf, by0, byf, D, Mx, My, 1e-6, 50);
figure(3)
clf;
mesh(x,y,U)
6. GUI CA MATLAB GII PDE
1. Cc phng trnh c th gii c bng PDETOOL: Cng c PDETOOL ca
MATLAB c th dng gii cc loi phng trnh sau:
a. Phng trnh elliptic: Ta s gii phng trnh elliptic
(cu) + au = f
(1)
vi iu kin bn:
hu = r
Dirichlet
(2)
G
ncu+qu=g Neumann
G
trn bin , trong n l vec t php tuyn.
Trong trng hp u l i lng v hng, phng trnh (1) tr thnh:
2 u(x, y) 2 u(x,y)
(3)
c
+
+ au(x, y) = f(x,y)
2
y 2
x
v nu iu kin bin i vi phn bin bn tri l iu kin bin Neumann dng
u(x,y)
= bx0 (y) th (2) c th vit thnh:
x x=x0

G u(x,y) G u(x,y) G
e x c
ex +
e y + qu(x,y)
y
x

(4)
u(x, y)
= c
+ qu(x,y) = g(x,y)
x
G G
v vec t php tuyn ca bin phi l n = e x
b. Phng trnh parabolic: Ta x gii phng trnh:
u
(cu) + au + d
=f
(5)
t
trn min v trong khong thi gian 0 t T, vi iu kin bn ging (2) v iu
kin u u(t0)
c. Phng trnh hyperbolic:
445

2u
(6)
=f
t 2
trn min v trong khong thi gian 0 t T, vi iu kin bn ging (2) v iu
kin u u(t0), u(t0)
d. Phng trnh gi tr ring:
u
(cu) + au =
(7)
t
trn min vi mt gi tr ring cha bit v iu kin bin tng t (2).
Cng c PDETOOL cng c th dng gii h phng trnh dng:
(c11u1 ) (c12u 2 ) + a11u1 + a12 u 2 = f1
(8)

(c 21u1 ) (c 22u 2 ) + a 21u1 + a 22 u 2 = f2


trn min vi iu kin bin Dirichlet:
h11 h12 u1 r1
(9)
h
=
21 h 22 u 2 r2
(cu) + au + d

hay iu kin Neumann tng qut:


G
G
n(c11u1 ) + n(c12u 2 ) + q 11u1 + q 12 u 2 = g 1
G
G
n(c 21u1 ) + n(c 22u 2 ) + q 21u1 + q 22 u 2 = g 2
hay iu kin bin hn hp:
f1
c11 c12
a11 a12
=
c=
a
f
=
f

c 21 c 22
21 a 22
2

h11
h=
h 21

h12
h 22

r1
r=
r2

q 11 q12
q=

q 21 q 22

(10)

u1
u=
u2
g 1
g=
g 2

2. S dng PDETOOL: PDETOOL gii phng trnh vi phn o hm ring bng


cch dng phng php FEM. gii phng trnh ta theo cc bc sau:
) Nhp lnh pdetool vo ca s lnh MATLAB. Ca s PDE toolbox xut hin.
Ta c th bt/tt tu chn Grid bng cch bm vo Grid trn menu Option. Ta
cng c th hiu chnh phm vi trc x v y bng cch chn Axes Limit trong
nemu Option

446

Nu mun cho cc hnh gn vo li, ta chn Snap trong menu Option. Nu


mun t l xch ca trc x v t bng nhau hnh trn nhn khng ging hnh
ellip ta chn Axes Equal trong menu Option.
) v min ta dng menu Draw hay cc icon trn thanh cng c ngay pha
di cc menu.
) t iu kin bin ta dng menu Boundary hay icon . Ta bm ln tng
on bin t iu kin cho n.
) Tip theo ta to li bng cch dng menu Mesh hay icon . tinh chnh
li ta bm vo Refine Mesh hay icon
) Tip theo ta m t dng phng trnh v cc thng s ca n bng cch dng
menu PDE. Mun th, ta m menu PDE hay chn icon PDE v chn PDE
Specification v cho cc tham s ca phng trnh.
) gii phng trnh ta dng menu Solve hay chn icon = . Ta chn menu
con Parameters nhp iu kin u v khong thi gian tm nghim
) Nu mun v kt qu, ta dng menu Plot
3. Mt s v d:
a. V d 1: Gii phng trnh Laplace:
2 u(x,y) 2 u(x, y)
(vd1.1)
2 u(x, y) =
+
=0
x 2
y 2
trong min 0 x 4, 0 y 4 vi cc iu kin bin:
u(0, y) = ey - cosy
u(4, y) = eycos4 - e4cosy
(vd1.2)
x
4
x
u(x, 0) = cosx - e
u(x, 4) = e cosx - e cos4
(vd1.3)
gii phng trnh ta thc hin cc bc sau:
M cng c PDETOOL. Vo menu Option | Axes Limit hiu chnh li
phm vi gi tr ca x v y l [0 5] ri chn Apply v Close. Chn Option | Axes
Equal
447

Bm vo icon v hnh vung. Khi v xong, nu cha ng kch thc ta


bm p vo i tng by gi c tn l R1 hiu chnh li thnh Left: 0,
Bottom: 0, Height: 4, Width: 4.
Bm vo icon th ng bin ca i tng c mu . Trn mi on
bin ta cho iu kin bin theo (vd1.2) v (vd1.3). ghi iu kin bin cho
on no ta bm p chut ln on . iu kin bin cho l iu kin bin
Dirrichlet. Trn bin tri, ta ghi iu kin bin:
h = 1, r = exp(y) - cos(y)
trn bin phi:
h = 1, r = eycos4 - e4cosy
trn bin di:
h = 1, r = cosx - ex
v trn bin trn:
h = 1, r = e4cosx - excos4
Bm p chut vo icon PDE v chn phng trnh dng elliptic v cc
thng s theo (vd1.1): c = 1, a = 0, f = 0
Bm p chut vo icon
to li v sau tinh chnh n.
Bm p chut vo icon = gii phng trnh.
Vo menu Plot | Parameters chn cch v v sau v ra kt qu
b. V d 2: Gii phng trnh parabolic:
2
2 u(x,y,t) u(x,y,t)
4 u(x,y,t)
+
10
=
x 2
y 2
t

(vd2.1)

trong min 0 x 4, 0 y 4 v 0 t 5000 vi cc iu kin u v iu bin:


u(x, y, 0) = 0
(vd2.2a)
y
x
u(x, y, t) = e cosx - e cosy vi x = 0, x = 4, y = 0, y = 4
(vd2.2b)
gii phng trnh ta theo cc bc sau:
M cng c PDETOOL. Vo menu Option | Axes Limit hiu chnh li
phm vi gi tr ca x v y l [0 4] ri chn Apply v Close. Chn Option | Axes
Equal
Bm vo icon v hnh vung. Khi v xong, nu cha ng kch thc ta
bm p vo i tng by gi c tn l R1 hiu chnh li thnh Left: 0,
Bottom: 0, Height: 4, Width: 4.
Bm vo icon th ng bin ca i tng c mu . Trn mi on
bin ta cho iu kin bin theo (vd2.2b). ghi iu kin bin cho on no ta
bm p chut ln on . iu kin bin cho l iu kin bin Dirrichlet.
Trn bin tri, ta ghi iu kin bin:
h = 1, r = exp(y) - cos(y)
trn bin phi:
h = 1, r = eycos4 - e4cosy
trn bin di:
448

h = 1, r = cosx - ex
v trn bin trn:
h = 1, r = e4cosx - excos4
Bm p chut vo icon PDE v chn phng trnh dng parabolic v cc
thng s theo (vd2.1): c = 1e-4, a = 0, f = 0, d = 1. Trong menu Solve |
Parameters ta ghi Time: 0:100:5000, u(t0) = 0 (iu kin u).
Bm p chut vo icon
to li v sau tinh chnh n.
Bm p chut vo icon = gii phng trnh.
Vo menu Plot | Parameters chn cch v v sau v ra kt qu
c. V d 3: Gii phng trnh hyperbolic:
1 2 u(x,y,t) 2 u(x,y,t) 2 u(x,y,t)
+

=
x 2
y 2
t 2
4

(vd3.1)

trong min 0 x 2, 0 y 2 v 0 t 2 vi cc iu kin bin zero v iu kin


u:
u(0, y, t) = 0 u(2, y, t) = 0 u(x, 0, t) = 0
u(0, 2, t) = 0
(vd3.2)
(vd3.3)
u(x, y, 0) = 0.1sin(x)sin(y/2) u/t(x, y, 0) = 0 vi t = 0
gii phng trnh ta theo cc bc sau:
M cng c PDETOOL. Vo menu Option | Axes Limit hiu chnh li
phm vi gi tr ca x v y l [0 2] ri chn Apply v Close. Chn Option | Axes
Equal
Bm vo icon v hnh vung. Khi v xong, nu cha ng kch thc
ta bm p vo i tng by gi c tn l R1 hiu chnh li thnh Left: 0,
Bottom: 0, Height: 2, Width: 2.
Bm vo icon th ng bin ca i tng c mu . Trn mi on
bin ta cho iu kin bin theo (vd3.2). ghi iu kin bin cho on no ta
bm p chut ln on . iu kin bin cho l iu kin bin Dirrichlet.
Trn bin tri, ta ghi iu kin bin:
h = 1, r = 0
trn bin phi:
h = 1, r = 0
trn bin di:
h = 1, r = 0
v trn bin trn:
h = 1, r = 0
Bm p chut vo icon PDE v chn phng trnh dng parabolic v cc
thng s theo (vd2.1): c = 1/4, a = 0, f = 0, d = 1. Trong menu Solve |
Parameters ta ghi Time: 0: 0.1: 2, u(t0) = 0.1*sin(pi*x).*sin(pi*y/2).
Bm p chut vo icon
to li v sau tinh chnh n.
Bm p chut vo icon = gii phng trnh.
Vo menu Plot | Parameters chn cch v v sau v ra kt qu
449

450

CHNG 10: CC CNG C KHC CA MATLAB


1. SIMULINK
1. Khi ng Sinulink: khi ng Simulink ta theo cc bc sau:
khi ng MATLAB
click vo icon ca Simulink trn MATLAB toolbar hay nh lnh Simulink
trong ca s MATLAB.
Lc ny trn mn hnh xut hin ca s Simulink Library Browser, trong c cc
th vin cc khi ca Simulink.
2. To mt m hnh mi: to mt m hnh mi, click vo icon trn ca s
Simulink Library Browser hay chn menu File | New | Model trn ca s MATLAB.
3. Thay i mt m hnh c: Ta c th click vo icon trn ca s Simulink
Library Browser hay chn Open trn ca s MATLAB. File cha m hnh s m v
ta c th thay i cc thng s cng nh bn thn m hnh .
4. Chn mt i tng: chn mt i tng, click ln n. Khi ny i tng s
c mt hnh ch nht c cc gc l cc ht bao quanh.
5. Chn nhiu i tng: Ta c th chn nhiu i tng cng lc bng cch dng
phm Shift v chut hay v mt ng bao quanh cc i tng bng cch bm
chut ko thnh hnh ch nht v th khi hnh ch nht bao ly cc i tng
cn chn.
6. Chn tt c cc i tng: chn tt c cc i tng trong ca s ta chn
menu Edit | Select All.
7. Cc khi: Khi l cc phn t m Simulink dng to m hnh. Ta c th m
hnh ho bt k mt h thng ng hc no bng cch to mi lin h gia cc khi
theo cch thch hp. Khi to mt m hnh ta cn thy rng cc khi ca Simulink c 2
loi c bn: khi nhn thy v khi khng nhn thy. Cc khi khng nhn thy c
ng vai tr quan trng trong vic m phng mt h thng. Nu ta thm hay loi b
mt khi khng nhn thy c ta thay i thuc tnh ca m hnh. Cc khi nhn
thy c, ngc li, khng ng vai tr quan trng trong m hnh ho. Chng ch
gip ta xy dng m hnh mt cch trc quan bng ho. Mt vi khi ca Simulink
c th l thy c trong mt s trng hp v li khng thy c trong mt s
trng hp khc. Cc khi nh vy c gi l cc khi nhn thy c iu kin.
8. Copy cc khi t mt ca s sang mt ca s khc: Khi ta xy dng mt m
hnh ta thng phi copy cc khi t th vin khi ca Simulink sang ca s m hnh.
lm vic ny ta theo cc bc sau:
451

m ca s th vin khi
ko khi ta mun dng t ca s th vin vo ca s m hnh v th
Ta c th copy cc khi bng cch dng lnh Copy & Paste trong menu Edit
qua cc bc sau :
chn khi ta mun copy
chn Copy t menu Edit
lm cho ca s cn copy ti hot ng
chn Paste t menu Edit
Simulink gn mt tn cho mi bn copy. Nu n l khi u tin trong m hnh th tn
ca n ging nh trong th vin Simulink. Nu n l bn th 2 hay th 3 th sau n s
c ch s 1 hay 2 v.v. Trn ca s m hnh c li. hin th li ny t ca s
MATLAB nh vo :
set_param('<model name>','showgrid','on')
thay i khong cch li nh lnh:
set_param('<model name>','gridspacing',<number of pixels>)
V d: thay i li thnh 20 pixels, nh lnh:
set_param('<model name>','gridspacing',20)
nhn bn mt khi ta gi phm Ctrl v ko khi ti mt v tr khc v th.

9. M t thng s ca khi: m t thng s ca khi ta dng hp thoi Block


Properties. hin th hp thoi ny ta chn khi v chn Block Properties t menu
Edit. Ta c th nhp p chut ln khi hin th hp thoi ny. Hp thoi Block
Properties gm :
Description: M t ngn gn v mc ch ca khi.
Priority: thc hin quyn u tin ca khi so vi cc khi khc trong m hnh
.
Tag: trng vn bn c lu cng vi khi
Open function: cc hm MATLAB c gi khi m khi ny
Attributes format string: Thng s ny s m t thng s no c hin th
di icon ca khi.
10. Deleting Blocks: Mun xo mt hay nhiu khi ta chn khi v nhn phm
Del.
11. Thay i hng ca khi: Ta c th xoay hng ca khi bng vo menu
Format ri :
o
chn Flip Block quay khi 180 .
o
chn Rotate Block quay khi 90 .
12. nh li kch thc ca khi: thay i kch thc ca khi ta a con tr
chut vo mt gc ca khi ri bm v ko cho n kch thc mong mun ri th.
452

13. X l tn khi: Mi khi c tn, phi l duy nht v phi cha t nht mt k t.
Mc nh tn khi nm di khi. Vi tn khi ta c th thc hin cc thao tc sau
y:
Thay i tn khi bng cch bm chut vo tn c v nhp li tn mi. Nu
mun thay i font ch dng cho tn khi hy chn khi v vo menu Format v
chn Font.
Thay i v tr t tn khi t di ln trn hay ngc li bng cch ko
tn
khi ti v tr mong mun.
Khng cho hin th tn khi bng cch vo menu Format v chn Hide Names
hay Show Names
14. Hin th cc thng s bn di khi: Ta c th bt Simulink hin th mt hay
nhiu thng s bn di khi. lm iu ny ta nhp vo mt dng vo trng
Attributes format string hp thoi Block Properties.
15. Ct cc khi: ct khi khi s ta bm phm Shift v ko khi n v tr
mi.
16. Nhp v xut cc vec t: Hu ht cc khi chp nhn i lng u vo l vec t
hay v hng v bin i thnh i lng u ra l vec t hay v hng. Ta c th
xc nh u vo no nhn i lng vec t bng cch chn mc Wide Vector Lines
t menu Format. Khi tu chn ny c chn, cc ng nhn vec t c v m
hn cc ng mang s liu v hng. Nu ta thy i m hnh sau khi chn Wide
Vector Lines ta phi cp nht hnh v bng cch chn Update Diagram t menu Edit.
Khi ng li Simulink cng cp nht s .
17. M rng v hng cc u vo v cc thng s: M rng v hng l bin i
i lng v hng thnh vec t vi s phn t khng thay i. Simulink p dng m
rng v hng cho cc i lng vo v thng s i vi hu ht cc khi.
M rng u vo: khi dng khi vi nhiu u vo ta c th trn ln cc i
lng vec t v i lng v hng .Khi ny cc u vo v hng c m rng
thnh vec t vi s phn t nh ca u vo vec t,cc phn t u c tr s nh nhau
M rng thng s: ta c th c t cc thng s i vi khi c vec t ho
thnh i lng vec t hay i lng v hng. Khi ta c t cc thng s vec t, mi
mt phn t thng s c kt hp vi phn t tng ng trong vec t u vo. Khi
ta c t cc thng s vec t, Simulink p dng m rng v hng bin i chng
thnh vec t c kch thc ph hp.
18. Gn u tin cho khi: Ta c th gn u tin cho khi khng nhn thy
trong m hnh. Khi c u tin cao hn c nh gi trc khi c u tin
nh hn. Ta c th gn u tin bng cch dng lnh tng tc hay dng chng
trnh. dng chng trnh ta dng lnh:
453

set_param(b,'Priority','n')
Trong b l khi v n l mt s nguyn, s cng thp, u tin cng cao.
gn u tin bng lnh ta nhp u tin vo trng Priority trong hp thoi
Block Priorities ca khi.
19. S dng Drop Shadows: Ta c th thm Drop Shadow vo khi chn bng
cch chn Show Drop Shadow t menu Format
20. To mt th vin: to mt th vin, chn Library t menu con New ca menu
File. Simulink s hin th mt ca s mi, c tn l Library : untitled.
21. Thay i mt th vin c: Khi ta m mt th vin, n t ng kho v ta
khng th thay i cc thnh phn ca n c. Mun m kho ta chn Unlock t
menu Edit.
22. Copy mt khi t th vin vo m hnh: Ta c th copy mt khi t th vin
vo m hnh bng copy hay paste hay ko n v th vo ca s m hnh .
23. V ng ni gia cc khi: ni cng ra ca mt khi vi cng vo ca mt
khi khc ta lm nh sau:
t con tr chut ln cng ra ca khi u tin, con tr c dng du +
nhn v gi chut
ko con tr chut ti cng vo ca khi th hai
th chut
v ng gp khc,nhn phm Shift khi v.
24. V ng nhnh: ng nhnh l ng ni t mt ng c v mang tn
hiu ca n ti cng vo ca mt khi.
thm ng nhnh ta lm nh sau:
a con tr chut ti ng cn phn nhnh
nhn phm chut ng thi nhn phm Ctrl
ko con tr chut ti cng vo tip theo v th chut va phm Ctrl.
Tuy nhin ta c th dng phm phi chut thay v dng phm Ctrl v phm tri chut.
25. Chn khi vo mt ng: Ta c th chn mt khi vo mt ng bng cch
ko v th khi ln ng ni. Khi m ta chn vo ch c mt u vo v mt u
ra.
26. Nhn ca tn hiu: Ta c th gn nhn cho tn hiu ghi ch cho m hnh. Nhn
c th nm trn hay di ng ni nm ngang, bn phi hay bn tri ng ni
thng ng.

454

27. S dng nhn tn hiu: to nhn tn hiu, bm p chut ln ng ni v


ghi nhn. di chuyn nhn, sa mt nhn, click ln nhn ri nh nhn mi sau khi
xa nhn c
28. Ghi ch: Ghi ch l on vn bn cung cp thng tin v m hnh. Ta c th thm
ghi ch vo bt k trng no ca m hnh. to mt ghi ch, nhn p chut vo
vng trng ca m hnh. Khi ny trn mn hnh xut hin mt hnh ch nht c con
nhy trong. Ta c th nh vn bn ghi ch vo khung ny. Khi mun di chuyn
phn ghi ch n mt v tr khc, ta bm chut vo v ko n v tr mi ri th
chut. sa mt ghi ch, bm chut vo n hin th khung vn bn v bt u
sa.
29. Cc kiu d liu: Simulink chp nhn cc kiu d liu sau :
double
s thc vi chnh xc gp i
single
s thc vi chnh xc n
int8
s nguyn c du 8 bit
uint8
s nguyn khng du 8 bit
int16
s nguyn c du 16 bit
uint16
s nguyn khg du 16 bit
int32
s nguyn c du 32-bit
uint32
s nguyn khng du 32-bit
30. Cc kiu d liu ca cc khi: Cc khi u chp nhn kiu d liu double.
31. M t cc kiu d liu dng cho tham s khi: Khi nhp vo tham s ca mt
khi, kiu d liu ca n c ngi dng m t bng lnh type(value) vi type l tn
ca kiu d liu v value l gi tr ca tham s.
V d: single(1.0)
d liu l s thc c tr l 1
int8(2)
d liu l s nguyn c tr l 2
int32(3+2i)
d liu l s phc, phn thc v phn o l s nguyn 32 bit
32.To tn hiu c kiu d liu c m t: Ta c th em vo m hnh mt tn hiu
c kiu d liu c m t bng mt trong cc phng php sau y:
np tn hiu c kiu d liu mong mun t MATLAB
to mt khi hng v t thng s ca n c kiu d liu mong mun.
s dng khi bin i kiu d liu
33. Hin th cc kiu d liu ca cng: hin th kiu d liu ca cng trong m
hnh,t a chn Port Data Types t menu Format.

455

34. Tn hiu phc: Mc nh, cc gi tr ca tn hiu Simulink l s thc. Tuy nhin


cc m hnh c th to v x l cc tn hiu l s phc. Ta c th a mt tn hiu l
s phc vo m hnh bng mt trong cc phng php sau:
np tn hiu phc t MATLAB
to mt khi hng trong m hnh v cho n gi tr phc.
to mt tn hiu thc tng ng vi phn thc v phn o ca tn hiu phc v
kt hp cc phn ny thnh tn hiu phc bng cch s dng khi bin i tn hiu
thc-o thnh tn hiu phc.
Ta c th x l tn hiu phc nh cc khi chp nhn tn hiu phc. Phn ln
cc khi ca Simulink chp nhn tn hiu vo l s phc.
35. To mt h thng con bng cch thm khi h thng con: to mt khi h
thng con trc khi thm cc khi trong n ta phi thm khi h thng con vo m
hnh ri thm cc khi to nn h thng con ny vo khi h thng con bng cch sau:
copy khi h thng con t th vin Signal & System vo m hnh
m khi h thng con bng cch click p ln n
trong ca s khi con rng, to h thng con. S dng cc khi inport biu
din u vo v cc khi outport biu din u ra.
36. To h thng con bng cch nhm cc khi c: Nu m hnh ca ta c
mt s khi m ta mun nhm thnh khi h thng con th ta c th nhm
cc khi ny thnh khi h thng con bng sau:
bao cc khi v ng ni gia chng bng mt ng t nt(bm chut v
ko t gc ny n gc kia ca cc khi) ri th chut
chn Create Subsystem t menu Edit
37. Gn nhn cho cc cng ca h thng con: Simulink gn nhn cho cc cng ca
h thng con. Nhn l tn ca cc khi inport v outport ni khi h thng con vi
cc khi bn ngoi qua cc cng ny. Ta c th du cc nhn ny bng cch chn khi
h thng con ri chn Hide Port Labels t menu Format. Ta cng c th du mt hay
nhiu nhn bng cch chn cc khi inport hay outport thch hp trong khi h thng
con v chn Hide Name t menu Format
38. M phng mt phng trnh: Phng trnh dng bin i Celcius thnh
Fahrenheit l :
TF = (9/5)TC + 32
Trc ht ta kho st cc khi cn to m hnh:
khi ramp trong th vin Sources input tn hiu nhit
khi Constant trong th vin Sources to hng s 32
khi Gain trong th vin Math to ra h s 9/5
khi Sum trong th vin Math cng hai i lng
khi Scope trong th vin Sinks hin th kt qu.
456

Tip ta a cc khi vo ca s m hnh, gn cc gi tr thng s cho Gain v


Constant bng cch nhp p ln chng m khi. Sau ta ni cc khi. Khi
Ramp a nhit Celcius v m hnh. M khi ny v thay i gi tr khi gn
Initial output v 0. Khi Gain nhn nhit ny vi h s 9/5. Khi Sum cng gi tr
32 vi kt qu v a ra nhit Fahrenheit. Khi Scope xem kt qu. S m
phng nh sau. By gi Start t menu Simulation chy simulation. Simulation
chy 10 giy,tng ng vi nhit Celcius bin i t 0 n 10o.

39. M phng mt h phng trnh tuyn tnh: Ta xt h phng trnh tuyn tnh
c hai n:
z 1 + z 2 = 1

z 1 + z 2 = 1
m phng ta dng cc khi:
hai khi Algebric Constraint trong th vin Math gii phng trnh
hai khi Sum trong th vin Math to php tnh
hai khi Display trong th vin Sink hin th gi tr nghim
khi Constant trong th vin Sources to gi tr 1

40. M phng mt phng trnh bc cao: Ta xt phng trnh :


457

x2 + 3x + 1 = 0
m phng ta dng cc khi:
khi Algebric Constraint trong th vin Math gii phng trnh
khi Display trong th vin Sink hin th tr s ca nghim
khi Constant trong th vin Sources to gi tr 1
khi Sum trong th vin Math to php cng
2
khi Math Function trong th vin Math to hm x
khi Gain trong th vin Math to h s 3
S m phng nh sau

41. M phng h thng lin tc n gin: Ta m hnh ho h m t bi phng


trnh vi phn
x( t ) = 2 x( t ) + u( t )
vi u(t) l mt sng hnh ch nht c bin bng 1 v tn s 1 rad/s. m phng
h ta dng cc khi:
khi Gain trong th vin Math to h s 2
khi Sum trong th vin Math to php tnh
khi Scope trong th vin Sink xem kt qu
khi Signal Generator trong th vin Sources to ngun
khi Integrator trong th vin Continuous tch phn
S m phng nh sau:

458

42. M phng h phng trnh vi phn bc cao: Ta xt h m t bi phng trnh


vi phn bc hai sau:
d2x
dx
3
+
+ 2 x( t ) = 4 u( t)
dt 2
dt
Trong u(t) l hm bc nhy,x(0) = 0 v x(0) = 0. Bin i Laplace ca h cho ta:
p2X(p) + 3pX(p) + 2X(p) = 4U(p)
Hm truyn ca h l:
4
T( p) = 2
p + 3p + 2
Ta m phng h bng cc phn t:
khi Step trong th vin Sources to hm bc nhy u(t)
khi Transfer Fcn trong th vin Continuous to hm truyn
khi Scope trong th vin Sink xem kt qu
S m phng nh sau:

43. M phng h c iu kin u khc khng:


a. Phng trnh vi phn cp 1: Ta xt h m t bi phng trnh :
dx
+ x( t) = 0
dt
iu kin u ca h l x(0) = 1. Ta cn tm x(t) trong on 0 t 10s. Do iu kin
u khc khng nn ta bin i phng trnh v dng khng gian- trng thi.
dx = Ax + B

dt
y = Cx + Du
Trong x l bin trng thi,u l tn hiu vo,y l tn hiu ra.
459

Chn y(t) = x(t) ta c :


dx
= x( t )
dt
y(t) = x(t)
Nh vy A = -1 ; C = 1 ; u(t) = 0 ; B = 0 v D = 0. S m phng gm cc phn t:
khi State-Space trong th vin Continuous
khi Scope trong th vin Sink
S m phng nh sau:

b. Phng trnh vi phn cp cao: Ta xt h m t bi phng trnh:


d2x
dx
+3
+ 2 x( t ) = 4 u( t)
2
dt
dt
Trong u(t) l hm n v, x(0) = 1 v x(0) = -2.
dx1
Ta cng dng h khng gian-trng thi. Ta t x1 = x , x2 =
. Nh vy iu
dt
2
dx 2 d 2 x 1 d x
=
=
kin u l: x1(0) = 1 v x2(0) = -2. Ngoi ra
dt
dt
dt
dx 2
+ 3x 2 ( t ) + 2x1 ( t ) = 4u( t )
dt
Phng trnh cp hai c a v hai phng trnh cp 1:
dx1 =x ( t )
2
dt

dx 2
= 3x 2 ( t ) 2x1 ( t ) + 4 u( t)

dt

dx 2
dt
Vit di dng ma trn ta c:
dx1
1 x1 ( t ) 0
dt 0
=
dx 2 2 3 x ( t ) + 4 u( t )
2

dt
x1 ( t )
y( t ) = [1 0 ]

x 2 ( t )
T h ny ta suy ra cc ma trn ca h khng gian-trng thi l:
460

1
0
0
B
A=
=

4 C = [1 0] D = 0
2 3

S m phng gm cc khi sau:
khi State-Space trong th vin Continuous
khi Scope trong th vin Sink
S m phng nh sau

44. M phng h cho bi s khi:Xt mt h c cu trc s khi nh sau:


+
-

1
s2 + s

Ta m phng h bng cc phn t:


khi Step trong th vin Sources
khi Gain trong th vin Math
khi Transfer Fcn trong th vin Continuous
S m phng nh sau

45. M hnh ho h phi tuyn:


a. H cho bi phng trnh vi phn cp cao: Ta xt phng trnh Val der Pol:
y (1 y 2 )y + y = 0
iu kin u y(0) = 2 v y(0) = 0
Ta t y = y1 v y = y2 v c c h phng trnh vi phn cp 1:
y1 = y 2

y2 = (1 y 12 ) y 2 y 1
H phng trnh c m phng bng cc phn t sau:
461

khi hm Fcn trong th vin Functions & Tables to hm


khi Product trong th vin Math to php nhn
hai khi Integrator trong th vin Continous
khi Sum trong th vin Math
khi Mux trong th vin Signal & Systems trn tn hiu
khi Scope trong th vin Sink xem kt qu.
S m phng nh sau:

b. H m t bng h phng trnh vi phn: Ta xt h m t bng h phng


trnh vi phn sau:
a1 = a 2

a 2 = sin(a1 ) 0.2a 2
vi iu kin u l a1(0) = a2(0) = 1.3
Ta m phng h bng cc phn t:
hai khi Integrator trong th vin Continous
khi Fcn trong th vin Functions & Tables
khi Gain trong th vin Math
hai khi Scope trong th vin Sink
khi Sum trong th vin Math
S m phng nh sau:

462

46. Lu m hnh: Ta c th lu m hnh bng cch chn Save hay Save as t menu
File.Ta dng Save khi m m hnh c, sa v lu li. Save as dng khi m hnh c
ten l untitled ngha l cha c t tn. Simulink s lu m hnh bng mt file c
tn v phn m rng l .mdl.
47. In s khi: Ta c th in s khi bng cch chn Print t menu File. Khi
ny hp thoi Print s xut hin. N cho php ta :
ch in h thng hin hnh
in h thng hin hnh v cc h thng di n trong phn lp m hnh
in h thng hin hnh v cc h thng trn n trong phn lp m hnh
in tt c cc h thng trong m hnh
in mi m hnh mt khung overlay
48. Duyt qua m hnh: Ca s Model Browser cho php ta :
duyt qua m hnh c phn lp
m cc h thng trong cc m hnh
xc nh ni dung cc khi trong mt m hnh
hin th Model Browser, chn n t menu View. Ca s xut hin c chia
lm 2 phn. Pha tri l Browser. Cu trc cy ca m hnh hin th bn phi. Mi
du + tng ng vi mt h thng con.
2. SYMBOLIC MATLAB TOOLBOX
1. Khi nim chung: Symbolic Math Toolboxes kt hp tnh ton bng ch vo mi
trng MATLAB. Cc toolbox ny b sung cc tin ch s v th vi cc kiu tnh
ton ton hc khc nhau.
Tin ch
Calculus
Linear Algebra
Simplification
Solution of Equations

Ni dung
o hm, tch phn, gii hn, tng v chui Taylor
nghch o, nh thc,gi tr ring, phn tch v dng
chnh tc ca ma trn.
phng php rt gn cc biu thc i s
gii bng ch v bng s cc phng trnh i s v
vi phn
nh gi chnh xc ca cc biu thc i s

Variable-Precision
Arithmetic
Transform
bin i Laplace, Fourrier v z
Special
Mathematical cc hm ton hc c bit ca cc ng dng ton hc
Function
kinh in

463

ng lc tnh ton nm di cc toolbox l nhn Maple, mt h thng tnh ton


c pht trin u tin trng i hc Waterloo, Canada v sau ti
Eidgenroessiche Technische Hochschule Zurich, Thu s. Maple c thng mi
ho v h tr ca cng ty Waterloo Maple.
2. Khi ng TOOLBOX:
a. Cc i tng ch: Trong phn ny chng ta s xem xt cch to v dng
cc i tng ch. Chng ta cng s xem xt cc bin ch mc nh. Symbolic Math
Toolbox nh ngha mt kiu d liu MATLAB mi gi l i tng ch hay sym.
Bn trong, mt i tng ch l mt cu trc s liu m n lu biu din chui cc k
t. Symbolic Math Toolbox dng cc i tng ch biu din cc bin ch, cc
biu thc ch, cc ma trn ch.
b. To cc bin v cc biu thc ch: Lnh sym cho php ta xy dng cc bin
v cc biu thc ch. V d lnh:
x = sym('x')
a = sym('alpha')
to ra cc bin ch l x v a vi x l x v a l alpha.
Gi s ta mun ta mun dng bin ch biu din t l vng =
dng lnh:

1+ 5
. Ta
2

rho = sym('(1 + sqrt(5))/2')


By gi ta c th thc hin cc php ton khc nhau vi rho. V d:
f = rho^2 - rho - 1
f=
(1/2+1/2*5^(1/2))^2-3/2-1/2*5^(1/2)
Ta rt gn biu thc:
simplify(f)
ans =
0
By gi gi s ta mun gii phng trnh bc 2 f = ax 2 + bx + c . Pht biu:
f = sym('a*x^2 + b*x + c')

464

gn biu thc ch ax2 + bx + c cho bin f. Tuy nhin trong trng hp ny Symbolic
Math Toolbox khng to ra cc bin tng ng vi cc s hng a, b, c v x trong biu
thc. thc hin cc php ton bng ch(v d tch phn, o hm, thay th v.v)
trn f ta phi to cc bin mt cch r rng, ngha l cn vit:
a = sym('a')
b = sym('b')
c = sym('c')
x = sym('x')
hay n gin l:
syms a b c x
Ni chung l ta c th dng sym hay syms to cc bin ch nhng nn dng syms
tit kim thi gian.
2. Bin i gia s v ch:
a. To cc bin thc v phc: Lnh sym cho php ta m t cc thuc tnh ton
hc ca cc bin ch bng cch dng tu chn real. Pht biu:
x = sym('x','real');
y = sym('y','real');
hay hiu qu hn:
syms x y real
z = x + i*y
to ra bin ch x v y c thuc tnh l s thc. c bit:
f = x^2 + y^2
thc s l s khng m. Nh vy z l bin phc v cc lnh:
conj(x)
conj(z)
expand(z*conj(z))
cho kt qu:
return the complex conjugates of the variables
465

x
x - i*y
x^2 + y^2
Lnh conj l ton t to s phc lin hp. xa thuc tnh real ca x ta dng lnh:
syms x unreal
hay:
x = sym('x','unreal')
Lnh clear x khng xo thuc tnh s real ca x.
b. To cc hm tru tng: Nu ta mun to mt hm tr tng(ngha l mt
hm khng xc nh) f(x) cn dng lnh:
f = sym('f(x)')
Khi ny f hot ng nh l f(x) v c th x l bng cc lnh toolbox. V d tnh vi
phn bc 1 ta vit:
df = (subs(f,'x','x+h') f)/'h'
hay
syms x h
df = (subs(f,x,x+h)f)/h
tr v:
df =
(f(x+h)-f(x))/h
ng dng ny ca hm sym s rt hu ch trong bin i Fourrier, Laplace v z.
c. Dng sym truy cp cc hm ca Maple: Ta c th truy cp hm giai tha
k! ca Maple khi dng sym.
kfac = sym('k!')
tnh 6! hay k! ta vit:
syms k n
subs(kfac,k,6)
ans =
720
subs(kfac,k,n)
466

ans =
n!
hay nu tnh 12! ta cng c th vit:
prod(1:12)
d. V d to ma trn ch: Mt ma trn vng l ma trn m hng sau c c
bng cch dch cc phn t ca hng trc i 1 ln.Ta to mt ma trn vng A bng
cc phn t a, b v c:
syms a b c
A = [a b c; b c a; c a b]
kt qu:
A=
[ a, b, c ]
[ b, c, a ]
[ c, a, b ]
Do A l ma trn vng tng mi hng v ct nh nhau:
sum(A(1,:))
ans =
a+b+c
sum(A(1,:)) = = sum(A(:,2))
ans =
1
By gi ta thay A(2, 3) bng beta v b bng alpha:
syms alpha beta
A(2,3) = beta;
A = subs(A,b,alpha)
A=
[ a, alpha, c]
[ alpha, c, beta]
[ c, a, alpha]
T v d ny ta thy dng cc i tng ch cng tng t nh dng s trong
MATLAB.
e. Bin ch mc nh: Khi dng cc hm ton hc,vic chn cc bin c lp
thng rt r rng. V d xem bng sau:
467

Hm ton hc
f = xn
g = sin(at+b)
h = Jv(z)

Lnh MATLAB
f = x^n
g = sin(a*t+b)
h = besselj(nu,z)

Nu ta tm o hm ca cc hm ny nhng khng m t bin c lp (ngha l


o hm theo bin no) th kt qu l:
f = nxn-1
g' = acos(at + b)
h' =J v (z)(v/z)-Jv+1(z).
Nh vy cc bin c lp l x, t v z. MATLAB hiu cc bin c lp l cc
ch thng v nm cui bng ch ci nh x, y, z. Khi khng thy cc ch ci ny,
MATLAB s tm ch gn nht v coi l bin c lp. Cc bin khc nh n, a, b v
v c coi l hng hay thng s. Tuy nhin ta c th ly o hm ca f theo n bng
cch vit r bin c lp ra. Ta dng cc lnh sau to ra cc hm:
syms a b n nu t x z
f = x^n;
g = sin(a*t + b);
o hm hm f ta vit:
diff(f);
ans =
x^n*n/x
Trong v d trn x l bin c lp. Nu mun tnh o hm ca f theo n ta cn vit:
diff(f,n)
ans =
x^n*log(x)
4. To cc hm ton hc bng ch:
a. Dng cc biu thc ch: Cc lnh:
syms x y z
r = sqrt(x^2 + y^2 + z^2)
t = atan(y/x)
f = sin(x*y)/(x*y)
to ra cc biu thc ch r, t v f. Ta c th dng cc lnh diff, int, subs hay cc lnh
Symbolic Math Toolbox khc x l cc biu thc nh vy.
468

b. To cc M-file: M-file cho php ta dng cc hm tng qut hn. V d ta


mun to ra hm sinc = sin(x)/x ta s vit mt M-file c ni dung nh sau:
function z = sinc(x)
if isequal(x, sym(0))
z = 1;
else
z = sin(x)/x;
end
Ta c th m rng cc v d nh vy cho cc hm v bin khc nhau.
5. Tnh ton:
a. o hm: Ta to biu thc ch:
syms a x
f = sin(a*x)
Vy th:
df = diff(f)
tnh o hm ca hm f(x) theo x. Kt qu l:
df =
cos(a*x)*a
tnh o hm ca f theo a ta vit:
dfa = diff(f,a)
kt qu:
dfa=
cos(a*x)*x
Hm ton hc
f = xn
f = nxn-1
g = sin(at+b)
g = acos(at+b)

Lnh MATLAB
f = x^n
diff(f) hay diff(f, x)
g = sin(a*t+b)
diff(g) hay diff(g, t)
469

tnh o hm bc 2 ca f theo x v a ta vit:


diff(f,2)
ans =
- sin(a*x)*a^2
diff(f,x,2)
ans =
- sin(a*x)*x^2
Hm diff c th dng i s l ma trn. Trong trng hp ny o hm c thc
hin trn tng phn t. V d:
syms a x
A = [cos(a*x),sin(a*x);-sin(a*x),cos(a*x)]
kt qu:
A=
[ cos(a*x), sin(a*x)]
[-sin(a*x), cos(a*x)]
lnh :
dy = diff(A)
cho kt qu:
dy =
[ -sin(a*x)*a,
cos(a*x)*a]
[ -cos(a*x)*a,
-sin(a*x)*a]
Ta kho st bin i t to Euclid(x, y, z) sang to cu (r, , ) thc hin bng
cc cng thc:
x = rcoscos
y = rcossin
z= rsin
tnh ma trn Jacobi J ca php bin i ny ta dng hm jacobian. nh ngha
ton hc ca J l:
( x , y , z )
J=
(r , , )
d vit ta dng k t l thay cho v f thay cho . Cc lnh
syms r l f
x = r*cos(l)*cos(f);
470

y = r*cos(l)*sin(f);
z = r*sin(l);
J = jacobian([x; y; z], [r l f])
cho ta kt qu:
J=
[ cos(l)*cos(f),
[ cos(l)*sin(f),
[ sin(l),

r*sin(l)*cos(f),
r*sin(l)*sin(f),
r*cos(l),

r*cos(l)*sin(f) ]
r*cos(l)*cos(f)]
0]

v lnh:
detJ = simple(det(J))
cho:
detJ =
cos(l)*r^2
Ch l i s th nht ca hm jacobian phi l vec t ct v i s th hai l vec
t hng. Hn na do nh thc ca ma trn Jacobian l biu thc lng gic kh phc
tp nn ta dng lnh simple thay th v rt gn.
Bng sau tng hp hm diff v hm jacobian
Ton t ton hc
f = exp(ax + b)

df
dx
df
da
d2f
d 2a
r = u 2 + v2
t = arctan(v/u)

J=

( r , t )
( u , v )

Lnh MATLAB
syms a b x
f = exp(a*x + b)
diff(x) hay
diff(f,x)
diff(f,a)
diff(f,a,2)
syms r t u v
r = u^2 + v^2
t = atan(v/u)
J = jacobian([r ; t],[u , v])

b. Gii hn: o hm ca mt hm l gii hn sau y nu n tn ti :


471

f ( x + h ) f ( x)
h 0
h
Symbolic Math Toolbox cho php gii hn ca mt hm mt cch trc tip hn.
Lnh:
f ( x) = lim

syms h n x
dc = limit( (cos(x+h) cos(x))/h, h, 0 )
cho kt qu:
dc =
sin(x)
v:
limit( (1 + x/n)^n,n,inf )
cho:
ans =
exp(x)

472

minh ho 2 trong s cc gii hn quan trng ca ton hc: o hm(trong trng hp


cosx) v hm m. Trong khi nhiu gii hn :
lim f( x)
x a

l hai pha(ngha l kt qu nh nhau cho d x tin ti bn phi hay bn tri ca a)


li c nhng hm gii hn phi v tri khc nhau. Do 3 gii hn:
1
1
1
lim , lim , lim
x0 x
x 0 x
x +0 x
cho 3 kt qu khc nhau: khng xc nh , - v +
Trong trng hp khng tn ti gii hn Symbolic Math Toolbox tr v kt qu NaN.
V d:
limit(1/x, x, 0)
cho:
ans =
NaN
Lnh:
limit(1/x, x, 0, 'left')
cho:
ans =
inf
Lnh:
limit(1/x,x,0,'right')
cho:
ans =
inf
Nh vy limit(f) tng ng vi limit(f,x,0). Bng sau cho cc gii hn:
Hm ton hc
lim f( x)

Lnh MATLAB
limit(f)

lim f( x)

limit(f, x, a) hay limit(f, a)

lim f( x)

limit(f, x, a, left)

x 0

x a

x a

476

lim f( x)

x+a

limit(f, x, a, right)

c. Tch phn: Nu f l mt biu thc ch th int(f) tm mt biu thc khc F


sao cho diff(F) = f. Nh vy int(f) cho ta tch phn bt nh ca f. Tng t nh o
hm int(f, v) ly tch phn theo bin c lp v. Ta c bng sau:
Hm ton hc
xn +1
n
x dx = n + 1

sin( 2x)dx = 1

Lnh MATLAB
int(x^n) hay
int(x^n, x)
int(sin(2*x), 0, pi/2) hay
int(sin(2*x), x, 0, pi/2)

g = cos(at+b)
1
g( t)dt = a sin(at + b)

g = cos(a*t + b)
int(g) hay
int(g, t)

Khi MATLAB khng tm c tch phn n vit li lnh nhp vo. V d:


syms x
f = exp((k*x)^2);
int(f, x);
ezplot(f)
tnh tch phn bt nh ca hm. tnh tch phn xc nh ta vit:
syms x
f = exp((k*x)^2);
a = int(f, x, 0, 1);
a = double(a)
d. Tnh tng: Ta c th tnh tng biu thc ch khi chng tn ti bng cch
dng lnh symcum. V d chui:
1
1
1+ 2 + 2 +
2
3
2
cho tng l /6 cn chui :
1 + x2 + x3 +. . .
cho tng l 1/(1-x). Cc tng c tnh nh sau:
syms x k
s1 = symsum(1/k^2, 1, inf)
477

s2 = symsum(x^k, k, 0, inf)
e. Chui Taylor: Cho hm f(x). Pht biu:
T = taylor(f, 8)
cho kt qu:
T=
1/9+2/81*x^2+5/1458*x^4+49/131220*x^6
l khai trin Taylor ca f(x) ln cn x = 0(khai trin MacLaurin) c cha 8 s hng
khc 0. Pht biu:
syms x
g = exp(x*sin(x))
t = taylor(g,12,2)
to ra khai trin Taylor ca f(x) ti x = 2 v cha n 12 s hng khc 0. Ta v cc
hm ny ln cng mt th thy c kh nng xp x ca chui Taylor vi hm
thc g:
xd = 1:0.05:3;
yd = subs(g,x,xd);
ezplot(t, [1,3]);
hold on;
plot(xd, yd, 'r-.')
title('Xap xi Taylor ');
legend('Ham','Taylor')
Xap xi Taylor
Ham
Taylor

Tip ta dng1 1lnh pretty(T)


in kt
qu di2.5dng cc biu
thc ton hc d c.
1.5
2
3
x

6. Rt gn biu thc: Ta xt 3 biu thc khc nhau:


478

syms x
f = x^3-6*x^2+11*x-6
g = (x-1)*(x-2)*(x-3)
h = x*(x*(x-6)+11)-6
Thc hin cc lnh pretty(f), pretty(g), pretty(h) ta nhn c:
f = x3 - 6x2 + 11x - 6
g = (x - 1)(x - 2)(x - 3)
h = x(x(x - 6) + 11) - 6
C 3 biu thc ny l cc dng biu din ton hc khc nhau ca cng mt hm ton
hc - l a thc bc 3 theo x. Mi mt dng thch hp vi mt dng tnh ton.
Dng th nht f l dng chung nht thng c dng biu din a thc. N n gin
l mt t hp tuyn tnh ca cc s m ca x. Dng th 2, hm g, l dng phn tch
thnh tha s. N biu din nghim ca a thc. Tuy nhin khng phai a thc no
cng c nghim, ngha l c th phn tch thnh tha s. Dng th 2 l dng Horner
ca a thc. N rt tin dng tnh tr s ca a thc ti mt gi tr no ca x.
Symbolic Math Toolbox cung cp mt s hm dng bin i cc biu thc
i s v lng gic thnh cc biu thc n gin hn. Chng gm: collect, expand,
horner, factor, simplify, v simple.
a.collect: Pht biu:
collect(f)
xem f nh mt a thc gm cc bin ch x v gp tt c cc h cng bc ca x. i
s th 2 ca ch r bin nh gp nu c nhiu in trong biu thc. Sau y l mt s
v d:
f
(x - 1)(x - 2)(x - 3)
x*(x*(x - 6) + 11) - 6
(1 + x)*t + x*t

collect(f)
x^3 - 6*x^2 + 11*x - 6
x^3 - 6*x^2 + 11*x - 6
2*x*t + t

b.expand: Pht biu:


expand(f)
khai trin biu thc. Sau y l mt s v d:
f
a*(x + y)
(x - 1)*(x - 2)*(x - 3)
x*(x*(x - 6) + 11) - 6
exp(a + b)
cos(x + y)

expand(f)
a*x + a*y
x^3 - 6*x^2 + 11*x - 6
x^3 - 6*x^2 + 11*x - 6
exp(a) + exp(b)
cos(x)*cos(y) - sin(x)*sin(y)
479

cos(3*acos(x))

4*x^3 - 3*x

c.horner: Pht biu:


horner(f)
bin i mt a thc thnh dng Horner hay biu din lng nhau. V d:
f
x^3 - 6*x^2 + 11*x - 6
1.1 + 2.2*x + 3.3*x^2

horner(f)
-6 + (11 + (-6 + x)*x)*x
11/10 + (11/5 + 33/10*x)*x

d.factor: Nu f l a thc h s hu t, pht biu:


factor(f)
biu din f nh l tch ca cc a thc c bc thp hn vi h s hu t. V d:
f
x^3 - 6*x^2 + 11*x - 6
x^3 - 6*x^2 + 11*x - 5
x^6 + 1

factor(f)
(x-1)*(x-2)*(x-3)
x^3 - 6*x^2 + 11*x - 5
(x^2 + 1)*(x^4 - x^2 + 1)

y l mt v d khc v phn tch a thc xn +1 thnh tha s:


syms x;
n = 1:9;
x = x(ones(size(n)));
p = x.^n + 1;
f = factor(p);
[p; f].'
tr v ma trn vi cc a thc ct th nht v cc tha s ct th 2:
[ x+1,
x+1 ]
[ x^2+1,
x^2+1 ]
[ x^3+1,
(x+1)*(x^2-x+1) ]
[ x^4+1,
x^4+1 ]
[ x^5+1,
(x+1)*(x^4-x^3+x^2-x+1)]
[ x^6+1,
(x^2+1)*(x^4-x^2+1) ]
[ x^7+1,
(x+1)*(1-x+x^2-x^3+x^4-x^5+x^6) ]
[ x^8+1,
x^8+1 ]
[ x^9+1,
(x+1)*(x^2-x+1)*(x^6-x^3+1) ]
Hm factor c th phn tch cc i tng ch c cha s nguyn thnh tha s. V
d:
one = '1'
480

for n = 1:11
N(n ,:) = sym(one(1, ones(1, n)));
end
[N factor(N)]
cho kt qu:
[
1,
[
11,
[
111,
[
1111,
[
11111,
[
111111,
[
1111111,
[
11111111,
[ 111111111,
[ 1111111111,
[ 11111111111,

1]
(11) ]
(3)*(37) ]
(11)*(101) ]
(41)*(271) ]
3)*(7)*(11)*(13)*(37) ]
(239)*(4649) ]
(11)*(73)*(101)*(137) ]
(3)^2*(37)*(333667) ]
(11)*(41)*(271)*(9091)]
(513239)*(21649) ]

e. simplify: Hm simplify l mt hm mnh, dng rt gn cc biu thc. Sau


y l mt s v d:
f
x*(x*(x - 6) + 11) - 6
(1 - x^2)/(1 - x)
(1/a^3 + 6/a^2 + 12/a + 8)^(1/3)
syms x y positive log(x*y)
exp(x) * exp(y)
cos(x)^2 + sin(x)^2

simplify(f)
x^3 - 6*x^2 + 11*x - 6
x+1
((2*a + 1)^3/a^3)^(1/3)
log(x) + log(y)
exp(x + y)
1

f .simple: Hm simple a ra dng ngn nht c th c ca mt biu thc.Hm


ny c nhiu dng,mi dng tr v kt qu khc nhau. Dng:
simple(f)
hin th dng ngn nht. V d:
syms x
simple(cos(x)^2 + sin(x)^2)
Trong mt s trng hp, ta p dng simple 2 ln nhn c hiu qu rt
gn cao hn. V d:
syms a
f = (1/a^3+6/a^2+12/a+8)^(1/3);
481

simple(simple(f))
cho ta:
1/a+2
Trong khi lnh:
syms a
simple(f)
cho ta:
(2*a+1)/a
Hm simple c bit c hiu qu trn cc biu thc lng gic. Sau y l mt s v
d:
f
cos(x)^2 + sin(x)^2
2*cos(x)^2 - sin(x)^2
cos(x)^2 - sin(x)^2
cos(x) + (-sin(x)^2)^(1/2)
cos(x) + i*sin(x)
cos(3*acos(x))

simple(f)
1
3*cos(x)^2 - 1
cos(2*x)
cos(x) + i*sin(x)
exp(i*x)
4*x^3 - 3*x

7. Thay s: Ta xt v d gii phng trnh bc hai ax2 + bx + c = 0. Cc lnh thc


hin nhim v ny l:
syms a b c x
s = solve(a*x^2 + b*x + c);
By gi ta mun tnh c th gi tr ca x vi a = 1, b = 2, c = 4 th dng cc lnh:
a = 1;
b = 2;
c = 4;
x = subs(s)
Lnh subs c th kt hp vi lnh double tnh tr s ca mt biu thc ch. Gi s
ta c:
syms t
M = (1 - t^2)*exp(-1/2*t^2);
P = (1 - t^2)*sech(t);
v mun xem trn th P v M khc nhau nh th no. Ta dng cc lnh:
482

ezplot(M);
hold on;
ezplot(P)
Tuy nhin ta vn kh hnh dung c s sai khc gia hai ng cong. V vy tt hn
chng ta kt hp subs, double li trong chng trnh ctcompsubs.m:
T = -6:0.05:6;
MT = double(subs(M, t, T));
PT = double(subs(P, t, T));
plot(T, MT, 'b', T, PT, 'r-.')
title(' ')
legend('M' ,'P')
xlabel('t');
grid
to ra th nhiu mu.
8. Gii phng trnh:
a. Gii cc phng trnh i s: Nu S l biu thc ch th:
solve(S)
tm gi tr ca bin k t trong S S = 0. V d:
syms a b c x
S = a*x^2 + b*x + c;
solve(S)
cho ta:
ans =
[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]
y l vec t ch m cc phn t ca n l 2 nghim ca phng trnh.
Nu ta mun tm nghim vi mt bin c m t, ta phi ch r bin nh mt
thng s ph. V d nu ta mun gii S theo b th phi vit:
b = solve(S,b)
v nhn c kt qu:
b=
-(a*x^2+c)/x
Ch rng v d ny gi thit phng trnh c dng f(x) = 0. Nu ta mun gii
phng trnh c dng f(x) = q(x) ta phi s dng chui. c bit lnh:
483

s = solve('cos(2*x)+sin(x)=1')
cho 4 nghim:
s=
[
0]
[
pi]
[ 1/6*pi]
[ 5/6*pi]
Phng trnh x^3-2*x^2 = x-1 gip ta hiu cch gii phng trnh. nh vo lnh:
s = solve('x^32*x^2 = x1')
cho ta kt qu:
s=
[ 1/6*(28+84*i*3^(1/2))^(1/3)+14/3/(28+84*i*3^(1/2))^(1/3)+2/3]
[ -1/12*(28+84*i*3^(1/2))^(1/3)-7/3/(28+84*i*3^(1/2))^(1/3)
+2/3+1/2*i*3^(1/2)*(1/6*(28+84*i*3^(1/2))^(1/3)
-14/3/(28+84*i*3^(1/2))^(1/3))]
[-1/12*(28+84*i*3^(1/2))^(1/3)-7/3/(28+84*i*3^(1/2))^(1/3)
+2/3-1/2*i*3^(1/2)*(1/6*(28+84*i*3^(1/2))^(1/3)
-14/3/(28+84*i*3^(1/2))^(1/3))]
Ta tnh gi tr s ca nghim:
double(s)
ans =
2.24697960371747 + 0.00000000000000i
-0.80193773580484 + 0.00000000000000i
0.55495813208737 - 0.00000000000000i
N cho thy tt c cc nghim ca phng trnh l s thc. iu ny khng ng.
Dng lnh vpa xc nh chnh xc:
vpa(s, 10)
to ra:
ans =
[ 2.246979604+.1e-9*i]
[ -.8019377357+.3e-9*i]
[ .5549581323-.5e-9*i]
iu ny ngha l phn o ca s rt nh nhng khc 0. Ta xem mt v d khc:
484

syms x
s = solve(tan(x)+sin(x)2);
Kt qu l mt vec t 41. Nh trn, ta dng lnh double:
X = double(s)
X=
0.88628729156094
-1.89793604072796
2.07662070137841
2.07662070137841
b. H phng trnh i s: By gi ta xt h phng trnh. Gi s ta c h
phng trnh:
x 2 y 2 = 0

y
x 2 =
v ta cn tm x v y. Trc ht ta to ra cc i tng cn thit:
syms x y alpha
C nhiu cch biu din nghim. Mt trong cc cch l vit:
[x, y] = solve(x^2*y^2, x (y/2) alpha)
v c c kt qu:
x=
[
0]
[
0]
[ alpha]
[ alpha]
y=
[ -2*alpha]
[ -2*alpha]
[
0]
[
0]
Sau vit vec t nghim:
v = [x, y]
cho ta:
485

v=
[
0, -2*alpha]
[
0, -2*alpha]
[ alpha,
0]
[ alpha,
0]
Ta xt tip phng trnh:
eqs1 = 'x^2*y^2=1, x1/2*yalpha'
[x, y] = solve(eqs1)
to ra cc nghim:
x=
[ 1/2*alpha+1/2*(alpha^2+2)^(1/2)]
[ 1/2*alpha-1/2*(alpha^2+2)^(1/2)]
[ 1/2*alpha+1/2*(alpha^2-2)^(1/2)]
[ 1/2*alpha-1/2*(alpha^2-2)^(1/2)]
y=
[ -alpha+(alpha^2+2)^(1/2)]
[ -alpha-(alpha^2+2)^(1/2)]
[ -alpha+(alpha^2-2)^(1/2)]
[ -alpha-(alpha^2-2)^(1/2)]
Cch gn cc nghim nh trn ch thch hp vi h c t phng trnh. Vi h c
nhiu phng trnh, solve to ra mt cu trc m cc trng ca n l cc nghim. Ta
kho st h phng trnh:
u 2 + v 2 = a 2

u + v = 1
2
a 2a = 3
Lnh:
S = solve('u^2v^2 = a^2','u + v = 1','a^22*a = 3')
Cho kt qu:
S=
a: [2x1 sym]
u: [2x1 sym]
v: [2x1 sym]
Cc nghim l cc trng ca S. l:
S.a
To ra:
ans =
486

[ -1]
[ 3]
Tng t ta tm c nghim u v v. Cu trc S by gi c th c x l bng
trng v ch s truy cp n cc phn ring bit ca nghim. V d nu ta mun
kim tra nghim th 2, ta c th dng pht biu sau:
s2 = [S.a(2), S.u(2), S.v(2)]
trch thnh phn t 2 ca mi trng.
s2 =
[ 3, 5, -4]
Pht biu:
M = [S.a, S.u, S.v]
To ra ma trn nghim M:
M=
[ -1, 1, 0]
[ 3, 5, -4]
m mi hng l mt nghim ca h.
Nu h phng trnh l tuyn tnh ta c th dng ma trn gii h. V d:
clear u v x y
syms u v x y
S = solve(x+2*yu, 4*x+5*yv);
sol = [S.x;S.y]
v:
A = [1 2; 4 5];
b = [u; v];
z = A\b
cho:
sol =
[ -5/3*u+2/3*v]
[ 4/3*u-1/3*v]
z=
[-5/3*u+2/3*v]
[ 4/3*u-1/3*v]
Nh vy ta c cng mt nghim cho d phng php gii khc nhau.
c. Gii phng trnh vi phn: Hm dsolve tnh nghim bng ch ca phng
trnh vi phn thng. Cc phng trnh c m t bng cc biu thc ch cha cc
ch ci D ch cc o hm. K hiu D2, D3,. . ., Dn tng ng vi o hm cp
487

d2 y
. Bin ph thuc
dx 2
l bin c x l bi D v bin c lp mc nh l t. Nh vy tn cc bin k t
khng c c D. C th dng bin c lp khc bng cch ch ra n nh l thng s
cui cng trong lnh dsolve. iu kin u c th m t nh l mt phng trnh ph.
Nu iu kin u khng c, nghim s cha cc hng s tch phn C1, C2 v.v. C
php ca dsolve c m t trong bng sau:
1,cp 2,..,cp n. Nh vy D2y trong Symbolic Math Toolbox l

C php
y = dsolve(Dyt = y0*y)
[u,v] = dsolve('Du = v', 'Dv = u')
S = dsolve('Df = g',' Dg = h','Dh = f')
S.f, S.g, S.h

Phm vi
Mt phng trnh, mt nghim
Hai phng trnh, hai nghim
Ba phng trnh, ra l cu trc
nghim

V d 1: Ta dng lnh:
dsolve('Dy = 1 + y^2')
v c kt qu:
ans =
tan(t-C1)
m t iu kin u, ta dng:
y = dsolve('Dy = 1+y^2','y(0) = 1')
v c:
y=
tan(t + 1/4*pi)
Ch l y trong vng lm vic ca MATLAB nhng bin c lp t th khng. Nh
vy lnh diff(y, t) gy ra li. t t vo vng lm vic ca MATLAB phi dng
syms t
V d 2: Cc phng trnh phi tuyn c th c nhiu nghim, thm ch ngay c khi
cho iu kin u.
x = dsolve('(Dx)^2 + x^2 = 1','x(0) = 0')
cho kt qu:
x=
[-sin(t)]
[ sin(t)]
V d 3: y l mt phng trnh bc 2 vi 2 iu kin u. Lnh:
488

y = simplify(dsolve('D2y = cos(2*x) y','y(0) = 1','Dy(0) = 0', 'x'))


to ra:
y=
-2/3*cos(x)^2 + 1/3 + 4/3*cos(x)
gii phng trnh:
d3u
=u
dx 3
u(0) = 1, u(0) = 1, u(0) =
ta dng cc lnh sau:
u = dsolve('D3u = u','u(0) = 1','Du(0) = 1','D2u(0) = pi','x')
d. H phng trnh vi phn: Hm dsolve c th x l h phng trnh vi phn,
c hay khng c iu kin u. V d ta c h phng trnh:
y=3f + 4g
g = -4f + 3g
gii h ta dng lnh:
S = dsolve('Df = 3*f + 4*g', 'Dg = 4*f + 3*g')
Nghim c tnh v tr v di dng cu trc S:
S=
f: [1x1 sym]
g: [1x1 sym]
Ta c th xc nh gi tr ca f v g bng lnh:
f = S.f
f=
exp(3*t)*(cos(4*t)*C1 + sin(4*t)*C2)
g = S.g
g=
-exp(3*t)*(sin(4*t)*C1 - cos(4*t)*C2)
Nu ta cho c iu kin u th vit:
[f, g] = dsolve('Df = 3*f + 4*g, Dg = 4*f + 3*g', 'f(0) = 0, g(0) = 1')
f=
exp(3*t)*sin(4*t)
489

g=
exp(3*t)*cos(4*t)
Bng sau m t mt vi v d v c php ca Symbolic Math Toolbox.
Phng trnh vi phn

dy
+ 4 y( t ) = e t
dt
y(0) = 1
d2 y
+ 4 y( x) = e 2 x
2
dx
y(0) = 0 , y( ) = 0
d2 y
= xy( x)
dx 2
1
y(0) = 0 , y( 3) = K 1 ( 2 3 )
3
(phng trnh Airy)

Lnh MATLAB
y = dsolve('Dy + 4*y = exp(-t)','y(0) = 1')

y = dsolve('D2y + 4*y = exp(2*x)', 'y(0) = 0',


'y(pi) = 0', 'x')
y = dsolve('D2y = x*y','y(0) = 0',
'y(3) = besselk(1/3, 2*sqrt(3))/pi', 'x')

9. Bin i Fourier v Fourier ngc:


a. Bin i Fourier: Bin i Fourier dng bin i phng trnh vi phn
thnh phng trnh i s. C php:
F = fourier(f)
F = fourier(f, v)
F = fourier(f, v, u)
Ta c th xem cc bin i Fourier trong bng sau:
Bin i Fourier

f ( x) = e x

F[f ]( w) = f( x)e iwxdx = e w


g( w ) = e

/4

F[g ]( t ) =
f( x) = xe

g( w)e

iwt

|x|

F[f ]( u) =

f( x)e

ixu

dt =

2
1 + t2

dx =

4i
(1 + u 2 )2 u

Lnh MATLAB
f = exp(-x^2)
fourier(f) cho:
pi^(1/2)*exp(-1/4*w^2)
g = exp(-abs(w))
fourier(g) cho
2/(1+t^2)
f = x*exp(-abs(x))
f = x*exp(-abs(x)) cho
-4*i/(1+u^2)^2*u
490

b. Bin i Fourier ngc: Khi bit hm nh Fourier dng bin i Fourier


ngc ta tm c hm gc. C php:
f = ifourier(F)
f = ifourier(F, u)
f = ifourier(F, v, u)
Bin i Fourier ngc
w

f( w) = e

4a 2

F 1[f ]( x) =

f( w)e

iwx

dw =

g( x ) = e

a ( ax ) 2
e

|x|

F 1[g ]( t ) =

g(x)e

itx

dx =

1 + t2

f( w) = 2e |w| 1

F 1[f ]( t ) = f( w)e iwtdw =

2 ( t )(1 t 2 )
(1 + t )

Lnh MATLAB
syms a real
f = exp(-w^2/(4*a^2))
F = ifourier(f)
F = simple(F) cho
ha*exp(-x^2*a^2)/pi^(1/2)
g = exp(-abs(x))
ifourier(g) cho
1/(1+t^2)/pi
f = 2*exp(-abs(w)) - 1
simple(ifourier(f,t)) cho
(2-pi*Dirac(t)-pi*Dirac(t)*t^2)/
(pi+pi*t^2)

10. Bin i Laplace v Laplace ngc:


a. Bin i Laplace: Bin i Laplace dng bin i phng trnh vi phn
thnh phng trnh i s. C php:
laplace(F)
laplace(F, t)
laplace(F, w, z)
Bin i Laplace
f( t) = t

L[f ] = F( t )e stdt =
0

g( s ) =

1
s

24
s5

Lnh MATLAB
f = t^4
laplace(f) cho
24/s^5
g = 1/sqrt(s)
laplace(g) cho
1/(s^(1/2))*pi^(1/2)
491

L[g ]( t ) = g(s)e stds =


0

f( t) = e

at

L[f ]( x) = f( t )e txdt =
0

1
x+a

f = exp(-a*t)
laplace(f) cho
1/(x+a)

b. Bin i Laplace ngc: Khi c nh ca hm,ta c th tm li hm gc bng


bin i Laplace ngc. C php:
F = ilaplace(L)
F = ilaplace(L, y)
F = ilaplace(L, y, x)
Bin i Laplace ngc
1
f ( s) = 2
s
1 c + i
L1[f ] =
f(s)e stds = t

2 i c i
1
g( t ) =
ta
1 c + i
1
L [g ] =
g( t )e xtdt = xe ax

2 i c i
1
f( u) = 2
u a2
1 c + i
1
1
1
L [f ] =
g( u)e xudu =

ax
2 i c i
2ae
2ae ax

Lnh MATLAB
f = 1/s^2
ilaplace(f) cho
t
g = 1/(t - a)
ilaplace(g) cho
x*exp(a*x)
f = 1/(u^2-a^2)
ilaplace(f) cho
1/(2*a*exp(a*x))
a*x))

1/(2*a*exp(-

3. POWER SYSTEM BLOCKSET


1. Khi nim chung: Power System Blockset c thit k cung cp cho chng ta
cng c hiu qu v tin li m phng nhanh v d cc mch in, cc h thng
in. Th vin ca n cha cc phn t c bn ca mch in nh my bin p,
ng dy, cc my in v cc thit b in t cng sut. Giao din ho cung cp
cc thnh phn ca h thng in. Cc thnh phn ny dc lu trong th vin
powerlib. m th vin ny t ca s MATLAB ta nh lnh powerlib. Khi ny
MATLAB m mt ca s cha cc khi h thng con khc nhau. Cc h thng con
ny bao gm:
Electrical Sources
Elements
Power Electronics
Machines
492

Connectors
Measuremets
Extras
Demos
Ta c th m cc h thng con ny to ra cc ca s cha cc khi m ta cn
copy vo m hnh. Mi mt thnh phn c biu din bng mt icon c bit.
2. M hnh ho mt mch in n gin: Power System Blockset cho php ta xy
dng v m phng mt mch in cha cc phn t tuyn tnh cng nh phi tuyn. Ta
xt mt mch in nh hnh v:
R
e = 2 .220sin(314 + 10) V
R = 10
L = 0.1 H
L
E
C = 100F
m phng mch in ny ta dng cc khi:
ngun, in tr, in khng, in dung v dng
c o. o in p ta dng khi Vmet. N cho tr s tc thi caCin p. thy
c gi tr hiu dng ta dng khi RMS. Cc bc thc hin nh sau:
T menu File ca ca s powerlib chn New ri chn Model s cha mch
in v gi l ctcircuit.mdl
M th vin Electrical Sources copy AC Voltage Source Block vo ca s
ctcircuit.mdl
M hp thoi AC Voltage Source Block bng cch nhp p ln n nhp
vo bin , phase v tn s theo cc gi tr cho trong s . Ch l bin l
gi tr max ca in p.
Do khi in tr khng c nn copy khi Series RLC Branch v t gi tr
in tr nh cho v t L l v cng v C l zero.
Thc hin tng t vi phn t L v C.
Ly khi o in p trong h thng con Measurement
xem in p, dng khi Scope ca Simulink chun. M Simulink v copy
khi Scope vo m hnh ctcircuit.mdl. Nu khi Scope c ni trc tip vi u ra
ca thit b o in p n s hin th in p theo V.
hon thnh mch in, ta cn ni cc phn t vi nhau
S m phng(lu trong ctcircuit.mdl) nh sau:

493

By gi ta c th bt u m phng t menu simulation. ta vo menu ny, chn


cc thng s cho qua trnh m phng v bm nt start.
d dng cho vic phn tch trng thi xc lp ca mch in chng ta, th
vin powerlib cung cp giao din ho(GUI). Copy khi giao din Powergui vo
ca s ctcircuit.mdl v nhn p vo icon m n. Mi dng c o i lng ra
c xc nh bng mi chui tng ng vi tn ca n. Cc bin trng thi c
hin th tng ng vi cc gi tr xc lp ca dng in v in p. Tn cc bin cha
tn cc khi, bt u bng tip u ng Il- hay Uc_. Du quy c c s dng vi
dng in v in p v cc bin trng thi c xc nh bng hng ca cc khi:
- dng in in cm chy theo hng mi tn tng ng vi du dng
- in p trn t C bng in p ra tr i in p vo
Chn menu Tool | Steady - State Voltages and Currents xem cc tr s xc lp ca
dng in v in p.
By gi chn menu Tool | Initial Value of State Variables hin th cc gi
tr khi u ca cc bin trng thi. Cc gi tr khi u ny c t bt u
simulation trng thi xc lp.
Tip theo ta tnh cc biu din ca khng gian trng thi ca m hnh ctcircuit
bng hm power2sys. Nhp dng lnh sau y vo ca s MATLAB:
[A, B, C, D, x0, states, inputs, outputs] = power2sys(ctcircuit);
Hm power2sys tr v m hnh khng gian trng thi ca mch trong 4 ma trn
A, B, C, D, x0 l vec t cc iu kin u m ta va hin th vi Powergui. Tn ca
cc bin trng thi, cc i lng vo v cc i lng ra c tr v trong 3 ma trn
chui.

494

Mt khi m hnh trng thi bit, n c th phn tch c trong vng tn s.


V d cc mode ca mch ny c th tm t cc gi tr ring ca ma trn A(dng lnh
MATLAB eig(A)):
eig(A)
ans =
1.0e+002 *
-0.5000 + 3.1225i
-0.5000 - 3.1225i
H thng ny c dao ng tt dn v phn thc m. Nu ta dng Control System
Toolbox, ta c th v th Bode. Cc lnh MATLAB(lu trong ctcircuitm.m) nh
sau:
freq = 0:1500;
w = 2*pi*freq;
[bien, pha, w] = bode(A, B, C, D);
semilogy(w, mag1(:, 2));
semilogy(w, mag1(:, 2));
3. M hnh ho qu trnh qu : Mt trong nhng phm vi ng dng ca Power
System Blockset l simulation qu trnh qu trong cc mch in. iu ny c th
lm c c vi cu dao c kh v mch in t. Ta xt qu trnh qu khi ng mt
mch RL vo ngun in xoay chiu. S m phng (lu trong cttransient.mdl)
nh sau:

Trc qu trnh qu , cu dao(c m phng bng phn t breaker) trng


thi m. Sau khong thi gian 1.5 chu k, cu dao ng, ni mch RL vo ngun e =
2 sin314t.
4. M hnh ho ng dy di: ng dy di l ng dy c thng s ri. N
c m phng bng khi Distributed Parameter Line. N c xy dng trn c s
495

xt qu trnh truyn sng trn ng dy. Ta xt mt ng dy di 1000 km c m


hnh (lu trong ctlongline.mdl)nh sau:

Khi s dng m hnh ta phi khai bo in tr, in dung v in cm ca


ng dy trn mt n v di, s pha v chiu di ca ng dy.
5. M hnh ho ng dy bng cc on hnh : Mc ch ca m hnh ny l
thc hin ng dy 1 pha vi thng s c tp trung trn tng on. Khi PI
Section Line thc hin ng dy truyn ti mt pha vi thng s tp trung trn tng
on . i vi ng dy truyn ti, in tr, in cm v in dung phn b u
trn sut chiu di. Mt m hnh xp x ng dy thng s phn b c c bng
cch ni nhiu on pi ging nhau. Khng ging nh ng dy thng s ri c s
trng thi l v hn, m hnh tuyn tnh cc on c s hu hn cc trng thi cho
php m hnh khng gian-trng thi c dng rt ra p ng tn s. S on c
dng ph thuc vo tn s c biu din. Xp x tt nht thc hin theo phng
trnh:
Nv
fmax =
8l
Trong :
N : s on pi
v : tc truyn sng(km/s = 1/L(H/km)C(F/km)
l : chiu di ng dy(km)
Ta xt ng dy trn khng di 100 km c tc truyn sng 300000 km/s, tn s
ln nht biu din c khi dng 1 on l 375Hz. M hnh n gin ny dng
trong h thng truyn ti nng lng. Ta xy dng m hnh (lu trong
ctpiline7_7.mdl)nh sau:

496

Ta nhp in tr, in cm v in dung trn mt n v di vo 3 u tin ca hp


thoi. Nhp di v s on pi mong mun vo 2 cui.
6. M hnh ho my in: Cc my in nm trong th vin Machines. Cc my
in c m phng da trn cc phng trnh c bn ca n v c chia thnh 2
dng: my in trong h n v tng i v my in trong h n v SI. ta xt qu
trnh m my bng in tr mt ng c in mt chiu. S m phng (lu trong
ctdcmachine.mdl) nh sau:

497

7. Gii thiu v in t cng sut: Power System Blockset c thit k


simulation cc thit b in t cng sut. Chng ta kho st mt mch in c
thyristor cung cp cho mt mch RL. S m phng (lu trong ctthyristor.mdl) nh
sau:

.
8. M hnh ho mch in 3 pha: Ta m hnh ho mt mch in 3 pha c ngun
i xng nhng ti khng i xng. S m phng (lu trong ctthreephases.mdl)
nh sau:

501

in p cc ngun c tr hiu dng l 231 V. Ti pha th nht l R = 1, L =


1H, pha th hai R = 15, L = 2H v pha th 3 l R = 10, L = 1H v C = 1F.
9. M hnh in khng h cm: Phn t in khng h cm thc hin mi lin h t
gia 2 hay 3 dy qun. Khi Mutual Inductance thc hin lin h t gia 3 dy qun
ring bit. Ta m t in tr v in cm ca tng dy qun trn mc vo th nht ca
hp thoi v in tr, in cm h cm trn mc vo cui cng. M hnh in nh sau
(lu trong ctmutualinduc.mdl):

Nu mc vo ca dy qun th 3 b b trng, ngha l ch c h cm gia 2 dy


qun. Cc u vo ca khi Mutual Inductance l cng cc tnh ti mt thi im.
Do simulation nn cn:
Rs > 0 , Rs > Rm , Lm 0 , Ls Lm
in tr ca dy qun phi dng v ln hn in tr h cm. in cm h cm phi
khc 0 nhng in tr h cm c th bng 0. Dy qun c th th ni, ngha l khng
ni vi tng tr hay phn cn li ca mch.

502

10. M hnh nhnh RLC ni song song: Phn t ny thc hin nhnh RLC ni song
song. Khi Parallel RLC Branch thc hin in tr, in cm v in dung ni song
song. b mt phn t R,L hay C ta phi t cc thng s tng ng l Inf, Inf v 0.
Ta c th dng gi tr m cho cc thng s. c p ng tn ca b lc tn s bc 7
660Hz ta dng mch nh trong file ctpararlc.mdl.

Tng tr ca mch:

V(s) RLCs 2 + Ls + R
Z(s) =
=
I(s)
LCs 2 + RCs
c p ng tn ca tng tr ta phi xc nh m hnh khng gian-trng thi (ma
trn A B C D) ca h thng (lu trong ctpararlcm.m)
[A, B, C, D] = power2sys(ctpararlc);
freq = logspace(1, 4, 500);
w = 2*pi*freq;
[Z,phaseZ] = bode(A, B, C, D, 1, w);
subplot(2, 1, 1)
loglog(freq, Z)
grid
title(Bo loc song hai bac 11)
xlabel(Tan so, Hz)
ylabel(Tong tro Z)
subplot(2, 1, 2)
semilogx(freq, phaseZ)
xlabel(Tan so, Hz)
ylabel(Pha Z)
grid
11. M hnh ti RLC ni song song: Phn t ny thc hin ti RLC ni song song.
Khi Parallel RLC Load thc hin ti tuyn tnh nh t hp ni song song ca cc
phn t R, L v C. xc nh tham s ta nhp in p nh mc v tn s nh mc
503

vo 2 mc u tin. Nhp cng sut tc dng, cng sut phn khng trn cun dy v
cng sut phn khng trn t in vo 3 mc cui. Cc cng sut phn khng phi
dng. Ti tn s m t, ti s c tng tr hng v cng sut t l vi bnh phng
in p t vo. Ta tm cc gi tr xc lp ca in p v dng in ti trong mch
trong file ctloadrclp.mdl.

12. M hnh nhnh RLC ni ni tip: Phn t ny thc hin nhnh RLC ni ni
tip. Khi Series RLC Branch thc hin in tr, in cm v in dung ni ni tip.
loi tr R, L hay C ta cho chng bng 0, 0 hay Inf. Cc gi tr ny c th t l s
m. Ta xt mt m hnh nh trong file ctserierlc.mdl. Tng tr ca nhnh l:
V(s) LCs 2 + RCs + 1
Z(s) =
=
I(s)
Cs
nhn c p ng tn s ca tng tr ta phi xy dng m hnh khng gian
- trng thi ca h thng:
[A,B,C,D] = power2sys(ctserierlc);
freq = logspace(1, 4, 500);
w = 2*pi*freq;
[Y, phaseY] = bode(A, B, C, D, 1, w);
Z = 1./Y;
phaseZ = -phaseY;
subplot(2, 1, 1)
loglog(freq, Z)
grid
title(Bo loc song bac 5)
xlabel(Tan so, Hz)
ylabel('Tong tro Z)
subplot(2,1,2)
semilogx(freq,phaseZ)
504

xlabel(Tan so, Hz)


ylabel(Pha Z)
grid
12. M hnh ti RLC ni ni tip: Phn t ny thc hin ti RLC ni ni tip tuyn
tnh.

Khi Series RLC Load thc hin ti RLC ni ni tip tuyn tnh. Ta nhp gi
tr in p v tn s nh mc vo 2 u ca hp thoi. Nhp cng sut tc
dng,cng sut phn khng trn in cm v cng sut tc dng trn in dung vo 3
cui.Cc cng sut phn khng phi c tr s dng. Ti tn s m t, ti c tng
tr xc nh hng v cng sut ca n t l vi bnh phng in p t vo. Ta tm
gi tr xc lp ca in p v dng in ca ti trong file ctloadrlcs.mdl.
4. NG DNG MATLAB TRONG IU KHIN T NG
1. Cc dng m hnh h thng: xy dng m hnh ca h thng, MATLAB cung
cp mt s lnh. M hnh h thng m t bng hm truyn c xy dng nh lnh
tf(ts,ms) vi ts l a thc t s v ms l a thc mu s. Hm zpk(z, p, k) vi z l vec
t im khng, p l vec t im cc v k l h s khuych i to nn m hnh im
khng-im cc. Hm ss(a, b, c, d) vi a, b, c, d l cc ma trn to nn m hnh khng
gian - trng thi.
V d: Ta to ra mt s m hnh nh cc lnh MATLAB sau(lu trong
ctspacestate.m):
clc
ts = [1 2];
ms = [1 5 4];
sys1 = tf(ts, ms)
sys2 = zpk([-6 1 1], [-5 1], 3)
sys3 = ss([1 2; 3 4], [1 1; 0 1], [0 1; 1 2; 3 1], 0)
505

Kt qu l:
Transfer function:
s+2
------------s^2 + 5 s + 4
Zero/pole/gain:
3 (s+6) (s-1)^2
--------------(s+5) (s-1)
a=
x1
x2
x1
1
2
x2
3
4
b=
u1
u2
x1
1
1
x2
0
1
c=
x1
x2
y1
0
1
y2
1
2
y3
3
1
d=
u1
u2
y1
0
0
y2
0
0
y3
0
0
Continuous-time model.
2. im cc v im zero ca hm truyn: bin i h thng cho bi hm
truyn thnh h cho bi im cc, im zero v h s khuch i dng hm tf2zp. Ta
cng c th dng hm pole(sys) tm im cc ca h thng sys v dung hm
zero(sys) tm im khng ca h thng sys
Ta dng cc lnh MATLAB sau(lu trong ctzp2tf.m):
z = [-6; -5; 0];
k = 1;
p = [-3+4*i; -3-4*i; -2; -1];
[ts,ms] = zp2tf(z, p ,k)
Kt qu l:
506

ts =
0

1 11

30

ms =
1 9 45 87 50
thy c s phn b im khng v im cc ca h thng trn mt phng
phc ta dng hm pzmap. Trc ca thi c chia li bng lnh sgrid. Cc im
khng biu th bng vng trn v im cc biu th bng du . Ta xt cc lnh
MATLAB sau(lu trong ctpzmap.m):
clc
sys = zpk([-6 1 1],[-5 1],3)
axis equal
pzmap(sys)
sgrid
3. Khai trin hm truyn thnh tng cc phn thc n gin: Cho hm truyn, ta
c th khai trin n thnh tng cc phn thc n gin bng lnh residue. Hm
residue cho vec t ct cc phn d r, vec t ct cc im cc p v phn nguyn k.
Ngc li, c r, p, k ta c th tm hm truyn bng cc lnh MATLAB sau(lu trong
ctresidue1.m):
r = [0.0-0.25*i; 0+0.25*i; -2];
p = [0+2*i;0-2*i;-1];
k = 2;
[ts, ms] = residue(r, p, k)
Kt qu l:
ts =
2 0
ms =
1 1

4. Bin i hm truyn thnh khng gian - trng thi: Cho phng trnh vi phn:
dn y
d n 1y
dy
a n n + a n 1 n 1 + " + a1
+ a 0 y = u( t )
dx
dx
dx
t x1 = y; x2 = y; x3 = y v.v ta c h phng trnh trng thi:
x = Ax + Bu
y = Cx + Du
gi l phng trnh khng gian - trng thi
Nu mt h iu khin t ng cho bi hm truyn ta c th bin i v khng
gian - trng thi bng lnh tf2ss.
V d: Cho hm truyn :
507

s2 + 7s + 2
s 3 + 9s 2 + 26s + 24
Ta bin h v dng khng gian-trng thi bng cc lnh MATLAB sau(lu trong
cttf2ss.m):
H(s) =

ts = [1 7 2];
ms = [1 9 26 24];
[a,b,c,d ] = tf2ss(ts, ms)
Kt qu l:
a=
-9 -26 -24
1 0 0
0 1 0
b=
1
0
0
c=
1 7 2
d=
0
5. Bin i khng gian - trng thi thnh hm truyn: bin i h cho di
dng khng gian - trng thi thnh hm truyn ta dng lnh ss2tf. Ta xt cc lnh
sau(lu trong ctss2tf.m)
a = [0 1 0; 0 0 1; -1 -2 -3];
b = [10; 0; 0];
c = [1 0 0];
d = [0];
[ts,ms] = ss2tf(a, b, c, d, 1)
Kt qu l:
ts =
0 10.00 30.00 20.00
ms =
1.00 3.00 2.00 1.00
Nh vy hm truyn l:

508

G(s) =

10(s 2 + 3s + 2)
s 3 + 3s 2 + 2 s + 1

6. Nghim ca phng trnh trng thi: tm nghim ca phng trnh trng thi
ta dng lnh lsim.
V d: Cho phng trnh trng thi ca mt h tuyn tnh
1
0 x1 1
x 1 0
x = 0
x + 1 u( t )
0
1
2

2
x 3 6 11 6 x 3 1
y = [1 1 0] x
Cho iu kin u x(0) = [1 0.5 -0.5]. Tm x(t), y(t) vi u(t) l hm n v. Ta dng
cc lnh MATLAB sau(lu trong ctlsim.m):
a = [0 1 0; 0 0 1; -6 -11 -6];
b = [1; 1; 1];
c = [1 1 0];
d = 0;
x0 = [1 0.5 -0.5];
t = 0:0.05:4;
u = ones(1, length(t));
[y,x] = lsim(a, b, c, d, u, t, x0);
plot(t, x, t, y)
Do iu kin u nn nghim y xut pht t 1.5
Khi u(t) l sin2t ta tnh p ng nh sau(lu trong ctlsim1.m):
a = [0 1 0;0 0 1;-6 -11 -6];
b = [1;1;1];
c = [1 1 0];
d = 0;
x0 = [1 0.5 -0.5];
t = 0:0.05:4;
u = sin(2*pi*t);
[y, x] = lsim(a, b, c, d, u, t, x0);
plot(t, x, t, y)
7. Bin i s khi: Mt s khi iu khin thng rt phc tp. V vy ta
thng phi bin i n v dng n gin bng lnh connect.
V d: Xt s khi sau:
1
1

+
-

+
- -

0.5
2

4
s+4
3

1
s+2
4

1
s+3
5

509

Xc nh phng trnh trng thi v hm truyn ca ton b s :


Gi ni v di l t s v mu s ca hm truyn ca khi th i. Ta c cc lnh(lu
trong ctconnect.m):
n1 = 1;d1 = 1;
n2 = .5;d2 = 1;
n3 = 4;d3 =[1 4];
n4 = 1;d4 = [1 2];
n5 =1;d5 = [1 3];
n6 =2;d6 = 1;
n7 = 5;d7 = 1;
n8 = 1;d8 = 1;
nblocks = 8;
blkbuild;
q = [1 0 0 0 0
2 1 -6 -7 -8
32000
43000
54000
63000
74000
8 5 0 0 0];
iu = [1];
iy = [5];
[A, B, C, D] = connect(a, b, c, d, q, iu, iy)
Kt qu l:
A=
-8.0 -2.5 -0.5
4.0 -2.0 0
0 1.0 -3.0
B=
0.5
0
0
C=
510

0 0 1
D=
0
[ts, ms] = ss2tf(A, B, C, D, 1)
ts =
0 0 0 2.0
ms =
1.0 13.0 56.0 80.0
Hm truyn ca h l:
C(s)
1
= 3
2
R(s) s + 13s + 56s + 80
8. Ghp ni cc s khi: ghp ni to nn mt h thng t nhiu h thng con
ta c th s dng mt s kh nng nh sau:

u1
u2

u1
u2
v2

sys1

sys1
c
sys2

y1

sys2
b

y2

sys2
a

y1

sys1

v1

u1

sys1

u
y2

z1

u2

d
sys2

z2
v2
y
y u
sys1
sys1
u
1
sys2theoyhng:
a. Ghp
Ghp theo hng (hnh a) c ngha l ghp u ra ca cc h
1
thng con c u vo khc znhau.
Hm sys(sys1, sys2) thc hin vic ghp ny. Ta c
e
sys2
cc lnh MATLAB sau(lu trong ctrow.m):
clc
sys1 = tf(1,[1 0])
sys2 = ss(1,2,3,4)
sys = [sys1,sys2]

b. Ghp theo ct: Ghp theo ct(hnh b) c ngha l ghp u ra ca h thng


con c chung u vo. Ta c cc lnh MATLAB sau(lu trong ctcolumn.m):
clc
511

sys1 = tf(1, [1 0])


sys2 = ss(1, 2, 3, 4)
sys = [sys1; sys2]
c. Ghp theo ng cho: Khi ghp theo ng cho(hnh c), ta c h thng
mi bo m cch ly cc h thng con ban u. ghp ta dng lnh append. Cc
lnh MATLAB(lu trong ctdiag.m) nh sau:
clc
sys1 = tf(1, [1 0])
sys2 = ss(1, 2, 3, 4)
sys = append(sys1, sys2)
d. Ghp song song: Ta dng cch ghp nh trn hnh d. Hm parallel dng
ghp song song cc h thng con. Cc lnh MATLAB (lu trong ctparallel.m) nh
sau:
clc
sys1 = tf(1, [1 0])
sys2 = ss(1, 2, 3, 4)
sys = parallel(sys1, sys2)
e. Ghp tun t: Ta dng cch ghp nh trn hnh e. Hm series dng ghp
tun t cc h thng con. Cc lnh MATLAB(lu trong ctseries.m) nh sau:
clc
sys1 = tf(1,[1 0])
sys2 = ss(1,2,3,4)
sys = series(sys1, sys2)
f. Ghp c phn hi: Ta dng cch ghp nh hnh f. Hm feedback dng
ghp c phn hi cc h thng con. Cc lnh MATLAB (lu trong ctfeedback.m) nh
sau:
clc
sys1 = tf(1, [1 0])
sys2 = ss(1, 2, 3, 4)
sys = feedback(sys1, sys2)
g. S dng hm connect: Hm connect to ra m hnh khng gian-trng thi
t cc h thng con. C php ca hm:
sysc = connect(sys,Q,inputs,outputs)
512

Mt h thng thng c cho di dng cc khi. Ngay c khi s khng phc


tp, vic tm c m hnh khng gian-trng thi ca h thng kh kh. tm c
m hnh khng gian-trng thi, trc ht ta dng hm append:
sys = append(sys1, sys2,..., sysN)
m t mi h thng con sysj h thng dng ng cho. Tip n dng lnh:
sysc = connect(sys, Q, inputs, outputs)
ni cc h thng con v rt ra m hnh khng gian - trng thi sysc ca ton b h
thng. Ma trn Q ch ra cch ni cc h thng con trn s . Mi u vo ca sys c
mt hng, trong phn t u tin ca mi hng l s u vo. cc phn t tip theo
ca mi hng m t u vo ca h thng c ly t u. V d u vo 7 ly t u
ra 2, 15 v 6 trong u vo ca 15 m th hng tng ng ca Q l [ 7 2 -15 6].
Hng no khng phn t th thm s 0. Ta tm m hnh khng gian trng - thi ca
s sau:

uc

sys2

sys1

u1

10 1
s+5

+
4

u2
-

x = Ax + Bu 2
y = Cx + Du 3

y1
y2

2(s + 1) 4
s+2
Ta cn ni u ra 1 v 4 vo u vo 3 (u2) v usys3
ra 3 (y2) vo u vo 4 nn ma trn
Q l:
Q = [3 1 -4
4 3 0];
S c 2 u vo t cc h thng khc l uc v u1 (u vo 1 v 2 ca sys) v 2 u
ra a n cc h thng khc l y1 v y2 (u ra 2 v 3 ca sys). Nh vy ma trn
inputs v outputs l:
inputs = [1 2];
outputs = [2 3];
Cc lnh MATLAB thc hin vic bin i s (lu trong ctconnectsys.m) nh sau:
clc
A = [ -9.0201 17.7791
-1.6943 3.2138 ];
B = [ -.5112 .5362
-.002 -1.8470];
513

C = [ -3.2897 2.4544
-13.5009 18.0745];
D = [-.5476 -.1410
-.6459 .2958 ];
sys1 = tf(10,[1 5],'inputname','uc')
sys2 = ss(A,B,C,D,'inputname',{'u1' 'u2'},...
'outputname',{'y1' 'y2'})
sys3 = zpk(-1,-2,2)
sys = append(sys1,sys2,sys3)
Q = [3 1 -4
4 3 0];
inputs = [1 2];
outputs = [2 3];
sysc = connect(sys,Q,inputs,outputs)
9. p ng ca h thng bc hai: Dng chun ca hm truyn ca h thng bc hai
l:
1
G(s) = 2
s + 2n s + 2n
Trong n l tn s t nhin v l h s tt ca h thng. to ra hm truyn ny
khi bit n v ta dng lnh .
V d: Tm hm truyn v ma trn trng thi ca h thng bc hai bit n = 2.4 rad/s
v = 0.4. Cc lnh MATLAB (lu trong ctord2.m) nh sau:
[ts, ms] = ord2(2.4, 0.4)
[a, b, c, d] = ord2(2.4, 0.4)
p ng thc t ca h l mt dao ng tt dn c dng:
1
c( t ) = 1 e n t sin(n t + )

Trong = 1 2 v = tan 1 ( / )
Ta gi tr l thi gian dp ng t t 10% gi tr cui n 90% gi tr cui; thi gian
t n nh l tp; nhanh o bng tr v tp; thi gian tt l ts. Thi gian t n
nh c xc nh bng cch cho o hm ca c(t) bng 0.

(4.1)
tp =
1 2
Gi tr nh (percent overshoot-p.o)khi kch thch l bc nhy l:
2

p.o = e 1 100
(4.2)
p ng vi kch thch bc nhy tm c nh hm step cn p ng vi kch thch
xung tm c nh hm impulse
514

V d 1: Tm p ng ca khu bc hai c hm truyn :


2n
G(s) = 2
s + 2n s + 2n
khi n = 5 v = 0.6. Cc lnh MATLAB (lu trong ctstep.m) nh sau:
clc
ts = 25;
ms = [1 6 25];
sys = tf(ts ,ms)
t = 0:0.02:2;
c = step(sys, t);
plot(t, c)
xlabel('t(s)');
ylabel('c(t)');
V d 2: Cho h c s nh hnh v:

R(s)

d
s(s + 1)

C(s)

1+es
Tm d v e p.o bng 40% v tp = 0.8s. Cc lnh MATLAB (lu trong ctstep1.m)
nh sau:
clc
po = 40;
z = log(100/po)/sqrt(pi^2+(log(100/po))^2)%theo (4-2)
zn = 0.27999799333504
tp = 0.8;
wn = pi/(tp*sqrt(1-z^2))% theo (4-1)
ts = wn^2;
ms = [1 2*z*wn wn^2];
sys = tf(ts, ms);
t = 0:0.02:4;
c = step(sys, t);
plot(t,c)
T s khi ta c:
C(s)
d
= 2
R(s) s + (de + 1)s + d
515

Phng trnh c tnh l:


s2 + (de + 1)s + d = s2 + 2ns + 2n
Vi 2n = wn = 0.28 v z = = 4.0906 ta c d = 16.733 v e = 0.077
Khi c mt hm truyn ta c th xc nh h s tt v tn s t nhin n bng lnh
damp.
V d 3: Cho h c hm truyn:
2 s 2 + 5s + 1
H(s) = 2
s + 2s + 3
Tm h s tt v tn s t nhin n. Cc lnh MATLAB (lu trong ctdamp.m) nh
sau:
h = tf([2 5 1], [1 2 3]);
damp(h)
Kt qu l:
Eigenvalue
Damping
Freq. (rad/s)
-1.00e+000 + 1.41e+000i 5.77e-001 1.73e+000
-1.00e+000 - 1.41e+000i 5.77e-001 1.73e+000
10. p ng trong min thi gian ca h thng:
a. p gi tr ban u: p ng gi tr ban u m t phn ng ca h khi
khng c kch thch du vo nhng tn ti cc gi tr ban u ca vec t trng thi x0.
Phn ng c gi l chuyn ng t do ca h. p ng ny c xc nh bng
hm initial. Ta c cc lnh MATLAB tm p ng ban u ca mt h thng (lu
trong ctinitial.m)nh sau:
clc
a = [-0.5572 -0.7814;0.7814 0];
c = [1.9691 6.4493];
x0 = [1 ; 0]
sys = ss(a, [], c, []);
initial(sys, x0)
b. p ng xung Dirac: Ta tm p ng ca h thng vi xung nh hm
impulse. Cc lnh MATLAB (lu trong ctimpulse.m)nh sau:
clc
a = [-0.5572 -0.7814; 0.7814 0];
b = [1 -1; 0 2];
c = [1.9691 6.4493];
sys = ss(a, b, c, 0);
516

impulse(sys)
Hnh bn tri l p ng ca knh th nht v hnh bn phi l p ng ca knh th
2.
c. p ng i vi hm bc nhy: tm p ng ca h thng i vi hm
bc nhy ta dng hm step. Cc lnh MATLAB (lu trong ctstep2.m) nh sau:
clc
a = [-0.5572 -0.7814;0.7814 0];
b = [1 -1;0 2];
c = [1.9691 6.4493];
sys = ss(a, b, c, 0);
step(sys)
d. p ng vi tn hiu bt k: tm p ng ca h thng i vi hm bt
k ta dng hm lsim. Cc lnh MATLAB (lu trong ctlsim.m) nh
sau:
clc
[u, t] = gensig('square', 4, 10, 0.1);
H = [tf([2 5 1], [1 2 3]) ; tf([1 -1], [1 1 5])]
lsim(H, u, t)
Ta dng hm gensig to mt xung hnh vung, trong 4 chu k v ly mu sau 0.1s
trong 10 chu k.
11. p ng trong min tn s ca h thng: Cho mt hm truyn ca mt h
thng,thay s bng j ta c hm truyn t tn s ca h thng . rng bng ca
h thng B l tn s m ti bin ca g gim i 1/2. Tn s ng vi gi tr max
ca G() gi l r v c tr s l:
r = n 1 2 2
v c tnh tn bin-pha ca mt h thng ta dng lnh freqs.
V d: Cho hm truyn ca mt h thng l:
4
G(s) = 2
s + 2s + 4
Tm c tnh tn bin-pha ca h thng bng cc lnh MATLAB(lu trong ctfreqs.m):
w = 0:0.01:3;
ms = [1 2 4];
ts = [4];
517

freqs(ts, ms, w);


Ta cng c th to th nh sau(lu trong ctfreqplot.m):
ts = [4];
ms = [1 2 4];
w = 0:0.01:3;
g = freqs(ts, ms, w);
mag = abs(g);
pha = angle(g);
subplot(2, 1, 1);
loglog(w, mag);
grid on;
subplot(2,1,2);
semilogx(w, pha);
grid on
Ngc li khi c c tnh tn bin - pha ta c th tm li c hm truyn bng lnh
invfreqs.
V d: Tm hm truyn ca h thng(lu trong ctinvfreqz.m):
ts = [1 2 3 2 1 4];
ms = [1 2 3 2 3];
[h, w] = freqz(b, a, 64);
[tsm, msm] = invfreqz(h, w, 4, 5)
Ta cng c th xy dng c tnh tn thc-o
V d: Cho hm truyn :
10
G(s) = 3
s + 4.5s 2 + 9s + 10
Tm c tnh tn thc - o ca h bng cc lnh MATLAB (lu trong ctfreqsplot.m):
ts = [10];
ms = [1 4.5 9 10];
w = [1:0.01:3];
h = freqs(ts, ms, w);
t = real(h);
a = imag(h);
subplot(2, 1, 1);
plot(w, t)
subplot(2, 1, 2);
plot(w, a)
518

v th Bode ca h thng ta dng hm bode. th th nht nht l c


tnh bin-tn logarit, c chia theo dB. th th hai l c tnh pha- tn logarit chia
theo .

519

Cc dng ca lnh bode gm:


bode(sys)
bode(sys,w)
[bien, pha, w] = bode(sys)
v th Bode ca mt h thng ta dng cc lnh MATLAB(lu trong ctbode.m)
nh sau:
clc
g = tf([1 0.1 7.5], [1 0.12 9 0 0]);
figure(1)
bode(g)
figure(2)
bode(g, {0.1 , 100})
gd = c2d(g, 0.5)
figure(3)
bode(g, 'r', gd, 'b--')
Hm margin cho bit d tr n nh ca h thng. D tr bin gm l h s khuych
i Fr m nu ta thm vo hm truyn t ca h h th h kn va t c gii hn
n nh. D tr pha pm c nh ngha l khong cch gc pha r ti -180. Hm
cho bit gm ti tn s o pha wcg v pm ti tn s ct pha wcp. Hm allmargin c
tc dng rng hn hm margin. Cc kt qu tr v ca allmargin gm:
GMFrequency: gi tr tn s m ti th pha ct ng thng nm ngang 180
GainMargin: d tr bin - gi tr o ca bin ti tn s GMFrequency
PMFrequency: gi tr tn s m ti th bin ct ng thng nm ngang 0
dB(ng vi h s khuych i 1)
PhaseMargin: d tr pha - khong cch gc (> 0) t v tr PMFrequency n 180.
DelayMargin: d tr thi gian tr - gi tr thi gian tr m nu vt qu, h
thng s mt n nh.
DMFrequency: gi tr tn s ng vi DelayMargin.
Stable: =1 khi mach vng kn n nh; bng 0 trong cc trng hp khc.
Cc i lng ny c th c c t th to bi margin. xc nh d tr
n nh ca mt h thng c th ta dng cc lnh MATLAB(lu trong
ctmatgin6_32.m) nh sau:
clc
sys = zpk([], [-1 -1 -1], 4)
margin(sys)
allmargin(sys)
522

Kt qu h thng n nh. N c DelayMargin = 0.3s. By gi ta gn cho sys mt


khong thi gian tr l stabil.DelayMargin + 0.01, ngha l vt qu thi gian tr n
nh 0.01s. Kt qu tnh toan mi ca allmargin s thng bo tnh khng n nh ca
h thng. Cc lnh MATLAB (lu trong ctnewstabil6_33.m) nh sau:
clc
sys = zpk([], [-1 -1 -1], 4)
margin(sys)
stabil = allmargin(sys)
sys.ioDelay = stabil.DelayMargin + 0.01;
newstabil = allmargin(sys)
Mt kh nng khc m t c tnh tn s l th Nyquist. N biu din cc
gi tr thc v o thuc hm truyn t phc ca mch vng h F0(j) trong di tn s
= 0 trn h to phc. ng cong do cc im to thnh c gi l qu
o bin - pha F0(j). Trn c s tiu chun n nh Nyquist ta c th rt ra kt lun
v tnh n nh ca h kn(c phn hi n v m) t th Nyquist. v th
Nyquist ta dng hm Nyquist. Ta c cc lnh MATLAB(lu trong ctnyquist6_34.m)
nh sau:
clc
H = tf([2 5 1], [1 2 3])
nyquist(H)
12. Tnh n nh: Tiu chun n nh ni rng h s n nh nu cc nghim ca
phng trnh c tnh c phn thc m. Phng trnh c tnh l a thc mu s ca
hm truyn. Do vy ch cn tnh nghim ca a thc c tnh bng lnh roots l ta c
th xc dnh h n nh hay khng.
V d: Xt tnh n nh ca h c phng trnh c tnh l:
s4 + 10 s3 + 35s2 + 50s + 24
Cc lnh MATLAB l:
a = [1 10 35 50 24];
roots(a)
ans =
-4.0000
-3.0000
-2.0000
-1.0000
Nh vy h n nh.

523

13. nhy: nhy ca h thng c o bng t s phn trm s thay i ca


hm truyn theo s thay i phn trm ca thng s b. V d nhy ca hm truyn
T(s) theo b c xc nh bng:
T(s) / T(s) T(s) T(s)
S Tb =
=
b / b
b b
Khi b gn n 0 ta c:
T(s) b
S Tb =
b T(s)
nhy tnh l gi tr ca S khi t0. nhy ng c tnh bng cch thay s bng
j v v ng S theo . Bin ca S(j) o sai s ca h thng.
V d: Kho st h iu khin nh hnh v sau:
Thitb
b
(s + 1)

Bb
R(s)

K
-

C(s)

h
Trong b c tr nh mc l 4 v h c Sensor
tr nh mc l 0,5. Tm nhy T(s) theo b,
v modul hm nhy theo vi hai gi tr b l K = 2 v K = 0.5. Tm nhy T(s)
theo h, v modul ca hm nhy theo h vi K = 2 v K = 0.5.
Hm truyn ca h thng l:
Kb
(Ts) = 2
s + 1 + Kbh
Vi b = 4 v h = 0.5 ta c B = 1 + 2K.
nhy ca T(s) theo b khi b = 4 v h = 0.5 l:
s+1
s+1
T(s) b
=
=
S Tb =
b T(s) s + 1 + Kbh s + 1 + 2K
Kbh
2K
T(s) h
S Th =
=
=
b T(s) s + 1 + Kbh s + 1 + 2K
Cc lnh MATLAB (lu trong ctsensibility.m) nh sau:
k1 = 1;
k2 = 0.5;
ts = [1 1];
ms1 = [1 1+2*k1];
ms2 = [1 1+2*k2];
w = 0:0.01:15;
stb1 = abs(freqs(ts, ms1, w));
524

stb2 = abs(freqs(ts, ms2, w));


subplot(2, 1, 1);
plot(w, stb1, w, stb2);
title('Do nhay cua T theo b');
ts1 = -2*k1;
ts2 = -2*k2;
stb1 = abs(freqs(ts1, ms1, w));
stb2 = abs(freqs(ts2, ms2, w));
subplot(212);
plot(w, stb1, w, stb2);
title('Do nhay cua T theo h');
nhy ca h thng theo b gim khi h s khuch i ca vng h K tng trong khi
nhy theo h tng khi K tng. R rng l nhy theo b tng nhanh bn ngoi B.
14. Sai s xc lp: Kho st h nh hnh v:
R(s)

G(s)

H(s)

Hm truyn ca h kn l:
C(s)
G(s)
=
R(s) 1 + H(s)G(s)
Sai s ca h kn l:
E(s) = R(s) H(s)C(s) =

C(s)

R ( s)
1 + H(s)G(s)

S dng nh l gi tr cui ta c:
sR(s)
e ss = lim
s 1 + G( s)H( s)
u vo bc nhy n v:
1
1
e ss =
=
1 + lim G(s)H(s) 1 + K p
s

u vo tng tuyn tnh n v:


1
1
=
e ss =
1 + lim sG(s)H(s) K v
s

u vo parabol n v:
e ss =

1
1
=
1 + lim s G(s)H(s) K a
2

Ta c th dng Symbolic Math tnh cc gii hn trn.


525

15. Phn tch v thit k qu o nghim: Phng php kinh in tham s ho


khu iu khin ca vng iu hnh l phng php qu o nghim. Qu o
nghim l qu o im cc, hp thnh bi cc iu cc ca h thng, ph thuc vo
h s khuych i phn hi k va c biu di trn mt phng phc vi phn thc
Re() = trn trc honh x v phn o Im() = trn trc tung y. v c qu
o nghim ca h thng ta dung hm rlocus. Ta xt h thng sau:

Gc

G0

GM
C php ca rlocus l
k
rlocus(sys[,k])
[r, k] = rlocus(sys)
r = rlocus(sys, k)
M hnh sys trong lnh trn l hm truyn t ca h thng h GoGcGM c
xc nh bng lnh MATLAB:
sys = sysM*sysO*sysC
m cha c h s khuych i phn hi k, l tham s tu chn s c khai bo ring.
iu c ngha l sys c ghp ni bi cc m hnh ring l. Khi gi rlocus(sys[,
k]) m khng yu tr bin v ta nhn c th qu o nghim ca sys. Nu ta
khng khai bo cc h s khuych i trong vec t tham s tu chn k, MATLAB s
t ng quyt nh gi tr thch hp. Sau khi dng rlocus v qu o im cc ta tm
cc gi tr lin quan n im cc bt k nm tn qu o bng cch nhp chut vo
mt im trn qu o. Lc lnh rlocusfind c thc hin. Ta dng cc lnh
MATLAB sau (lu trong ctrlocus.m) v qu o nghim ca mt h thng:
clc
sys = zpk([],[-0.1 -1-j -1+j ], 1)
rlocus(sys)
[r, k] = rlocus(sys)
sgrid
trc quan ta c th dng cng c thit k bng cch nhp lnh sisotool vo
ca s lnh MATLAB.

526

L LCH
I. L LCH KHOA HC
H v tn: Trn Vn Chnh
Gii tnh: nam
Ngy, thng, nm sinh: 19 - 08 - 1954
Dn tc: Kinh
Quc tch: Vit Nam
Tt nghip i hc nm: 1977 ti Trng i hc Bch khoa H Ni
Chuyn ngnh: My in
Ni sinh: Lam Kiu, Can Lc, H Tnh.
Hc v: Tin s k thut
Hc hm: Ph gio s
Lnh vc nghin cu: Ti u ho my in
a ch lien h: 54 Nguyn Lng Bng, Nng
in thoi: (0511)842458
E-mail: tranvanchinh54@yahoo.com
II. CC CNG TRNH KHOA HC
1. Cc ti khoa hc:
TT
1
2
3

Tn ti, m s
B94-15-05 Xy dng chng
trnh o to giai on 2 cho
khoa in
B96-15-09. Tnh ton trng
in t trong my in khng
ng b
B01-15-05 nh gi cht lng
my in khng ng b

Kt qu
nghin cu

Nm

Kh

1996

Tt

1998

Tt

2002

Ni ng
10.Internati
onale
Fachtagung
10.Internati
onale

Nm

Ghi ch

2. Cc bi bo:
TT
1
2

Tn bi bo
Parametergewinnung
durch
Untersuchung der thermischen
Bestaendigkeit von Lackdraetn
Ueberwachung
des
Isolationspegel
eines

1988
1988

Ghi ch

Asynchronmotor
durch
Ableitsstrom-Registierung
Ermitteilung
der
hoechstzulaessigen
Temperaturen
fuer
Wickeldraehten
V tui th c hc ca sn cch
in cc dy dn c trng sn
cch in
Xc nh h hng nh phn
tch dng in

Gp phn tnh phn b dng p


trn cun dy my bin p
trong qu trnh qu
Tnh ton t trng trong my
in khng ng b

Tnh ton phn b dng in


trong thanh dn ng c khng
ng b trong qu trnh m
my
nh gi cht lng ca my
in khng ng b

Fachtagung
10.Internati
onale
Fachtagung
Tp
san
KHKT i
hc Bch
Khoa
Nng 12/89
Tp
san
KHKT i
hc Bch
Khoa
Nng 1/95
Tp
san
KHKT i
hc Bch
Khoa
Nng 2/95
Tp
ch
Khoa hc
v
Cng
ngh
HN s
6,8/99
Tp
ch
Khoa hc
v
Cng
ngh
HN s
7/2000
Tp
ch
Khoa hc
v
Cng
ngh
4
trng H
s

1988

1989

1995

1995

1999

2000

2002

Kho st s thay i in tr
cch in ca my in theo
nhit
10

Kho st cc thng s ca ng
c in khng ng b khi thc
hin iu khin bng bin tn
11

Kho st cc qu trnh nhit


trong cun dy my bin p
bng phng php phn t hu
12
hn
Kho st nh hng ca ph ti
n qu trnh m my ng c
khng ng b
13

14

Tnh ton chuyn i my bin


p c cp in p 6,10 v
15/0.4 kV thnh 22/0.4 kV

3. Sch, gio trnh xut bn:

34+35/200
2
Tp
ch
Khoa hc
v
Cng
ngh
4
trng H
s
36+372002
Tp
ch
Khoa hc
v
Cng
ngh
4
trng H
s
40+41/200
3
Tp
ch
Khoa hc
Cng ngh
i hc
Nng
s
1/2003
Tp
ch
Khoa hc
v
Cng
ngh
4
trng H
s
44+45/200
3
Tp
ch
Khoa hc
Cng ngh
i hc
Nng
s
3/2003

2002

2003

2003

2003

2003

TT

Tn sch

My in
Tin hc ng dng trong tnh
ton

Nh xut
bn
Gio dc

1999

Gio dc

2001

Nm

Ghi ch

You might also like