Python spsolve ValueError

Python spsolve ValueError

我正在尝试使用 spsolve 求解规范形式的系统。 不幸的是,我收到一条我不理解的错误消息。

我的代码

A11 = nablaTnabla + lamda*diag_Ix_squared
A12 = lamda*diag_Ix_Iy
A21 = lamda*diag_Ix_Iy
A22 = nablaTnabla + lamda*diag_Iy_squared 

b0 = lamda*(Ix*(Ix*u_0 + Iy*v_0 - It))
b1 = lamda*(Iy*(Ix*u_0 + Iy*v_0 - It))
A = np.matrix([[A11,A12],[A21,A22]])
b0 = b0.flatten()
b1 = b1.flatten()
b = np.array([b0,b1])
u,v = sp.linalg.spsolve(A,b)

我收到以下 spsolve 错误消息: ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()。

A 的形状为:(2,2) b 的形状为:(2, 226592)

我不知道如何解决该错误。有人可以帮我吗?

我发现了问题。我混淆了稀疏矩阵和密集矩阵,所以 spsolve 无法计算系统。 变量 diag_Ix_squared 是一个稀疏矩阵,所以其余的也必须是一个。

  M = u.shape[0]
  N = u.shape[1]
  nabla = spnabla(M,N)
  nablaTnabla = nabla.T*nabla
  u_0 = u
  v_0 = v
  Ix_flat = Ix.flatten()
  Iy_flat = Iy.flatten()
  diag_Ix_squared = sp.spdiags(Ix_flat*Ix_flat, 0, M*N, M*N)
  diag_Ix_Iy = sp.spdiags(Ix_flat*Iy_flat, 0, M*N, M*N)
  diag_Iy_squared = sp.spdiags(Iy_flat*Iy_flat, 0, M*N, M*N)

  A11 = nablaTnabla + lamda*diag_Ix_squared
  A12 = lamda*diag_Ix_Iy
  A21 = lamda*diag_Ix_Iy
  A22 = nablaTnabla + lamda*diag_Iy_squared

  b0 = lamda*(Ix*(Ix*u_0 + Iy*v_0 - It))
  b0 = b0.ravel()
  b1 = lamda*(Iy*(Ix*u_0 + Iy*v_0 - It))
  b1 = b1.ravel()


  A = sp.bmat([[A11,A12],[A21,A22]])

  b =  np.concatenate((b0,b1))

  x = sp.linalg.spsolve(A,b)
  u = x[:M*N]
  v = x[M*N:]
  u = np.reshape(u, (M,N))
  v = np.reshape(v, (M,N))