Chương trình trên Matlab • Matlab có thể làm việc như là một siêu máy tính cầm tay nếu chúng ta chỉ cần Matlab thực hiện một số lệnh bằng cách đánh trực tiếp trên của sổ lệnh… • Chương
Trang 1Chương 1 NHẬP MÔN MATLAB
Trang 2Nội dung
• Giới thiệu chung về MATLAB
• Làm việc với MATLAB
• Lập trình với MATLAB
• Các phép tính ma trận nâng cao
• Đồ thị nâng cao
• Vào ra dữ liệu
Trang 3Giới thiệu chung về MATLAB
• MATLAB (Matrix Laboratory) là phần mềm của hóng MathWorks Inc
• Đối tượng là cỏc ma trận
• MATLAB tớch hợp các ph-ơng pháp tính toán, hiển thị và ngôn ngữ lập trỡnh mạnh để cung cấp cho ng-ời sử dụng một môi tr-ờng làm việc thuận tiện để giải các vấn đề tính toán khoa học
• Cấu trúc mở của MATLAB cho phép sử dụng MATLAB và các thành phần của nó để khảo sát dữ liệu, nghiên cứu các thuật toán và tạo các công cụ tiện ích của ng-ời sử dụng
Trang 4Giới thiệu chung về MATLAB (tiếp)
• Ngoài ra Matlab cũng đã tạo sẵn rất nhiều công cụ tiện ích như:
– Khai ph¸ dữ liÖu (Data acquisition)
– Ph©n tÝch vµ kh¶o s¸t dữ liÖu (Data analysis and exploration)
– HiÓn thÞ vµ xö lý ¶nh (Visualization and image processing)
– Dùng mÉu vµ Ph¸t triÓn thuËt to¸n (Algorithm prototyping and
development)
– M« hình hãa vµ m« pháng (Modeling and simulation)
–
• MATLAB là công cụ được các nhà khoa học, kỹ sư sử dụng để phát triển
các phần mềm giải các bài toán tính toán trong khoa học kỹ thuật
• Bản thân MATLAB cũng cung cấp công cụ để giải nhiều bài toán của
khoa học kỹ thuật
• MATLAB được dùng trong nhiều trường đại học để hỗ trợ việc giảng
Trang 5Làm việc với MATLAB
Trang 6Màn hình làm việc của Matlab
Cửa sổ lệnh Command Window
Các lệnh quá khứ
Command history
Thư mục hiện thời
Current Directory
Trang 7Cửa sổ lệnh
Command Window
Vùng nhớ làm việc Workspace
Các lệnh quá khứ
Command History
Trang 8Chương trình trên Matlab
• Matlab có thể làm việc như là một siêu máy tính cầm tay nếu
chúng ta chỉ cần Matlab thực hiện một số lệnh bằng cách đánh trực tiếp trên của sổ lệnh…
• Chương trình được thực hiện bằng cách nào?
• Chương trình trong Matlab có thể là:
Trang 9Bộ soạn thảo của Matlab (Matlab Editor)
Tự động gán màu chữ và dóng hàng
Trang 10Cơ cấu làm việc của Matlab
• Matlab là ngôn ngữ thông dịch (interpreted language)
– Các câu lệnh được đánh trực tiếp trong cửa sổ lệnh và được thực hiện tức thì
– Các biến được phân bố bộ nhớ ngay lần đầu tiên chúng được khởi tạo – Muốn thực hiện lại một lệnh chỉ việc gõ lại lệnh đó
• Tất cả các biến được sử dụng trong cửa sổ lệnh được cất giữ vào Vùng nhớ làm việc Base Workspace
– Có thể gán giá trị mới cho các biến nếu cần thiết
– Có thể chọn để xoá bỏ một số biến khỏi vùng nhớ làm việc
– Vùng nhớ làm việc có thể cất giữ vào một file dữ liệu
– Phần mở rộng của file dữ liệu là mat (ví dụ: mydata.mat )
– File là file nhị phân
Trang 11Câu lệnh, Chỉ thị & Biến
• Tại dấu nhắc của cửa sổ lệnh, người sử dụng có thể gõ:
– Lệnh (Command) :
• save mydata (cất giữ vùng nhớ làm việc vào mydata.mat)
• whos (hiển thị danh mục các biến trong vùng nhớ làm việc)
– Chỉ thị gán (Assignment Statement):
• A = width * length;
• B = 267;
• Câu lệnh gán chỉ có một tên biến ở vế trái của toán tử gán (=)
• Vế phải sẽ được tính dựa vào giá trị hiện thời của các biến và kết quả tính được sẽ gán cho biến ở vế trái
Trang 12Làm việc trong chế độ hội thoại
• Khi sử dụng chế độ hội thọai, ng-ời sử dụng đánh trực tiếp câu lệnh vào sau dấu nhắc của MATLAB Khi ấn nút “Enter”,
• Dấu chấm phảy ";" ở cuối dòng lệnh đ-ợc sử dụng để ngăn
MATLAB không đ-a kết quả của phép thao tác
Trang 13Chương trỡnh trờn MATLAB
• Một cách làm việc khác với MATLAB là ta có thể viết ch-ơng trỡnh để thực hiện các tính toán
• Để làm điều này ta cần soạn thảo một file văn bản bằng bất kỳ
bộ soạn thảo văn bản nào, trong đó có bộ soạn thảo của
MATLAB
• File văn bản chứa các câu lệnh phải đ-ợc đặt tên với đuôi là
*.m, nếu không MATLAB sẽ không chấp nhận ch-ơng trỡnh
• Ch-ơng trỡnh đ-ợc soạn thảo cần cất giấu trong th- mục làm việc hiện thời của MATLAB.
Trang 14• VÝ dô, néi dung cña file Tinhpi.m
% Program 1.1 (TÝnh sè )
% Ch-¬ng trình tÝnh gi¸ trÞ cña Pi = 3.14159265358979
% Mçi dßng b¾t ®Çu bëi % sÏ lµ dßng chó gi¶i vµ sÏ ®-îc
% MATLAB bá qua khi nã thùc hiÖn ch-¬ng trình
Trang 15Các từ khoá…
• Matlab sử dụng một loạt các từ khoá (reserved
words) mà để tránh xung đột, không nên sử dụng để đặt tên biến…
try catch global persistent break
Trang 16C¸c tªn biÕn vµ tªn hµm chuÈn cña MATLAB
Trang 17C¸c tªn biÕn vµ tªn hµm chuÈn cña MATLAB
hµm ng-îc cña tang
sè phøc liªn hîp
hµm cosin
hµm mò
Trang 18C¸c tªn biÕn vµ tªn hµm chuÈn cña MATLAB
Trang 19• Khu«n d¹ng ®-îc chän nhê sö dông lÖnh format:
– FORMAT SHORT số dấu phảy động có 4 chữ số sau dấu – FORMAT LONG số dấu phảy động có 14 chữ số
– FORMAT SHORTE số dấu phảy động có 4 chữ số với số mũ – FORMAT LONGE số dấu phảy động có 15 chữ số với số
mũ
– FORMAT RAT biểu diễn đúng hoặc gần đúng dưới dạng
Trang 203.1416e+000
>> format rat, pi ans =
355/113
Trang 23Khëi t¹o biÕn vect¬ vµ ma trËn
• Mét trong những ®iÓm m¹nh cña MATLAB lµ nã cho phÐp lµm viÖc víi c¸c ma trËn vµ vect¬ ĐÓ sö dông mét biÕn ta cÇn khëi t¹o nã Cã thÓ khëi t¹o biÕn
vect¬ vµ ma trËn theo nhiÒu c¸ch
• Đèi víi vect¬ (hay ma trËn chØ cã mét dßng) ta cã thÓ
sö dông c¸c c¸ch khëi t¹o sau
Trang 24Khởi tạo biến vectơ và ma trận
• Một trong những cách khởi tạo vectơ th-ờng
dùng là sử dụng toán tử
first : increment : last
• Câu lệnh
a= first : increment : last
khởi tạo vectơ dòng a bắt đầu từ phần tử first
và kết thúc tại phần tử last với độ dài b-ớc là
increment Nếu không chỉ ra increment , thỡ giá trị ngầm định nó là bằng 1
Trang 25Khëi t¹o biÕn vect¬ vµ ma trËn
Trang 26Khởi tạo biến vectơ và ma trận
• Để khởi tạo ma trận ta có thể làm nh- sau
>> A = [1 2 3; 4 5 6; 7 8 9];
>> B = [x; y; z];
>> C = [A; 10 11 12];
• Chú ý là các dòng của ma trận đ-ợc phân tách nhau bởi dấu ";", trong khi đó các phần tử trên một dòng
đ-ợc phân tách bởi dấu cách (hoặc dấu phảy)
Trang 27Địa chỉ của mảng (Array addressing)
• Các phần tử của một mảng tổng quát (là vectơ hay ma trận) có thể địa chỉ hóa theo nhiều cách
• Cách đơn giản nhất là chỉ ra phần tử bởi vị trí
dòng và cột của nó trong mảng
• Các dòng và cột đ-ợc đánh số bắt đầu từ 1
Trang 28ĐÞa chØ cña m¶ng (Array addressing)
Trang 29Địa chỉ của mảng (Array addressing)
• Trong tr-ờng hợp ma trận, có thể xác định
địa chỉ dòng hay cột bởi lệnh :
• Ví dụ: Nếu cần lấy các phần tử của cột thứ
hai và các phần tử của dòng thứ 3 trong ma trận A có thể dùng các lệnh
>> A(:,2)
>> A(3,:)
Trang 30Địa chỉ của mảng (Array addressing)
• Thay vectơ chỉ số vào chỗ các chỉ số ta có thể sinh ra hoặc lấy
• Nếu chỉ số đ-ợc chỉ ra bởi ký tự : thỡ điều đó có nghĩa là tất
cả các giá trị có thể của chỉ số của chiều đó của mảng đều
đ-ợc chọn
• Ví dụ:
>> B = A(:,[3 1 2]);
Trang 31ĐÞa chØ cña m¶ng (Array addressing)
- NÕu A vµ B lµ c¸c ma trËn cã cïng sè cét thì
>> C = [A; B]
cho ma trËn C cã sè cét b»ng sè cét cña A hoÆc B nh-ng
sè dßng cña C lµ b»ng tæng sè dßng cña A vµ B
Trang 32Địa chỉ của mảng (Array addressing)
• Để xoá một dòng hay cột của ma trận ta sử dụng cặp
ngoặc vuông rỗng []:
• Ví dụ: Giả sử A là ma trận trong ví dụ tr-ớc Khi đó,
lệnh
>> A(:,2) = [];
cho ta ma trận thu được từ A bởi việc xoỏ đi cột thứ 2
• Không thể xoá bỏ một phần tử của ma trận, bởi vỡ khi
đó kết quả không còn là ma trận nữa
• Tuy nhiên, nhờ mô tả chỉ số bởi toán tử : có thể thực hiện việc xoá bỏ một phần tử hoặc một dãy phần tử và các phần tử còn lại đ-ợc sắp xếp lại trong một vectơ dòng
Trang 33Các phép toán đối với vectơ và ma trận
• Tr-ớc xét một số hàm của MATLAB cho thông tin về
đặc tr-ng của mảng
• Hàm length cho phép xác định số phần tử của vectơ
Nếu gọi hàm đối với ma trận thỡ nó sẽ trả lại số lớn hơn trong số dòng và số cột của ma trận
• Hàm size, nó trả lại số dòng và số cột của ma trận hay
vectơ Kết quả của hàm size là một vectơ 12 chứa số dòng và số cột của ma trận Cách sử dụng chuẩn của hàm này là
>> [rows cols] = size(A);
Trang 34Các phép toán đối với vectơ và ma trận
• Cộng (và trừ) cỏc ma trận cựng kớch thước được thực hiện từng thành phần
Trang 35Các phép toán đối với vectơ và ma trận
• Nhõn với một số (chia cho một số khỏc khụng) cũng được thực hiện theo từng thành phần Vớ dụ:
Trang 36semi-Các phép toán đối với vectơ và ma trận
• Cộng vectơ và nhõn vectơ với một số được thực hiện tương tự
Trang 37Các phép toán đối với vectơ và ma trận
• Phộp nhõn hai ma trận cũng cú thể thực hiện được trờn Matlab
• Để nhõn hai ma trận hay nhõn ma trận với vector chỉ việc dựng toỏn tử * giống như
phộp nhõn của cỏc đại lượng vụ hướng
• Matlab nhận dạng kớch thước của đầu vào
và thực hiện phộp nhõn
• Điều mà người sử dụng quan tõm là kớch thước của cỏc ma trận và vector phải phự hợp để cú thể thực hiện được phộp toỏn
Trang 38Các phép toán đối với vectơ và ma trận
Trang 39Các phép toán đối với vectơ và ma trận
• Để thực hiện chuyển vị vectơ hoặc ma trận có thể dùng lệnh chuyển vị ' viết ngay sau tên
biến
>> A = [ 4 5; 5 4; 6 3]
>> A' ans =
4 5 6
5 4 3
Trang 40Các phép toán đối với vectơ và ma trận
• Phép toán chuyển vị thực hiện đối với ma trận phức sẽ thực hiện chuyển vị liên hợp:
Trang 41Các phép toán đối với vectơ và ma trận
• Một phép chuyển vị khác ít dùng đối với ma trận phức
đ-ợc thực hiện nhờ phép toán ".'" Ví dụ:
Trang 42Các phép toán đối với vectơ và ma trận
• Nếu A là ma trận vuông còn m là số nguyên d-ơng thỡ A^m sẽ cho ta tích của m nhân tử là A
Trang 44Các phép toán đối với vectơ và ma trận
• Phép toán luỹ thừa áp dụng với ma trận kích th-ớc 1 1 trở
thành phép toán luỹ thừa của đại l-ợng vô h-ớng
Trang 45Gi¶i ph-¬ng trình ma trËn sö dông phÐp chia ma trËn
• NÕu A lµ ma trËn vu«ng kh«ng suy biÕn thì nghiÖm cña
nµy vµ ký hiÖu lµ to¸n tö "\"
Trang 46Giải ph-ơng trỡnh ma trận sử dụng phép chia ma trận
• Chú ý: hàm rand tạo các số ngẫu nhiên với phân bố đều trên
đọan (0,1) Hãy sử dụng lệnh help rand để xem giải đáp chi tiết
về hàm này
• Nh- vậy A\b là t-ơng đ-ơng với việc nhân trái b với ma trận A
-1 (tuy nhiên, để đ-a ra kết quả, Matlab không tính ma trận
nghịch đảo mà giải trực tiếp hệ ph-ơng trỡnh)
• Khi sử dụng toán tử "\" đối với ma trận không vuông, Matlab
sẽ giải hệ ph-ơng trỡnh t-ơng ứng trong nghĩa bỡnh ph-ơng bé
nhất;
• Hãy sử dụng lệnh help slash để có đ-ợc giải đáp chi tiết hơn
• Giống nh- đối với các phép toán số học khác, các ma trận phải
có kích th-ớc phù hợp
Trang 47Các phép toán đối với vectơ và ma trận
• Tớch theo từng thành phần của hai ma trận cựng kớch thước A và B là ma trận A.*B với cỏc phần tử
là tớch của cỏc phần tử tương ứng của A và B
• Vớ dụ:
>> A=[ 1 2 3; 4 5 6]; B=[3 2 1;-1 2 2];
>> A.*B ans = 3 4 3 -4 10 12
Trang 48
Các phép toán đối với vectơ và ma trận
• Phộp chia và luỹ thừa theo từng thành phần:
A./B và A.^B được định nghĩa tương tự Lưu ý
là cỏc phộp tớnh với cỏc thành phần phải là cú nghĩa, nếu khụng MATLAB sẽ bỏo lỗi
• Vớ dụ:
>> A./B ans = 1/3 1 3 -4 5/2 3
>> A.^B ans = 1 4 3 1/4 25 36
Trang 49
Các phép toán đối với vectơ và ma trận
• Phộp cộng ma trận với vụ hướng: Giỏ trị của
vụ hướng được cộng vào từng thành phần của
ma trận
• Vớ dụ:
>> A=[1 2 3; 2 3 4];
>> A+5 ans =
6 7 8
7 8 9
Trang 50
Các hàm và phép toán vectơ hóa
• Các hàm của Matlab đều là hàm đ-ợc vectơ hóa,
nghĩa là nếu áp dụng các hàm của Matlab đối với
mảng, nó sẽ tạo ra mảng mới có cùng kích th-ớc với các thành phần là giá trị hàm tại các thành phần t-ơng ứng của mảng ban đầu
• Ví dụ: Vẽ đồ thị hàm y=sin(x) trên đoạn [0, 2*pi]
>> x = (0:.1:2*pi);
>> y = sin(x);
>> plot(x,y)
Trang 51C¸c hµm vµ phÐp to¸n vect¬ hãa
• Matlab còng cung cÊp c¸c phÐp to¸n sè häc ®-îc
vect¬ hãa, ®-îc ký hiÖu gièng nh- phÐp to¸n sè häc th«ng th-êng nh-ng cã thªm dÊu chÊm "." ë tr-íc
Trang 52Các hàm tạo ma trận đặc biệt
• zeros(m,n) tạo ma trận m n gồm toàn số 0;
• ones(m,n) tạo ma trận m n gồm toàn số 1;
• eye(n) tạo ma trận đơn vị n n ;
• diag(v) (giả thiết v là vectơ n chiều) tạo ma
đ-ờng chéo
Trang 53Biến xâu trong MATLAB
• MATLAB cho phép sử dụng biến xâu ký tự: Sử dụng lệnh gán
Trang 54Biến xâu trong MATLAB
• Lệnh S = [S1 S2 ] ghép các xâu S1, S2, thành một xâu mới S
Trang 55Biến xâu trong MATLAB
Trang 56Biến xâu trong MATLAB
• Để khởi tạo biến mảng mà mỗi phần tử là một xâu, sử dụng:
>> S = {'Hello' 'Yes' 'No' 'Goodbye'}
Trang 57LẬP TRÌNH TRÊN MATLAB
Trang 58Câu lệnh trong Matlab
• Câu lệnh hay gặp nhất trong Matlab có
dạng
variable = expression
Câu lệnh này sẽ gán giá trị của biểu thức
Ví dụ:
>> x=2^10*pi
x =
Trang 59Câu lệnh trong Matlab
• Câu lệnh của Matlab cũng còn có thể có dạng đơn giản như sau:
expression
trong trường hợp này giá trị của biểu thức
sẽ được gán cho biến ngầm định có tên là
Trang 60Câu lệnh trong Matlab
• Cuối cùng, một dạng nữa của câu lệnh trong
Matlab là
– Nếu như biến đã được gán giá trị trước đó thì nội
dung của biến được đưa ra màn hình,
– Nếu trái lại sẽ có thông báo rằng biến chưa được xác định
• Người sử dụng có thể tận dụng điều này để
kiểm tra xem một tên biến đã được dùng hay
chưa
Trang 61Câu lệnh trong Matlab
• Câu lệnh của Matlab sẽ được thực hiện ngay sau khi nhấn phím Enter Nếu câu lệnh Matlab kết thúc bởi Enter, theo ngầm định, Matlab sẽ đưa kết quả thực hiện lên thiết bị ra chuẩn
(ngầm định là màn hình)
• Muốn tránh việc đưa kết quả ra ngay trực tiếp sau câu lệnh, cần kết thúc câu lệnh bởi dấu ; sau đó mới đến Enter
• Khi câu lệnh của Matlab quá dài có thể ngắt thành hai hoặc nhiều dòng sử dụng dấu nối
dòng … ở cuối mỗi dòng chứa câu lệnh
Trang 62Câu lệnh trong Matlab
>> clear var1 var 2
trong đó var1, var2, Là các tên của cá biến cần xóa
Trang 63Các phép toán quan hệ và logic trong Matlab
Phép toán quan hệ Ý nghĩa
Phép toán lôgic Ý nghĩa
& AND (hội)
| OR (tuyển)
~ NOT (phủ định)
Số khác không
Trang 64• Nếu không có expr nào khác 0 thì nhóm lệnh sau else
elseif và else là tuỳ chọn
Trang 67Câu lệnh vòng lặp for
• Vòng lặp for lặp lại các câu lệnh trong thân của
nó đối với các giá trị của biến chạy được lấy từ một vector dòng cho trước
Trang 68Câu lệnh vòng lặp for
• Chú ý đến việc sử dụng hàm nội trú disp : hàm này đưa
ra màn hình nội dung của biến
• Vòng lặp, cũng giống như câu lệnh if, phải kết thúc bởi
end Vòng lặp ở trên thường được viết dưới dạng như sau
Trang 70sẽ tạo ra ma trận Hilbert kích thước 4 x 5
• Dấu ; ở cuối câu lệnh trong thân của vòng lặp dùng để ngăn Matlab không đưa cá kết quả trung gian, ma trận
kết quả được đưa ra bởi lệnh h
Trang 71• Các câu lệnh trong thân của vòng lặp
while sẽ được lặp lại chứng nào biểu thức
expr còn là true (có giá trị khác 0)
Trang 74q = 1075
Tràn số nhỏ underflow
Hiện tượng tràn số nhỏ
Trang 75Ví dụ: Tìm r nguyên dương nhỏ nhất để 2r = inf
Hiện tượng tràn số lớn
Trang 77C©u lÖnh switch
• Câu lệnh switch cho phép thực hiện rẽ nhánh
dựa trên giá trị biểu thức
• Dạng tổng quát của câu lệnh switch là:
switch bieuthuc
case giatri
cac cau lenh
case {giatri1, giatri2, giatri3, } cac cau lenh
otherwise
cac cau lenh
end
Trang 78disp(‘the workday.')
end
Trang 79Câu lệnh break
• Lệnh break dùng để ngắt việc thực hiện vòng lặp WHILE hay là FOR Trong vòng lặp lồng nhau, BREAK sẽ chỉ thoát khỏi vòng lặp trong
• Nếu sử dụng lệnh break ngoài vòng lặp FOR hay WHILE trong kịch bản hoặc hàm của MATLAB, lệnh này sẽ chấm dứt việc thực hiện kịch bản hay hàm tại chính điểm đó Lệnh break sử dụng trong câu lệnh IF, SWITCH-CASE, sẽ ngắt câu lệnh tại điểm đó