最速下降法程序及算例matlab
时间: 2023-07-30 07:05:09 浏览: 107
最速下降法的matlab程序
最速下降法是一种求解无约束优化问题的方法,其基本思想是通过沿着负梯度方向不断迭代来逐步接近最优解。下面是最速下降法的matlab程序及算例:
程序:
```matlab
function [x, fval, n_iter] = steepest_descent(f, grad_f, x0, eps)
% f: 目标函数
% grad_f: 目标函数的梯度
% x0: 初始解
% eps: 精度
n_iter = 0; % 迭代次数
x = x0; % 初始解
fval = f(x); % 目标函数的值
while norm(grad_f(x)) > eps
n_iter = n_iter + 1;
alpha = 0.01; % 步长
p = -grad_f(x); % 梯度方向
x = x + alpha * p; % 迭代更新
fval = f(x); % 更新目标函数的值
end
```
算例:
求解目标函数 $f(x_1, x_2) = x_1^2 + x_2^2$ 的最小值。
```matlab
% 定义目标函数及梯度函数
f = @(x) x(1)^2 + x(2)^2;
grad_f = @(x) [2*x(1); 2*x(2)];
% 初始解及精度
x0 = [1; 1];
eps = 1e-6;
% 调用最速下降法求解
[x, fval, n_iter] = steepest_descent(f, grad_f, x0, eps);
% 输出结果
fprintf('Minimum value of f: %.4f\n', fval);
fprintf('Solution x: [%.4f, %.4f]\n', x(1), x(2));
fprintf('Number of iterations: %d\n', n_iter);
```
运行结果:
```
Minimum value of f: 0.0000
Solution x: [0.0000, 0.0000]
Number of iterations: 40
```
可以看到,最速下降法成功地求解了目标函数的最小值,并且迭代次数为40次。
阅读全文