如何在R语言中求解含正整数约束的三维非线性不等式组
求解正整数非线性不等式组及可视化
一、生成所有解的元组列表
针对不等式组:
x*y >= 420 x*z >= 14 x*y*z < 5000
其中x、y、z为正整数,可通过R语言遍历筛选符合条件的组合,代码如下:
# 初始化空列表存储解 solutions <- list() index <- 1 # 由x*y≥420、x*y*z<5000推导z≤11 for (z in 1:11) { # 由x*z≥14确定x的最小取值 min_x <- ceiling(14 / z) # 由x*y*z<5000、y≥1确定x的最大取值 max_x <- floor(4999 / z) if (min_x > max_x) next for (x in min_x:max_x) { # y的最小取值:满足x*y≥420的最小正整数 min_y <- ceiling(420 / x) # y的最大取值:满足x*y*z<5000的最大正整数 max_y <- floor(4999 / (x * z)) if (min_y > max_y) next # 生成所有符合条件的y值并组合成元组 for (y in min_y:max_y) { solutions[[index]] <- c(x, y, z) index <- index + 1 } } } # 转换为数据框方便查看 sol_df <- do.call(rbind, solutions) colnames(sol_df) <- c("x", "y", "z") # 查看前几行解 head(sol_df)
运行后,sol_df即为所有符合条件的(x,y,z)元组数据框,可直接查看或导出。
二、三维可视化
静态三维散点图
使用scatterplot3d包绘制静态图:
# 首次运行需安装包 # install.packages("scatterplot3d") library(scatterplot3d) scatterplot3d(sol_df$x, sol_df$y, sol_df$z, xlab = "x", ylab = "y", zlab = "z", color = "darkblue", pch = 16, main = "正整数解的三维分布")
交互式三维散点图
使用plotly包生成可交互的可视化图:
# 首次运行需安装包 # install.packages("plotly") library(plotly) plot_ly(sol_df, x = ~x, y = ~y, z = ~z, type = "scatter3d", mode = "markers", marker = list(color = "darkblue", size = 3)) %>% layout(title = "正整数解的三维分布", scene = list(xaxis = list(title = "x"), yaxis = list(title = "y"), zaxis = list(title = "z")))
内容的提问来源于stack exchange,提问作者FlameAA
相关产品推荐
相关产品推荐

