Merge remote-tracking branch 'origin/6.1'
[scilab.git] / scilab / modules / sparse / help / ja_JP / sparseconvert / sp2adj.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <!--
4  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
5  * Copyright (C) 2008 - INRIA
6  *
7  * Copyright (C) 2012 - 2016 - Scilab Enterprises
8  *
9  * This file is hereby licensed under the terms of the GNU GPL v2.0,
10  * pursuant to article 5.3.4 of the CeCILL v.2.1.
11  * This file was originally licensed under the terms of the CeCILL v2.1,
12  * and continues to be available under such terms.
13  * For more information, see the COPYING file which you should have received
14  * along with this program.
15  *
16  -->
17
18 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="sp2adj" xml:lang="ja">
19
20     <refnamediv>
21
22         <refname>sp2adj</refname>
23
24         <refpurpose>疎行列を隣接形式に変換する</refpurpose>
25
26     </refnamediv>
27
28     <refsynopsisdiv>
29
30         <title>呼び出し手順</title>
31
32         <synopsis>
33
34             [xadj,iadj,v]=sp2adj(A)
35
36         </synopsis>
37
38     </refsynopsisdiv>
39
40     <refsection>
41
42         <title>引数</title>
43
44         <variablelist>
45
46             <varlistentry>
47
48                 <term>A</term>
49
50                 <listitem>
51
52                     <para>
53
54                         m行n列の実数または複素数の疎行列 (nz 個の非ゼロエントリ)
55
56                     </para>
57
58                 </listitem>
59
60             </varlistentry>
61
62             <varlistentry>
63
64                 <term>xadj</term>
65
66                 <listitem>
67
68                     <para>
69
70                         (n+1)行1列の浮動小数点整数の行列で,
71
72                         各列のiadjとvの先頭の添字を指します.
73
74                         <literal>j=1:n</literal>の場合,
75
76                         浮動小数点整数
77
78                         <literal>xadj(j+1)-xadj(j)</literal> は
79
80                         j列の非ゼロエントリの数になります.
81
82                     </para>
83
84                 </listitem>
85
86             </varlistentry>
87
88             <varlistentry>
89
90                 <term>iadj</term>
91
92                 <listitem>
93
94                     <para>
95
96                         nz行1列の浮動小数点整数の行列, 非ゼロエントリの行添字.
97
98                         <literal>j=1:n</literal>および,
99
100                         <literal>k = xadj(j):xadj(j+1)-1</literal>に関して,
101
102                         浮動小数点整数 <literal>i = iadj(k)</literal> は
103
104                         非ゼロエントリ #k の行添字です.
105
106                     </para>
107
108                 </listitem>
109
110             </varlistentry>
111
112             <varlistentry>
113
114                 <term>v</term>
115
116                 <listitem>
117
118                     <para>
119
120                         nz行1列の浮動小数点整数の行列, Aの非ゼロエントリ.
121
122                         <literal>j=1:n</literal>および,
123
124                         <literal>k = xadj(j):xadj(j+1)-1</literal>に関して,
125
126                         浮動小数点整数<literal>Aij = v(k)</literal>は
127
128                         非ゼロエントリ #k の値です.
129
130                     </para>
131
132                 </listitem>
133
134             </varlistentry>
135
136         </variablelist>
137
138     </refsection>
139
140     <refsection>
141
142         <title>説明</title>
143
144         <para>
145
146             sp2adjは,疎行列を隣接形式に変換します.
147
148             隣接形式の値は列毎に保存されています.
149
150             これは,この形式がしばしば
151
152             "Compressed sparse column" または CSCと呼ばれる理由です.
153
154         </para>
155
156     </refsection>
157
158     <refsection>
159
160         <title>例</title>
161
162         <para>
163
164             以下の例では,1から10のエントリを有する通常の行列を作成します.
165
166             次に,これを疎行列に変換し,ゼロを除きます.
167
168             最後に,この行列の隣接形式を計算します.
169
170             行列bはAの非ゼロ要素のみを有します.
171
172         </para>
173
174         <programlisting role="example"><![CDATA[
175 A = [
176 0 0 4 0 9
177 0 0 5 0 0
178 1 3 0 7 0
179 0 0 6 0 10
180 2 0 0 8 0
181 ];
182 B=sparse(A);
183 [xadj,iadj,v]=sp2adj(B)
184 expected_xadj = [1 3 4 7 9 11]';
185 expected_adjncy = [3 5 3 1 2 4 3 5 1 4]';
186 expected_anz = [1 2 3 4 5 6 7 8 9 10]';
187 and(expected_xadj == xadj) // Should be %t
188 and(expected_adjncy == iadj) // Should be %t
189 and(expected_anz == v) // Should be %t
190 // j is the column index
191 for j = 1 : size(xadj,"*")-1
192   irows = iadj(xadj(j):xadj(j+1)-1);
193   vcolj = v(xadj(j):xadj(j+1)-1);
194   mprintf("Column #%d:\n",j)
195   mprintf("  Rows  = %s:\n",sci2exp(irows))
196   mprintf("  Values= %s:\n",sci2exp(vcolj))
197 end
198  ]]></programlisting>
199
200         <para>
201
202             前のスクリプトは以下の出力を生成します.
203
204         </para>
205
206         <programlisting role="no-scilab-exec"><![CDATA[
207 Column #1:
208   Rows  = [3;5]:
209   Values= [1;2]:
210 Column #2:
211   Rows  = 3:
212   Values= 3:
213 Column #3:
214   Rows  = [1;2;4]:
215   Values= [4;5;6]:
216 Column #4:
217   Rows  = [3;5]:
218   Values= [7;8]:
219 Column #5:
220   Rows  = [1;4]:
221   Values= [9;10]:
222  ]]></programlisting>
223
224         <para>
225
226             列 #1について考えてみましょう.
227
228             等式 xadj(2)-xadj(1)=2 は列 #1に非ゼロ要素が2個あることを示します.
229
230             行添字は iadjに保存され, 列 #1 の非ゼロエントリは
231
232             行 #3 および #5であることを示します.
233
234             行列 v は実際のエントリが 1および2であることを示します.
235
236         </para>
237
238         <para>
239
240             以下の例では,疎行列の非ゼロエントリを隣接構造でループ処理を
241
242             することにより,調べます.
243
244         </para>
245
246         <programlisting role="example"><![CDATA[
247 A = [
248 0 0 0 0 0 6 0 0 0 0
249 3 0 5 0 0 0 0 5 0 0
250 0 0 0 3 0 0 0 0 0 0
251 0 0 0 0 0 0 0 0 0 0
252 0 7 0 0 0 0 0 0 0 0
253 0 0 0 0 0 0 0 0 0 3
254 0 0 0 0 0 0 0 0 2 0
255 ];
256 B=sparse(A);
257 [xadj,iadj,v]=sp2adj(B)
258 expected_xadj = [1 2 3 4 5 5 6 6 7 8 9]';
259 expected_adjncy = [2 5 2 3 1 2 7 6]';
260 expected_anz = [3 7 5 3 6 5 2 3]';
261 and(expected_xadj == xadj) // Should be %t
262 and(expected_adjncy == iadj) // Should be %t
263 and(expected_anz == v) // Should be %t
264  ]]></programlisting>
265
266         <para>
267
268             以下の例では,sp2adjおよびadj2sp関数が逆関数であることを
269
270             確認します.
271
272         </para>
273
274         <programlisting role="example"><![CDATA[
275 // Templates for the Solution of Algebraic Eigenvalue Problems: a Practical Guide
276 // Edited by Zhaojun Bai, James Demmel, Jack Dongarra, Axel Ruhe, and Henk van der Vorst
277 // "Sparse Matrix Storage Formats", J. Dongarra
278 // http://web.eecs.utk.edu/~dongarra/etemplates/book.html
279
280 A = [
281 10 0 0 0 -2 0
282 3 9 0 0 0 3
283 0 7 8 7 0 0
284 3 0 8 7 5 0
285 0 8 0 9 9 13
286 0 4 0 0 2 -1
287 ];
288 A = sparse(A)
289
290 // To get the Compressed Sparse Column (CSC) :
291 [col_ptr,row_ind,val]=sp2adj(A)
292 // To convert back to sparse:
293 AAsp=adj2sp(col_ptr,row_ind,val)
294 // Check the conversion
295 AAsp - A
296
297 // To get the Compressed Sparse Row (CSR) :
298 [row_ptr,col_ind,val]=sp2adj(A')
299 // To convert back to sparse:
300 AAsp=adj2sp(row_ptr,col_ind,val)'
301 // Check the conversion
302 AAsp - A
303  ]]></programlisting>
304
305     </refsection>
306
307     <refsection role="see also">
308
309         <title>参照</title>
310
311         <simplelist type="inline">
312
313             <member>
314
315                 <link linkend="adj2sp">adj2sp</link>
316
317             </member>
318
319             <member>
320
321                 <link linkend="sparse">sparse</link>
322
323             </member>
324
325             <member>
326
327                 <link linkend="spcompack">spcompack</link>
328
329             </member>
330
331             <member>
332
333                 <link linkend="spget">spget</link>
334
335             </member>
336
337         </simplelist>
338
339     </refsection>
340
341     <refsection>
342
343         <title>参考文献</title>
344
345         <para>
346
347             "Implementation of Lipsol in Scilab", Hector E. Rubio Scola, INRIA, Decembre 1997, Rapport Technique No 0215
348
349         </para>
350
351         <para>
352
353             "Solving Large Linear Optimization Problems with Scilab : Application to Multicommodity Problems", Hector E. Rubio Scola, Janvier 1999, Rapport Technique No 0227
354
355         </para>
356
357         <para>
358
359             "Toolbox Scilab : Detection signal design for failure detection and isolation for linear dynamic systems User's Guide", Hector E. Rubio Scola, 2000, Rapport Technique No 0241
360
361         </para>
362
363         <para>
364
365             "Computer Solution of Large Sparse Positive Definite Systems", A. George, Prentice-Hall, Inc. Englewood Cliffs, New Jersey, 1981.
366
367         </para>
368
369     </refsection>
370
371 </refentry>
372