Phép nhân ma trận. Phép nhân ma trận: ví dụ, thuật toán hành động, tính chất của sản phẩm Thuộc tính cơ bản của sản phẩm ma trận


Mỗi vectơ có thể được coi là ma trận một cột hoặc một hàng. Chúng ta sẽ gọi ma trận một cột là vectơ cột và ma trận một hàng là vectơ hàng.

Nếu A là ma trận có kích thước m*n thì vectơ cột b có kích thước n và vectơ hàng b có kích thước m.

Vì vậy, để nhân một ma trận với một vectơ, chúng ta phải coi vectơ đó là vectơ cột. Khi nhân một vectơ với một ma trận, nó phải được coi là một vectơ hàng.

Nhân ma trận

đến một vectơ phức tạp

Chúng tôi nhận được kết quả

Như bạn có thể thấy, với kích thước vectơ không đổi, chúng ta có thể có hai nghiệm.

Tôi muốn bạn chú ý đến thực tế là ma trận trong phiên bản thứ nhất và thứ hai, mặc dù có cùng giá trị, nhưng lại hoàn toàn khác nhau (có các kích thước khác nhau)

Trong trường hợp đầu tiên, vectơ được coi là một cột và sau đó cần thiết nhân ma trận với vectơ và trong trường hợp thứ hai, chúng ta có một vectơ hàng và sau đó chúng ta có tích của một vectơ và một ma trận.

Bot này cũng nhân các vectơ và ma trận có giá trị phức tạp. Dựa trên một máy tính hoàn chỉnh hơn: Nhân ma trận với các giá trị phức tạp trực tuyến

Tính chất của phép nhân ma trận-vector

Ma trận

Cột vectơ

Vectơ hàng

Số tùy ý

1. Tích của ma trận với tổng các vectơ cột bằng tổng các tích của ma trận theo từng vectơ

2. Tích của tổng các vectơ hàng và ma trận bằng tổng các tích của vectơ hàng và ma trận

3. Thừa số chung của vectơ có thể được đưa ra ngoài tích của ma trận bằng vectơ/vectơ theo ma trận

4. Tích của vectơ hàng với tích của vectơ ma trận và vectơ cột tương đương với tích của vectơ hàng với vectơ ma trận và vectơ cột.

Bài 6. Các thuật toán số song song giải các bài toán điển hình của toán tính toán: nhân ma trận.

Nhân một ma trận với một vectơ. Đạt được hiệu suất cao nhất có thể. Khai thác sự song song ở cấp độ trung bình. Tổ chức tính toán song song tại p = n. Sử dụng một bộ bộ xử lý hạn chế. Phép nhân ma trận. Phân tích hoạt động vĩ mô của các thuật toán giải quyết vấn đề. Tổ chức song song dựa trên việc chia sẻ dữ liệu.

Nhân một ma trận với một vectơ

Bài toán nhân một ma trận với một vectơ được xác định bởi các quan hệ

Do đó, việc thu được vectơ kết quả bao gồm việc lặp lại các thao tác tương tự như nhân các hàng của ma trận và vectơ. Để có được mỗi phép toán như vậy bao gồm phép nhân các phần tử của một hàng của ma trận và vectơ theo từng phần tử và tính tổng tiếp theo của các tích thu được. Tổng số phép tính vô hướng cần thiết được ước tính bằng số lượng

Như sau từ các hành động được thực hiện khi nhân một ma trận và một vectơ, phương pháp song song lời giải của bài toán có thể thu được dựa trên các thuật toán tính tổng song song (xem đoạn 4.1). Trong phần này, việc phân tích các phương pháp song song hóa sẽ được bổ sung bằng cách xem xét các vấn đề tổ chức tính toán song song tùy thuộc vào số lượng bộ xử lý có sẵn để sử dụng. Ngoài ra, sử dụng ví dụ về bài toán nhân ma trận với vectơ, sẽ chú ý đến nhu cầu lựa chọn cấu trúc liên kết phù hợp nhất của hệ thống máy tính (các kênh liên lạc hiện có giữa các bộ xử lý) để giảm chi phí tổ chức tương tác giữa các bộ xử lý.

Đạt được hiệu suất cao nhất có thể ()

Chúng ta hãy phân tích sự phụ thuộc thông tin trong thuật toán nhân vectơ ma trận để chọn những cách có thể sự song song hóa. Như bạn có thể thấy, các phép nhân nhân các hàng riêng lẻ của ma trận với một vectơ được thực hiện trong quá trình tính toán là độc lập và có thể được thực hiện song song;



Nhân mỗi hàng với một vectơ bao gồm các phép nhân độc lập theo từng phần tử và cũng có thể được thực hiện song song;

Việc tính tổng các tích thu được trong mỗi thao tác nhân một hàng ma trận với một vectơ có thể được thực hiện bằng cách sử dụng một trong các biến thể được xem xét trước đó của thuật toán tính tổng (thuật toán tuần tự, sơ đồ xếp tầng thông thường và đã sửa đổi).

Do đó, số lượng bộ xử lý yêu cầu tối đa được xác định bởi giá trị

Việc sử dụng số lượng bộ xử lý như vậy có thể được trình bày như sau. Nhiều bộ xử lý được chia thành các nhóm

,

mỗi trong số đó đại diện cho một bộ bộ xử lý để thực hiện thao tác nhân một hàng riêng lẻ của ma trận với một vectơ. Khi bắt đầu tính toán, một phần tử hàng ma trận và phần tử vectơ tương ứng được gửi đến từng bộ xử lý trong nhóm. Tiếp theo, mỗi bộ xử lý thực hiện thao tác nhân. Các tính toán tiếp theo sau đó được thực hiện bằng cách sử dụng sơ đồ tổng hợp theo tầng. Để minh họa trong hình. 6.1 trình bày sơ đồ tính toán cho các bộ xử lý của nhóm có kích thước ma trận là .

Cơm. 6.1. Sơ đồ tính toán nhân một hàng ma trận với một vectơ

Thời gian thực hiện thuật toán song song khi sử dụng bộ xử lý được xác định bằng thời gian thực hiện phép nhân song song và thời gian thực hiện của mạch xếp tầng

Kết quả là các chỉ số hiệu quả của thuật toán được xác định bởi các mối quan hệ sau:

Đối với bài toán nhân vectơ ma trận đang được xem xét, cấu trúc liên kết phù hợp nhất là các cấu trúc cung cấp chuyển nhanh dữ liệu (các đường dẫn có độ dài đơn vị) trong mạch tổng hợp theo tầng (xem Hình 4.5). Những cấu trúc liên kết như vậy là một cấu trúc với hệ thống hoàn chỉnh kết nối ( đồ thị hoàn chỉnh) Và siêu khối. Các cấu trúc liên kết khác dẫn đến thời gian liên lạc tăng lên do các tuyến truyền dữ liệu dài hơn. Do đó, với thứ tự tuyến tính của các bộ xử lý có hệ thống kết nối chỉ với các lân cận gần nhất ở bên trái và bên phải ( cái thước kẻ hoặc nhẫn) đối với sơ đồ xếp tầng, độ dài đường truyền của mỗi tổng một phần nhận được khi lặp lại , , bằng . Nếu chúng ta giả sử rằng việc truyền dữ liệu dọc theo độ dài đường dẫn trong cấu trúc liên kết có cấu trúc tuyến tính yêu cầu các hoạt động truyền dữ liệu thì tổng số hoạt động song song (tổng thời lượng của các đường dẫn) truyền dữ liệu được xác định bởi giá trị

(không bao gồm việc truyền dữ liệu để tải bộ xử lý ban đầu).

Ứng dụng hệ thống máy tính có cấu trúc liên kết hình chữ nhật mạng hai chiều kích thước dẫn đến việc giải thích đơn giản và rõ ràng về các phép tính đang được thực hiện (cấu trúc của mạng tương ứng với cấu trúc của dữ liệu được xử lý). Đối với cấu trúc liên kết như vậy, tốt nhất nên đặt các hàng ma trận dọc theo lưới ngang; trong trường hợp này, các phần tử của vectơ phải được phân bố dọc theo chiều dọc của hệ thống máy tính. Các tính toán với sự sắp xếp dữ liệu này có thể được thực hiện song song dọc theo các đường lưới; kết quả là tổng số lần truyền dữ liệu khớp với kết quả của thước đo().

Các hành động giao tiếp được thực hiện khi giải quyết một nhiệm vụ nhất định bao gồm việc truyền dữ liệu giữa các cặp bộ xử lý MCS. Phân tích chi tiết về thời gian thực hiện các hoạt động đó được thực hiện trong đoạn 3.3.

4. Khuyến nghị thực hiện thuật toán song song. Khi triển khai thuật toán song song, nên làm nổi bật giai đoạn đầu tải dữ liệu ban đầu vào bộ xử lý đã sử dụng. Đơn giản nhất, việc khởi tạo như vậy được cung cấp một cấu trúc liên kết của hệ thống máy tính với cấu trúc liên kết ở dạng đồ thị hoàn chỉnh(tải xuống được cung cấp bằng cách sử dụng một thao tác truyền dữ liệu song song). Khi tổ chức nhiều bộ xử lý dưới dạng siêu khối Có thể hữu ích khi có quyền kiểm soát hai cấp độ của quy trình khởi động, trong đó bộ xử lý điều khiển trung tâm đảm bảo rằng các hàng ma trận và vectơ được gửi đến bộ xử lý điều khiển của các nhóm bộ xử lý, từ đó gửi các phần tử của ma trận. và các hàng vectơ tới bộ xử lý điều hành. Đối với các cấu trúc liên kết ở dạng những cây thước hoặc Nhẫn yêu cầu các hoạt động truyền dữ liệu tuần tự với lượng dữ liệu được truyền từ các phần tử giảm dần.

