最速下降法matlab代码实现
时间: 2023-12-15 17:03:15 浏览: 174
下面是一个简单的最速下降法的Matlab代码实现:
```matlab
% 定义函数
f = @(x) x(1)^2 + 2*x(2)^2 - 2*x(1)*x(2) - 4*x(1);
% 定义梯度
grad_f = @(x) [2*x(1) - 2*x(2) - 4; 4*x(2) - 2*x(1)];
% 定义初始点
x0 = [0;0];
% 定义迭代次数
max_iter = 100;
% 定义迭代步长
alpha = 0.1;
% 进行最速下降法迭代
for i = 1:max_iter
% 计算梯度
grad = grad_f(x0);
% 计算迭代步长
step_size = alpha*norm(grad);
% 计算下一个点
x1 = x0 - step_size*grad;
% 判断是否收敛
if norm(x1-x0) < 1e-6
break;
end
% 更新x0
x0 = x1;
end
% 输出结果
disp(['迭代次数:' num2str(i)]);
disp(['最优解:' num2str(x0')]);
disp(['最优值:' num2str(f(x0))]);
```
这个例子中,我们定义了一个函数 $f(x,y)=x^2+2y^2-2xy-4x$,并使用最速下降法求解该函数的最小值。在代码中,我们首先定义了函数 $f(x,y)$ 和梯度 $\nabla f(x,y)$,然后定义了初始点 $x_0$、最大迭代次数和迭代步长。接下来,我们使用一个 for 循环进行最速下降法的迭代,直到满足收敛条件为止。最后,我们输出了迭代次数、最优解和最优值。
阅读全文