Sympy求和计算行列式报错:cannot determine truth value of Relational
解决Sympy中使用summation计算行列式时的TypeError问题
问题原因
当用符号变量i作为索引调用m.cofactor(i,0)时,cofactor方法内部会执行索引合法性检查(比如if i < 0:),但符号变量与数值的比较会返回**关系式(Relational)**而非布尔值,Sympy无法确定该关系式的真值,因此抛出TypeError: cannot determine truth value of Relational。
而直接访问m[i,0]可以正常运行,是因为Sympy矩阵支持符号索引的直接取值,但cofactor方法的实现并未兼容符号索引场景。
解决方案
由于索引范围仅为0-2,可以直接手动展开求和项,或用Python原生循环累加,避免使用符号变量作为cofactor的索引:
方案1:手动展开求和
from sympy import Matrix m = Matrix([[3, 2, -1], [2, -1, -3], [1, 3, -2]]) # 按第一列展开计算行列式 D = m[0,0]*m.cofactor(0,0) + m[1,0]*m.cofactor(1,0) + m[2,0]*m.cofactor(2,0) print(D) # 输出28
方案2:Python循环累加
from sympy import Matrix m = Matrix([[3, 2, -1], [2, -1, -3], [1, 3, -2]]) D = sum(m[k, 0] * m.cofactor(k, 0) for k in range(3)) print(D) # 输出28
验证结果
两种方案的结果均与m.det()一致:
print(m.det()) # 输出28
内容的提问来源于stack exchange,提问作者mins
相关产品推荐
相关产品推荐