Sử dụng song song cấp trung()

1. Lựa chọn phương pháp tính toán song song. Khi số lượng bộ xử lý được sử dụng có sẵn () giảm, sơ đồ tổng hợp theo tầng thông thường khi thực hiện các thao tác nhân các hàng ma trận với vectơ sẽ không thể áp dụng được. Để đơn giản hóa việc trình bày tài liệu, chúng ta hãy giả sử và sử dụng sơ đồ xếp tầng đã được sửa đổi. Tải ban đầu của mỗi bộ xử lý trong trường hợp này tăng lên và bộ xử lý được tải () theo các phần của các hàng của ma trận và vectơ. Thời gian thực hiện phép nhân ma trận với vectơ có thể được ước tính là

Khi sử dụng số lượng bộ xử lý cần thiết để triển khai sơ đồ xếp tầng đã sửa đổi, tức là. Tại , biểu thức này đưa ra ước tính về thời gian thực hiện (Tại ).

Khi số lượng bộ xử lý là , khi thời gian thực hiện thuật toán được ước tính là , một sơ đồ mới để thực hiện song song các phép tính có thể được đề xuất, trong đó với mỗi lần lặp của phép tính tổng theo tầng, bộ xử lý không chồng chéo. Với cách tiếp cận này, số lượng bộ xử lý có sẵn hóa ra chỉ đủ để thực hiện một thao tác nhân một hàng ma trận và một vectơ. Ngoài ra, khi thực hiện phép tính tổng theo tầng tiếp theo, các bộ xử lý chịu trách nhiệm thực hiện tất cả các lần lặp trước đó đều miễn phí. Tuy nhiên, nhược điểm này của phương pháp đề xuất có thể trở thành ưu điểm bằng cách sử dụng bộ xử lý nhàn rỗi để xử lý các hàng tiếp theo của ma trận. Kết quả là, sơ đồ sau có thể được hình thành Băng tải thực hiện phép nhân ma trận và vectơ:

Một tập hợp các bộ xử lý được chia thành các nhóm bộ xử lý rời rạc

,

trong trường hợp này, nhóm , , bao gồm các bộ xử lý và được sử dụng để thực hiện các phép lặp của thuật toán xếp tầng (nhóm được sử dụng để thực hiện phép nhân theo từng phần tử); tổng số bộ xử lý;

Việc khởi tạo các phép tính bao gồm tải từng phần tử của bộ xử lý trong nhóm với các giá trị của 1 hàng ma trận và vectơ; sau lần tải đầu tiên, một hoạt động song song của phép nhân phần tử và thực hiện tiếp theo mạch tổng hợp xếp tầng thông thường được thực hiện;

Khi thực hiện các phép tính, mỗi lần sau khi hoàn thành thao tác nhân theo phần tử, bộ xử lý của nhóm sẽ được tải các phần tử của hàng tiếp theo của ma trận và quá trình tính toán được bắt đầu đối với dữ liệu mới được tải.

Nhờ áp dụng thuật toán được mô tả, nhiều bộ xử lý triển khai một đường dẫn để thực hiện thao tác nhân một hàng ma trận với một vectơ. Trên một băng tải như vậy có thể đồng thời có một số hàng ma trận riêng biệt ở các giai đoạn xử lý khác nhau. Vì vậy, ví dụ, sau khi nhân các phần tử của hàng đầu tiên và vectơ theo từng phần tử, các bộ xử lý của nhóm sẽ thực hiện lần lặp đầu tiên của thuật toán xếp tầng cho hàng đầu tiên của ma trận và các bộ xử lý của nhóm sẽ thực hiện phép nhân theo từng phần tử của các giá trị của hàng thứ hai của ma trận, v.v. Để minh họa trong hình. Hình 6.2 thể hiện tình hình quá trình tính toán sau 2 lần lặp của đường ống tại .

Cơm. 6.2. Trạng thái của quy trình thực hiện phép nhân một hàng ma trận với một vectơ sau khi hoàn thành 2 lần lặp

2. Đánh giá các chỉ số hiệu suất thuật toán. Việc nhân hàng đầu tiên với vectơ theo sơ đồ xếp tầng sẽ được hoàn thành như bình thường sau khi thực hiện các phép toán song song (). Đối với các hàng khác - theo sơ đồ tổ chức tính toán đường ống - sự xuất hiện của kết quả nhân của mỗi hàng tiếp theo sẽ xảy ra sau khi hoàn thành mỗi lần lặp tiếp theo của đường ống. Kết quả là, tổng thời gian thực hiện của phép nhân ma trận-vectơ có thể được biểu thị bằng

Đánh giá này dài hơn một chút so với thời gian thực hiện của thuật toán song song được mô tả trong đoạn () trước, tuy nhiên, phương pháp mới được đề xuất yêu cầu ít dữ liệu được truyền hơn (vectơ chỉ được gửi một lần). Ngoài ra, việc sử dụng sơ đồ đường ống dẫn đến sự xuất hiện sớm hơn của một số kết quả tính toán (có thể hữu ích trong một số tình huống xử lý dữ liệu).

Kết quả là các chỉ số hiệu quả của thuật toán được xác định theo quan hệ sau:

3. Lựa chọn cấu trúc liên kết của hệ thống máy tính. Cấu trúc liên kết thích hợp của hệ thống máy tính hoàn toàn được xác định bởi mạch máy tính - đây là một cấu trúc hoàn chỉnh Cây nhị phân chiều cao Số lần truyền dữ liệu với cấu trúc liên kết mạng như vậy được xác định bởi tổng số lần lặp được thực hiện bởi đường ống, tức là.

Việc khởi tạo các phép tính bắt đầu từ các lá của cây, kết quả tính tổng được tích lũy trong bộ xử lý gốc.

Việc phân tích độ phức tạp của các hành động giao tiếp được thực hiện đối với hệ thống máy tính với các cấu trúc liên kết liên bộ xử lý khác được cho là được thực hiện như một nhiệm vụ độc lập (xem thêm khoản 3.4).

Tổ chức tính toán song song trong

1. Lựa chọn phương pháp tính toán song song. Khi sử dụng bộ xử lý để nhân ma trận với một vectơ, có thể sử dụng thuật toán nhân từng hàng song song đã thảo luận trước đó trong hướng dẫn, trong đó các hàng của ma trận được phân bổ giữa các bộ xử lý theo từng hàng và mỗi bộ xử lý thực hiện phép toán nhân bất kỳ hàng riêng lẻ nào của ma trận với một vectơ. Một cách khả thi khác để tổ chức tính toán song song có thể là xây dựng mạch đường ống để thực hiện phép nhân một hàng ma trận với một vectơ(tích vô hướng của vectơ) bằng cách sắp xếp tất cả các bộ xử lý có sẵn theo trình tự tuyến tính ( những cây thước).

Sơ đồ tính toán như vậy có thể được định nghĩa như sau. Hãy tưởng tượng tập hợp các bộ xử lý là một chuỗi tuyến tính (xem Hình 4.7):

Mỗi bộ xử lý, , được sử dụng để nhân các phần tử của một cột ma trận và một phần tử vectơ. Các phép tính được thực hiện trên mỗi bộ xử lý , , như sau:

Phần tử tiếp theo của cột ma trận được yêu cầu;

Các phần tử và được nhân lên;

Kết quả tính toán của bộ xử lý trước được yêu cầu;

Các giá trị được thêm vào;

Kết quả thu được sẽ được gửi đến bộ xử lý tiếp theo.

Cơm. 6.3. Trạng thái của đường dẫn tuyến tính cho hoạt động nhân một hàng ma trận với một vectơ sau khi thực hiện hai lần lặp

Khi khởi tạo sơ đồ được mô tả, bạn phải thực hiện một số hành động bổ sung:

Khi thực hiện lần lặp đầu tiên, mỗi bộ xử lý sẽ yêu cầu thêm một phần tử của vectơ;

Để đồng bộ hóa các phép tính (khi thực hiện lần lặp tiếp theo của mạch, yêu cầu kết quả tính toán của bộ xử lý trước đó) ở giai đoạn khởi tạo, bộ xử lý, thực hiện () một vòng lặp chờ.

Ngoài ra, để đảm bảo tính đồng nhất của mạch được mô tả cho bộ xử lý đầu tiên không có bộ xử lý trước đó, nên giới thiệu thao tác cộng trống ( ).

Để minh họa trong hình. Hình 6.3 cho thấy trạng thái của quá trình tính toán sau lần lặp thứ hai của đường ống tại .

2. Đánh giá các chỉ số hiệu suất thuật toán. Việc nhân hàng đầu tiên với vectơ theo sơ đồ đường ống được mô tả sẽ được hoàn thành sau khi thực hiện các phép toán song song (). Kết quả của việc nhân các dòng sau sẽ xảy ra sau khi hoàn thành mỗi lần lặp tiếp theo của đường ống (hãy nhớ rằng việc lặp lại của mỗi bộ xử lý bao gồm việc thực hiện các phép toán nhân và cộng). Kết quả là, tổng thời gian thực hiện của phép nhân ma trận-vectơ có thể được biểu thị như sau:

Ước tính này cũng lớn hơn thời gian thực hiện tối thiểu có thể có của thuật toán song song ở mức . Như đã lưu ý trong đoạn trước, tính hữu ích của việc sử dụng sơ đồ tính toán đường ống là trong việc giảm lượng dữ liệu được truyền và sự xuất hiện sớm hơn của một số kết quả tính toán.

Các chỉ tiêu hiệu quả của sơ đồ tính toán này được xác định bởi quan hệ:

, ,

3. Lựa chọn cấu trúc liên kết của hệ thống máy tính. Cấu trúc liên kết cần thiết của hệ thống máy tính để thực hiện thuật toán được mô tả được xác định duy nhất bởi sơ đồ tính toán được đề xuất - đây là bộ xử lý được sắp xếp tuyến tính ( cái thước kẻ).

Sử dụng một bộ bộ xử lý giới hạn ()

1. Lựa chọn phương pháp tính toán song song. Bằng cách giảm số lượng bộ xử lý xuống một giá trị, có thể thu được sơ đồ tính toán song song cho phép nhân vectơ ma trận bằng cách điều chỉnh thuật toán nhân theo hàng. Trong trường hợp này, mạch xếp tầng để tính tổng các kết quả của phép nhân phần tử bị suy biến và phép nhân một hàng ma trận với một vectơ được thực hiện hoàn toàn trên một bộ xử lý. Sơ đồ tính toán thu được bằng phương pháp này có thể được chỉ định như sau:

Một hàng vectơ và ma trận được gửi đến từng bộ xử lý có sẵn;

Việc thực hiện phép nhân hàng vectơ ma trận được thực hiện bằng thuật toán tuần tự thông thường.

Cần lưu ý rằng kích thước ma trận có thể không phải là bội số của số lượng bộ xử lý và khi đó các hàng ma trận không thể được chia đều cho các bộ xử lý. Trong những tình huống này, bạn có thể đi chệch khỏi yêu cầu tải thống nhất các bộ xử lý và để có được sơ đồ tính toán đơn giản hơn, hãy chấp nhận quy tắc rằng dữ liệu chỉ được đặt trên các bộ xử lý theo từng hàng (tức là các phần tử của một hàng của ma trận không thể được chia cho nhiều bộ xử lý). Số lượng hàng không bằng nhau dẫn đến tải tính toán khác nhau trên các bộ xử lý; Do đó, việc hoàn thành các phép tính (tổng thời gian giải quyết vấn đề) sẽ được xác định bởi thời gian hoạt động của bộ xử lý được tải nhiều nhất (trong trường hợp này, một phần của tổng thời gian này, các bộ xử lý riêng lẻ có thể không hoạt động do hết phần chia sẻ của chúng). về tính toán). Tải không đồng đều của bộ xử lý làm giảm hiệu quả sử dụng MCS và do xem xét ví dụ này, chúng ta có thể kết luận rằng vấn đề cân bằng

3. Lựa chọn cấu trúc liên kết của hệ thống máy tính. Để phù hợp với bản chất của các tương tác giữa các bộ xử lý được thực hiện trong sơ đồ tính toán được đề xuất, việc tổ chức các bộ xử lý dưới dạng ngôi sao(xem hình 1.1). Bộ xử lý điều khiển có cấu trúc liên kết như vậy có thể được sử dụng để tải bộ xử lý điện toán với dữ liệu ban đầu và nhận kết quả của các phép tính được thực hiện.

Phép nhân ma trận

Bài toán nhân ma trận được xác định bởi các quan hệ

.

(để đơn giản cho cách trình bày, chúng ta sẽ giả sử rằng các ma trận nhân và đều bình phương và có thứ tự ).

Việc phân tích các phương pháp khả thi để thực hiện song song nhiệm vụ này có thể được thực hiện bằng cách tương tự với việc xem xét bài toán nhân ma trận với một vectơ. Để việc phân tích như vậy cho nghiên cứu độc lập, chúng tôi sẽ trình bày bằng cách sử dụng ví dụ về một bài toán Phép nhân ma trận việc sử dụng một số phương pháp chung cho phép hình thành các phương pháp song song để giải quyết các vấn đề phức tạp.

Vì vậy, trong bài học trước chúng ta đã xem xét các quy tắc cộng và trừ ma trận. Đây là những thao tác đơn giản đến mức hầu hết học sinh đều hiểu chúng theo nghĩa đen ngay lập tức.

Tuy nhiên, bạn vui mừng sớm. Phần thưởng miễn phí đã kết thúc - hãy chuyển sang phép nhân. Tôi sẽ cảnh báo bạn ngay: nhân hai ma trận hoàn toàn không phải là nhân các số trong các ô có cùng tọa độ như bạn nghĩ. Mọi thứ ở đây vui vẻ hơn nhiều. Và chúng ta sẽ phải bắt đầu với những định nghĩa sơ bộ.

Ma trận phù hợp

Một trong những đặc điểm quan trọng nhất ma trận là kích thước của nó. Chúng ta đã nói về điều này hàng trăm lần: viết $A=\left[ m\times n \right]$ có nghĩa là ma trận có chính xác $m$ hàng và $n$ cột. Chúng ta cũng đã thảo luận về cách không nhầm lẫn hàng với cột. Một cái gì đó khác là quan trọng bây giờ.

Sự định nghĩa. Ma trận có dạng $A=\left[ m\times n \right]$ và $B=\left[ n\times k \right]$, trong đó số cột trong ma trận đầu tiên trùng với số hàng trong thứ hai, được gọi là nhất quán.

Một lần nữa: số cột trong ma trận đầu tiên bằng số hàng trong ma trận thứ hai! Từ đây chúng ta nhận được hai kết luận cùng một lúc:

  1. Thứ tự của ma trận rất quan trọng đối với chúng tôi. Ví dụ: các ma trận $A=\left[ 3\times 2 \right]$ và $B=\left[ 2\times 5 \right]$ là nhất quán (2 cột trong ma trận đầu tiên và 2 hàng trong ma trận thứ hai) , nhưng ngược lại - ma trận $B=\left[ 2\times 5 \right]$ và $A=\left[ 3\times 2 \right]$ không còn nhất quán (5 cột trong ma trận đầu tiên không phải là 3 hàng ở phần thứ hai).
  2. Tính nhất quán có thể được kiểm tra dễ dàng bằng cách viết ra tất cả các kích thước lần lượt. Sử dụng ví dụ ở đoạn trước: “3 2 2 5” - có các số giống nhau ở giữa nên các ma trận nhất quán. Nhưng “2 5 3 2” không nhất quán vì có các số khác nhau ở giữa.

Ngoài ra, Captain Obviousness dường như đang ám chỉ rằng các ma trận vuông có cùng kích thước $\left[ n\times n \right]$ luôn nhất quán.

Trong toán học, khi thứ tự liệt kê các đối tượng là quan trọng (ví dụ, trong định nghĩa đã thảo luận ở trên, thứ tự của ma trận là quan trọng), chúng ta thường nói về các cặp có thứ tự. Chúng tôi đã gặp họ ở trường: Tôi nghĩ không cần phải đắn đo khi tọa độ $\left(1;0 \right)$ và $\left(0;1 \right)$ xác định các điểm khác nhau trên mặt phẳng.

Vì vậy: tọa độ cũng là các cặp có thứ tự được tạo thành từ các số. Nhưng không có gì ngăn cản bạn tạo ra một cặp như vậy từ ma trận. Khi đó chúng ta có thể nói: “Một cặp ma trận có thứ tự $\left(A;B \right)$ là nhất quán nếu số cột trong ma trận đầu tiên bằng số hàng trong ma trận thứ hai”.

Vâng, vậy thì sao?

Định nghĩa phép nhân

Hãy xem xét hai ma trận nhất quán: $A=\left[ m\times n \right]$ và $B=\left[ n\times k \right]$. Và chúng tôi xác định phép toán nhân cho chúng.

Sự định nghĩa. Tích của hai ma trận trùng khớp $A=\left[ m\times n \right]$ và $B=\left[ n\times k \right]$ là ma trận mới $C=\left[ m\times k \ right] $, các phần tử được tính bằng công thức:

\[\begin(align) & ((c)_(i;j))=((a)_(i;1))\cdot ((b)_(1;j))+((a)_ (i;2))\cdot ((b)_(2;j))+\ldots +((a)_(i;n))\cdot ((b)_(n;j))= \\ & =\sum\limits_(t=1)^(n)(((a)_(i;t))\cdot ((b)_(t;j))) \end(align)\]

Sản phẩm như vậy được ký hiệu theo cách tiêu chuẩn: $C=A\cdot B$.

Những ai nhìn thấy định nghĩa này lần đầu tiên sẽ ngay lập tức có hai câu hỏi:

  1. Đây là loại trò chơi khốc liệt gì vậy?
  2. Tại sao lại khó như vậy?

Vâng, điều đầu tiên đầu tiên. Hãy bắt đầu với câu hỏi đầu tiên. Tất cả những chỉ số này có ý nghĩa gì? Và làm thế nào để không mắc lỗi khi làm việc với ma trận thực?

Trước hết, chúng tôi lưu ý rằng dòng dài để tính $((c)_(i;j))$ (Tôi đặc biệt đặt dấu chấm phẩy giữa các chỉ số để không bị nhầm lẫn, nhưng không cần phải đặt chúng vào chung - Bản thân tôi cảm thấy mệt mỏi khi gõ công thức trong định nghĩa) thực sự đưa ra một quy tắc đơn giản:

  1. Lấy hàng thứ $i$ trong ma trận đầu tiên;
  2. Lấy cột thứ $j$ trong ma trận thứ hai;
  3. Chúng ta nhận được hai dãy số. Chúng tôi nhân các phần tử của các chuỗi này với các số giống nhau, sau đó cộng các kết quả thu được.

Quá trình này rất dễ hiểu từ hình ảnh:


Sơ đồ nhân hai ma trận

Một lần nữa: chúng ta sửa hàng $i$ trong ma trận đầu tiên, cột $j$ trong ma trận thứ hai, nhân các phần tử có cùng số và sau đó cộng các tích thu được - chúng ta nhận được $((c)_(ij))$ . Và cứ như vậy với mọi $1\le i\le m$ và $1\le j\le k$. Những thứ kia. Tổng cộng sẽ có $m\times k$ những "sự biến thái" như vậy.

Trên thực tế, chúng ta đã gặp phép nhân ma trận trong chương trình giảng dạy ở trường, chỉ ở dạng rút gọn đáng kể. Cho các vectơ:

\[\begin(align) & \vec(a)=\left(((x)_(a));((y)_(a));((z)_(a)) \right); \\ & \overrightarrow(b)=\left(((x)_(b));((y)_(b));((z)_(b)) \right). \\ \end(căn chỉnh)\]

Khi đó tích vô hướng của chúng sẽ chính xác bằng tổng của các tích từng cặp:

\[\overrightarrow(a)\times \overrightarrow(b)=((x)_(a))\cdot ((x)_(b))+((y)_(a))\cdot ((y )_(b))+((z)_(a))\cdot ((z)_(b))\]

Về cơ bản, khi cây xanh hơn và bầu trời sáng hơn, chúng ta chỉ cần nhân vectơ hàng $\overrightarrow(a)$ với vectơ cột $\overrightarrow(b)$.

Không có gì thay đổi ngày hôm nay. Chỉ là bây giờ có nhiều vectơ hàng và cột hơn.

Nhưng đủ lý thuyết! Hãy xem xét các ví dụ thực tế. Và hãy bắt đầu với trường hợp đơn giản nhất - ma trận vuông.

Phép nhân ma trận vuông

Bài 1. Thực hiện phép nhân:

\[\left[ \begin(array)(*(35)(r)) 1 & 2 \\ -3 & 4 \\\end(array) \right]\cdot \left[ \begin(array)(* (35)(r)) -2 & 4 \\ 3 & 1 \\\end(array) \right]\]

Giải pháp. Vì vậy, chúng ta có hai ma trận: $A=\left[ 2\times 2 \right]$ và $B=\left[ 2\times 2 \right]$. Rõ ràng là chúng nhất quán (ma trận vuông có cùng kích thước luôn nhất quán). Vì vậy, chúng tôi thực hiện phép nhân:

\[\begin(align) & \left[ \begin(array)(*(35)(r)) 1 & 2 \\ -3 & 4 \\\end(array) \right]\cdot \left[ \ Begin(array)(*(35)(r)) -2 & 4 \\ 3 & 1 \\\end(array) \right]=\left[ \begin(array)(*(35)(r)) 1\cdot \left(-2 \right)+2\cdot 3 & 1\cdot 4+2\cdot 1 \\ -3\cdot \left(-2 \right)+4\cdot 3 & -3\cdot 4+4\cdot 1 \\\end(mảng) \right]= \\ & =\left[ \begin(array)(*(35)(r)) 4 & 6 \\ 18 & -8 \\\ kết thúc (mảng)\right]. \end(căn chỉnh)\]

Đó là tất cả!

Trả lời: $\left[ \begin(array)(*(35)(r))4 & 6 \\ 18 & -8 \\\end(array) \right]$.

Bài 2. Thực hiện phép nhân:

\[\left[ \begin(matrix) 1 & 3 \\ 2 & 6 \\\end(matrix) \right]\cdot \left[ \begin(array)(*(35)(r))9 & 6 \\ -3 & -2 \\\end(mảng) \right]\]

Giải pháp. Một lần nữa, ma trận nhất quán, vì vậy chúng tôi thực hiện các hành động sau:\[\]

\[\begin(align) & \left[ \begin(matrix) 1 & 3 \\ 2 & 6 \\\end(matrix) \right]\cdot \left[ \begin(array)(*(35)( ) r)) 9 & 6 \\ -3 & -2 \\\end(array) \right]=\left[ \begin(array)(*(35)(r)) 1\cdot 9+3\cdot \ left(-3 \right) & 1\cdot 6+3\cdot \left(-2 \right) \\ 2\cdot 9+6\cdot \left(-3 \right) & 2\cdot 6+6 \ cdot \left(-2 \right) \\\end(array) \right]= \\ & =\left[ \begin(matrix) 0 & 0 \\ 0 & 0 \\\end(matrix) \right ] . \end(căn chỉnh)\]

Như bạn có thể thấy, kết quả là một ma trận chứa đầy số không

Trả lời: $\left[ \begin(matrix) 0 & 0 \\ 0 & 0 \\\end(matrix) \right]$.

Từ các ví dụ trên, rõ ràng phép nhân ma trận không phải là một phép toán phức tạp. Ít nhất là cho ma trận 2 x 2 vuông.

Trong quá trình tính toán, chúng tôi đã biên soạn một ma trận trung gian, trong đó chúng tôi mô tả trực tiếp những số nào được bao gồm trong một ô cụ thể. Đây chính xác là những gì nên làm khi giải quyết các vấn đề thực tế.

Tính chất cơ bản của tích ma trận

Tóm lại. Phép nhân ma trận:

  1. Không giao hoán: $A\cdot B\ne B\cdot A$ trong trường hợp tổng quát. Tất nhiên, có những ma trận đặc biệt mà đẳng thức $A\cdot B=B\cdot A$ (ví dụ: nếu $B=E$ là ma trận đồng nhất), nhưng trong phần lớn các trường hợp, điều này không đúng ;
  2. Kết hợp: $\left(A\cdot B \right)\cdot C=A\cdot \left(B\cdot C \right)$. Không có lựa chọn nào ở đây: đứng gần đó ma trận có thể được nhân mà không cần quan tâm đến bên trái và bên phải của hai ma trận này.
  3. Phân phối: $A\cdot \left(B+C \right)=A\cdot B+A\cdot C$ và $\left(A+B \right)\cdot C=A\cdot C+B\cdot C $ (do tính chất không giao hoán của tích số nên cần xác định riêng phân phối phải và phân phối trái.

Và bây giờ - mọi thứ đều giống nhau, nhưng chi tiết hơn.

Phép nhân ma trận về nhiều mặt tương tự như phép nhân số cổ điển. Nhưng có những khác biệt, trong đó quan trọng nhất là Nói chung, phép nhân ma trận là phép nhân không giao hoán.

Chúng ta hãy xem lại các ma trận ở Bài toán 1. Chúng ta đã biết tích trực tiếp của chúng:

\[\left[ \begin(array)(*(35)(r)) 1 & 2 \\ -3 & 4 \\\end(array) \right]\cdot \left[ \begin(array)(* (35)(r)) -2 & 4 \\ 3 & 1 \\\end(array) \right]=\left[ \begin(array)(*(35)(r))4 & 6 \\ 18 & -8 \\\end(mảng) \right]\]

Nhưng nếu hoán đổi ma trận, chúng ta sẽ nhận được một kết quả hoàn toàn khác:

\[\left[ \begin(array)(*(35)(r)) -2 & 4 \\ 3 & 1 \\\end(array) \right]\cdot \left[ \begin(array)(* (35)(r)) 1 & 2 \\ -3 & 4 \\\end(array) \right]=\left[ \begin(matrix) -14 & 4 \\ 0 & 10 \\\end(matrix )\Phải]\]

Hóa ra $A\cdot B\ne B\cdot A$. Ngoài ra, phép nhân chỉ được xác định cho các ma trận nhất quán $A=\left[ m\times n \right]$ và $B=\left[ n\times k \right]$, nhưng không ai đảm bảo rằng chúng sẽ vẫn nhất quán nếu chúng được hoán đổi. Ví dụ: các ma trận $\left[ 2\times 3 \right]$ và $\left[ 3\times 5 \right]$ khá nhất quán theo thứ tự đã chỉ định, nhưng các ma trận giống nhau $\left[ 3\times 5 \right] $ và $\left[ 2\times 3 \right]$ được viết bằng thứ tự ngược lại, không còn được thống nhất nữa. Buồn.:(

Trong số các ma trận vuông có kích thước cho trước $n$ sẽ luôn có những ma trận cho kết quả như nhau cả khi nhân theo chiều thuận và theo chiều ngược lại. Làm thế nào để mô tả tất cả các ma trận như vậy (và nói chung có bao nhiêu ma trận) là một chủ đề cho một bài học riêng. Hôm nay chúng ta sẽ không nói về chuyện đó. :)

Tuy nhiên, phép nhân ma trận có tính chất kết hợp:

\[\left(A\cdot B \right)\cdot C=A\cdot \left(B\cdot C \right)\]

Vì vậy, khi cần nhân nhiều ma trận liên tiếp cùng một lúc thì không nhất thiết phải thực hiện ngay: rất có thể một số ma trận liền kề khi nhân sẽ cho một kết quả thú vị. Ví dụ: ma trận 0, như trong Vấn đề 2 đã thảo luận ở trên.

Trong các bài toán thực tế, chúng ta thường phải nhân các ma trận vuông có kích thước $\left[ n\times n \right]$. Tập hợp tất cả các ma trận như vậy được ký hiệu là $((M)^(n))$ (tức là các mục $A=\left[ n\times n \right]$ và \ có nghĩa giống nhau), và nó sẽ nhất thiết phải chứa ma trận $E$, được gọi là ma trận đơn vị.

Sự định nghĩa. Một ma trận đơn vị có kích thước $n$ là một ma trận $E$ sao cho với mọi ma trận vuông $A=\left[ n\times n \right]$ đẳng thức đúng:

Một ma trận như vậy luôn trông giống nhau: có các ma trận trên đường chéo chính của nó và các số 0 ở tất cả các ô khác.

\[\begin(align) & A\cdot \left(B+C \right)=A\cdot B+A\cdot C; \\ & \left(A+B \right)\cdot C=A\cdot C+B\cdot C. \\ \end(căn chỉnh)\]

Nói cách khác, nếu bạn cần nhân một ma trận với tổng của hai ma trận khác, bạn có thể nhân nó với mỗi “hai ma trận còn lại” này rồi cộng kết quả lại. Trong thực tế, chúng ta thường phải thực hiện thao tác ngược lại: chúng ta nhận thấy cùng một ma trận, lấy nó ra khỏi ngoặc, thực hiện phép cộng và từ đó đơn giản hóa cuộc sống của chúng ta. :)

