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
Phng trình
o hm riêng xut hin trong các vn
ca vt lý: Lý thuyt
n hi, c hc ( c hc l
ng t, c hc cht lng, in t tr
ng, thu khí
ng
hc). a s các bi toán dng ny
u rt phc tp không th gii đúng
c.
T nhu cu ca thc tin nh vy, với mong muốn hiểu biết sâu hơn về
phơng pháp sai phân và phần mềm Matlab giải gần đúng phơng trình đạo hàm
riêng, đợc sự đồng ý hớng dẫn của Tiến sĩ Nguyễn Văn Khải tôi lựa chọn đề tài
nghiên cứu:
Phơng pháp sai phân giải gần đúng phơng trình đạo hàm riêng.
2. Mc đích nghiên cu
Lun vn nghiên cu phng pháp sai phân nhm gii gn úng phng
trình
o hm riêng ( vn
c s lý lun cng nh nhng ví d c th) vi ng
dng ca phn mm toán hc Matlab.
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.
4.
i t
ng v phm vi nghiên cu
Một số vấn đề về sai phân v phần mềm Matlab.
ng dng của sai phân và phần mềm Matlab để giải gần đúng phơng trình
đạo hàm riêng ( cơ sở lý thuyết và một số ứng dụng cụ thể).
5. Phng pháp nghiên cu
Lun vn dùng phng pháp sai phân v phng pháp gii tích hm trong
quá trình gii gn úng phng trình
o hm riêng.
4
Luận văn dïng c¸c phương ph¸p ph©n loại bài to¸n trong khi tiếp cận c¸c bµi
to¸n đ
ạ
o hàm riªng.
6. Dự kiến đãng gãp của luận văn
Tr×nh bày một c¸ch hệ thống vấn đ
ề
giải gần đ óng phương tr×nh đ
ạ
o hàm
riªng nhờ phương ph¸p sai ph©n.
Đưa ra lêi giải gần đóng một số phương tr×nh đ
ạ
o hàm riªng theo phương
ph¸p sai ph©n bằ ng phần mềm Matlab.
5
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
2.4. Phơng pháp sai phân giải phơng trình Parabolic. 64
2.4.1. Giải bài toán Cauchy 65
2.4.2. Bài toán biên hỗn hợp. 66
2.5. Một số phơng pháp cơ bản để khảo sát sự ổn định của lợc đồ sai phân. 68
2.5.1. Phân tích phổ bài toán sai phân Cauchy. 68
2.5.2. Nguyên tắc Maximum. 73
Chơng 3 77
Sử dụng phần mềm matlab giải gần đúng phơng trình đạo
hàm riêng theo phơng pháp sai phân 77
Sử dụng phần mềm Matlab giải gần đúng bài toán bờ Dirichlet trên miền chữ nhật
theo phơng pháp sai phân. 77
Kết luận và kiến nghị 90
Tài liệu tham khảo 91
6
Chơng 1
Một số kiến thức cơ bản về matlab và sai phân.
1.1 Một số kiến thức về Matlab.
1.1.1. Giới thiệu về Matlab.
Matlab là ngôn ngữ bậc cao rất có hiệu quả đối với kỹ thuật tính toán. Nó hoà
nhập sự tính toán, sự trực quan và lập trình vào một môi trờng dễ sử dụng, ở đó
các vấn đề và giải pháp đợc biểu thị bởi các ký hiệu toán học quen thuộc.
Matlab là hệ thống tơng tác mà ở đó phần tử dữ liệu cơ sở là mảng, nhng
không đòi hỏi kích thớc. Điều đó cho phép bạn giải quyết nhiều vấn đề về kỹ thuật
tính toán, đặc biệt là các công thức liên quan đến véctơ và ma trận.
Matlab là viết tắt của matrix laboratory. Khởi đầu nó đợc viết dành cho sự
truy cập dễ dàng tới phần mềm ma trận đợc phát biểu bởi các đề án Linpack và
Eispack.
Matlab có chứa một họ các ứng dụng đặc biệt gọi là công cụ (toolboxes).
Các công cụ này cho phép bạn học và áp dụng các kỹ thuật đặc biệt bao trùm các
lĩnh vực nh xử lý tín hiệu, điều khiển hệ thống, mạng noron, logic mờ, sóng, mô
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
muốn chạy không đợc ghi vào danh sách trong phần tìm kiếm thì bạn đa vào danh
sách bằng cách kích File/ Set Path/ Add Folder, tìm kiếm và kích vào tệp, cuối
cùng kích vào nút Save rồi kích Close.
1.1.2. Lập trình
a. Nhập/ xuất dữ liệu
Có 3 cách nhập/ xuất dữ liệu trong môi trờng Matlab
Nhập/ xuất dữ liệu từ cửa sổ lệnh
Matlab không đòi hỏi phải khai báo biến trớc khi dùng. Matlab phân biệt chữ hoa
và chữ thờng. Các số liệu đa vào môi trờng làm việc của Matlab đợc lu lại suốt
phiên làm việc cho đến khi gặp lệnh Clear all. Matlab cho phép ta nhập số liệu từ
dòng lệnh. Khi nhập ma trận từ bàn phím ta phải tuân theo các quy định sau:
Ngăn cách các phần tử của ma trận bằng dấu , hay dấu trống.
8
Dùng dấu ; để kết thúc một hàng.
Bao các phần tử của ma trận bằng cặp dấu ngoặc vuông [ ].
Khi ta đánh lệnh vào cửa sổ lệnh, nó sẽ đợc thi hành ngay và kết quả hiện lên màn
hình. Nếu ta không muốn cho kết quả hiện lên màn hình thì sau lệnh ta đặt thêm
dấu ;. Nếu lệnh quá dài, không vừa một dòng có thể đánh lệnh trên nhiều dòng và
cuối mỗi dòng đặt thêm dấu rồi xuống dòng.
Ví dụ 1.1.2.1. Để nhập vào ma trận:
1 2 3
4 5 6
A
,
3
2
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ỉ
format long: Số có 14 chữ số sau dấu phẩy
9
format long e: Số dạng mũ
format hex: Số dạng hex
format short e: Số dạng mũ ngắn
format short: Trở về số dạng ngắn
b. Vòng lặp điều khiển
Cấu trúc if- else- elseif- end.
Cú pháp nh sau:
if < biểu thức điều kiện 1>
khối các lệnh đợc thực hiện nếu điều kiện 1 đúng
elseif < biểu thức điều kiện 2 >
khối các lệnh đợc thực hiện nếu điều kiện 2 đúng
.
.
.
else
khối các lệnh đợc thực hiện nếu không có điều kiện nào đúng
end
Nói thêm về phép so sánh bằng (= =). Với biểu thức kiểu vô hớng thì không
có gì đáng bàn, ta chỉ lu ý khi chúng là ma trận. Khi đó, thay cho phép so sánh
= =, ta chỉ nên sử dụng hàm isequal (a,b), hàm này nhận giá trị 1 nếu a đúng bằng
b, trái lại hàm bằng 0. Nhng nếu trong dữ liệu có chứa giá trị phi số NaN, hàm
isequal không cho kết quả đúng.
Cấu trúc switch- case otherwise- end.
Cú pháp nh sau:
switch < biểu thức >
case
1
n
: < 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
này ngay tại cửa sổ lệnh, hoặc trong một thủ tục, hoặc trong một hàm khác dạng M-
file. Cú pháp có dạng
f= @(arglist) expression.
ở đây, arglist là danh sách các input, chúng cách nhau bởi dấu phẩy, còn expression
là biểu thức xác định giá trị của hàm. Các hàm toán học rất thích hợp với kiểu định
nghĩa này.
Hàm nguyên thuỷ và hàm con (Primary and Subfunction) là các hàm bắt
buộc phải định nghĩa trong M- file. Trong tệp M- file, hàm nguyên thuỷ phải đợc
hiển thị tại dòng đầu tiên. Hàm nguyên thuỷ có phạm vi lớn nhất, tức là nó có thể
11
đợc triệu gọi từ bên ngoài tệp M- file của nó, tức là từ cửa sổ lệnh hoặc từ các hàm
nguyên thuỷ trong các M- file khác. Trong khi đó các hàm con chỉ có thể đợc triệu
gọi từ hàm nguyên thuỷ hoặc từ các hàm con cùng đợc định nghĩa trong hàm
nguyên thuỷ. Cấu trúc nh sau
function frime ( arglist)
statements
function fsub1 (arglist)
statements1;
function fsub2 (arglist)
statements2;
Chú ý rằng không có từ khoá end.
Hàm riêng (Private Function): Hàm riêng có cấu trúc nh hàm nguyên
thuỷ, chỉ có điểm đặc trng duy nhất là nó phải đợc đặt trong th mục Private, là
th mục con của th mục hiện thời. Hàm riêng chỉ đợc triệu gọi từ các hàm nguyên
thuytrong th mục cha của th mục private và các hàm riêng khác, không thể triệu
gọi chúng tại cửa sổ lệnh. Các hàm riêng đợc u tiên gọi trớc so với các hàm
nguyên thuỷ.
Các hàm lồng nhau (Nested Function): Việc định nghĩa một hàm trong
thân của một hàm khác đợc gọi là hàm lồng nhau. Việc lồng nhau có thể nhiều
lần. Các hàm cùng đợc lồng trong một hàm nguyên thuỷ có thể triệu gọi nhau. Tất
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.
+ Str2num (str): Chuyển xâu str ra số.
+ Num2str (number): Chuyển số ra xâu
Các hàm định giá (Evaluative function)
+ Eval (exprc) : Với expc là một biểu thức xâu ký tự theo cú pháp của
Matlab. Ví dụ, bạn định nghĩa một biến tên là myvar và gán cho nó giá tri bằng 5.
Khi đó câu lệnh eval (myvar) cũng nh eval ([my,var]) đều tơng đơng với
câu lệnh myvar và cùng biểu thức giá trị 5.
+ Feval (f, x): Định giá hàm theo đối x với f là thẻ hàm. Nếu định nghĩa f=
@ (x) ; thì feval (f, x) nh f(x). Nếu hàm f thuộc kiểu M- files hoặc build-
in thì feval (@f, x) nh f(x).
13
+ Subs (expr, vars, vals): Định giá biểu thức expr sau khi thay các biến trong
vars bởi các giá trị tơng ứng trong vals.
c2. Thủ tục
Trong Matlab, thủ tục là một tệp kiểu M- file, trong đó có chứa các câu lệnh. Tên
của thủ tục trùng với tên của tệp và thủ tục không có giá trị trả về. Khi đợc triệu
gọi, thủ tục có thể tác động lên các biến đợc phát sinh trong nó hoặc đang có trong
workspace. Các biến phát sinh trong khi thủ tục thực thi vẫn đợc lu trong
workspace để sử dụng cho tính toán lần sau.
1.1.3. Toán học trong Matlab.
a. Các hàm Toán học.
a1. Các hàm toán học cơ bản.
Chúng ta có một số hàm toán học thờng dùng sau đây:
Ký hiệu
ý nghĩa
Ký hiệu
ý nghĩa
abs(x)
Argument của số phức
log(x)
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)
Hàm e
x
prod
Tính tích
fix(x)
Xấp xỉ không
sign(x)
Hàm dấu
floor(x)
Xấp xỉ âm vô cùng
sin(x)
Hàm sin của x
gdc(x,y)
ƯCLN của 2 số nguyên x, y
sum
Tính tổng
icm(x,y)
BCNN của 2 số nguyên x,y
sprt(x)
Khai căn bậc 2
14
imag(x)
Phần ảo số phức x
tan(x)
Hàm tangent
a2. Các hàm số toán học tự tạo.
Matlab cho phép ta tạo hàm toán học và lu nó vào một file để dùng nh hàm
số có sắn của Matlab.
Ví dụ 1: Tạo các hàm sau:
và hàm
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
Ta tạo file f1.m
function
1
y f x
2
1./ 1 8* . ;y x
và file f2.m
function
1
1 1 * 1 4* 2 * 2 5
2 2* 1 * 1 2* 1 3* 2 2.5;
y f x
y x x x x
y 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
1
1
'1./ 1 8* . ';
01 ;
f x
x
eval f
Nếu hàm là đa thức ta chỉ cần nhập ma trận các hệ số từ số mũ cao nhất.
Ví dụ với đa thức
4 3
4
4 2 1P x x x x
ta viết: P = [1 4 0 2 1]. Để nhân hai đa
thức ta dùng lệnh conv; để chia 2 đa thức ta dùng lệnh deconv. Muốn tính trị số của
đa thức ta dùng lệnh polyval và lệnh polyvanlm dùng khi đa thức là ma trận.
b. Các lệnh xử lý hàm.
- Lệnh fplot vẽ đồ thị hàm toán học giữa các giá trị đã cho.
- Lệnh fminbnd của Matlab để tìm cực tiểu địa phơng của hàm trong
khoảng đã cho. Ví dụ:
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
>> ab % hiển thị ma trận ab, chính là ma trận A lúc ghi vào
Tham số -ascii chỉ định việc ghi ở dạng văn bản. Bạn hãy tìm tệp ab.m trong
th mục hiện thời (Current directory) rồi mở nó bằng cách kích chuột.
Nếu không thấy hiển thị cửa sổ này nhấp chuột vào trình đơn desktop trên menubar
của cửa số Matlab rồi trỏ tới Current directory rồi check on.
Câu lệnh load ab.m sẽ tải dữ liệu trong tệp ab.m vào bộ nhớ. Câu lệnh cuối
cùng ab là để hiển thị ma trận ab. Tên biến trong Matlab có sự phân biệt chữ hoa và
chữ thờng. Tất nhiên chúng ta có thể soạn thảo tệp ab.m bằng trình Edior với thao
tác File/New/M-file (Ctrl+N). Sau đó soạn thảo trực tiếp, mỗi dòng ứng với một
hàng, các cột không cần thẳng. Để ghi lại chọn File/Save (Ctrl+S), đặt tên tệp là
ab.m (nếu đặt là ab.txt thì sau đó phải load ab.txt).
Sử dụng các hàm có sẵn: Matlab cung cấp một số hàm để tạo các ma trận cơ
bản:
zeros (m,n) tạo ma trận mà các phần tử đều là 0.
ones(m,n) tạo ma trận mà các phần tử đều là 1.
rand (m,n) tạo ra ma trận mà các phần tử ngẫu nhiên phân bố đều.
randn (m,n) tạo ma trận mà các phần tử ngẫu nhiên phân bố trực giao.
17
magic (n) tạo ra ma trận cấp n gồm các số nguyên từ 1 đến n
2
với tổng bằng
các hàng bằng tổng các cột n phải lớn hơn hay bằng 3.
pascal (n) tạo ma trận xác định dơng mà các phần tử lấy từ tam giác Pascal.
eye (n) tạo ma trận đơn vị cấp n.
eye (m,n) tạo ma trận đơn vị mở rộng.
c2. Một số kiểu dữ liệu cơ bản.
Số.
Matlab sử dụng ký hiệu thập phân thông thờng và có thể tuỳ chọn dấu thập
phân, đằng trớc có thể có dấu trừ hoặc cộng. ở dạng ký hiệu khoa học Matlab sử
dụng chữ cái e. Ví dụ, 1.60210e + 2 tức là
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.
Gọi là phép chia bên phải bởi A là toán hạng bên phải trong biểu thức B/A.
Các ma trận, A và B phải có cùng số cột.
- Phép chia bên phải theo phần tử: B./A là ma trận có các phần tử là B(i,j)/A(i,j)
nên A và B phải cùng cỡ. Với k là vô hớng thì A./k là ma trận cùng cỡ với A, có
các phần tử là A(i,j)/ k, còn k./A là ma trận cùng cỡ với A, có các phần tử là k/A(i,j).
- Phép chia bên trái, phép chia bên trái theo phần tử: Tơng tự phép chia bên phải
và phép chia bên phải theo phần tử.
- Phép luỹ thừa:
A
^
p với A vuông và p là số nguyên dơng, chính là A
p
.
A
^
p với A vuông và p là số nguyên âm, chính là (A
-1
)
p
.
- Luỹ thừa của mảng:
C = A.
^
B với A và B cùng cỡ lầm trận mà C(i,j) = A(i,j).B(i,j).
C = A.
^
k với k vô hớng là ma trận mà C(i,j) = A(i,j).k.
C = k.
^
A với k vô hớng là ma trận mà C(i,j) = k.A(i,j).
- 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
- Hớng bit (Bit wise): Với a = 28 (11100) và b = 21 (10101) thì
bitor (a,b) = 29 (11101), bitand (a,b) = 20 (10100),
bitcmp (a,b) = 3 (00011), bitxor (a,b) = 9 (01001)
- Hớng biểu thức: Giả sử a và b là các biểu thức lôgic, khi đó a b bằng False
(logic 0) chỉ khi cả a và b bằng False.
c4. Làm việc với ma trận.
Ghép ma trận: Ghép nhiều ma trận nhỏ thành một ma trận lớn. Hãy quan sát
kỹ dòng lệnh:
>> [A + 1 A + 2]
ans =
2 3 4 3 4 5
5 6 7 6 7 8
20
Nếu giữ A và dấu + có một khoảng trống, còn ngay sau dấu + là con số thì sẽ lỗi, vì
MATLAB cho là ta ghép từ ba ma trận A, +1 và A +2, mà +1 là vô hớng nên lỗi là
tất nhiên.
Xoá hàng và cột:
>>A(:,j) = [] xoá cột thứ j
>>A(k,:) = [] xoá hàng thứ k
>>A(k:i:j) = [] xoá mọi phần tử từ thứ k tới thứ j nhng cách đều nhau i phần
tử, các phần tử còn lại đợc sắp thành véctơ hàng.
1.1.4. Đồ hoạ.
a. Đồ họa trong không gian 2 chiều.
Phần lớn các câu lệnh để vẽ đồ thị trong mặt phẳng đều là lệnh plot. Lệnh
plot mở ra một cửa sổ đồ hoạ gọi là cửa sổ figure, trong cửa sổ này nó sẽ tạo độ chia
phù hợp với dữ liệu và đồ thị đợc tạo thành bởi việc nối các điểm dữ liệu bằng
đờng nét liền. Ta cũng có thể vẽ nhiều đồ thị trong một cửa sổ.
Ví dụ: Vẽ hàm sinx và cosx trên cùng một đồ thị
>> x = linspace (0,2*pi, 30);
>> y = sin (x);
>> 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
c
Xanh xám
_
đờng gạch gạch
^
tam giác
hớng lên
g
Xanh lá cây
:
Đờng chấm
d
diamond
k
đen
+
Đờng dấu cộng
p
sao 5 cánh
m
đỏ tím
O
Đờng O
<
tam giác
hớng trái
r
đỏ
Đờng gạch chấm
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
này, lệnh grid mà không có tham số đi kèm theo thì sẽ xen kẽ giữa chế độ on và off.
- Lệnh title sẽ thêm vào đồ thị tiêu đề ở đỉnh, trục đứng và trục ngang có thể
có nhãn với lệnh xlabel và ylabel.
- Lệnh subplot (m,n,p) chia cửa sổ hiện tại thành một ma trận mn khoảng để vẽ đồ
thị và chọn p là cửa sổ hoạt động. Các đồ thị thành phần đợc đánh số từ trái qua
phải, từ trên xuống dới sau đó đến hàng thứ hai.
Một số lệnh khác:
- Lệnh loglog tơng tự nh plot ngoại trừ thang chia là logarithm cho cả 2 trục.
- Lệnh semilogx tơng tự nh plot ngoại trừ thang chia của trục x là logarithm còn
thang chia trục y là tuyến tính. Semology cũng vậy.
- Lệnh area (x,y) tơng tự nh plot (x,y) ngoại trừ khoảng cách giữa 0 và y đợc điền
đầy, giá trị cơ bản y có thể đợc khai báo nhng mặc định thì không.
- Lệnh pie (a,b) tạo sơ đồ hình múi trong đó a là một véctơ giá trị và b là một véctơ
logic tuỳ ý.
- Lệnh pareto (a) vẽ biểu đồ trong đó các giá trị trong các véctơ a đợc vẽ thành một
khối hình chữ nhật.
- Đồ thị bar và stair có thể sinh ra bởi việc dùng lệnh bar (x,y), bar3(x,y), barh(x,y),
stairs (x,y).
- Lệnh rose (v) vẽ một biểu đồ trong toạ độ cực cho các góc trong véctơ v, tơng tự
ta cũng có các lệnh rose (v,n) và rose (v,x) trong đó x là một vector.
23
b. Đồ hoạ trong không gian 3 chiều.
Matlab cung cấp một số hàm để hiển thị dữ liệu 3 chiều nh các hàm vẽ
đờng thẳng trong không gian 3 chiều, các hàm vẽ bề mặt và khung dây và màu có
thể đợc sử dụng thay thế cho chiều thứ t.
Để hiển thị dữ liệu trong không gian 3 chiều ta dùng lệnh plot có khuôn dạng
nh sau: plot3 (x
1
, y
1
, 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
max
, z
min
, z
max
] thiết lập
giới hạn cho cả 3 trục.
Matlab định nghĩa bề mặt lới bằng các điểm theo hớng trục z ở trên đờng
kẻ ô hình vuông trên mặt phẳng xy. Nó tạo lên mẫu một đồ thị bằng cách ghép các
điểm gần kề với các đờng thẳng. Kết quả là nó trông giống nh một mạng lới
đánh cá với các mặt lới là các điểm dữ liệu.
Ví dụ: Lập chơng trình
>> x = - 7.5:.5:7.5;
>>y = x;
>> [X,Y] = meshgrid (-7.5:.5:7.5);
>> R = sqrt (x.^2+y.^2)+0.005;
>> % tìm khoảng cách từ gốc (0,0)
>> Z = sin (R)./R;
>> mesh (Z)
Chạy chơng trình ta đợc hình sau:
24
-10
-5
0
5
10
-10
-5
0
5
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
hình hiện tại. Hàm plot, plot3 không dùng bảng màu này.
1.2. Một số khái niệm cơ bản về sai phần.
1.2.1. Sự hội tụ của lợc đồ sai phân.
a. Khái niệm về lới và hàm lới
Mọi bài toán bờ của phơng trình đều có thể viết dới dạng
Lu = f (1.2.1.1)
trong đó L là toán tử tuyến tính đa không gian tuyến tính định chuẩn
(U, ) vào không gian tuyến tính định chuẩn (F, ), chẳng hạn bài toán
3)0(
10,sin
1
2
u
xx
u
x
dx
du
viết dới dạng (1.2.1.1) vớ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
)0(
2)0(
10,)1(
2
2
2
dx
du
u
xxux
dx
ud
đợc viết dới dạng (1.2.1.1) với
1
102)(
)0(
10)0(
)1(
2
2
2
x
x
xf
dx
du
xu
ux
dx
ud
Lu
Ta cần tìm nghiệm u (x) của (1.2.1.1) trên đoạn D [0,1]