git-svn-id: http://moon:8086/svn/matlab/trunk@91 801c6759-fa7c-4059-a304-17956f83a07c
42 lines
1.2 KiB
Matlab
42 lines
1.2 KiB
Matlab
function numgrad = computeNumericalGradient(J, theta)
|
|
% numgrad = computeNumericalGradient(J, theta)
|
|
% theta: a vector of parameters
|
|
% J: a function that outputs a real-number. Calling y = J(theta) will return the
|
|
% function value at theta.
|
|
|
|
% Initialize numgrad with zeros
|
|
numgrad = zeros(size(theta));
|
|
|
|
%% ---------- YOUR CODE HERE --------------------------------------
|
|
% Instructions:
|
|
% Implement numerical gradient checking, and return the result in numgrad.
|
|
% (See Section 2.3 of the lecture notes.)
|
|
% You should write code so that numgrad(i) is (the numerical approximation to) the
|
|
% partial derivative of J with respect to the i-th input argument, evaluated at theta.
|
|
% I.e., numgrad(i) should be the (approximately) the partial derivative of J with
|
|
% respect to theta(i).
|
|
%
|
|
% Hint: You will probably want to compute the elements of numgrad one at a time.
|
|
|
|
epsilon = 1e-4;
|
|
|
|
for i =1:length(numgrad)
|
|
oldT = theta(i);
|
|
theta(i)=oldT+epsilon;
|
|
pos = J(theta);
|
|
theta(i)=oldT-epsilon;
|
|
neg = J(theta);
|
|
numgrad(i) = (pos-neg)/(2*epsilon);
|
|
theta(i)=oldT;
|
|
if mod(i,100)==0
|
|
fprintf('Done with %d\n',i);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
%% ---------------------------------------------------------------
|
|
end
|