如何在R中绘制带约束的二元线性方程z = wx1 - (1-w)x2?
问题分析与代码改进
原代码无法运行的核心问题:
x1和x2未被赋值,仅写x1<=19266669.5只会生成一个逻辑值TRUE/FALSE,无法参与后续计算。- 约束条件
x1<=19266669.5和x2<=52575341.065需要转化为给变量设定符合范围的具体数值,才能代入公式计算z。
方案1:固定符合约束的x1、x2值绘图
先给x1、x2指定约束范围内的具体值(比如取最大值,或任意符合条件的数值),再计算z并绘图:
# 生成w序列 w <- seq(0, 1, 0.1) # 给x1、x2赋值(符合约束条件) x1 <- 19266669.5 # 取约束上限,也可以设为比如10000000 x2 <- 52575341.065 # 取约束上限,也可以设为比如30000000 # 计算z值 z <- w * x1 - (1 - w) * x2 # 绘图 plot(w, z, type = "l", lwd = 2, col = "red", main = "z = w*x1 - (1-w)*x2", xlab = "w", ylab = "z")
方案2:绘制多组x1、x2组合的曲线
如果想展示不同x1、x2(均符合约束)下的曲线变化,可以用循环生成多条线:
w <- seq(0, 1, 0.1) # 定义多组符合约束的x1、x2组合 x_values <- list( list(x1 = 10000000, x2 = 20000000), list(x1 = 15000000, x2 = 40000000), list(x1 = 19266669.5, x2 = 52575341.065) ) # 初始化绘图区域 plot(w, w*0, type = "n", ylim = range(sapply(x_values, function(x) w*x$x1 - (1-w)*x$x2)), main = "z = w*x1 - (1-w)*x2 (不同x1、x2组合)", xlab = "w", ylab = "z") # 循环绘制每条曲线 colors <- c("red", "blue", "green") for (i in seq_along(x_values)) { x1 <- x_values[[i]]$x1 x2 <- x_values[[i]]$x2 z <- w * x1 - (1 - w) * x2 lines(w, z, lwd = 2, col = colors[i]) } # 添加图例 legend("topleft", legend = sapply(x_values, function(x) paste0("x1=",x$x1,"\nx2=",x$x2)), col = colors, lwd = 2)
内容的提问来源于stack exchange,提问作者Chouette
相关产品推荐
相关产品推荐

