i MỤC LỤC Trang CHƯƠNG I GIỚI THIỆU MA TRẬN TRONG MATLAB 1 CHƯƠNG II CÁC HÀM MA TRẬN TRONG MATLAB 2 1 Hàm Size trong ma trận và mảng 2 2 Số phức 5 3 Toán tử Colon 6 4 Truy cập các phần của ma trận 9 4.
Trang 1MỤC LỤC
Trang
CHƯƠNG I: GIỚI THIỆU MA TRẬN TRONG MATLAB 1
CHƯƠNG II: CÁC HÀM MA TRẬN TRONG MATLAB 2
1 Hàm Size trong ma trận và mảng 2
2 Số phức 5
3 Toán tử Colon 6
4 Truy cập các phần của ma trận 9
4.1 Truy cập nhiều phần tử 12
5 Kết hợp các ma trận và biến đổi ma trận 17
6 Toán tử chuyển vị 19
7 Số học Ma trận 22
7.1 Cộng và trừ 22
7.2 Phép nhân 23
7.3 Phép chia 24
7.4 Luỹ thừa 25
8 Các phép toán liên quan đến đại lượng vô hướng 26
9 Kết hợp các toán tử dấu hai chấm và số học 26
10 Mức độ ưu tiên của nhà điều hành và tính liên kết 27
CHƯƠNG III: KẾT LUẬN 28
TÀI LIỆU THAM KHẢO 29
Trang 2LỜI NÓI ĐẦU
Lời cảm ơn thầy Phước đã tạo điều kiện làm bài tiểu luận mục đích để tìm hiểu
về các công cụ Matlab và đã hướng dẫn trong quá trình học tập trên lớp với môn học
Lý thuyết tín hiệu truyền dẫn
Qua đề tài giới thiệu về ma trận trong Matlab thì tôi đã tìm hiểu rất kỹ và chi tiết tại cuốn sách khóa học “COMPUTER PROGRAMMING WITH MATLAB” đã hiểu ra được một số lệnh công cụ sử dụng trong Matlab rất có lợi cho sinh viên học ngành kỹ thuật đặc biệt là ngành Điện Tử Viễn Thông sử dụng công cụ Matlab rất nhiều Mục đích làm các hàm cơ bản trong ma trận để biết cách tính toán ma trận và
từ đó sẽ nâng cao lên để tính toán trong các đường tín hiệu hoặc phân tích các đồ thị trên Matlab Nếu sinh viên ngành Điện Tử Viên Thông mà không biết sử dụng công
cụ Matlab là chắc chắn một sự thiệt thòi lớn vì đó thầy Phước đã lên đề tài vừa giúp sinh viên cải thiện trong việc lập trình và cũng như để biết sử dụng công cụ Matlab này Đối với công cụ Matlab về phần cơ bản thì hầu như gần giống với toán học và
sử dụng một số lệnh cơ bản về các ngôn ngữ lập trình C/C++…
Trong quá trình thực hiện thì không thể tránh được khỏi sự sai sót do vậy người đọc bài có thể góp ý để cải thiện những bài làm tiếp theo Tôi xin chân thành cảm ơn!
Trang 3CHƯƠNG I: GIỚI THIỆU MA TRẬN TRONG MATLAB
Để giải quyết một bài toán nào đó mà chúng ta lại sử dụng về phương thức là ma trận nhưng muốn nó xử lý nhanh hơn nữa thì sẽ sử dụng công cụ là MATLAB Cách xác định
ma trận, trích xuất các phần của chúng và kết hợp chúng để tạo thành các ma trận mới, từ
đó sẽ thao tác các phần tử khác như về toán tử cộng, trừ, nhân, chia trong ma trận và chúng
ta sẽ nhận hiểu ra rằng mỗi phần tử nhân chia sẽ có khác nhau trong quá trình thực hiện Cuối cùng chúng ta sẽ tìm hiểu các quy tắc của Matlab để xác định thứ tự mà các toán tử được thực hiện khi nhiều hơn một trong số chúng xuất hiện trong cùng một biểu thức Các tính năng đáng chú ý nhất như vậy là những tính năng liên quan đến các phép toán đặc biệt trên mảng số Mảng số phổ biến nhất được gọi là "ma trận" và đơn vị cơ bản
mà ta làm việc trong MATLAB là ma trận
Trong so sánh với các ngôn ngữ lập trình mục đích chung, MATLAB giúp việc thêm
ma trận này vào ma trận khác dễ dàng hơn nhiều, để trừ chúng, và nhân chúng, và chúng ta
sẽ thực hiện nhiều phép toán khác trên chúng như là sự tập trung vào ma trận này rõ ràng
từ cái tên, "MATLAB", là chữ viết tắt của cụm từ "Phòng thí nghiệm Ma trận"
Hình 1:Mảng, ma trận, vecto và vô hướng
Hình 1 cho thấy tập hợp các mảng bao gồm tất cả các ma trận, tập các ma trận bao gồm tất cả các vectơ và tập các vectơ bao gồm tất cả các đại lượng vô hướng
Trang 4CHƯƠNG II: CÁC HÀM MA TRẬN TRONG MATLAB
Trong ví dụ trên, thì size chỉ được cung cấp một đối số, x, (vì vậy không cần dấu phẩy)
và nó tạo ra kết quả là hai số 1 và 1 Số 1 đầu tiên đại diện cho số hàng hoặc chiều cao của
ma trận x và số 1 thứ hai là số cột hoặc chiều rộng của nó Có thể tạo ma trận lớn hơn bằng
cách sử dụng dấu ngoặc và dấu chấm phẩy “;”
Trang 5Dấu “[]” cho biết rằng chúng ta đang yêu cầu Matlab tạo thành một ma trận và có ký
hiệu đánh dầu đầu câu và cuối câu, các phần tử riêng lẻ được phân tách bằng dấu cách, dấu chấm phẩy là dùng để đánh dấu kết thúc của một hàng thay vì làm cho quá trình in ra bị chặn như khi nó ở cuối một lệnh
Vì vậy trong ví dụ trên, “2.3 4 8” có nghĩa là ba phần tử đầu tiên được xuất ra đó là
“2.3000 4.0000 80000” và phần tử tiếp theo sau dấu chấm phẩy thì “2*pi pi 5” là bắt đầu
với hàm tiếp theo như “6.2832 3.1416 5.0000” nhưng phần tử thứ 2 thì có cái lạ đó là
“pi” và trong Matlab “pi” được coi ký hiệu là trong toán học để người lập trình dễ hiểu
đó là “pi”, vì là một số vô tỉ nên pi cho giá trị gần đúng như 3,141592653589793
Nhưng Matlab nó chỉ hiện thị 4 chữ số đầu tiên ở bên phải số thập phân vì định dạng rút gọn dễ tính toán hơn thôi Vì vậy ma trận theo định nghĩa là hình chữ nhật nên phải có cùng số phần tử trên hàng thứ hai như trên hàng đầu tiên Phần tử thứ ba và cuối cùng trên hàng thứ hai là 5
Ví dụ 3: Hiển thị size ma trận x của ví dụ 2
>> size(x)
ans =
2 3
Nhưng tôi lại có thêm 1 ví dụ nó lớn hơn ví dụ lúc đầu nữa, ta có:
Ví dụ 4: Hiển thị ma trận dài 2 8 xuất ra nhiều dòng
Sẽ thắc mắc tại sao lại có chữ Columns 1 through 5 bởi vì khi chúng ta chạy ma trận
y quá dài đi mà xuất ra màn hình ở cửa sổ lệnh không đủ khoảng cách xem hết do đó cột thứ 6 đến 8 thì sẽ được nhóm lại sau các cột từ 1 đến 5
Trang 6Có hai cách thực hiện thay thế khi nhập các phần tử của ma trận Đầu tiên, một dấu phẩy tùy chọn có thể được nhập sau bất kỳ phần tử nào:
Ví dụ 5: Thử dấu phẩy sau mỗi phần tử
Như vậy ở ví dụ 6 thì thấy ta enter xuống dòng sau số 4 thì kết thúc đáp án vẫn như
cũ không có thay đổi gì hết
Một vector trong Matlab chỉ đơn giản là một ma trận với chính xác một cột hoặc chính xác một hàng, hai loại vector này được gọi là tương ứng một vector cột và một vector hàng:
Trang 7Số 1 đứng đầu biểu thị một vectơ x là hàng, 3 cột còn y thì ngược lại Như đã đề cập
ở đầu phần, ma trận còn được gọi là mảng Đối với hầu hết các ngôn ngữ lập trình, thuật ngữ "mảng" được sử dụng riêng, nhưng đối với Matlab, việc lựa chọn thuật ngữ phụ thuộc vào loại hoạt động được thực hiện trên chúng các phép toán ma trận hoặc hoạt động mảng
2 Số phức
Matlab hoàn toàn có khả năng xử lý các số phức Một đại lượng vô hướng có thể phức tạp, một vectơ có thể có các phần tử phức tạp, ma trận và mảng cũng có thể có chúng Mảng
3 x 4 x 5 có cùng hình dạng cho dù một số, tất cả hoặc không có số nào là phức Số phức
là số bao gồm ( 1) , căn bậc hai của -1, là số ảo và được ký hiệu bằng chữ i trong toán học Trong Matlab, phần ảo của một số phức được hiển thị bằng hậu tố i hoặc j
Trang 8Do sự nhầm lẫn có thể gây ra khi gán các giá trị khác với căn bậc hai của -1 cho i và
j Tuy nhiên, i và j thường được sử dụng làm số nguyên thực trong toán học, do đó, khi cần các biến để giữ số nguyên trong Matlab, tránh sự nhầm lẫn thì thay thế các biến ii và jj thay cho i và j Để phù hợp với kiểu chữ cái kép này, người ta cũng thường thấy kk, 11, mm và
nn cũng được sử dụng để chứa các số nguyên
3 Toán tử Colon
Toán tử là một hàm được gọi bằng một ký hiệu, các ví dụ quen thuộc nhất của các toán tử là +, -, * và / Ngoài ra còn có một tên đặc biệt cho số đầu vào của chúng như một đối số đầu vào cho một toán tử được gọi là một toán hạng
Sau đây sẽ giới thiệu một toán tử mới “:” được gọi là toán tử dấu hai chấm Toán tử
dấu hai chấm chỉ định một danh sách các số có khoảng cách đều nhau
Các phần tử của vectơ x = [1 4 7] cách đều nhau Matlab cung cấp một cách thuận tiện để tạo ra vectơ này: x = 1: 3: 7, có nghĩa là, "Gán x là vectơ có các phần tử bắt đầu bằng 1, tăng 3 và không cao hơn 7." Biểu thức này là một ví dụ về việc sử dụng toán tử Matlab đặc biệt
Ví dụ 12: Toán tử dấu “:” trong Matlab
Trang 91 4 7
Để biết tại sao hai biểu thức khác nhau này lại tạo ra chính xác cùng một chuỗi, hãy lưu ý rằng biểu thức thứ hai không thể yêu cầu chuỗi phải kết thúc bằng 8 Điều đó là không thể đối với một chuỗi bắt đầu bằng 1 và tăng lên 3, bởi vì, sau khi chạm 7, nó sẽ nhảy qua
8 và hạ cánh ở 10 Từ đó tôi thử tăng số 7 lên số 9 thì kết quả như thế nào
Ví dụ 13: Vẫn ví dụ 12 nhưng thay số 7 lại số 9 kết quả sau:
>> x = 1:3:9
x =
1 4 7
Việc tăng giới hạn lên 9 không có tác dụng gì hết nhưng việc kết thúc dãy số ở con số
9 thì sẽ có cùng vấn đề với việc kết thúc dãy số bằng số 8 Trình tự sẽ nhảy qua 9, cũng như
nó sẽ nhảy qua 8 Bây giờ hãy tăng nó lên 9.9 để xem kết quả như thế nào:
Ví dụ 14: Thử với mức 9.9 để xem kết quả như thế nào
ở phần phụ có tên Toán tử chuyển vị) Nó đặc biệt hữu ích cho các danh sách rất dài, trong
đó một phép liệt kê rõ ràng sẽ yêu cầu nhập quá nhiều, chẳng hạn như 0: 2: 9999, tạo ra năm nghìn số chẵn hoặc 1: 2: 9999, tạo ra năm nghìn số lẻ
Trang 10Khoảng cách phổ biến nhất được sử dụng với toán tử dấu hai chấm là 1 vậy:
Ví dụ 16: Cho số tăng dần quá chán nên thay đổi con số bằng nhau điều gì sẽ xảy ra
>> x = 1:1:7
x =
1 2 3 4 5 6 7
Đối với khoảng cách này, có một phiên bản viết tắt của toán tử dấu hai chấm có sẵn,
trong đó: 1: ở giữa được viết tắt đơn giản là “:” Đây là một ví dụ:
Ví dụ 18: Khi toán hạng giữa là số âm thì kết quả có như sau:
>> x = 7: -3: 1
x =
7 4 1
Biểu thức này có nghĩa là, "Gán 𝐱 là vectơ có các phần tử bắt đầu bằng 7, giảm đi 3
và không thấp hơn 1" Do đó, khi số ở giữa là số âm, Matlab sử dụng quy tắc ngược lại của Price is Right để dừng dãy Dãy dừng ở số gần nhất với 1 mà không đi dưới
Ví dụ 19: Điều gì sẽ xảy ra khi sử dụng biểu thức nỗ lực tạo ra một chuỗi giảm dần
>> x = 7:3:1
x =
1×0 empty double row vector
Lý do tại sao lại có dòng chữ này, “Empty double row vector”? Là vì ví dụ này nêu
bật một lỗi lập trình rất phổ biến ngay cả với các lập trình viên có kinh nghiệm lâu năm, khi một trình tự giảm dần được mong muốn Tôi đã yêu cầu nó tạo thành một vectơ hàng
Trang 11bao gồm tất cả các số bắt đầu = 7, tăng lên 3 và không lớn hơn 1 và chắc chắn sẽ không có
số như vậy ngay cả 7 cũng cao hơn 1 Ma trận rỗng là ma trận không có phần tử nào Lưu ý rằng đây không phải là ma trận chứa số 0 Đây là một ma trận không chứa gì Không có gì hết, cũng không phải là số 0 hoặc 1 nhưng nó không có bất cứ chi hết nó hoàn toàn trống rỗng, nó cũng có thể được gọi là "mảng trống", thay vì một ma trận trống Bằng cách sử dụng toán tử dấu hai chấm, thì tôi yêu cầu một vectơ hàng và bằng cách cho 7 làm phần tử bắt đầu và 1 làm giới hạn trên và tôi đã đưa ra các ràng buộc mà không có phần tử
nào thỏa mãn Vì vậy hàm Size chứng minh rằng:
Ví dụ 20: Sử dụng hàm Size để chứng minh liệu có cột hoặc hàng = 0?
Ngoài ra còn có các ma trận trống khác như trống rỗng nhất là cái không có hàng và cột
Ví dụ 21: Thử nghiệm cho giá trị cột và hàng = 0
Một phần tử của ma trận có thể được truy cập bằng cách cung cấp chỉ số hàng của nó
để chỉ định hàng của nó, đó là vị trí trong chiều đầu tiên của ma trận và chỉ số cột của nó
để chỉ định cột, là vị trí trong chiều thứ hai Đây là hai số nguyên dương trong ngoặc đơn cách nhau bằng dấu phẩy Một số nguyên được sử dụng theo cách này cũng thường được gọi là chỉ số con
Ví dụ 22: Thử nghiệm biểu thức sau:
Trang 12ta kiểm tra giá trị của x, thì thấy rằng phần tử thứ ba trên hàng thứ hai có thay đổi không
Ví dụ 23: Thử xem hàng 2 cột thứ 3 có thay đổi không?
Điều gì sẽ xảy ra, nếu một giá trị được gán cho một phần tử của ma trận khi ma trận chưa tồn tại? Đầu tiên, hãy xác định rằng ma trận Dumbledore liệu có tồn tại không?
Ví dụ 24: Xác định ma trận Dumbledore
>> Dumbledore
Undefined function or variable 'Dumbledore'
Đây là cách kỳ lạ của Matlab để nói với chúng ta rằng cụ Dumbledore không tồn tại
Nó không thể biết liệu chúng ta đang cố gắng gọi một hàm có tên là Dumbledore hay đang
cố đọc giá trị của ma trận có tên là Dumbledore, nhưng nó đã kiểm tra kho các hàm và biến hiện được xác định và không có gì ở đó với tên này Bây giờ chúng ta biết rằng không có cái gọi là Dumbledore, hãy thử gán một giá trị cho một phần tử của nó:
Ví dụ 25: Gán giá trị Dumbledore để xem kết quả sau:
>> Dumbledore (2,2) = 2001
Dumbledore =
Trang 130 0
0 2001
Nó ngay lập tức xác định một ma trận có tên Dumbledore cho chúng ta với số hàng tối thiểu 2 và số cột tối thiểu là 2, cần thiết để cung cấp vị trí cho phần tử (2,2) và nó điền vào nó bằng các số không Sau đó, tôi sẽ chọn số 2001 (bởi vì số 2001 là năm sinh của tôi) cho phần tử (2,2)
Vì chúng tôi đã chọn gán giá trị cho một phần tử không phải (1,1) là vì ma trận phải
là hình chữ nhật, Matlab phải điền một số giá trị vào các phần tử trước đó trong ma trận để tránh để lại "lỗ hổng" trong đó Số 0 dường như là một giá trị hợp lý để sử dụng
Cũng thế thôi nhưng tại sao hàng 2 cột 2 lại có giá trị 2001? Để tôi giải thích bởi vì ở
ví dụ 25 tôi đã thực hiện phép tính (2,2) = 2001 rồi cho nên nó đã lưu cho biến hiển thị tiếp theo, do vậy tôi cho (3.4) thì tất nhiên sẽ hiển thị ở hàng 3 cột 4 rồi và biến lúc nảy (2,2) thì
tiếp tục lưu thôi, còn không muốn lưu thì bấm “clc” để xóa hết
Tất nhiên, nếu chúng ta quyết định đặt, chẳng hạn, pi, vào một phần tử đã tồn tại, chẳng hạn, phần tử (1,1), chúng ta cũng có thể làm điều đó mà không ảnh hưởng đến phần còn lại của ma trận:
Trang 14là một ma trận (1,1), chúng ta có thể bị lừa để nghĩ rằng lệnh sau tương đương với lệnh trước, như thế là hư nhé, để biết lệnh pi thì đón xem ví dụ đây nè
Ví dụ 28: Lệnh pi đúng yêu cầu mà để tránh bị lừa
>> Dumbledore = pi
Dumbledore =
3.1416
Chúng ta vừa ghi đè ma trận bằng một đại lượng vô hướng Cụ Dumbledore mà chúng
ta yêu quý đã được thay thế bằng một cụ Dumbledore mới Cái cũ đã chết rồi cho nền tôi không thể lấy lại nó Cửa sổ Lệnh không hoàn tác cho các lệnh sau khi chúng được nhập
4.1 Truy cập nhiều phần tử
Có thể chỉ định nhiều hơn một phần tử tại một thời điểm bằng cách sử dụng các hoạt động của mảng con Một hoạt động của mảng con truy cập các phần hình chữ nhật của một mảng Nó được gọi bằng cách chỉ định một vectơ số nguyên cho mỗi chỉ mục Kết quả là các phần tử từ nhiều hàng và, hoặc nhiều cột có thể được đọc hoặc ghi Dưới đây là một số
ví dụ về việc đọc các phần tử với các hoạt động của mảng con dựa trên cùng một X mà chúng ta đã sử dụng trước đây:
Ví dụ 29: Như ban đầu
[(1 3)] là phần mới của lệnh Có nghĩa là chúng ta muốn xem các cột 1 và 3 Vì chúng
ta đã chỉ định 2 cho chỉ mục đầu tiên, nên chúng ta chỉ nhận được các phần tử từ hàng 2 Nhân tiện, ở đây bắt buộc phải có dấu phẩy Nếu không có nó, Matlab sẽ không xử lý một lệnh mảng con nếu không tin thì xem ở ví dụ 31 chứng minh đây
Ví dụ 31: Nếu không cho dấu phẩy sau số 2 thì:
Trang 16Ví dụ 38: Khi có giá trị 1 và không có
>> x (:, end-1) %không cho giá trị 1
Trang 17Ở lệnh trên thì được tính theo công thức: ( 1) (3 1) 4 2
Cũng lưu ý rằng giá trị vô hướng đơn, -4,444, được cung cấp ở bên phải của dấu bằng
đã được sao chép vào từng phần tử trong hai phần tử được chỉ định bởi toán tử dấu hai chấm Không có giới hạn về số lượng bản sao của một phần tử duy nhất mà Matlab sẽ sử dụng để lấp đầy một mảng con:
Ví dụ 41: Biểu thức như sau:
Ví dụ 42: Gán thêm mảng sau và giá trị có: