Có rất nhiều cách khác nhau để giải thích nhân ma trận. Tôi sẽ gắn bó với một con số duy nhất vì tôi tin rằng hầu hết mọi người ở đây đều quen thuộc với nó (và con số này rất mô tả). Nếu bạn muốn biết thêm thông tin chi tiết, tôi khuyên bạn nên truy cập bài viết trên Wikipedia hoặc phần giải thích trên WolframMathWorld .
Giải thích đơn giản:
Giả sử bạn có hai ma trận A và B , trong đó A là 3 nhân 2 và B là 2 nhân 3. Nếu bạn thực hiện phép nhân ma trận trên các ma trận này cho ma trận, thì AB hoặc BA, bạn sẽ nhận được kết quả dưới đây:
Thử thách:
Thực hiện phép nhân ma trận tượng trưng trong ngôn ngữ của bạn. Bạn sẽ lấy hai ma trận làm đầu vào, trong đó mỗi phần tử trong ma trận được biểu thị bằng ký tự ASCII không khoảng trắng (mã điểm 33-126). Bạn phải xuất sản phẩm của các ma trận này.
Các quy tắc liên quan đến đầu ra:
Một sản phẩm của hai mục sẽ không có bất kỳ ký hiệu nào ở giữa. Đó là ab
, không a*b
, a·b
, times(a,b)
hoặc một cái gì đó tương tự. Nó aa
, không phải a^2
.
Tổng các thuật ngữ nên có một khoảng trắng (mã ASCII điểm 32) ở giữa. Đó là a b
, không a+b
, plus(a,b)
hoặc một cái gì đó tương tự.
Lý do cho hai quy tắc đó là: Tất cả các ký tự không phải khoảng trắng được phép làm biểu tượng trong ma trận, do đó sử dụng chúng làm biểu tượng toán học sẽ rất lộn xộn. Vì vậy, những gì bạn thường có thể viết như a*b+c*d
sẽ được ab cd
.
Bạn có thể chọn thứ tự của các điều khoản. ab cd
, dc ab
Và cd ba
đang nói về mặt toán học như nhau, do đó bạn có thể chọn thứ tự ở đây quá. Thứ tự không cần nhất quán miễn là đúng về mặt toán học.
Các quy tắc liên quan đến định dạng ma trận:
Một ma trận có thể được nhập theo bất kỳ định dạng nào bạn thích, ngoại trừ một chuỗi không có dấu phân cách giữa các hàng (điều này là do đầu ra sẽ bị rối hoàn toàn). Cả hai ma trận phải được nhập vào cùng một định dạng. Tất cả các ví dụ dưới đây là những cách hợp lệ để nhập và xuất một ma trận.
"ab;cd" <- This will look awful, but it's still accepted.
"a,b\nc,d"
[[a,b],[c,d]]
[a, b]
[c, d]
Tôi biết rằng điều này cho phép rất nhiều định dạng sẽ trông lộn xộn, nhưng thách thức là về việc nhân ma trận, chứ không phải định dạng đầu ra.
Quy tắc chung:
- Bạn có thể giả sử đầu vào hợp lệ. Phép nhân ma trận sẽ luôn luôn có thể với các kích thước đã cho.
- Sẽ chỉ có hai ma trận.
- Bạn có thể cho rằng các ma trận không trống
- Các hàm tích hợp được chấp nhận (nhưng có thể hơi cồng kềnh do các yêu cầu định dạng).
- Tất nhiên bạn có thể sử dụng các ký tự thoát trong đầu vào nếu cần thiết (
\'
thay vì'
). - Bất kỳ phương pháp đầu vào và đầu ra tiêu chuẩn là OK .
Các trường hợp thử nghiệm:
Hai ma trận đầu vào được hiển thị với một dòng trống ở giữa. Đầu ra được hiển thị sau Output:
. Khi có hai ma trận đầu ra thì nó chỉ hiển thị các đầu ra khác sẽ được chấp nhận.
Trường hợp thử nghiệm số 1
Inputs:
[a]
[b]
Output:
[ab]
[ba] <- Also OK
Trường hợp thử nghiệm # 2
Inputs:
[a, b]
[1, 4]
[y, {]
[%, 4, 1]
[a, b, c]
Output:
[a% ba, a4 bb, a1 bc]
[1% 4a, 14 4b, 11 4c]
[y% {a, y4 {b, y1 {c]
Trường hợp thử nghiệm # 3:
Inputs:
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 1, 2, 3]
[4, 5, 6, 7]
[a]
[b]
[c]
[d]
Output:
[1a 2b 3c 4d]
[5a 6b 7c 8d]
[9a 1b 2c 3d]
[4a 5b 6c 7d]
[d4 c3 b2 a1] <-- Also OK
[d8 c7 b6 a5]
[1b 9a c2 3d]
[a4 b5 d7 6c]
Nếu phản hồi của bạn đối với các quy tắc về yêu cầu ab cd
thay vì a*b+c*d
là: bạn nên tránh các định dạng đầu vào / đầu ra cồng kềnh , thì tôi muốn lưu ý rằng các định dạng đầu vào và đầu ra rất linh hoạt. Việc bạn không thể sử dụng *
và +
cho các sản phẩm và khoản tiền có thể khiến việc sử dụng một công cụ tích hợp đơn giản trở nên khó khăn hơn, nhưng tôi không xem xét điều tiêu cực đó.