Giới thiệu về MatLab, Các lệnh cơ bản của MatLab, giúp người học nhanh chóng lắm bắt được các thành phần cơ bản của MatLab. Thông qua các ví dụ cơ bản người học hình thành cho mình kỹ năng về MatLab. Thừ đó, làm các bài toán nâng cao hơn.
Trang 1HỌC MATLAB BẰNG THÍ DỤ
Trịnh Anh Ngọc 8/5/2009
Trang 2Tài liệu này được viết với mục đích hướng dẫn các sinh viên học nhanh về Matlab.Phần đầu tài liệu là nội dung bài giảng của tác giả về Matlab trong học phần "Giảiphương trình bằng máy tính" Một số thí dụ, chương trình tính toán số được lấy từ bàigiảng "Giải tích số 1" cho lớp cử nhân tài năng, "Cơ học chất lỏng" cũng của tác giả.Matlab là phần mềm trợ giúp tính toán số và ký hiệu, do đó tài liệu gồm hai phần: (1)tính toán ký hiệu, và (2) tính toán số Sau khi đọc xong tài liệu này, sinh viên có thể:
- Dùng Matlab giải các bài toán giải tích, đại số và đại số tuyến tính;
- Dùng Matlab để viết chương trình tính toán cho các môn như Phương pháp phầntử hữu hạn, Giải tích số, Cơ học vật rắn biến dạng, Cơ học chất lỏng
1 Vai trò của máy tính trong nghiên cứu và ứng dụng toán học
• Công cụ trợ giúp tính toán số và ký hiệu
Về tính toán số: giúp mô phỏng các bài toán thuộc lãnh vực khoa học và kỹthuật, phân tích dữ liệu
Về tính toán ký hiệu: cho phép thực hiện, kiểm tra các phép biến đổi toánhọc; dự đoán, thử nghiệm các dự đoán toán học; đánh giá thực hành các kết quả lýthuyết
• Hiển thị các kết quả bằng đồ họa
2 Matlab - phần mềm toán học
Matlab là một ngôn ngữ thực hiện dành cho tính toán, đặc biệt là các tính toán kỹthuật Với Matlab ta có thể tính toán, hình dung, và lập trình cho các đối tượngtoán học
Matlab là một hệ thống tương tác mà phần tử dữ liệu cơ bản của nó là mảng
(array) Điều này, thể hiện trong tên gọi của nó (Matlab là viết tắt của Matrix laboratory), cho phép ta thực hiện dễ dàng các tính toán ma trận và vectơ thường
gặp trong các bài toán kỹ thuật
Hệ thống Matlab gồm năm phần chính:
1) Ngôn ngữ Matlab
2) Môi trường làm việc Matlab
3) Quản lý đồ họa
4) Thư viện các hàm toán học Matlab
5) Giao diện chương trình ứng dụng Matlab
Trong tài liệu này ta sẽ làm quen với các phần 1) - 4) Bạn đọc nên tìm các
Trang 3tài liệu:
Getting Started with MATLAB, MathWorks, Inc., 1998
Symbolic Math Toolbox User's Guide, MathWorks, Inc., 1998
trong tủ sách của MathWorks để đọc thêm về Matlab khi cần
3 Lướt qua Matlab - cái nhìn đầu
Trong mục này ta sẽ lướt qua một vòng Matlab để có một cái nhìn khái quát về tínhnăng và những đặc điểm đáng lưu ý của nó Để học nhanh Matlab bạn phải đọc tàiliệu này với máy tính trước mặt Hãy thử thực hiện các thí dụ được đưa ra trong tàiliệu Quan sát "phản ứng" của Matlab khi xử lý các lệnh đưa vào Tự đặt ra các thídụ để thử nghiệm, đọc kỹ các dòng cảnh báo, thông báo lỗi nếu có
Hình 1: Cửa sổ Matlab
◦ Để khởi động Matlab ta chỉ cần nhắp kép (double click) vào biểu tượng của
Trang 4nó, hoặc vào menu start\All programs\Matlab 7.1 rồi chọn Matlab 7.11.
lệnh >>(hình 1) Các lệnh của Matlab được nhập vào từ đây.
◦ Để thoát (quit) chỉ cần nhắp chuột vào dấu X ở góc trên bên phải cửa sổMatlab
◦ Tất cả các đối tượng đưa vào Matlab phải được "khai báo" bằng cách xácđịnh "nội dung" của nó
sổ Matlab ta có thể dùng thanh trượt bên phải cửa sổ Matlab để xem các nội dungcũ(hình 2)
Trong tính toán trên, do ta không chỉ định phép gán, Matlab lưu trữ kết quả
1 Tên Matlab 7.1có thể khác tùy thuộc phiên bản Matlab mà bạn dùng.
Trang 5Hình 2: Nội dung workspace được hiển thị trên cửa sổ Matlab.
tính toán trong một biến tạm thời gọi là "ans"
Về mặt toán học ta không thể cộng vectơ với một số! Trong thí dụ trên Matlabđã mở rộng 3 ra thành ma trận [3 3 3 3 3 3 3 3 3]có cùng độ dài như vectơ
a rồi thực hiện phép cộng
◦ Nếu cần thực hiện lại một lệnh đã được đưa vào trước đó ta có thể tái hiệnlại lệnh này bằng cách nhấn phím ↑ một số lần thích hợp mà không cần phải gõ lạilệnh
Tính vectơ d là tổng của hai vectơa vàb
Trang 6Phép cộng (trừ) hai ma trận tương tự như trường hợp vectơ Đặc biệt, nhân matrận với một số có thể viết theo thứ tự nào cũng được Thí dụ, nếu A là ma trận slà một số thì hai lệnh s*AvàA*scho cùng một kết quả.
Trang 7Hàm số
◦ Matlab có một thư viện các hàm toán học rất phong phú như : sin, cos,log, exp, sqrt, Các số thường dùng như : π, i (hay j) =√−1cũng được địnhnghĩa sẵn trong Matlab
◦ Để tìm hiểu cách dùng một hàm Matlab bất kỳ chỉ cần gõ
>> help [ten ham]
◦Matlab cũng cho phép người sử dụng tạo các hàm riêng cho mình bằng lệnhfunction(sẽ được giới thiệu dưới đây)
Đồ thị
Trong Matlab để vẽ đồ thị một hàm số ta dùng hàm plot Thí dụ để vẽ đồthị hàm sin(t), trước hết ta tạo vectơ thời gian t và rồi tính giá trị hàm sin tạimỗi thời điểm
M-file là các file văn bản (text) chứa mã Matlab Tên M-file có phần mở rộng
".m" Có hai loại M-file:
◦ Script, không có đối số nhập/xuất, giống như một "kịch bản" ghi các lệnhtính toán tuần tự mà người sử dụng yêu cầu Khi gõ tên file ở dấu nhắc lệnh rồinhấn phím enter, Matlab sẽ thực hiện các lệnh ghi trong file, trên dữ liệu hiện hànhtrong vùng làm việc (workspace) Trong thực hành, để kiểm soát dữ liệu tính toán,script file thường bắt đầu bằng lệnh clear all xóa tất cả các biến lưu trữ trongworkspace, và khởi tạo lại các biến mà script file cần dùng
◦Function, có đối số nhập/xuất Loại file này thường được dùng để định nghĩahàm (giống như chương trình con) Thí dụ M-file rank.m
Trang 8Hình 3: Đồ thị hàm y = sin(t) với 0 ≤ t ≤ 7.
function r = rank(A,tol)
% RANK Matrix rank
% RANK(A) provides an estimate of the number of linearly
% independent rows or columns of a matrix A
% RANK(A,tol) is the number of singular values of A
% that are larger than tol
% RANK(A) uses the default tol = max(size(A)) * norm(A) * eps
4 Giới thiệu về Symbolic Math Toolbox
Mục này giới thiệu các nét chính của Symbolic Math Toolbox, một thành phần củaMatlab đảm trách việc tính toán ký hiệu
Trang 94.1 Đối tượng ký hiệu
Đối tượng ký hiệu (symbolic object) hay sym là một cấu trúc dữ liệu lưu trữ một chuỗi(string) biểu diễn của ký hiệu Đối tượng ký hiệu được dùng để biểu diễn các biến,các biểu thức và các ma trận ký hiệu Để tạo các biến và biểu thức ký hiệu ta dùnghàm sym Thí dụ,
tạo một biến ký hiệu biểu diễn tỉ lệ vàng (golden ratio)
4.2 Các phép tính ký hiệu thường dùng
Ta có thể thực hiện nhiều phép tính trên các biến ký hiệu Dưới đây là một vàiphép tính thường dùng
SUBS - thay thế ký hiệu.
◦subs(s)thay thế tất cả các biến trong biểu thức ký hiệusbằng các giá trịnhận được từ hàm gọi, hay vùng làm việc Thí dụ, giả sử a=980, C1=3 đã tồn tạitrong vùng làm việc
>> y=exp(-a*t)*C1;
>> subs(y)
◦ subs(s,new)thay thế các biến ký hiệu tự do trongs bằngnew Thí dụ,slà biểu thức f=x∧2
>> subs(s,2)
trả về ans=4(xđược thay bằng2trong biểu thức s)
◦ subs(s,old,new)thay thế old bằngnew trong biểu thức s Ở đây oldlà biến ký hiệu, chuỗi biểu diễn một tên biến hay chuỗi diễn tả một biểu thức;newlà một biến ký hiệu hoặc biến số hoặc biểu thức Thí dụ, subs(a+b,a,4)trả về4+b (ađược thay thế bằng 4)
Lệnh subscũng cho phép thay thế nhiều biến cùng một lúc Thí dụ,
subs(cos(a)+sin(b),{a,b},{sym(’alpha’),2})
bằng2)
Nếu oldvà new là các vectơ hay mảng có cùng kích thước, thì mỗi phần tửcủa old được thay bởi phần tử tương ứng của new Nếu s vàold là các vô hướngcòn new là mảng hay mảng ma trận (cell array), thì các vô hướng được mở rộng ra
[ exp(-t), exp(-3*t)]
Trang 10[ exp(-4*t), exp(-2*t)]
Trong thí dụ nàyađược mở rộng ra thành mảng rồi thay thế các phần tử tương ứngcủa nó bằng các phần tử tương ứng của mảng -[1 3; 4 2] Về mặt toán học, cácphép tính được thực hiện như sau
[ 0, -1]
[ 2, 0]
EXPAND - khai triển biểu thức ký hiệu.
expand(s)viết mỗi phần tử của biểu thức ký hiệus như là tích các thừa sốcủa nó expand hay được dùng với đa thức, ngoài ra nó cũng được dùng để khaitriển các biểu thức lượng giác, hàm mũ và hàm logarit
Thí dụ:
1)((x-2)*(x-4))trả về x∧2-6*x+8
2)expand(cos(x+y))trả vềcos(x)*cos(y)-sin(x)*sin(y)
3)expand(exp((a+b)∧2))trả về exp(a∧2)*exp(a*b)∧2*exp(b∧2)
4)expand([sin(2*t), cos(2*t)])trả về[2*sin(t)*cos(t), 2*cos(t)∧1]
2-SIMPLIFY - đơn giản biểu thức ký hiệu.
simplify(s)đơn giản mỗi phần tử của ma trận ký hiệus
Thí dụ:
1)simplify(sin(x)∧2 + cos(x)∧2)trả về 1
2) Vớirholà biến biểu diễn tỉ lệ vàng (thí dụ ở trên)
Trang 11các biến một cách tường minh
SIMPLE - tìm dạng đơn giản nhất của biểu thức ký hiệu hay ma trận.
simple(s)cố gắng thử nhiều biến đổi đại số khác nhau để đơn giản s, rồitrả về biểu thức ngắn nhất
Dưới đây là kết quả trả về của simple(s)kèm theo chỉ định phép biến đổiđược dùng
cos(x)+(-sin(x)∧2)∧(1/2) cos(x)+i*sin(x) radsimp
4.3 Một số cách dùng khác của hàm sym
a) Chuyển đổi một ma trận từ dạng số sang dạng ký hiệu LệnhA = hilb(3)sinh ra ma trận Hilbert 3x3
Trang 12>> syms x unreal
hay
>> x = sym(’x’,’unreal’)
>> clear x
không làm x trở thành biến không thực!
c) Dùngsym để truy xuất các hàm Maple Ta có thể truy xuất hàm giai thừak! của Maple, bằng cách dùng sym,
e) Tạo các hàm toán học ký hiệu
Cách 1 - dùng các biểu thức ký hiệu Dãy các lệnh
>> syms x y z
Trang 13M-file trong thư mục @sym.
function z = sinc(x)
% SINC The symbolic sinc function
% sin(x)/x This function
% accepts a sym as the input argumen
Hàm plot vẽ đồ thị này bằng cách nối các điểm bởi các đoạn thẳng Với các hàmtoán học được định nghĩa bằng ký hiệu Matlab cung cấp hàm ezplotđể vẽ đồ thịcủa chúng,
>> syms x real
>> ezplot(sin(x))
cho ta đồ thị của hàm sin trong khoảng mặc nhiên [−2π, 2π] Nếu muốn vẽ đồ thị
Hình 4: Đồ thị hàm sin(x) dùng lệnh ezplot(sin(x))
trong khoảng [0, 7] thì ta phải chỉ định rõ
Trang 14>> ezplot(sin(x),[0 7])
Hình 5: Đồ thị hàm sin(x) dùng lệnh ezplot(sin(x),[0 7])
4.4 Biến ký hiệu mặc nhiên
Khi ta đưa vào một hàm toán học bằng biểu thức của nó, thí dụ
Trang 15Quy tắc: Biến ký hiệu mặc nhiên trong một biểu thức ký hiệu là chữ cái gầnxnhất.Nếu có hai chữ cái gần x như nhau, chữ cái đứng sau trong bảng chữ cái được chọn.
4.5 Các thí dụ tính toán ký hiệu
Bây giờ chúng ta bắt đầu học cách dùng Matlab, cụ thể là Symbolic Math Toolbox,để tính toán ký hiệu thông qua các thí dụ
Thí dụ 1 Dùng phương pháp khử Gauss giải hệ phương trình đại số tuyến tính
x + 2y + 4z = 31
Đưa vào ma trận các hệ số nới rộng
>> clear all >> a=[1 2 4 31; 5 1 2 29; 3 -1 1 10]
Trang 160 1 2 14
0 0 3 15
Bạn đọc thực hiện nốt phần còn lại (phép thế ngược)
Thí dụ 2 Giải và biện luận hệ phương trình đại số tuyến tính
Trang 17hệ vô nghiệm Trường hợp m = 3 ta có d1 = d2 = d3 = 0 trường hợp này phải xét
cụ thể và dùng phương pháp Gauss, dành cho bạn đọc
Chú thích 1 Lệnhfactor(s)trả về vectơ chứa các thừa số nguyên tố củas Trongthí dụ này ta thấyfactorcó thể phân tích đa thức thành tích
Thí dụ 3 Cho dãy
Chứng minh dãy {un}hội tụ và tìm giới hạn của nó
Thông thường, để tìm giới hạn của các dãy số mà số hạng tổng quát của dãy là
một tổng, trước hết ta tính tổng để xác định un dưới dạng công thức đóng2 TrongMatlab lệnhsymsumcho ta công cụ tính tổng rất tiện lợi3
tường minh, bạn nên học (đoán) cú pháp của nó thông qua thí dụ hiện hành, và chỉ nên
Trang 18hạn của dãy
>> limit(un,n,inf)
ans =
log(2)
Kết quả trả về cùng biểu thức xác định un gợi ý cho ta, un là tổng tích phân của
hàm f(x) = 1/(1 + x) trên đoạn [0, 1] với phân hoạch đều ∆xi = 1/n và các điểm
ξi là điểm cuối của các đoạn con Ta có
limit(F,x,a)lấy giới hạn của biểu thức ký hiệuF khi x→ a
limit(F,a)dùngfindsym(F)như là biến độc lập
limit(F)dùnga = 0 như là điểm giới hạn
limit(F,x,a,’right’)haylimit(F,x,a,’left’)lấy giới hạn một phía.Thí dụ:
>> syms x a t h
Khi đó:
limit(sin(x)/x)trả về1
limit((x-2)/(x∧2-4),2)trả về 1/4
limit((1+2*t/x)∧(3*x),x,inf)trả vềexp(6*t)
limit(1/x,x,0,’right’)trả về inf
limit(1/x,x,0,’left’)trả về -inf
limit((sin(x+h)-sin(x))/h,h,0)trả về cos(x)
v = [(1 + a/x)∧x, exp(-x)];
limit(v,x,inf,’left’)trả về [exp(a), 0]
Thí dụ 4 Khảo sát sự hội tụ của dãy {xn}xác định bởi công thức truy hồi
Trang 19Columns 16 through 20
1.0000 1.0000 1.0000 1.0000 1.0000 1.4142 0.7654 1.1111 0.9428 1.02820.9858 1.0071 0.9965 1.0018
Kết quả trả về cho thấy dãy không đơn điệu Nhưng "hình như" dãy hội tụ về
1 (dao động quanh giá trị 1) Điều này dẫn ta đến ý tưởng dùng nguyên lý ánh xạ co
Dễ thấy, với mọi n
Đồ thị (hình 6) cho thấy max[0,1.5]|f0(t)| < 1, f là ánh xạ co trên [0, 1.5] Chứng
minh chi tiết dành cho bạn đọc
Thí dụ 5 Giải phương trình vi phân (x2+ 1)dy + ydx = 0 với điều kiện đầu y(1) = 1.
Ta có thể giải ngay phương trình trên bằng cách gọi hàmdsolve Mục đíchvà cú pháp của hàm này được thể hiện nếu ta gọihelp dsolvetừ dấu nhắc Matlab
Trang 20Hình 6: Đồ thị hàm f0(t), thí dụ 4.
Chú thích 3 Trong thí dụ ta gặp hai lệnh mới của Matlab: intvàsolve
INT - tích phân hàm số Cú pháp:
int(s)là tích phân bất định của s đối với biến ký hiệu như được xác địnhbởi findsym Nếus là hằng thì tích phân được lấy với x
Trang 21int(s,v) là tích phân bất định của s lấy đối với v v là biến ký hiệu vôhướng.
int(s,a,b)là tích phân xác định của s đối với biến ký hiệu của nó từ ađến b a, blà các số hay biến ký hiệu vô hướng
int(s,v,a,b)là tích phân xác định củas đối vớiv từa đếnb
SOLVE - giải phương trình đại số Cú pháp:
solve(’eqn 1’,’eqn 2’, ,’eqn N’)
solve(’eqn 1’,’eqn 2’, ,’eqn N’,’var 1,var 2, ,var N’)solve(’eqn 1’,’eqn 2’, ,’eqn N’,’var 1’,’var 2’, ’var N’)Cáceqn ilà các biểu thức ký hiệu hay chuỗi các phương trình chỉ định Cácvar j là các biến ký hiệu hay chuỗi chỉ định các biến chưa biết Nếu cácvar jkhông được chỉ định thì các ẩn được xác định bởi findsym
Nếu không có nghiệm giải tích được tìm thấy và số phương trình bằng số ẩnthì nghiệm số được tìm
Để biết cách xuất kết quả của solvexem các thí dụ sau
1) solve(’p*sin(x) = r’) chọn 'x' như là ẩn, trả về ans = asin(r/p)
nhiên hiểu vế hai là 0
2)[x,y] = solve(’x∧2 + x*y + y = 3’,’x∧2 - 4*x + 3 = 0’)trả về
Thí dụ 6 Giải phương trình vi phân xy0− y = x2cos x.
Phương trình có thể viết lại dưới dạng chuẩn,
y0− y
x = x cos x.
Trang 22Đây là phương trình vi phân tuyến tính cấp một Nghiệm tổng quát:
y0+ p(x)y = q(x).
Nhắc lại, nghiệm tổng quát của phương trình vi phân tuyến tính cấp một có dạng:
y = yp+ Cy1với Cy1 là nghiệm tổng quát của phương trình thuần nhất tương ứng (y1 là nghiệm
cơ sở); yp là một nghiệm riêng của phương trình xác định bởi:
là hàm Green cấp một, và s được thay bằng x sau khi lấy tích phân.
Bây giờ ta giải phương trình Phương trình thuần nhất tương ứng (phương trìnhcó biến phân ly)
Vì ln y = ln x nên nghiệm cơ sở: y1= x.
Hàm Green cấp một: G1(x, s) = x/s Dùng Matlab trợ giúp tìm nghiệm riêng
Vậy nghiệm tổng quát của phương trình: y = (C + sin x)x.
Thí dụ 7 Cho phương trình vi phân tuyến tính cấp hai thuần nhất
y00+ a(x)y0+ b(x)y = 0.
Trang 23Giả sử phương trình có nghiệm cơ sở y1, tìm nghiệm cơ sở còn lại.
Nghiệm cơ sở thứ hai được tìm dưới dạng:
Hệ số của u bằng không do y1 là nghiệm cơ sở Matlab không phát hiện được điều
này Ta phải giúp!
Trang 24Để hạ bậc đặt v = u0 hay u = R vdx Trước hết đưa vào hàm trừu tượng v
Phương trình nhận được là phương trình vi phân cấp một có biến phân ly Tách
biến Ta thực hiện liên tiếp hai lần lệnhcollect; xem chú thích bên dưới về lệnh
collectvà giải thích lý do phải thực hiện hai lần
>> p=collect(collect(p/v/y1,v),y1)
p =
diff(v(x),x)/v(x)+2*diff(y1(x),x)/y1(x)+a(x)
Lấy tích phân Ta cần tính tích phân từng số hạng của p Để chỉ định số hạng
trong một biểu thức ta gọi lệnh op của Maple Cú pháp của lệnh này trong Maple
làop(i,s)- lấy số hạng thứi trong biểu thứcs Để gọi một lệnh của Maple Nếu
trong Maple lệnh đó được viết là
function(arg1, arg2, )
thì trong Matlab để thực hiện lệnh đó ta viết
maple(’function’,arg1,arg2, ,)
>> p=int(maple(’op’,1,pp))+int(maple(’op’,2,pp))+ int(maple(’op’,3,pp))Warning: Explicit integral could not be found
In D:\MATLABR11\toolbox\symbolic\@sym\ int.m at line 58
Tại sao ta không giải trực tiếp ra v? Vì m chưa được khai báo biến sym nên ta phải
đặt nó giữa hai dấu nháy, chỉ định chuỗi
>> u=int(v)
Warning: Explicit integral could not be found
In D:\MATLABR11\toolbox\symbolic\@sym\ int.m at line 58
Trang 25Chú thích 4 Cú pháp của lệnh collectlà collect(s,v)trong đó s, v là cácbiểu thức ký hiệu Với lệnh này Matlab trả về biểu diễn mới của s như là một đathức theo v.
Lệnh pretty, có cú pháp: pretty(s) - xuấts dưới dạng thức toán học, dễđọc hơn
Cảnh báo của Matlab "Explicit integral could not be found" và chobiết "vấn đề" nảy sinh ở đâu là hiển nhiên vì các hàm cho trước không có biểuthức toán học cụ thể
Thí dụ 8 Tìm nghiệm cơ sở của phương trình Cauchy - Euler
x2y00+ axy0+ by = f (x),
trong đó a, b là các hằng số.
Ta tìm nghiệm dưới dạng y = xm Dùng Matlab để xác định m.