Lưu ý: để mô tả tính phân phối, chúng ta phải viết hai công thức: tổng nằm ở thừa số thứ hai và tổng nằm ở thừa số thứ nhất. Điều này xảy ra chính xác vì phép nhân ma trận không có tính giao hoán (và nói chung, trong đại số không giao hoán, có rất nhiều điều thú vị mà bạn thậm chí không nghĩ đến khi làm việc với các số thông thường). Và ví dụ, nếu bạn cần viết tính chất này trong một bài kiểm tra, thì hãy nhớ viết cả hai công thức, nếu không giáo viên có thể hơi tức giận.

Được rồi, đây đều là những câu chuyện cổ tích về ma trận vuông. Còn những hình chữ nhật thì sao?

Trường hợp ma trận chữ nhật

Nhưng không có gì - mọi thứ đều giống như với hình vuông.

Bài 3. Thực hiện phép nhân:

\[\left[ \begin(matrix) \begin(matrix) 5 \\ 2 \\ 3 \\\end(matrix) & \begin(matrix) 4 \\ 5 \\ 1 \\\end(matrix) \ \\end(matrix) \right]\cdot \left[ \begin(array)(*(35)(r)) -2 & 5 \\ 3 & 4 \\\end(array) \right]\]

Giải pháp. Chúng ta có hai ma trận: $A=\left[ 3\times 2 \right]$ và $B=\left[ 2\times 2 \right]$. Hãy viết ra các số chỉ kích thước trong một hàng:

Như bạn có thể thấy, hai số trung tâm trùng nhau. Điều này có nghĩa là các ma trận nhất quán và có thể nhân lên được. Hơn nữa, ở đầu ra chúng ta nhận được ma trận $C=\left[ 3\times 2 \right]$:

\[\begin(align) & \left[ \begin(matrix) \begin(matrix) 5 \\ 2 \\ 3 \\\end(matrix) & \begin(matrix) 4 \\ 5 \\ 1 \\ \end(matrix) \\\end(matrix) \right]\cdot \left[ \begin(array)(*(35)(r)) -2 & 5 \\ 3 & 4 \\\end(array) \right]=\left[ \begin(array)(*(35)(r)) 5\cdot \left(-2 \right)+4\cdot 3 & 5\cdot 5+4\cdot 4 \\ 2 \cdot \left(-2 \right)+5\cdot 3 & 2\cdot 5+5\cdot 4 \\ 3\cdot \left(-2 \right)+1\cdot 3 & 3\cdot 5+1 \cdot 4 \\\end(array) \right]= \\ & =\left[ \begin(array)(*(35)(r)) 2 & 41 \\ 11 & 30 \\ -3 & 19 \ \\end(mảng) \right]. \end(căn chỉnh)\]

Mọi thứ đều rõ ràng: ma trận cuối cùng có 3 hàng và 2 cột. Khá $=\left[ 3\times 2 \right]$.

Trả lời: $\left[ \begin(array)(*(35)(r)) \begin(array)(*(35)(r)) 2 \\ 11 \\ -3 \\\end(array) & \begin(matrix) 41 \\ 30 \\ 19 \\\end(matrix) \\\end(array) \right]$.

Bây giờ chúng ta hãy xem một trong những nhiệm vụ đào tạo tốt nhất dành cho những người mới bắt đầu làm việc với ma trận. Trong đó, bạn không chỉ cần nhân hai viên thuốc mà trước tiên hãy xác định: việc nhân như vậy có được phép không?

Bài toán 4. Tìm tất cả các tích từng cặp có thể có của ma trận:

\\]; $B=\left[ \begin(matrix) \begin(matrix) 0 \\ 2 \\ 0 \\ 4 \\\end(matrix) & \begin(matrix) 1 \\ 0 \\ 3 \\ 0 \ \\end(ma trận) \\\end(ma trận) \right]$; $C=\left[ \begin(matrix)0 & 1 \\ 1 & 0 \\\end(matrix) \right]$.

Giải pháp. Đầu tiên, hãy viết kích thước của ma trận:

\;\ B=\left[ 4\times 2 \right];\ C=\left[ 2\times 2 \right]\]

Ta thấy rằng ma trận $A$ chỉ có thể đối chiếu với ma trận $B$, vì số cột của $A$ là 4, và chỉ $B$ mới có số hàng này. Vì vậy, chúng ta có thể tìm thấy sản phẩm:

\\cdot \left[ \begin(array)(*(35)(r)) 0 & 1 \\ 2 & 0 \\ 0 & 3 \\ 4 & 0 \\\end(array) \right]=\ left[ \begin(array)(*(35)(r))-10 & 7 \\ 10 & 7 \\\end(array) \right]\]

Tôi đề nghị người đọc hoàn thành các bước trung gian một cách độc lập. Tôi sẽ chỉ lưu ý rằng tốt hơn là bạn nên xác định trước kích thước của ma trận kết quả, ngay cả trước bất kỳ phép tính nào:

\\cdot \left[ 4\times 2 \right]=\left[ 2\times 2 \right]\]

Nói cách khác, chúng tôi chỉ cần loại bỏ các hệ số “chuyển tuyến” đảm bảo tính nhất quán của ma trận.

Những lựa chọn khác có thể là gì? Tất nhiên, người ta có thể tìm thấy $B\cdot A$, vì $B=\left[ 4\times 2 \right]$, $A=\left[ 2\times 4 \right]$, nên cặp thứ tự $\ left(B ;A \right)$ nhất quán và kích thước của sản phẩm sẽ là:

\\cdot \left[ 2\times 4 \right]=\left[ 4\times 4 \right]\]

Nói tóm lại, đầu ra sẽ là một ma trận $\left[ 4\times 4 \right]$, các hệ số của ma trận này có thể dễ dàng tính toán:

\\cdot \left[ \begin(array)(*(35)(r)) 1 & -1 & 2 & -2 \\ 1 & 1 & 2 & 2 \\\end(array) \right]=\ left[ \begin(array)(*(35)(r))1 & 1 & 2 & 2 \\ 2 & -2 & 4 & -4 \\ 3 & 3 & 6 & 6 \\ 4 & -4 & 8 & -8 \\\end(mảng) \right]\]

Rõ ràng, bạn cũng có thể đồng ý về $C\cdot A$ và $B\cdot C$ - và thế là xong. Do đó, chúng tôi chỉ cần viết ra các sản phẩm thu được:

Thật dễ dàng. :)

Trả lời: $AB=\left[ \begin(array)(*(35)(r)) -10 & 7 \\ 10 & 7 \\\end(array) \right]$; $BA=\left[ \begin(array)(*(35)(r)) 1 & 1 & 2 & 2 \\ 2 & -2 & 4 & -4 \\ 3 & 3 & 6 & 6 \\ 4 & -4 & 8 & -8 \\\end(array) \right]$; $CA=\left[ \begin(array)(*(35)(r)) 1 & 1 & 2 & 2 \\ 1 & -1 & 2 & -2 \\\end(array) \right]$; $BC=\left[ \begin(array)(*(35)(r))1 & 0 \\ 0 & 2 \\ 3 & 0 \\ 0 & 4 \\\end(array) \right]$.

