首页 > 解决方案 > 使用 R 进行优化的限制

问题描述

继续这里提出的问题,我想在优化中添加一个限制:

a <- c(52.67, 46.80, 41.74, 40.45)
b <- c(1.726219351, 1.842421805, 1.790801758, 1.449997494)

rsq <- function(c) {
  x <- log(a)
  y <- log((c*(a/b))-1)
  summary(lm(y ~ x))$r.squared
}
optimise(rsq, maximum = TRUE, interval=c(1, 1000))

优化的间隔是 1 到 1000,但是我希望间隔从哪里开始

(c*(a/b)) > 0

为了避免出现问题log

标签: rfunctionoptimizationconditional-statements

解决方案


如果 log 参数为负,则只需返回 -Inf。那么就没有必要操纵域了。

rsq <- function(c) {
  x <- log(a)
  tmp <- (c*(a/b))-1
  if (any(tmp < 0)) -Inf else summary(lm(log(tmp) ~ x))$r.squared
}

optimise(rsq, maximum = TRUE, interval=c(1, 1000))

给予:

$maximum
[1] 1.082353

$objective
[1] 0.8093781

更新

固定的。


推荐阅读