我正在寻找一个可以解决复杂方程组的矩阵;也就是说,很难将方程展平为矢量形式。这是一个玩具示例,显示了我收到的错误:
from sympy import nsolve, symbols, Inverse
from sympy.polys.polymatrix import PolyMatrix
import numpy as np
import itertools as itr
nnodes = 2
nodes = list(range(nnodes))
u_mat = PolyMatrix([symbols(f'u{i}{j}') for i, j in itr.product(nodes, nodes)]).reshape(2, 2)
u_mat_inv = Inverse(u_mat)
equations = [
u_mat_inv[0, 0] - 1,
u_mat_inv[0, 1] - 0,
u_mat_inv[1, 0] - 0,
u_mat_inv[1, 1] - 1
]
s = nsolve(equations, u_mat, np.ones(4))
这将引发以下错误:
TypeError: X must be a row or a column matrix
有没有办法解决这个问题而不必以矢量形式编写方程?
我认为nsolve
变得混乱u_mat
因为它是一个矩阵。传递list(u_mat)
将按照nsolve
的预期给出输入。下一个问题是你选择的初始猜测是方程组的奇点。
不过,您可以在此处使用普通求解:
In [24]: solve(equations, list(u_mat))
Out[24]: [(1, 0, 0, 1)]