SageMath求解x=Ax时符号向量等式返回False 如何获取对应方程向量
问题原因
SageMath 中对向量使用==运算符时,默认执行布尔全等判定:会直接校验两个向量的每个分量是否恒等,不会生成逐元素相等的符号方程组。你的场景中x和A*x显然不是对任意x_1,x_2,x_3都相等,因此直接返回布尔值False。
解决方法
你可以通过以下两种方式得到逐坐标相等的符号方程组:
- 手动遍历分量生成等式
A = matrix(QQ, [[0, 4, 4], [1, 2, 2], [1, 2, 0]]) x = vector([var("x_1"), var("x_2"), var("x_3")]) # 逐分量生成相等关系 eqs = [x[i] == (A*x)[i] for i in range(A.nrows())] print(eqs)
输出结果:
[x_1 == 4*x_2 + 4*x_3, x_2 == x_1 + 2*x_2 + 2*x_3, x_3 == x_1 + 2*x_2]
- 调用内置
equations()方法
先计算A*x - x得到差向量,再调用equations()方法,会自动将每个分量设为等于0,等价于你需要的x == A*x方程组:
eqs = (A*x - x).equations()
得到的结果和手动生成的完全一致。
如果你后续需要求解该方程组,直接将等式列表传入solve方法即可:
solve(eqs, [x_1, x_2, x_3])
此外这个方程组本质是求矩阵A特征值为1的特征向量,你也可以直接用A.eigenvectors()方法直接获取对应特征空间的解。
内容的提问来源于stack exchange,提问作者tbrugere
相关产品推荐
相关产品推荐

