You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SageMath中求解向量变换矩阵与向量的代码错误排查

错误原因分析

1. 矩阵与向量乘法的类型不匹配问题

你的代码里,t[i,:]是1×2的行矩阵,p[:,j]是2×1的列矩阵,二者相乘得到的是1×1的矩阵,而非标量。而q[i]是标量(来自向量q),p2[i,j]也是标量。当你尝试让标量和「标量+1×1矩阵」做相等判断时,Sage会直接返回False——因为类型不匹配,无法生成预期的符号等式。

2. 循环范围未覆盖全部输入输出对

你只遍历了j in range(2),仅处理前两个输入输出向量对,生成了4个方程,但需要求解的变量有6个(a、b、c、d、e、f)。你的需求是用3个输入输出对确定仿射变换,必须遍历j in range(3)才能生成完整的6个方程,这样才能得到唯一解(或判断是否存在解)。

修正后的代码
var('a b c d e f')
# 输入向量:每一列对应一个输入向量(2行3列矩阵)
p = matrix([[-3, 0, 6], [4, 8, 6]])
# 输出向量:每一列对应一个输出向量(2行3列矩阵)
p2 = matrix([[1, 6, 8], [-4, -4, 2]])
q = vector([a, b])
t = matrix([[c, d], [e, f]])

# 使用点积确保结果为标量,同时遍历全部3组输入输出对
eqs = [p2[i,j] == q[i] + t[i,:].dot_product(p[:,j]) for i in range(2) for j in range(3)]
show(eqs)

solve(eqs, [a,b,c,d,e,f])

也可以通过转换为向量来实现标量乘法:

eqs = [p2[i,j] == q[i] + vector(t[i,:]) * vector(p[:,j]) for i in range(2) for j in range(3)]
修正效果验证

修改后,show(eqs)会输出6个符合预期的符号等式,例如:

1 == a - 3*c + 4*d,
6 == a + 8*d,
8 == a + 6*c + 6*d,
-4 == b - 3*e + 4*f,
-4 == b + 8*f,
2 == b + 6*e + 6*f

运行solve后会得到唯一解,满足你的变换需求。

内容的提问来源于stack exchange,提问作者Mauri Crespo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 12:26:08