Numpy - 查找自定义 A nxn 矩阵和 B nx1 的乘积 Ax=b
Numpy - Find product Ax=b of custom A nxn matrix and B nx1
想从 Ax=b 中找到 x。首先我声明了两个矩阵,A
即 nxn
和 B
nx1
。他们的公式可以在下面看到。
为一个:
对于 b :
矩阵可以取任何n
。在我的代码中,我给它的值是 10
。我首先将它们设置为 zero
来声明它们。然后 f 我为两个矩阵声明 1,2
和 n-1
和 n
行的每个元素。对于 A
,我还循环每个数字以获得所需的外观,每个相同的数字向前一列,从 n=2
直到 n-2
。然后为了计算 Ax=b
,为了找到 x
,我使用乘法:
x = np.dot(np.linalg.inv(A), b)
但没有得到正确答案。有什么帮助吗?我也完整地发布了我的代码:
import numpy as np
n = 10
################## AAAAA matrix #############################################
A = np.zeros([n, n], dtype=float) # initialize to f zeros
# ------------------first row
A[0][0] = 6
A[0][1] = -4
A[0][2] = 1
# ------------------second row
A[1][0] = -4
A[1][1] = 6
A[1][2] = -4
A[1][3] = 1
# --------------two last rows-----
# n-2 row
A[- 2][- 1] = -4
A[- 2][- 2] = 6
A[- 2][- 3] = -4
A[- 2][- 4] = 1
# n-1 row
A[- 1][- 1] = 6
A[- 1][- 2] = -4
A[- 1][- 3] = 1
# --------------------------- from second to n-2 row --------------------------#
j = 0
for i in range(2, n - 2):
if j == (n - 4):
break
A[i][j] = 1
j = j + 1
j = 1
for i in range(2, n - 2):
if j == (n - 3):
break
A[i][j] = -4
j = j + 1
j = 2
for i in range(2, n - 2):
if j == (n - 2):
break
A[i][j] = 6
j = j + 1
j = 3
for i in range(2, n - 2):
if j == (n - 1):
break
A[i][j] = -4
j = j + 1
j = 4
for i in range(2, n - 2):
if j == (n):
break
A[i][j] = 1
j = j + 1
# -----------------------------end coding of 2nd to n-2 r-------------#
print("\nMatrix A is : \n", A)
####### b matrix ######################################
b = np.zeros(n,float).reshape((n,1))
b[0] = 3
b[1] = -1
#b[len(b) - 1] = 3
#b[len(b) - 2] = -1
b[[0,-1]]=3; b[[1,-2]]=-1
print("\nMatrix b is \n", b)
#################### result ########################
x = np.dot(np.linalg.inv(A), b)
print("\n\n The result is : \n", x)
实际上我得到了所有 1s
的结果,如您所见:
我会这样做:
# create matrix A
n=10
row = np.zeros(n+4)
row[:5] = [1,-4,6,-4,1]
A = np.zeros((n,n+4))
for i in range(n):
A[i] = np.roll(row, i)
A = A[:,2:-2]
# create vector b
b = np.zeros(n)
b[[0,-1]] = 3
b[[1,-2]] = -1
# solution
x = np.linalg.inv(A) @ b # equivalent to np.matmul(np.linalg.inv(A), b)
输出(x
):
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]
你也得到了。为什么您认为这是不正确的?
使用matmul
方法使它:
import numpy as np
A = np.array([[1,2], [3,4]], dtype=float)
B = np.array([[3], [4]])
print(np.matmul(np.linalg.inv(A), B))
想从 Ax=b 中找到 x。首先我声明了两个矩阵,A
即 nxn
和 B
nx1
。他们的公式可以在下面看到。
为一个:
对于 b :
矩阵可以取任何n
。在我的代码中,我给它的值是 10
。我首先将它们设置为 zero
来声明它们。然后 f 我为两个矩阵声明 1,2
和 n-1
和 n
行的每个元素。对于 A
,我还循环每个数字以获得所需的外观,每个相同的数字向前一列,从 n=2
直到 n-2
。然后为了计算 Ax=b
,为了找到 x
,我使用乘法:
x = np.dot(np.linalg.inv(A), b)
但没有得到正确答案。有什么帮助吗?我也完整地发布了我的代码:
import numpy as np
n = 10
################## AAAAA matrix #############################################
A = np.zeros([n, n], dtype=float) # initialize to f zeros
# ------------------first row
A[0][0] = 6
A[0][1] = -4
A[0][2] = 1
# ------------------second row
A[1][0] = -4
A[1][1] = 6
A[1][2] = -4
A[1][3] = 1
# --------------two last rows-----
# n-2 row
A[- 2][- 1] = -4
A[- 2][- 2] = 6
A[- 2][- 3] = -4
A[- 2][- 4] = 1
# n-1 row
A[- 1][- 1] = 6
A[- 1][- 2] = -4
A[- 1][- 3] = 1
# --------------------------- from second to n-2 row --------------------------#
j = 0
for i in range(2, n - 2):
if j == (n - 4):
break
A[i][j] = 1
j = j + 1
j = 1
for i in range(2, n - 2):
if j == (n - 3):
break
A[i][j] = -4
j = j + 1
j = 2
for i in range(2, n - 2):
if j == (n - 2):
break
A[i][j] = 6
j = j + 1
j = 3
for i in range(2, n - 2):
if j == (n - 1):
break
A[i][j] = -4
j = j + 1
j = 4
for i in range(2, n - 2):
if j == (n):
break
A[i][j] = 1
j = j + 1
# -----------------------------end coding of 2nd to n-2 r-------------#
print("\nMatrix A is : \n", A)
####### b matrix ######################################
b = np.zeros(n,float).reshape((n,1))
b[0] = 3
b[1] = -1
#b[len(b) - 1] = 3
#b[len(b) - 2] = -1
b[[0,-1]]=3; b[[1,-2]]=-1
print("\nMatrix b is \n", b)
#################### result ########################
x = np.dot(np.linalg.inv(A), b)
print("\n\n The result is : \n", x)
实际上我得到了所有 1s
的结果,如您所见:
我会这样做:
# create matrix A
n=10
row = np.zeros(n+4)
row[:5] = [1,-4,6,-4,1]
A = np.zeros((n,n+4))
for i in range(n):
A[i] = np.roll(row, i)
A = A[:,2:-2]
# create vector b
b = np.zeros(n)
b[[0,-1]] = 3
b[[1,-2]] = -1
# solution
x = np.linalg.inv(A) @ b # equivalent to np.matmul(np.linalg.inv(A), b)
输出(x
):
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]
你也得到了。为什么您认为这是不正确的?
使用matmul
方法使它:
import numpy as np
A = np.array([[1,2], [3,4]], dtype=float)
B = np.array([[3], [4]])
print(np.matmul(np.linalg.inv(A), B))