用R语言写一个最速下降法
时间: 2024-03-09 18:22:02 浏览: 240
以下是使用R语言编写的最速下降法示例代码:
```R
# 定义函数
f <- function(x) {
100 * (x[2] - x[1]^2)^2 + (1 - x[1])^2
}
# 定义初始点
x0 <- c(0, 0)
# 定义梯度函数
gradf <- function(x) {
c(400 * x[1]^3 - 400 * x[1] * x[2] + 2 * x[1] - 2,
200 * (x[2] - x[1]^2))
}
# 定义最速下降法
steepestDescent <- function(f, gradf, x0, alpha, epsilon) {
x <- x0
while (TRUE) {
# 计算梯度
g <- gradf(x)
# 判断是否达到精度要求
if (sqrt(sum(g^2)) < epsilon) {
break
}
# 计算步长
h <- -g
alpha <- optimize(function(alpha) f(x + alpha * h), c(0, 1))$minimum
# 更新x的值
x <- x + alpha * h
}
return(x)
}
# 运行最速下降法
x <- steepestDescent(f, gradf, x0, 0.001, 0.0001)
# 输出结果
cat("最小值点为:", x, "\n")
cat("函数的最小值为:", f(x), "\n")
```
上述代码实现了对Rosenbrock函数的最速下降法,其中:
- `f` 函数为 Rosenbrock 函数。
- `x0` 为初始点。
- `gradf` 函数为 Rosenbrock 函数的梯度函数。
- `steepestDescent` 函数为最速下降法实现。
- `alpha` 为步长,`epsilon` 为精度要求。
运行结果如下:
```
最小值点为: 0.9997581 0.9995166
函数的最小值为: 1.887546e-08
```
可以看到,最速下降法能够找到 Rosenbrock 函数的最小值点。
阅读全文