Nói chung, tôi thực sự khuyên bạn nên tự mình thực hiện nhiệm vụ này. Và một nhiệm vụ tương tự nữa đó là bài tập về nhà. Những suy nghĩ tưởng chừng đơn giản này sẽ giúp bạn thực hành tất cả các giai đoạn chính của phép nhân ma trận.

Nhưng câu chuyện không kết thúc ở đó. Hãy chuyển sang các trường hợp nhân đặc biệt. :)

Vectơ hàng và vectơ cột

Một trong những phép toán ma trận phổ biến nhất là nhân với ma trận có một hàng hoặc một cột.

Sự định nghĩa. Vectơ cột là một ma trận có kích thước $\left[ m\times 1 \right]$, tức là. gồm nhiều hàng và chỉ một cột.

Một vectơ hàng là một ma trận có kích thước $\left[ 1\times n \right]$, tức là gồm một hàng và nhiều cột.

Trên thực tế, chúng tôi đã gặp những đối tượng này. Ví dụ: một vectơ ba chiều thông thường từ phép lập thể $\overrightarrow(a)=\left(x;y;z \right)$ không gì khác hơn là một vectơ hàng. Từ quan điểm lý thuyết, hầu như không có sự khác biệt giữa hàng và cột. Bạn chỉ cần cẩn thận khi phối hợp với các ma trận nhân xung quanh.

Bài 5. Thực hiện phép nhân:

\[\left[ \begin(array)(*(35)(r)) 2 & -1 & 3 \\ 4 & 2 & 0 \\ -1 & 1 & 1 \\\end(array) \right] \cdot \left[ \begin(array)(*(35)(r)) 1 \\ 2 \\ -1 \\\end(array) \right]\]

Giải pháp. Ở đây chúng ta có tích của các ma trận trùng khớp: $\left[ 3\times 3 \right]\cdot \left[ 3\times 1 \right]=\left[ 3\times 1 \right]$. Chúng ta hãy tìm mảnh này:

\[\left[ \begin(array)(*(35)(r)) 2 & -1 & 3 \\ 4 & 2 & 0 \\ -1 & 1 & 1 \\\end(array) \right] \cdot \left[ \begin(array)(*(35)(r)) 1 \\ 2 \\ -1 \\\end(array) \right]=\left[ \begin(array)(*(35 )(r)) 2\cdot 1+\left(-1 \right)\cdot 2+3\cdot \left(-1 \right) \\ 4\cdot 1+2\cdot 2+0\cdot 2 \ \ -1\cdot 1+1\cdot 2+1\cdot \left(-1 \right) \\\end(array) \right]=\left[ \begin(array)(*(35)(r) ) -3 \\ 8 \\ 0 \\\end(mảng) \right]\]

Trả lời: $\left[ \begin(array)(*(35)(r))-3 \\ 8 \\ 0 \\\end(array) \right]$.

Bài 6. Thực hiện phép nhân:

\[\left[ \begin(array)(*(35)(r)) 1 & 2 & -3 \\\end(array) \right]\cdot \left[ \begin(array)(*(35) (r)) 3 & 1 & -1 \\ 4 & -1 & 3 \\ 2 & 6 & 0 \\\end(array) \right]\]

Giải pháp. Một lần nữa mọi thứ đều được thống nhất: $\left[ 1\times 3 \right]\cdot \left[ 3\times 3 \right]=\left[ 1\times 3 \right]$. Chúng tôi đếm sản phẩm:

\[\left[ \begin(array)(*(35)(r)) 1 & 2 & -3 \\\end(array) \right]\cdot \left[ \begin(array)(*(35) (r)) 3 & 1 & -1 \\ 4 & -1 & 3 \\ 2 & 6 & 0 \\\end(array) \right]=\left[ \begin(array)(*(35)( ) r))5 & -19 & 5 \\\end(mảng) \right]\]

Trả lời: $\left[ \begin(matrix) 5 & -19 & 5 \\\end(matrix) \right]$.

Như bạn có thể thấy, khi nhân một vectơ hàng và một vectơ cột với Ma trận vuông chúng tôi luôn nhận được một hàng hoặc cột có cùng kích thước với đầu ra. Thực tế này có nhiều ứng dụng - từ việc giải phương trình tuyến tính đến tất cả các loại phép biến đổi tọa độ (cuối cùng cũng dẫn đến hệ phương trình, nhưng đừng nói về những điều đáng buồn).

Tôi nghĩ mọi thứ đều rõ ràng ở đây. Chúng ta cùng chuyển sang phần cuối cùng của bài học hôm nay.

lũy thừa ma trận

Trong số tất cả các phép tính nhân, phép lũy thừa đáng được chú ý đặc biệt - đây là khi chúng ta nhân cùng một đối tượng với chính nó nhiều lần. Ma trận cũng không ngoại lệ; chúng cũng có thể được nâng lên các lũy thừa khác nhau.

Những công việc như vậy luôn được thống nhất:

\\cdot \left[ n\times n \right]=\left[ n\times n \right]\]

Và chúng được chỉ định giống hệt như các bằng cấp thông thường:

\[\begin(align) & A\cdot A=((A)^(2)); \\ & A\cdot A\cdot A=((A)^(3)); \\ & \underbrace(A\cdot A\cdot \ldots \cdot A)_(n)=((A)^(n)). \\ \end(căn chỉnh)\]

Thoạt nhìn, mọi thứ đều đơn giản. Hãy xem điều này trông như thế nào trong thực tế:

Nhiệm vụ 7. Nâng ma trận lên lũy thừa chỉ định:

$((\left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right])^(3))$

Giải pháp. Được rồi, hãy xây dựng. Đầu tiên hãy bình phương nó:

\[\begin(align) & ((\left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right])^(2))=\left[ \begin(matrix ) 1 & 1 \\ 0 & 1 \\\end(matrix) \right]\cdot \left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right]= \\ & =\left[ \begin(array)(*(35)(r)) 1\cdot 1+1\cdot 0 & 1\cdot 1+1\cdot 1 \\ 0\cdot 1+1\cdot 0 & 0\cdot 1+1\cdot 1 \\\end(array) \right]= \\ & =\left[ \begin(array)(*(35)(r)) 1 & 2 \\ 0 & 1 \ \\end(mảng) \right] \end(căn chỉnh)\]

\[\begin(align) & ((\left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right])^(3))=((\left[ \begin (ma trận) 1 & 1 \\ 0 & 1 \\\end(ma trận) \right])^(3))\cdot \left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end( ma trận) \right]= \\ & =\left[ \begin(array)(*(35)(r)) 1 & 2 \\ 0 & 1 \\\end(array) \right]\cdot \left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right]= \\ & =\left[ \begin(array)(*(35)(r)) 1 & 3 \\ 0 & 1 \\\end(mảng) \right] \end(căn chỉnh)\]

Đó là tất cả.:)

Trả lời: $\left[ \begin(matrix)1 & 3 \\ 0 & 1 \\\end(matrix) \right]$.

Bài 8. Nâng ma trận lên lũy thừa đã cho:

\[((\left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right])^(10))\]

Giải pháp. Bây giờ đừng khóc vì “bằng cấp quá lớn”, “thế giới không công bằng” và “giáo viên đã hoàn toàn mất bến bờ”. Nó thực sự dễ dàng:

\[\begin(align) & ((\left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right])^(10))=((\left[ \begin (ma trận) 1 & 1 \\ 0 & 1 \\\end(matrix) \right])^(3))\cdot ((\left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\ end(matrix) \right])^(3))\cdot ((\left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right])^(3))\ cdot \left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right]= \\ & =\left(\left[ \begin(matrix) 1 & 3 \\ 0 & 1 \\\end(matrix) \right]\cdot \left[ \begin(matrix) 1 & 3 \\ 0 & 1 \\\end(matrix) \right] \right)\cdot \left(\left[ \begin(matrix) 1 & 3 \\ 0 & 1 \\\end(matrix) \right]\cdot \left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right ] \right)= \\ & =\left[ \begin(matrix) 1 & 6 \\ 0 & 1 \\\end(matrix) \right]\cdot \left[ \begin(matrix) 1 & 4 \\ 0 & 1 \\\end(matrix) \right]= \\ & =\left[ \begin(matrix) 1 & 10 \\ 0 & 1 \\\end(matrix) \right] \end(align)\ ]

Lưu ý rằng ở dòng thứ hai chúng ta đã sử dụng tính kết hợp của phép nhân. Thực ra chúng ta đã sử dụng nó trong nhiệm vụ trước nhưng nó đã ẩn ở đó.

Trả lời: $\left[ \begin(matrix) 1 & 10 \\ 0 & 1 \\\end(matrix) \right]$.

Như bạn có thể thấy, không có gì phức tạp khi nâng ma trận lên lũy thừa. Ví dụ cuối cùng có thể tóm tắt:

\[((\left[ \begin(matrix) 1 & 1 \\ 0 & 1 \\\end(matrix) \right])^(n))=\left[ \begin(array)(*(35) (r)) 1 & n \\ 0 & 1 \\\end(mảng) \right]\]

