*Bug #14330 fixed - luget was really slow.
[scilab.git] / scilab / modules / core / help / ja_JP / 1_keywords / backslash.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:lang="ja" xml:id="backslash">
4     
5     <refnamediv>
6         
7         <refname>backslash</refname>
8         
9         <refpurpose>(\) 左行列除算.</refpurpose>
10         
11     </refnamediv>
12     
13     <refsynopsisdiv>
14         
15         <title>呼び出し手順</title>
16         
17         <synopsis>X=A\B</synopsis>
18         
19     </refsynopsisdiv>
20     
21     <refsection>
22         
23         <title>説明</title>
24         
25         <para>
26             
27             バックスラッシュは左行列除算を定義します.
28             
29             <literal>X=A\B</literal> は <literal>A*X=B</literal>の解です.
30             
31         </para>
32         
33         <para>
34             
35             <literal>A</literal> が正方で非特異の場合,
36             
37             <literal>X=A\B</literal> は <literal>X=inv(A)*B</literal>
38             
39             と等価です.しかし,計算はより正確で浮動小数点演算の負荷は小さくなります.
40             
41             すなわち,線形システムの方程式<code>A*X=B</code>の解を計算する際には,
42             
43             バックスラッシュ演算子を使用するべきであり,<function>inv</function>関数の
44             
45             使用は避けるべきです.
46             
47         </para>
48         
49         <para>
50             
51             <literal>A</literal>が正方の場合, 解<literal>X</literal>は
52             
53             LU分解または線形最小二乗ソルバのどちらかにより計算できます.
54             
55             <literal>A</literal>の条件数が<code>1/(10*%eps)</code>よりも小さい場合
56             
57             (つまり,<literal>A</literal>の条件が良い場合),ピボット選択付きLU分解が使用されます.
58             
59             そうでない場合(<literal>A</literal>の条件が悪い場合),
60             
61             <literal>X</literal> は<literal>A</literal>の完全直交分解を用いて
62             
63             <literal>||A*X-B||</literal>を最小化する最小ノルム解となります
64             
65             (すなわち,<literal>X</literal>は線形最小二乗問題の解です).
66             
67         </para>
68         
69         <para>
70             
71             <literal>A</literal> が正方でない場合, <literal>X</literal> は最小二乗解となります.
72             
73             すなわち, <code>norm(A*X-B)</code> は,最小値 (ユークリッドノルム)となります.
74             
75             <literal>A</literal> が列フルランクの場合,最小二乗解, <literal>X=A\B</literal>, は
76             
77             唯一の解 (<literal>norm(A*X-B)</literal>を最小化する唯一の
78             
79             <literal>X</literal>が存在)となります.
80             
81             <literal>A</literal> が列フルランクでない場合, 最小二乗解は唯一ではなくなり,
82             
83             <literal>X=A\B</literal>は一般に最小ノルム解ではなくなります
84             
85             (最小ノルム解は <literal>X=pinv(A)*B</literal>です).
86             
87         </para>
88         
89         <para>
90             
91             <literal>A.\B</literal>  は<literal>(i,j)</literal> エントリが
92             
93             <literal>A(i,j)\B(i,j)</literal>となる行列となります.
94             
95             <literal>A.\B</literal> は
96             
97             <literal>A*ones(B).\B</literal> (または <literal>A.\(B*ones(A))</literal>
98             
99             と等価になります.
100             
101         </para>
102         
103         <para>
104             
105             <literal>A\.B</literal>  は定義されていない演算子です.
106             
107             この演算子は, <literal>*</literal> または <literal>/</literal> のように
108             
109             新しい演算子を定義する際に使用できます
110             
111             (<link linkend="overloading">オーバーロード</link>参照).
112             
113         </para>
114         
115     </refsection>
116     
117     <refsection>
118         
119         <title>例</title>
120         
121         <programlisting role="example"><![CDATA[
122 A=[
123    9.   -36.    30.
124   -36.   192.  -180.
125    30.  -180.   180.
126 ];
127 b=[
128    3.
129   -24.
130    30.
131 ];
132 x=A\b
133 A*x-b // ゼロに近い
134
135 A=rand(3,2);
136 b=[1;1;1];
137 x=A\b;
138 y=pinv(A)*b;
139 x-y
140 A=rand(2,3);b=[1;1];
141 x=A\b;
142 y=pinv(A)*b;
143 x-y, A*x-b, A*y-b
144
145 // ランク落ちの場合
146 A=rand(3,1)*rand(1,2);
147 b=[1;1;1];
148 x=A\b;
149 y=pinv(A)*b;
150 A*x-b, A*y-b
151 A=rand(2,1)*rand(1,3);
152 b=[1;1];
153 x=A\b;
154 y=pinv(A)*b;
155 A*x-b, A*y-b
156
157 // 複数の線形ソルバのベンチマーク
158
159 [A,descr,ref,mtype] = ReadHBSparse(SCI+..
160    "/modules/umfpack/demos/bcsstk24.rsa");
161
162 b = zeros(size(A,1),1);
163
164 tic();
165 res = umfpack(A,'\',b);
166 mprintf('\nTime with umfpack: %.3f\n',toc());
167
168 tic();
169 res = linsolve(A,b);
170 mprintf('\ntime with linsolve: %.3f\n',toc());
171
172 tic();
173 res = A\b;
174 mprintf('\ntime with backslash: %.3f\n',toc());
175  ]]></programlisting>
176         
177     </refsection>
178     
179     <refsection role="see also">
180         
181         <title>参照</title>
182         
183         <simplelist type="inline">
184             
185             <member>
186                 
187                 <link linkend="slash">slash</link>
188                 
189             </member>
190             
191             <member>
192                 
193                 <link linkend="inv">inv</link>
194                 
195             </member>
196             
197             <member>
198                 
199                 <link linkend="pinv">pinv</link>
200                 
201             </member>
202             
203             <member>
204                 
205                 <link linkend="percent">percent</link>
206                 
207             </member>
208             
209             <member>
210                 
211                 <link linkend="ieee">ieee</link>
212                 
213             </member>
214             
215             <member>
216                 
217                 <link linkend="linsolve">linsolve</link>
218                 
219             </member>
220             
221             <member>
222                 
223                 <link linkend="umfpack">umfpack</link>
224                 
225             </member>
226             
227         </simplelist>
228         
229     </refsection>
230     
231     <refsection>
232         
233         <title>履歴</title>
234         
235         <revhistory>
236             
237             <revision>
238                 
239                 <revnumber>5.4.1</revnumber>
240                 
241                 <revremark>バックスラッシュの条件数の閾値が増加しました.</revremark>
242                 
243             </revision>
244             
245         </revhistory>
246         
247     </refsection>
248     
249 </refentry>
250
251
252