--- /dev/null
+function g = extended_powell_gradient1(x)
+ ##
+ ## The gradient of the extended Powell function. See
+ ## extended_powell1.m for more information.
+ ##
+ ## Since the number of arguments is variable, we take a vector
+ ## instead of its individual components.
+ ##
+ n = length(x);
+
+ if (odd(n))
+ ## 'm' below must be an integer.
+ g = NA;
+ return;
+ end
+
+ m = n / 4;
+ g = zeros(n, 1);
+
+ % The extended Powell is simply a sum of Powell
+ % applications.
+ for k = [ 1 : m ]
+ y1 = x(4*k - 3);
+ y2 = x(4*k - 2);
+ y3 = x(4*k - 1);
+ y4 = x(4*k);
+
+ g_k = powell_gradient(y1, y2, y3, y4);
+
+ for i = [ 1 : 4 ]
+ g(4*(k-1) + i) = g(4*(k-1) + i) + g_k(i);
+ end
+
+ end
+end