Thực tế này dễ dàng được chứng minh thông qua quy nạp toán học hoặc phép nhân trực tiếp. Tuy nhiên, không phải lúc nào cũng có thể nắm bắt được những mô hình như vậy khi raise lũy thừa. Do đó, hãy cẩn thận: thường nhân một số ma trận một cách “ngẫu nhiên” hóa ra lại dễ dàng và nhanh hơn so với việc tìm kiếm một số loại mẫu.

Nói chung, đừng tìm kiếm ý nghĩa cao hơn ở nơi không có. Để kết luận, chúng ta hãy xem xét lũy thừa của một ma trận lớn hơn - nhiều như $\left[ 3\times 3 \right]$.

Bài 9. Nâng ma trận lên lũy thừa đã cho:

\[((\left[ \begin(matrix) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\end(matrix) \right])^(3))\]

Giải pháp. Chúng ta đừng tìm kiếm các mẫu. Chúng tôi làm việc trước:

\[((\left[ \begin(matrix) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\end(matrix) \right])^(3))=(( \left[ \begin(matrix) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\end(matrix) \right])^(2))\cdot \left[ \begin (ma trận)0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\end(ma trận) \right]\]

Đầu tiên, hãy bình phương ma trận này:

\[\begin(align) & ((\left[ \begin(matrix) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\end(matrix) \right])^( 2))=\left[ \begin(matrix) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\end(matrix) \right]\cdot \left[ \begin(matrix ) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\end(matrix) \right]= \\ & =\left[ \begin(array)(*(35)(r )) 2 & 1 & 1 \\ 1 & 2 & 1 \\ 1 & 1 & 2 \\\end(array) \right] \end(align)\]

Bây giờ hãy lập phương nó:

\[\begin(align) & ((\left[ \begin(matrix) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\end(matrix) \right])^( 3))=\left[ \begin(array)(*(35)(r)) 2 & 1 & 1 \\ 1 & 2 & 1 \\ 1 & 1 & 2 \\\end(array) \right] \cdot \left[ \begin(matrix) 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \\\end(matrix) \right]= \\ & =\left[ \begin( array)(*(35)(r)) 2 & 3 & 3 \\ 3 & 2 & 3 \\ 3 & 3 & 2 \\\end(array) \right] \end(align)\]

Đó là tất cả. Vấn đề đã được giải quyết.

Trả lời: $\left[ \begin(matrix) 2 & 3 & 3 \\ 3 & 2 & 3 \\ 3 & 3 & 2 \\\end(matrix) \right]$.

Như bạn có thể thấy, khối lượng tính toán đã trở nên lớn hơn nhưng ý nghĩa vẫn không thay đổi chút nào. :)

Điều này kết thúc bài học. Lần tới chúng ta sẽ xem xét phép toán ngược: sử dụng sản phẩm hiện có, chúng ta sẽ tìm các thừa số ban đầu.

Như bạn có thể đã đoán, chúng ta sẽ nói về ma trận nghịch đảo và các phương pháp tìm nó.

Trong hệ thống MatLab, việc thực hiện các phép toán trên ma trận và vectơ khá đơn giản. Trước tiên chúng ta hãy xem xét các phép tính đơn giản của phép cộng và phép nhân ma trận và vectơ. Cho hai vectơ

một = ; vectơ % hàng
b = ; vectơ % cột

thì phép nhân của hai vectơ này có thể được viết như sau

c = a*b; %c=1+2+3+4+5=16
d = b*a; % d – ma trận các phần tử 5x5

Theo các phép toán trên vectơ, nhân vectơ hàng với vectơ cột sẽ cho một số và nhân vectơ cột với vectơ hàng sẽ cho ra ma trận hai chiều, là kết quả của các phép tính trong ví dụ trên, tức là.

Phép cộng và phép trừ hai vectơ được viết như sau:

a1 = ;
a2 = ;
c = a1+a2; % c = ;
c = a2-a1; % c = ;

Lưu ý rằng các phép tính cộng và trừ có thể được thực hiện giữa hai vectơ cột hoặc hai vectơ hàng. Nếu không MatLab sẽ hiển thị thông báo lỗi vì Không thể thêm các vectơ thuộc loại khác nhau. Đây là trường hợp xảy ra với tất cả các phép tính số học không hợp lệ: nếu không thể tính toán được, MatLab sẽ báo lỗi và chương trình sẽ kết thúc ở dòng tương ứng.

Các phép tính nhân và cộng giữa các ma trận được thực hiện theo cách tương tự:

A = ;
B = cái(3);
C = A+B; % cộng hai ma trận cùng cỡ
D = A+5; % cộng của ma trận và số
E = A*B; % nhân ma trận A với B
F = B*A; % nhân ma trận B với A
G = 5*A; % nhân một ma trận với một số

Các phép tính ma trận nghịch đảo cũng như ma trận hoán vị và vectơ được viết như sau:

một = ; vectơ % hàng
b = a'; vectơ % cột được hình thành bởi
% bằng cách hoán vị vectơ hàng a.
A = ; % ma trận phần tử 3x3
B = a*A; %B = – vectơ hàng
C = A*b; %C = – vectơ cột
D = a*A*a’; % D = 45 – số, tổng các phần tử của ma trận A
E = A'; % E – ma trận chuyển vị A
F = inv(A); % F – ma trận nghịch đảo A
G = A^-1; % G – ma trận nghịch đảo A

Từ ví dụ trên, rõ ràng hoạt động hoán vị ma trận và vectơ được biểu thị bằng ký hiệu ‘ (dấu nháy đơn), được đặt sau tên của vectơ hoặc ma trận. Tính toán nghịch đảo của ma trận có thể được thực hiện bằng cách gọi hàm inv() hoặc bằng cách nâng ma trận lên lũy thừa -1. Kết quả trong cả hai trường hợp sẽ giống nhau và hai phương pháp tính toán được thực hiện để dễ sử dụng khi thực hiện các thuật toán khác nhau.

Nếu trong quá trình tính toán cần phải nhân, chia hoặc nâng các phần tử của vectơ hoặc ma trận theo từng phần tử, thì các toán tử sau được sử dụng cho việc này:

.* - phép nhân theo phần tử;
./ và.\ - phân chia theo từng phần tử;
.^ - lũy thừa theo phần tử.

Hãy xem cách các toán tử này hoạt động bằng ví dụ sau.

một = ; vectơ % hàng
b = ; vectơ % hàng
c = a.*b; %c=
A = cái(3); % ma trận 3x3 bao gồm những cái
B = ; % ma trận 3x3
C = A.*B; % ma trận 3x3 bao gồm
D = A./B; % ma trận 3x3 bao gồm
E = A.\B; % ma trận 3x3 bao gồm
F = A.^2; % bình phương các phần tử của ma trận A

Ở cuối phần này, chúng ta sẽ xem xét một số hàm hữu ích khi làm việc với vectơ và ma trận.

Để tìm giá trị tối đa của phần tử vectơ, hãy sử dụng hàm max() tiêu chuẩn, trả về giá trị tối đa tìm thấy của phần tử và vị trí (chỉ mục) của nó:

một = ;
= tối đa(a); % v = 6, i = 2;

v = max(a); % v = 6;

Ví dụ trên cho thấy hai những cách khác gọi hàm max(). Trong trường hợp đầu tiên, cả giá trị tối đa của phần tử và chỉ mục của nó trong vectơ đều được xác định và trong trường hợp thứ hai - chỉ giá trị tối đa của phần tử.

Trong trường hợp ma trận, hàm này xác định các giá trị lớn nhất đứng trong các cột, như trong ví dụ bên dưới:

A = ;
= tối đa(A); %V=,tôi=
V = tối đa(A); %V=

Cú pháp đầy đủ của hàm max() có thể được tìm thấy bằng cách gõ lệnh trong cửa sổ lệnh MatLab

giúp đỡ<название функции>

Hàm min() hoạt động theo cách tương tự, xác định giá trị tối thiểu phần tử của một vectơ hoặc ma trận và chỉ số của nó.

Khác chức năng hữu ích Làm việc với ma trận và vectơ là hàm sum(), tính tổng các giá trị của các phần tử vectơ hoặc cột ma trận:

một = ;
s = tổng(a); %s = 3+5+4+2+1=15
A = ;
S1 = tổng(A); %S1=
S2 = tổng(tổng(A)); %S2=39

Khi tính tổng S2, tổng giá trị của các phần tử của ma trận A trước tiên được tính theo cột, sau đó theo hàng. Kết quả biến S2 chứa tổng giá trị của tất cả các phần tử của ma trận A.

Để sắp xếp các giá trị phần tử của vectơ hoặc ma trận theo thứ tự tăng dần hoặc giảm dần, hãy sử dụng hàm Sort() như sau:

một = ;

b1 = sắp xếp(a); %b1=
b2 = sắp xếp(a, ‘hạ xuống’); %b2=
b3 = sắp xếp(a, ‘tăng lên’); %b3=

cho ma trận

A = ;
B1 = sắp xếp(A); %B1=
B2 = sắp xếp(A, 'xuống'); %B2=

Trong nhiều bài toán thực tế, bạn thường cần tìm một phần tử cụ thể trong một vectơ hoặc ma trận. Điều này có thể được thực hiện bằng cách sử dụng chức năng tiêu chuẩn find(), lấy một điều kiện làm đối số, theo đó các phần tử bắt buộc được tìm thấy, ví dụ:

