annotate doc/interpreter/sparse.txi @ 5704:3d8d8ce93c2c

[project @ 2006-03-21 21:53:56 by jwe]
author jwe
date Tue, 21 Mar 2006 21:53:56 +0000
parents 233d98d95659
children 0a26811c98be
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1 @c Copyright (C) 2004, 2005 David Bateman
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
2 @c This is part of the Octave manual.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
3 @c For copying conditions, see the file gpl.texi.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
4
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
5 @ifhtml
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
6 @set htmltex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
7 @end ifhtml
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
8 @iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
9 @set htmltex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
10 @end iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
11
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
12 @node Sparse Matrices
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
13 @chapter Sparse Matrices
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
14
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
15 @menu
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
16 * Basics:: The Creation and Manipulation of Sparse Matrices
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
17 * Sparse Linear Algebra:: Linear Algebra on Sparse Matrices
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
18 * Iterative Techniques:: Iterative Techniques applied to Sparse Matrices
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
19 * Real Life Example:: Real Life Example of the use of Sparse Matrices
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
20 * Oct-Files:: Using Sparse Matrices in Oct-files
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
21 * Function Reference:: Documentation from the Specific Sparse Functions
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
22 @end menu
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
23
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
24 @node Basics, Sparse Linear Algebra, Sparse Matrices, Sparse Matrices
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
25 @section The Creation and Manipulation of Sparse Matrices
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
26
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
27 The size of mathematical problems that can be treated at any particular
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
28 time is generally limited by the available computing resources. Both,
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
29 the speed of the computer and its available memory place limitation on
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
30 the problem size.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
31
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
32 There are many classes of mathematical problems which give rise to
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
33 matrices, where a large number of the elements are zero. In this case
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
34 it makes sense to have a special matrix type to handle this class of
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
35 problems where only the non-zero elements of the matrix are
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
36 stored. Not only does this reduce the amount of memory to store the
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
37 matrix, but it also means that operations on this type of matrix can
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
38 take advantage of the a-priori knowledge of the positions of the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
39 non-zero elements to accelerate their calculations.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
40
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
41 A matrix type that stores only the non-zero elements is generally called
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
42 sparse. It is the purpose of this document to discuss the basics of the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
43 storage and creation of sparse matrices and the fundamental operations
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
44 on them.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
45
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
46 @menu
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
47 * Storage:: Storage of Sparse Matrices
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
48 * Creation:: Creating Sparse Matrices
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
49 * Information:: Finding out Information about Sparse Matrices
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
50 * Operators and Functions:: Basic Operators and Functions on Sparse Matrices
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
51 @end menu
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
52
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
53 @node Storage, Creation, Basics, Basics
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
54 @subsection Storage of Sparse Matrices
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
55
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
56 It is not strictly speaking necessary for the user to understand how
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
57 sparse matrices are stored. However, such an understanding will help
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
58 to get an understanding of the size of sparse matrices. Understanding
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
59 the storage technique is also necessary for those users wishing to
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
60 create their own oct-files.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
61
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
62 There are many different means of storing sparse matrix data. What all
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
63 of the methods have in common is that they attempt to reduce the complexity
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
64 and storage given a-priori knowledge of the particular class of problems
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
65 that will be solved. A good summary of the available techniques for storing
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
66 sparse matrix is given by Saad @footnote{Youcef Saad "SPARSKIT: A basic toolkit
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
67 for sparse matrix computation", 1994,
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
68 @url{ftp://ftp.cs.umn.edu/dept/sparse/SPARSKIT2/DOC/paper.ps}}.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
69 With full matrices, knowledge of the point of an element of the matrix
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
70 within the matrix is implied by its position in the computers memory.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
71 However, this is not the case for sparse matrices, and so the positions
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
72 of the non-zero elements of the matrix must equally be stored.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
73
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
74 An obvious way to do this is by storing the elements of the matrix as
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
75 triplets, with two elements being their position in the array
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
76 (rows and column) and the third being the data itself. This is conceptually
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
77 easy to grasp, but requires more storage than is strictly needed.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
78
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
79 The storage technique used within Octave is the compressed column
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
80 format. In this format the position of each element in a row and the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
81 data are stored as previously. However, if we assume that all elements
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
82 in the same column are stored adjacent in the computers memory, then
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
83 we only need to store information on the number of non-zero elements
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
84 in each column, rather than their positions. Thus assuming that the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
85 matrix has more non-zero elements than there are columns in the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
86 matrix, we win in terms of the amount of memory used.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
87
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
88 In fact, the column index contains one more element than the number of
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
89 columns, with the first element always being zero. The advantage of
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
90 this is a simplification in the code, in that their is no special case
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
91 for the first or last columns. A short example, demonstrating this in
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
92 C is.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
93
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
94 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
95 for (j = 0; j < nc; j++)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
96 for (i = cidx (j); i < cidx(j+1); i++)
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
97 printf ("non-zero element (%i,%i) is %d\n",
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
98 ridx(i), j, data(i));
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
99 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
100
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
101 A clear understanding might be had by considering an example of how the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
102 above applies to an example matrix. Consider the matrix
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
103
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
104 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
105 @group
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
106 1 2 0 0
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
107 0 0 0 3
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
108 0 0 0 4
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
109 @end group
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
110 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
111
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
112 The non-zero elements of this matrix are
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
113
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
114 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
115 @group
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
116 (1, 1) @result{} 1
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
117 (1, 2) @result{} 2
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
118 (2, 4) @result{} 3
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
119 (3, 4) @result{} 4
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
120 @end group
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
121 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
122
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
123 This will be stored as three vectors @var{cidx}, @var{ridx} and @var{data},
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
124 representing the column indexing, row indexing and data respectively. The
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
125 contents of these three vectors for the above matrix will be
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
126
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
127 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
128 @group
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
129 @var{cidx} = [0, 1, 2, 2, 4]
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
130 @var{ridx} = [0, 0, 1, 2]
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
131 @var{data} = [1, 2, 3, 4]
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
132 @end group
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
133 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
134
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
135 Note that this is the representation of these elements with the first row
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
136 and column assumed to start at zero, while in Octave itself the row and
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
137 column indexing starts at one. Thus the number of elements in the
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
138 @var{i}-th column is given by @code{@var{cidx} (@var{i} + 1) -
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
139 @var{cidx} (@var{i})}.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
140
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
141 Although Octave uses a compressed column format, it should be noted
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
142 that compressed row formats are equally possible. However, in the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
143 context of mixed operations between mixed sparse and dense matrices,
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
144 it makes sense that the elements of the sparse matrices are in the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
145 same order as the dense matrices. Octave stores dense matrices in
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
146 column major ordering, and so sparse matrices are equally stored in
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
147 this manner.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
148
5324
d2d11284528e [project @ 2005-04-29 14:56:45 by jwe]
jwe
parents: 5322
diff changeset
149 A further constraint on the sparse matrix storage used by Octave is that
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
150 all elements in the rows are stored in increasing order of their row
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
151 index, which makes certain operations faster. However, it imposes
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
152 the need to sort the elements on the creation of sparse matrices. Having
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
153 dis-ordered elements is potentially an advantage in that it makes operations
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
154 such as concatenating two sparse matrices together easier and faster, however
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
155 it adds complexity and speed problems elsewhere.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
156
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
157 @node Creation, Information, Storage, Basics
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
158 @subsection Creating Sparse Matrices
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
159
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
160 There are several means to create sparse matrix.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
161
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
162 @table @asis
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
163 @item Returned from a function
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
164 There are many functions that directly return sparse matrices. These include
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
165 @dfn{speye}, @dfn{sprand}, @dfn{spdiag}, etc.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
166 @item Constructed from matrices or vectors
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
167 The function @dfn{sparse} allows a sparse matrix to be constructed from
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
168 three vectors representing the row, column and data. Alternatively, the
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
169 function @dfn{spconvert} uses a three column matrix format to allow easy
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
170 importation of data from elsewhere.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
171 @item Created and then filled
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
172 The function @dfn{sparse} or @dfn{spalloc} can be used to create an empty
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
173 matrix that is then filled by the user
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
174 @item From a user binary program
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
175 The user can directly create the sparse matrix within an oct-file.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
176 @end table
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
177
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
178 There are several basic functions to return specific sparse
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
179 matrices. For example the sparse identity matrix, is a matrix that is
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
180 often needed. It therefore has its own function to create it as
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
181 @code{speye (@var{n})} or @code{speye (@var{r}, @var{c})}, which
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
182 creates an @var{n}-by-@var{n} or @var{r}-by-@var{c} sparse identity
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
183 matrix.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
184
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
185 Another typical sparse matrix that is often needed is a random distribution
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
186 of random elements. The functions @dfn{sprand} and @dfn{sprandn} perform
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
187 this for uniform and normal random distributions of elements. They have exactly
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
188 the same calling convention, where @code{sprand (@var{r}, @var{c}, @var{d})},
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
189 creates an @var{r}-by-@var{c} sparse matrix with a density of filled
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
190 elements of @var{d}.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
191
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
192 Other functions of interest that directly creates a sparse matrices, are
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
193 @dfn{spdiag} or its generalization @dfn{spdiags}, that can take the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
194 definition of the diagonals of the matrix and create the sparse matrix
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
195 that corresponds to this. For example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
196
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
197 @example
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
198 s = diag (sparse(randn(1,n)), -1);
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
199 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
200
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
201 creates a sparse (@var{n}+1)-by-(@var{n}+1) sparse matrix with a single
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
202 diagonal defined.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
203
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
204 The recommended way for the user to create a sparse matrix, is to create
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
205 two vectors containing the row and column index of the data and a third
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
206 vector of the same size containing the data to be stored. For example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
207
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
208 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
209 function x = foo (r, j)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
210 idx = randperm (r);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
211 x = ([zeros(r-2,1); rand(2,1)])(idx);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
212 endfunction
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
213
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
214 ri = [];
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
215 ci = [];
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
216 d = [];
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
217
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
218 for j=1:c
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
219 dtmp = foo (r, j); # Returns vector of length r with (:,j) values
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
220 idx = find (dtmp != 0.);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
221 ri = [ri; idx];
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
222 ci = [ci; j*ones(length(idx),1)];
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
223 d = [d; dtmp(idx)];
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
224 endfor
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
225 s = sparse (ri, ci, d, r, c);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
226 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
227
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
228 creates an @var{r}-by-@var{c} sparse matrix with a random distribution of
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
229 2 elements per row. The elements of the vectors do not need to be sorted in
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
230 any particular order as Octave will sort them prior to storing the
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
231 data. However, pre-sorting the data will make the creation of the sparse
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
232 matrix faster.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
233
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
234 The function @dfn{spconvert} takes a three or four column real matrix.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
235 The first two columns represent the row and column index respectively and
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
236 the third and four columns, the real and imaginary parts of the sparse
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
237 matrix. The matrix can contain zero elements and the elements can be
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
238 sorted in any order. Adding zero elements is a convenient way to define
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
239 the size of the sparse matrix. For example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
240
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
241 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
242 s = spconvert ([1 2 3 4; 1 3 4 4; 1 2 3 0]')
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
243 @result{} Compressed Column Sparse (rows=4, cols=4, nnz=3)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
244 (1 , 1) -> 1
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
245 (2 , 3) -> 2
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
246 (3 , 4) -> 3
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
247 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
248
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
249 An example of creating and filling a matrix might be
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
250
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
251 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
252 k = 5;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
253 nz = r * k;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
254 s = spalloc (r, c, nz)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
255 for j = 1:c
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
256 idx = randperm (r);
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
257 s (:, j) = [zeros(r - k, 1); ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
258 rand(k, 1)] (idx);
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
259 endfor
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
260 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
261
5324
d2d11284528e [project @ 2005-04-29 14:56:45 by jwe]
jwe
parents: 5322
diff changeset
262 It should be noted, that due to the way that the Octave
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
263 assignment functions are written that the assignment will reallocate
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
264 the memory used by the sparse matrix at each iteration of the above loop.
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
265 Therefore the @dfn{spalloc} function ignores the @var{nz} argument and
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
266 does not preassign the memory for the matrix. Therefore, it is vitally
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
267 important that code using to above structure should be vectorized
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
268 as much as possible to minimize the number of assignments and reduce the
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
269 number of memory allocations.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
270
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
271 The above problem can be avoided in oct-files. However, the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
272 construction of a sparse matrix from an oct-file is more complex than
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
273 can be discussed in this brief introduction, and you are referred to
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
274 section @ref{Oct-Files}, to have a full description of the techniques
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
275 involved.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
276
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
277 @node Information, Operators and Functions, Creation, Basics
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
278 @subsection Finding out Information about Sparse Matrices
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
279
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
280 There are a number of functions that allow information concerning
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
281 sparse matrices to be obtained. The most basic of these is
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
282 @dfn{issparse} that identifies whether a particular Octave object is
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
283 in fact a sparse matrix.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
284
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
285 Another very basic function is @dfn{nnz} that returns the number of
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
286 non-zero entries there are in a sparse matrix, while the function
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
287 @dfn{nzmax} returns the amount of storage allocated to the sparse
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
288 matrix. Note that Octave tends to crop unused memory at the first
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
289 opportunity for sparse objects. There are some cases of user created
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
290 sparse objects where the value returned by @dfn{nzmaz} will not be
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
291 the same as @dfn{nnz}, but in general they will give the same
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
292 result. The function @dfn{spstats} returns some basic statistics on
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
293 the columns of a sparse matrix including the number of elements, the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
294 mean and the variance of each column.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
295
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
296 When solving linear equations involving sparse matrices Octave
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
297 determines the means to solve the equation based on the type of the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
298 matrix as discussed in @ref{Sparse Linear Algebra}. Octave probes the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
299 matrix type when the div (/) or ldiv (\) operator is first used with
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
300 the matrix and then caches the type. However the @dfn{matrix_type}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
301 function can be used to determine the type of the sparse matrix prior
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
302 to use of the div or ldiv operators. For example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
303
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
304 @example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
305 a = tril (sprandn(1024, 1024, 0.02), -1) ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
306 + speye(1024);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
307 matrix_type (a);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
308 ans = Lower
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
309 @end example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
310
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
311 show that Octave correctly determines the matrix type for lower
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
312 triangular matrices. @dfn{matrix_type} can also be used to force
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
313 the type of a matrix to be a particular type. For example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
314
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
315 @example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
316 a = matrix_type (tril (sprandn (1024, ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
317 1024, 0.02), -1) + speye(1024), 'Lower');
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
318 @end example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
319
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
320 This allows the cost of determining the matrix type to be
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
321 avoided. However, incorrectly defining the matrix type will result in
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
322 incorrect results from solutions of linear equations, and so it is
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
323 entirely the responsibility of the user to correctly identify the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
324 matrix type
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
325
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
326 There are several graphical means of finding out information about
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
327 sparse matrices. The first is the @dfn{spy} command, which displays
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
328 the structure of the non-zero elements of the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
329 matrix. @xref{fig:spmatrix}, for an exaple of the use of
5704
3d8d8ce93c2c [project @ 2006-03-21 21:53:56 by jwe]
jwe
parents: 5681
diff changeset
330 @dfn{spy}. More advanced graphical information can be obtained with the
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
331 @dfn{treeplot}, @dfn{etreeplot} and @dfn{gplot} commands.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
332
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
333 @float Figure,fig:spmatrix
5704
3d8d8ce93c2c [project @ 2006-03-21 21:53:56 by jwe]
jwe
parents: 5681
diff changeset
334 @ifset INCLUDE_FIGURES
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
335 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
336 @example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
337 @include spmatrix.txt
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
338 @end example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
339 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
340 @ifset htmltex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
341 @image{spmatrix,8cm}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
342 @end ifset
5704
3d8d8ce93c2c [project @ 2006-03-21 21:53:56 by jwe]
jwe
parents: 5681
diff changeset
343 @end ifest
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
344 @caption{Structure of simple sparse matrix.}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
345 @end float
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
346
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
347 One use of sparse matrices is in graph theory, where the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
348 interconnections between nodes is represented as an adjacency
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
349 matrix. That is, if the i-th node in a graph is connected to the j-th
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
350 node. Then the ij-th node (and in the case of undirected graphs the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
351 ji-th node) of the sparse adjacency matrix is non-zero. If each node
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
352 is then associated with a set of co-ordinates, then the @dfn{gplot}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
353 command can be used to graphically display the interconnections
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
354 between nodes.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
355
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
356 As a trivial example of the use of @dfn{gplot}, consider the example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
357
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
358 @example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
359 A = sparse([2,6,1,3,2,4,3,5,4,6,1,5],
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
360 [1,1,2,2,3,3,4,4,5,5,6,6],1,6,6);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
361 xy = [0,4,8,6,4,2;5,0,5,7,5,7]';
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
362 gplot(A,xy)
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
363 @end example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
364
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
365 which creates an adjacency matrix @code{A} where node 1 is connected
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
366 to nodes 2 and 6, node 2 with nodes 1 and 3, etc. The co-ordinates of
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
367 the nodes are given in the n-by-2 matrix @code{xy}.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
368 @ifset htmltex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
369 @xref{fig:gplot}.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
370
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
371 @float Figure,fig:gplot
5704
3d8d8ce93c2c [project @ 2006-03-21 21:53:56 by jwe]
jwe
parents: 5681
diff changeset
372 @ifset INCLUDE_FIGURES
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
373 @image{gplot,8cm}
5704
3d8d8ce93c2c [project @ 2006-03-21 21:53:56 by jwe]
jwe
parents: 5681
diff changeset
374 @end ifset
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
375 @caption{Simple use of the @dfn{gplot} command.}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
376 @end float
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
377 @end ifset
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
378
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
379 The dependencies between the nodes of a Cholesky factorization can be
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
380 calculated in linear time without explicitly needing to calculate the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
381 Cholesky factorization by the @code{etree} command. This command
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
382 returns the elimination tree of the matrix and can be displayed
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
383 graphically by the command @code{treeplot(etree(A))} if @code{A} is
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
384 symmetric or @code{treeplot(etree(A+A'))} otherwise.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
385
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
386 @node Operators and Functions, , Information, Basics
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
387 @subsection Basic Operators and Functions on Sparse Matrices
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
388
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
389 @menu
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
390 * Functions:: Sparse Functions
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
391 * ReturnType:: The Return Types of Operators and Functions
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
392 * MathConsiderations:: Mathematical Considerations
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
393 @end menu
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
394
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
395 @node Functions, ReturnType, Operators and Functions, Operators and Functions
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
396 @subsubsection Sparse Functions
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
397
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
398 An important consideration in the use of the sparse functions of
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
399 Octave is that many of the internal functions of Octave, such as
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
400 @dfn{diag}, can not accept sparse matrices as an input. The sparse
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
401 implementation in Octave therefore uses the @dfn{dispatch}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
402 function to overload the normal Octave functions with equivalent
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
403 functions that work with sparse matrices. However, at any time the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
404 sparse matrix specific version of the function can be used by
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
405 explicitly calling its function name.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
406
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
407 The table below lists all of the sparse functions of Octave
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
408 together (with possible future extensions that are currently
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
409 unimplemented, listed last). Note that in this specific sparse forms
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
410 of the functions are typically the same as the general versions with a
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
411 @dfn{sp} prefix. In the table below, and the rest of this article
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
412 the specific sparse versions of the functions are used.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
413
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
414 @table @asis
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
415 @item Generate sparse matrices:
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
416 @dfn{spalloc}, @dfn{spdiags}, @dfn{speye}, @dfn{sprand},
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
417 @dfn{sprandn}, @dfn{sprandsym}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
418
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
419 @item Sparse matrix conversion:
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
420 @dfn{full}, @dfn{sparse}, @dfn{spconvert}, @dfn{spfind}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
421
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
422 @item Manipulate sparse matrices
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
423 @dfn{issparse}, @dfn{nnz}, @dfn{nonzeros}, @dfn{nzmax},
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
424 @dfn{spfun}, @dfn{spones}, @dfn{spy},
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
425
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
426 @item Graph Theory:
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
427 @dfn{etree}, @dfn{etreeplot}, @dfn{gplot},
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
428 @dfn{treeplot}, (treelayout)
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
429
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
430 @item Sparse matrix reordering:
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
431 @dfn{ccolamd}, @dfn{colamd}, @dfn{colperm},
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
432 @dfn{csymamd}, @dfn{dmperm}, @dfn{symamd}, @dfn{randperm}, (symrcm)
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
433
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
434 @item Linear algebra:
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
435 @dfn{matrix\_type}, @dfn{spchol}, @dfn{cpcholinv},
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
436 @dfn{spchol2inv}, @dfn{spdet}, @dfn{spinv}, @dfn{spkron},
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
437 @dfn{splchol}, @dfn{splu}, @dfn{spqr}, (condest, eigs, normest,
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
438 sprank, svds, spaugment)
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
439
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
440 @item Iterative techniques:
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
441 @dfn{luinc}, (bicg, bicgstab, cholinc, cgs, gmres, lsqr, minres,
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
442 pcg, pcr, qmr, symmlq)
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
443
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
444 @item Miscellaneous:
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
445 @dfn{spparms}, @dfn{symbfact}, @dfn{spstats},
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
446 @dfn{spprod}, @dfn{spcumsum}, @dfn{spsum},
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
447 @dfn{spsumsq}, @dfn{spmin}, @dfn{spmax}, @dfn{spatan2},
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
448 @dfn{spdiag}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
449 @end table
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
450
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
451 In addition all of the standard Octave mapper functions (ie. basic
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
452 math functions that take a single argument) such as @dfn{abs}, etc
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
453 can accept sparse matrices. The reader is referred to the documentation
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
454 supplied with these functions within Octave itself for further
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
455 details.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
456
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
457 @node ReturnType, MathConsiderations, Functions, Operators and Functions
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
458 @subsubsection The Return Types of Operators and Functions
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
459
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
460 The two basic reasons to use sparse matrices are to reduce the memory
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
461 usage and to not have to do calculations on zero elements. The two are
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
462 closely related in that the computation time on a sparse matrix operator
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
463 or function is roughly linear with the number of non-zero elements.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
464
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
465 Therefore, there is a certain density of non-zero elements of a matrix
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
466 where it no longer makes sense to store it as a sparse matrix, but rather
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
467 as a full matrix. For this reason operators and functions that have a
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
468 high probability of returning a full matrix will always return one. For
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
469 example adding a scalar constant to a sparse matrix will almost always
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
470 make it a full matrix, and so the example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
471
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
472 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
473 speye(3) + 0
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
474 @result{} 1 0 0
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
475 0 1 0
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
476 0 0 1
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
477 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
478
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
479 returns a full matrix as can be seen. Additionally all sparse functions
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
480 test the amount of memory occupied by the sparse matrix to see if the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
481 amount of storage used is larger than the amount used by the full
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
482 equivalent. Therefore @code{speye (2) * 1} will return a full matrix as
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
483 the memory used is smaller for the full version than the sparse version.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
484
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
485 As all of the mixed operators and functions between full and sparse
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
486 matrices exist, in general this does not cause any problems. However,
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
487 one area where it does cause a problem is where a sparse matrix is
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
488 promoted to a full matrix, where subsequent operations would resparsify
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
489 the matrix. Such cases are rare, but can be artificially created, for
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
490 example @code{(fliplr(speye(3)) + speye(3)) - speye(3)} gives a full
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
491 matrix when it should give a sparse one. In general, where such cases
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
492 occur, they impose only a small memory penalty.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
493
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
494 There is however one known case where this behavior of Octave's
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
495 sparse matrices will cause a problem. That is in the handling of the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
496 @dfn{diag} function. Whether @dfn{diag} returns a sparse or full matrix
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
497 depending on the type of its input arguments. So
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
498
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
499 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
500 a = diag (sparse([1,2,3]), -1);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
501 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
502
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
503 should return a sparse matrix. To ensure this actually happens, the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
504 @dfn{sparse} function, and other functions based on it like @dfn{speye},
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
505 always returns a sparse matrix, even if the memory used will be larger
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
506 than its full representation.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
507
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
508 @node MathConsiderations, , ReturnType, Operators and Functions
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
509 @subsubsection Mathematical Considerations
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
510
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
511 The attempt has been made to make sparse matrices behave in exactly the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
512 same manner as there full counterparts. However, there are certain differences
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
513 and especially differences with other products sparse implementations.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
514
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
515 Firstly, the "./" and ".^" operators must be used with care. Consider what
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
516 the examples
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
517
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
518 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
519 s = speye (4);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
520 a1 = s .^ 2;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
521 a2 = s .^ s;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
522 a3 = s .^ -2;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
523 a4 = s ./ 2;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
524 a5 = 2 ./ s;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
525 a6 = s ./ s;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
526 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
527
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
528 will give. The first example of @var{s} raised to the power of 2 causes
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
529 no problems. However @var{s} raised element-wise to itself involves a
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
530 a large number of terms @code{0 .^ 0} which is 1. There @code{@var{s} .^
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
531 @var{s}} is a full matrix.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
532
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
533 Likewise @code{@var{s} .^ -2} involves terms terms like @code{0 .^ -2} which
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
534 is infinity, and so @code{@var{s} .^ -2} is equally a full matrix.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
535
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
536 For the "./" operator @code{@var{s} ./ 2} has no problems, but
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
537 @code{2 ./ @var{s}} involves a large number of infinity terms as well
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
538 and is equally a full matrix. The case of @code{@var{s} ./ @var{s}}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
539 involves terms like @code{0 ./ 0} which is a @code{NaN} and so this
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
540 is equally a full matrix with the zero elements of @var{s} filled with
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
541 @code{NaN} values.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
542
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
543 The above behavior is consistent with full matrices, but is not
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
544 consistent with sparse implementations in other products.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
545
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
546 A particular problem of sparse matrices comes about due to the fact that
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
547 as the zeros are not stored, the sign-bit of these zeros is equally not
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
548 stored. In certain cases the sign-bit of zero is important. For example
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
549
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
550 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
551 a = 0 ./ [-1, 1; 1, -1];
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
552 b = 1 ./ a
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
553 @result{} -Inf Inf
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
554 Inf -Inf
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
555 c = 1 ./ sparse (a)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
556 @result{} Inf Inf
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
557 Inf Inf
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
558 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
559
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
560 To correct this behavior would mean that zero elements with a negative
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
561 sign-bit would need to be stored in the matrix to ensure that their
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
562 sign-bit was respected. This is not done at this time, for reasons of
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
563 efficient, and so the user is warned that calculations where the sign-bit
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
564 of zero is important must not be done using sparse matrices.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
565
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
566 In general any function or operator used on a sparse matrix will
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
567 result in a sparse matrix with the same or a larger number of non-zero
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
568 elements than the original matrix. This is particularly true for the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
569 important case of sparse matrix factorizations. The usual way to
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
570 address this is to reorder the matrix, such that its factorization is
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
571 sparser than the factorization of the original matrix. That is the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
572 factorization of @code{L * U = P * S * Q} has sparser terms @code{L}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
573 and @code{U} than the equivalent factorization @code{L * U = S}.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
574
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
575 Several functions are available to reorder depending on the type of the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
576 matrix to be factorized. If the matrix is symmetric positive-definite,
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
577 then @dfn{symamd} or @dfn{csymamd} should be used. Otherwise
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
578 @dfn{colamd} or @dfn{ccolamd} should be used. For completeness
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
579 the reordering functions @dfn{colperm} and @dfn{randperm} are
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
580 also available.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
581
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
582 @xref{fig:simplematrix}, for an example of the structure of a simple
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
583 positive definite matrix.
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
584
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
585 @float Figure,fig:simplematrix
5704
3d8d8ce93c2c [project @ 2006-03-21 21:53:56 by jwe]
jwe
parents: 5681
diff changeset
586 @ifset INCLUDE_FIGURES
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
587 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
588 @example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
589 @include spmatrix.txt
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
590 @end example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
591 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
592 @ifset htmltex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
593 @image{spmatrix,8cm}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
594 @end ifset
5704
3d8d8ce93c2c [project @ 2006-03-21 21:53:56 by jwe]
jwe
parents: 5681
diff changeset
595 @end ifset
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
596 @caption{Structure of simple sparse matrix.}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
597 @end float
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
598
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
599 The standard Cholesky factorization of this matrix, can be
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
600 obtained by the same command that would be used for a full
5652
f37b562ec93c [project @ 2006-03-09 15:12:20 by dbateman]
dbateman
parents: 5648
diff changeset
601 matrix. This can be visualized with the command
f37b562ec93c [project @ 2006-03-09 15:12:20 by dbateman]
dbateman
parents: 5648
diff changeset
602 @code{r = chol(A); spy(r);}.
f37b562ec93c [project @ 2006-03-09 15:12:20 by dbateman]
dbateman
parents: 5648
diff changeset
603 @ifset HAVE_CHOLMOD
f37b562ec93c [project @ 2006-03-09 15:12:20 by dbateman]
dbateman
parents: 5648
diff changeset
604 @ifset HAVE_COLAMD
f37b562ec93c [project @ 2006-03-09 15:12:20 by dbateman]
dbateman
parents: 5648
diff changeset
605 @xref{fig:simplechol}.
f37b562ec93c [project @ 2006-03-09 15:12:20 by dbateman]
dbateman
parents: 5648
diff changeset
606 @end ifset
f37b562ec93c [project @ 2006-03-09 15:12:20 by dbateman]
dbateman
parents: 5648
diff changeset
607 @end ifset
f37b562ec93c [project @ 2006-03-09 15:12:20 by dbateman]
dbateman
parents: 5648
diff changeset
608 The original matrix had
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
609 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
610 @ifnothtml
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
611 43
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
612 @end ifnothtml
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
613 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
614 @ifset htmltex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
615 598
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
616 @end ifset
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
617 non-zero terms, while this Cholesky factorization has
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
618 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
619 @ifnothtml
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
620 71,
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
621 @end ifnothtml
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
622 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
623 @ifset htmltex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
624 10200,
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
625 @end ifset
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
626 with only half of the symmetric matrix being stored. This
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
627 is a significant level of fill in, and although not an issue
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
628 for such a small test case, can represents a large overhead
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
629 in working with other sparse matrices.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
630
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
631 The appropriate sparsity preserving permutation of the original
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
632 matrix is given by @dfn{symamd} and the factorization using this
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
633 reordering can be visualized using the command @code{q = symamd(A);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
634 r = chol(A(q,q)); spy(r)}. This gives
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
635 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
636 @ifnothtml
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
637 29
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
638 @end ifnothtml
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
639 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
640 @ifset htmltex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
641 399
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
642 @end ifset
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
643 non-zero terms which is a significant improvement.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
644
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
645 The Cholesky factorization itself can be used to determine the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
646 appropriate sparsity preserving reordering of the matrix during the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
647 factorization, In that case this might be obtained with three return
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
648 arguments as r@code{[r, p, q] = chol(A); spy(r)}.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
649
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
650 @ifset HAVE_CHOLMOD
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
651 @ifset HAVE_COLAMD
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
652 @float Figure,fig:simplechol
5704
3d8d8ce93c2c [project @ 2006-03-21 21:53:56 by jwe]
jwe
parents: 5681
diff changeset
653 @ifset INCLUDE_FIGURES
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
654 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
655 @example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
656 @include spchol.txt
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
657 @end example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
658 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
659 @ifset htmltex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
660 @image{spchol,8cm}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
661 @end ifset
5704
3d8d8ce93c2c [project @ 2006-03-21 21:53:56 by jwe]
jwe
parents: 5681
diff changeset
662 @end ifset
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
663 @caption{Structure of the un-permuted Cholesky factorization of the above matrix.}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
664 @end float
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
665
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
666 @float Figure,fig:simplecholperm
5704
3d8d8ce93c2c [project @ 2006-03-21 21:53:56 by jwe]
jwe
parents: 5681
diff changeset
667 @ifset INCLUDE_FIGURES
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
668 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
669 @example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
670 @include spcholperm.txt
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
671 @end example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
672 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
673 @ifset htmltex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
674 @image{spcholperm,8cm}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
675 @end ifset
5704
3d8d8ce93c2c [project @ 2006-03-21 21:53:56 by jwe]
jwe
parents: 5681
diff changeset
676 @end ifset
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
677 @caption{Structure of the permuted Cholesky factorization of the above matrix.}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
678 @end float
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
679 @end ifset
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
680 @end ifset
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
681
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
682 In the case of an asymmetric matrix, the appropriate sparsity
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
683 preserving permutation is @dfn{colamd} and the factorization using
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
684 this reordering can be visualized using the command @code{q =
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
685 colamd(A); [l, u, p] = lu(A(:,q)); spy(l+u)}.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
686
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
687 Finally, Octave implicitly reorders the matrix when using the div (/)
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
688 and ldiv (\) operators, and so no the user does not need to explicitly
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
689 reorder the matrix to maximize performance.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
690
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
691 @node Sparse Linear Algebra, Iterative Techniques, Basics, Sparse Matrices
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
692 @section Linear Algebra on Sparse Matrices
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
693
5324
d2d11284528e [project @ 2005-04-29 14:56:45 by jwe]
jwe
parents: 5322
diff changeset
694 Octave includes a poly-morphic solver for sparse matrices, where
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
695 the exact solver used to factorize the matrix, depends on the properties
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
696 of the sparse matrix itself. Generally, the cost of determining the matrix type
5322
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
697 is small relative to the cost of factorizing the matrix itself, but in any
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
698 case the matrix type is cached once it is calculated, so that it is not
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
699 re-determined each time it is used in a linear equation.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
700
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
701 The selection tree for how the linear equation is solve is
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
702
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
703 @enumerate 1
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
704 @item If the matrix is diagonal, solve directly and goto 8
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
705
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
706 @item If the matrix is a permuted diagonal, solve directly taking into
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
707 account the permutations. Goto 8
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
708
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
709 @item If the matrix is square, banded and if the band density is less
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
710 than that given by @code{spparms ("bandden")} continue, else goto 4.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
711
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
712 @enumerate a
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
713 @item If the matrix is tridiagonal and the right-hand side is not sparse
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
714 continue, else goto 3b.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
715
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
716 @enumerate
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
717 @item If the matrix is hermitian, with a positive real diagonal, attempt
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
718 Cholesky factorization using @sc{Lapack} xPTSV.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
719
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
720 @item If the above failed or the matrix is not hermitian with a positive
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
721 real diagonal use Gaussian elimination with pivoting using
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
722 @sc{Lapack} xGTSV, and goto 8.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
723 @end enumerate
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
724
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
725 @item If the matrix is hermitian with a positive real diagonal, attempt
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
726 Cholesky factorization using @sc{Lapack} xPBTRF.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
727
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
728 @item if the above failed or the matrix is not hermitian with a positive
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
729 real diagonal use Gaussian elimination with pivoting using
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
730 @sc{Lapack} xGBTRF, and goto 8.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
731 @end enumerate
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
732
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
733 @item If the matrix is upper or lower triangular perform a sparse forward
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
734 or backward substitution, and goto 8
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
735
5322
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
736 @item If the matrix is a upper triangular matrix with column permutations
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
737 or lower triangular matrix with row permutations, perform a sparse forward
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
738 or backward substitution, and goto 8
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
739
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
740 @item If the matrix is square, hermitian with a real positive diagonal, attempt
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
741 sparse Cholesky factorization using CHOLMOD.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
742
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
743 @item If the sparse Cholesky factorization failed or the matrix is not
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
744 hermitian with a real positive diagonal, and the matrix is square, factorize
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
745 using UMFPACK.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
746
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
747 @item If the matrix is not square, or any of the previous solvers flags
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
748 a singular or near singular matrix, find a minimum norm solution using
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
749 CXSPARSE@footnote{CHOLMOD, UMFPACK and CXSPARSE are written by Tim Davis
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
750 and are available at http://www.cise.ufl.edu/research/sparse/}.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
751 @end enumerate
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
752
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
753 The band density is defined as the number of non-zero values in the matrix
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
754 divided by the number of non-zero values in the matrix. The banded matrix
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
755 solvers can be entirely disabled by using @dfn{spparms} to set @code{bandden}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
756 to 1 (i.e. @code{spparms ("bandden", 1)}).
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
757
5681
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
758 The QR solver factorizes the problem with a Dulmage-Mendhelsohn, to
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
759 seperate the problem into blocks that can be treated as over-determined,
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
760 multiple well determined blocks, and a final over-determined block. For
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
761 matrices with blocks of strongly connectted nodes this is a big win as
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
762 LU decomposition can be used for many blocks. It also significantly
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
763 improves the chance of finding a solution to over-determined problems
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
764 rather than just returning a vector of @dfn{NaN}'s.
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
765
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
766 All of the solvers above, can calculate an estimate of the condition
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
767 number. This can be used to detect numerical stability problems in the
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
768 solution and force a minimum norm solution to be used. However, for
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
769 narrow banded, triangular or diagonal matrices, the cost of
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
770 calculating the condition number is significant, and can in fact
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
771 exceed the cost of factoring the matrix. Therefore the condition
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
772 number is not calculated in these case, and octave relies on simplier
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
773 techniques to detect sinular matrices or the underlying LAPACK code in
233d98d95659 [project @ 2006-03-16 17:48:55 by dbateman]
dbateman
parents: 5652
diff changeset
774 the case of banded matrices.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
775
5322
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
776 The user can force the type of the matrix with the @code{matrix_type}
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
777 function. This overcomes the cost of discovering the type of the matrix.
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
778 However, it should be noted incorrectly identifying the type of the matrix
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
779 will lead to unpredictable results, and so @code{matrix_type} should be
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
780 used with care.
5322
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
781
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
782 @node Iterative Techniques, Real Life Example, Sparse Linear Algebra, Sparse Matrices
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
783 @section Iterative Techniques applied to sparse matrices
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
784
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
785 WRITE ME OR DELETE ME IF THERE ARE NO ITERATIVE SOLVERS IN OCTAVE 3.0
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
786
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
787 @node Real Life Example, Oct-Files, Iterative Techniques, Sparse Matrices
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
788 @section Real Life Example of the use of Sparse Matrices
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
789
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
790 A common application for sparse matrices is in the solution of Finite
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
791 Element Models. Finite element models allow numerical solution of
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
792 partial differential equations that do not have closed form solutions,
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
793 typically because of the complex shape of the domain.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
794
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
795 In order to motivate this application, we consider the boundary value
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
796 Laplace equation. This system can model scalar potential fields, such
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
797 as heat or electrical potential. Given a medium
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
798 @iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
799 @tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
800 $\Omega$
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
801 @end tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
802 @end iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
803 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
804 Omega
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
805 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
806 with boundary
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
807 @iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
808 @tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
809 $\partial\Omega$
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
810 @end tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
811 @end iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
812 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
813 dOmega
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
814 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
815 . At all points on the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
816 @iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
817 @tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
818 $\partial\Omega$
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
819 @end tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
820 @end iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
821 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
822 dOmega
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
823 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
824 the boundary conditions are known, and we wish to calculate the potential in
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
825 @iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
826 @tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
827 $\Omega$
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
828 @end tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
829 @end iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
830 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
831 Omega
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
832 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
833 . Boundary conditions may specify the potential (Dirichlet
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
834 boundary condition), its normal derivative across the boundary
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
835 (Neumann boundary condition), or a weighted sum of the potential and
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
836 its derivative (Cauchy boundary condition).
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
837
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
838 In a thermal model, we want to calculate the temperature in
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
839 @iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
840 @tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
841 $\Omega$
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
842 @end tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
843 @end iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
844 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
845 Omega
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
846 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
847 and know the boundary temperature (Dirichlet condition)
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
848 or heat flux (from which we can calculate the Neumann condition
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
849 by dividing by the thermal conductivity at the boundary). Similarly,
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
850 in an electrical model, we want to calculate the voltage in
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
851 @iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
852 @tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
853 $\Omega$
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
854 @end tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
855 @end iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
856 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
857 Omega
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
858 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
859 and know the boundary voltage (Dirichlet) or current
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
860 (Neumann condition after diving by the electrical conductivity).
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
861 In an electrical model, it is common for much of the boundary
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
862 to be electrically isolated; this is a Neumann boundary condition
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
863 with the current equal to zero.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
864
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
865 The simplest finite element models will divide
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
866 @iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
867 @tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
868 $\Omega$
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
869 @end tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
870 @end iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
871 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
872 Omega
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
873 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
874 into simplexes (triangles in 2D, pyramids in 3D).
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
875 @ifset htmltex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
876 We take as an 3D example a cylindrical liquid filled tank with a small
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
877 non-conductive ball from the EIDORS project@footnote{EIDORS - Electrical
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
878 Impedance Tomography and Diffuse optical Tomography Reconstruction Software
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
879 @url{http://eidors3d.sourceforge.net}}. This is model is designed to reflect
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
880 an application of electrical impedance tomography, where current patterns
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
881 are applied to such a tank in order to image the internal conductivity
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
882 distribution. In order to describe the FEM geometry, we have a matrix of
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
883 vertices @code{nodes} and simplices @code{elems}.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
884 @end ifset
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
885
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
886 The following example creates a simple rectangular 2D electrically
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
887 conductive medium with 10 V and 20 V imposed on opposite sides
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
888 (Dirichlet boundary conditions). All other edges are electrically
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
889 isolated.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
890
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
891 @example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
892 node_y= [1;1.2;1.5;1.8;2]*ones(1,11);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
893 node_x= ones(5,1)*[1,1.05,1.1,1.2, ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
894 1.3,1.5,1.7,1.8,1.9,1.95,2];
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
895 nodes= [node_x(:), node_y(:)];
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
896
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
897 [h,w]= size(node_x);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
898 elems= [];
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
899 for idx= 1:w-1
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
900 widx= (idx-1)*h;
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
901 elems= [elems; ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
902 widx+[(1:h-1);(2:h);h+(1:h-1)]'; ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
903 widx+[(2:h);h+(2:h);h+(1:h-1)]' ];
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
904 endfor
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
905
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
906 E= size(elems,1); # No. of simplices
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
907 N= size(nodes,1); # No. of vertices
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
908 D= size(elems,2); # dimensions+1
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
909 @end example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
910
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
911 This creates a N-by-2 matrix @code{nodes} and a E-by-3 matrix
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
912 @code{elems} with values, which define finite element triangles:
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
913
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
914 @example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
915 nodes(1:7,:)'
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
916 1.00 1.00 1.00 1.00 1.00 1.05 1.05 ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
917 1.00 1.20 1.50 1.80 2.00 1.00 1.20 ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
918
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
919 elems(1:7,:)'
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
920 1 2 3 4 2 3 4 ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
921 2 3 4 5 7 8 9 ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
922 6 7 8 9 6 7 8 ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
923 @end example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
924
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
925 Using a first order FEM, we approximate the electrical conductivity
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
926 distribution in
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
927 @iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
928 @tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
929 $\Omega$
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
930 @end tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
931 @end iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
932 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
933 Omega
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
934 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
935 as constant on each simplex (represented by the vector @code{conductivity}).
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
936 Based on the finite element geometry, we first calculate a system (or
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
937 stiffness) matrix for each simplex (represented as 3-by-3 elements on the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
938 diagonal of the element-wise system matrix @code{SE}. Based on @code{SE}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
939 and a N-by-DE connectivity matrix @code{C}, representing the connections
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
940 between simplices and vectices, the global connectivity matrix @code{S} is
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
941 calculated.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
942
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
943 @example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
944 # Element conductivity
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
945 conductivity= [1*ones(1,16), ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
946 2*ones(1,48), 1*ones(1,16)];
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
947
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
948 # Connectivity matrix
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
949 C = sparse ((1:D*E), reshape (elems', ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
950 D*E, 1), 1, D*E, N);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
951
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
952 # Calculate system matrix
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
953 Siidx = floor ([0:D*E-1]'/D) * D * ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
954 ones(1,D) + ones(D*E,1)*(1:D) ;
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
955 Sjidx = [1:D*E]'*ones(1,D);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
956 Sdata = zeros(D*E,D);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
957 dfact = factorial(D-1);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
958 for j=1:E
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
959 a = inv([ones(D,1), ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
960 nodes(elems(j,:), :)]);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
961 const = conductivity(j) * 2 / ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
962 dfact / abs(det(a));
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
963 Sdata(D*(j-1)+(1:D),:) = const * ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
964 a(2:D,:)' * a(2:D,:);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
965 endfor
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
966 # Element-wise system matrix
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
967 SE= sparse(Siidx,Sjidx,Sdata);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
968 # Global system matrix
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
969 S= C'* SE *C;
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
970 @end example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
971
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
972 The system matrix acts like the conductivity
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
973 @iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
974 @tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
975 $S$
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
976 @end tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
977 @end iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
978 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
979 @code{S}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
980 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
981 in Ohm's law
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
982 @iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
983 @tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
984 $SV = I$.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
985 @end tex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
986 @end iftex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
987 @ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
988 @code{S * V = I}.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
989 @end ifinfo
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
990 Based on the Dirichlet and Neumann boundary conditions, we are able to
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
991 solve for the voltages at each vertex @code{V}.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
992
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
993 @example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
994 # Dirichlet boundary conditions
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
995 D_nodes=[1:5, 51:55];
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
996 D_value=[10*ones(1,5), 20*ones(1,5)];
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
997
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
998 V= zeros(N,1);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
999 V(D_nodes) = D_value;
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1000 idx = 1:N; # vertices without Dirichlet
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1001 # boundary condns
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1002 idx(D_nodes) = [];
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1003
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1004 # Neumann boundary conditions. Note that
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1005 # N_value must be normalized by the
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1006 # boundary length and element conductivity
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1007 N_nodes=[];
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1008 N_value=[];
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1009
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1010 Q = zeros(N,1);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1011 Q(N_nodes) = N_value;
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1012
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1013 V(idx) = S(idx,idx) \ ( Q(idx) - ...
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1014 S(idx,D_nodes) * V(D_nodes));
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1015 @end example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1016
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1017 Finally, in order to display the solution, we show each solved voltage
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1018 value in the z-axis for each simplex vertex.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1019 @ifset htmltex
5652
f37b562ec93c [project @ 2006-03-09 15:12:20 by dbateman]
dbateman
parents: 5648
diff changeset
1020 @ifset HAVE_CHOLMOD
f37b562ec93c [project @ 2006-03-09 15:12:20 by dbateman]
dbateman
parents: 5648
diff changeset
1021 @ifset HAVE_UMFPACK
f37b562ec93c [project @ 2006-03-09 15:12:20 by dbateman]
dbateman
parents: 5648
diff changeset
1022 @ifset HAVE_COLAMD
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1023 @xref{fig:femmodel}.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1024 @end ifset
5652
f37b562ec93c [project @ 2006-03-09 15:12:20 by dbateman]
dbateman
parents: 5648
diff changeset
1025 @end ifset
f37b562ec93c [project @ 2006-03-09 15:12:20 by dbateman]
dbateman
parents: 5648
diff changeset
1026 @end ifset
f37b562ec93c [project @ 2006-03-09 15:12:20 by dbateman]
dbateman
parents: 5648
diff changeset
1027 @end ifset
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1028
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1029 @example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1030 elemx = elems(:,[1,2,3,1])';
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1031 xelems = reshape (nodes(elemx, 1), 4, E);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1032 yelems = reshape (nodes(elemx, 2), 4, E);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1033 velems = reshape (V(elemx), 4, E);
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1034 plot3 (xelems,yelems,velems,'k');
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1035 print ('grid.eps');
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1036 @end example
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1037
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1038
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1039 @ifset htmltex
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1040 @ifset HAVE_CHOLMOD
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1041 @ifset HAVE_UMFPACK
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1042 @ifset HAVE_COLAMD
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1043 @float Figure,fig:femmodel
5704
3d8d8ce93c2c [project @ 2006-03-21 21:53:56 by jwe]
jwe
parents: 5681
diff changeset
1044 @ifset INCLUDE_FIGURES
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1045 @image{grid,8cm}
5704
3d8d8ce93c2c [project @ 2006-03-21 21:53:56 by jwe]
jwe
parents: 5681
diff changeset
1046 @end ifset
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1047 @caption{Example finite element model the showing triangular elements.
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1048 The height of each vertex corresponds to the solution value.}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1049 @end float
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1050 @end ifset
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1051 @end ifset
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1052 @end ifset
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1053 @end ifset
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1054
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1055 @node Oct-Files, Function Reference, Real Life Example, Sparse Matrices
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1056 @section Using Sparse Matrices in Oct-files
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1057
5324
d2d11284528e [project @ 2005-04-29 14:56:45 by jwe]
jwe
parents: 5322
diff changeset
1058 An oct-file is a means of writing an Octave function in a compilable
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1059 language like C++, rather than as a script file. This results in a
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1060 significant acceleration in the code. It is not the purpose of this
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1061 section to discuss how to write an oct-file, or discuss what they
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1062 are. There are already two @footnote{Paul Thomas "Dal Segno al Coda
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1063 - The octave dynamically linked function cookbook",
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1064 @url{http://perso.wanadoo.fr/prthomas/intro.html}, and Cristophe Spiel
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1065 "Del Coda Al Fine - Pushing Octave's Limits",
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1066 @url{http://octave.sourceforge.net/coda/coda.pdf}} very good
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1067 references on oct-files themselves. Users who are not familiar with
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1068 oct-files are urged to read these references to fully understand this
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1069 chapter. The examples discussed here assume that the oct-file is written
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1070 entirely in C++.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1071
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1072 There are three classes of sparse objects that are of interest to the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1073 user.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1074
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1075 @table @asis
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1076 @item SparseMatrix
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1077 A double precision sparse matrix class
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1078 @item SparseComplexMatrix
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1079 A complex sparse matrix class
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1080 @item SparseBoolMatrix
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1081 A boolean sparse matrix class
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1082 @end table
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1083
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1084 All of these classes inherit from the @code{Sparse<T>} template class,
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1085 and so all have similar capabilities and usage. The @code{Sparse<T>}
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1086 class was based on Octave @code{Array<T>} class, and so users familiar
5324
d2d11284528e [project @ 2005-04-29 14:56:45 by jwe]
jwe
parents: 5322
diff changeset
1087 with Octave's Array classes will be comfortable with the use of
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1088 the sparse classes.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1089
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1090 The sparse classes will not be entirely described in this section, due
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1091 to their similar with the existing Array classes. However, there are a
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1092 few differences due the different nature of sparse objects, and these
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1093 will be described. Firstly, although it is fundamentally possible to
5324
d2d11284528e [project @ 2005-04-29 14:56:45 by jwe]
jwe
parents: 5322
diff changeset
1094 have N-dimensional sparse objects, the Octave sparse classes do
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1095 not allow them at this time. So all operations of the sparse classes
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1096 must be 2-dimensional. This means that in fact @code{SparseMatrix} is
5324
d2d11284528e [project @ 2005-04-29 14:56:45 by jwe]
jwe
parents: 5322
diff changeset
1097 similar to Octave's @code{Matrix} class rather than its
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1098 @code{NDArray} class.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1099
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1100 @menu
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1101 * OctDifferences:: The Differences between the Array and Sparse Classes
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1102 * OctCreation:: Creating Spare Matrices in Oct-Files
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1103 * OctUse:: Using Sparse Matrices in Oct-Files
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1104 @end menu
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1105
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1106 @node OctDifferences, OctCreation, Oct-Files, Oct-Files
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1107 @subsection The Differences between the Array and Sparse Classes
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1108
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1109 The number of elements in a sparse matrix is considered to be the number
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1110 of non-zero elements rather than the product of the dimensions. Therefore
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1111
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1112 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1113 SparseMatrix sm;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1114 @dots{}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1115 int nel = sm.nelem ();
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1116 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1117
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1118 returns the number of non-zero elements. If the user really requires the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1119 number of elements in the matrix, including the non-zero elements, they
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1120 should use @code{numel} rather than @code{nelem}. Note that for very
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1121 large matrices, where the product of the two dimensions is large that
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1122 the representation of the an unsigned int, then @code{numel} can overflow.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1123 An example is @code{speye(1e6)} which will create a matrix with a million
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1124 rows and columns, but only a million non-zero elements. Therefore the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1125 number of rows by the number of columns in this case is more than two
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1126 hundred times the maximum value that can be represented by an unsigned int.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1127 The use of @code{numel} should therefore be avoided useless it is known
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1128 it won't overflow.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1129
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1130 Extreme care must be take with the elem method and the "()" operator,
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1131 which perform basically the same function. The reason is that if a
5324
d2d11284528e [project @ 2005-04-29 14:56:45 by jwe]
jwe
parents: 5322
diff changeset
1132 sparse object is non-const, then Octave will assume that a
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1133 request for a zero element in a sparse matrix is in fact a request
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1134 to create this element so it can be filled. Therefore a piece of
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1135 code like
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1136
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1137 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1138 SparseMatrix sm;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1139 @dots{}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1140 for (int j = 0; j < nc; j++)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1141 for (int i = 0; i < nr; i++)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1142 std::cerr << " (" << i << "," << j << "): " << sm(i,j)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1143 << std::endl;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1144 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1145
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1146 is a great way of turning the sparse matrix into a dense one, and a
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1147 very slow way at that since it reallocates the sparse object at each
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1148 zero element in the matrix.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1149
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1150 An easy way of preventing the above from happening is to create a temporary
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1151 constant version of the sparse matrix. Note that only the container for
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1152 the sparse matrix will be copied, while the actual representation of the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1153 data will be shared between the two versions of the sparse matrix. So this
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1154 is not a costly operation. For example, the above would become
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1155
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1156 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1157 SparseMatrix sm;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1158 @dots{}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1159 const SparseMatrix tmp (sm);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1160 for (int j = 0; j < nc; j++)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1161 for (int i = 0; i < nr; i++)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1162 std::cerr << " (" << i << "," << j << "): " << tmp(i,j)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1163 << std::endl;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1164 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1165
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1166 Finally, as the sparse types aren't just represented as a contiguous
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1167 block of memory, the @code{fortran_vec} method of the @code{Array<T>}
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1168 is not available. It is however replaced by three separate methods
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1169 @code{ridx}, @code{cidx} and @code{data}, that access the raw compressed
5324
d2d11284528e [project @ 2005-04-29 14:56:45 by jwe]
jwe
parents: 5322
diff changeset
1170 column format that the Octave sparse matrices are stored in.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1171 Additionally, these methods can be used in a manner similar to @code{elem},
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1172 to allow the matrix to be accessed or filled. However, in that case it is
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1173 up to the user to respect the sparse matrix compressed column format
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1174 discussed previous.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1175
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1176 @node OctCreation, OctUse, OctDifferences, Oct-Files
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1177 @subsection Creating Spare Matrices in Oct-Files
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1178
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1179 The user has several alternatives in how to create a sparse matrix.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1180 They can first create the data as three vectors representing the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1181 row and column indexes and the data, and from those create the matrix.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1182 Or alternatively, they can create a sparse matrix with the appropriate
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1183 amount of space and then fill in the values. Both techniques have their
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1184 advantages and disadvantages.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1185
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1186 An example of how to create a small sparse matrix with the first technique
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1187 might be seen the example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1188
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1189 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1190 int nz = 4, nr = 3, nc = 4;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1191 ColumnVector ridx (nz);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1192 ColumnVector cidx (nz);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1193 ColumnVector data (nz);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1194
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1195 ridx(0) = 0; ridx(1) = 0; ridx(2) = 1; ridx(3) = 2;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1196 cidx(0) = 0; cidx(1) = 1; cidx(2) = 3; cidx(3) = 3;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1197 data(0) = 1; data(1) = 2; data(2) = 3; data(3) = 4;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1198
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1199 SparseMatrix sm (data, ridx, cidx, nr, nc);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1200 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1201
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1202 which creates the matrix given in section @ref{Storage}. Note that
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1203 the compressed matrix format is not used at the time of the creation
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1204 of the matrix itself, however it is used internally.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1205
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1206 As previously mentioned, the values of the sparse matrix are stored
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1207 in increasing column-major ordering. Although the data passed by the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1208 user does not need to respect this requirement, the pre-sorting the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1209 data significantly speeds up the creation of the sparse matrix.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1210
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1211 The disadvantage of this technique of creating a sparse matrix is
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1212 that there is a brief time where two copies of the data exists. Therefore
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1213 for extremely memory constrained problems this might not be the right
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1214 technique to create the sparse matrix.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1215
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1216 The alternative is to first create the sparse matrix with the desired
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1217 number of non-zero elements and then later fill those elements in. The
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1218 easiest way to do this is
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1219
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1220 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1221 int nz = 4, nr = 3, nc = 4;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1222 SparseMatrix sm (nr, nc, nz);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1223 sm(0,0) = 1; sm(0,1) = 2; sm(1,3) = 3; sm(2,3) = 4;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1224 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1225
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1226 That creates the same matrix as previously. Again, although it is not
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1227 strictly necessary, it is significantly faster if the sparse matrix is
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1228 created in this manner that the elements are added in column-major
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1229 ordering. The reason for this is that if the elements are inserted
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1230 at the end of the current list of known elements then no element
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1231 in the matrix needs to be moved to allow the new element to be
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1232 inserted. Only the column indexes need to be updated.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1233
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1234 There are a few further points to note about this technique of creating
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1235 a sparse matrix. Firstly, it is not illegal to create a sparse matrix
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1236 with fewer elements than are actually inserted in the matrix. Therefore
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1237
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1238 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1239 int nz = 4, nr = 3, nc = 4;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1240 SparseMatrix sm (nr, nc, 0);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1241 sm(0,0) = 1; sm(0,1) = 2; sm(1,3) = 3; sm(2,3) = 4;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1242 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1243
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1244 is perfectly legal. However it is a very bad idea. The reason is that
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1245 as each new element is added to the sparse matrix the space allocated
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1246 to it is increased by reallocating the memory. This is an expensive
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1247 operation, that will significantly slow this means of creating a sparse
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1248 matrix. Furthermore, it is not illegal to create a sparse matrix with
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1249 too much storage, so having @var{nz} above equaling 6 is also legal.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1250 The disadvantage is that the matrix occupies more memory than strictly
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1251 needed.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1252
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1253 It is not always easy to known the number of non-zero elements prior
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1254 to filling a matrix. For this reason the additional storage for the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1255 sparse matrix can be removed after its creation with the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1256 @dfn{maybe_compress} function. Furthermore, the maybe_compress can
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1257 deallocate the unused storage, but it can equally remove zero elements
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1258 from the matrix. The removal of zero elements from the matrix is
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1259 controlled by setting the argument of the @dfn{maybe_compress} function
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1260 to be 'true'. However, the cost of removing the zeros is high because it
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1261 implies resorting the elements. Therefore, if possible it is better
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1262 is the user doesn't add the zeros in the first place. An example of
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1263 the use of @dfn{maybe_compress} is
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1264
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1265 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1266 int nz = 6, nr = 3, nc = 4;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1267 SparseMatrix sm1 (nr, nc, nz);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1268 sm1(0,0) = 1; sm1(0,1) = 2; sm1(1,3) = 3; sm1(2,3) = 4;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1269 sm1.maybe_compress (); // No zero elements were added
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1270
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1271 SparseMatrix sm2 (nr, nc, nz);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1272 sm2(0,0) = 1; sm2(0,1) = 2; sm(0,2) = 0; sm(1,2) = 0;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1273 sm1(1,3) = 3; sm1(2,3) = 4;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1274 sm2.maybe_compress (true); // Zero elements were added
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1275 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1276
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1277 The use of the @dfn{maybe_compress} function should be avoided if
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1278 possible, as it will slow the creation of the matrices.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1279
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1280 A third means of creating a sparse matrix is to work directly with
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1281 the data in compressed row format. An example of this technique might
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1282 be
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1283
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1284 @c Note the @verbatim environment is a relatively new addition to texinfo.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1285 @c Therefore use the @example environment and replace @, with @@,
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1286 @c { with @{, etc
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1287
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1288 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1289 octave_value arg;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1290
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1291 @dots{}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1292
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1293 int nz = 6, nr = 3, nc = 4; // Assume we know the max no nz
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1294 SparseMatrix sm (nr, nc, nz);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1295 Matrix m = arg.matrix_value ();
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1296
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1297 int ii = 0;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1298 sm.cidx (0) = 0;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1299 for (int j = 1; j < nc; j++)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1300 @{
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1301 for (int i = 0; i < nr; i++)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1302 @{
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1303 double tmp = foo (m(i,j));
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1304 if (tmp != 0.)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1305 @{
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1306 sm.data(ii) = tmp;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1307 sm.ridx(ii) = i;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1308 ii++;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1309 @}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1310 @}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1311 sm.cidx(j+1) = ii;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1312 @}
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1313 sm.maybe_compress (); // If don't know a-priori the final no of nz.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1314 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1315
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1316 which is probably the most efficient means of creating the sparse matrix.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1317
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1318 Finally, it might sometimes arise that the amount of storage initially
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1319 created is insufficient to completely store the sparse matrix. Therefore,
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1320 the method @code{change_capacity} exists to reallocate the sparse memory.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1321 The above example would then be modified as
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1322
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1323 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1324 octave_value arg;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1325
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1326 @dots{}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1327
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1328 int nz = 6, nr = 3, nc = 4; // Assume we know the max no nz
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1329 SparseMatrix sm (nr, nc, nz);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1330 Matrix m = arg.matrix_value ();
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1331
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1332 int ii = 0;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1333 sm.cidx (0) = 0;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1334 for (int j = 1; j < nc; j++)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1335 @{
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1336 for (int i = 0; i < nr; i++)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1337 @{
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1338 double tmp = foo (m(i,j));
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1339 if (tmp != 0.)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1340 @{
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1341 if (ii == nz)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1342 @{
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1343 nz += 2; // Add 2 more elements
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1344 sm.change_capacity (nz);
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1345 @}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1346 sm.data(ii) = tmp;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1347 sm.ridx(ii) = i;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1348 ii++;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1349 @}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1350 @}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1351 sm.cidx(j+1) = ii;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1352 @}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1353 sm.maybe_mutate (); // If don't know a-priori the final no of nz.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1354 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1355
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1356 Note that both increasing and decreasing the number of non-zero elements in
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1357 a sparse matrix is expensive, as it involves memory reallocation. Also as
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1358 parts of the matrix, though not its entirety, exist as the old and new copy
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1359 at the same time, additional memory is needed. Therefore if possible this
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1360 should be avoided.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1361
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1362 @node OctUse, , OctCreation, Oct-Files
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1363 @subsection Using Sparse Matrices in Oct-Files
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1364
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1365 Most of the same operators and functions on sparse matrices that are
5324
d2d11284528e [project @ 2005-04-29 14:56:45 by jwe]
jwe
parents: 5322
diff changeset
1366 available from the Octave are equally available with oct-files.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1367 The basic means of extracting a sparse matrix from an @code{octave_value}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1368 and returning them as an @code{octave_value}, can be seen in the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1369 following example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1370
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1371 @example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1372 octave_value_list retval;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1373
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1374 SparseMatrix sm = args(0).sparse_matrix_value ();
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1375 SparseComplexMatrix scm = args(1).sparse_complex_matrix_value ();
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1376 SparseBoolMatrix sbm = args(2).sparse_bool_matrix_value ();
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1377
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1378 @dots{}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1379
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1380 retval(2) = sbm;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1381 retval(1) = scm;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1382 retval(0) = sm;
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1383 @end example
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1384
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1385 The conversion to an octave-value is handled by the sparse
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1386 @code{octave_value} constructors, and so no special care is needed.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1387
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1388 @node Function Reference, , Oct-Files, Sparse Matrices
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1389 @section Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1390
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1391 @ifset htmltex
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1392 @subsection Functions by Category
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1393 @subsubsection Generate sparse matrix
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1394 @table @asis
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1395 @item @ref{spdiags}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1396 A generalization of the function `spdiag'.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1397 @item @ref{speye}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1398 Returns a sparse identity matrix.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1399 @item @ref{sprand}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1400 Generate a random sparse matrix.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1401 @item @ref{sprandn}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1402 Generate a random sparse matrix.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1403 @item @ref{sprandsym}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1404 Generate a symmetric random sparse matrix.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1405 @end table
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1406 @subsubsection Sparse matrix conversion
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1407 @table @asis
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1408 @item @ref{full}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1409 returns a full storage matrix from a sparse one See also: sparse
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1410 @item @ref{sparse}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1411 SPARSE: create a sparse matrix
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1412 @item @ref{spconvert}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1413 This function converts for a simple sparse matrix format easily produced by other programs into Octave's internal sparse format.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1414 @item @ref{spfind}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1415 SPFIND: a sparse version of the find operator 1.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1416 @end table
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1417 @subsubsection Manipulate sparse matrices
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1418 @table @asis
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1419 @item @ref{issparse}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1420 Return 1 if the value of the expression EXPR is a sparse matrix.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1421 @item @ref{nnz}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1422 returns number of non zero elements in SM See also: sparse
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1423 @item @ref{nonzeros}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1424 Returns a vector of the non-zero values of the sparse matrix S
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1425 @item @ref{nzmax}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1426 Returns the amount of storage allocated to the sparse matrix SM.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1427 @item @ref{spalloc}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1428 Returns an empty sparse matrix of size R-by-C.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1429 @item @ref{spfun}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1430 Compute `f(X)' for the non-zero values of X This results in a sparse matrix with the same structure as X.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1431 @item @ref{spones}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1432 Replace the non-zero entries of X with ones.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1433 @item @ref{spy}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1434 Plot the sparsity pattern of the sparse matrix X
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1435 @end table
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1436 @subsubsection Graph Theory
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1437 @table @asis
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1438 @item @ref{etree}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1439 Returns the elimination tree for the matrix S.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1440 @item @ref{etreeplot}
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1441 Plots the elimination tree of the matrix @var{s} or @code{@var{s}+@var{s}'}
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1442 if @var{s} in non-symmetric.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1443 @item @ref{gplot}
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1444 Plots a graph defined by @var{A} and @var{xy} in the graph theory sense.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1445 @item treelayout
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1446 @emph{Not implemented}
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1447 @item @ref{treeplot}
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1448 Produces a graph of a tree or forest.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1449 @end table
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1450 @subsubsection Sparse matrix reordering
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1451 @table @asis
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1452 @item @ref{ccolamd}
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1453 Constrained column approximate minimum degree permutation.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1454 @item @ref{colamd}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1455 Column approximate minimum degree permutation.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1456 @item @ref{colperm}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1457 Returns the column permutations such that the columns of `S (:, P)' are ordered in terms of increase number of non-zero elements.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1458 @item @ref{csymamd}
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1459 For a symmetric positive definite matrix S, returns the permutation vector p such that `S (P, P)' tends to have a sparser Cholesky factor than S.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1460 @item @ref{dmperm}
5322
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1461 Perform a Deulmage-Mendelsohn permutation on the sparse matrix S.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1462 @item @ref{symamd}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1463 For a symmetric positive definite matrix S, returns the permutation vector p such that `S (P, P)' tends to have a sparser Cholesky factor than S.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1464 @item symrcm
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1465 @emph{Not implemented}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1466 @end table
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1467 @subsubsection Linear algebra
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1468 @table @asis
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1469 @item cholinc
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1470 @emph{Not implemented}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1471 @item condest
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1472 @emph{Not implemented}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1473 @item eigs
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1474 @emph{Not implemented}
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1475 @item @ref{matrix_type}
5322
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1476 Identify the matrix type or mark a matrix as a particular type.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1477 @item normest
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1478 @emph{Not implemented}
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1479 @item @ref{spchol}
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1480 Compute the Cholesky factor, R, of the symmetric positive definite.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1481 @item @ref{spcholinv}
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1482 Use the Cholesky factorization to compute the inverse of the
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1483 sparse symmetric positive definite matrix A.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1484 @item @ref{spchol2inv}
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1485 Invert a sparse symmetric, positive definite square matrix from its
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1486 Cholesky decomposition, U.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1487 @item @ref{spdet}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1488 Compute the determinant of sparse matrix A using UMFPACK.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1489 @item @ref{spinv}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1490 Compute the inverse of the square matrix A.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1491 @item @ref{spkron}
5322
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1492 Form the kronecker product of two sparse matrices.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1493 @item @ref{splchol}
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1494 Compute the Cholesky factor, L, of the symmetric positive definite.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1495 @item @ref{splu}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1496 Compute the LU decomposition of the sparse matrix A, using subroutines from UMFPACK.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1497 @item @ref{spqr}
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1498 Compute the sparse QR factorization of @var{a}, using CSPARSE.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1499 @item sprank
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1500 @emph{Not implemented}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1501 @item svds
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1502 @emph{Not implemented}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1503 @end table
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1504 @subsubsection Iterative techniques
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1505 @table @asis
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1506 @item bicg
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1507 @emph{Not implemented}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1508 @item bicgstab
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1509 @emph{Not implemented}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1510 @item cgs
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1511 @emph{Not implemented}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1512 @item gmres
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1513 @emph{Not implemented}
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1514 @item @ref{luinc}
5282
5bdc3f24cd5f [project @ 2005-04-14 22:17:26 by dbateman]
dbateman
parents: 5164
diff changeset
1515 Produce the incomplete LU factorization of the sparse matrix A.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1516 @item lsqr
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1517 @emph{Not implemented}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1518 @item minres
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1519 @emph{Not implemented}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1520 @item pcg
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1521 @emph{Not implemented}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1522 @item pcr
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1523 @emph{Not implemented}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1524 @item qmr
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1525 @emph{Not implemented}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1526 @item symmlq
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1527 @emph{Not implemented}
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1528 @end table
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1529 @subsubsection Miscellaneous
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1530 @table @asis
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1531 @item spaugment
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1532 @emph{Not implemented}
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1533 @item @ref{spparms}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1534 Sets or displays the parameters used by the sparse solvers and factorization functions.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1535 @item @ref{symbfact}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1536 Performs a symbolic factorization analysis on the sparse matrix S.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1537 @item @ref{spstats}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1538 Return the stats for the non-zero elements of the sparse matrix S COUNT is the number of non-zeros in each column, MEAN is the mean of the non-zeros in each column, and VAR is the variance of the non-zeros in each column
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1539 @item @ref{spprod}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1540 Product of elements along dimension DIM.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1541 @item @ref{spcumprod}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1542 Cumulative product of elements along dimension DIM.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1543 @item @ref{spcumsum}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1544 Cumulative sum of elements along dimension DIM.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1545 @item @ref{spsum}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1546 Sum of elements along dimension DIM.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1547 @item @ref{spsumsq}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1548 Sum of squares of elements along dimension DIM.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1549 @item @ref{spmin}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1550 For a vector argument, return the minimum value.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1551 @item @ref{spmax}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1552 For a vector argument, return the maximum value.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1553 @item @ref{spatan2}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1554 Compute atan (Y / X) for corresponding sparse matrix elements of Y and X.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1555 @item @ref{spdiag}
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1556 Return a diagonal matrix with the sparse vector V on diagonal K.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1557 @end table
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1558
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1559 @subsection Functions Alphabetically
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1560 @end ifset
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1561
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1562 @menu
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1563 * ccolamd:: Constrained column approximate minimum degree permutation.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1564 * colamd:: Column approximate minimum degree permutation.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1565 * colperm:: Returns the column permutations such that the columns of `S
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1566 (:, P)' are ordered in terms of increase number of non-zero
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1567 elements.
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1568 * csymamd:: For a symmetric positive definite matrix S, returns the
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1569 permutation vector p such that `S (P, P)' tends to have a
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1570 sparser Cholesky factor than S.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1571 * dmperm:: Perfrom a Deulmage-Mendelsohn permutation on the sparse
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1572 matrix S.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1573 * etree:: Returns the elimination tree for the matrix S.
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1574 * etreeplot:: Plots the elimination tree of the matrix @var{s} or
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1575 @code{@var{s}+@var{s}'} if @var{s} in non-symmetric.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1576 * full:: returns a full storage matrix from a sparse one See also:
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1577 sparse
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1578 * gplot:: Plots a graph defined by @var{A} and @var{xy} in the graph
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1579 theory sense.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1580 * issparse:: Return 1 if the value of the expression EXPR is a sparse
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1581 matrix.
5282
5bdc3f24cd5f [project @ 2005-04-14 22:17:26 by dbateman]
dbateman
parents: 5164
diff changeset
1582 * luinc:: Produce the incomplete LU factorization of the sparse
5bdc3f24cd5f [project @ 2005-04-14 22:17:26 by dbateman]
dbateman
parents: 5164
diff changeset
1583 A.
5322
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1584 * matrix_type:: Identify the matrix type or mark a matrix as a particular
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1585 type.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1586 * nnz:: returns number of non zero elements in SM See also: sparse
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1587 * nonzeros:: Returns a vector of the non-zero values of the sparse
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1588 matrix S
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1589 * nzmax:: Returns the amount of storage allocated to the sparse
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1590 matrix SM.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1591 * spalloc:: Returns an empty sparse matrix of size R-by-C.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1592 * sparse:: SPARSE: create a sparse matrix
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1593 * spatan2:: Compute atan (Y / X) for corresponding sparse matrix
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1594 elements of Y and X.
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1595 * spchol:: Compute the Cholesky factor, R, of the symmetric
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1596 positive definite.
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1597 * spcholinv:: Use the Cholesky factorization to compute the inverse of the
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1598 sparse symmetric positive definite matrix A.
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1599 * spchol2inv:: Invert a sparse symmetric, positive definite square matrix
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1600 from its Cholesky decomposition, U.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1601 * spconvert:: This function converts for a simple sparse matrix format
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1602 easily produced by other programs into Octave's internal
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1603 sparse format.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1604 * spcumprod:: Cumulative product of elements along dimension DIM.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1605 * spcumsum:: Cumulative sum of elements along dimension DIM.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1606 * spdet:: Compute the determinant of sparse matrix A using UMFPACK.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1607 * spdiag:: Return a diagonal matrix with the sparse vector V on
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1608 diagonal K.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1609 * spdiags:: A generalization of the function `spdiag'.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1610 * speye:: Returns a sparse identity matrix.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1611 * spfind:: SPFIND: a sparse version of the find operator 1.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1612 * spfun:: Compute `f(X)' for the non-zero values of X This results in
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1613 a sparse matrix with the same structure as X.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1614 * spinv:: Compute the inverse of the square matrix A.
5322
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1615 * spkron:: Form the kronecker product of two sparse matrices.
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1616 * splchol:: Compute the Cholesky factor, L, of the symmetric positive
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1617 definite.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1618 * splu:: Compute the LU decomposition of the sparse matrix A, using
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1619 subroutines from UMFPACK.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1620 * spmax:: For a vector argument, return the maximum value.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1621 * spmin:: For a vector argument, return the minimum value.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1622 * spones:: Replace the non-zero entries of X with ones.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1623 * spparms:: Sets or displays the parameters used by the sparse solvers
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1624 and factorization functions.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1625 * spprod:: Product of elements along dimension DIM.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1626 * spqr:: Compute the sparse QR factorization of @var{a}, using CSPARSE.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1627 * sprand:: Generate a random sparse matrix.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1628 * sprandn:: Generate a random sparse matrix.
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1629 * sprandsym:: Generate a symmetric random sparse matrix.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1630 * spstats:: Return the stats for the non-zero elements of the sparse
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1631 matrix S COUNT is the number of non-zeros in each column,
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1632 MEAN is the mean of the non-zeros in each column, and VAR
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1633 is the variance of the non-zeros in each column
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1634 * spsum:: Sum of elements along dimension DIM.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1635 * spsumsq:: Sum of squares of elements along dimension DIM.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1636 * spy:: Plot the sparsity pattern of the sparse matrix X
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1637 * symamd:: For a symmetric positive definite matrix S, returns the
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1638 permutation vector p such that `S (P, P)' tends to have a
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1639 sparser Cholesky factor than S.
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1640 * symbfact:: Performs a symbolic factorization analysis on the sparse
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1641 matrix S.
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1642 * treeplot:: Produces a graph of a tree or forest.
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1643 @end menu
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1644
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1645 @node colamd, ccolamd, , Function Reference
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1646 @subsubsection colamd
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1647
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1648 @DOCSTRING(colamd)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1649
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1650 @node ccolamd, colperm, colamd, Function Reference
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1651 @subsubsection ccolamd
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1652
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1653 @DOCSTRING(ccolamd)
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1654
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1655 @node colperm, csymamd, ccolamd, Function Reference
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1656 @subsubsection colperm
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1657
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1658 @DOCSTRING(colperm)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1659
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1660 @node csymamd, dmperm, colperm, Function Reference
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1661 @subsubsection csymamd
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1662
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1663 @DOCSTRING(csymamd)
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1664
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1665 @node dmperm, etree, csymamd, Function Reference
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1666 @subsubsection dmperm
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1667
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1668 @DOCSTRING(dmperm)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1669
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1670 @node etree, etreeplot, dmperm, Function Reference
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1671 @subsubsection etree
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1672
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1673 @DOCSTRING(etree)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1674
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1675 @node etreeplot, full, etree, Function Reference
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1676 @subsubsection etreeplot
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1677
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1678 @DOCSTRING(etreeplot)
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1679
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1680 @node full, gplot, etreeplot, Function Reference
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1681 @subsubsection full
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1682
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1683 @DOCSTRING(full)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1684
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1685 @node gplot, issparse, full, Function Reference
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1686 @subsubsection gplot
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1687
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1688 @DOCSTRING(gplot)
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1689
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1690 @node issparse, luinc, gplot, Function Reference
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1691 @subsubsection issparse
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1692
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1693 @DOCSTRING(issparse)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1694
5322
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1695 @node luinc, matrix_type, issparse, Function Reference
5282
5bdc3f24cd5f [project @ 2005-04-14 22:17:26 by dbateman]
dbateman
parents: 5164
diff changeset
1696 @subsubsection luinc
5bdc3f24cd5f [project @ 2005-04-14 22:17:26 by dbateman]
dbateman
parents: 5164
diff changeset
1697
5bdc3f24cd5f [project @ 2005-04-14 22:17:26 by dbateman]
dbateman
parents: 5164
diff changeset
1698 @DOCSTRING(luinc)
5bdc3f24cd5f [project @ 2005-04-14 22:17:26 by dbateman]
dbateman
parents: 5164
diff changeset
1699
5322
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1700 @node matrix_type, nnz, luinc, Function Reference
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1701 @subsubsection matrix_type
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1702
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1703 @DOCSTRING(matrix_type)
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1704
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1705 @node nnz, nonzeros, matrix_type, Function Reference
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1706 @subsubsection nnz
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1707
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1708 @DOCSTRING(nnz)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1709
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1710 @node nonzeros, nzmax, nnz, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1711 @subsubsection nonzeros
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1712
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1713 @DOCSTRING(nonzeros)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1714
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1715 @node nzmax, spalloc, nonzeros, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1716 @subsubsection nzmax
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1717
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1718 @DOCSTRING(nzmax)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1719
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1720 @node spalloc, sparse, nzmax, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1721 @subsubsection spalloc
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1722
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1723 @DOCSTRING(spalloc)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1724
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1725 @node sparse, spatan2, spalloc, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1726 @subsubsection sparse
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1727
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1728 @DOCSTRING(sparse)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1729
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1730 @node spatan2, spchol, sparse, Function Reference
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1731 @subsubsection spatan2
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1732
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1733 @DOCSTRING(spatan2)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1734
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1735 @node spchol, spcholinv, spatan2, Function Reference
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1736 @subsubsection spchol
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1737
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1738 @DOCSTRING(spchol)
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1739
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1740 @node spcholinv, spchol2inv, spchol, Function Reference
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1741 @subsubsection spcholinv
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1742
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1743 @DOCSTRING(spcholinv)
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1744
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1745 @node spchol2inv, spconvert, spcholinv, Function Reference
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1746 @subsubsection spchol2inv
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1747
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1748 @DOCSTRING(spchol2inv)
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1749
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1750 @node spconvert, spcumprod, spchol2inv, Function Reference
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1751 @subsubsection spconvert
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1752
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1753 @DOCSTRING(spconvert)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1754
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1755 @node spcumprod, spcumsum, spconvert, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1756 @subsubsection spcumprod
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1757
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1758 @DOCSTRING(spcumprod)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1759
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1760 @node spcumsum, spdet, spcumprod, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1761 @subsubsection spcumsum
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1762
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1763 @DOCSTRING(spcumsum)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1764
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1765 @node spdet, spdiag, spcumsum, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1766 @subsubsection spdet
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1767
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1768 @DOCSTRING(spdet)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1769
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1770 @node spdiag, spdiags, spdet, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1771 @subsubsection spdiag
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1772
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1773 @DOCSTRING(spdiag)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1774
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1775 @node spdiags, speye, spdiag, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1776 @subsubsection spdiags
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1777
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1778 @DOCSTRING(spdiags)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1779
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1780 @node speye, spfind, spdiags, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1781 @subsubsection speye
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1782
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1783 @DOCSTRING(speye)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1784
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1785 @node spfind, spfun, speye, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1786 @subsubsection spfind
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1787
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1788 @DOCSTRING(spfind)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1789
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1790 @node spfun, spinv, spfind, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1791 @subsubsection spfun
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1792
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1793 @DOCSTRING(spfun)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1794
5322
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1795 @node spinv, spkron, spfun, Function Reference
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1796 @subsubsection spinv
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1797
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1798 @DOCSTRING(spinv)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1799
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1800 @node spkron, splchol, spinv, Function Reference
5322
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1801 @subsubsection spkron
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1802
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1803 @DOCSTRING(spkron)
22994a5730f9 [project @ 2005-04-29 13:04:24 by dbateman]
dbateman
parents: 5282
diff changeset
1804
5506
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1805 @node splchol, splu, spkron, Function Reference
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1806 @subsubsection splchol
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1807
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1808 @DOCSTRING(splchol)
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1809
b4cfbb0ec8c4 [project @ 2005-10-23 19:09:32 by dbateman]
dbateman
parents: 5324
diff changeset
1810 @node splu, spmax, splchol, Function Reference
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1811 @subsubsection splu
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1812
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1813 @DOCSTRING(splu)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1814
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1815 @node spmax, spmin, splu, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1816 @subsubsection spmax
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1817
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1818 @DOCSTRING(spmax)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1819
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1820 @node spmin, spones, spmax, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1821 @subsubsection spmin
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1822
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1823 @DOCSTRING(spmin)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1824
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1825 @node spones, spparms, spmin, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1826 @subsubsection spones
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1827
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1828 @DOCSTRING(spones)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1829
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1830 @node spparms, spprod, spones, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1831 @subsubsection spparms
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1832
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1833 @DOCSTRING(spparms)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1834
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1835 @node spprod, spqr, spparms, Function Reference
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1836 @subsubsection spprod
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1837
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1838 @DOCSTRING(spprod)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1839
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1840 @node spqr, sprand, spprod, Function Reference
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1841 @subsubsection spqr
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1842
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1843 @DOCSTRING(spqr)
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1844
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1845 @node sprand, sprandn, spqr, Function Reference
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1846 @subsubsection sprand
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1847
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1848 @DOCSTRING(sprand)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1849
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1850 @node sprandn, sprandsym, sprand, Function Reference
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1851 @subsubsection sprandn
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1852
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1853 @DOCSTRING(sprandn)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1854
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1855 @node sprandsym, spstats, sprandn, Function Reference
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1856 @subsubsection sprandsym
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1857
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1858 @DOCSTRING(sprandsym)
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1859
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1860 @node spstats, spsum, sprandsym, Function Reference
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1861 @subsubsection spstats
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1862
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1863 @DOCSTRING(spstats)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1864
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1865 @node spsum, spsumsq, spstats, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1866 @subsubsection spsum
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1867
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1868 @DOCSTRING(spsum)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1869
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1870 @node spsumsq, spy, spsum, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1871 @subsubsection spsumsq
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1872
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1873 @DOCSTRING(spsumsq)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1874
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1875 @node spy, symamd, spsumsq, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1876 @subsubsection spy
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1877
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1878 @DOCSTRING(spy)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1879
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1880 @node symamd, symbfact, spy, Function Reference
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1881 @subsubsection symamd
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1882
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1883 @DOCSTRING(symamd)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1884
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1885 @node symbfact, treeplot, symamd, Function Reference
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1886 @subsubsection symbfact
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1887
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1888 @DOCSTRING(symbfact)
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1889
5648
69a4f320d95a [project @ 2006-03-08 20:17:37 by dbateman]
dbateman
parents: 5576
diff changeset
1890 @node treeplot, ,symbfact, Function Reference
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1891 @subsubsection treeplot
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1892
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1893 @DOCSTRING(treeplot)
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents: 5506
diff changeset
1894
5164
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1895 @c Local Variables: ***
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1896 @c Mode: texinfo ***
57077d0ddc8e [project @ 2005-02-25 19:55:24 by jwe]
jwe
parents:
diff changeset
1897 @c End: ***