Matlab代码:
% parameter
% 梯度下降法, gradient descent
% heart_scale 数据,
% Iteration fuction: x(n+1)= x(n)- alpha*grad
% f(x)= 1/2*||y- Ax||^2, 让f(x)最小
% create data
A= rand(20);
y= rand(20, 1);
x= rand(20, 1); % initialize x
% parameter
alpha= 0.001;
iter= 1;
error= 1;
maxiter= 300;
while error> 1e-1 && iter< maxiter
f(iter)= 1/2*(norm(A*x- y))^2;
x_new= x- alpha*(A'*A*x- A'*y);
newf= 1/2*(norm(A*x_new- y))^2;
fprintf('The %dth iteration, f = %f, \n', iter, f(iter));
error= f(iter)- newf;
x= x_new;
iter= iter+ 1;
end
plot(f, 'r-')
xlabel('Number of iteration')
ylabel('Value of function')
legend('Gradient descent')