Ma trận tam giác trên trong Python không có numpy

Trả về một bản sao của một mảng có các phần tử phía trên đường chéo thứ k bằng 0. Đối với mảng có ndim vượt quá 2, sẽ áp dụng cho hai trục cuối cùng

Thông số . m mảng_giống, hình dạng […, M, N]

mảng đầu vào

k int, tùy chọn

Đường chéo trên đó để không phần tử. k = 0 [mặc định] là đường chéo chính, k < 0 ở dưới nó và k > 0 ở trên

Ngoài ra, sau khi hiểu được phương pháp nghịch đảo ma trận hiệu quả, bạn đã hoàn thành gần 80% cách để có Bộ giải bình phương nhỏ nhất của riêng mình và là một thành phần của nhiều mô-đun phân tích cá nhân khác để giúp bạn hiểu rõ hơn về số lượng công cụ máy học tuyệt vời của chúng tôi. . Tôi có khuyên bạn nên sử dụng những gì chúng tôi sắp phát triển cho một dự án thực tế không? . Tôi không khuyên bạn nên sử dụng những công cụ như vậy của riêng mình TRỪ KHI bạn đang làm việc với những vấn đề nhỏ hơn HOẶC bạn đang nghiên cứu một số phương pháp mới yêu cầu những thay đổi nhỏ đối với bộ công cụ cá nhân của bạn. Vì vậy, một tuyên bố trên mang lặp đi lặp lại. các công cụ học máy của ngày mai sẽ được phát triển bởi những người hiểu các nguyên tắc toán học và mã hóa của các công cụ ngày nay. Tôi muốn trở thành một phần của, hoặc ít nhất là thúc đẩy, những người sẽ tạo ra các công cụ thế hệ tiếp theo. Ngoài ra, nếu bạn là một người đam mê máy tính, biết cách viết mã đảo ngược của ma trận là một quyền tuyệt vời. Chúng tôi cũng sẽ giới thiệu cách sử dụng numpy /scipy để đảo ngược ma trận ở cuối bài đăng này

Cách mà tôi được dạy về ma trận nghịch đảo, trong thời kỳ đen tối, đúng là cực hình và khó nhớ. Nếu bạn tiếp tục theo cách mà bạn sẽ lập trình nó, theo ý kiến ​​​​của tôi sẽ dễ dàng hơn RẤT NHIỀU. Tôi thậm chí còn nghĩ rằng thực hiện phương pháp mà chúng ta sẽ sử dụng khi thực hiện bằng tay sẽ dễ dàng hơn so với cách dạy cổ xưa về cách thực hiện. Trên thực tế, nó dễ đến mức chúng ta sẽ bắt đầu với ma trận 5×5 để làm cho nó “rõ ràng” hơn khi chúng ta viết mã

KHÔNG HOẢNG LOẠN. Điều thực sự khó khăn duy nhất về phương pháp đảo ngược ma trận này, đó là, trong khi nó rất đơn giản, nó hơi tẻ nhạt và nhàm chán. Tuy nhiên, so với phương pháp cổ xưa, nó đơn giản và dễ nhớ hơn RẤT NHIỀU. Hoặc, như một trong những người cố vấn yêu thích của tôi thường nói, “Thật đơn giản, thật không dễ dàng. ” Chúng tôi sẽ sử dụng python, để giảm bớt sự tẻ nhạt mà không làm mất đi bất kỳ góc nhìn nào đối với những hiểu biết sâu sắc về phương pháp

Toán học

Hãy bắt đầu với một số đại số tuyến tính cơ bản để xem lại lý do tại sao chúng ta muốn một ma trận nghịch đảo

Hãy xem xét một vấn đề đại số tuyến tính điển hình, chẳng hạn như

AX=B,\hspace{5em}\begin{bmatrix}a_{11}&a_{12}&a_{13}\\a_{21}&a_{22}&a_{23}\\a_{31}&a_{32}

Chúng tôi muốn giải quyết cho X, vì vậy chúng tôi có được nghịch đảo của A và làm như sau

X=A^{-1}B,\hspace{5em} \begin{bmatrix}x_{11}\\x_{21}\\x_{31}\end{bmatrix} =\begin{bmatrix}ai_{11

Vì vậy, chúng tôi có động cơ để tìm A^{-1} . Vậy làm cách nào để chúng tôi dễ dàng tìm thấy A^{-1} theo cách sẵn sàng để viết mã? .

Chúng tôi thường sử dụng khéo léo “nhân với 1” để làm cho đại số dễ dàng hơn. Một cách để “nhân với 1” trong đại số tuyến tính là sử dụng ma trận đơn vị. Trong trường hợp bạn đến đây mà chưa biết hoặc chưa hiểu rõ về đại số tuyến tính, thì ma trận đơn vị là một ma trận vuông [số hàng bằng số cột] với 1 trên đường chéo và 0 ở mọi nơi khác, chẳng hạn như sau

I= \begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix}

