问题是x + 3y − 2 = 1,3 + 2 + 6 = −2,2 + 4 + 3 = 2。 我想通过使用Cramer规则来了解的值。 好吧,我所做的是硬编码的东西,但是指令限制了“解决”功能。此外,此链接是有关Cramer's Rule的附加信息。
import numpy as np
from scipy.linalg import solve
a = np.matrix([[1, 3, -2], [3, 2, 6], [2, 4, 3]])
b = np.matrix([[1], [-2], [2]])
top_of_x = np.matrix([[1, 3, -2], [-2, 2, 6], [2, 4, 3]])
det_of_top_of_x = np.linalg.det(top_of_x)
det_of_a = np.linalg.det(a)
x = det_of_top_of_x / det_of_a
print x
答案 0 :(得分:0)
您可能要“计算”给定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