如何在R语言中求解给定的线性方程组?
在R中求解带约束的线性方程组
首先将原方程整理为标准线性形式,把所有未知量移到左侧,常数项移到右侧:
g + v₁ = 8 + (1/2)v₁ + (1/4)v₂ + (1/4)v₃
g + v₂ = 16 + (1/2)v₁ + 0*v₂ + (1/2)v₃
g + v₃ = 7 + (1/4)v₁ + (1/4)v₂ + (1/2)v₃
移项后得到:
- g + (1/2)v₁ - (1/4)v₂ - (1/4)v₃ = 8
- g - (1/2)v₁ + v₂ - (1/2)v₃ = 16
- g - (1/4)v₁ - (1/4)v₂ + (1/2)v₃ = 7
当设定v₃=0时,方程组简化为仅含g、v₁、v₂的三元一次方程组:
- g + 0.5v₁ - 0.25v₂ = 8
- g - 0.5v₁ + v₂ = 16
- g - 0.25v₁ - 0.25v₂ = 7
将其转化为矩阵形式 M * x = b,其中x = [g, v₁, v₂]^T,在R中可以用solve()函数直接求解:
# 构建系数矩阵M,每行对应一个方程中g、v1、v2的系数 M <- matrix(c(1, 0.5, -0.25, 1, -0.5, 1, 1, -0.25, -0.25), nrow = 3, byrow = TRUE) # 常数项向量b b <- c(8, 16, 7) # 求解方程组 solution <- solve(M, b) # 输出结果,对应g、v1、v2的解 solution
运行后得到的结果会与给定的解一致(浮点数计算可能存在微小误差):
[,1] [1,] 9.2000 [2,] 1.3333 [3,] 7.4667
如果你想基于你已定义的矩阵A和向量q推导,可以从原方程的变形入手:原方程等价于 g + v = q + A %*% v(其中v = [v1, v2, v3]^T),移项得 g*rep(1,3) + (diag(3) - A) %*% v = q。当v3=0时,提取对应行和列,同样能得到上述的系数矩阵M和常数项b。
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

