1
LI CM N
Luận văn đợc hon thnh tại trờng Đại học s phạm H Nội 2 dới sự hớng
dẫn của Tiến sĩ Nguyễn Văn Khải.
Tác giả xin trân trọng cảm ơn Ban giám hiệu trờng Đại học s phạm H Nội
2, phòng sau đại học, các thầy cô giáo trong nh trờng, các thầy cô giáo dạy cao
học chuyên ngnh Toán giải tích đã tạo mọi điều kiện thuận lợi cho tôi kết thúc tốt
đẹp chơng trình cao học và hoàn thành luận văn tốt nghiệp.
Tác giả xin by tỏ lòng biết ơn tới thầy giáo TS.Nguyễn Văn Khải, ngời đã
luôn quan tâm, động viên, tận tình hớng dẫn trong suốt quá trình lm luận văn.
Tác giả trân trọng cám ơn Sở Giáo dục và đào tạo Bắc Giang, trờng THPT Lý
Thờng Kiệt và THPT Giáp Hải, gia đình, bạn bè cùng học đã tạo mọi điều kiện
giúp đỡ tác giả hon thnh tốt luận văn.
H Nội, tháng 6 năm 2012
Lơng Quỳnh Trang
2
LI CAM OAN
Tôi xin cam đoan bản luận văn ny l công trình nghiên cứu của riêng tôi
dới sự hớng dẫn của Tiến sĩ Nguyễn Văn Khải.
Trong quá trình nghiên cứu, tôi đã kế thừa thành quả khoa học của các nhà
khoa học với sự trân trọng và biết ơn.
H Nội, tháng 6 năm 2012
Tác giả
Lơng Quỳnh Trang
3
M
U
1. Lý do chn
ti
3. Nhim v nghiên cu
Lun vn nghiên cu nhng bi toán
o hm riêng c bn òi hi nghiên
cu l
c
sai phân hóa
gii gn úng các bi toán dng phng trình
o
hm riêng.
Lun vn nghiên cu các vn
v xp x, n
nh v hi t ca l
c
sai
phân
i vi bi toán phng trình
o hm riêng.
Lun vn nghiên cu mt s ví d gii gn úng phng trình o hm riêng
nh sai phân với ứng dụng phần mềm Matlab.
Mục lục
LI CM N 1
LI CAM OAN 2
M
U 3
Mục lục 5
Chơng 1 6
Một số kiến thức cơ bản về matlab và sai phân. 6
1.1 Một số kiến thức về Matlab 6
1.1.1. Giới thiệu về Matlab. 6
1.1.2. Lập trình 7
1.1.3. Toán học trong Matlab 13
1.1.4. Đồ hoạ 20
1.2. Một số khái niệm cơ bản về sai phần. 25
1.2.1. Sự hội tụ của lợc đồ sai phân. 25
1.2.2. Xấp xỉ bài toán bờ vi phân bằng lợc đồ sai phân. 29
1.2.3. Định nghĩa sự ổn định của lợc đồ sai phân. Sự hội tụ là hệ quả của xấp xỉ và
ổn định. 30
Chơng 2 34
giải gần đúng phơng trình đạo hàm riêng bằng phơng pháp
sai phân 34
2.1. Phân loại phơng trình tuyến tính cấp hai. 34
2.2. Bài toán bờ của phơng trình Ellip tic và phơng pháp sai phân 35
2.2.1. Phân loại bài toán bờ 35
2.2.2. Sai phân hoá các bài toán bờ của phơng trình Elliptic. 35
2.2.3. Phơng pháp giải hệ phơng trình sai phân của bài toán bờ phơng trình
Elliptic 46
2.2.4. Sự hội tụ của bài toán bờ sai phân của phơng trình Elliptic 57
2.3. Phơng pháp sai phân giải bài toán Cauchy cho phơng trình Hyperbolic. 60
phỏng và rất nhiều lĩnh vực khác.
Có thể tạm coi hệ thống của Matlab gồm 5 phần:
Môi trờng phát triển: Đó là tập hợp các công cụ và tiện ích giúp bạn sử
dụng các hàm và các tệp. Đa số trong chúng thuộc về giao diện ngời dùng, bao
gồm nền Matlab ( Matlab desktop ), cửa sổ lệnh (command window), cửa sổ quá
trình ( command history), trình soạn thảo ( editor), trình gỡ rối (debugger), trình
duyệt ( browser) để xem trợ giúp ( viewing help), duyệt không gian làm việc
(workspace ),
Th viện các hàm toán học: Đó là tập mênh mông các giải thuật tính toán, từ
các hàm cơ bản nh tổng, tích, sin, cosin, các phép toán số học về số thực và số phức
đến các hàm phức tạp nh ma trận ngợc, trị riêng của ma trận, các hàm Bessel và
các biến đổi Fourier nhanh.
7
Ngôn ngữ Matlab: Đó là ngôn ngữ bạc cao về ma trận và mảng với các câu
lệnh điều khiển, các hàm, cấu trúc dữ liệu, nhập/ xuất dữ liệu và các đặc trng của
ngôn ngữ lập trình hớng đối tợng (object oriented programming). Nó cho phép
xây dựng các chơng trình nhỏ lẫn các chơng trình hoàn thiện.
Đồ hoạ: Đồ hoạ trong Matlab quả là tuyệt vời để hiển thị các ma trận, các
véctơ, vẽ và in đồ hoạ, chú giải trên đồ thị. Nó bao gồm các hàm ở mức cao để có
thể biểu diễn dữ liệu trong không gian 2 chiều và 3 chiều.
Tơng tác với bên ngoài: Đó là th viện mà bạn có thể viết chơng trình
bằng ngôn ngữ C hoặc Fortran để tơng tác với Matlab. Nó bao gồm các tiện ích để
gọi các thủ tục từ Matlab kiểu liên kết động (dynamic linking), gọi Matlab nh là
gọi một máy tính toán, cũng nh các tiện ích để đọc và viết các tệp kiểu Mat files.
Để khởi động chơng trình trên nền Windows kích đúp vào biểu tợng của
Matlab và để kết thúc phiên làm việc, chọn File/ Exit trên menu hoặc gõ lệnh quit
tại cửa sổ lệnh. Khi bạn bắt đầu chơng trình Matlab, cửa sổ mệnh lệnh sẽ mở ra với
kí hiệu >>. Để đợc thực hiện trong môi trờng Matlab các file chơng trình phải
có đuôi ***.m tức là M- file. Nếu muốn tạo một M-file thì kích File/ New/ M- file,
mở một file đã tồn tại thì kích File/ Open rồi tìm file đó và lựa chọn. Nếu file bạn
1
B
,
1 4 3 2C
trong cửa sổ lệnh Matlab ta đánh nh sau:
>> A= [1 2 3; 4 5 6];
>> B= [3; -2; 1]; % đặt dấu ; cuối câu để không in kết quả ra màn hình
>> C= [1 4 -3 2];
Nhập/ xuất dữ liệu thông qua các file.
Matlab có thể xử lý hai kiểu file dữ liệu: File nhị phân *.mat và file ASCII *.dat.
Để lu các ma trận A, B, C dới dạng file nhị phân ta dùng lệnh save ABC A B C
và nạp lại các ma trận A, B bằng lệnh load ABC A B. Nếu muốn lu số liệu của ma
trận B dới dạng file ASCII ta dùng lệnh save b.dat B/ ascii.
Nhập/ xuất dữ liệu từ bàn phím
Lệnh input cho phép ta nhập dữ liệu từ bàn phím. Ví dụ:
x = input ( Nhập x: )
Một cách khác để hiển thị giá trị của biến và chuỗi là đánh tên biến vào cửa sổ lệnh
Matlab hoặc dùng disp và fprintf để hiển thị các biến. Ví dụ:
disp ( Trị số của x= ), disp (x)
Trong trờng hợp muốn nhập một chuỗi từ bàn phím, ta cần phải thêm kí tự s vào
đối số.
Lệnh format cho phép xác định dạng thức của dữ liệu.
format rat: Số hữu tỉ
: < lệnh 1>
case
2
n
: < lệnh 2>
10
case
n
n
: < lệnh n>
otherwise: <lệnh n+1>
end
Vòng lặp while:
Vòng lặp while dùng khi không biết trớc số lần lặp. Cú pháp nh sau:
while < biểu thức>
< phát biểu >
end
Vòng lặp for:
Vòng lặp for dùng khi biết trớc số lần lặp. Cú pháp nh sau:
for < chỉ số>= <giá trị đầu>: <mức tăng >:< giá trị cuối >
Break: Phát biểu break để kết thúc vòng lặp for hay while mà không quan
tâm đến điều kiện kết thúc vòng lặp đã thoả mãn hay cha.
c. Hàm và thủ tục.
c1. Hàm.
Hàm trả về một giá trị thuộc một trong các kiểu vô hớng, logic, xâu văn bản,
nhng thờng là một véc tơ hay một ma trận.
Có 5 loại hàm cơ bản:
Hàm ẩn danh (Anonymous Function) đợc cấu thành từ một biểu thức với
một vài tham số đầu vào và tham số đầu ra ( output). Bạn có thể định nghĩa loại hàm
nhiên lời gọi hàm này không thể xuất hiện bên ngoài hàm nguyên thuỷ, nơi khai
sinh ra chúng.
Hàm tải bộ (Function Overloading): Tải bộ là cơ chế cho phép các hàm, các
toán tử trùng tên nhng hành vi khác nhau lại đợc tồn tại song song. Chỉ có điều
khi một lời triệu gọi đợc phát đi, thì hàm hay toán tử nào có tham số phù hợp với
lời triệu gọi đó sẽ đợc thực thi.
Định nghĩa đệ quy : Matlab cũng nh hầu hết các ngôn ngữ lập trình bậc
cao khác đều cho phép bạn định nghĩa kiểu đệ quy. Đó là loại định nghĩa đặc biệt vì
trong thân của nó có chứa chính bản thân nó hoặc bản sao là trờng hợp riêng của
nó. Ví dụ định nghĩa hàm fact (n) để tính giai thừa của n.
12
function f= fact (n)
if n<2 f=1; else f= n* fact (n-1);
end
Biến toàn cục (Global Variables): Đó là kiểu biến cho phép mọi hàm truy
cập. Ta có thể định nghĩa biến toàn cục tại cửa sổ lệnh hoặc trong thủ tục, cú pháp:
global X Y Z. Trong thân hàm, khai báo global X phải đợc đặt trớc câu lệnh
truy cập biến X.
Chú ý: Clear X là xoá biến X khỏi cửa sổ làm việc hiện thời ( curent workspace), ở
các cửa sổ làm việckhác vẫn còn X; clear global X là xoá biến X khỏi tất cả các cửa
sổ làm việc ( global workspace) không đâu còn X nữa.
Thẻ hàm (Function Handles): Bạn có thể tạo ra thẻ hàm cho hàm và sau đó
sử dụng nó nh là hàm. Thẻ hàm chính là biến, thờng đợc sử dụng để truyền vào
tham số của các hàm khác. Cú pháp:
fhandle = @ function_ name;
Một số hàm cơ bản
Các hàm toán học: cụ thể xem mục
Các hàm chuyển đổi ( Converting function)
+ Char(n): Cho ký tự thứ n trong bảng mã ASCII
+ Double (c): Cho số thứ tự trong bảng mã ASCII của ký tự c.
Logarithm tự nhiên
acos(x)
Hàm ngợc của cos
log10(x)
Logarithm cơ số 10
angle(x)
Tính góc số phức x
max(x)
Giá trị lớn nhất của x
asin(x)
Hàm ngợc của sin
min(x)
Giá trị nhỏ nhất của x
atan(x)
Hàm ngợc của tan
norm(x)
Chuẩn của x
ceil(x)
Xấp xỉ dơng vô cùng
real(x)
Phần thực của x
conj(x)
Số phức liên hợp
rem(x,y)
D của phép chia x/y
cos(x)
Hàm cosine của x
round(x)
Làm tròn
exp(x)1
2
2 2
1 1 2
1 2
2
2
1 1 2
1 1 2
1
1 8
,
4 5
,
2 2 3 2.5
f x
x
f x x
x x
f x
f x x
x x x
Khi nhập lệnh f1(2) ta có giá trị của hàm
1
f
tại x = 2. Khi nhập lệnh f2([2 4] ta có
giá trị của hàm
2
f
tại x
1
= 2 và x
2
= 4. Lệnh feval('f1'2) và feval(' f2' [2 4]) cũng
cho kết quả tơng tự.
* Cách thứ 2 để biểu diễn một hàm toán học một biến trên dòng lệnh là tạo ra một
đối tợng inline từ một biểu thức chuỗi. Ví dụ ta có thể nhập từ dòng lệnh hàm nh
sau:
2
1
1 1
('1./(1 8* . )',' ');
( 01 ), ( ,[01]).
f inline x x
f feval f
Ta cũng có thể viết:
15
2 2
'1./ 0.3 . 0.01 1./ 0.9 . 0.04 6' ;
,0.3,1
f imline x x
x fmimbnd f
- Lệnh fminsearch tơng tự fminbnd dùng để tìm cực tiểu đại phơng của
hàm nhiều biến.
- Lệnh fzero dùng để tìm điểm zero của hàm một biến.
c. Các phép toán trên ma trận và véctơ.
c1. Nhập ma trận.
Bạn có thể nhập ma trận bằng những cách sau:
Nhập trực tiếp.
Các số cách nhau ít nhất một ký tự trắng (blank) hoặc dấu , (comma). Dấu ;
giữa các con số biểu thị sự kết thúc hàng. Cuối câu lệnh mà có ; thì không hiển thị
dữ liệu ra cửa sổ lệnh. Để hiện thị dữ liệu của biến nào đó ta chỉ việc gõ tên biến đó
rồi nhấn phím Enter.
- Lệnh B = [1 2 3] tạo ra vector hàng và lệnh C = [1; 2; 3] tạo ra véctơ cột.
- Lệnh B = [1:4; 5:8] tạo ra ma trận 2 hàng (các số kề sai khác 1) và 4 cột.
16
- Lệnh C = [1:0.2:2; 3:0.4:5] tạo ra ma trận 2 hàng và 6 cột, các phần tử thuộc
hàng 1 chênh nhau 0,2 còn hàng 2 chênh nhau 0,4.
Nếu phát hiện số phần tử ở hàng nào đó không khớp với số phần tử ở hàng
ngay trên nó thì Matlab phát sinh lỗi.
Tải ma trận từ tệp dữ liệu ngoài.
Ví dụ 1: Xét chơng trình sau:
>> A = [1, 2, 3; 4, 5, 6; 7, 8, 8]; % phát sinh ma trận A
>> save ( ab.m, A, -ascii); % ghi ma trận A vào tệp ab.m
>> load ab.m; % tải dữ liệu từ tệp ab.m
2
10
1.60210 160.210
. Với số phức, sử
dụng i hoặc j và thuộc dạng hậu tố, ví dụ 3e2i là 300i.
Tât cả các số đợc lu trữ bên trong ở dạng dấu phẩy động (float pointing)
theo chuẩn IEEE (Institute of Electrical and Electronics Engineers), có tới 16 chữ số
lẻ có nghĩa. Chúng có trị tuyệt đối nằm trong khảong 10
-308
đến 10
308
.
Xâu ký tự đợc biểu thị trong cặp nháy đơn. Để ghép nhiều xâu thành một
xâu ta dùng toán tử [].
Kiểu cell: Dùng để lu dữ liệu ở nhiều dạng khác nhau.
c3. Các phép toán.
Các phép toán số học:
- Phép cộng: Giả sử A = [1, 2, 3; 4, 5, 6] và B = [1, 0, 1; 0, 0, 1]. Khi đó:
A+B =[2, 2, 4; 4, 5, 7] (A, B phải cùng cỡ)
và A + 1 = [2, 3, 4; 5; 6; 7]
- Phép trừ:
Dạng 2 ngôi (Binary): Quy tắc nh phép cộng.
Dạng 1 ngôi (Unary): -A là ma trận đối của A.
- Phép nhân:
18
A*B: Là tích của A với B, số cột của A phải bằng số hàng của B.
A*3 cũng nh 3*A: Ma trận kết quả của mọi phân tử của A nhân với 3.
- Tích mảng: A*B thực hiện phép nhân tơng ứng các phần tử có cùng chỉ số với
nhau nên A và B phải cùng cỡ, loại trừ một trong chúng là vô hớng.
- Phép chia bên phải: Xuất phát từ việc giải phơng trình ma trận XA = B.
- Phép chuyển vị liên hợp phức:
Ví dụ: A = [1 i, 2; 2 + 3i, i] thì A = [1+i, 2-3i; 2, -i]
- Phép chuyển vị: Ví dụ, A = [1 i, 2; 2 + 3i, i] thì A = [1-i, 2+3i; 2, i]
Nếu A là ma trận các số thực thì A và A. cho cùng một kết quả, đó chính là ma trận
chuyển vị thông thờng.
Phép toán quan hệ:
C = A < B: C(i,j) = 1 nếu A(i,j) < B(i,j), trái lại C(i,j) = 0
19
C = A > B: C(i,j) = 1 nếu A(i,j) > B(i,j), trái lại C(i,j) = 0
C = A < = B: C(i,j) = 1 nếu A(i,j) <= B (i,j), trái lại C(i,j) = 0
C = A > = B: C(i,j) = 1 nếu A(i,j) >=B(i,j), trái lại C(i,j) = 0
C = A = = B: C(i,j) = 1 nếu A(i,j) bằng B(i,j), trái lại C(i,j) = 0
C = A = B: C(i,j) = 1 nếu A(i,j)
B(i,j), trái lại C(i,j) = 0
Phép toán logic:
- Hớng phần tử (Element wise): gồm (hoặc), & (và), ~ (phần bù), xor (trừ
không nhớ).
A
0 1 1 01
B
1 1 0 0 1
AB
1 1 1 0 1
A&B
0 1 0 0 1
~A
1 0 0 1 0
xor (A,B)
1 0 1 0 0
>> z = cos (x);
>> plot (x,y,x,z)
21
0 5 10 15 20 25 30
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Bạn có thể khai báo kiểu màu, nét vẽ của riêng bạn bằng việc đa plot một
đối số thứ 3 sau mỗi cặp dữ liệu của mảng. Các đối số tuỳ chọn này là một xâu ký
tự, có thể chứa một hoặc nhiều hơn nh bảng sau:
Ký hiệu
Màu
Ký hiệu
Kiểu nét vẽ
Ký hiệu
ý nghĩa
b
Xanh dơng
-
Nét liền
s
vuông
tam giác
hớng
xuống
w
trắng
*
Đờng ký hiệu *
h
sao 6 cánh
22
y
vàng
X
Đờng X
>
tam giác
hớng phải
- Lệnh colordef cho phép bạn lựa chọn kiểu hiển thị. Giá trị mặc định của colordef
là trắng. Nếu bạn thích màu nền đen, bạn dùng lệnh colordef black.
- Lệnh axis [x
min
, x
max
, y
min
, y
max
] thiết lập giới hạn cho 2 trụ.
- Lệnh grid on sẽ thêm đờng lới vào đồ thị hiện tại. Lệnh grid off sẽ bỏ các nét
, z
1
, S
1
, x
2
, y
2
, z
2
, S
2
, ) trong đó x
n
, y
n
, z
n
là các vector hoặc ma
trận và S
n
là xâu kí tự tuỳ ý chọn dùng cho việc khai báo màu, tạo biểu tợng hoặc
kiểu đờng. Chú ý rằng hàm zlabel tơng ứng với hàm 2 chiều xlabel và ylabel.
Lệnh axis cũng có khuôn dạng: axis [x
min
, x
max
, y
min
, y
10
-0.5
0
0.5
1
Trong ví dụ này [X,Y] = meshgrid(x,y) tạo một ma trận X mà các hàng là bản sao
của vectơ x và ma trận Y mà các cột là bản sao của vectơ y, lệnh mesh sắp xếp giá
trị của các phần tử của ma trận vào các điểm (X
i
, Y
i
, Z
i
) trong không gian 3 chiều.
mesh cũng có thể vẽ một ma trận đơn tơng tự nh mới một đối số; mesh (Z) sử
dụng các điểm (i,j,Z
i
).
Các đặc điểm khác của đồ thị trong không gian 3 chiều.
- Hàm ribbon (x, y) tơng tự nh plot (x, y) ngoại trừ cột của y đợc vẽ nh
là một dải riêng biệt trong không gian 3 chiều.
- Hàm contour 3 vẽ đồ thị đờng viền.
- Hàm contourf sẽ vẽ một đồ thị đờng viền kín, không gian giữa đờng viền
đợc lấp đầy bằng màu.
- Hai mẫu trạng thái của lệnh mesh dùng với đồ thị lới là: meshc vẽ đồ thị
lới và thêm đờng viền bên dới, meshz vẽ đồ thị lới và đồ thị có dạng nh màn
che.
25
- bar3, bar3h, bie3 lần lợt là phiên bản 3 chiều của bar, barh, pie.
Câu lệnh colormap (M) cài đặt ma trận M là bảng màu đợc sử dụng bởi
3
10sin
)(,
)0(
10,
1
2
xx
xf
u
x
u
x
dx
du
Lu
còn bài toán bờ vi phân
1
102)(
)0(
10)0(
)1(
2
2
2
x
x
xf
dx
du
xu
ux
dx
ud