Open Modelica矩阵乘法模型报错求助:方程过多等问题排查
问题分析与修复
错误原因
sum_vs被定义为parameter(参数),参数是编译时确定的常量,不允许在equation块中重复赋值,这直接导致系统生成了多余方程(4次sum_vs赋值+2次vs赋值,共6个方程,但只有vs[2]是变量),引发“方程过多,系统超定”的错误。- 由于
sum_vs是参数而非可求解变量,等式sum_vs = sum_vs + v[j] * A[i,j]左侧没有待求解的变量,因此出现“大小为1但变量数为0”的错误。
修复后的代码
推荐使用sum函数直接计算矩阵行与向量的点积,这种写法简洁且方便扩展到任意维度:
model MatrixMultiplication parameter Real A[2,2] = [1,2; 1,2]; parameter Real v[2] = {1,2}; Real vs[2]; equation // 遍历A的每一行,计算与v的点积 for i in 1:size(A, 1) loop vs[i] = sum(A[i,j] * v[j] for j in 1:size(v, 1)); end for; end MatrixMultiplication;
说明
- 用
size(A,1)获取矩阵A的行数,size(v,1)获取向量v的长度,代替硬编码的数字2,后续扩展到更大维度时无需修改循环范围。 - 直接通过
sum函数计算点积,避免了错误的参数累加操作,同时符合Modelica的代数方程声明规则。 - 运行后
vs的结果为{5, 5},与矩阵乘法A*v的预期结果一致。
内容的提问来源于stack exchange,提问作者Elena
相关产品推荐
相关产品推荐

