使用R语言编写一个最速下降法的代码
时间: 2024-05-12 12:18:43 浏览: 127
最速下降法代码
以下是使用R语言编写最速下降法的代码:
```R
# 定义目标函数
f <- function(x) {
return(x[1]^2 + 2*x[2]^2 - 2*x[1]*x[2] - 4*x[1])
}
# 定义梯度函数
grad_f <- function(x) {
return(c(2*x[1] - 2*x[2] - 4, 4*x[2] - 2*x[1]))
}
# 定义最速下降法函数
steepest_descent <- function(f, grad_f, x0, eps = 1e-6, alpha = 0.1) {
x <- x0
while(TRUE) {
# 计算梯度
grad <- grad_f(x)
# 判断是否达到精度要求
if (sqrt(sum(grad^2)) < eps) {
break
}
# 更新x
x <- x - alpha * grad
}
return(x)
}
# 使用最速下降法求解目标函数的最小值
x0 <- c(0, 0)
x_min <- steepest_descent(f, grad_f, x0)
cat("最小值点:", x_min, "\n")
cat("最小值:", f(x_min), "\n")
```
在上面的代码中,我们定义了目标函数和梯度函数,并使用最速下降法函数 `steepest_descent()` 求解最小值点和最小值。其中,参数 `eps` 和 `alpha` 分别表示精度要求和步长大小。在这个例子中,我们使用了默认值,即 `eps=1e-6` 和 `alpha=0.1`。
阅读全文