Mercurial > octave
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 |
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) |