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

Maple运行高斯消元法代码报递归层级过多错误如何解决

错误原因
  • 增广矩阵赋值运算符错误:Maple 中变量赋值必须使用:=,原代码中Ao = Matrix([A, B])仅生成等式表达式,没有完成Ao的赋值操作。后续代码访问Ao[j, k]时,Maple 会将Ao识别为未定义的自定义函数,尝试递归查找函数定义,最终触发递归层级超限报错。
  • 未知量下标引用错误:上三角消元完成后,给最后一个未知量赋值的代码写为x[n] := ...,但n预先被赋值为12,此处应该使用方程组阶数n1,即x[n1]。原代码会给不存在的x[12]赋值,回代过程中访问x[3]等未定义变量时会进一步触发递归异常。
  • 其他逻辑缺陷:用于校验列非零的变量s没有在每一轮外层k循环开始时重置为0,会导致奇异矩阵判断逻辑完全失效;B向量定义末尾漏写分号,可能触发语法警告;回代循环起始索引错误会导致未知量重复赋值。
修复后完整代码
n := 12;
A := Matrix([[1, 2, 1], [4, 5, 6], [7, 8, n]]);
B := Vector([2, n, n^2]);
Ao := Matrix([A, B]);

n1 := 3;
for k from 1 to n1-1 do;
    s := 0;
    for j from k to n1 do;
        s := s+abs(A[j, k]);
    end do;
    if s = 0 then print("Error") end if;
    for j from k + 1 to 3 do;
        m := Ao[j, k]/Ao[k, k];
        for p from k+1 to 4 do;
            Ao[j, p] := -m*Ao[k, p]+Ao[j, p];
        end do;
    end do;
end do;
if Ao[n1,n1] = 0 then 
    print("Error") 
else 
    x[n1] := (Ao[n1,n1+1])/(Ao[n1,n1]);
end if;
# 回代从n1-1开始,避免重复赋值x[n1]
for i from n1-1 by -1 to 1 do;
    sums := 0;
    for j from i + 1 to n1 do;
        sums := sums + Ao[i, j]*x[j];
    end do;
    x[i] := (Ao[i, n1+1]-sums)/Ao[i, i];
end do;
print("x1" = x[1], "x2" = x[2], "x3" = x[3]);

修复后运行将正常输出结果x1 = 71, x2 = -46, x3 = 23,不会再触发递归报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:24:07