Возможно, вы захотите «вычислить» данные матрицы A
и b
.
AT = A.T # get an array of the matrix columns
top_of_x = np.matrix(b, AT[1], AT[2])
top_of_y = np.matrix(AT[0], b, AT[2])
top_of_z = np.matrix(AT[0], AT[1], b)
и т.д.
Или если вы не хотите менять A
top_of_x = A.copy()
top_of_x[:,0] = b
и т. Д.
Последний подход, использующий векторы и индексы, также работает для всех измерений, но становится все более расточительным, так как его усилия - это O (n ^ 4) операций, в то время как простая декомпозиция LU и треугольная обратная замена - O (n ^ 3). ).
det_A = np.linalg.det(A); # uses LU decomposition, which is the main part of solve
top = A.copy();
x = np.zeros_like(A[0])
for k in range(len(x)):
top[:,k] = b;
x[k] = np.linalg.det(top)/det_A;
top[:,k] = A[:,k]; # restore column for next computation
print x