annotate scripts/special-matrix/gallery.m @ 20296:0b9d23557506

gallery: fix randsvd by adding missing dependency qmult(). * scripts/special-matrix/gallery.m (randsvd) was copied from the Test Matrix toolbox by Nicholas J. Higham. It made use of qmult() which was also part of that toolbox but was left behind. This qmult() implementation is also recovered from the Test Matrix toolbox. Note that Octave itself used to have qmult() which is part of the legacy quaternion package (now also removed from the new quaternion package). See cset 21904fe299c8 for when qmult() was removed from Octave. Also fix the default value for KL and KU so that a 2 element vector can be used as N.
author Carnë Draug <carandraug@octave.org>
date Fri, 03 Jul 2015 16:18:33 +0100
parents 557979395ca9
children 26fc9bbb8762
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1 ## Copyright (C) 1989-1995 Nicholas .J. Higham
19697
4197fc428c7d maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents: 19596
diff changeset
2 ## Copyright (C) 2013-2015 Carnë Draug
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
3 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
4 ## This file is part of Octave.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
5 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
6 ## Octave is free software; you can redistribute it and/or modify it
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
7 ## under the terms of the GNU General Public License as published by
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
8 ## the Free Software Foundation; either version 3 of the License, or (at
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
9 ## your option) any later version.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
10 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
11 ## Octave is distributed in the hope that it will be useful, but
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
12 ## WITHOUT ANY WARRANTY; without even the implied warranty of
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
13 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
14 ## General Public License for more details.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
15 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
16 ## You should have received a copy of the GNU General Public License
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
17 ## along with Octave; see the file COPYING. If not, see
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
18 ## <http://www.gnu.org/licenses/>.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
19
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
20 ## -*- texinfo -*-
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
21 ## @deftypefn {Function File} {} gallery (@var{name})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
22 ## @deftypefnx {Function File} {} gallery (@var{name}, @var{args})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
23 ## Create interesting matrices for testing.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
24 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
25 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
26 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
27 ## @deftypefn {Function File} {@var{c} =} gallery ("cauchy", @var{x})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
28 ## @deftypefnx {Function File} {@var{c} =} gallery ("cauchy", @var{x}, @var{y})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
29 ## Create a Cauchy matrix.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
30 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
31 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
32 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
33 ## @deftypefn {Function File} {@var{c} =} gallery ("chebspec", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
34 ## @deftypefnx {Function File} {@var{c} =} gallery ("chebspec", @var{n}, @var{k})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
35 ## Create a Chebyshev spectral differentiation matrix.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
36 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
37 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
38 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
39 ## @deftypefn {Function File} {@var{c} =} gallery ("chebvand", @var{p})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
40 ## @deftypefnx {Function File} {@var{c} =} gallery ("chebvand", @var{m}, @var{p})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
41 ## Create a Vandermonde-like matrix for the Chebyshev polynomials.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
42 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
43 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
44 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
45 ## @deftypefn {Function File} {@var{a} =} gallery ("chow", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
46 ## @deftypefnx {Function File} {@var{a} =} gallery ("chow", @var{n}, @var{alpha})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
47 ## @deftypefnx {Function File} {@var{a} =} gallery ("chow", @var{n}, @var{alpha}, @var{delta})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
48 ## Create a Chow matrix -- a singular Toeplitz lower Hessenberg matrix.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
49 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
50 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
51 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
52 ## @deftypefn {Function File} {@var{c} =} gallery ("circul", @var{v})
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
53 ## Create a circulant matrix.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
54 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
55 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
56 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
57 ## @deftypefn {Function File} {@var{a} =} gallery ("clement", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
58 ## @deftypefnx {Function File} {@var{a} =} gallery ("clement", @var{n}, @var{k})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
59 ## Create a tridiagonal matrix with zero diagonal entries.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
60 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
61 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
62 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
63 ## @deftypefn {Function File} {@var{c} =} gallery ("compar", @var{a})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
64 ## @deftypefnx {Function File} {@var{c} =} gallery ("compar", @var{a}, @var{k})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
65 ## Create a comparison matrix.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
66 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
67 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
68 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
69 ## @deftypefn {Function File} {@var{a} =} gallery ("condex", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
70 ## @deftypefnx {Function File} {@var{a} =} gallery ("condex", @var{n}, @var{k})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
71 ## @deftypefnx {Function File} {@var{a} =} gallery ("condex", @var{n}, @var{k}, @var{theta})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
72 ## Create a `counterexample' matrix to a condition estimator.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
73 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
74 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
75 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
76 ## @deftypefn {Function File} {@var{a} =} gallery ("cycol", [@var{m} @var{n}])
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
77 ## @deftypefnx {Function File} {@var{a} =} gallery ("cycol", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
78 ## @deftypefnx {Function File} {@var{a} =} gallery (@dots{}, @var{k})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
79 ## Create a matrix whose columns repeat cyclically.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
80 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
81 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
82 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
83 ## @deftypefn {Function File} {[@var{c}, @var{d}, @var{e}] =} gallery ("dorr", @var{n})
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
84 ## @deftypefnx {Function File} {[@var{c}, @var{d}, @var{e}] =} gallery ("dorr", @var{n}, @var{theta})
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
85 ## @deftypefnx {Function File} {@var{a} =} gallery ("dorr", @dots{})
19040
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
86 ## Create a diagonally dominant, ill-conditioned, tridiagonal matrix.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
87 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
88 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
89 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
90 ## @deftypefn {Function File} {@var{a} =} gallery ("dramadah", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
91 ## @deftypefnx {Function File} {@var{a} =} gallery ("dramadah", @var{n}, @var{k})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
92 ## Create a (0, 1) matrix whose inverse has large integer entries.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
93 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
94 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
95 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
96 ## @deftypefn {Function File} {@var{a} =} gallery ("fiedler", @var{c})
19040
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
97 ## Create a symmetric @nospell{Fiedler} matrix.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
98 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
99 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
100 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
101 ## @deftypefn {Function File} {@var{a} =} gallery ("forsythe", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
102 ## @deftypefnx {Function File} {@var{a} =} gallery ("forsythe", @var{n}, @var{alpha})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
103 ## @deftypefnx {Function File} {@var{a} =} gallery ("forsythe", @var{n}, @var{alpha}, @var{lambda})
19040
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
104 ## Create a @nospell{Forsythe} matrix (a perturbed Jordan block).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
105 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
106 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
107 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
108 ## @deftypefn {Function File} {@var{f} =} gallery ("frank", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
109 ## @deftypefnx {Function File} {@var{f} =} gallery ("frank", @var{n}, @var{k})
19040
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
110 ## Create a Frank matrix (ill-conditioned eigenvalues).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
111 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
112 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
113 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
114 ## @deftypefn {Function File} {@var{c} =} gallery ("gcdmat", @var{n})
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
115 ## Create a greatest common divisor matrix.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
116 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
117 ## @var{c} is an @var{n}-by-@var{n} matrix whose values correspond to the
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
118 ## greatest common divisor of its coordinate values, i.e., @var{c}(i,j)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
119 ## correspond @code{gcd (i, j)}.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
120 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
121 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
122 ## @deftypefn {Function File} {@var{a} =} gallery ("gearmat", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
123 ## @deftypefnx {Function File} {@var{a} =} gallery ("gearmat", @var{n}, @var{i})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
124 ## @deftypefnx {Function File} {@var{a} =} gallery ("gearmat", @var{n}, @var{i}, @var{j})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
125 ## Create a Gear matrix.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
126 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
127 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
128 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
129 ## @deftypefn {Function File} {@var{g} =} gallery ("grcar", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
130 ## @deftypefnx {Function File} {@var{g} =} gallery ("grcar", @var{n}, @var{k})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
131 ## Create a Toeplitz matrix with sensitive eigenvalues.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
132 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
133 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
134 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
135 ## @deftypefn {Function File} {@var{a} =} gallery ("hanowa", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
136 ## @deftypefnx {Function File} {@var{a} =} gallery ("hanowa", @var{n}, @var{d})
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
137 ## Create a matrix whose eigenvalues lie on a vertical line in the complex
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
138 ## plane.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
139 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
140 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
141 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
142 ## @deftypefn {Function File} {@var{v} =} gallery ("house", @var{x})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
143 ## @deftypefnx {Function File} {[@var{v}, @var{beta}] =} gallery ("house", @var{x})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
144 ## Create a householder matrix.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
145 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
146 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
147 ##
16982
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
148 ## @deftypefn {Function File} {@var{a} =} gallery ("integerdata", @var{imax}, [@var{M} @var{N} @dots{}], @var{j})
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
149 ## @deftypefnx {Function File} {@var{a} =} gallery ("integerdata", @var{imax}, @var{M}, @var{N}, @dots{}, @var{j})
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
150 ## @deftypefnx {Function File} {@var{a} =} gallery ("integerdata", [@var{imin}, @var{imax}], [@var{M} @var{N} @dots{}], @var{j})
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
151 ## @deftypefnx {Function File} {@var{a} =} gallery ("integerdata", [@var{imin}, @var{imax}], @var{M}, @var{N}, @dots{}, @var{j})
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
152 ## @deftypefnx {Function File} {@var{a} =} gallery ("integerdata", @dots{}, "@var{class}")
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
153 ## Create a matrix with random integers in the range [1, @var{imax}].
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
154 ## If @var{imin} is given then the integers are in the range
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
155 ## [@var{imin}, @var{imax}].
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
156 ##
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
157 ## The second input is a matrix of dimensions describing the size of the output.
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
158 ## The dimensions can also be input as comma-separated arguments.
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
159 ##
20162
2645f9ef8c88 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19944
diff changeset
160 ## The input @var{j} is an integer index in the range [0, 2^32-1]. The values
2645f9ef8c88 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19944
diff changeset
161 ## of the output matrix are always exactly the same (reproducibility) for a
2645f9ef8c88 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19944
diff changeset
162 ## given size input and @var{j} index.
16982
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
163 ##
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
164 ## The final optional argument determines the class of the resulting matrix.
17281
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17199
diff changeset
165 ## Possible values for @var{class}: @qcode{"uint8"}, @qcode{"uint16"},
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17199
diff changeset
166 ## @qcode{"uint32"}, @qcode{"int8"}, @qcode{"int16"}, int32", @qcode{"single"},
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17199
diff changeset
167 ## @qcode{"double"}. The default is @qcode{"double"}.
16982
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
168 ##
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
169 ## @end deftypefn
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
170 ##
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
171 ## @deftypefn {Function File} {@var{a} =} gallery ("invhess", @var{x})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
172 ## @deftypefnx {Function File} {@var{a} =} gallery ("invhess", @var{x}, @var{y})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
173 ## Create the inverse of an upper Hessenberg matrix.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
174 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
175 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
176 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
177 ## @deftypefn {Function File} {@var{a} =} gallery ("invol", @var{n})
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
178 ## Create an involutory matrix.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
179 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
180 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
181 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
182 ## @deftypefn {Function File} {@var{a} =} gallery ("ipjfact", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
183 ## @deftypefnx {Function File} {@var{a} =} gallery ("ipjfact", @var{n}, @var{k})
20162
2645f9ef8c88 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19944
diff changeset
184 ## Create a Hankel matrix with factorial elements.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
185 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
186 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
187 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
188 ## @deftypefn {Function File} {@var{a} =} gallery ("jordbloc", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
189 ## @deftypefnx {Function File} {@var{a} =} gallery ("jordbloc", @var{n}, @var{lambda})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
190 ## Create a Jordan block.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
191 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
192 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
193 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
194 ## @deftypefn {Function File} {@var{u} =} gallery ("kahan", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
195 ## @deftypefnx {Function File} {@var{u} =} gallery ("kahan", @var{n}, @var{theta})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
196 ## @deftypefnx {Function File} {@var{u} =} gallery ("kahan", @var{n}, @var{theta}, @var{pert})
19040
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
197 ## Create a @nospell{Kahan} matrix (upper trapezoidal).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
198 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
199 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
200 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
201 ## @deftypefn {Function File} {@var{a} =} gallery ("kms", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
202 ## @deftypefnx {Function File} {@var{a} =} gallery ("kms", @var{n}, @var{rho})
19040
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
203 ## Create a @nospell{Kac-Murdock-Szego} Toeplitz matrix.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
204 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
205 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
206 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
207 ## @deftypefn {Function File} {@var{b} =} gallery ("krylov", @var{a})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
208 ## @deftypefnx {Function File} {@var{b} =} gallery ("krylov", @var{a}, @var{x})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
209 ## @deftypefnx {Function File} {@var{b} =} gallery ("krylov", @var{a}, @var{x}, @var{j})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
210 ## Create a Krylov matrix.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
211 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
212 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
213 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
214 ## @deftypefn {Function File} {@var{a} =} gallery ("lauchli", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
215 ## @deftypefnx {Function File} {@var{a} =} gallery ("lauchli", @var{n}, @var{mu})
19040
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
216 ## Create a @nospell{Lauchli} matrix (rectangular).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
217 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
218 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
219 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
220 ## @deftypefn {Function File} {@var{a} =} gallery ("lehmer", @var{n})
19040
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
221 ## Create a @nospell{Lehmer} matrix (symmetric positive definite).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
222 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
223 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
224 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
225 ## @deftypefn {Function File} {@var{t} =} gallery ("lesp", @var{n})
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
226 ## Create a tridiagonal matrix with real, sensitive eigenvalues.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
227 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
228 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
229 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
230 ## @deftypefn {Function File} {@var{a} =} gallery ("lotkin", @var{n})
19040
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
231 ## Create a @nospell{Lotkin} matrix.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
232 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
233 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
234 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
235 ## @deftypefn {Function File} {@var{a} =} gallery ("minij", @var{n})
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
236 ## Create a symmetric positive definite matrix MIN(i,j).
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
237 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
238 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
239 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
240 ## @deftypefn {Function File} {@var{a} =} gallery ("moler", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
241 ## @deftypefnx {Function File} {@var{a} =} gallery ("moler", @var{n}, @var{alpha})
19040
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
242 ## Create a @nospell{Moler} matrix (symmetric positive definite).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
243 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
244 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
245 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
246 ## @deftypefn {Function File} {[@var{a}, @var{t}] =} gallery ("neumann", @var{n})
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
247 ## Create a singular matrix from the discrete Neumann problem (sparse).
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
248 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
249 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
250 ##
16982
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
251 ## @deftypefn {Function File} {@var{a} =} gallery ("normaldata", [@var{M} @var{N} @dots{}], @var{j})
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
252 ## @deftypefnx {Function File} {@var{a} =} gallery ("normaldata", @var{M}, @var{N}, @dots{}, @var{j})
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
253 ## @deftypefnx {Function File} {@var{a} =} gallery ("normaldata", @dots{}, "@var{class}")
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
254 ## Create a matrix with random samples from the standard normal distribution
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
255 ## (mean = 0, std = 1).
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
256 ##
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
257 ## The first input is a matrix of dimensions describing the size of the output.
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
258 ## The dimensions can also be input as comma-separated arguments.
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
259 ##
20162
2645f9ef8c88 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19944
diff changeset
260 ## The input @var{j} is an integer index in the range [0, 2^32-1]. The values
2645f9ef8c88 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19944
diff changeset
261 ## of the output matrix are always exactly the same (reproducibility) for a
2645f9ef8c88 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19944
diff changeset
262 ## given size input and @var{j} index.
16982
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
263 ##
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
264 ## The final optional argument determines the class of the resulting matrix.
17281
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17199
diff changeset
265 ## Possible values for @var{class}: @qcode{"single"}, @qcode{"double"}.
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17199
diff changeset
266 ## The default is @qcode{"double"}.
16982
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
267 ##
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
268 ## @end deftypefn
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
269 ##
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
270 ## @deftypefn {Function File} {@var{q} =} gallery ("orthog", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
271 ## @deftypefnx {Function File} {@var{q} =} gallery ("orthog", @var{n}, @var{k})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
272 ## Create orthogonal and nearly orthogonal matrices.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
273 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
274 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
275 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
276 ## @deftypefn {Function File} {@var{a} =} gallery ("parter", @var{n})
19040
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
277 ## Create a @nospell{Parter} matrix (a Toeplitz matrix with singular values
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
278 ## near pi).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
279 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
280 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
281 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
282 ## @deftypefn {Function File} {@var{p} =} gallery ("pei", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
283 ## @deftypefnx {Function File} {@var{p} =} gallery ("pei", @var{n}, @var{alpha})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
284 ## Create a Pei matrix.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
285 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
286 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
287 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
288 ## @deftypefn {Function File} {@var{a} =} gallery ("Poisson", @var{n})
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
289 ## Create a block tridiagonal matrix from Poisson's equation (sparse).
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
290 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
291 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
292 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
293 ## @deftypefn {Function File} {@var{a} =} gallery ("prolate", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
294 ## @deftypefnx {Function File} {@var{a} =} gallery ("prolate", @var{n}, @var{w})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
295 ## Create a prolate matrix (symmetric, ill-conditioned Toeplitz matrix).
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
296 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
297 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
298 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
299 ## @deftypefn {Function File} {@var{h} =} gallery ("randhess", @var{x})
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
300 ## Create a random, orthogonal upper Hessenberg matrix.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
301 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
302 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
303 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
304 ## @deftypefn {Function File} {@var{a} =} gallery ("rando", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
305 ## @deftypefnx {Function File} {@var{a} =} gallery ("rando", @var{n}, @var{k})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
306 ## Create a random matrix with elements -1, 0 or 1.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
307 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
308 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
309 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
310 ## @deftypefn {Function File} {@var{a} =} gallery ("randsvd", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
311 ## @deftypefnx {Function File} {@var{a} =} gallery ("randsvd", @var{n}, @var{kappa})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
312 ## @deftypefnx {Function File} {@var{a} =} gallery ("randsvd", @var{n}, @var{kappa}, @var{mode})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
313 ## @deftypefnx {Function File} {@var{a} =} gallery ("randsvd", @var{n}, @var{kappa}, @var{mode}, @var{kl})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
314 ## @deftypefnx {Function File} {@var{a} =} gallery ("randsvd", @var{n}, @var{kappa}, @var{mode}, @var{kl}, @var{ku})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
315 ## Create a random matrix with pre-assigned singular values.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
316 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
317 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
318 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
319 ## @deftypefn {Function File} {@var{a} =} gallery ("redheff", @var{n})
19040
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
320 ## Create a zero and ones matrix of @nospell{Redheffer} associated with the
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
321 ## Riemann hypothesis.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
322 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
323 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
324 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
325 ## @deftypefn {Function File} {@var{a} =} gallery ("riemann", @var{n})
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
326 ## Create a matrix associated with the Riemann hypothesis.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
327 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
328 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
329 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
330 ## @deftypefn {Function File} {@var{a} =} gallery ("ris", @var{n})
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
331 ## Create a symmetric Hankel matrix.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
332 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
333 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
334 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
335 ## @deftypefn {Function File} {@var{a} =} gallery ("smoke", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
336 ## @deftypefnx {Function File} {@var{a} =} gallery ("smoke", @var{n}, @var{k})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
337 ## Create a complex matrix, with a `smoke ring' pseudospectrum.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
338 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
339 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
340 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
341 ## @deftypefn {Function File} {@var{t} =} gallery ("toeppd", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
342 ## @deftypefnx {Function File} {@var{t} =} gallery ("toeppd", @var{n}, @var{m})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
343 ## @deftypefnx {Function File} {@var{t} =} gallery ("toeppd", @var{n}, @var{m}, @var{w})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
344 ## @deftypefnx {Function File} {@var{t} =} gallery ("toeppd", @var{n}, @var{m}, @var{w}, @var{theta})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
345 ## Create a symmetric positive definite Toeplitz matrix.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
346 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
347 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
348 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
349 ## @deftypefn {Function File} {@var{p} =} gallery ("toeppen", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
350 ## @deftypefnx {Function File} {@var{p} =} gallery ("toeppen", @var{n}, @var{a})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
351 ## @deftypefnx {Function File} {@var{p} =} gallery ("toeppen", @var{n}, @var{a}, @var{b})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
352 ## @deftypefnx {Function File} {@var{p} =} gallery ("toeppen", @var{n}, @var{a}, @var{b}, @var{c})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
353 ## @deftypefnx {Function File} {@var{p} =} gallery ("toeppen", @var{n}, @var{a}, @var{b}, @var{c}, @var{d})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
354 ## @deftypefnx {Function File} {@var{p} =} gallery ("toeppen", @var{n}, @var{a}, @var{b}, @var{c}, @var{d}, @var{e})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
355 ## Create a pentadiagonal Toeplitz matrix (sparse).
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
356 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
357 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
358 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
359 ## @deftypefn {Function File} {@var{a} =} gallery ("tridiag", @var{x}, @var{y}, @var{z})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
360 ## @deftypefnx {Function File} {@var{a} =} gallery ("tridiag", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
361 ## @deftypefnx {Function File} {@var{a} =} gallery ("tridiag", @var{n}, @var{c}, @var{d}, @var{e})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
362 ## Create a tridiagonal matrix (sparse).
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
363 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
364 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
365 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
366 ## @deftypefn {Function File} {@var{t} =} gallery ("triw", @var{n})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
367 ## @deftypefnx {Function File} {@var{t} =} gallery ("triw", @var{n}, @var{alpha})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
368 ## @deftypefnx {Function File} {@var{t} =} gallery ("triw", @var{n}, @var{alpha}, @var{k})
19040
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
369 ## Create an upper triangular matrix discussed by
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
370 ## @nospell{Kahan, Golub, and Wilkinson}.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
371 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
372 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
373 ##
16982
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
374 ## @deftypefn {Function File} {@var{a} =} gallery ("uniformdata", [@var{M} @var{N} @dots{}], @var{j})
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
375 ## @deftypefnx {Function File} {@var{a} =} gallery ("uniformdata", @var{M}, @var{N}, @dots{}, @var{j})
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
376 ## @deftypefnx {Function File} {@var{a} =} gallery ("uniformdata", @dots{}, "@var{class}")
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
377 ## Create a matrix with random samples from the standard uniform distribution
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
378 ## (range [0,1]).
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
379 ##
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
380 ## The first input is a matrix of dimensions describing the size of the output.
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
381 ## The dimensions can also be input as comma-separated arguments.
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
382 ##
20162
2645f9ef8c88 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19944
diff changeset
383 ## The input @var{j} is an integer index in the range [0, 2^32-1]. The values
2645f9ef8c88 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19944
diff changeset
384 ## of the output matrix are always exactly the same (reproducibility) for a
2645f9ef8c88 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19944
diff changeset
385 ## given size input and @var{j} index.
16982
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
386 ##
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
387 ## The final optional argument determines the class of the resulting matrix.
17281
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17199
diff changeset
388 ## Possible values for @var{class}: @qcode{"single"}, @qcode{"double"}.
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17199
diff changeset
389 ## The default is @qcode{"double"}.
16982
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
390 ##
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
391 ## @end deftypefn
badc46a0a230 doc: Document 'uniformdata', 'normaldata', 'integerdata' matrices in gallery.m.
Rik <rik@octave.org>
parents: 16980
diff changeset
392 ##
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
393 ## @deftypefn {Function File} {@var{a} =} gallery ("wathen", @var{nx}, @var{ny})
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
394 ## @deftypefnx {Function File} {@var{a} =} gallery ("wathen", @var{nx}, @var{ny}, @var{k})
19040
0850b5212619 doc: Add @nospell macro around proper names in documentation.
Rik <rik@octave.org>
parents: 18846
diff changeset
395 ## Create the @nospell{Wathen} matrix.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
396 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
397 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
398 ##
16816
12005245b645 doc: Periodic grammarcheck of documentation.
Rik <rik@octave.org>
parents: 16766
diff changeset
399 ## @deftypefn {Function File} {[@var{a}, @var{b}] =} gallery ("wilk", @var{n})
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
400 ## Create various specific matrices devised/discussed by Wilkinson.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
401 ##
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
402 ## @end deftypefn
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
403
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
404 ## Code for most of the individual matrices (except binomial, gcdmat,
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
405 ## integerdata, leslie, normaldata, randcolu, randcorr, randjorth, sampling,
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
406 ## uniformdata) by Nicholas .J. Higham <Nicholas.J.Higham@manchester.ac.uk>
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
407 ## Adapted for Octave and into single gallery function by Carnë Draug
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
408
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
409 function [varargout] = gallery (name, varargin)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
410
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
411 if (nargin < 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
412 print_usage ();
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
413 elseif (! ischar (name))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
414 error ("gallery: NAME must be a string.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
415 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
416
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
417 ## NOTE: there isn't a lot of input check in the individual functions
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
418 ## that actually build the functions. This is by design. The original
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
419 ## code by Higham did not perform it and was propagated to Matlab, so
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
420 ## for compatibility, we also don't make it. For example, arguments
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
421 ## that behave as switches, and in theory accepting a value of 0 or 1,
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
422 ## will use a value of 0, for any value other than 1 (only check made
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
423 ## is if the value is equal to 1). It will often also accept string
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
424 ## values instead of numeric. Only input check added was where it
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
425 ## would be causing an error anyway.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
426
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
427 ## we will always want to return at least 1 output
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
428 n_out = nargout;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
429 if (n_out == 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
430 n_out = 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
431 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
432
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
433 switch (tolower (name))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
434 case "binomial"
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
435 error ("gallery: matrix %s not implemented.", name);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
436 case "cauchy" , [varargout{1:n_out}] = cauchy (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
437 case "chebspec" , [varargout{1:n_out}] = chebspec (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
438 case "chebvand" , [varargout{1:n_out}] = chebvand (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
439 case "chow" , [varargout{1:n_out}] = chow (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
440 case "circul" , [varargout{1:n_out}] = circul (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
441 case "clement" , [varargout{1:n_out}] = clement (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
442 case "compar" , [varargout{1:n_out}] = compar (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
443 case "condex" , [varargout{1:n_out}] = condex (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
444 case "cycol" , [varargout{1:n_out}] = cycol (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
445 case "dorr" , [varargout{1:n_out}] = dorr (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
446 case "dramadah" , [varargout{1:n_out}] = dramadah (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
447 case "fiedler" , [varargout{1:n_out}] = fiedler (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
448 case "forsythe" , [varargout{1:n_out}] = forsythe (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
449 case "frank" , [varargout{1:n_out}] = frank (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
450 case "gearmat" , [varargout{1:n_out}] = gearmat (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
451 case "gcdmat" , [varargout{1:n_out}] = gcdmat (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
452 case "grcar" , [varargout{1:n_out}] = grcar (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
453 case "hanowa" , [varargout{1:n_out}] = hanowa (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
454 case "house" , [varargout{1:n_out}] = house (varargin{:});
16980
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
455 case "integerdata", [varargout{1:n_out}] = integerdata (varargin{:});
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
456 case "invhess" , [varargout{1:n_out}] = invhess (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
457 case "invol" , [varargout{1:n_out}] = invol (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
458 case "ipjfact" , [varargout{1:n_out}] = ipjfact (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
459 case "jordbloc" , [varargout{1:n_out}] = jordbloc (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
460 case "kahan" , [varargout{1:n_out}] = kahan (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
461 case "kms" , [varargout{1:n_out}] = kms (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
462 case "krylov" , [varargout{1:n_out}] = krylov (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
463 case "lauchli" , [varargout{1:n_out}] = lauchli (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
464 case "lehmer" , [varargout{1:n_out}] = lehmer (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
465 case "leslie"
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
466 error ("gallery: matrix %s not implemented.", name);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
467 case "lesp" , [varargout{1:n_out}] = lesp (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
468 case "lotkin" , [varargout{1:n_out}] = lotkin (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
469 case "minij" , [varargout{1:n_out}] = minij (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
470 case "moler" , [varargout{1:n_out}] = moler (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
471 case "neumann" , [varargout{1:n_out}] = neumann (varargin{:});
16979
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
472 case "normaldata" , [varargout{1:n_out}] = normaldata (varargin{:});
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
473 case "orthog" , [varargout{1:n_out}] = orthog (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
474 case "parter" , [varargout{1:n_out}] = parter (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
475 case "pei" , [varargout{1:n_out}] = pei (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
476 case "poisson" , [varargout{1:n_out}] = poisson (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
477 case "prolate" , [varargout{1:n_out}] = prolate (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
478 case "randcolu"
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
479 error ("gallery: matrix %s not implemented.", name);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
480 case "randcorr"
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
481 error ("gallery: matrix %s not implemented.", name);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
482 case "randhess" , [varargout{1:n_out}] = randhess (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
483 case "randjorth"
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
484 error ("gallery: matrix %s not implemented.", name);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
485 case "rando" , [varargout{1:n_out}] = rando (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
486 case "randsvd" , [varargout{1:n_out}] = randsvd (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
487 case "redheff" , [varargout{1:n_out}] = redheff (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
488 case "riemann" , [varargout{1:n_out}] = riemann (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
489 case "ris" , [varargout{1:n_out}] = ris (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
490 case "sampling"
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
491 error ("gallery: matrix %s not implemented.", name);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
492 case "smoke" , [varargout{1:n_out}] = smoke (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
493 case "toeppd" , [varargout{1:n_out}] = toeppd (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
494 case "toeppen" , [varargout{1:n_out}] = toeppen (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
495 case "tridiag" , [varargout{1:n_out}] = tridiag (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
496 case "triw" , [varargout{1:n_out}] = triw (varargin{:});
16978
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
497 case "uniformdata" , [varargout{1:n_out}] = uniformdata (varargin{:});
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
498 case "wathen" , [varargout{1:n_out}] = wathen (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
499 case "wilk" , [varargout{1:n_out}] = wilk (varargin{:});
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
500 otherwise
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
501 error ("gallery: unknown matrix with NAME %s", name);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
502 endswitch
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
503
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
504 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
505
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
506 function C = cauchy (x, y)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
507 ##CAUCHY Cauchy matrix.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
508 ## C = CAUCHY(X, Y), where X, Y are N-vectors, is the N-by-N matrix
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
509 ## with C(i,j) = 1/(X(i)+Y(j)). By default, Y = X.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
510 ## Special case: if X is a scalar CAUCHY(X) is the same as CAUCHY(1:X).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
511 ## Explicit formulas are known for DET(C) (which is nonzero if X and Y
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
512 ## both have distinct elements) and the elements of INV(C).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
513 ## C is totally positive if 0 < X(1) < ... < X(N) and
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
514 ## 0 < Y(1) < ... < Y(N).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
515 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
516 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
517 ## N.J. Higham, Accuracy and Stability of Numerical Algorithms,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
518 ## Society for Industrial and Applied Mathematics, Philadelphia, PA,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
519 ## USA, 1996; sec. 26.1.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
520 ## D.E. Knuth, The Art of Computer Programming, Volume 1,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
521 ## Fundamental Algorithms, second edition, Addison-Wesley, Reading,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
522 ## Massachusetts, 1973, p. 36.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
523 ## E.E. Tyrtyshnikov, Cauchy-Toeplitz matrices and some applications,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
524 ## Linear Algebra and Appl., 149 (1991), pp. 1-18.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
525 ## O. Taussky and M. Marcus, Eigenvalues of finite matrices, in
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
526 ## Survey of Numerical Analysis, J. Todd, ed., McGraw-Hill, New York,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
527 ## pp. 279-313, 1962. (States the totally positive property on p. 295.)
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
528
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
529 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
530 error ("gallery: 1 or 2 arguments are required for cauchy matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
531 elseif (! isnumeric (x))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
532 error ("gallery: X must be numeric for cauchy matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
533 elseif (nargin == 2 && ! isnumeric (y))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
534 error ("gallery: Y must be numeric for cauchy matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
535 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
536
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
537 n = numel (x);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
538 if (isscalar (x) && fix (x) == x)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
539 n = x;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
540 x = 1:n;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
541 elseif (n > 1 && isvector (x))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
542 ## do nothing
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
543 else
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
544 error ("gallery: X be an integer or a vector for cauchy matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
545 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
546
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
547 if (nargin == 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
548 y = x;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
549 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
550
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
551 ## Ensure x and y are column vectors
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
552 x = x(:);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
553 y = y(:);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
554 if (numel (x) != numel (y))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
555 error ("gallery: X and Y must be vectors of same length for cauchy matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
556 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
557
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
558 C = x * ones (1, n) + ones (n, 1) * y.';
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
559 C = ones (n) ./ C;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
560 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
561
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
562 function C = chebspec (n, k = 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
563 ## CHEBSPEC Chebyshev spectral differentiation matrix.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
564 ## C = CHEBSPEC(N, K) is a Chebyshev spectral differentiation
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
565 ## matrix of order N. K = 0 (the default) or 1.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
566 ## For K = 0 (`no boundary conditions'), C is nilpotent, with
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
567 ## C^N = 0 and it has the null vector ONES(N,1).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
568 ## C is similar to a Jordan block of size N with eigenvalue zero.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
569 ## For K = 1, C is nonsingular and well-conditioned, and its eigenvalues
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
570 ## have negative real parts.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
571 ## For both K, the computed eigenvector matrix X from EIG is
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
572 ## ill-conditioned (MESH(REAL(X)) is interesting).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
573 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
574 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
575 ## C. Canuto, M.Y. Hussaini, A. Quarteroni and T.A. Zang, Spectral
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
576 ## Methods in Fluid Dynamics, Springer-Verlag, Berlin, 1988; p. 69.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
577 ## L.N. Trefethen and M.R. Trummer, An instability phenomenon in
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
578 ## spectral methods, SIAM J. Numer. Anal., 24 (1987), pp. 1008-1023.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
579 ## D. Funaro, Computing the inverse of the Chebyshev collocation
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
580 ## derivative, SIAM J. Sci. Stat. Comput., 9 (1988), pp. 1050-1057.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
581
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
582 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
583 error ("gallery: 1 to 2 arguments are required for chebspec matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
584 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
585 error ("gallery: N must be an integer for chebspec matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
586 elseif (! isnumeric (k) || ! isscalar (k))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
587 error ("gallery: K must be a scalar for chebspec matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
588 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
589
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
590 ## k = 1 case obtained from k = 0 case with one bigger n.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
591 switch (k)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
592 case (0), # do nothing
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
593 case (1), n = n + 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
594 otherwise
20294
2102c4582e32 gallery: fix chebspec, cycol, gearmat, hanowa, lauchli, and pei (bug #45466)
Massimiliano Fasi <massimiliano.fasi@gmail.com>
parents: 20231
diff changeset
595 error ("gallery: K should be either 0 or 1 for chebspec matrix.");
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
596 endswitch
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
597
20231
83792dd9bcc1 Use in-place operators in m-files where possible.
Rik <rik@octave.org>
parents: 20162
diff changeset
598 n -= 1;
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
599 C = zeros (n+1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
600
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
601 one = ones (n+1, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
602 x = cos ((0:n)' * (pi/n));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
603 d = ones (n+1, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
604 d(1) = 2;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
605 d(n+1) = 2;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
606
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
607 ## eye(size(C)) on next line avoids div by zero.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
608 C = (d * (one./d)') ./ (x*one'-one*x' + eye (size (C)));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
609
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
610 ## Now fix diagonal and signs.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
611 C(1,1) = (2*n^2+1)/6;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
612 for i = 2:n+1
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
613 if (rem (i, 2) == 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
614 C(:,i) = -C(:,i);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
615 C(i,:) = -C(i,:);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
616 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
617 if (i < n+1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
618 C(i,i) = -x(i)/(2*(1-x(i)^2));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
619 else
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
620 C(n+1,n+1) = -C(1,1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
621 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
622 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
623
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
624 if (k == 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
625 C = C(2:n+1,2:n+1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
626 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
627 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
628
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
629 function C = chebvand (m, p)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
630 ## CHEBVAND Vandermonde-like matrix for the Chebyshev polynomials.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
631 ## C = CHEBVAND(P), where P is a vector, produces the (primal)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
632 ## Chebyshev Vandermonde matrix based on the points P,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
633 ## i.e., C(i,j) = T_{i-1}(P(j)), where T_{i-1} is the Chebyshev
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
634 ## polynomial of degree i-1.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
635 ## CHEBVAND(M,P) is a rectangular version of CHEBVAND(P) with M rows.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
636 ## Special case: If P is a scalar then P equally spaced points on
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
637 ## [0,1] are used.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
638 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
639 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
640 ## N.J. Higham, Stability analysis of algorithms for solving confluent
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
641 ## Vandermonde-like systems, SIAM J. Matrix Anal. Appl., 11 (1990),
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
642 ## pp. 23-41.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
643
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
644 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
645 error ("gallery: 1 or 2 arguments are required for chebvand matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
646 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
647
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
648 ## because the order of the arguments changes if nargin is 1 or 2 ...
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
649
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
650 if (nargin == 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
651 p = m;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
652 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
653
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
654 n = numel (p);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
655 if (! isnumeric (p))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
656 error ("gallery: P must be numeric for chebvand matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
657 elseif (isscalar (p) && fix (p) == p)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
658 n = p;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
659 p = linspace (0, 1, n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
660 elseif (n > 1 && isvector (p))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
661 ## do nothing
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
662 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
663 p = p(:).'; # Ensure p is a row vector.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
664
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
665 if (nargin == 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
666 m = n;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
667 elseif (! isnumeric (m) || ! isscalar (m))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
668 error ("gallery: M must be a scalar for chebvand matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
669 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
670
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
671 C = ones (m, n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
672 if (m != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
673 C(2,:) = p;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
674 ## Use Chebyshev polynomial recurrence.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
675 for i = 3:m
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
676 C(i,:) = 2.*p.*C(i-1,:) - C(i-2,:);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
677 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
678 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
679 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
680
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
681 function A = chow (n, alpha = 1, delta = 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
682 ## CHOW Chow matrix - a singular Toeplitz lower Hessenberg matrix.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
683 ## A = CHOW(N, ALPHA, DELTA) is a Toeplitz lower Hessenberg matrix
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
684 ## A = H(ALPHA) + DELTA*EYE, where H(i,j) = ALPHA^(i-j+1).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
685 ## H(ALPHA) has p = FLOOR(N/2) zero eigenvalues, the rest being
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
686 ## 4*ALPHA*COS( k*PI/(N+2) )^2, k=1:N-p.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
687 ## Defaults: ALPHA = 1, DELTA = 0.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
688 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
689 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
690 ## T.S. Chow, A class of Hessenberg matrices with known
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
691 ## eigenvalues and inverses, SIAM Review, 11 (1969), pp. 391-395.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
692 ## G. Fairweather, On the eigenvalues and eigenvectors of a class of
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
693 ## Hessenberg matrices, SIAM Review, 13 (1971), pp. 220-221.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
694
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
695 if (nargin < 1 || nargin > 3)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
696 error ("gallery: 1 to 3 arguments are required for chow matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
697 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
698 error ("gallery: N must be an integer for chow matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
699 elseif (! isnumeric (alpha) || ! isscalar (alpha))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
700 error ("gallery: ALPHA must be a scalar for chow matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
701 elseif (! isnumeric (delta) || ! isscalar (delta))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
702 error ("gallery: DELTA must be a scalar for chow matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
703 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
704
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
705 A = toeplitz (alpha.^(1:n), [alpha 1 zeros(1, n-2)]) + delta * eye (n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
706 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
707
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
708 function C = circul (v)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
709 ## CIRCUL Circulant matrix.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
710 ## C = CIRCUL(V) is the circulant matrix whose first row is V.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
711 ## (A circulant matrix has the property that each row is obtained
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
712 ## from the previous one by cyclically permuting the entries one step
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
713 ## forward; it is a special Toeplitz matrix in which the diagonals
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
714 ## `wrap round'.)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
715 ## Special case: if V is a scalar then C = CIRCUL(1:V).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
716 ## The eigensystem of C (N-by-N) is known explicitly. If t is an Nth
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
717 ## root of unity, then the inner product of V with W = [1 t t^2 ... t^N]
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
718 ## is an eigenvalue of C, and W(N:-1:1) is an eigenvector of C.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
719 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
720 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
721 ## P.J. Davis, Circulant Matrices, John Wiley, 1977.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
722
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
723 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
724 error ("gallery: 1 argument is required for circul matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
725 elseif (! isnumeric (v))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
726 error ("gallery: V must be numeric for circul matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
727 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
728
16734
67b67fc0969a gallery: fix bug from typo in variable name
Carnë Draug <carandraug@octave.org>
parents: 16634
diff changeset
729 n = numel (v);
67b67fc0969a gallery: fix bug from typo in variable name
Carnë Draug <carandraug@octave.org>
parents: 16634
diff changeset
730 if (isscalar (v) && fix (v) == v)
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
731 n = v;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
732 v = 1:n;
16734
67b67fc0969a gallery: fix bug from typo in variable name
Carnë Draug <carandraug@octave.org>
parents: 16634
diff changeset
733 elseif (n > 1 && isvector (v))
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
734 ## do nothing
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
735 else
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
736 error ("gallery: X must be a scalar or a vector for circul matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
737 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
738
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
739 v = v(:).'; # Make sure v is a row vector
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
740 C = toeplitz ([v(1) v(n:-1:2)], v);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
741 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
742
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
743 function A = clement (n, k = 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
744 ## CLEMENT Clement matrix - tridiagonal with zero diagonal entries.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
745 ## CLEMENT(N, K) is a tridiagonal matrix with zero diagonal entries
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
746 ## and known eigenvalues. It is singular if N is odd. About 64
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
747 ## percent of the entries of the inverse are zero. The eigenvalues
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
748 ## are plus and minus the numbers N-1, N-3, N-5, ..., (1 or 0).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
749 ## For K = 0 (the default) the matrix is unsymmetric, while for
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
750 ## K = 1 it is symmetric.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
751 ## CLEMENT(N, 1) is diagonally similar to CLEMENT(N).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
752 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
753 ## Similar properties hold for TRIDIAG(X,Y,Z) where Y = ZEROS(N,1).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
754 ## The eigenvalues still come in plus/minus pairs but they are not
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
755 ## known explicitly.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
756 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
757 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
758 ## P.A. Clement, A class of triple-diagonal matrices for test
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
759 ## purposes, SIAM Review, 1 (1959), pp. 50-52.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
760 ## A. Edelman and E. Kostlan, The road from Kac's matrix to Kac's
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
761 ## random polynomials. In John~G. Lewis, editor, Proceedings of
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
762 ## the Fifth SIAM Conference on Applied Linear Algebra Society
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
763 ## for Industrial and Applied Mathematics, Philadelphia, 1994,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
764 ## pp. 503-507.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
765 ## O. Taussky and J. Todd, Another look at a matrix of Mark Kac,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
766 ## Linear Algebra and Appl., 150 (1991), pp. 341-360.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
767
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
768 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
769 error ("gallery: 1 or 2 arguments are required for clement matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
770 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
771 error ("gallery: N must be an integer for clement matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
772 elseif (! isnumeric (k) || ! isscalar (k))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
773 error ("gallery: K must be a numeric scalar for clement matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
774 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
775
20231
83792dd9bcc1 Use in-place operators in m-files where possible.
Rik <rik@octave.org>
parents: 20162
diff changeset
776 n -= 1;
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
777 x = n:-1:1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
778 z = 1:n;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
779
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
780 if (k == 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
781 A = diag (x, -1) + diag (z, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
782 elseif (k == 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
783 y = sqrt (x.*z);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
784 A = diag (y, -1) + diag (y, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
785 else
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
786 error ("gallery: K must have a value of 0 or 1 for clement matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
787 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
788 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
789
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
790 function C = compar (A, k = 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
791 ## COMP Comparison matrices.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
792 ## COMP(A) is DIAG(B) - TRIL(B,-1) - TRIU(B,1), where B = ABS(A).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
793 ## COMP(A, 1) is A with each diagonal element replaced by its
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
794 ## absolute value, and each off-diagonal element replaced by minus
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
795 ## the absolute value of the largest element in absolute value in
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
796 ## its row. However, if A is triangular COMP(A, 1) is too.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
797 ## COMP(A, 0) is the same as COMP(A).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
798 ## COMP(A) is often denoted by M(A) in the literature.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
799 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
800 ## Reference (e.g.):
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
801 ## N.J. Higham, A survey of condition number estimation for
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
802 ## triangular matrices, SIAM Review, 29 (1987), pp. 575-596.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
803
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
804 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
805 error ("gallery: 1 or 2 arguments are required for compar matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
806 elseif (! isnumeric (A) || ndims (A) != 2)
17199
9deb214ae9d5 Use 2-D, not 2D, in error messages.
Rik <rik@octave.org>
parents: 16982
diff changeset
807 error ("gallery: A must be a 2-D matrix for compar matrix.");
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
808 elseif (! isnumeric (k) || ! isscalar (k))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
809 error ("gallery: K must be a numeric scalar for compar matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
810 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
811
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
812 [m, n] = size (A);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
813 p = min (m, n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
814
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
815 if (k == 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
816 ## This code uses less temporary storage than
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
817 ## the `high level' definition above.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
818 C = -abs (A);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
819 for j = 1:p
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
820 C(j,j) = abs (A(j,j));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
821 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
822
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
823 elseif (k == 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
824 C = A';
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
825 for j = 1:p
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
826 C(k,k) = 0;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
827 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
828 mx = max (abs (C));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
829 C = -mx'*ones (1, n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
830 for j = 1:p
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
831 C(j,j) = abs (A(j,j));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
832 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
833 if (all (A == tril (A))), C = tril (C); endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
834 if (all (A == triu (A))), C = triu (C); endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
835
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
836 else
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
837 error ("gallery: K must have a value of 0 or 1 for compar matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
838 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
839
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
840 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
841
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
842 function A = condex (n, k = 4, theta = 100)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
843 ## CONDEX `Counterexamples' to matrix condition number estimators.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
844 ## CONDEX(N, K, THETA) is a `counterexample' matrix to a condition
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
845 ## estimator. It has order N and scalar parameter THETA (default 100).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
846 ## If N is not equal to the `natural' size of the matrix then
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
847 ## the matrix is padded out with an identity matrix to order N.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
848 ## The matrix, its natural size, and the estimator to which it applies
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
849 ## are specified by K (default K = 4) as follows:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
850 ## K = 1: 4-by-4, LINPACK (RCOND)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
851 ## K = 2: 3-by-3, LINPACK (RCOND)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
852 ## K = 3: arbitrary, LINPACK (RCOND) (independent of THETA)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
853 ## K = 4: N >= 4, SONEST (Higham 1988)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
854 ## (Note that in practice the K = 4 matrix is not usually a
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
855 ## counterexample because of the rounding errors in forming it.)
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
856 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
857 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
858 ## A.K. Cline and R.K. Rew, A set of counter-examples to three
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
859 ## condition number estimators, SIAM J. Sci. Stat. Comput.,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
860 ## 4 (1983), pp. 602-611.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
861 ## N.J. Higham, FORTRAN codes for estimating the one-norm of a real or
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
862 ## complex matrix, with applications to condition estimation
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
863 ## (Algorithm 674), ACM Trans. Math. Soft., 14 (1988), pp. 381-396.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
864
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
865 if (nargin < 1 || nargin > 3)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
866 error ("gallery: 1 to 3 arguments are required for condex matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
867 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
868 error ("gallery: N must be an integer for condex matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
869 elseif (! isnumeric (k) || ! isscalar (k))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
870 error ("gallery: K must be a numeric scalar for condex matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
871 elseif (! isnumeric (theta) || ! isscalar (theta))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
872 error ("gallery: THETA must be a numeric scalar for condex matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
873 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
874
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
875 if (k == 1) # Cline and Rew (1983), Example B.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
876 A = [1 -1 -2*theta 0
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
877 0 1 theta -theta
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
878 0 1 1+theta -(theta+1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
879 0 0 0 theta];
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
880
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
881 elseif (k == 2) # Cline and Rew (1983), Example C.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
882 A = [1 1-2/theta^2 -2
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
883 0 1/theta -1/theta
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
884 0 0 1];
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
885
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
886 elseif (k == 3) # Cline and Rew (1983), Example D.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
887 A = gallery ("triw", n, -1)';
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
888 A(n,n) = -1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
889
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
890 elseif (k == 4) # Higham (1988), p. 390.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
891 x = ones (n, 3); # First col is e
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
892 x(2:n,2) = zeros (n-1, 1); # Second col is e(1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
893
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
894 ## Third col is special vector b in SONEST
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
895 x(:, 3) = (-1).^[0:n-1]' .* ( 1 + [0:n-1]'/(n-1) );
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
896
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
897 Q = orth (x); # Q*Q' is now the orthogonal projector onto span(e(1),e,b)).
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
898 P = eye (n) - Q*Q';
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
899 A = eye (n) + theta*P;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
900
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
901 else
16766
7268845c0a1e avoid backquote in error messages, some uses in doc strings
John W. Eaton <jwe@octave.org>
parents: 16734
diff changeset
902 error ("gallery: unknown estimator K '%d' for condex matrix.", k);
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
903 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
904
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
905 ## Pad out with identity as necessary.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
906 m = columns (A);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
907 if (m < n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
908 for i = n:-1:m+1
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
909 A(i,i) = 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
910 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
911 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
912 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
913
20294
2102c4582e32 gallery: fix chebspec, cycol, gearmat, hanowa, lauchli, and pei (bug #45466)
Massimiliano Fasi <massimiliano.fasi@gmail.com>
parents: 20231
diff changeset
914 function A = cycol (n, k = max (round (n/4), 1))
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
915 ## CYCOL Matrix whose columns repeat cyclically.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
916 ## A = CYCOL([M N], K) is an M-by-N matrix of the form A = B(1:M,1:N)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
917 ## where B = [C C C...] and C = RANDN(M, K). Thus A's columns repeat
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
918 ## cyclically, and A has rank at most K. K need not divide N.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
919 ## K defaults to ROUND(N/4).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
920 ## CYCOL(N, K), where N is a scalar, is the same as CYCOL([N N], K).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
921 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
922 ## This type of matrix can lead to underflow problems for Gaussian
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
923 ## elimination: see NA Digest Volume 89, Issue 3 (January 22, 1989).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
924
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
925 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
926 error ("gallery: 1 or 2 arguments are required for cycol matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
927 elseif (! isnumeric (n) || all (numel (n) != [1 2]) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
928 error ("gallery: N must be a 1 or 2 element integer for cycol matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
929 elseif (! isnumeric (k) || ! isscalar (k))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
930 error ("gallery: K must be a scalar for cycol matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
931 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
932
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
933 ## Parameter n specifies dimension: m-by-n
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
934 m = n(1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
935 n = n(end);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
936
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
937 A = randn (m, k);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
938 for i = 2:ceil (n/k)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
939 A = [A A(:,1:k)];
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
940 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
941 A = A(:,1:n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
942 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
943
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
944 function [c, d, e] = dorr (n, theta = 0.01)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
945 ## DORR Dorr matrix - diagonally dominant, ill conditioned, tridiagonal.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
946 ## [C, D, E] = DORR(N, THETA) returns the vectors defining a row diagonally
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
947 ## dominant, tridiagonal M-matrix that is ill conditioned for small
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
948 ## values of the parameter THETA >= 0.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
949 ## If only one output parameter is supplied then
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
950 ## C = FULL(TRIDIAG(C,D,E)), i.e., the matrix iself is returned.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
951 ## The columns of INV(C) vary greatly in norm. THETA defaults to 0.01.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
952 ## The amount of diagonal dominance is given by (ignoring rounding errors):
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
953 ## COMP(C)*ONES(N,1) = THETA*(N+1)^2 * [1 0 0 ... 0 1]'.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
954 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
955 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
956 ## F.W. Dorr, An example of ill-conditioning in the numerical
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
957 ## solution of singular perturbation problems, Math. Comp., 25 (1971),
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
958 ## pp. 271-283.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
959
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
960 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
961 error ("gallery: 1 or 2 arguments are required for dorr matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
962 elseif (! isscalar (n) || ! isnumeric (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
963 error ("gallery: N must be an integer for dorr matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
964 elseif (! isscalar (theta) || ! isnumeric (theta))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
965 error ("gallery: THETA must be a numeric scalar for dorr matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
966 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
967
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
968 c = zeros (n, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
969 e = c;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
970 d = c;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
971 ## All length n for convenience. Make c, e of length n-1 later.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
972
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
973 h = 1/(n+1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
974 m = floor ((n+1)/2);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
975 term = theta/h^2;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
976
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
977 i = (1:m)';
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
978 c(i) = -term * ones (m, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
979 e(i) = c(i) - (0.5-i*h)/h;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
980 d(i) = -(c(i) + e(i));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
981
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
982 i = (m+1:n)';
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
983 e(i) = -term * ones (n-m, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
984 c(i) = e(i) + (0.5-i*h)/h;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
985 d(i) = -(c(i) + e(i));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
986
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
987 c = c(2:n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
988 e = e(1:n-1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
989
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
990 if (nargout <= 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
991 c = tridiag (c, d, e);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
992 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
993 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
994
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
995 function A = dramadah (n, k = 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
996 ## DRAMADAH A (0,1) matrix whose inverse has large integer entries.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
997 ## An anti-Hadamard matrix A is a matrix with elements 0 or 1 for
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
998 ## which MU(A) := NORM(INV(A),'FRO') is maximal.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
999 ## A = DRAMADAH(N, K) is an N-by-N (0,1) matrix for which MU(A) is
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1000 ## relatively large, although not necessarily maximal.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1001 ## Available types (the default is K = 1):
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1002 ## K = 1: A is Toeplitz, with ABS(DET(A)) = 1, and MU(A) > c(1.75)^N,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1003 ## where c is a constant.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1004 ## K = 2: A is upper triangular and Toeplitz.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1005 ## The inverses of both types have integer entries.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1006 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1007 ## Another interesting (0,1) matrix:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1008 ## K = 3: A has maximal determinant among (0,1) lower Hessenberg
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1009 ## matrices: det(A) = the n'th Fibonacci number. A is Toeplitz.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1010 ## The eigenvalues have an interesting distribution in the complex
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1011 ## plane.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1012 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1013 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1014 ## R.L. Graham and N.J.A. Sloane, Anti-Hadamard matrices,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1015 ## Linear Algebra and Appl., 62 (1984), pp. 113-137.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1016 ## L. Ching, The maximum determinant of an nxn lower Hessenberg
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1017 ## (0,1) matrix, Linear Algebra and Appl., 183 (1993), pp. 147-153.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1018
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1019 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1020 error ("gallery: 1 to 2 arguments are required for dramadah matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1021 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1022 error ("gallery: N must be an integer for dramadah matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1023 elseif (! isnumeric (k) || ! isscalar (k))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1024 error ("gallery: K must be a numeric scalar for dramadah matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1025 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1026
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1027 switch (k)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1028 case (1) # Toeplitz
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1029 c = ones (n, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1030 for i = 2:4:n
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1031 m = min (1, n-i);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1032 c(i:i+m) = zeros (m+1, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1033 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1034 r = zeros (n, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1035 r(1:4) = [1 1 0 1];
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1036 if (n < 4)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1037 r = r(1:n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1038 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1039 A = toeplitz (c, r);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1040
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1041 case (2) # Upper triangular and Toeplitz
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1042 c = zeros (n, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1043 c(1) = 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1044 r = ones (n, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1045 for i= 3:2:n
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1046 r(i) = 0;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1047 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1048 A = toeplitz (c, r);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1049
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1050 case (3) # Lower Hessenberg
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1051 c = ones (n, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1052 for i= 2:2:n
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1053 c(i) = 0;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1054 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1055 A = toeplitz (c, [1 1 zeros(1,n-2)]);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1056
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1057 otherwise
16766
7268845c0a1e avoid backquote in error messages, some uses in doc strings
John W. Eaton <jwe@octave.org>
parents: 16734
diff changeset
1058 error ("gallery: unknown K '%d' for dramadah matrix.", k);
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1059 endswitch
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1060 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1061
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1062 function A = fiedler (c)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1063 ## FIEDLER Fiedler matrix - symmetric.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1064 ## FIEDLER(C), where C is an n-vector, is the n-by-n symmetric
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1065 ## matrix with elements ABS(C(i)-C(j)).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1066 ## Special case: if C is a scalar, then A = FIEDLER(1:C)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1067 ## (i.e. A(i,j) = ABS(i-j)).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1068 ## Properties:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1069 ## FIEDLER(N) has a dominant positive eigenvalue and all the other
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1070 ## eigenvalues are negative (Szego, 1936).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1071 ## Explicit formulas for INV(A) and DET(A) are given by Todd (1977)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1072 ## and attributed to Fiedler. These indicate that INV(A) is
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1073 ## tridiagonal except for nonzero (1,n) and (n,1) elements.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1074 ## [I think these formulas are valid only if the elements of
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1075 ## C are in increasing or decreasing order---NJH.]
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1076 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1077 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1078 ## G. Szego, Solution to problem 3705, Amer. Math. Monthly,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1079 ## 43 (1936), pp. 246-259.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1080 ## J. Todd, Basic Numerical Mathematics, Vol. 2: Numerical Algebra,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1081 ## Birkhauser, Basel, and Academic Press, New York, 1977, p. 159.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1082
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1083 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1084 error ("gallery: 1 argument is required for fiedler matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1085 elseif (! isnumeric (c))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1086 error ("gallery: C must be numeric for fiedler matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1087 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1088
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1089 n = numel (c);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1090 if (isscalar (c) && fix (c) == c)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1091 n = c;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1092 c = 1:n;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1093 elseif (n > 1 && isvector (c))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1094 ## do nothing
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1095 else
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1096 error ("gallery: C must be an integer or a vector for fiedler matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1097 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1098 c = c(:).'; # Ensure c is a row vector.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1099
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1100 A = ones (n, 1) * c;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1101 A = abs (A - A.'); # NB. array transpose.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1102 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1103
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1104 function A = forsythe (n, alpha = sqrt (eps), lambda = 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1105 ## FORSYTHE Forsythe matrix - a perturbed Jordan block.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1106 ## FORSYTHE(N, ALPHA, LAMBDA) is the N-by-N matrix equal to
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1107 ## JORDBLOC(N, LAMBDA) except it has an ALPHA in the (N,1) position.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1108 ## It has the characteristic polynomial
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1109 ## DET(A-t*EYE) = (LAMBDA-t)^N - (-1)^N ALPHA.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1110 ## ALPHA defaults to SQRT(EPS) and LAMBDA to 0.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1111
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1112 if (nargin < 1 || nargin > 3)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1113 error ("gallery: 1 to 3 arguments are required for forsythe matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1114 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1115 error ("gallery: N must be an integer for forsythe matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1116 elseif (! isnumeric (alpha) || ! isscalar (alpha))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1117 error ("gallery: ALPHA must be a numeric scalar for forsythe matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1118 elseif (! isnumeric (lambda) || ! isscalar (lambda))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1119 error ("gallery: LAMBDA must be a numeric scalar for forsythe matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1120 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1121
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1122 A = jordbloc (n, lambda);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1123 A(n,1) = alpha;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1124 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1125
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1126 function F = frank (n, k = 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1127 ## FRANK Frank matrix---ill conditioned eigenvalues.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1128 ## F = FRANK(N, K) is the Frank matrix of order N. It is upper
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1129 ## Hessenberg with determinant 1. K = 0 is the default; if K = 1 the
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1130 ## elements are reflected about the anti-diagonal (1,N)--(N,1).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1131 ## F has all positive eigenvalues and they occur in reciprocal pairs
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1132 ## (so that 1 is an eigenvalue if N is odd).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1133 ## The eigenvalues of F may be obtained in terms of the zeros of the
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1134 ## Hermite polynomials.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1135 ## The FLOOR(N/2) smallest eigenvalues of F are ill conditioned,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1136 ## the more so for bigger N.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1137 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1138 ## DET(FRANK(N)') comes out far from 1 for large N---see Frank (1958)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1139 ## and Wilkinson (1960) for discussions.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1140 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1141 ## This version incorporates improvements suggested by W. Kahan.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1142 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1143 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1144 ## W.L. Frank, Computing eigenvalues of complex matrices by determinant
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1145 ## evaluation and by methods of Danilewski and Wielandt, J. Soc.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1146 ## Indust. Appl. Math., 6 (1958), pp. 378-392 (see pp. 385, 388).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1147 ## G.H. Golub and J.H. Wilkinson, Ill-conditioned eigensystems and the
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1148 ## computation of the Jordan canonical form, SIAM Review, 18 (1976),
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1149 ## pp. 578-619 (Section 13).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1150 ## H. Rutishauser, On test matrices, Programmation en Mathematiques
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1151 ## Numeriques, Editions Centre Nat. Recherche Sci., Paris, 165,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1152 ## 1966, pp. 349-365. Section 9.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1153 ## J.H. Wilkinson, Error analysis of floating-point computation,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1154 ## Numer. Math., 2 (1960), pp. 319-340 (Section 8).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1155 ## J.H. Wilkinson, The Algebraic Eigenvalue Problem, Oxford University
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1156 ## Press, 1965 (pp. 92-93).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1157 ## The next two references give details of the eigensystem, as does
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1158 ## Rutishauser (see above).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1159 ## P.J. Eberlein, A note on the matrices denoted by B_n, SIAM J. Appl.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1160 ## Math., 20 (1971), pp. 87-92.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1161 ## J.M. Varah, A generalization of the Frank matrix, SIAM J. Sci. Stat.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1162 ## Comput., 7 (1986), pp. 835-839.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1163
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1164 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1165 error ("gallery: 1 to 2 arguments are required for frank matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1166 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1167 error ("gallery: N must be an integer for frank matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1168 elseif (! isnumeric (k) || ! isscalar (k))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1169 error ("gallery: K must be a numeric scalar for frank matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1170 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1171
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1172 p = n:-1:1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1173 F = triu (p(ones (n, 1), :) - diag (ones (n-1, 1), -1), -1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1174
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1175 switch (k)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1176 case (0), # do nothing
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1177 case (1), F = F(p,p)';
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1178 otherwise
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1179 error ("gallery: K must have a value of 0 or 1 for frank matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1180 endswitch
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1181 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1182
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1183 function c = gcdmat (n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1184 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1185 error ("gallery: 1 argument is required for gcdmat matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1186 elseif (! isscalar (n) || ! isnumeric (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1187 error ("gallery: N must be an integer for gcdmat matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1188 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1189 c = gcd (repmat ((1:n)', [1 n]), repmat (1:n, [n 1]));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1190 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1191
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1192 function A = gearmat (n, i = n, j = -n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1193 ## NOTE: this function was named gearm in the original Test Matrix Toolbox
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1194 ## GEARMAT Gear matrix.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1195 ## A = GEARMAT(N,I,J) is the N-by-N matrix with ones on the sub- and
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1196 ## super-diagonals, SIGN(I) in the (1,ABS(I)) position, SIGN(J)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1197 ## in the (N,N+1-ABS(J)) position, and zeros everywhere else.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1198 ## Defaults: I = N, j = -N.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1199 ## All eigenvalues are of the form 2*COS(a) and the eigenvectors
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1200 ## are of the form [SIN(w+a), SIN(w+2a), ..., SIN(w+Na)].
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1201 ## The values of a and w are given in the reference below.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1202 ## A can have double and triple eigenvalues and can be defective.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1203 ## GEARMAT(N) is singular.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1204 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1205 ## (GEAR is a Simulink function, hence GEARMAT for Gear matrix.)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1206 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1207 ## C.W. Gear, A simple set of test matrices for eigenvalue programs,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1208 ## Math. Comp., 23 (1969), pp. 119-125.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1209
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1210 if (nargin < 1 || nargin > 3)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1211 error ("gallery: 1 to 3 arguments are required for gearmat matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1212 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1213 error ("gallery: N must be an integer for gearmat matrix.");
20294
2102c4582e32 gallery: fix chebspec, cycol, gearmat, hanowa, lauchli, and pei (bug #45466)
Massimiliano Fasi <massimiliano.fasi@gmail.com>
parents: 20231
diff changeset
1214 elseif (! isnumeric (i) || ! isscalar (i) || i == 0 || abs (i) > n)
18812
9ac2357f19bc doc: Replace "non-zero" with "nonzero" to match existing usage.
Rik <rik@octave.org>
parents: 17386
diff changeset
1215 error ("gallery: I must be a nonzero scalar, and abs (I) <= N for gearmat matrix.");
20294
2102c4582e32 gallery: fix chebspec, cycol, gearmat, hanowa, lauchli, and pei (bug #45466)
Massimiliano Fasi <massimiliano.fasi@gmail.com>
parents: 20231
diff changeset
1216 elseif (! isnumeric (j) || ! isscalar (j) || i == 0 || abs (j) > n)
18812
9ac2357f19bc doc: Replace "non-zero" with "nonzero" to match existing usage.
Rik <rik@octave.org>
parents: 17386
diff changeset
1217 error ("gallery: J must be a nonzero scalar, and abs (J) <= N for gearmat matrix.");
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1218 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1219
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1220 A = diag (ones (n-1, 1), -1) + diag (ones (n-1, 1), 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1221 A(1, abs (i)) = sign (i);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1222 A(n, n+1 - abs (j)) = sign (j);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1223 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1224
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1225 function G = grcar (n, k = 3)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1226 ## GRCAR Grcar matrix - a Toeplitz matrix with sensitive eigenvalues.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1227 ## GRCAR(N, K) is an N-by-N matrix with -1s on the
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1228 ## subdiagonal, 1s on the diagonal, and K superdiagonals of 1s.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1229 ## The default is K = 3. The eigenvalues of this matrix form an
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1230 ## interesting pattern in the complex plane (try PS(GRCAR(32))).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1231 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1232 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1233 ## J.F. Grcar, Operator coefficient methods for linear equations,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1234 ## Report SAND89-8691, Sandia National Laboratories, Albuquerque,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1235 ## New Mexico, 1989 (Appendix 2).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1236 ## N.M. Nachtigal, L. Reichel and L.N. Trefethen, A hybrid GMRES
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1237 ## algorithm for nonsymmetric linear systems, SIAM J. Matrix Anal.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1238 ## Appl., 13 (1992), pp. 796-825.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1239
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1240 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1241 error ("gallery: 1 to 2 arguments are required for grcar matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1242 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1243 error ("gallery: N must be an integer for grcar matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1244 elseif (! isnumeric (k) || ! isscalar (k))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1245 error ("gallery: K must be a numeric scalar for grcar matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1246 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1247
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1248 G = tril (triu (ones (n)), k) - diag (ones (n-1, 1), -1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1249 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1250
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1251 function A = hanowa (n, d = -1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1252 ## HANOWA A matrix whose eigenvalues lie on a vertical line in the complex plane.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1253 ## HANOWA(N, d) is the N-by-N block 2x2 matrix (thus N = 2M must be even)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1254 ## [d*EYE(M) -DIAG(1:M)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1255 ## DIAG(1:M) d*EYE(M)]
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1256 ## It has complex eigenvalues lambda(k) = d +/- k*i (1 <= k <= M).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1257 ## Parameter d defaults to -1.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1258 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1259 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1260 ## E. Hairer, S.P. Norsett and G. Wanner, Solving Ordinary
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1261 ## Differential Equations I: Nonstiff Problems, Springer-Verlag,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1262 ## Berlin, 1987. (pp. 86-87)
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1263
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1264 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1265 error ("gallery: 1 to 2 arguments are required for hanowa matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1266 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1267 error ("gallery: N must be an integer for hanowa matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1268 elseif (rem (n, 2) != 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1269 error ("gallery: N must be even for hanowa matrix.");
20294
2102c4582e32 gallery: fix chebspec, cycol, gearmat, hanowa, lauchli, and pei (bug #45466)
Massimiliano Fasi <massimiliano.fasi@gmail.com>
parents: 20231
diff changeset
1270 elseif (! isnumeric (d) || ! isscalar (d))
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1271 error ("gallery: D must be a numeric scalar for hanowa matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1272 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1273
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1274 m = n/2;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1275 A = [ d*eye(m) -diag(1:m)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1276 diag(1:m) d*eye(m) ];
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1277 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1278
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1279 function [v, beta] = house (x)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1280 ## HOUSE Householder matrix.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1281 ## If [v, beta] = HOUSE(x) then H = EYE - beta*v*v' is a Householder
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1282 ## matrix such that Hx = -sign(x(1))*norm(x)*e_1.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1283 ## NB: If x = 0 then v = 0, beta = 1 is returned.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1284 ## x can be real or complex.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1285 ## sign(x) := exp(i*arg(x)) ( = x./abs(x) when x ~= 0).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1286 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1287 ## Theory: (textbook references Golub & Van Loan 1989, 38-43;
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1288 ## Stewart 1973, 231-234, 262; Wilkinson 1965, 48-50).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1289 ## Hx = y: (I - beta*v*v')x = -s*e_1.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1290 ## Must have |s| = norm(x), v = x+s*e_1, and
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1291 ## x'y = x'Hx =(x'Hx)' real => arg(s) = arg(x(1)).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1292 ## So take s = sign(x(1))*norm(x) (which avoids cancellation).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1293 ## v'v = (x(1)+s)^2 + x(2)^2 + ... + x(n)^2
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1294 ## = 2*norm(x)*(norm(x) + |x(1)|).
19593
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 17386
diff changeset
1295 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1296 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1297 ## G.H. Golub and C.F. Van Loan, Matrix Computations, second edition,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1298 ## Johns Hopkins University Press, Baltimore, Maryland, 1989.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1299 ## G.W. Stewart, Introduction to Matrix Computations, Academic Press,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1300 ## New York, 1973,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1301 ## J.H. Wilkinson, The Algebraic Eigenvalue Problem, Oxford University
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1302 ## Press, 1965.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1303
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1304 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1305 error ("gallery: 1 argument is required for house matrix.");
20295
557979395ca9 gallery: allow single element vectors for 'house'.
Carnë Draug <carandraug@octave.org>
parents: 20294
diff changeset
1306 elseif (! isnumeric (x) || ! isvector (x))
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1307 error ("gallery: X must be a vector for house matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1308 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1309
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1310 ## must be a column vector
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1311 x = x(:);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1312
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1313 s = norm (x) * (sign (x(1)) + (x(1) == 0)); # Modification for sign (0) == 1.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1314 v = x;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1315 if (s == 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1316 ## Quit if x is the zero vector.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1317 beta = 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1318 else
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1319 v(1) = v(1) + s;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1320 beta = 1/(s'*v(1)); # NB the conjugated s.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1321 ## beta = 1/(abs (s) * (abs (s) +abs(x(1)) would guarantee beta real.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1322 ## But beta as above can be non-real (due to rounding) only when x is complex.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1323 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1324 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1325
16980
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1326 function A = integerdata (varargin)
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1327
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1328 if (nargin < 3)
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1329 error ("gallery: At least 3 arguments required for integerdata matrix.");
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1330 endif
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1331
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1332 if (isnumeric (varargin{end}))
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1333 jidx = varargin{end};
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1334 svec = [varargin{:}];
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1335 varargin(end) = [];
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1336 elseif (ischar (varargin{end}))
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1337 if (nargin < 4)
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1338 error (["gallery: CLASS argument requires 4 inputs " ...
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1339 "for integerdata matrix."]);
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1340 endif
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1341 jidx = varargin{end-1};
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1342 svec = [varargin{1:end-1}];
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1343 varargin(end-1) = [];
19593
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 17386
diff changeset
1344 else
16980
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1345 error (["gallery: J must be an integer in the range [0, 2^32-1] " ...
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1346 "for integerdata matrix"]);
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1347 endif
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1348
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1349 if (! (isnumeric (jidx) && isscalar (jidx)
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1350 && jidx == fix (jidx)
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1351 && jidx >= 0 && jidx <= 0xFFFFFFFF))
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1352 error (["gallery: J must be an integer in the range [0, 2^32-1] " ...
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1353 "for integerdata matrix"]);
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1354 endif
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1355
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1356 ## Save and restore random state. Initialization done so that reproducible
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1357 ## data is available from gallery depending on the jidx and size vector.
19593
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 17386
diff changeset
1358 randstate = rand ("state");
16980
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1359 unwind_protect
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1360 rand ("state", svec);
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1361 A = randi (varargin{:});
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1362 unwind_protect_cleanup
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1363 rand ("state", randstate);
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1364 end_unwind_protect
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1365
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1366 endfunction
1909e1ed63e6 gallery.m: Add 'integerdata' matrix to function.
Rik <rik@octave.org>
parents: 16979
diff changeset
1367
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1368 function A = invhess (x, y)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1369 ## INVHESS Inverse of an upper Hessenberg matrix.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1370 ## INVHESS(X, Y), where X is an N-vector and Y an N-1 vector,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1371 ## is the matrix whose lower triangle agrees with that of
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1372 ## ONES(N,1)*X' and whose strict upper triangle agrees with
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1373 ## that of [1 Y]*ONES(1,N).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1374 ## The matrix is nonsingular if X(1) ~= 0 and X(i+1) ~= Y(i)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1375 ## for all i, and its inverse is an upper Hessenberg matrix.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1376 ## If Y is omitted it defaults to -X(1:N-1).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1377 ## Special case: if X is a scalar INVHESS(X) is the same as
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1378 ## INVHESS(1:X).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1379 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1380 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1381 ## F.N. Valvi and V.S. Geroyannis, Analytic inverses and
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1382 ## determinants for a class of matrices, IMA Journal of Numerical
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1383 ## Analysis, 7 (1987), pp. 123-128.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1384 ## W.-L. Cao and W.J. Stewart, A note on inverses of Hessenberg-like
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1385 ## matrices, Linear Algebra and Appl., 76 (1986), pp. 233-240.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1386 ## Y. Ikebe, On inverses of Hessenberg matrices, Linear Algebra and
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1387 ## Appl., 24 (1979), pp. 93-97.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1388 ## P. Rozsa, On the inverse of band matrices, Integral Equations and
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1389 ## Operator Theory, 10 (1987), pp. 82-95.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1390
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1391 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1392 error ("gallery: 1 to 2 arguments are required for invhess matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1393 elseif (! isnumeric (x))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1394 error ("gallery: X must be numeric for invhess matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1395 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1396
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1397 if (isscalar (x) && fix (x) == x)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1398 n = x;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1399 x = 1:n;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1400 elseif (! isscalar (x) && isvector (x))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1401 n = numel (n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1402 else
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1403 error ("gallery: X must be an integer scalar, or a vector for invhess matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1404 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1405
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1406 if (nargin < 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1407 y = -x(1:end-1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1408 elseif (! isvector (y) || numel (y) != numel (x) -1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1409 error ("gallery: Y must be a vector of length -1 than X for invhess matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1410 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1411
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1412 x = x(:);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1413 y = y(:);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1414
16933
e39f00a32dc7 maint: Use parentheses around condition for switch(),while(),if() statements.
Rik <rik@octave.org>
parents: 16816
diff changeset
1415 ## FIXME: On next line, z = x'; A = z(ones(n,1),:) would be more efficient.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1416 A = ones (n, 1) * x';
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1417 for j = 2:n
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1418 A(1:j-1,j) = y(1:j-1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1419 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1420 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1421
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1422 function A = invol (n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1423 ## INVOL An involutory matrix.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1424 ## A = INVOL(N) is an N-by-N involutory (A*A = EYE(N)) and
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1425 ## ill-conditioned matrix.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1426 ## It is a diagonally scaled version of HILB(N).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1427 ## NB: B = (EYE(N)-A)/2 and B = (EYE(N)+A)/2 are idempotent (B*B = B).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1428 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1429 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1430 ## A.S. Householder and J.A. Carpenter, The singular values
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1431 ## of involutory and of idempotent matrices, Numer. Math. 5 (1963),
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1432 ## pp. 234-237.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1433
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1434 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1435 error ("gallery: 1 argument is required for invol matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1436 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1437 error ("gallery: N must be an integer for invol matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1438 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1439
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1440 A = hilb (n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1441
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1442 d = -n;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1443 A(:, 1) = d * A(:, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1444
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1445 for i = 1:n-1
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1446 d = -(n+i)*(n-i)*d/(i*i);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1447 A(i+1,:) = d * A(i+1,:);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1448 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1449 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1450
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1451 function [A, detA] = ipjfact (n, k = 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1452 ## IPJFACT A Hankel matrix with factorial elements.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1453 ## A = IPJFACT(N, K) is the matrix with
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1454 ## A(i,j) = (i+j)! (K = 0, default)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1455 ## A(i,j) = 1/(i+j)! (K = 1)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1456 ## Both are Hankel matrices.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1457 ## The determinant and inverse are known explicitly.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1458 ## If a second output argument is present, d = DET(A) is returned:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1459 ## [A, d] = IPJFACT(N, K);
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1460 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1461 ## Suggested by P. R. Graves-Morris.
19593
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 17386
diff changeset
1462 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1463 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1464 ## M.J.C. Gover, The explicit inverse of factorial Hankel matrices,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1465 ## Dept. of Mathematics, University of Bradford, 1993.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1466
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1467 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1468 error ("gallery: 1 to 2 arguments are required for ipjfact matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1469 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1470 error ("gallery: N must be an integer for ipjfact matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1471 elseif (! isnumeric (k) || ! isscalar (k))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1472 error ("gallery: K must be a numeric scalar for ipjfact matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1473 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1474
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1475 c = cumprod (2:n+1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1476 d = cumprod (n+1:2*n) * c(n-1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1477
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1478 A = hankel (c, d);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1479
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1480 switch (k)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1481 case (0), # do nothing
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1482 case (1), A = ones (n) ./ A;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1483 otherwise
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1484 error ("gallery: K must have a value of 0 or 1 for ipjfact matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1485 endswitch
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1486
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1487 if (nargout == 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1488 d = 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1489
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1490 if (k == 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1491 for i = 1:n-1
20231
83792dd9bcc1 Use in-place operators in m-files where possible.
Rik <rik@octave.org>
parents: 20162
diff changeset
1492 d *= prod (1:i+1) * prod (1:n-i);
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1493 endfor
20231
83792dd9bcc1 Use in-place operators in m-files where possible.
Rik <rik@octave.org>
parents: 20162
diff changeset
1494 d *= prod (1:n+1);
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1495
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1496 elseif (k == 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1497 for i = 0:n-1
20231
83792dd9bcc1 Use in-place operators in m-files where possible.
Rik <rik@octave.org>
parents: 20162
diff changeset
1498 d *= prod (1:i) / prod (1:n+1+i);
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1499 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1500 if (rem (n*(n-1)/2, 2))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1501 d = -d;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1502 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1503
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1504 else
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1505 error ("gallery: K must have a value of 0 or 1 for ipjfact matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1506 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1507
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1508 detA = d;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1509 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1510 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1511
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1512 function J = jordbloc (n, lambda = 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1513 ## JORDBLOC Jordan block.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1514 ## JORDBLOC(N, LAMBDA) is the N-by-N Jordan block with eigenvalue
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1515 ## LAMBDA. LAMBDA = 1 is the default.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1516
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1517 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1518 error ("gallery: 1 to 2 arguments are required for jordbloc matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1519 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1520 error ("gallery: N must be an integer for jordbloc matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1521 elseif (! isnumeric (lambda) || ! isscalar (lambda))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1522 error ("gallery: LAMBDA must be a numeric scalar for jordbloc matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1523 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1524
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1525 J = lambda * eye (n) + diag (ones (n-1, 1), 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1526 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1527
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1528 function U = kahan (n, theta = 1.2, pert = 25)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1529 ## KAHAN Kahan matrix - upper trapezoidal.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1530 ## KAHAN(N, THETA) is an upper trapezoidal matrix
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1531 ## that has some interesting properties regarding estimation of
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1532 ## condition and rank.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1533 ## The matrix is N-by-N unless N is a 2-vector, in which case it
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1534 ## is N(1)-by-N(2).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1535 ## The parameter THETA defaults to 1.2.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1536 ## The useful range of THETA is 0 < THETA < PI.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1537 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1538 ## To ensure that the QR factorization with column pivoting does not
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1539 ## interchange columns in the presence of rounding errors, the diagonal
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1540 ## is perturbed by PERT*EPS*diag( [N:-1:1] ).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1541 ## The default is PERT = 25, which ensures no interchanges for KAHAN(N)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1542 ## up to at least N = 90 in IEEE arithmetic.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1543 ## KAHAN(N, THETA, PERT) uses the given value of PERT.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1544 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1545 ## The inverse of KAHAN(N, THETA) is known explicitly: see
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1546 ## Higham (1987, p. 588), for example.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1547 ## The diagonal perturbation was suggested by Christian Bischof.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1548 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1549 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1550 ## W. Kahan, Numerical linear algebra, Canadian Math. Bulletin,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1551 ## 9 (1966), pp. 757-801.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1552 ## N.J. Higham, A survey of condition number estimation for
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1553 ## triangular matrices, SIAM Review, 29 (1987), pp. 575-596.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1554
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1555 if (nargin < 1 || nargin > 3)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1556 error ("gallery: 1 to 3 arguments are required for kahan matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1557 elseif (! isnumeric (n) || all (numel (n) != [1 2]) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1558 error ("gallery: N must be a 1 or 2 element integer for kahan matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1559 elseif (! isnumeric (theta) || ! isscalar (theta))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1560 error ("gallery: THETA must be a numeric scalar for kahan matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1561 elseif (! isnumeric (pert) || ! isscalar (pert))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1562 error ("gallery: PERT must be a numeric scalar for kahan matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1563 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1564
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1565 ## Parameter n specifies dimension: r-by-n
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1566 r = n(1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1567 n = n(end);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1568
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1569 s = sin (theta);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1570 c = cos (theta);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1571
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1572 U = eye (n) - c * triu (ones (n), 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1573 U = diag (s.^[0:n-1]) * U + pert*eps* diag ([n:-1:1]);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1574 if (r > n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1575 U(r,n) = 0; # Extend to an r-by-n matrix
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1576 else
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1577 U = U(1:r,:); # Reduce to an r-by-n matrix
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1578 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1579 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1580
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1581 function A = kms (n, rho = 0.5)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1582 ## KMS Kac-Murdock-Szego Toeplitz matrix.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1583 ## A = KMS(N, RHO) is the N-by-N Kac-Murdock-Szego Toeplitz matrix with
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1584 ## A(i,j) = RHO^(ABS((i-j))) (for real RHO).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1585 ## If RHO is complex, then the same formula holds except that elements
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1586 ## below the diagonal are conjugated.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1587 ## RHO defaults to 0.5.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1588 ## Properties:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1589 ## A has an LDL' factorization with
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1590 ## L = INV(TRIW(N,-RHO,1)'),
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1591 ## D(i,i) = (1-ABS(RHO)^2)*EYE(N) except D(1,1) = 1.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1592 ## A is positive definite if and only if 0 < ABS(RHO) < 1.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1593 ## INV(A) is tridiagonal.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1594 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1595 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1596 ## W.F. Trench, Numerical solution of the eigenvalue problem
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1597 ## for Hermitian Toeplitz matrices, SIAM J. Matrix Analysis and Appl.,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1598 ## 10 (1989), pp. 135-146 (and see the references therein).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1599
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1600 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1601 error ("gallery: 1 to 2 arguments are required for lauchli matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1602 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
16933
e39f00a32dc7 maint: Use parentheses around condition for switch(),while(),if() statements.
Rik <rik@octave.org>
parents: 16816
diff changeset
1603 error ("gallery: N must be an integer for lauchli matrix.")
20294
2102c4582e32 gallery: fix chebspec, cycol, gearmat, hanowa, lauchli, and pei (bug #45466)
Massimiliano Fasi <massimiliano.fasi@gmail.com>
parents: 20231
diff changeset
1604 elseif (! isscalar (rho))
2102c4582e32 gallery: fix chebspec, cycol, gearmat, hanowa, lauchli, and pei (bug #45466)
Massimiliano Fasi <massimiliano.fasi@gmail.com>
parents: 20231
diff changeset
1605 error ("gallery: RHO must be a scalar for lauchli matrix.")
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1606 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1607
16933
e39f00a32dc7 maint: Use parentheses around condition for switch(),while(),if() statements.
Rik <rik@octave.org>
parents: 16816
diff changeset
1608 A = (1:n)'*ones (1,n);
e39f00a32dc7 maint: Use parentheses around condition for switch(),while(),if() statements.
Rik <rik@octave.org>
parents: 16816
diff changeset
1609 A = abs (A - A');
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1610 A = rho .^ A;
16933
e39f00a32dc7 maint: Use parentheses around condition for switch(),while(),if() statements.
Rik <rik@octave.org>
parents: 16816
diff changeset
1611 if (imag (rho))
e39f00a32dc7 maint: Use parentheses around condition for switch(),while(),if() statements.
Rik <rik@octave.org>
parents: 16816
diff changeset
1612 A = conj (tril (A,-1)) + triu (A);
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1613 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1614 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1615
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1616 function B = krylov (A, x, j)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1617 ## KRYLOV Krylov matrix.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1618 ## KRYLOV(A, x, j) is the Krylov matrix
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1619 ## [x, Ax, A^2x, ..., A^(j-1)x],
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1620 ## where A is an n-by-n matrix and x is an n-vector.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1621 ## Defaults: x = ONES(n,1), j = n.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1622 ## KRYLOV(n) is the same as KRYLOV(RANDN(n)).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1623 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1624 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1625 ## G.H. Golub and C.F. Van Loan, Matrix Computations, second edition,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1626 ## Johns Hopkins University Press, Baltimore, Maryland, 1989, p. 369.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1627
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1628 if (nargin < 1 || nargin > 3)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1629 error ("gallery: 1 to 3 arguments are required for krylov matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1630 elseif (! isnumeric (A) || ! issquare (A) || ndims (A) != 2)
17199
9deb214ae9d5 Use 2-D, not 2D, in error messages.
Rik <rik@octave.org>
parents: 16982
diff changeset
1631 error ("gallery: A must be a square 2-D matrix for krylov matrix.");
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1632 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1633
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1634 n = length (A);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1635 if (isscalar (A))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1636 n = A;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1637 A = randn (n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1638 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1639
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1640 if (nargin < 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1641 x = ones (n, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1642 elseif (! isvector (x) || numel (x) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1643 error ("gallery: X must be a vector of length equal to A for krylov matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1644 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1645
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1646 if (nargin < 3)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1647 j = n;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1648 elseif (! isnumeric (j) || ! isscalar (j) || fix (j) != j)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1649 error ("gallery: J must be an integer for krylov matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1650 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1651
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1652 B = ones (n, j);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1653 B(:,1) = x(:);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1654 for i = 2:j
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1655 B(:,i) = A*B(:,i-1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1656 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1657 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1658
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1659 function A = lauchli (n, mu = sqrt (eps))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1660 ## LAUCHLI Lauchli matrix - rectangular.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1661 ## LAUCHLI(N, MU) is the (N+1)-by-N matrix [ONES(1,N); MU*EYE(N))].
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1662 ## It is a well-known example in least squares and other problems
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1663 ## that indicates the dangers of forming A'*A.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1664 ## MU defaults to SQRT(EPS).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1665 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1666 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1667 ## P. Lauchli, Jordan-Elimination und Ausgleichung nach
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1668 ## kleinsten Quadraten, Numer. Math, 3 (1961), pp. 226-240.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1669
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1670 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1671 error ("gallery: 1 to 2 arguments are required for lauchli matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1672 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1673 error ("gallery: N must be an integer for lauchli matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1674 elseif (! isscalar (mu))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1675 error ("gallery: MU must be a scalar for lauchli matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1676 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1677
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1678 A = [ones(1, n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1679 mu*eye(n) ];
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1680 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1681
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1682 function A = lehmer (n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1683 ## LEHMER Lehmer matrix - symmetric positive definite.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1684 ## A = LEHMER(N) is the symmetric positive definite N-by-N matrix with
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1685 ## A(i,j) = i/j for j >= i.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1686 ## A is totally nonnegative. INV(A) is tridiagonal, and explicit
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1687 ## formulas are known for its entries.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1688 ## N <= COND(A) <= 4*N*N.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1689 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1690 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1691 ## M. Newman and J. Todd, The evaluation of matrix inversion
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1692 ## programs, J. Soc. Indust. Appl. Math., 6 (1958), pp. 466-476.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1693 ## Solutions to problem E710 (proposed by D.H. Lehmer): The inverse
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1694 ## of a matrix, Amer. Math. Monthly, 53 (1946), pp. 534-535.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1695 ## J. Todd, Basic Numerical Mathematics, Vol. 2: Numerical Algebra,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1696 ## Birkhauser, Basel, and Academic Press, New York, 1977, p. 154.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1697
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1698 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1699 error ("gallery: 1 argument is required for lehmer matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1700 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1701 error ("gallery: N must be an integer for lehmer matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1702 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1703
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1704 A = ones (n, 1) * (1:n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1705 A = A./A';
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1706 A = tril (A) + tril (A, -1)';
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1707 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1708
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1709 function T = lesp (n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1710 ## LESP A tridiagonal matrix with real, sensitive eigenvalues.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1711 ## LESP(N) is an N-by-N matrix whose eigenvalues are real and smoothly
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1712 ## distributed in the interval approximately [-2*N-3.5, -4.5].
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1713 ## The sensitivities of the eigenvalues increase exponentially as
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1714 ## the eigenvalues grow more negative.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1715 ## The matrix is similar to the symmetric tridiagonal matrix with
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1716 ## the same diagonal entries and with off-diagonal entries 1,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1717 ## via a similarity transformation with D = diag(1!,2!,...,N!).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1718 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1719 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1720 ## H.W.J. Lenferink and M.N. Spijker, On the use of stability regions in
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1721 ## the numerical analysis of initial value problems,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1722 ## Math. Comp., 57 (1991), pp. 221-237.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1723 ## L.N. Trefethen, Pseudospectra of matrices, in Numerical Analysis 1991,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1724 ## Proceedings of the 14th Dundee Conference,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1725 ## D.F. Griffiths and G.A. Watson, eds, Pitman Research Notes in
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1726 ## Mathematics, volume 260, Longman Scientific and Technical, Essex,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1727 ## UK, 1992, pp. 234-266.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1728
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1729 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1730 error ("gallery: 1 argument is required for lesp matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1731 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1732 error ("gallery: N must be an integer for lesp matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1733 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1734
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1735 x = 2:n;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1736 T = full (tridiag (ones (size (x)) ./x, -(2*[x n+1]+1), x));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1737 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1738
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1739 function A = lotkin (n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1740 ## LOTKIN Lotkin matrix.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1741 ## A = LOTKIN(N) is the Hilbert matrix with its first row altered to
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1742 ## all ones. A is unsymmetric, ill-conditioned, and has many negative
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1743 ## eigenvalues of small magnitude.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1744 ## The inverse has integer entries and is known explicitly.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1745 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1746 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1747 ## M. Lotkin, A set of test matrices, MTAC, 9 (1955), pp. 153-161.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1748
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1749 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1750 error ("gallery: 1 argument is required for lotkin matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1751 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1752 error ("gallery: N must be an integer for lotkin matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1753 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1754
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1755 A = hilb (n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1756 A(1,:) = ones (1, n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1757 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1758
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1759 function A = minij (n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1760 ## MINIJ Symmetric positive definite matrix MIN(i,j).
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1761 ## A = MINIJ(N) is the N-by-N symmetric positive definite matrix with
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1762 ## A(i,j) = MIN(i,j).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1763 ## Properties, variations:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1764 ## INV(A) is tridiagonal: it is minus the second difference matrix
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1765 ## except its (N,N) element is 1.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1766 ## 2*A-ONES(N) (Givens' matrix) has tridiagonal inverse and
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1767 ## eigenvalues .5*sec^2([2r-1)PI/4N], r=1:N.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1768 ## (N+1)*ONES(N)-A also has a tridiagonal inverse.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1769 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1770 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1771 ## J. Todd, Basic Numerical Mathematics, Vol. 2: Numerical Algebra,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1772 ## Birkhauser, Basel, and Academic Press, New York, 1977, p. 158.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1773 ## D.E. Rutherford, Some continuant determinants arising in physics and
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1774 ## chemistry---II, Proc. Royal Soc. Edin., 63, A (1952), pp. 232-241.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1775 ## (For the eigenvalues of Givens' matrix.)
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1776
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1777 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1778 error ("gallery: 1 argument is required for minij matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1779 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1780 error ("gallery: N must be an integer for minij matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1781 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1782
19944
941e782d0429 gallery: performance increase for minij matrix.
Carnë Draug <carandraug@octave.org>
parents: 19833
diff changeset
1783 A = bsxfun (@min, 1:n, (1:n)');
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1784 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1785
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1786 function A = moler (n, alpha = -1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1787 ## MOLER Moler matrix - symmetric positive definite.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1788 ## A = MOLER(N, ALPHA) is the symmetric positive definite N-by-N matrix
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1789 ## U'*U where U = TRIW(N, ALPHA).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1790 ## For ALPHA = -1 (the default) A(i,j) = MIN(i,j)-2, A(i,i) = i.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1791 ## A has one small eigenvalue.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1792 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1793 ## Nash (1990) attributes the ALPHA = -1 matrix to Moler.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1794 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1795 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1796 ## J.C. Nash, Compact Numerical Methods for Computers: Linear
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1797 ## Algebra and Function Minimisation, second edition, Adam Hilger,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1798 ## Bristol, 1990 (Appendix 1).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1799
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1800 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1801 error ("gallery: 1 to 2 arguments are required for moler matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1802 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1803 error ("gallery: N must be an integer for moler matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1804 elseif (! isscalar (alpha))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1805 error ("gallery: ALPHA must be a scalar for moler matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1806 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1807
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1808 A = triw (n, alpha)' * triw (n, alpha);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1809 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1810
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1811 function [A, T] = neumann (n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1812 ## NEUMANN Singular matrix from the discrete Neumann problem (sparse).
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1813 ## NEUMANN(N) is the singular, row diagonally dominant matrix resulting
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1814 ## from discretizing the Neumann problem with the usual five point
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1815 ## operator on a regular mesh.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1816 ## It has a one-dimensional null space with null vector ONES(N,1).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1817 ## The dimension N should be a perfect square, or else a 2-vector,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1818 ## in which case the dimension of the matrix is N(1)*N(2).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1819 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1820 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1821 ## R.J. Plemmons, Regular splittings and the discrete Neumann
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1822 ## problem, Numer. Math., 25 (1976), pp. 153-161.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1823
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1824 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1825 error ("gallery: 1 argument is required for neumann matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1826 elseif (! isnumeric (n) || all (numel (n) != [1 2]) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1827 error ("gallery: N must be a 1 or 2 element integer for neumann matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1828 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1829
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1830 if (isscalar (n))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1831 m = sqrt (n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1832 if (m^2 != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1833 error ("gallery: N must be a perfect square for neumann matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1834 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1835 n(1) = m;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1836 n(2) = m;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1837 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1838
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1839 T = tridiag (n(1), -1, 2, -1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1840 T(1,2) = -2;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1841 T(n(1),n(1)-1) = -2;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1842
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1843 A = kron (T, eye (n(2))) + kron (eye (n(2)), T);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1844 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1845
16979
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1846 function A = normaldata (varargin)
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1847
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1848 if (nargin < 2)
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1849 error ("gallery: At least 2 arguments required for normaldata matrix.");
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1850 endif
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1851 if (isnumeric (varargin{end}))
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1852 jidx = varargin{end};
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1853 svec = [varargin{:}];
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1854 varargin(end) = [];
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1855 elseif (ischar (varargin{end}))
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1856 if (nargin < 3)
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1857 error (["gallery: CLASS argument requires 3 inputs " ...
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1858 "for normaldata matrix."]);
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1859 endif
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1860 jidx = varargin{end-1};
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1861 svec = [varargin{1:end-1}];
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1862 varargin(end-1) = [];
19593
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 17386
diff changeset
1863 else
16979
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1864 error (["gallery: J must be an integer in the range [0, 2^32-1] " ...
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1865 "for normaldata matrix"]);
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1866 endif
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1867
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1868 if (! (isnumeric (jidx) && isscalar (jidx)
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1869 && jidx == fix (jidx)
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1870 && jidx >= 0 && jidx <= 0xFFFFFFFF))
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1871 error (["gallery: J must be an integer in the range [0, 2^32-1] " ...
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1872 "for normaldata matrix"]);
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1873 endif
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1874
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1875 ## Save and restore random state. Initialization done so that reproducible
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1876 ## data is available from gallery depending on the jidx and size vector.
19593
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 17386
diff changeset
1877 randstate = randn ("state");
16979
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1878 unwind_protect
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1879 randn ("state", svec);
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1880 A = randn (varargin{:});
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1881 unwind_protect_cleanup
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1882 randn ("state", randstate);
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1883 end_unwind_protect
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1884
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1885 endfunction
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
1886
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1887 function Q = orthog (n, k = 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1888 ## ORTHOG Orthogonal and nearly orthogonal matrices.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1889 ## Q = ORTHOG(N, K) selects the K'th type of matrix of order N.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1890 ## K > 0 for exactly orthogonal matrices, K < 0 for diagonal scalings of
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1891 ## orthogonal matrices.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1892 ## Available types: (K = 1 is the default)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1893 ## K = 1: Q(i,j) = SQRT(2/(n+1)) * SIN( i*j*PI/(n+1) )
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1894 ## Symmetric eigenvector matrix for second difference matrix.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1895 ## K = 2: Q(i,j) = 2/SQRT(2*n+1)) * SIN( 2*i*j*PI/(2*n+1) )
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1896 ## Symmetric.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1897 ## K = 3: Q(r,s) = EXP(2*PI*i*(r-1)*(s-1)/n) / SQRT(n) (i=SQRT(-1))
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1898 ## Unitary, the Fourier matrix. Q^4 is the identity.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1899 ## This is essentially the same matrix as FFT(EYE(N))/SQRT(N)!
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1900 ## K = 4: Helmert matrix: a permutation of a lower Hessenberg matrix,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1901 ## whose first row is ONES(1:N)/SQRT(N).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1902 ## K = 5: Q(i,j) = SIN( 2*PI*(i-1)*(j-1)/n ) + COS( 2*PI*(i-1)*(j-1)/n ).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1903 ## Symmetric matrix arising in the Hartley transform.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1904 ## K = -1: Q(i,j) = COS( (i-1)*(j-1)*PI/(n-1) )
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1905 ## Chebyshev Vandermonde-like matrix, based on extrema of T(n-1).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1906 ## K = -2: Q(i,j) = COS( (i-1)*(j-1/2)*PI/n) )
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1907 ## Chebyshev Vandermonde-like matrix, based on zeros of T(n).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1908 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1909 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1910 ## N.J. Higham and D.J. Higham, Large growth factors in Gaussian
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1911 ## elimination with pivoting, SIAM J. Matrix Analysis and Appl.,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1912 ## 10 (1989), pp. 155-164.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1913 ## P. Morton, On the eigenvectors of Schur's matrix, J. Number Theory,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1914 ## 12 (1980), pp. 122-127. (Re. ORTHOG(N, 3))
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1915 ## H.O. Lancaster, The Helmert Matrices, Amer. Math. Monthly, 72 (1965),
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1916 ## pp. 4-12.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1917 ## D. Bini and P. Favati, On a matrix algebra related to the discrete
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1918 ## Hartley transform, SIAM J. Matrix Anal. Appl., 14 (1993),
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1919 ## pp. 500-507.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1920
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1921 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1922 error ("gallery: 1 to 2 arguments are required for orthog matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1923 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1924 error ("gallery: N must be an integer for orthog matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1925 elseif (! isnumeric (k) || ! isscalar (k))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1926 error ("gallery: K must be a numeric scalar for orthog matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1927 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1928
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1929 switch (k)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1930 case (1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1931 ## E'vectors second difference matrix
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1932 m = (1:n)'*(1:n) * (pi/(n+1));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1933 Q = sin (m) * sqrt (2/(n+1));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1934
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1935 case (2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1936 m = (1:n)'*(1:n) * (2*pi/(2*n+1));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1937 Q = sin (m) * (2/ sqrt (2*n+1));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1938
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1939 case (3)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1940 ## Vandermonde based on roots of unity
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1941 m = 0:n-1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1942 Q = exp (m'*m*2*pi* sqrt (-1) / n) / sqrt (n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1943
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1944 case (4)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1945 ## Helmert matrix
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1946 Q = tril (ones (n));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1947 Q(1,2:n) = ones (1, n-1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1948 for i = 2:n
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1949 Q(i,i) = -(i-1);
17306
09543e9c8f40 Use explicit form of end (endif, endfor, etc.) in core m-files.
Rik <rik@octave.org>
parents: 17281
diff changeset
1950 endfor
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1951 Q = diag (sqrt ([n 1:n-1] .* [1:n])) \ Q;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1952
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1953 case (5)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1954 ## Hartley matrix
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1955 m = (0:n-1)'*(0:n-1) * (2*pi/n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1956 Q = (cos (m) + sin (m)) / sqrt (n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1957
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1958 case (-1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1959 ## extrema of T(n-1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1960 m = (0:n-1)'*(0:n-1) * (pi/(n-1));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1961 Q = cos (m);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1962
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1963 case (-2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1964 ## zeros of T(n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1965 m = (0:n-1)'*(.5:n-.5) * (pi/n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1966 Q = cos (m);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1967
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1968 otherwise
16766
7268845c0a1e avoid backquote in error messages, some uses in doc strings
John W. Eaton <jwe@octave.org>
parents: 16734
diff changeset
1969 error ("gallery: unknown K '%d' for orthog matrix.", k);
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1970 endswitch
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1971 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1972
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1973 function A = parter (n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1974 ## PARTER Parter matrix - a Toeplitz matrix with singular values near PI.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1975 ## PARTER(N) is the matrix with (i,j) element 1/(i-j+0.5).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1976 ## It is a Cauchy matrix and a Toeplitz matrix.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1977 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1978 ## At the Second SIAM Conference on Linear Algebra, Raleigh, N.C.,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1979 ## 1985, Cleve Moler noted that most of the singular values of
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1980 ## PARTER(N) are very close to PI. An explanation of the phenomenon
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1981 ## was given by Parter; see also the paper by Tyrtyshnikov.
19593
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 17386
diff changeset
1982 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1983 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1984 ## The MathWorks Newsletter, Volume 1, Issue 1, March 1986, page 2.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1985 ## S.V. Parter, On the distribution of the singular values of Toeplitz
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1986 ## matrices, Linear Algebra and Appl., 80 (1986), pp. 115-130.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1987 ## E.E. Tyrtyshnikov, Cauchy-Toeplitz matrices and some applications,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
1988 ## Linear Algebra and Appl., 149 (1991), pp. 1-18.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1989
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1990 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1991 error ("gallery: 1 argument is required for parter matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1992 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1993 error ("gallery: N must be an integer for parter matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1994 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1995
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1996 A = cauchy ((1:n) + 0.5, -(1:n));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1997 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1998
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
1999 function P = pei (n, alpha = 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2000 ## PEI Pei matrix.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2001 ## PEI(N, ALPHA), where ALPHA is a scalar, is the symmetric matrix
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2002 ## ALPHA*EYE(N) + ONES(N).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2003 ## If ALPHA is omitted then ALPHA = 1 is used.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2004 ## The matrix is singular for ALPHA = 0, -N.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2005 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2006 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2007 ## M.L. Pei, A test matrix for inversion procedures,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2008 ## Comm. ACM, 5 (1962), p. 508.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2009
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2010 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2011 error ("gallery: 1 to 2 arguments are required for pei matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2012 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2013 error ("gallery: N must be an integer for pei matrix.");
20294
2102c4582e32 gallery: fix chebspec, cycol, gearmat, hanowa, lauchli, and pei (bug #45466)
Massimiliano Fasi <massimiliano.fasi@gmail.com>
parents: 20231
diff changeset
2014 elseif (! isnumeric (alpha) || ! isscalar (alpha))
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2015 error ("gallery: ALPHA must be a scalar for pei matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2016 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2017
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2018 P = alpha * eye (n) + ones (n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2019 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2020
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2021 function A = poisson (n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2022 ## POISSON Block tridiagonal matrix from Poisson's equation (sparse).
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2023 ## POISSON(N) is the block tridiagonal matrix of order N^2
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2024 ## resulting from discretizing Poisson's equation with the
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2025 ## 5-point operator on an N-by-N mesh.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2026 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2027 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2028 ## G.H. Golub and C.F. Van Loan, Matrix Computations, second edition,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2029 ## Johns Hopkins University Press, Baltimore, Maryland, 1989
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2030 ## (Section 4.5.4).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2031
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2032 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2033 error ("gallery: 1 argument is required for poisson matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2034 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2035 error ("gallery: N must be an integer for poisson matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2036 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2037
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2038 S = tridiag (n, -1, 2, -1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2039 I = speye (n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2040 A = kron (I, S) + kron (S, I);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2041 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2042
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2043 function A = prolate (n, w = 0.25)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2044 ## PROLATE Prolate matrix - symmetric, ill-conditioned Toeplitz matrix.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2045 ## A = PROLATE(N, W) is the N-by-N prolate matrix with parameter W.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2046 ## It is a symmetric Toeplitz matrix.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2047 ## If 0 < W < 0.5 then
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2048 ## - A is positive definite
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2049 ## - the eigenvalues of A are distinct, lie in (0, 1), and
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2050 ## tend to cluster around 0 and 1.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2051 ## W defaults to 0.25.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2052 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2053 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2054 ## J.M. Varah. The Prolate matrix. Linear Algebra and Appl.,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2055 ## 187:269--278, 1993.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2056
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2057 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2058 error ("gallery: 1 to 2 arguments are required for prolate matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2059 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2060 error ("gallery: N must be an integer for prolate matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2061 elseif (! isnumeric (w) || ! isscalar (w))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2062 error ("gallery: W must be a scalar for prolate matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2063 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2064
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2065 a = zeros (n, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2066 a(1) = 2*w;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2067 a(2:n) = sin (2*pi*w*(1:n-1)) ./ (pi*(1:n-1));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2068
16933
e39f00a32dc7 maint: Use parentheses around condition for switch(),while(),if() statements.
Rik <rik@octave.org>
parents: 16816
diff changeset
2069 A = toeplitz (a);
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2070 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2071
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2072 function H = randhess (x)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2073 ## NOTE: this function was named ohess in the original Test Matrix Toolbox
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2074 ## RANDHESS Random, orthogonal upper Hessenberg matrix.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2075 ## H = RANDHESS(N) is an N-by-N real, random, orthogonal
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2076 ## upper Hessenberg matrix.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2077 ## Alternatively, H = RANDHESS(X), where X is an arbitrary real
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2078 ## N-vector (N > 1) constructs H non-randomly using the elements
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2079 ## of X as parameters.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2080 ## In both cases H is constructed via a product of N-1 Givens rotations.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2081 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2082 ## Note: See Gragg (1986) for how to represent an N-by-N (complex)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2083 ## unitary Hessenberg matrix with positive subdiagonal elements in terms
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2084 ## of 2N-1 real parameters (the Schur parametrization).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2085 ## This M-file handles the real case only and is intended simply as a
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2086 ## convenient way to generate random or non-random orthogonal Hessenberg
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2087 ## matrices.
19593
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 17386
diff changeset
2088 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2089 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2090 ## W.B. Gragg, The QR algorithm for unitary Hessenberg matrices,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2091 ## J. Comp. Appl. Math., 16 (1986), pp. 1-8.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2092
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2093 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2094 error ("gallery: 1 argument is required for randhess matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2095 elseif (! isnumeric (x) || ! isreal (x))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2096 error ("gallery: N or X must be numeric real values for randhess matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2097 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2098
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2099 if (isscalar (x))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2100 n = x;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2101 x = rand (n-1, 1) * 2*pi;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2102 H = eye (n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2103 H(n,n) = sign (randn);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2104 elseif (isvector (x))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2105 n = numel (x);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2106 H = eye (n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2107 H(n,n) = sign (x(n)) + (x(n) == 0); # Second term ensures H(n,n) nonzero.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2108 else
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2109 error ("gallery: N or X must be a scalar or a vector for randhess matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2110 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2111
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2112 for i = n:-1:2
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2113 ## Apply Givens rotation through angle x(i-1).
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2114 theta = x(i-1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2115 c = cos (theta);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2116 s = sin (theta);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2117 H([i-1 i], :) = [ c*H(i-1,:)+s*H(i,:)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2118 -s*H(i-1,:)+c*H(i,:) ];
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2119 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2120 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2121
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2122 function A = rando (n, k = 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2123 ## RANDO Random matrix with elements -1, 0 or 1.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2124 ## A = RANDO(N, K) is a random N-by-N matrix with elements from
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2125 ## one of the following discrete distributions (default K = 1):
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2126 ## K = 1: A(i,j) = 0 or 1 with equal probability,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2127 ## K = 2: A(i,j) = -1 or 1 with equal probability,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2128 ## K = 3: A(i,j) = -1, 0 or 1 with equal probability.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2129 ## N may be a 2-vector, in which case the matrix is N(1)-by-N(2).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2130
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2131 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2132 error ("gallery: 1 to 2 arguments are required for rando matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2133 elseif (! isnumeric (n) || all (numel (n) != [1 2]) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2134 error ("gallery: N must be an integer for rando matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2135 elseif (! isnumeric (k) || ! isscalar (k))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2136 error ("gallery: K must be a numeric scalar for smoke matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2137 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2138
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2139 ## Parameter n specifies dimension: m-by-n.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2140 m = n(1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2141 n = n(end);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2142
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2143 switch (k)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2144 case (1), A = floor ( rand(m, n) + 0.5); # {0, 1}
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2145 case (2), A = 2*floor ( rand(m, n) + 0.5) -1; # {-1, 1}
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2146 case (3), A = round (3*rand(m, n) - 1.5); # {-1, 0, 1}
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2147 otherwise
16766
7268845c0a1e avoid backquote in error messages, some uses in doc strings
John W. Eaton <jwe@octave.org>
parents: 16734
diff changeset
2148 error ("gallery: unknown K '%d' for smoke matrix.", k);
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2149 endswitch
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2150
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2151 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2152
20296
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2153 function A = randsvd (n, kappa = sqrt (1/eps), mode = 3, kl = max (n) -1,
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2154 ku = kl)
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2155 ## RANDSVD Random matrix with pre-assigned singular values.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2156 ## RANDSVD(N, KAPPA, MODE, KL, KU) is a (banded) random matrix of order N
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2157 ## with COND(A) = KAPPA and singular values from the distribution MODE.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2158 ## N may be a 2-vector, in which case the matrix is N(1)-by-N(2).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2159 ## Available types:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2160 ## MODE = 1: one large singular value,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2161 ## MODE = 2: one small singular value,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2162 ## MODE = 3: geometrically distributed singular values,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2163 ## MODE = 4: arithmetically distributed singular values,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2164 ## MODE = 5: random singular values with unif. dist. logarithm.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2165 ## If omitted, MODE defaults to 3, and KAPPA defaults to SQRT(1/EPS).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2166 ## If MODE < 0 then the effect is as for ABS(MODE) except that in the
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2167 ## original matrix of singular values the order of the diagonal entries
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2168 ## is reversed: small to large instead of large to small.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2169 ## KL and KU are the lower and upper bandwidths respectively; if they
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2170 ## are omitted a full matrix is produced.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2171 ## If only KL is present, KU defaults to KL.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2172 ## Special case: if KAPPA < 0 then a random full symmetric positive
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2173 ## definite matrix is produced with COND(A) = -KAPPA and
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2174 ## eigenvalues distributed according to MODE.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2175 ## KL and KU, if present, are ignored.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2176 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2177 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2178 ## N.J. Higham, Accuracy and Stability of Numerical Algorithms,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2179 ## Society for Industrial and Applied Mathematics, Philadelphia, PA,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2180 ## USA, 1996; sec. 26.3.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2181 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2182 ## This routine is similar to the more comprehensive Fortran routine xLATMS
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2183 ## in the following reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2184 ## J.W. Demmel and A. McKenney, A test matrix generation suite,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2185 ## LAPACK Working Note #9, Courant Institute of Mathematical Sciences,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2186 ## New York, 1989.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2187
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2188 if (nargin < 1 || nargin > 5)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2189 error ("gallery: 1 to 5 arguments are required for randsvd matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2190 elseif (! isnumeric (n) || all (numel (n) != [1 2]) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2191 error ("gallery: N must be a 1 or 2 element integer vector for randsvd matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2192 elseif (! isnumeric (kappa) || ! isscalar (kappa))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2193 error ("gallery: KAPPA must be a numeric scalar for randsvd matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2194 elseif (abs (kappa) < 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2195 error ("gallery: KAPPA must larger than or equal to 1 for randsvd matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2196 elseif (! isnumeric (mode) || ! isscalar (mode))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2197 error ("gallery: MODE must be a numeric scalar for randsvd matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2198 elseif (! isnumeric (kl) || ! isscalar (kl))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2199 error ("gallery: KL must be a numeric scalar for randsvd matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2200 elseif (! isnumeric (ku) || ! isscalar (ku))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2201 error ("gallery: KU must be a numeric scalar for randsvd matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2202 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2203
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2204 posdef = 0;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2205 if (kappa < 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2206 posdef = 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2207 kappa = -kappa;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2208 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2209
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2210 ## Parameter n specifies dimension: m-by-n.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2211 m = n(1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2212 n = n(end);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2213 p = min ([m n]);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2214
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2215 ## If A will be a vector
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2216 if (p == 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2217 A = randn (m, n);
20231
83792dd9bcc1 Use in-place operators in m-files where possible.
Rik <rik@octave.org>
parents: 20162
diff changeset
2218 A /= norm (A);
17306
09543e9c8f40 Use explicit form of end (endif, endfor, etc.) in core m-files.
Rik <rik@octave.org>
parents: 17281
diff changeset
2219 return;
09543e9c8f40 Use explicit form of end (endif, endfor, etc.) in core m-files.
Rik <rik@octave.org>
parents: 17281
diff changeset
2220 endif
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2221
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2222 ## Set up vector sigma of singular values.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2223 switch (abs (mode))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2224 case (1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2225 sigma = ones (p, 1) ./ kappa;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2226 sigma(1) = 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2227 case (2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2228 sigma = ones (p, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2229 sigma(p) = 1 / kappa;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2230 case (3)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2231 factor = kappa^(-1/(p-1));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2232 sigma = factor.^[0:p-1];
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2233 case (4)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2234 sigma = ones (p, 1) - (0:p-1)'/(p-1)*(1-1/kappa);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2235 case (5)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2236 ## In this case cond (A) <= kappa.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2237 rand ("uniform");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2238 sigma = exp (-rand (p, 1) * log (kappa));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2239 otherwise
16766
7268845c0a1e avoid backquote in error messages, some uses in doc strings
John W. Eaton <jwe@octave.org>
parents: 16734
diff changeset
2240 error ("gallery: unknown MODE '%d' for randsvd matrix.", mode);
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2241 endswitch
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2242
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2243 ## Convert to diagonal matrix of singular values.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2244 if (mode < 0)
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2245 sigma = sigma(p:-1:1);
17306
09543e9c8f40 Use explicit form of end (endif, endfor, etc.) in core m-files.
Rik <rik@octave.org>
parents: 17281
diff changeset
2246 endif
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2247 sigma = diag (sigma);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2248
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2249 if (posdef)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2250 ## handle case where KAPPA was negative
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2251 Q = qmult (p);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2252 A = Q' * sigma * Q;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2253 A = (A + A') / 2; # Ensure matrix is symmetric.
17312
088d014a7fe2 Use semicolon after "return" statement in core m-files.
Rik <rik@octave.org>
parents: 17306
diff changeset
2254 return;
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2255 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2256
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2257 if (m != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2258 ## Expand to m-by-n diagonal matrix
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2259 sigma(m, n) = 0;
17306
09543e9c8f40 Use explicit form of end (endif, endfor, etc.) in core m-files.
Rik <rik@octave.org>
parents: 17281
diff changeset
2260 endif
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2261
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2262 if (kl == 0 && ku == 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2263 ## Diagonal matrix requested - nothing more to do.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2264 A = sigma;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2265 else
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2266 ## A = U*sigma*V, where U, V are random orthogonal matrices from the
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2267 ## Haar distribution.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2268 A = qmult (sigma');
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2269 A = qmult (A');
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2270
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2271 if (kl < n-1 || ku < n-1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2272 ## Bandwidth reduction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2273 A = bandred (A, kl, ku);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2274 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2275 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2276 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2277
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2278 function A = redheff (n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2279 ## REDHEFF A (0,1) matrix of Redheffer associated with the Riemann hypothesis.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2280 ## A = REDHEFF(N) is an N-by-N matrix of 0s and 1s defined by
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2281 ## A(i,j) = 1 if j = 1 or if i divides j,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2282 ## A(i,j) = 0 otherwise.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2283 ## It has N - FLOOR(LOG2(N)) - 1 eigenvalues equal to 1,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2284 ## a real eigenvalue (the spectral radius) approximately SQRT(N),
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2285 ## a negative eigenvalue approximately -SQRT(N),
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2286 ## and the remaining eigenvalues are provably ``small''.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2287 ## Barrett and Jarvis (1992) conjecture that
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2288 ## ``the small eigenvalues all lie inside the unit circle
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2289 ## ABS(Z) = 1'',
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2290 ## and a proof of this conjecture, together with a proof that some
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2291 ## eigenvalue tends to zero as N tends to infinity, would yield
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2292 ## a new proof of the prime number theorem.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2293 ## The Riemann hypothesis is true if and only if
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2294 ## DET(A) = O( N^(1/2+epsilon) ) for every epsilon > 0
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2295 ## (`!' denotes factorial).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2296 ## See also RIEMANN.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2297 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2298 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2299 ## W.W. Barrett and T.J. Jarvis,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2300 ## Spectral Properties of a Matrix of Redheffer,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2301 ## Linear Algebra and Appl., 162 (1992), pp. 673-683.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2302
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2303 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2304 error ("gallery: 1 argument is required for redheff matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2305 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2306 error ("gallery: N must be an integer for redheff matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2307 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2308
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2309 i = (1:n)' * ones (1, n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2310 A = ! rem (i', i);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2311 A(:,1) = ones (n, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2312 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2313
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2314 function A = riemann (n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2315 ## RIEMANN A matrix associated with the Riemann hypothesis.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2316 ## A = RIEMANN(N) is an N-by-N matrix for which the
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2317 ## Riemann hypothesis is true if and only if
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2318 ## DET(A) = O( N! N^(-1/2+epsilon) ) for every epsilon > 0
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2319 ## (`!' denotes factorial).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2320 ## A = B(2:N+1, 2:N+1), where
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2321 ## B(i,j) = i-1 if i divides j and -1 otherwise.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2322 ## Properties include, with M = N+1:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2323 ## Each eigenvalue E(i) satisfies ABS(E(i)) <= M - 1/M.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2324 ## i <= E(i) <= i+1 with at most M-SQRT(M) exceptions.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2325 ## All integers in the interval (M/3, M/2] are eigenvalues.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2326 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2327 ## See also REDHEFF.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2328 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2329 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2330 ## F. Roesler, Riemann's hypothesis as an eigenvalue problem,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2331 ## Linear Algebra and Appl., 81 (1986), pp. 153-198.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2332
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2333 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2334 error ("gallery: 1 argument is required for riemann matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2335 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2336 error ("gallery: N must be an integer for riemann matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2337 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2338
20231
83792dd9bcc1 Use in-place operators in m-files where possible.
Rik <rik@octave.org>
parents: 20162
diff changeset
2339 n += 1;
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2340 i = (2:n)' * ones (1, n-1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2341 j = i';
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2342 A = i .* (! rem (j, i)) - ones (n-1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2343 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2344
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2345 function A = ris (n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2346 ## NOTE: this function was named dingdong in the original Test Matrix Toolbox
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2347 ## RIS Dingdong matrix - a symmetric Hankel matrix.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2348 ## A = RIS(N) is the symmetric N-by-N Hankel matrix with
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2349 ## A(i,j) = 0.5/(N-i-j+1.5).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2350 ## The eigenvalues of A cluster around PI/2 and -PI/2.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2351 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2352 ## Invented by F.N. Ris.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2353 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2354 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2355 ## J.C. Nash, Compact Numerical Methods for Computers: Linear
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2356 ## Algebra and Function Minimisation, second edition, Adam Hilger,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2357 ## Bristol, 1990 (Appendix 1).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2358
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2359 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2360 error ("gallery: 1 argument is required for ris matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2361 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2362 error ("gallery: N must be an integer for ris matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2363 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2364
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2365 p = -2*(1:n) + (n+1.5);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2366 A = cauchy (p);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2367 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2368
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2369 function A = smoke (n, k = 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2370 ## SMOKE Smoke matrix - complex, with a `smoke ring' pseudospectrum.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2371 ## SMOKE(N) is an N-by-N matrix with 1s on the
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2372 ## superdiagonal, 1 in the (N,1) position, and powers of
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2373 ## roots of unity along the diagonal.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2374 ## SMOKE(N, 1) is the same except for a zero (N,1) element.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2375 ## The eigenvalues of SMOKE(N, 1) are the N'th roots of unity;
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2376 ## those of SMOKE(N) are the N'th roots of unity times 2^(1/N).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2377 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2378 ## Try PS(SMOKE(32)). For SMOKE(N, 1) the pseudospectrum looks
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2379 ## like a sausage folded back on itself.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2380 ## GERSH(SMOKE(N, 1)) is interesting.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2381 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2382 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2383 ## L. Reichel and L.N. Trefethen, Eigenvalues and pseudo-eigenvalues of
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2384 ## Toeplitz matrices, Linear Algebra and Appl., 162-164:153-185, 1992.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2385
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2386 if (nargin < 1 || nargin > 2)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2387 error ("gallery: 1 to 2 arguments are required for smoke matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2388 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2389 error ("gallery: N must be an integer for smoke matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2390 elseif (! isnumeric (n) || ! isscalar (n))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2391 error ("gallery: K must be a numeric scalar for smoke matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2392 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2393
16933
e39f00a32dc7 maint: Use parentheses around condition for switch(),while(),if() statements.
Rik <rik@octave.org>
parents: 16816
diff changeset
2394 w = exp (2*pi*i/n);
e39f00a32dc7 maint: Use parentheses around condition for switch(),while(),if() statements.
Rik <rik@octave.org>
parents: 16816
diff changeset
2395 A = diag ( [w.^(1:n-1) 1] ) + diag (ones (n-1,1), 1);
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2396
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2397 switch (k)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2398 case (0), A(n,1) = 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2399 case (1), # do nothing
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2400 otherwise,
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2401 error ("gallery: K must have a value of 0 or 1 for smoke matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2402 endswitch
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2403 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2404
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2405 function T = toeppd (n, m = n, w = rand (m,1), theta = rand (m,1))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2406 ## NOTE: this function was named pdtoep in the original Test Matrix Toolbox
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2407 ## TOEPPD Symmetric positive definite Toeplitz matrix.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2408 ## TOEPPD(N, M, W, THETA) is an N-by-N symmetric positive (semi-)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2409 ## definite (SPD) Toeplitz matrix, comprised of the sum of M rank 2
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2410 ## (or, for certain THETA, rank 1) SPD Toeplitz matrices.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2411 ## Specifically,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2412 ## T = W(1)*T(THETA(1)) + ... + W(M)*T(THETA(M)),
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2413 ## where T(THETA(k)) has (i,j) element COS(2*PI*THETA(k)*(i-j)).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2414 ## Defaults: M = N, W = RAND(M,1), THETA = RAND(M,1).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2415 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2416 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2417 ## G. Cybenko and C.F. Van Loan, Computing the minimum eigenvalue of
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2418 ## a symmetric positive definite Toeplitz matrix, SIAM J. Sci. Stat.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2419 ## Comput., 7 (1986), pp. 123-131.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2420
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2421 if (nargin < 1 || nargin > 4)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2422 error ("gallery: 1 to 4 arguments are required for toeppd matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2423 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2424 error ("gallery: N must be a numeric integer for toeppd matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2425 elseif (! isnumeric (m) || ! isscalar (m) || fix (m) != m)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2426 error ("gallery: M must be a numeric integer for toeppd matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2427 elseif (numel (w) != m || numel (theta) != m)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2428 error ("gallery: W and THETA must be vectors of length M for toeppd matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2429 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2430
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2431 T = zeros (n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2432 E = 2*pi * ((1:n)' * ones (1, n) - ones (n, 1) * (1:n));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2433
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2434 for i = 1:m
20231
83792dd9bcc1 Use in-place operators in m-files where possible.
Rik <rik@octave.org>
parents: 20162
diff changeset
2435 T += w(i) * cos (theta(i)*E);
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2436 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2437 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2438
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2439 function P = toeppen (n, a = 1, b = -10, c = 0, d = 10, e = 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2440 ## NOTE: this function was named pentoep in the original Test Matrix Toolbox
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2441 ## TOEPPEN Pentadiagonal Toeplitz matrix (sparse).
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2442 ## P = TOEPPEN(N, A, B, C, D, E) is the N-by-N pentadiagonal
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2443 ## Toeplitz matrix with diagonals composed of the numbers
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2444 ## A =: P(3,1), B =: P(2,1), C =: P(1,1), D =: P(1,2), E =: P(1,3).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2445 ## Default: (A,B,C,D,E) = (1,-10,0,10,1) (a matrix of Rutishauser).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2446 ## This matrix has eigenvalues lying approximately on
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2447 ## the line segment 2*cos(2*t) + 20*i*sin(t).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2448 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2449 ## Interesting plots are
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2450 ## PS(FULL(TOEPPEN(32,0,1,0,0,1/4))) - `triangle'
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2451 ## PS(FULL(TOEPPEN(32,0,1/2,0,0,1))) - `propeller'
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2452 ## PS(FULL(TOEPPEN(32,0,1/2,1,1,1))) - `fish'
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2453 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2454 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2455 ## R.M. Beam and R.F. Warming, The asymptotic spectra of
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2456 ## banded Toeplitz and quasi-Toeplitz matrices, SIAM J. Sci.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2457 ## Comput. 14 (4), 1993, pp. 971-1006.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2458 ## H. Rutishauser, On test matrices, Programmation en Mathematiques
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2459 ## Numeriques, Editions Centre Nat. Recherche Sci., Paris, 165,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2460 ## 1966, pp. 349-365.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2461
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2462 if (nargin < 1 || nargin > 6)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2463 error ("gallery: 1 to 6 arguments are required for toeppen matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2464 elseif (! isnumeric (n) || ! isscalar (n) || fix (n) != n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2465 error ("gallery: N must be a numeric integer for toeppen matrix.");
17386
6dbc866379e2 Replace cellfun() occurrences with faster code where possible.
Rik <rik@octave.org>
parents: 17338
diff changeset
2466 elseif (any (! cellfun ("isnumeric", {a b c d e})) || any (cellfun ("numel", {a b c d e}) != 1))
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2467 error ("gallery: A, B, C, D and E must be numeric scalars for toeppen matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2468 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2469
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2470 P = spdiags ([a*ones(n,1) b*ones(n,1) c*ones(n,1) d*ones(n,1) e*ones(n,1)],
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2471 -2:2, n, n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2472 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2473
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2474 function T = tridiag (n, x = -1, y = 2, z = -1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2475 ## TRIDIAG Tridiagonal matrix (sparse).
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2476 ## TRIDIAG(X, Y, Z) is the tridiagonal matrix with subdiagonal X,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2477 ## diagonal Y, and superdiagonal Z.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2478 ## X and Z must be vectors of dimension one less than Y.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2479 ## Alternatively TRIDIAG(N, C, D, E), where C, D, and E are all
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2480 ## scalars, yields the Toeplitz tridiagonal matrix of order N
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2481 ## with subdiagonal elements C, diagonal elements D, and superdiagonal
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2482 ## elements E. This matrix has eigenvalues (Todd 1977)
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2483 ## D + 2*SQRT(C*E)*COS(k*PI/(N+1)), k=1:N.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2484 ## TRIDIAG(N) is the same as TRIDIAG(N,-1,2,-1), which is
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2485 ## a symmetric positive definite M-matrix (the negative of the
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2486 ## second difference matrix).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2487 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2488 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2489 ## J. Todd, Basic Numerical Mathematics, Vol. 2: Numerical Algebra,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2490 ## Birkhauser, Basel, and Academic Press, New York, 1977, p. 155.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2491 ## D.E. Rutherford, Some continuant determinants arising in physics and
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2492 ## chemistry---II, Proc. Royal Soc. Edin., 63, A (1952), pp. 232-241.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2493
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2494 if (nargin != 1 && nargin != 3 && nargin != 4)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2495 error ("gallery: 1, 3, or 4 arguments are required for tridiag matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2496 elseif (nargin == 3)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2497 z = y;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2498 y = x;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2499 x = n;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2500 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2501
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2502 ## Force column vectors
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2503 x = x(:);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2504 y = y(:);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2505 z = z(:);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2506
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2507 if (isscalar (x) && isscalar (y) && isscalar (z))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2508 x *= ones (n-1, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2509 z *= ones (n-1, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2510 y *= ones (n, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2511 elseif (numel (y) != numel (x) + 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2512 error ("gallery: X must have one element less than Y for tridiag matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2513 elseif (numel (y) != numel (z) + 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2514 error ("gallery: Z must have one element less than Y for tridiag matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2515 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2516
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2517 ## T = diag (x, -1) + diag (y) + diag (z, 1); # For non-sparse matrix.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2518 n = numel (y);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2519 T = spdiags ([[x;0] y [0;z]], -1:1, n, n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2520 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2521
18846
3d33fe79816c gallery.m: Return correct matrix if 3rd argument is not specified.
Rik <rik@octave.org>
parents: 18812
diff changeset
2522 function t = triw (n, alpha = -1, k = n(end) - 1)
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2523 ## TRIW Upper triangular matrix discussed by Wilkinson and others.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2524 ## TRIW(N, ALPHA, K) is the upper triangular matrix with ones on
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2525 ## the diagonal and ALPHAs on the first K >= 0 superdiagonals.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2526 ## N may be a 2-vector, in which case the matrix is N(1)-by-N(2) and
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2527 ## upper trapezoidal.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2528 ## Defaults: ALPHA = -1,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2529 ## K = N - 1 (full upper triangle).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2530 ## TRIW(N) is a matrix discussed by Kahan, Golub and Wilkinson.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2531 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2532 ## Ostrowski (1954) shows that
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2533 ## COND(TRIW(N,2)) = COT(PI/(4*N))^2,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2534 ## and for large ABS(ALPHA),
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2535 ## COND(TRIW(N,ALPHA)) is approximately ABS(ALPHA)^N*SIN(PI/(4*N-2)).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2536 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2537 ## Adding -2^(2-N) to the (N,1) element makes TRIW(N) singular,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2538 ## as does adding -2^(1-N) to all elements in the first column.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2539 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2540 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2541 ## G.H. Golub and J.H. Wilkinson, Ill-conditioned eigensystems and the
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2542 ## computation of the Jordan canonical form, SIAM Review,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2543 ## 18(4), 1976, pp. 578-619.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2544 ## W. Kahan, Numerical linear algebra, Canadian Math. Bulletin,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2545 ## 9 (1966), pp. 757-801.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2546 ## A.M. Ostrowski, On the spectrum of a one-parametric family of
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2547 ## matrices, J. Reine Angew. Math., 193 (3/4), 1954, pp. 143-160.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2548 ## J.H. Wilkinson, Singular-value decomposition---basic aspects,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2549 ## in D.A.H. Jacobs, ed., Numerical Software---Needs and Availability,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2550 ## Academic Press, London, 1978, pp. 109-135.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2551
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2552 if (nargin < 1 || nargin > 3)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2553 error ("gallery: 1 to 3 arguments are required for triw matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2554 elseif (! isnumeric (n) || all (numel (n) != [1 2]))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2555 error ("gallery: N must be a 1 or 2 elements vector for triw matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2556 elseif (! isscalar (alpha))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2557 error ("gallery: ALPHA must be a scalar for triw matrix.");
18846
3d33fe79816c gallery.m: Return correct matrix if 3rd argument is not specified.
Rik <rik@octave.org>
parents: 18812
diff changeset
2558 elseif (! isscalar (k) || ! isnumeric (k) || fix (k) != k || k < 0)
3d33fe79816c gallery.m: Return correct matrix if 3rd argument is not specified.
Rik <rik@octave.org>
parents: 18812
diff changeset
2559 error ("gallery: K must be a numeric integer >= 0 for triw matrix.");
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2560 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2561
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2562 m = n(1); # Parameter n specifies dimension: m-by-n.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2563 n = n(end);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2564
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2565 t = tril (eye (m, n) + alpha * triu (ones (m, n), 1), k);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2566 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2567
16978
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2568 function A = uniformdata (varargin)
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2569
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2570 if (nargin < 2)
16979
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
2571 error ("gallery: At least 2 arguments required for uniformdata matrix.");
16978
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2572 endif
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2573 if (isnumeric (varargin{end}))
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2574 jidx = varargin{end};
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2575 svec = [varargin{:}];
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2576 varargin(end) = [];
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2577 elseif (ischar (varargin{end}))
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2578 if (nargin < 3)
16979
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
2579 error (["gallery: CLASS argument requires 3 inputs " ...
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
2580 "for uniformdata matrix."]);
16978
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2581 endif
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2582 jidx = varargin{end-1};
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2583 svec = [varargin{1:end-1}];
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2584 varargin(end-1) = [];
19593
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 17386
diff changeset
2585 else
16979
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
2586 error (["gallery: J must be an integer in the range [0, 2^32-1] " ...
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
2587 "for uniformdata matrix"]);
16978
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2588 endif
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2589
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2590 if (! (isnumeric (jidx) && isscalar (jidx)
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2591 && jidx == fix (jidx)
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2592 && jidx >= 0 && jidx <= 0xFFFFFFFF))
16979
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
2593 error (["gallery: J must be an integer in the range [0, 2^32-1] " ...
9aa293e00475 gallery.m: Add 'normaldata' matrix to function.
Rik <rik@octave.org>
parents: 16978
diff changeset
2594 "for uniformdata matrix"]);
16978
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2595 endif
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2596
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2597 ## Save and restore random state. Initialization done so that reproducible
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2598 ## data is available from gallery depending on the jidx and size vector.
19593
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 17386
diff changeset
2599 randstate = rand ("state");
16978
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2600 unwind_protect
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2601 rand ("state", svec);
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2602 A = rand (varargin{:});
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2603 unwind_protect_cleanup
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2604 rand ("state", randstate);
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2605 end_unwind_protect
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2606
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2607 endfunction
00379f9f8773 gallery.m: Add 'uniformdata' matrix to function.
Rik <rik@octave.org>
parents: 16933
diff changeset
2608
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2609 function A = wathen (nx, ny, k = 0)
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2610 ## WATHEN returns the Wathen matrix.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2611 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2612 ## Discussion:
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2613 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2614 ## The Wathen matrix is a finite element matrix which is sparse.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2615 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2616 ## The entries of the matrix depend in part on a physical quantity
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2617 ## related to density. That density is here assigned random values between
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2618 ## 0 and 100.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2619 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2620 ## A = WATHEN ( NX, NY ) is a sparse random N-by-N finite element matrix
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2621 ## where N = 3*NX*NY + 2*NX + 2*NY + 1.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2622 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2623 ## A is the consistent mass matrix for a regular NX-by-NY
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2624 ## grid of 8-node (serendipity) elements in 2 space dimensions.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2625 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2626 ## Here is an illustration for NX = 3, NX = 2:
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2627 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2628 ## 23-24-25-26-27-28-29
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2629 ## | | | |
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2630 ## 19 20 21 22
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2631 ## | | | |
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2632 ## 12-13-14-15-16-17-18
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2633 ## | | | |
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2634 ## 8 9 10 11
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2635 ## | | | |
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2636 ## 1--2--3--4--5--6--7
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2637 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2638 ## For this example, the total number of nodes is, as expected,
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2639 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2640 ## N = 3 * 3 * 2 + 2 * 2 + 2 * 3 + 1 = 29.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2641 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2642 ## A is symmetric positive definite for any (positive) values of
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2643 ## the density, RHO(NX,NY), which is chosen randomly in this routine.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2644 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2645 ## In particular, if D = DIAG(DIAG(A)), then
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2646 ## 0.25 <= EIG(INV(D)*A) <= 4.5
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2647 ## for any positive integers NX and NY and any densities RHO(NX,NY).
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2648 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2649 ## A = WATHEN ( NX, NY, 1 ) returns the diagonally scaled matrix.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2650 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2651 ## Modified:
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2652 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2653 ## 17 September 2007
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2654 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2655 ## Author:
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2656 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2657 ## Nicholas Higham
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2658 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2659 ## Reference:
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2660 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2661 ## Nicholas Higham,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2662 ## Algorithm 694: A Collection of Test Matrices in MATLAB,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2663 ## ACM Transactions on Mathematical Software,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2664 ## Volume 17, Number 3, September 1991, pages 289-305.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2665 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2666 ## Andrew Wathen,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2667 ## Realistic eigenvalue bounds for the Galerkin mass matrix,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2668 ## IMA Journal of Numerical Analysis,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2669 ## Volume 7, 1987, pages 449-457.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2670 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2671 ## Parameters:
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2672 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2673 ## Input, integer NX, NY, the number of elements in the X and Y directions
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2674 ## of the finite element grid. NX and NY must each be at least 1.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2675 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2676 ## Optional input, integer K, is used to request that the diagonally scaled
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2677 ## version of the matrix be returned. This happens if K is specified with
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2678 ## the value 1.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2679 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2680 ## Output, sparse real A(N,N), the matrix. The dimension N is determined by
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2681 ## NX and NY, as described above. A is stored in the MATLAB sparse matrix
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2682 ## format.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2683
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2684 if (nargin < 2 || nargin > 3)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2685 error ("gallery: 2 or 3 arguments are required for wathen matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2686 elseif (! isnumeric (nx) || ! isscalar (nx) || nx < 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2687 error ("gallery: NX must be a positive scalar for wathen matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2688 elseif (! isnumeric (ny) || ! isscalar (ny) || ny < 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2689 error ("gallery: NY must be a positive scalar for wathen matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2690 elseif (! isscalar (k))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2691 error ("gallery: K must be a scalar for wathen matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2692 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2693
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2694 e1 = [ 6 -6 2 -8
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2695 -6 32 -6 20
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2696 2 -6 6 -6
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2697 -8 20 -6 32 ];
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2698
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2699 e2 = [ 3 -8 2 -6
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2700 -8 16 -8 20
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2701 2 -8 3 -8
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2702 -6 20 -8 16 ];
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2703
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2704 e = [ e1 e2
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2705 e2' e1] / 45;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2706
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2707 n = 3*nx*ny + 2*nx + 2*ny + 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2708
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2709 A = sparse (n, n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2710
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2711 rho = 100 * rand (nx, ny);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2712
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2713 for j = 1:ny
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2714 for i = 1:nx
19593
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 17386
diff changeset
2715 ##
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2716 ## For the element (I,J), determine the indices of the 8 nodes.
19593
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 17386
diff changeset
2717 ##
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2718 nn(1) = 3*j*nx + 2*i + 2*j + 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2719 nn(2) = nn(1) - 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2720 nn(3) = nn(2) - 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2721 nn(4) = (3*j - 1) * nx + 2*j + i - 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2722 nn(5) = 3 * (j-1) * nx + 2*i + 2*j - 3;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2723 nn(6) = nn(5) + 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2724 nn(7) = nn(6) + 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2725 nn(8) = nn(4) + 1;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2726
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2727 em = e * rho(i,j);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2728
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2729 for krow = 1:8
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2730 for kcol = 1:8
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2731 A(nn(krow),nn(kcol)) = A(nn(krow),nn(kcol)) + em(krow,kcol);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2732 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2733 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2734
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2735 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2736 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2737
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2738 ## If requested, return A with diagonal scaling.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2739 if (k)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2740 A = diag (diag (A)) \ A;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2741 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2742 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2743
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2744 function [A, b] = wilk (n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2745 ## WILK Various specific matrices devised/discussed by Wilkinson.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2746 ## [A, b] = WILK(N) is the matrix or system of order N.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2747 ## N = 3: upper triangular system Ux=b illustrating inaccurate solution.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2748 ## N = 4: lower triangular system Lx=b, ill-conditioned.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2749 ## N = 5: HILB(6)(1:5,2:6)*1.8144. Symmetric positive definite.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2750 ## N = 21: W21+, tridiagonal. Eigenvalue problem.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2751 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2752 ## References:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2753 ## J.H. Wilkinson, Error analysis of direct methods of matrix inversion,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2754 ## J. Assoc. Comput. Mach., 8 (1961), pp. 281-330.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2755 ## J.H. Wilkinson, Rounding Errors in Algebraic Processes, Notes on Applied
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2756 ## Science No. 32, Her Majesty's Stationery Office, London, 1963.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2757 ## J.H. Wilkinson, The Algebraic Eigenvalue Problem, Oxford University
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2758 ## Press, 1965.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2759
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2760 if (nargin != 1)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2761 error ("gallery: 1 argument is required for wilk matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2762 elseif (! isnumeric (n) || ! isscalar (n))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2763 error ("gallery: N must be a numeric scalar for wilk matrix.");
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2764 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2765
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2766 if (n == 3)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2767 ## Wilkinson (1961) p.323.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2768 A = [ 1e-10 0.9 -0.4
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2769 0 0.9 -0.4
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2770 0 0 1e-10 ];
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2771
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2772 b = [ 0
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2773 0
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2774 1];
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2775
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2776 elseif (n == 4)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2777 ## Wilkinson (1963) p.105.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2778 A = [0.9143e-4 0 0 0
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2779 0.8762 0.7156e-4 0 0
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2780 0.7943 0.8143 0.9504e-4 0
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2781 0.8017 0.6123 0.7165 0.7123e-4];
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2782
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2783 b = [0.6524
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2784 0.3127
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2785 0.4186
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2786 0.7853];
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2787
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2788 elseif (n == 5)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2789 ## Wilkinson (1965), p.234.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2790 A = hilb (6);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2791 A = A(1:5, 2:6) * 1.8144;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2792
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2793 elseif (n == 21)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2794 ## Wilkinson (1965), p.308.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2795 E = diag (ones (n-1, 1), 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2796 m = (n-1)/2;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2797 A = diag (abs (-m:m)) + E + E';
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2798
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2799 else
16766
7268845c0a1e avoid backquote in error messages, some uses in doc strings
John W. Eaton <jwe@octave.org>
parents: 16734
diff changeset
2800 error ("gallery: unknown N '%d' for wilk matrix.", n);
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2801 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2802 endfunction
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2803
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2804 ## NOTE: bandred is part of the Test Matrix Toolbox and is used by randsvd()
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2805 function A = bandred (A, kl, ku)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2806 ## BANDRED Band reduction by two-sided unitary transformations.
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2807 ## B = BANDRED(A, KL, KU) is a matrix unitarily equivalent to A
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2808 ## with lower bandwidth KL and upper bandwidth KU
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2809 ## (i.e. B(i,j) = 0 if i > j+KL or j > i+KU).
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2810 ## The reduction is performed using Householder transformations.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2811 ## If KU is omitted it defaults to KL.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2812 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2813 ## Called by RANDSVD.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2814 ## This is a `standard' reduction. Cf. reduction to bidiagonal form
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2815 ## prior to computing the SVD. This code is a little wasteful in that
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2816 ## it computes certain elements which are immediately set to zero!
19593
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 17386
diff changeset
2817 ##
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2818 ## Reference:
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2819 ## G.H. Golub and C.F. Van Loan, Matrix Computations, second edition,
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2820 ## Johns Hopkins University Press, Baltimore, Maryland, 1989.
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
2821 ## Section 5.4.3.
16634
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2822
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2823 ## Check for special case where order of left/right transformations matters.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2824 ## Easiest approach is to work on the transpose, flipping back at the end.
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2825 flip = false;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2826 if (ku == 0)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2827 flip = true;
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2828 A = A';
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2829 [ku, kl] = deal (kl, ku);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2830 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2831
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2832 [m, n] = size (A);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2833
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2834 for j = 1:min (min (m, n), max (m-kl-1, n-ku-1))
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2835 if (j+kl+1 <= m)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2836 [v, beta] = house (A(j+kl:m,j));
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2837 temp = A(j+kl:m,j:n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2838 A(j+kl:m,j:n) = temp - beta*v*(v'*temp);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2839 A(j+kl+1:m,j) = zeros (m-j-kl, 1);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2840 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2841
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2842 if (j+ku+1 <= n)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2843 [v, beta] = house (A(j,j+ku:n)');
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2844 temp = A(j:m,j+ku:n);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2845 A(j:m,j+ku:n) = temp - beta*(temp*v)*v';
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2846 A(j,j+ku+1:n) = zeros (1, n-j-ku);
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2847 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2848 endfor
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2849
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2850 if (flip)
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2851 A = A';
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2852 endif
2510fffc05e1 gallery: new function
Carnë Draug <carandraug@octave.org>
parents:
diff changeset
2853 endfunction
17338
1c89599167a6 maint: End m-files with 1 blank line.
Rik <rik@octave.org>
parents: 17312
diff changeset
2854
20296
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2855 ## NOTE: qmult is part of the Test Matrix Toolbox and is used by randsvd()
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2856 function B = qmult (A)
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2857 ## QMULT Pre-multiply by random orthogonal matrix.
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2858 ## QMULT(A) is Q*A where Q is a random real orthogonal matrix from
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2859 ## the Haar distribution, of dimension the number of rows in A.
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2860 ## Special case: if A is a scalar then QMULT(A) is the same as
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2861 ## QMULT(EYE(A)).
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2862 ##
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2863 ## Called by RANDSVD.
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2864 ##
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2865 ## Reference:
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2866 ## G.W. Stewart, The efficient generation of random
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2867 ## orthogonal matrices with an application to condition estimators,
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2868 ## SIAM J. Numer. Anal., 17 (1980), 403-409.
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2869
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2870 [n, m] = size (A);
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2871
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2872 ## Handle scalar A
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2873 if (isscalar (A))
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2874 n = A;
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2875 A = eye (n);
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2876 endif
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2877
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2878 d = zeros (n);
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2879
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2880 for k = n-1:-1:1
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2881 ## Generate random Householder transformation.
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2882 x = randn (n-k+1, 1);
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2883 s = norm (x);
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2884 sgn = sign (x(1)) + (x(1) == 0); # Modification for sign(1)=1.
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2885 s = sgn*s;
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2886 d(k) = -sgn;
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2887 x(1) = x(1) + s;
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2888 beta = s*x(1);
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2889
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2890 ## Apply the transformation to A.
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2891 y = x'*A(k:n,:);
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2892 A(k:n,:) = A(k:n,:) - x*(y/beta);
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2893 endfor
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2894
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2895 ## Tidy up signs
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2896 for i = 1:n-1
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2897 A(i,:) = d(i)*A(i,:);
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2898 endfor
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2899 A(n,:) = A(n,:) * sign (randn);
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2900 B = A;
0b9d23557506 gallery: fix randsvd by adding missing dependency qmult().
Carnë Draug <carandraug@octave.org>
parents: 20295
diff changeset
2901 endfunction
19226
cdfc8bc9ab62 gallery.m: Add BIST tests for central dispatch function.
Rik <rik@octave.org>
parents: 19040
diff changeset
2902
cdfc8bc9ab62 gallery.m: Add BIST tests for central dispatch function.
Rik <rik@octave.org>
parents: 19040
diff changeset
2903 ## BIST testing for just a few functions to verify that the main gallery
cdfc8bc9ab62 gallery.m: Add BIST tests for central dispatch function.
Rik <rik@octave.org>
parents: 19040
diff changeset
2904 ## dispatch function works.
cdfc8bc9ab62 gallery.m: Add BIST tests for central dispatch function.
Rik <rik@octave.org>
parents: 19040
diff changeset
2905 %assert (gallery ("clement", 3), [0 1 0; 2 0 2; 0 1 0])
cdfc8bc9ab62 gallery.m: Add BIST tests for central dispatch function.
Rik <rik@octave.org>
parents: 19040
diff changeset
2906 %assert (gallery ("invhess", 2), [1 -1; 1 2])
cdfc8bc9ab62 gallery.m: Add BIST tests for central dispatch function.
Rik <rik@octave.org>
parents: 19040
diff changeset
2907
cdfc8bc9ab62 gallery.m: Add BIST tests for central dispatch function.
Rik <rik@octave.org>
parents: 19040
diff changeset
2908 ## Test input validation of main dispatch function only
cdfc8bc9ab62 gallery.m: Add BIST tests for central dispatch function.
Rik <rik@octave.org>
parents: 19040
diff changeset
2909 %!error gallery ()
cdfc8bc9ab62 gallery.m: Add BIST tests for central dispatch function.
Rik <rik@octave.org>
parents: 19040
diff changeset
2910 %!error <NAME must be a string> gallery (123)
cdfc8bc9ab62 gallery.m: Add BIST tests for central dispatch function.
Rik <rik@octave.org>
parents: 19040
diff changeset
2911 %!error <matrix binomial not implemented> gallery ("binomial")
cdfc8bc9ab62 gallery.m: Add BIST tests for central dispatch function.
Rik <rik@octave.org>
parents: 19040
diff changeset
2912 %!error <unknown matrix with NAME foobar> gallery ("foobar")
cdfc8bc9ab62 gallery.m: Add BIST tests for central dispatch function.
Rik <rik@octave.org>
parents: 19040
diff changeset
2913
19944
941e782d0429 gallery: performance increase for minij matrix.
Carnë Draug <carandraug@octave.org>
parents: 19833
diff changeset
2914 %!assert (gallery ("minij", 4), [1 1 1 1; 1 2 2 2; 1 2 3 3; 1 2 3 4])
941e782d0429 gallery: performance increase for minij matrix.
Carnë Draug <carandraug@octave.org>
parents: 19833
diff changeset
2915 %!assert (gallery ("minij", 1), 1)
941e782d0429 gallery: performance increase for minij matrix.
Carnë Draug <carandraug@octave.org>
parents: 19833
diff changeset
2916 %!assert (gallery ("minij", 0), [])
941e782d0429 gallery: performance increase for minij matrix.
Carnë Draug <carandraug@octave.org>
parents: 19833
diff changeset
2917 %!assert (gallery ("minij", -1), [])