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
相关产品推荐
相关产品推荐

