annotate scripts/general/gradient.m @ 18754:0ede4dbb37f1

Overhaul interp1, interp2, interp3 functions. * NEWS: Announce change in 'cubic' interpolation method for interp2 to match Matlab. * bicubic.m: Use interp2 (..., "spline") in %!tests. * interp1.m: Improve docstring. Use switch statement instead of if/elseif tree for simpler code. Use more informative error message than 'table too short'. Add titles to demo plots. Add new demo block showing difference between 'pchip' and 'spline' methods. * interp2.m: Rewrite docstring. Use variable 'extrap' instead of 'extrapval' to match documentation. Use clearer messages in error() calls. Make 'cubic' use the same algorithm as 'pchip' for Matlab compatibility. Use Octave coding conventions regarding spaces between variable and parenthesis. Added input validation tests. * interp3.m: Rewrite docstring. Use clearer messages in error() calls. Make 'cubic' use the same algorithm as 'pchip' for Matlab compatibility. Simplify input processing. Rewrite some %!tests for clarity. Added input validation tests.
author Rik <rik@octave.org>
date Sun, 30 Mar 2014 14:18:43 -0700
parents d63878346099
children 4197fc428c7d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17744
d63878346099 maint: Update copyright notices for release.
John W. Eaton <jwe@octave.org>
parents: 14872
diff changeset
1 ## Copyright (C) 2000-2013 Kai Habel
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
2 ##
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
3 ## This file is part of Octave.
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
4 ##
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
6 ## under the terms of the GNU General Public License as published by
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7001
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7001
diff changeset
8 ## your option) any later version.
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
9 ##
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
13 ## General Public License for more details.
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
14 ##
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7001
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7001
diff changeset
17 ## <http://www.gnu.org/licenses/>.
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
18
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
19 ## -*- texinfo -*-
10793
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10635
diff changeset
20 ## @deftypefn {Function File} {@var{dx} =} gradient (@var{m})
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
21 ## @deftypefnx {Function File} {[@var{dx}, @var{dy}, @var{dz}, @dots{}] =} gradient (@var{m})
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
22 ## @deftypefnx {Function File} {[@dots{}] =} gradient (@var{m}, @var{s})
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
23 ## @deftypefnx {Function File} {[@dots{}] =} gradient (@var{m}, @var{x}, @var{y}, @var{z}, @dots{})
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
24 ## @deftypefnx {Function File} {[@dots{}] =} gradient (@var{f}, @var{x0})
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
25 ## @deftypefnx {Function File} {[@dots{}] =} gradient (@var{f}, @var{x0}, @var{s})
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
26 ## @deftypefnx {Function File} {[@dots{}] =} gradient (@var{f}, @var{x0}, @var{x}, @var{y}, @dots{})
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
27 ##
9165
8c71a86c4bf4 Update section 17.5 (Utility Functions) of arith.txi
Rik <rdrider0-list@yahoo.com>
parents: 9141
diff changeset
28 ## Calculate the gradient of sampled data or a function. If @var{m}
8c71a86c4bf4 Update section 17.5 (Utility Functions) of arith.txi
Rik <rdrider0-list@yahoo.com>
parents: 9141
diff changeset
29 ## is a vector, calculate the one-dimensional gradient of @var{m}. If
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
30 ## @var{m} is a matrix the gradient is calculated for each dimension.
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
31 ##
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
32 ## @code{[@var{dx}, @var{dy}] = gradient (@var{m})} calculates the one
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
33 ## dimensional gradient for @var{x} and @var{y} direction if @var{m} is a
9051
1bf0ce0930be Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents: 9015
diff changeset
34 ## matrix. Additional return arguments can be use for multi-dimensional
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
35 ## matrices.
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
36 ##
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
37 ## A constant spacing between two points can be provided by the
9051
1bf0ce0930be Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents: 9015
diff changeset
38 ## @var{s} parameter. If @var{s} is a scalar, it is assumed to be the spacing
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
39 ## for all dimensions.
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
40 ## Otherwise, separate values of the spacing can be supplied by
10793
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10635
diff changeset
41 ## the @var{x}, @dots{} arguments. Scalar values specify an equidistant
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10635
diff changeset
42 ## spacing.
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10635
diff changeset
43 ## Vector values for the @var{x}, @dots{} arguments specify the coordinate for
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10635
diff changeset
44 ## that
9051
1bf0ce0930be Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents: 9015
diff changeset
45 ## dimension. The length must match their respective dimension of @var{m}.
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
46 ##
9051
1bf0ce0930be Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents: 9015
diff changeset
47 ## At boundary points a linear extrapolation is applied. Interior points
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
48 ## are calculated with the first approximation of the numerical gradient
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
49 ##
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
50 ## @example
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
51 ## y'(i) = 1/(x(i+1)-x(i-1)) * (y(i-1)-y(i+1)).
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
52 ## @end example
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
53 ##
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
54 ## If the first argument @var{f} is a function handle, the gradient of the
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
55 ## function at the points in @var{x0} is approximated using central
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
56 ## difference. For example, @code{gradient (@@cos, 0)} approximates the
9051
1bf0ce0930be Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents: 9015
diff changeset
57 ## gradient of the cosine function in the point @math{x0 = 0}. As with
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
58 ## sampled data, the spacing values between the points from which the
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
59 ## gradient is estimated can be set via the @var{s} or @var{dx},
9051
1bf0ce0930be Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents: 9015
diff changeset
60 ## @var{dy}, @dots{} arguments. By default a spacing of 1 is used.
9141
c1fff751b5a8 Update section 17.1 (Utility Functions) of arith.txi
Rik <rdrider0-list@yahoo.com>
parents: 9051
diff changeset
61 ## @seealso{diff, del2}
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
62 ## @end deftypefn
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
63
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
64 ## Author: Kai Habel <kai.habel@gmx.de>
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
65 ## Modified: David Bateman <dbateman@free.fr> Added NDArray support
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
66
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
67 function varargout = gradient (m, varargin)
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
68
5838
376e02b2ce70 [project @ 2006-06-01 20:23:53 by jwe]
jwe
parents: 5837
diff changeset
69 if (nargin < 1)
11589
b0084095098e missing semicolons in script files
John W. Eaton <jwe@octave.org>
parents: 11588
diff changeset
70 print_usage ();
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
71 endif
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
72
14868
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14363
diff changeset
73 nargout_with_ans = max (1,nargout);
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
74 if (ismatrix (m))
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
75 [varargout{1:nargout_with_ans}] = matrix_gradient (m, varargin{:});
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
76 elseif (isa (m, "function_handle"))
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
77 [varargout{1:nargout_with_ans}] = handle_gradient (m, varargin{:});
14868
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14363
diff changeset
78 elseif (ischar (m))
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
79 [varargout{1:nargout_with_ans}] = handle_gradient (str2func (m), varargin{:});
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
80 else
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
81 error ("gradient: first input must be an array or a function");
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
82 endif
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
83
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
84 endfunction
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
85
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
86 function varargout = matrix_gradient (m, varargin)
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
87 transposed = false;
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
88 if (isvector (m))
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
89 ## make a row vector.
14872
c2dbdeaa25df maint: use rows() and columns() to clarify m-files.
Rik <octave@nomad.inbox5.com>
parents: 14868
diff changeset
90 transposed = (columns (m) == 1);
13146
1ce5cd703af0 Fix bug for complex input for gradient (#34292)
Kai Habel <kai.habel@gmx.de>
parents: 11589
diff changeset
91 m = m(:).';
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
92 endif
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
93
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
94 nd = ndims (m);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
95 sz = size (m);
14868
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14363
diff changeset
96 if (length (sz) > 1)
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
97 tmp = sz(1); sz(1) = sz(2); sz(2) = tmp;
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
98 endif
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
99
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
100 if (nargin > 2 && nargin != nd + 1)
11589
b0084095098e missing semicolons in script files
John W. Eaton <jwe@octave.org>
parents: 11588
diff changeset
101 print_usage ();
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
102 endif
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
103
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
104 ## cell d stores a spacing vector for each dimension
5838
376e02b2ce70 [project @ 2006-06-01 20:23:53 by jwe]
jwe
parents: 5837
diff changeset
105 d = cell (1, nd);
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
106 if (nargin == 1)
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
107 ## no spacing given - assume 1.0 for all dimensions
8507
cadc73247d65 style fixes
John W. Eaton <jwe@octave.org>
parents: 7650
diff changeset
108 for i = 1:nd
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
109 d{i} = ones (sz(i) - 1, 1);
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
110 endfor
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
111 elseif (nargin == 2)
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
112 if (isscalar (varargin{1}))
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
113 ## single scalar value for all dimensions
5838
376e02b2ce70 [project @ 2006-06-01 20:23:53 by jwe]
jwe
parents: 5837
diff changeset
114 for i = 1:nd
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
115 d{i} = varargin{1} * ones (sz(i) - 1, 1);
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
116 endfor
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
117 else
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
118 ## vector for one-dimensional derivative
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
119 d{1} = diff (varargin{1}(:));
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
120 endif
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
121 else
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
122 ## have spacing value for each dimension
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
123 if (length(varargin) != nd)
11588
d5bd2766c640 style fixes for warning and error messages in script files
John W. Eaton <jwe@octave.org>
parents: 11587
diff changeset
124 error ("gradient: dimensions and number of spacing values do not match");
11113
a8ac114ec9ab Stylefixes, replace end by endif.
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 10793
diff changeset
125 endif
8507
cadc73247d65 style fixes
John W. Eaton <jwe@octave.org>
parents: 7650
diff changeset
126 for i = 1:nd
7120
a2174fb073d4 [project @ 2007-11-07 21:26:43 by jwe]
jwe
parents: 7017
diff changeset
127 if (isscalar (varargin{i}))
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
128 d{i} = varargin{i} * ones (sz(i) - 1, 1);
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
129 else
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
130 d{i} = diff (varargin{i}(:));
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
131 endif
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
132 endfor
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
133 endif
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
134
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
135 m = shiftdim (m, 1);
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
136 for i = 1:min (nd, nargout)
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
137 mr = rows (m);
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
138 mc = numel (m) / mr;
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
139 Y = zeros (size (m), class (m));
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
140
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
141 if (mr > 1)
8507
cadc73247d65 style fixes
John W. Eaton <jwe@octave.org>
parents: 7650
diff changeset
142 ## Top and bottom boundary.
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
143 Y(1,:) = diff (m(1:2, :)) / d{i}(1);
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
144 Y(mr,:) = diff (m(mr-1:mr, :) / d{i}(mr - 1));
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
145 endif
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
146
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
147 if (mr > 2)
8507
cadc73247d65 style fixes
John W. Eaton <jwe@octave.org>
parents: 7650
diff changeset
148 ## Interior points.
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
149 Y(2:mr-1,:) = ((m(3:mr,:) - m(1:mr-2,:))
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
150 ./ kron (d{i}(1:mr-2) + d{i}(2:mr-1), ones (1, mc)));
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
151 endif
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
152
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
153 ## turn multi-dimensional matrix in a way, that gradient
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
154 ## along x-direction is calculated first then y, z, ...
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
155
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
156 if (i == 1)
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
157 varargout{i} = shiftdim (Y, nd - 1);
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
158 m = shiftdim (m, nd - 1);
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
159 elseif (i == 2)
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
160 varargout{i} = Y;
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
161 m = shiftdim (m, 2);
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
162 else
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
163 varargout{i} = shiftdim (Y, nd - i + 1);
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
164 m = shiftdim (m, 1);
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
165 endif
5837
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
166 endfor
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
167
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
168 if (transposed)
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
169 varargout{1} = varargout{1}.';
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
170 endif
55404f3b0da1 [project @ 2006-06-01 19:05:31 by jwe]
jwe
parents:
diff changeset
171 endfunction
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
172
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
173 function varargout = handle_gradient (f, p0, varargin)
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
174 ## Input checking
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
175 p0_size = size (p0);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
176
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
177 if (numel (p0_size) != 2)
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
178 error ("gradient: the second input argument should either be a vector or a matrix");
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
179 endif
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
180
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
181 if (any (p0_size == 1))
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
182 p0 = p0 (:);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
183 dim = 1;
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
184 num_points = numel (p0);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
185 else
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
186 num_points = p0_size (1);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
187 dim = p0_size (2);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
188 endif
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
189
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
190 if (length (varargin) == 0)
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
191 delta = 1;
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
192 elseif (length (varargin) == 1 || length (varargin) == dim)
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
193 try
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
194 delta = [varargin{:}];
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
195 catch
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
196 error ("gradient: spacing parameters must be scalars or a vector");
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
197 end_try_catch
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
198 else
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
199 error ("gradient: incorrect number of spacing parameters");
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
200 endif
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
201
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
202 if (isscalar (delta))
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
203 delta = repmat (delta, 1, dim);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
204 elseif (!isvector (delta))
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
205 error ("gradient: spacing values must be scalars or a vector");
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
206 endif
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
207
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
208 ## Calculate the gradient
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
209 p0 = mat2cell (p0, num_points, ones (1, dim));
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
210 varargout = cell (1, dim);
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
211 for d = 1:dim
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
212 s = delta (d);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
213 df_dx = (f (p0{1:d-1}, p0{d}+s, p0{d+1:end})
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
214 - f (p0{1:d-1}, p0{d}-s, p0{d+1:end})) ./ (2*s);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
215 if (dim == 1)
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
216 varargout{d} = reshape (df_dx, p0_size);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
217 else
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
218 varargout{d} = df_dx;
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
219 endif
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
220 endfor
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
221 endfunction
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
222
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
223
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
224 %!test
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
225 %! data = [1, 2, 4, 2];
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
226 %! dx = gradient (data);
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
227 %! dx2 = gradient (data, 0.25);
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
228 %! dx3 = gradient (data, [0.25, 0.5, 1, 3]);
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
229 %! assert (dx, [1, 3/2, 0, -2]);
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
230 %! assert (dx2, [4, 6, 0, -8]);
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
231 %! assert (dx3, [4, 4, 0, -1]);
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
232 %! assert (size_equal (data, dx));
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
233
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
234 %!test
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
235 %! [Y,X,Z,U] = ndgrid (2:2:8,1:5,4:4:12,3:5:30);
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
236 %! [dX,dY,dZ,dU] = gradient (X);
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
237 %! assert (all (dX(:) == 1));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
238 %! assert (all (dY(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
239 %! assert (all (dZ(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
240 %! assert (all (dU(:) == 0));
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
241 %! [dX,dY,dZ,dU] = gradient (Y);
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
242 %! assert (all (dX(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
243 %! assert (all (dY(:) == 2));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
244 %! assert (all (dZ(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
245 %! assert (all (dU(:) == 0));
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
246 %! [dX,dY,dZ,dU] = gradient (Z);
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
247 %! assert (all (dX(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
248 %! assert (all (dY(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
249 %! assert (all (dZ(:) == 4));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
250 %! assert (all (dU(:) == 0));
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
251 %! [dX,dY,dZ,dU] = gradient (U);
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
252 %! assert (all (dX(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
253 %! assert (all (dY(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
254 %! assert (all (dZ(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
255 %! assert (all (dU(:) == 5));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
256 %! assert (size_equal (dX, dY, dZ, dU, X, Y, Z, U));
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
257 %! [dX,dY,dZ,dU] = gradient (U, 5.0);
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
258 %! assert (all (dU(:) == 1));
9015
06cebb6c5dde Fix calculation of gradient for dims>2. Vector arguments are interpreted as
Kai Habel <kai.habel@gmx.de>
parents: 8920
diff changeset
259 %! [dX,dY,dZ,dU] = gradient (U, 1.0, 2.0, 3.0, 2.5);
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
260 %! assert (all (dU(:) == 2));
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
261
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
262 %!test
13146
1ce5cd703af0 Fix bug for complex input for gradient (#34292)
Kai Habel <kai.habel@gmx.de>
parents: 11589
diff changeset
263 %! [Y,X,Z,U] = ndgrid (2:2:8,1:5,4:4:12,3:5:30);
1ce5cd703af0 Fix bug for complex input for gradient (#34292)
Kai Habel <kai.habel@gmx.de>
parents: 11589
diff changeset
264 %! [dX,dY,dZ,dU] = gradient (X+j*X);
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
265 %! assert (all (dX(:) == 1+1j));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
266 %! assert (all (dY(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
267 %! assert (all (dZ(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
268 %! assert (all (dU(:) == 0));
13146
1ce5cd703af0 Fix bug for complex input for gradient (#34292)
Kai Habel <kai.habel@gmx.de>
parents: 11589
diff changeset
269 %! [dX,dY,dZ,dU] = gradient (Y-j*Y);
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
270 %! assert (all (dX(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
271 %! assert (all (dY(:) == 2-j*2));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
272 %! assert (all (dZ(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
273 %! assert (all (dU(:) == 0));
13146
1ce5cd703af0 Fix bug for complex input for gradient (#34292)
Kai Habel <kai.habel@gmx.de>
parents: 11589
diff changeset
274 %! [dX,dY,dZ,dU] = gradient (Z+j*1);
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
275 %! assert (all (dX(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
276 %! assert (all (dY(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
277 %! assert (all (dZ(:) == 4));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
278 %! assert (all (dU(:) == 0));
13146
1ce5cd703af0 Fix bug for complex input for gradient (#34292)
Kai Habel <kai.habel@gmx.de>
parents: 11589
diff changeset
279 %! [dX,dY,dZ,dU] = gradient (U-j*1);
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
280 %! assert (all (dX(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
281 %! assert (all (dY(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
282 %! assert (all (dZ(:) == 0));
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
283 %! assert (all (dU(:) == 5));
14868
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14363
diff changeset
284 %! assert (size_equal (dX, dY, dZ, dU, X, Y, Z, U));
13146
1ce5cd703af0 Fix bug for complex input for gradient (#34292)
Kai Habel <kai.habel@gmx.de>
parents: 11589
diff changeset
285 %! [dX,dY,dZ,dU] = gradient (U, 5.0);
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
286 %! assert (all (dU(:) == 1));
13146
1ce5cd703af0 Fix bug for complex input for gradient (#34292)
Kai Habel <kai.habel@gmx.de>
parents: 11589
diff changeset
287 %! [dX,dY,dZ,dU] = gradient (U, 1.0, 2.0, 3.0, 2.5);
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
288 %! assert (all (dU(:) == 2));
13146
1ce5cd703af0 Fix bug for complex input for gradient (#34292)
Kai Habel <kai.habel@gmx.de>
parents: 11589
diff changeset
289
1ce5cd703af0 Fix bug for complex input for gradient (#34292)
Kai Habel <kai.habel@gmx.de>
parents: 11589
diff changeset
290 %!test
8601
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
291 %! x = 0:10;
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
292 %! f = @cos;
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
293 %! df_dx = @(x) -sin (x);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
294 %! assert (gradient (f, x), df_dx (x), 0.2);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
295 %! assert (gradient (f, x, 0.5), df_dx (x), 0.1);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
296
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
297 %!test
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
298 %! xy = reshape (1:10, 5, 2);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
299 %! f = @(x,y) sin (x) .* cos (y);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
300 %! df_dx = @(x, y) cos (x) .* cos (y);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
301 %! df_dy = @(x, y) -sin (x) .* sin (y);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
302 %! [dx, dy] = gradient (f, xy);
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
303 %! assert (dx, df_dx (xy (:, 1), xy (:, 2)), 0.1)
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
304 %! assert (dy, df_dy (xy (:, 1), xy (:, 2)), 0.1)
b297b86f4ad9 gradient.m: Add support for computing the gradient of a function handle
sh@sh-t400
parents: 8507
diff changeset
305