một = ;
b1 = tìm(a == 2); % b1 = 4 – chỉ số của phần tử 2
b2 = tìm(a ~= 2); % b2 = – chỉ số không có 2
b3 = tìm(a > 3); %b3 =

Trong ví dụ đã cho, ký hiệu ‘==’ có nghĩa là kiểm tra sự bằng nhau và ký hiệu ‘~=’ kiểm tra sự bất đẳng thức của các giá trị của các phần tử của vectơ a. Các toán tử này sẽ được mô tả chi tiết hơn trong phần Toán tử có điều kiện.

Một hàm hữu ích khác để làm việc với vectơ và ma trận là hàm Mean() để tính giá trị trung bình số học, hoạt động như sau:

một = ;
m = trung bình(a); % m = 3
A = ;
M1 = trung bình(A); % M1 =
M2 = trung bình(trung bình(A)); %M2 = 4,333

Định nghĩa 1

Tích ma trận (C=AB) là phép toán chỉ áp dụng cho các ma trận A và B trùng nhau, trong đó số cột của ma trận A bằng số hàng của ma trận B:

C ⏟ m × n = A ⏟ m × p × B ⏟ p × n

ví dụ 1

Cho ma trận:

  • A = a(i j) có kích thước m × n;
  • B = b(i j) có kích thước p × n

Ma trận C, các phần tử c i j được tính theo công thức sau:

c i j = a i 1 × b 1 j + a i 2 × b 2 j + . . . + a i p × b p j , i = 1 , . . . m, j = 1, . . . tôi

Ví dụ 2

Hãy tính tích AB=BA:

A = 1 2 1 0 1 2 , B = 1 0 0 1 1 1

Giải pháp sử dụng quy tắc nhân ma trận:

A ⏟ 2 × 3 × B ⏟ 3 × 2 = 1 2 1 0 1 2 × 1 0 0 1 1 1 = 1 × 1 + 2 × 0 + 1 × 1 1 × 0 + 2 × 1 + 1 × 1 0 × 1 + 1 × 0 + 2 × 1 0 × 0 + 1 × 1 + 2 × 1 = = 2 3 2 3 ⏟ 2 × 2

B ⏟ 3 × 2 × A ⏟ 2 × 3 = 1 0 0 1 1 1 × 1 2 1 0 1 2 = 1 × 1 + 0 × 0 1 × 2 + 0 × 1 1 × 1 + 0 × 2 0 × 1 + 1 × 0 0 × 2 + 1 × 1 0 × 1 + 1 × 2 1 × 1 + 1 × 0 1 × 2 + 1 × 1 1 × 1 + 1 × 2 = 1 2 1 0 1 2 1 3 3 ⏟ 3×3

Tích A B và B A được tìm thấy nhưng là ma trận kích cỡ khác nhau: A B không bằng B A.

Tính chất của phép nhân ma trận

Tính chất của phép nhân ma trận:

  • (A B) C = A (B C) - tính kết hợp của phép nhân ma trận;
  • A(B + C) = A B + A C - tính phân phối của phép nhân;
  • (A + B) C = A C + B C - tính phân phối của phép nhân;
  • λ(A B) = (λA)B
ví dụ 1

Hãy kiểm tra thuộc tính số 1: (A B) C = A (B C) :

(A × B) × A = 1 2 3 4 × 5 6 7 8 × 1 0 0 2 = 19 22 43 50 × 1 0 0 2 = 19 44 43 100,

A (B × C) = 1 2 3 4 × 5 6 7 8 1 0 0 2 = 1 2 3 4 × 5 12 7 16 = 19 44 43 100.

Ví dụ 2

Hãy kiểm tra tính chất số 2: A (B + C) = A B + A C:

A × (B + C) = 1 2 3 4 × 5 6 7 8 + 1 0 0 2 = 1 2 3 4 × 6 6 7 10 = 20 26 46 58,

A B + A C = 1 2 3 4 × 5 6 7 8 + 1 2 3 4 × 1 0 0 2 = 19 22 43 50 + 1 4 3 8 = 20 26 46 58.

Tích của ba ma trận

Tích của ba ma trận A B C được tính theo 2 cách:

  • tìm A B và nhân với C: (A B) C;
  • hoặc trước tiên hãy tìm B C, rồi nhân A (B C).
​​​​​Ví dụ 3

Nhân ma trận theo 2 cách:

4 3 7 5 × - 28 93 38 - 126 × 7 3 2 1

Thuật toán hành động:

  • tìm tích của 2 ma trận;
  • sau đó lại tìm tích của 2 ma trận.

1). A B = 4 3 7 5 × - 28 93 38 - 126 = 4 (- 28) + 3 × 38 4 × 93 + 3 (- 126) 7 (- 28) + 5 × 38 7 × 93 + 5 (- 126 ) = 2 - 6 - 6 21

2). A B C = (A B) C = 2 - 6 - 6 21 7 3 2 1 = 2 × 7 - 6 × 2 2 × 3 - 6 × 1 - 6 × 7 + 21 × 2 - 6 × 3 + 21 × 1 = 2 0 0 3 .

Chúng ta sử dụng công thức A B C = (A B) C:

1). B C = - 28 93 38 - 126 7 3 2 1 = - 28 × 7 + 93 × 2 - 28 × 3 + 93 × 1 38 × 7 - 126 × 2 38 × 3 - 126 × 1 = - 10 9 14 - 12

2). A B C = (A B) C = 7 3 2 1 - 10 9 14 - 12 = 4 (- 10) + 3 × 14 4 × 9 + 3 (- 12) 7 (- 10) + 5 × 14 7 × 9 + 5 (- 12) = 2 0 0 3

Đáp án: 4 3 7 5 - 28 93 38 - 126 7 3 2 1 = 2 0 0 3

Nhân một ma trận với một số

Định nghĩa 2

Tích của ma trận A với số k là ma trận B = A k cùng kích thước, thu được từ ma trận ban đầu bằng cách nhân tất cả các phần tử của nó với một số cho trước:

b i, j = k × a i, j

Tính chất của phép nhân một ma trận với một số:

  • 1 × A = A
  • 0 × A = ma trận 0
  • k(A + B) = k A + k B
  • (k + n) A = k A + n A
  • (k × n) × A = k (n × A)
Ví dụ 4

Hãy tìm tích của ma trận A = 4 2 9 0 x 5.

5 A = 5 4 2 9 0 5 × 4 5 × 2 5 × 9 5 × 0 = 20 10 45 0

Nhân một ma trận với một vectơ

Định nghĩa 3

Để tìm tích của một ma trận và một vectơ, bạn cần nhân bằng quy tắc “hàng theo cột”:

  • nếu bạn nhân một ma trận với một vectơ cột thì số cột trong ma trận phải bằng số hàng trong vectơ cột;
  • Kết quả của phép nhân một vectơ cột chỉ là một vectơ cột:

A B = a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋯ ⋯ ⋯ ⋯ a m 1 am 2 ⋯ a m n b 1 b 2 ⋯ b 1 n = a 11 × b 1 + a 12 × b 2 + ⋯ + a 1 n × b n a 21 × b 1 + a 22 × b 2 + ⋯ + a 2 n × b n ⋯ ⋯ ⋯ ⋯ a m 1 × b 1 + a m 2 × b 2 + ⋯ + a m n × b n = c 1 s 2 ⋯ s 1 mét

  • nếu bạn nhân một ma trận với một vectơ hàng thì ma trận được nhân chỉ phải là một vectơ cột và số cột phải khớp với số cột trong vectơ hàng:

A B = a a ⋯ a b b ⋯ b = a 1 × b 1 a 1 × b 2 ⋯ a 1 × b n a 2 × b 1 a 2 × b 2 ⋯ a 2 × b n ⋯ ⋯ ⋯ ⋯ a n × b 1 a n × b 2 ⋯ a n × b n = c 11 c 12 ⋯ c 1 n c 21 c 22 ⋯ c 2 n ⋯ ⋯ ⋯ ⋯ c n 1 c n 2 ⋯ c n n

Ví dụ 5

Hãy tìm tích của ma trận A và vectơ cột B:

A B = 2 4 0 - 2 1 3 - 1 0 1 1 2 - 1 = 2 × 1 + 4 × 2 + 0 × (- 1) - 2 × 1 + 1 × 2 + 3 × (- 1) - 1 × 1 + 0 × 2 + 1 × (- 1) = 2 + 8 + 0 - 2 + 2 - 3 - 1 + 0 - 1 = 10 - 3 - 2

Ví dụ 6

Hãy tìm tích của ma trận A và vectơ hàng B:

A = 3 2 0 - 1 , B = - 1 1 0 2

A B = 3 2 0 1 × - 1 1 0 2 = 3 × (- 1) 3 × 1 3 × 0 3 × 2 2 × (- 1) 2 × 1 2 × 0 2 × 2 0 × (- 1) 0 × 1 0 × 0 0 × 2 1 × (- 1) 1 × 1 1 × 0 1 × 2 = - 3 3 0 6 - 2 2 0 4 0 0 0 0 - 1 1 0 2

Đáp án: A B = - 3 3 0 6 - 2 2 0 4 0 0 0 0 - 1 1 0 2

Nếu bạn thấy văn bản có lỗi, vui lòng đánh dấu nó và nhấn Ctrl+Enter