Giải một phương trình ma trận tuyến tính hoặc hệ thống phương trình vô hướng tuyến tính.
Tính toán giải pháp chính xác của người Viking, x, của các phương trình ma trận tuyến tính được xác định rõ ràng, tức là Ax = b.
Tham số [Mạnh, m, m] mảnga[…, M, M] array_likeMa trận hệ số.
B {[Mạnh, M,], [Mạnh, M, K]}, Array_Like{[…, M,], […, M, K]}, array_likeCác giá trị biến phụ thuộc hoặc của các giá trị phụ thuộc.
ReturnSx {[Mạnh, m,], [Mạnh, m, k]} ndarrayx{[…, M,], […, M, K]} ndarrayGiải pháp cho hệ thống a x = b. Hình dạng trả lại giống hệt với b.
RisislinalgerrorNếu A là số ít hoặc không vuông.
Ghi chú
Mới trong phiên bản 1.8.0.
Quy tắc phát sóng áp dụng, xem tài liệu numpy.linalg
để biết chi tiết.
Các giải pháp được tính toán bằng cách sử dụng thói quen Lapack _gesv
.
Phải là hình vuông và có thứ hạng đầy đủ, tức là, tất cả các hàng [hoặc, tương đương, các cột] phải độc lập tuyến tính; Nếu một trong hai không đúng, hãy sử dụng lstsq
cho các giải pháp tốt nhất tốt nhất của hệ thống/phương trình.
Người giới thiệu
1G. Strang, Đại số tuyến tính và các ứng dụng của nó, tái bản lần 2, Orlando, FL, Academy Press, Inc., 1980, pg. 22.
Ví dụ
Giải quyết hệ phương trình x0 + 2 * x1 = 1
và 3 * x0 + 5 * x1 = 2
:
>>> a = np.array[[[1, 2], [3, 5]]] >>> b = np.array[[1, 2]] >>> x = np.linalg.solve[a, b] >>> x array[[-1., 1.]]
Kiểm tra xem giải pháp có chính xác không:
>>> np.allclose[np.dot[a, x], b] True
Trong một bài viết trước, chúng tôi đã xem xét giải quyết vấn đề LP, tức là một hệ phương trình tuyến tính với các ràng buộc bất bình đẳng. Nếu tập hợp các phương trình tuyến tính của chúng tôi có các ràng buộc có tính xác định, chúng tôi có thể biểu diễn vấn đề dưới dạng ma trận và áp dụng đại số ma trận. Các phương thức ma trận biểu thị nhiều phương trình tuyến tính theo cách nhỏ gọn trong khi sử dụng các hàm thư viện ma trận hiện có.
Chúng tôi sẽ sử dụng Numpy [một hướng dẫn tốt ở đây] và Scipy [hướng dẫn tham khảo ở đây]. Để cài đặt các gói tuyệt vời này, có hàng tấn tài nguyên trên web, chúng tôi chỉ chỉ ra việc cài đặt ngăn xếp Scipy.
Một ví dụ
Khi thực hành của chúng tôi, chúng tôi sẽ tiến hành một ví dụ, đầu tiên viết mô hình ma trận và sau đó sử dụng Numpy cho một giải pháp.Numpy for a solution.
& nbsp; & nbsp;
Bây giờ, chúng ta có thể chính thức hóa vấn đề với ma trận:
& nbsp; & nbsp;
Sau đó, các phương trình tuyến tính có thể được viết theo cách này:
& nbsp; & nbsp;
Để giải cho vectơ X, chúng ta phải lấy nghịch đảo của ma trận A và phương trình được viết như sau:
& nbsp; & nbsp;
Sử dụng Numpy để giải quyết hệ thống
import numpy as np
# define matrix A using Numpy arrays
A = np.array[[[2, 1, 1],
[1, 3, 2],
[1, 0, 0]]]
#define matrix B
B = np.array[[4, 5, 6]]
# linalg.solve is the function of NumPy to solve a system of linear scalar equations
print "Solutions:\n",np.linalg.solve[A, B ]
Solutions:
[ 6. 15. -23.]
Vì vậy, các giải pháp là:
Khi ma trận lớn lên
Khi số lượng biến tăng, kích thước của ma trận A cũng tăng lên và nó trở nên tốn kém về mặt tính toán để có được sự đảo ngược ma trận của A. Trong số các phương pháp khác nhau, chúng tôi sẽ xem xét 3 quy trình để đưa ma trận trở thành ma trận đơn giản hơn: Phân hủy Lu, phân rã QR và phương pháp lặp Jacobi.
computationally expensive to get the matrix inversion of A. Among the various methods, we will consider 3 procedures in order to get matrix A factorized into simpler matrices: the LU decomposition, the QR decomposition and the Jacobi iterative method.
Lu phân hủy
Sự phân hủy LU, còn được gọi là hệ số thấp hơn, là một trong những phương pháp giải các hệ phương trình tuyến tính. Đúng như tên gọi, nhân tố LU phân hủy ma trận A thành một sản phẩm của hai ma trận: một ma trận hình tam giác thấp hơn L và ma trận hình tam giác trên U. Sự phân hủy có thể được biểu diễn như sau:
& nbsp; & nbsp;
& nbsp; & nbsp;
& nbsp; & nbsp;
Lu phân hủy với Scipy
#import linalg package of the SciPy module for the LU decomp
import scipy.linalg as linalg
#import NumPy
import numpy as np
#define A same as before
A = np.array[[[2., 1., 1.],
[1., 3., 2.],
[1., 0., 0.]]]
#define B
B = np.array[[4., 5., 6.]]
#call the lu_factor function
LU = linalg.lu_factor[A]
#solve given LU and B
x = linalg.lu_solve[LU, B]
print "Solutions:\n",x
#we get the same solution as before
Solutions:
[ 6. 15. -23.]
#now we want to see how A has been factorized, P is the so called Permutation matrix
P, L, U = scipy.linalg.lu[A]
print P
[[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]
print L
[[ 1. 0. 0. ]
[ 0.5 1. 0. ]
[ 0.5 -0.2 1. ]]
print U
[[ 2. 1. 1. ]
[ 0. 2.5 1.5]
[ 0. 0. -0.2]]
Từ các biến L và U như được in trong mã, chúng ta có thể biểu diễn một yếu tố thành yếu tố:
& nbsp; & nbsp;