Professional Documents
Culture Documents
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-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
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
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
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
2 - 4*i; 3 + i
2 - 2*j];
to ra ma trn m cc phn t u l 1
x = ones(2, 3)
y = 5*ones(2, 2)
rand
randn
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
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
Kiu ng
ng lin
ng t nt
M
:
-.
Kiu ng
ng chm chm
ng chm gch
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
barh
[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
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
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
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
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(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
35
Alignment
Sontho
thuctnh
Chyth
Sonmenu
Vngthit
k
Ccphnt
38
40
if nargout > 0
varargout{1} = fig;
end
elseif ischar(varargin{1})
try
[varargout{1:nargout}]
switchyard
catch
disp(lasterr);
end
end
feval(varargin{:});
FEVAL
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:
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:
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:
51
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:
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:
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
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
- 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
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
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
[
]
[
][
]
[
]
[
]
[
]
[
]
[
]
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
[
]
[
]
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
= [ 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
- 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
[ 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
[ A1 ] = 0 r22 r23
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
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
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
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
a ij = l ik l jk i = j, j + 1,...,n j = 1,2,...,n
k =1
a ij = l ik l jk + l ijl jj
k =1
l jj = a jj l 2jk
j = 2,3,...,n
k =1
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
= [ 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
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
kl k i, l j
0
c
s
0
"
"
"
c k, l = i; k,l = j
# % # # #
=# #
[ Gkl ] = s k = i; l = j
# # % #
# # 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
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
77
[ 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
[ 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
79
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
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
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 ]
[ V2 ] [ A1 ][ V2 ] = 02 A
[ 2 ]
1
[ A ] [ T2 ] = 0 1
0 0
[ A 2 ]
1
vi V
=
Trong [ T2 ] = V1 V
2
2 0
0
[ V2 ]
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
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
det [ A ] = a ijA ij
i =1
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
98
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
1 0 0 0
0 1 0 0
E=
0 0 1 0
0
0
0
1
102
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]*.
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
= 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
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;
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
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
(3)
end
eval = d(n) + abs(c(n-1));
if eval > evalmax
evalmax = eval;
end
111
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)
[ 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
[ D3 ] = [ D2 ]
3 [ X 3 ][ X 3 ]
[X3 ] [X3 ]
T
118
0
#
R pq () = 0
0
#
0
#
p
0 "
1
#
#
"
"
"
"
"
#
" "
"
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)
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
(5)
T
T
T
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)
(7d)
(7e)
c = cos, s = sin
Ta lm cho
v pq = v qp = 0
(8)
(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 =
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)
[ A ] ([ L ]1 ) [ Z ] = [ L][L]T ([ L]1 ) [ Z ]
T
Do [ L ]
(12)
(13)
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
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
Pn ( ) = n + pi i
(1)
(2)
i =0
(3)
126
Do P([A]) = 0 nn:
n 1
(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)
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
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
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 ] =
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 ] = 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
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
[ ]0 = AAT [ b]
(6)
[ ]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
(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)
1
(7)
xi = (i1) b(ii 1) a(iij 1) x j
i = m,m 1,...,1
a ii
j= i +1
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
[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
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
% 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
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
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
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 = 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
a n1 a n 2 " a nn 0
0
a
21
a n1
0
a 22
#
0
"
0
" 0
% #
" a nn
% # # %
#
#
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];
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
Nh vy
([ R
k +1
(8)
168
[ R ] [ A ][ S k ]
k = k+1T
[ S k ] [ A ][ S k ]
T
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
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
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
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.
`
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
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
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
i1 = i1
i 2
[ U i ] = [ R i1 ] + i1 [ Qi1 ]
[ Pi ] = [ U i ] + i1 ([ Qi1 ] + i1 [ Pi1 ])
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
v new
v = 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
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)
k 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
(u n +1 ,a i ) = a i ,jz j + a i ,n +1z n +1 = 0
j=1
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
195
=
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]
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
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)
= 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
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
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
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
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
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
-2
-6
-1
0
1
0
2
6
4
60
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 ) =
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
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
x1
1220
221
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)
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 m + a m 1d1 + a m 2d 2 + " + a m nd n = q m
"
a m + n + a m + n 1d1 + a m + n2d 2 + " + a md n = 0
(5)
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
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 =
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
(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] =
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
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 )]}
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
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
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];
i =1
i =1
S = y i (a 0 + a1cosx + b1sinx)
i =1
n
cosxi
sinxi a0 yi
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
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
b1
x
244
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
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
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
x1 x
x3
x2
x1
x3 x
x2
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
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
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
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
%
-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
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:
[ A k ] = [ A k1 ] +
[S] [S]
T
( [ Y ] [ A ][ S ] ) [ S ]
k 1
268
2
3
2x 2y 4x + 1 = 0
4
4
x + 4y + 4y 4 = 0
ta dng chng trnh ctbroyden.m
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
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 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!
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!
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
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
279
280
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
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
f f g g
, ,
,
. Cc o
r s r s
(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
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
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
291
c
x1 m 1
c0
c
x2 m 2
(8)
c1
x m cn
n
c n 1
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)
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
295
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
15
a6h6
64
(13)
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!
1
1
22
c2 (x, h) =
2 2
2
h + h c 2 + c1 + c 1 + c 2 f0 +
2
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
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
J = A i f(xi )
i =1
J= f(x)dx
(1)
i =1
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
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)
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
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
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
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
(4)
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
J = f(x)cos(x)dx
a
f(x)cos(tx)dx
x0
2 4
th S2n
45
Trong :
a = x0, b = xn, t =
n
C 2n 1 = f2i1cos(tx 2i1 )
i =0
n
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,
t = 3;
m = 51;
f = inline('(x.^3+1).*sin(x)');
J = filon(f, a, b, t, key)
9. QUY TC HARDY
b
x7
x1
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
x11
f(x)dx = 126 h 8 ( f
x1
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
x7
f(x)dx = 0.3h ( f
x1
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
t
e f(t)dt
2
f(t)dt
1
1 t
f(t)dt
1 t 2 f(t)dt
f(t)dt
(1)
(2)
+1
f(t) = 1
(3a)
+1
f(t) = t
1
+1
2
3
(3c)
(3d)
f(t) = t2
1
+1
f(t) = t3
(3b)
3 3
J GL [ t1 ,t 2 , ,t n ] = w i f(t i )
(5)
i =1
(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)
J GH [ t1 ,t 2 , ,t n ] = w i f(t i )
(11)
i =1
J=
t
e f(t)dt
2
(12)
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
[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
J= e t f(t)dt
(17)
(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
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
+1
J=
1
1 t2
(21)
f(t)dt
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
J=
+1
1 t 2 f(t)dt
(25)
328
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
n 1
i=2
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
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
J = (1 x) (1 + x) f(x)dx
a
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)]
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
J = f(x)dx
(1)
i=2
(2)
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)
i=2
J = f(x)dx = w i [ f(xi ) f( xi )]
(2)
337
0.3549416
0.1223363
0.6433097
0.1223363
0.7783202
0.1223363
0.9481574
0.1223363
n 1
i=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 =
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
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
343
y
(
a
)
=
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
t k +1
f(t,y)dt
tk
hay:
349
t k +1
f(t,y)dt
vi y(t0) = y0
tk
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:
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 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:
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
K i = hF x + A i h, y + Bi ,jK j
j= 0
i = 1, 2,..,6
(2)
(3)
(4)
i =1
6
i =1
Cc h s xut hin trong cc cng thc ny khng duy nht. Bng sau cho 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
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
(1)
y(x)
x+ h
y(x)dx
xh
x+h
xh
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
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
+
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)
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
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
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
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
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
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
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=
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)
386
x3 =
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
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.
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
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
[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
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
k max
k
100
k max
(3)
k
f
k
f
x
[
]) f
(
max
p=e
f > 0
Ta xy dng hm simannealing() thc hin thut ton trn:
(4)
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
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
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)
407
nhgi
Nugitr
hmcaccnhimsc
thbngnhau
Ktthc
Chnlc
Vtqua
tbin
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,
411
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
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
(1)
(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)
(3.b)
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
(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)
+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
% 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
(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
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
(4)
(5)
(6)
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
(14)
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
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
(18)
(vd1)
(vd2)
(vd3)
=
2
2
x
x
t
425
=
2
2
x
x
t
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
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
(vd1)
(vd2a)
(vd2b)
(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)
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
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)
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)
= 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)
(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
(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
=
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)
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
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)
Nn
i =1
i =1
(6)
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
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
(10)
s =1
J=
u(x,y) + u(x,y)
y
(11)
J=
[c ]T [] [][ c ] + [c ]T [ ] [ ]T [c ]
x
x
y
y
{
R
435
(12)
J=
[2 ] []T [c ] + []T [c ]
d [c2 ]
x
x
y
{
R
Ns
[ A1 ][ c1 ] + [ A 2 ][ c 2 ] + f(xs ,y s ) 2 ,s S = 0
(13)
(14)
s =1
%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
(15)
n =1
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
1
vi(x,y)=(0.5,0.5)
f(x,y)= +1
vi(x,y)=(0.5,0.5)
0
ccchkhc
(2)
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 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
446
(vd2.1)
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)
450
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.
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
455
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
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
458
dt
y = Cx + Du
Trong x l bin trng thi,u l tn hiu vo,y l tn hiu ra.
459
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
1
s2 + s
y2 = (1 y 12 ) y 2 y 1
H phng trnh c m phng bng cc phn t sau:
461
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
1+ 5
. Ta
2
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)
Lnh MATLAB
f = x^n
diff(f) hay diff(f, x)
g = sin(a*t+b)
diff(g) hay diff(g, t)
469
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])
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
Lnh MATLAB
limit(f)
lim f( x)
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)
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)
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
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
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
horner(f)
-6 + (11 + (-6 + x)*x)*x
11/10 + (11/5 + 33/10*x)*x
factor(f)
(x-1)*(x-2)*(x-3)
x^3 - 6*x^2 + 11*x - 5
(x^2 + 1)*(x^4 - x^2 + 1)
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) ]
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
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
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
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')
f ( x) = e x
/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
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
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)
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
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)
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(-
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
494
496
497
.
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
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
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
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]
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
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
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
519
523
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
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 parabol n v:
e ss =
1
1
=
1 + lim s G(s)H(s) K a
2
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
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
14
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