1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Giới thiệu các hàm ma trận trong matlab

32 11 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Giới thiệu các hàm ma trận trong matlab
Người hướng dẫn PTS. Nguyễn Văn A
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Kỹ thuật điều khiển và tự động hóa
Thể loại Giáo trình hướng dẫn thực hành
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 32
Dung lượng 1,01 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

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.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 2

LỜ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 3

CHƯƠ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 4

CHƯƠ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 5

Dấ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 6

Có 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 7

Số 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 8

Do 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 9

1 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 10

Khoả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 11

bao 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 12

ta 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 13

0 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 14

là 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 16

Ví 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ó:

Ngày đăng: 11/08/2022, 16:09

TỪ KHÓA LIÊN QUAN

w