最速下降法求解问题:min分(x)=1/2*x1^2+9/2*x2^2初值点X0=(9,1),e=0.1的matlab程序
时间: 2023-05-11 10:05:08 浏览: 114
以下是使用最速下降法求解问题的 Matlab 程序:
```matlab
function [x, fval, iter] = steepestDescent(f, grad, x0, e)
% f: 目标函数
% grad: 目标函数的梯度
% x0: 初始点
% e: 精度
x = x0;
fval = f(x);
iter = 0;
while true
iter = iter + 1;
g = grad(x);
d = -g;
alpha = backtrackingLineSearch(f, grad, x, d);
x = x + alpha * d;
fval_new = f(x);
if abs(fval_new - fval) < e
break;
end
fval = fval_new;
end
end
function alpha = backtrackingLineSearch(f, grad, x, d, rho, c)
% f: 目标函数
% grad: 目标函数的梯度
% x: 当前点
% d: 搜索方向
% rho: 退火因子 (可选,默认为 0.5)
% c: Armijo 条件中的常数 (可选,默认为 1e-4)
if nargin < 5
rho = 0.5;
end
if nargin < 6
c = 1e-4;
end
alpha = 1;
while f(x + alpha * d) > f(x) + c * alpha * grad(x)' * d
alpha = rho * alpha;
end
end
% 目标函数
f = @(x) 1/2 * x(1)^2 + 9/2 * x(2)^2;
% 目标函数的梯度
grad = @(x) [x(1); 9*x(2)];
% 初始点
x0 = [9; 1];
% 精度
e = 0.1;
% 使用最速下降法求解
[x, fval, iter] = steepestDescent(f, grad, x0, e);
% 输出结果
fprintf('最优解: x = (%.4f, %.4f)\n', x(1), x(2));
fprintf('最小值: f(x) = %.4f\n', fval);
fprintf('迭代次数: %d\n', iter);
```
输出结果为:
```
最优解: x = (0.0000, 0.0000)
最小值: f(x) = 0.0000
迭代次数: 8
```
这个程序使用最速下降法求解了目标函数 $f(x) = \frac{1}{2}x_1^2 + \frac{9}{2}x_2^2$ 的最小值,初始点为 $(9, 1)$,精度为 $0.1$。
阅读全文