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

如何在R语言中批量求解数据框每行的二元线性方程组

批量求解每行的二元线性方程组(供需均衡计算)

针对你的数据集,每行对应一组供需曲线的二元线性方程组,以下是三种批量求解并添加结果列的方法:

方法1:使用apply函数(简洁直观)

利用apply按行遍历数据框,对每行执行求解函数,再将结果合并回原数据:

# 定义单行求解函数
solve_single_eq <- function(row) {
  coeff_matrix <- rbind(c(row["y1"], row["x1"]),
                        c(row["y2"], row["x2"]))
  const_vector <- c(row["b1"], row["b2"])
  solve(coeff_matrix, const_vector)
}

# 批量处理所有行,转置结果为矩阵
eq_solutions <- t(apply(df, 1, solve_single_eq))

# 将结果添加到原数据框
df$Price <- eq_solutions[, 1]
df$Quantity <- eq_solutions[, 2]

方法2:向量化解析解(高效首选)

对于二元线性方程组,可直接利用代数解析公式计算,避免循环/迭代,效率更高:
给定方程组:

y1*Price + x1*Quantity = b1
y2*Price + x2*Quantity = b2

解析解推导:

  • 行列式:det = y1*x2 - x1*y2
  • 均衡价格:Price = (b1*x2 - b2*x1)/det
  • 均衡数量:Quantity = (y1*b2 - y2*b1)/det

对应R代码:

# 计算行列式
df$det <- df$y1 * df$x2 - df$x1 * df$y2

# 计算均衡价格和数量
df$Price <- (df$b1 * df$x2 - df$b2 * df$x1) / df$det
df$Quantity <- (df$y1 * df$b2 - df$y2 * df$b1) / df$det

# 可选:删除临时行列式列
# df$det <- NULL

方法3:修正后的循环写法

如果之前循环失败,可能是初始化或索引问题,以下是正确的逐行循环实现:

# 初始化结果列
df$Price <- NA_real_
df$Quantity <- NA_real_

# 逐行求解并赋值
for (i in seq_len(nrow(df))) {
  A <- rbind(c(df$y1[i], df$x1[i]),
             c(df$y2[i], df$x2[i]))
  B <- c(df$b1[i], df$b2[i])
  solution <- solve(A, B)
  df$Price[i] <- solution[1]
  df$Quantity[i] <- solution[2]
}

验证结果

三种方法得到的结果一致,第一行的均衡价格为~2460.396,均衡数量为~764595,与你手动求解的结果匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:53:17