annotate scripts/linear-algebra/tensorprod.m @ 31598:53fee053d962

# HG changeset patch # User Nicholas R. Jankowski <jankowski.nicholas@gmail.com> # Date 1669826933 18000 # Wed Nov 30 11:48:53 2022 -0500 # Node ID 6f7e0018c745ebb4fbecfc939e99459a4943c4fd # Parent 65157e496f5d92bac4190f7877df951eb3698ca3 doc: Adjust whitespace in tensorprod.m docstring and add author to contrib list * scripts/linear-algebra/tensorprod.m: Enforce two spaces after a period and keep lines under 80 characters. * doc/interpreter/contributors.in: add Kasper H. Filtenborg
author Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
date Wed, 30 Nov 2022 18:51:14 -0500
parents 212cc32100f5
children 93744e3823a6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
31547
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
1 ########################################################################
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
2 ##
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
3 ## Copyright (C) 2022 The Octave Project Developers
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
4 ##
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
5 ## See the file COPYRIGHT.md in the top-level directory of this
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
6 ## distribution or <https://octave.org/copyright/>.
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
7 ##
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
8 ## This file is part of Octave.
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
9 ##
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
10 ## Octave is free software: you can redistribute it and/or modify it
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
11 ## under the terms of the GNU General Public License as published by
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
12 ## the Free Software Foundation, either version 3 of the License, or
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
13 ## (at your option) any later version.
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
14 ##
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
15 ## Octave is distributed in the hope that it will be useful, but
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
18 ## GNU General Public License for more details.
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
19 ##
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
20 ## You should have received a copy of the GNU General Public License
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
21 ## along with Octave; see the file COPYING. If not, see
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
22 ## <https://www.gnu.org/licenses/>.
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
23 ##
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
24 ########################################################################
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
25
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
26 ## -*- texinfo -*-
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
27 ## @deftypefn {} {@var{C} =} tensorprod (@var{A}, @var{B}, @var{dimA}, @var{dimB})
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
28 ## @deftypefnx {} {@var{C} =} tensorprod (@var{A}, @var{B}, @var{dim})
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
29 ## @deftypefnx {} {@var{C} =} tensorprod (@var{A}, @var{B})
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
30 ## @deftypefnx {} {@var{C} =} tensorprod (@var{A}, @var{B}, "all")
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
31 ## @deftypefnx {} {@var{C} =} tensorprod (@var{A}, @var{B}, @dots{}, "NumDimensionsA", @var{value})
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
32 ## Compute the tensor product between numeric tensors @var{A} and @var{B}.
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
33 ##
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
34 ## The dimensions of @var{A} and @var{B} that are contracted are defined by
31598
53fee053d962 # HG changeset patch
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31547
diff changeset
35 ## @var{dimA} and @var{dimB}, respectively. @var{dimA} and @var{dimB} are
53fee053d962 # HG changeset patch
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31547
diff changeset
36 ## scalars or equal length vectors that define the dimensions to match up.
53fee053d962 # HG changeset patch
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31547
diff changeset
37 ## The matched dimensions of @var{A} and @var{B} must have equal lengths.
31547
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
38 ##
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
39 ## When @var{dim} is used, it is equivalent to @var{dimA} = @var{dimB} =
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
40 ## @var{dim}.
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
41 ##
31598
53fee053d962 # HG changeset patch
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31547
diff changeset
42 ## When no dimensions are specified, @var{dimA} = @var{dimB} = []. This
53fee053d962 # HG changeset patch
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31547
diff changeset
43 ## computes the outer product between @var{A} and @var{B}.
31547
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
44 ##
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
45 ## Using the "all" option results in the inner product between @var{A} and
31598
53fee053d962 # HG changeset patch
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31547
diff changeset
46 ## @var{B}. This requires size(@var{A}) == size(@var{B}).
31547
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
47 ##
31598
53fee053d962 # HG changeset patch
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31547
diff changeset
48 ## Use the property-value pair with the property name "NumDimensionsA" when
53fee053d962 # HG changeset patch
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31547
diff changeset
49 ## @var{A} has trailing singleton dimensions that should be transfered to
53fee053d962 # HG changeset patch
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31547
diff changeset
50 ## @var{C}. The specified @var{value} should be the total number of
53fee053d962 # HG changeset patch
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31547
diff changeset
51 ## dimensions of @var{A}.
31547
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
52 ##
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
53 ## Matlab Compatibility: Octave does not currently support the "name=value"
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
54 ## syntax for the "NumDimensionsA" parameter.
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
55 ##
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
56 ## @seealso{kron, dot, mtimes}
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
57 ## @end deftypefn
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
58
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
59 function C = tensorprod (A, B, varargin)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
60
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
61 ## FIXME: shortcut code paths could be added for trivial cases, such as if
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
62 ## either A or B are a scalars, null, identity tensors, etc.
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
63
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
64 if (nargin < 2 || nargin > 6)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
65 print_usage ();
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
66 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
67
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
68 ## Check that A and B are single or double
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
69 if (! isfloat (A))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
70 error ("tensorprod: A must be a single or double precision array");
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
71 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
72
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
73 if (! isfloat (B))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
74 error ("tensorprod: B must be a single or double precision array");
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
75 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
76
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
77 ## Check for misplaced NumDimensionsA property
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
78 if (nargin > 2)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
79 if (strcmpi (varargin{end}, "NumDimensionsA"))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
80 error (["tensorprod: a value for the NumDimensionsA property must ", ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
81 "be provided"]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
82 elseif (strcmpi ( strtok (inputname (nargin, false)), "NumDimensionsA"))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
83 ## FIXME: Add support for keyword=value syntax
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
84 error (["tensorprod: NumDimensionsA=ndimsA syntax is not yet ", ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
85 "supported in Octave - provide the value as a ", ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
86 "property-value pair"]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
87 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
88 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
89
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
90 ## Check for NumDimensionsA property
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
91 if (nargin > 3)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
92 if (strcmpi (varargin{end - 1}, "NumDimensionsA"))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
93 if (! (isnumeric (varargin{end}) && isscalar (varargin{end})))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
94 error (["tensorprod: value for NumDimensionsA must be a ", ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
95 "numeric scalar"]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
96 elseif (varargin{end} < 1 || rem (varargin{end}, 1) != 0)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
97 error (["tensorprod: value for NumDimensionsA must be a ", ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
98 "positive integer"]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
99 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
100 NumDimensionsA = varargin{end};
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
101 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
102 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
103
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
104 existNumDimensionsA = exist ("NumDimensionsA");
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
105 ndimargs = nargin - 2 - 2 * existNumDimensionsA;
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
106
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
107 ## Set dimA and dimB
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
108 if (ndimargs == 0)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
109 ## Calling without dimension arguments
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
110 dimA = [];
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
111 dimB = [];
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
112 elseif (ndimargs == 1)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
113 ## Calling with dim or "all" option
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
114 if (isnumeric (varargin{1}))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
115 if (! (isvector (varargin{1}) || isnull (varargin{1})))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
116 error ("tensorprod: dim must be a numeric vector of integers or []");
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
117 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
118 ## Calling with dim
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
119 dimA = transpose ([varargin{1}(:)]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
120 elseif (ischar (varargin{1}))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
121 if (strcmpi (varargin{1}, "all"))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
122 if (! size_equal (A, B))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
123 error (["tensorprod: size of A and B must be identical when ", ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
124 "using the 'all' option"]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
125 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
126 else
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
127 error ("tensorprod: unknown option '%s'", varargin{1});
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
128 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
129 ## Calling with "all" option
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
130 dimA = 1:ndims(A);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
131 else
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
132 error (["tensorprod: third argument must be a numeric vector of ", ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
133 "integers, [], or 'all'"]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
134 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
135 dimB = dimA;
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
136 elseif (ndimargs == 2)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
137 ## Calling with dimA and dimB
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
138 if (! (isnumeric (varargin{1}) && (isvector (varargin{1}) || ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
139 isnull (varargin{1}))))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
140 error("tensorprod: dimA must be a numeric vector of integers or []");
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
141 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
142
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
143 if (! (isnumeric (varargin{2}) && (isvector (varargin{2}) || ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
144 isnull (varargin{2}))))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
145 error ("tensorprod: dimB must be a numeric vector of integers or []");
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
146 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
147
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
148 if (length (varargin{1}) != length (varargin{2}))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
149 error (["tensorprod: an equal number of dimensions must be ", ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
150 "matched for A and B"]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
151 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
152 dimA = transpose ([varargin{1}(:)]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
153 dimB = transpose ([varargin{2}(:)]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
154 else
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
155 ## Something is wrong - try to find the error
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
156 for i = 1:ndimargs
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
157 if (ischar (varargin{i}))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
158 if (strcmpi (varargin{i}, "NumDimensionsA"))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
159 error ("tensorprod: misplaced 'NumDimensionsA' option");
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
160 elseif (strcmpi (varargin{i}, "all"))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
161 error ("tensorprod: misplaced 'all' option");
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
162 else
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
163 error ("tensorprod: unknown option '%s'", varargin{i});
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
164 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
165 elseif (! isnumeric (varargin{i}))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
166 error (["tensorprod: optional arguments must be numeric vectors ", ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
167 "of integers, [], 'all', or 'NumDimensionsA'"]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
168 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
169 endfor
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
170 error ("tensorprod: too many dimension inputs given");
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
171 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
172
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
173 ## Check that dimensions are positive integers ([] will also pass)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
174 if (any ([dimA < 1, dimB < 1, (rem (dimA, 1) != 0), (rem (dimB, 1) != 0)]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
175 error ("tensorprod: dimension(s) must be positive integer(s)");
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
176 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
177
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
178 ## Check that the length of matched dimensions are equal
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
179 if (any (size (A, dimA) != size (B, dimB)))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
180 error (["tensorprod: matched dimension(s) of A and B must have the ", ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
181 "same length(s)"]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
182 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
183
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
184 ## Find size and ndims of A and B
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
185 ndimsA = max ([ndims(A), max(dimA)]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
186 sizeA = size (A, 1:ndimsA);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
187 ndimsB = max ([ndims(B), max(dimB)]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
188 sizeB = size (B, 1:ndimsB);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
189
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
190 ## Take NumDimensionsA property into account
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
191 if (existNumDimensionsA)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
192 if (NumDimensionsA < ndimsA)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
193 if (ndimargs == 1)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
194 error (["tensorprod: highest dimension of dim must be less than ", ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
195 "or equal to NumDimensionsA"]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
196 elseif (ndimargs == 2)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
197 error (["tensorprod: highest dimension of dimA must be less ", ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
198 "than or equal to NumDimensionsA"]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
199 else
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
200 error (["tensorprod: NumDimensionsA cannot be smaller than the ", ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
201 "number of dimensions of A"]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
202 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
203 elseif (NumDimensionsA > ndimsA)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
204 sizeA = [sizeA, ones(1, NumDimensionsA - ndimsA)];
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
205 ndimsA = NumDimensionsA;
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
206 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
207 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
208
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
209 ## Interchange the dimension to sum over the end of A and the front of B
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
210 ## Prepare for A
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
211 remainDimA = setdiff (1:ndimsA, dimA); # Dimensions of A to keep
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
212 newDimOrderA = [remainDimA, dimA]; # New dim order [to_keep, to_contract]
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
213 newSizeA = [prod(sizeA(remainDimA)), prod(sizeA(dimA))]; # Temp. 2D size for A
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
214 remainSizeA = sizeA(remainDimA); # Contrib. to size of C from remaining A dims
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
215
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
216 ## Prepare for B (See comments for A. Note that in principle,
31598
53fee053d962 # HG changeset patch
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31547
diff changeset
217 ## prod (sizeB (dimB)) should always be equal to prod (sizeA (dimA)). May
53fee053d962 # HG changeset patch
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31547
diff changeset
218 ## be able to optimize further here.
31547
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
219 remainDimB = setdiff (1:ndimsB, dimB);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
220 newDimOrderB = [remainDimB, dimB];
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
221 newSizeB = [prod(sizeB(remainDimB)), prod(sizeB(dimB))];
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
222 remainSizeB = sizeB(remainDimB);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
223
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
224 ## Do reshaping into 2D array
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
225 newA = reshape (permute (A, newDimOrderA), newSizeA);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
226 newB = reshape (permute (B, newDimOrderB), newSizeB);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
227
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
228 ## Compute
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
229 C = newA * transpose (newB);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
230
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
231 ## If not an inner product, reshape back to tensor
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
232 if (! isscalar (C))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
233 C = reshape (C, [remainSizeA, remainSizeB]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
234 endif
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
235
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
236 endfunction
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
237
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
238
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
239 %!assert (tensorprod (2, 3), 6)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
240 %!assert (tensorprod (2, 3, 1), 6)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
241 %!assert (tensorprod (2, 3, 2), 6)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
242 %!assert (tensorprod (2, 3, 10), 6)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
243 %!assert (tensorprod (2, 3, [1 2]), 6)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
244 %!assert (tensorprod (2, 3, [1 10]), 6)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
245 %!assert (tensorprod (2, 3, []), 6)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
246 %!assert (tensorprod (2, 3, 2, 1), 6)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
247 %!assert (tensorprod (2, 3, [], []), 6)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
248
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
249 %!shared v1, v2, M1, M2, T
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
250 %! v1 = [1, 2];
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
251 %! M1 = [1, 2; 3, 4];
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
252 %! M2 = [1, 2; 3, 4; 5, 6];
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
253 %! T = cat (3, M2, M2);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
254
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
255 %!assert (tensorprod (3, v1), reshape ([3, 6], [1, 1, 1, 2]));
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
256 %!assert (tensorprod (v1, 3), [3, 6]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
257 %!assert (tensorprod (v1, v1, "all"), 5);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
258 %!assert (tensorprod (v1, v1), reshape ([1, 2, 2, 4], [1, 2, 1, 2]));
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
259 %!assert (tensorprod (v1, v1, 1), [1, 2; 2, 4]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
260 %!assert (tensorprod (v1, v1, 2), 5);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
261 %!assert (tensorprod (v1, v1, 3), reshape ([1, 2, 2, 4], [1, 2, 1, 2]));
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
262 %!assert (tensorprod (v1, v1, 5), reshape ([1, 2, 2, 4], [1, 2, 1, 1, 1, 2]));
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
263
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
264 %!assert (tensorprod (M1, v1), cat (4, [1,2;3,4], [2,4;6,8]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
265 %!assert (tensorprod (M1, v1'), cat (3, [1,2;3,4], [2,4;6,8]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
266 %!assert (tensorprod (v1, M1), reshape ([1 2 3 6 2 4 4 8], [1,2,2,2]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
267 %!assert (tensorprod (v1', M1), reshape ([1 2 3 6 2 4 4 8], [2,1,2,2]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
268 %!assert (tensorprod (M1, v1', 2, 1), [5; 11])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
269 %!assert (tensorprod (M1, v1', 4, 4), cat(4, M1, 2*M1))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
270 %!assert (tensorprod (M1, v1', [1, 3]), [7; 10])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
271 %!assert (tensorprod (M1, v1', [1, 3], [1, 3]), [7; 10])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
272 %!assert (tensorprod (M1, v1', [2, 3], [1, 3]), [5; 11])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
273 %!assert (tensorprod (M1, v1', [2; 3], [1; 3]), [5; 11])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
274 %!assert (tensorprod (M1, v1', [2; 3], [1, 3]), [5; 11])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
275 %!assert (tensorprod (M1, v1', [2, 3], [1; 3]), [5; 11])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
276 %!assert (tensorprod (M1, v1', [], []), cat (3, M1, 2*M1))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
277 %!assert (tensorprod (M1, M1, "all"), 30)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
278 %!assert (tensorprod (M1, M1, 1), [10, 14; 14, 20])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
279 %!assert (tensorprod (M1, M1, 2), [5, 11; 11, 25])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
280 %!assert (tensorprod (M1, M2, 2), [5, 11, 17; 11, 25, 39])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
281 %!assert (tensorprod (M1, M2, 1, 2), [7, 15, 23; 10, 22, 34])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
282 %!assert (tensorprod (M1, M2), reshape ([1,3,2,4,3,9,6,12,5,15,10,20,2,6,4, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
283 %! 8,4,12,8,16,6,18,12,24], [2,2,3,2]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
284
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
285 %!assert (tensorprod (T, M1),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
286 %! reshape([1,3,5,2,4,6,1,3,5,2,4,6,3,9,15,6,12,18,3,9,15,6,12,18,2, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
287 %! 6,10,4,8,12,2,6,10,4,8,12,4,12,20,8,16,24,4,12,20,8,16,24],
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
288 %! [3,2,2,2,2]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
289 %!assert (tensorprod (T, M1, 2),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
290 %! cat (3, [5, 5; 11 11; 17, 17], [11, 11; 25, 25; 39, 39]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
291 %!assert (tensorprod (T, M2, 1), cat (3, [35, 35; 44, 44], [44, 44; 56, 56]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
292 %!assert (tensorprod (T, M2, 2), cat (3, [5, 5; 11, 11; 17, 17],
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
293 %! [11,11;25,25;39,39], [17, 17; 39, 39; 61, 61]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
294 %!assert (tensorprod (T, T, "all"), 182)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
295 %!assert (tensorprod (T, T, 1),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
296 %! reshape ([35,44,35,44,44,56,44,56,35,44,35,44,44,56,44,56],
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
297 %! [2,2,2,2]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
298 %!assert (tensorprod (T, T, 2),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
299 %! reshape ([5,11,17,5,11,17,11,25,39,11,25,39,17,39,61,17,39,61,5, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
300 %! 11,17,5,11,17,11,25,39,11,25,39,17,39,61,17,39,61],
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
301 %! [3,2,3,2]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
302 %!assert (tensorprod (T, T, 3),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
303 %! reshape ([2,6,10,4,8,12,6,18,30,12,24,36,10,30,50,20,40,60,4,12, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
304 %! 20,8,16,24,8,24,40,16,32,48,12,36,60,24,48,72], [3,2,3,2]));
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
305 %!assert (tensorprod (T, T, 10),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
306 %! reshape ([1,3,5,2,4,6,1,3,5,2,4,6,3,9,15,6,12,18,3,9,15,6,12,18, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
307 %! 5,15,25,10,20,30,5,15,25,10,20,30,2,6,10,4,8,12,2,6,10, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
308 %! 4,8,12,4,12,20,8,16,24,4,12,20,8,16,24,6,18,30,12,24,36, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
309 %! 6,18,30,12,24,36,1,3,5,2,4,6,1,3,5,2,4,6,3,9,15,6,12,18, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
310 %! 3,9,15,6,12,18,5,15,25,10,20,30,5,15,25,10,20,30,2,6,10, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
311 %! 4,8,12,2,6,10,4,8,12,4,12,20,8,16,24,4,12,20,8,16,24,6, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
312 %! 18,30,12,24,36,6,18,30,12,24,36],
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
313 %! [3,2,2,1,1,1,1,1,1,3,2,2]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
314 %!assert (tensorprod (T, T, []),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
315 %! reshape ([1,3,5,2,4,6,1,3,5,2,4,6,3,9,15,6,12,18,3,9,15,6,12,18, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
316 %! 5,15,25,10,20,30,5,15,25,10,20,30,2,6,10,4,8,12,2,6,10, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
317 %! 4,8,12,4,12,20,8,16,24,4,12,20,8,16,24,6,18,30,12,24,36, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
318 %! 6,18,30,12,24,36,1,3,5,2,4,6,1,3,5,2,4,6,3,9,15,6,12,18, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
319 %! 3,9,15,6,12,18,5,15,25,10,20,30,5,15,25,10,20,30,2,6,10, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
320 %! 4,8,12,2,6,10,4,8,12,4,12,20,8,16,24,4,12,20,8,16,24,6, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
321 %! 18,30,12,24,36,6,18,30,12,24,36],
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
322 %! [3,2,2,3,2,2]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
323 %!assert (tensorprod (T, T, 2, 3),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
324 %! reshape ([3,7,11,3,7,11,9,21,33,9,21,33,15,35,55,15,35,55,6,14, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
325 %! 22,6,14,22,12,28,44,12,28,44,18,42,66,18,42,66],
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
326 %! [3,2,3,2]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
327 %!assert (tensorprod (T, T(1:2, 1:2, :), [2, 3],[1, 3]),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
328 %! [14, 20; 30, 44; 46, 68])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
329 %!assert (tensorprod (T, T(1:2, 1:2, :), [3, 2],[1, 3]),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
330 %! [12, 18; 28, 42; 44, 66])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
331 %!assert (tensorprod (T, reshape (T, [2, 2, 3]), 2, 1),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
332 %! reshape ([7,15,23,7,15,23,9,23,37,9,23,37,16,36,56,16,36,56,7,15, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
333 %! 23,7,15,23,9,23,37,9,23,37,16,36,56,16,36,56],
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
334 %! [3,2,2,3]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
335 %!assert (tensorprod (T, T, [1, 3]), [70, 88; 88, 112])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
336 %!assert (tensorprod (T, T, [1, 3]), tensorprod (T, T, [3, 1]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
337 %!assert (tensorprod (T, reshape (T, [2, 2, 3]), [2, 3], [1, 2]),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
338 %! [16, 23, 25; 38, 51, 59; 60, 79, 93])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
339
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
340 ## NumDimensionsA tests
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
341 %!assert (tensorprod (v1, v1, "NumDimensionsA", 2),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
342 %! reshape ([1, 2, 2, 4], [1, 2, 1, 2]));
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
343 %!assert (tensorprod (v1, v1, "numdimensionsa", 2),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
344 %! tensorprod (v1, v1, "NumDimensionsA", 2));
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
345 %!assert (tensorprod (v1, v1, "NumDimensionsA", 3),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
346 %! reshape ([1, 2, 2, 4], [1, 2, 1, 1, 2]));
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
347 %!assert (tensorprod (v1, v1, [], "NumDimensionsA", 3),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
348 %! reshape ([1, 2, 2, 4], [1, 2, 1, 1, 2]));
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
349 %!assert (tensorprod (v1, v1, [], [], "NumDimensionsA", 3),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
350 %! reshape ([1, 2, 2, 4], [1, 2, 1, 1, 2]));
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
351 %!assert (tensorprod (v1, v1, "all", "NumDimensionsA", 3), 5);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
352 %!assert (tensorprod (M1, v1, 2, "NumDimensionsA", 2), [5; 11]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
353 %!assert (tensorprod (M1, v1, 2, "NumDimensionsA", 5), [5; 11]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
354 %!assert (tensorprod (M1, v1, [2, 3], "NumDimensionsA", 5), [5; 11]);
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
355 %!assert (tensorprod (M1, M2, "NumDimensionsA", 2), reshape ([1,3,2,4,3,9,6, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
356 %! 12,5,15,10,20,2,6,4,8,4,12,8,16,6,18,12,24], [2,2,3,2]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
357 %!assert (tensorprod (M1, M2, "NumDimensionsA", 3), reshape ([1,3,2,4,3,9,6, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
358 %! 12,5,15,10,20,2,6,4,8,4,12,8,16,6,18,12,24], [2,2,1,3,2]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
359 %!assert (tensorprod (T, T, 1, "NumDimensionsA", 3),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
360 %! reshape ([35,44,35,44,44,56,44,56,35,44,35,44,44,56,44,56],
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
361 %! [2,2,2,2]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
362 %!assert (tensorprod (T, T, 3, "NumDimensionsA", 3),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
363 %! reshape ([2,6,10,4,8,12,6,18,30,12,24,36,10,30,50,20,40,60,4,12, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
364 %! 20,8,16,24, 8,24,40,16,32,48,12,36,60,24,48,72],
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
365 %! [3,2,3,2]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
366 %!assert (tensorprod (T, T, 1, "NumDimensionsA", 4),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
367 %! reshape ([35,44,35,44,44,56,44,56,35,44,35,44,44,56,44,56],
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
368 %! [2,2,1,2,2]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
369 %!assert (tensorprod (T, T, 4, "NumDimensionsA", 4),
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
370 %! reshape ([1,3,5,2,4,6,1,3,5,2,4,6,3,9,15,6,12,18,3,9,15,6,12,18,5, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
371 %! 15,25,10,20,30,5,15,25,10,20,30,2,6,10,4,8,12,2,6,10,4,8, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
372 %! 12,4,12,20,8,16,24,4,12,20,8,16,24,6,18,30,12,24,36,6,18, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
373 %! 30,12,24,36,1,3,5,2,4,6,1,3,5,2,4,6,3,9,15,6,12,18,3,9,15, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
374 %! 6,12,18,5,15,25,10,20,30,5,15,25,10,20,30,2,6,10,4,8,12,2, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
375 %! 6,10,4,8,12,4,12,20,8,16,24,4,12,20,8,16,24,6,18,30,12,24, ...
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
376 %! 36,6,18,30,12,24,36],
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
377 %! [3,2,2,3,2,2]))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
378
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
379 ## Test empty inputs
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
380 %!assert (tensorprod ([], []), zeros (0, 0, 0, 0))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
381 %!assert (tensorprod ([], 1), [])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
382 %!assert (tensorprod (1, []), zeros (1, 1, 0, 0))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
383 %!assert (tensorprod (zeros (0, 0, 0), zeros (0, 0, 0)), zeros (0, 0, 0, 0, 0, 0))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
384 %!assert (tensorprod ([], [], []), zeros (0, 0, 0, 0))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
385 %!assert (tensorprod ([], [], 1), [])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
386 %!assert (tensorprod ([], [], 2), [])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
387 %!assert (tensorprod ([], [], 3), zeros (0, 0, 0, 0))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
388 %!assert (tensorprod ([], [], 4), zeros (0, 0, 1, 0, 0))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
389 %!assert (tensorprod ([], [], 5), zeros (0, 0, 1, 1, 0, 0))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
390 %!assert (tensorprod ([], [], 3, "NumDimensionsA", 4), zeros (0, 0, 1, 0, 0))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
391 %!assert (tensorprod ([], [], 3, 4, "NumDimensionsA", 5), zeros (0, 0, 1, 1, 0, 0))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
392
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
393 ## Test input validation
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
394 %!error <Invalid call> tensorprod ()
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
395 %!error <Invalid call> tensorprod (1)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
396 %!error <Invalid call> tensorprod (1,2,3,4,5,6,7)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
397 %!error <A must be a single or double precision array> tensorprod ("foo", 1)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
398 %!error <B must be a single or double precision array> tensorprod (1, "bar")
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
399 %!error <A must be a single or double precision array> tensorprod (int32(1), 1)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
400 %!error <B must be a single or double precision array> tensorprod (1, int32(1))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
401 %!error <unknown option 'foo'> tensorprod (1, 1, "foo")
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
402 %!error <unknown option 'foo'> tensorprod (1, 1, 1, "foo", 1)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
403 %!error <dimA must be a numeric vector of integers or \[\]> tensorprod (1, 1, "foo", 1)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
404 %!error <dimB must be a numeric vector of integers or \[\]> tensorprod (1, 1, 1, "bar")
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
405 %!error <dimA must be a numeric vector of integers or \[\]> tensorprod (1, 1, zeros(0,0,0), [])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
406 %!error <dimB must be a numeric vector of integers or \[\]> tensorprod (1, 1, [], zeros(0,0,0))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
407 %!error <dim must be a numeric vector of integers or \[\]> tensorprod (1, 1, zeros(0,0,0))
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
408 %!error <misplaced 'all' option> tensorprod (1, 1, 1, "all", 1)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
409 %!error <misplaced 'NumDimensionsA' option> tensorprod (1, 1, "NumDimensionsA", 1, 1)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
410 %!error <optional arguments must be numeric vectors of integers, \[\], 'all', or 'NumDimensionsA'> tensorprod (1, 1, 1, {}, 1)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
411 %!error <matched dimension\(s\) of A and B must have the same length\(s\)> tensorprod (ones (3, 4), ones (4, 3), 1)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
412 %!error <matched dimension\(s\) of A and B must have the same length\(s\)> tensorprod (ones (3, 4), ones (4, 3), 1, 1)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
413 %!error <dimension\(s\) must be positive integer\(s\)> tensorprod (1, 1, 0)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
414 %!error <dimension\(s\) must be positive integer\(s\)> tensorprod (1, 1, -1)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
415 %!error <dimension\(s\) must be positive integer\(s\)> tensorprod (1, 1, 1.5)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
416 %!error <dimension\(s\) must be positive integer\(s\)> tensorprod (1, 1, NaN)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
417 %!error <dimension\(s\) must be positive integer\(s\)> tensorprod (1, 1, Inf)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
418 %!error <third argument must be a numeric vector of integers, \[\], or 'all'> tensorprod (1, 1, {})
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
419 %!error <an equal number of dimensions must be matched for A and B> tensorprod (ones (3, 4), ones (4, 3), 1, [1, 2])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
420 %!error <an equal number of dimensions must be matched for A and B> tensorprod (ones (3, 4), ones (4, 3), 1, [])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
421 %!error <an equal number of dimensions must be matched for A and B> tensorprod (ones (3, 4), ones (4, 3), [], [1, 2])
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
422 %!error <size of A and B must be identical when using the 'all' option> tensorprod (ones (3, 4), ones (4, 3), "all")
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
423 %!error <a value for the NumDimensionsA property must be provided> tensorprod (1, 1, "NumDimensionsA")
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
424 %!error <NumDimensionsA cannot be smaller than the number of dimensions of A> tensorprod (ones (2, 2, 2), 1, "NumDimensionsA", 2)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
425 %!error <highest dimension of dim must be less than or equal to NumDimensionsA> tensorprod (1, 1, 5, "NumDimensionsA", 4)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
426 %!error <highest dimension of dimA must be less than or equal to NumDimensionsA> tensorprod (1, 1, 5, 5, "NumDimensionsA", 4)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
427 %!error <NumDimensionsA=ndimsA syntax is not yet supported in Octave> tensorprod (1, 1, NumDimensionsA=4)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
428 %!error <NumDimensionsA=ndimsA syntax is not yet supported in Octave> tensorprod (1, 1, numdimensionsa=4)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
429 %!error <too many dimension inputs given> tensorprod (1, 1, 2, 1, 1)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
430 %!error <too many dimension inputs given> tensorprod (1, 1, 2, 1, 1, 1)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
431 %!error <value for NumDimensionsA must be a numeric scalar> tensorprod (1, 1, 2, 1, "NumDimensionsA", "foo")
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
432 %!error <value for NumDimensionsA must be a numeric scalar> tensorprod (1, 1, 2, 1, "NumDimensionsA", {})
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
433 %!error <value for NumDimensionsA must be a positive integer> tensorprod (1, 1, 2, 1, "NumDimensionsA", -1)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
434 %!error <value for NumDimensionsA must be a positive integer> tensorprod (1, 1, 2, 1, "NumDimensionsA", 0)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
435 %!error <value for NumDimensionsA must be a positive integer> tensorprod (1, 1, 2, 1, "NumDimensionsA", 1.5)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
436 %!error <value for NumDimensionsA must be a positive integer> tensorprod (1, 1, 2, 1, "NumDimensionsA", NaN)
212cc32100f5 Add new function 'tensorprod' (patch #10288)
Kasper H. Filtenborg <kasper.filtenborg@gmail.com>
parents:
diff changeset
437 %!error <value for NumDimensionsA must be a positive integer> tensorprod (1, 1, 2, 1, "NumDimensionsA", Inf)