Tuân theo quy tắc chính của đại số [bất cứ điều gì chúng ta làm với một bên của dấu bằng, chúng ta sẽ làm với bên kia của dấu bằng, để “giữ nguyên” dấu bằng], chúng ta sẽ . Khi cái A in order to methodically turn it into an identity matrix while applying those same steps to what is “initially” the identity matrix. When what was A trở thành ma trận đồng nhất, thì I sẽ là < . Điều quan trọng cần lưu ý là A^{-1}. It’s important to note that A phải là ma trận vuông nghịch đảo. Điều này có nghĩa là số hàng của A và số cột của A must be equal.

Nếu một lúc nào đó, bạn có một tiếng “À HA. ” ngay lúc này, hãy cố gắng tự mình hoàn thành và so sánh với những gì chúng tôi đã làm bên dưới sau khi bạn hoàn thành hoặc xem qua nội dung bên dưới càng ít càng tốt NẾU bạn gặp khó khăn

Để tìm A^{-1} một cách dễ dàng, hãy nhân trước B by the identity matrix, and perform row operations on A to drive it to the identity matrix. You want to do this one element at a time for each column from left to right.

AX=IB,\hspace{5em}\begin{bmatrix}a_{11}&a_{12}&a_{13}\\a_{21}&a_{22}&a_{23}\\a_{31}&a_{32}

Thực hiện các thao tác hàng tương tự trên I mà bạn đang thực hiện trên A, and I will become the inverse of A [i.e. A^{-1} ].

IX=A^{-1}B,\hspace{5em} \begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix} \begin{bmatrix}x_{11}\\x_{21}\\x_

Dưới đây là các bước, S , mà chúng tôi sẽ làm theo để thực hiện điều này cho bất kỳ ma trận kích thước nào. Đây chỉ là một tổng quan cấp cao. Chúng tôi sẽ làm tổng quan chi tiết với các con số ngay sau đây. Hãy coi phương pháp đảo ngược là một tập hợp các bước cho từng cột từ trái sang phải và cho từng thành phần trong cột hiện tại và mỗi cột có một trong các thành phần đường chéo trong đó, được biểu thị dưới dạng S_{k1} diagonal elements where k=1\, to\, n. We’ll start with the left most column and work right. And please note, each S đại diện cho một phần tử mà chúng tôi đang sử dụng để chia tỷ lệ. Khi chúng tôi đang ở một bước nhất định, S_{ij} , trong đó i \ và \, j = 1 . independently depending on where we are at in the matrix, we are performing that step on the entire row and using the row with the diagonal S_{k1} in it as part of that operation. 

S = \begin{bmatrix}S_{11}&\dots&\dots&S_{k2} &\dots&\dots&S_{n2}\\S_{12}&\dots&\dots&S_{k3} &\dots&\dots &S_{n3}

Nếu tại thời điểm này bạn thấy đủ để vượt qua, hãy tiếp tục. Sau đó quay lại và so sánh với những gì chúng tôi đã làm ở đây

Thứ tự tổng quát của các bước

Chúng ta sẽ gọi phần tử đường chéo hiện tại là phần tử đường chéo tiêu điểm, hay viết tắt là fd. Bước đầu tiên [ S_{k1} ] đối với mỗi cột là nhân hàng có fd trong đó với 1/fd. Sau đó, chúng tôi thao tác trên các hàng còn lại [ S_{k2} đến S_{kn}], the ones without fd in them, as follows:

  1. sử dụng phần tử trong cùng một cột với fd và biến nó thành một hệ số nhân;
  2. thay thế hàng bằng kết quả của … [hàng hiện tại] – hệ số nhân * [hàng có fd] và cũng thực hiện thao tác này với ma trận I
  3. điều này sẽ để lại số 0 trong cột được chia sẻ bởi fd trong ma trận A .

Chúng tôi làm điều này cho tất cả các cột từ trái sang phải trong cả AII . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, I . Khi quá trình này hoàn tất, matrices.  When this is complete, A là một ma trận đồng nhất và I trở thành . A.

Hãy thực hiện chi tiết các bước này trên ma trận 3 x 3, với các số thực. Chúng ta bắt đầu với các ma trận AI bên dưới. Sau đó, bằng mã thông minh, chúng tôi tạo các bản sao của ma trận để giữ nguyên AI matrices, calling the copies A_M and I_M.

ma trận bắt đầu của chúng tôi là

A=\begin{bmatrix}5&3&1\\3&9&4\\1&3&5\end{bmatrix}\hspace{5em} I=\begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix}

A_MI_M , ban đầu giống nhau, vì A and I, respectively:

A_M=\begin{bmatrix}5&3&1\\3&9&4\\1&3&5\end{bmatrix}\hspace{4em} I_M=\begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix}

1. Sử dụng các bước và phương pháp mà chúng tôi vừa mô tả, chia tỷ lệ hàng 1 của cả hai ma trận bằng 1/5. 0

A_M=\begin{bmatrix}1&0. 6&0. 2\\3&9&4\\1&3&5\end{bmatrix}\hspace{5em} I_M=\start{bmatrix}0. 2&0&0\\0&1&0\\0&0&1\end{bmatrix}

2. trừ 3. 0 * hàng 1 của A_M từ hàng 2 của A_M

Chủ Đề