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