File: Matrices.html

package info (click to toggle)
gsl-ref-html 2.3-1
  • links: PTS
  • area: non-free
  • in suites: bullseye, buster, sid
  • size: 6,876 kB
  • ctags: 4,574
  • sloc: makefile: 35
file content (175 lines) | stat: -rw-r--r-- 9,910 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 The GSL Team.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "GNU General Public License" and "Free Software
Needs Free Documentation", the Front-Cover text being "A GNU Manual",
and with the Back-Cover Text being (a) (see below). A copy of the
license is included in the section entitled "GNU Free Documentation
License".

(a) The Back-Cover Text is: "You have the freedom to copy and modify this
GNU Manual." -->
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Scientific Library &ndash; Reference Manual: Matrices</title>

<meta name="description" content="GNU Scientific Library &ndash; Reference Manual: Matrices">
<meta name="keywords" content="GNU Scientific Library &ndash; Reference Manual: Matrices">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Function-Index.html#Function-Index" rel="index" title="Function Index">
<link href="Vectors-and-Matrices.html#Vectors-and-Matrices" rel="up" title="Vectors and Matrices">
<link href="Matrix-allocation.html#Matrix-allocation" rel="next" title="Matrix allocation">
<link href="Example-programs-for-vectors.html#Example-programs-for-vectors" rel="previous" title="Example programs for vectors">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Matrices"></a>
<div class="header">
<p>
Next: <a href="Vector-and-Matrix-References-and-Further-Reading.html#Vector-and-Matrix-References-and-Further-Reading" accesskey="n" rel="next">Vector and Matrix References and Further Reading</a>, Previous: <a href="Vectors.html#Vectors" accesskey="p" rel="previous">Vectors</a>, Up: <a href="Vectors-and-Matrices.html#Vectors-and-Matrices" accesskey="u" rel="up">Vectors and Matrices</a> &nbsp; [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Matrices-1"></a>
<h3 class="section">8.4 Matrices</h3>
<a name="index-matrices-1"></a>
<a name="index-physical-dimension_002c-matrices"></a>
<a name="index-trailing-dimension_002c-matrices"></a>
<a name="index-leading-dimension_002c-matrices"></a>
<a name="index-ordering_002c-matrix-elements"></a>

<p>Matrices are defined by a <code>gsl_matrix</code> structure which describes a
generalized slice of a block.  Like a vector it represents a set of
elements in an area of memory, but uses two indices instead of one.
</p>
<a name="index-gsl_005fmatrix"></a>
<p>The <code>gsl_matrix</code> structure contains six components, the two
dimensions of the matrix, a physical dimension, a pointer to the memory
where the elements of the matrix are stored, <var>data</var>, a pointer to
the block owned by the matrix <var>block</var>, if any, and an ownership
flag, <var>owner</var>.  The physical dimension determines the memory layout
and can differ from the matrix dimension to allow the use of
submatrices.  The <code>gsl_matrix</code> structure is very simple and looks
like this,
</p>
<div class="example">
<pre class="example">typedef struct
{
  size_t size1;
  size_t size2;
  size_t tda;
  double * data;
  gsl_block * block;
  int owner;
} gsl_matrix;
</pre></div>

<p>Matrices are stored in row-major order, meaning that each row of
elements forms a contiguous block in memory.  This is the standard
&ldquo;C-language ordering&rdquo; of two-dimensional arrays. Note that <small>FORTRAN</small>
stores arrays in column-major order. The number of rows is <var>size1</var>.
The range of valid row indices runs from 0 to <code>size1-1</code>.  Similarly
<var>size2</var> is the number of columns.  The range of valid column indices
runs from 0 to <code>size2-1</code>.  The physical row dimension <var>tda</var>, or
<em>trailing dimension</em>, specifies the size of a row of the matrix as
laid out in memory.
</p>
<p>For example, in the following matrix <var>size1</var> is 3, <var>size2</var> is 4,
and <var>tda</var> is 8.  The physical memory layout of the matrix begins in
the top left hand-corner and proceeds from left to right along each row
in turn.
</p>
<div class="example">
<pre class="example">00 01 02 03 XX XX XX XX
10 11 12 13 XX XX XX XX
20 21 22 23 XX XX XX XX
</pre></div>

<p>Each unused memory location is represented by &ldquo;<code>XX</code>&rdquo;.  The
pointer <var>data</var> gives the location of the first element of the matrix
in memory.  The pointer <var>block</var> stores the location of the memory
block in which the elements of the matrix are located (if any).  If the
matrix owns this block then the <var>owner</var> field is set to one and the
block will be deallocated when the matrix is freed.  If the matrix is
only a slice of a block owned by another object then the <var>owner</var> field is
zero and any underlying block will not be freed.
</p>
<p>The functions for allocating and accessing matrices are defined in
<samp>gsl_matrix.h</samp>
</p>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="Matrix-allocation.html#Matrix-allocation" accesskey="1">Matrix allocation</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Accessing-matrix-elements.html#Accessing-matrix-elements" accesskey="2">Accessing matrix elements</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Initializing-matrix-elements.html#Initializing-matrix-elements" accesskey="3">Initializing matrix elements</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Reading-and-writing-matrices.html#Reading-and-writing-matrices" accesskey="4">Reading and writing matrices</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Matrix-views.html#Matrix-views" accesskey="5">Matrix views</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Creating-row-and-column-views.html#Creating-row-and-column-views" accesskey="6">Creating row and column views</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Copying-matrices.html#Copying-matrices" accesskey="7">Copying matrices</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Copying-rows-and-columns.html#Copying-rows-and-columns" accesskey="8">Copying rows and columns</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Exchanging-rows-and-columns.html#Exchanging-rows-and-columns" accesskey="9">Exchanging rows and columns</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Matrix-operations.html#Matrix-operations">Matrix operations</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Finding-maximum-and-minimum-elements-of-matrices.html#Finding-maximum-and-minimum-elements-of-matrices">Finding maximum and minimum elements of matrices</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Matrix-properties.html#Matrix-properties">Matrix properties</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Example-programs-for-matrices.html#Example-programs-for-matrices">Example programs for matrices</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
</table>

<hr>
<div class="header">
<p>
Next: <a href="Vector-and-Matrix-References-and-Further-Reading.html#Vector-and-Matrix-References-and-Further-Reading" accesskey="n" rel="next">Vector and Matrix References and Further Reading</a>, Previous: <a href="Vectors.html#Vectors" accesskey="p" rel="previous">Vectors</a>, Up: <a href="Vectors-and-Matrices.html#Vectors-and-Matrices" accesskey="u" rel="up">Vectors and Matrices</a> &nbsp; [<a href="Function-Index.html#Function-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>