R语言下三角线性方程组求解程序通用版本报错求助
下三角矩阵求解函数的错误分析与修正
你的通用版本Lsolve无法正常运行的核心问题出在循环内的求和逻辑上:
- 原代码中
sum(L[i,i-1]*b[i-1])只计算了第i行第i-1列元素与b[i-1]的乘积,漏掉了第i行前i-2个元素(即L[i,1]到L[i,i-2])与对应b[1]到b[i-2]的乘积项。下三角矩阵的前向替换需要累加第i行所有左侧非零元素(从第1列到第i-1列)与已求解的b[1]到b[i-1]的乘积,而不是仅最后一项。
修正后的代码
Lsolve <- function(L,b) { # 输入合法性检查 if (nrow(L) != ncol(L)) stop("L必须是方阵") if (length(b) != nrow(L)) stop("b的长度必须与L的行数一致") # 前向替换计算 b[1] <- b[1] / L[1,1] for(i in 2:nrow(L)) { # 取第i行前i-1个元素,与对应已求解的b值相乘后求和 b[i] <- (b[i] - sum(L[i, 1:(i-1)] * b[1:(i-1)])) / L[i,i] } return(b) }
测试验证
用你之前的3×3矩阵场景验证:
# 构造3x3下三角矩阵 L <- matrix(c(2,0,0, 1,3,0, 4,2,5), nrow=3, byrow=TRUE) b <- c(4, 10, 22) # 修正后函数求解 Lsolve(L, b) # 输出:[1] 2 2 2 # 原3x3版本求解 L3solve(L, b) # 输出一致:[1] 2 2 2
内容的提问来源于stack exchange,提问作者Mugge
相关产品推荐
相关产品推荐

