Gradient 
calculate it with Matlab
We are going to include the concepts in our Derivative
function created before,
to develop a Matlab function to calculate the gradient of a multidimensional scalar function.
The function is going to have the following functionality:
% Usage:
g = Grad(fun, x0)
% fun:
name of the multidimensional scalar function
% (string).
This function
takes a vector argument of
% length n and
returns a scalar.
% x0:
point of interest (vector of length n)
% g:
column vector containing the gradient of fun at x0. The
%
size(g) = size(x)
function
g = Grad(fun, x0)
%
delta(i)
is relative to x0(i)
delta =
x0 /
1000;
for i =
1 : length(x0)
if x0(i) == 0
% avoids delta(i) = 0 (**arbitrary value**)
delta(i) =
1e12;
end
% recovers original x0
u =
x0;
u(i) = x0(i) + delta(i);
% fun(x0(i1), x0(i)+delta(i), x0(i+1), ...)
f1 = feval ( fun, u
);
u(i) = x0(i)  delta(i);
% fun(x0(i1), x0(i)delta(i), x0(i+1), ...)
f2 = feval ( fun, u
);
% partial derivatives in column vector
g(i,1) = (f1  f2) / (2 *
delta(i));
end
We can try this algorithm, creating a function bowl (which includes two
variables) in an separate mfile, as follows:
function
y = bowl(x)
y =
(x(1)6)^2 + (x(2)4.5)^4 / 25;
Then, we can test it from the command window:
x = [0 0]
f =
'bowl'
Grad(f,
x)
Expected:
[12 14.58]' Obtained:
[12.0011 14.5803]'
x = [1 1]
Grad(f,
x)
Expected:
[10 6.86]' Obtained:
[10.0000 6.8600]'
x = [6
4.5]
Grad(f,
x)
Expected:
[0 0]'
Obtained:
[0 0]'
x = [2
1.5]
Grad(f,
x)
Expected:
[8 4.32]' Obtained:
[8.0000 4.3200]'
Now, another test with a different multivariable function:
function
y = semirosen(x)
y = 100
* ( x(2)  x(1)^2 ) + ( 1  x(1) )^2 ;
x = [0 0]
f =
'semirosen'
Grad(f,
x)
Expected:
[2 100]'
Obtained:
[2.0]'
x = [1 1]
Grad(f,
x)
Expected:
[200 100]'
Obtained: [200.0]'
x = [9
15]
Grad(f,
x)
Expected:
[1784 100]'
Obtained: 1.0e+003 *[1.7840 0.1000]'
From
'Gradient' to home
From
'Gradient' to 'Matlab Cookbook'
Calculus

