R语言完整代码,直接求解函数f(x)=e⁻ˣ²(x+sinx)在区间[-2,2]上的极小值点和极大值点。
时间: 2024-10-22 21:20:09 浏览: 18
4.4.3 不同函数增长的差异——小学生ppt学习课件
R语言中可以使用`optim`函数结合`uniroot`函数来解决非线性优化问题,包括求解极值点。首先,我们需要编写一个函数表示目标函数f(x),然后利用`optim`函数寻找最小值点,再通过改变搜索方向找到最大值点。下面是完整的R代码:
```r
# 定义目标函数 f(x) = e^(-x^2)(x + sin(x))
f <- function(x) {
exp(-x^2) * (x + sin(x))
}
# 搜索最小值点(默认为最小化)
minimize_result <- optim(c(-2, 2), f, method = "Brent", lower = -2, upper = 2)
min_x <- minimize_result$par
min_value <- minimize_result$value
# 判断是否需要切换搜索方向来寻找最大值点
if(minimize_result$minimum == TRUE) { # 如果是最小值,则从负向开始寻找最大值
max_search_direction <- -1
} else { # 否则从正向开始寻找
max_search_direction <- 1
}
# 使用uniroot函数从已知最小值两侧开始寻找最大值
max_root <- uniroot(function(x) f(x) - max_value, c(min_x * max_search_direction, 2), maximize = TRUE)$root
max_x <- max_root
max_value <- f(max_x)
# 输出结果
cat("最小值点:", min_x, "最小值:", min_value, "\n")
cat("极大值点:", max_x, "极大值:", max_value, "\n")
阅读全文