95480b1b4cb9f6dd9b0f746040e77143e00f695e
[scilab.git] / scilab / modules / core / help / ja_JP / 1_keywords / backslash.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <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">
3     <refnamediv>
4         <refname>backslash</refname>
5         <refpurpose>(\) 左行列除算.</refpurpose>
6     </refnamediv>
7     <refsynopsisdiv>
8         <title>呼び出し手順</title>
9         <synopsis>X=A\B</synopsis>
10     </refsynopsisdiv>
11     <refsection>
12         <title>説明</title>
13         <para>
14             バックスラッシュは左行列除算を定義します. 
15             <literal>X=A\B</literal> は <literal>A*X=B</literal>の解です.
16         </para>
17         <para>
18             <literal>A</literal> が正方で非特異の場合,
19             <literal>X=A\B</literal> は <literal>X=inv(A)*B</literal> 
20             と等価です.しかし,計算はより正確で浮動小数点演算の負荷は小さくなります.
21             すなわち,線形システムの方程式<code>A*X=B</code>の解を計算する際には,
22             バックスラッシュ演算子を使用するべきであり,<function>inv</function>関数の
23             使用は避けるべきです.
24         </para>
25         <para>
26             <literal>A</literal>が正方の場合, 解<literal>X</literal>は
27             LU分解または線形最小二乗ソルバのどちらかにより計算できます.
28             <literal>A</literal>の条件数が<code>1/(10*%eps)</code>よりも小さい場合
29             (つまり,<literal>A</literal>の条件が良い場合),ピボット選択付きLU分解が使用されます.
30             そうでない場合(<literal>A</literal>の条件が悪い場合),
31             <literal>X</literal> は<literal>A</literal>の完全直交分解を用いて
32             <literal>||A*X-B||</literal>を最小化する最小ノルム解となります
33             (すなわち,<literal>X</literal>は線形最小二乗問題の解です).
34         </para>
35         <para>      
36             <literal>A</literal> が正方でない場合, <literal>X</literal> は最小二乗解となります.
37             すなわち, <code>norm(A*X-B)</code> は,最小値 (ユークリッドノルム)となります. 
38             <literal>A</literal> が列フルランクの場合,最小二乗解, <literal>X=A\B</literal>, は
39             唯一の解 (<literal>norm(A*X-B)</literal>を最小化する唯一の
40             <literal>X</literal>が存在)となります.
41             <literal>A</literal> が列フルランクでない場合, 最小二乗解は唯一ではなくなり,
42             <literal>X=A\B</literal>は一般に最小ノルム解ではなくなります
43             (最小ノルム解は <literal>X=pinv(A)*B</literal>です).
44         </para>
45         <para>
46             <literal>A.\B</literal>  は<literal>(i,j)</literal> エントリが
47             <literal>A(i,j)\B(i,j)</literal>となる行列となります.
48             <literal>A.\B</literal> は
49             <literal>A*ones(B).\B</literal> (または <literal>A.\(B*ones(A))</literal>
50             と等価になります.
51         </para>
52         <para>
53             <literal>A\.B</literal>  は定義されていない演算子です.
54             この演算子は, <literal>*</literal> または <literal>/</literal> のように
55             新しい演算子を定義する際に使用できます
56             (<link linkend="overloading">オーバーロード</link>参照).
57         </para>
58     </refsection>
59     <refsection>
60         <title>例</title>
61         <programlisting role="example"><![CDATA[
62 A=[
63    9.   -36.    30.
64   -36.   192.  -180.
65    30.  -180.   180.
66 ];
67 b=[
68    3.
69   -24.
70    30.
71 ];
72 x=A\b
73 A*x-b // ゼロに近い
74 A=rand(3,2);
75 b=[1;1;1];
76 x=A\b;
77 y=pinv(A)*b;
78 x-y
79 A=rand(2,3);b=[1;1];
80 x=A\b;
81 y=pinv(A)*b;
82 x-y, A*x-b, A*y-b
83 // ランク落ちの場合
84 A=rand(3,1)*rand(1,2);
85 b=[1;1;1];
86 x=A\b;
87 y=pinv(A)*b;
88 A*x-b, A*y-b
89 A=rand(2,1)*rand(1,3);
90 b=[1;1];
91 x=A\b;
92 y=pinv(A)*b;
93 A*x-b, A*y-b
94 // 複数の線形ソルバのベンチマーク
95 [A,descr,ref,mtype] = ReadHBSparse(SCI+..
96    "/modules/umfpack/examples/bcsstk24.rsa");
97 b = zeros(size(A,1),1);
98 tic();
99 res = umfpack(A,'\',b);
100 mprintf('\nTime with umfpack: %.3f\n',toc());
101 tic();
102 res = linsolve(A,b);
103 mprintf('\ntime with linsolve: %.3f\n',toc());
104 tic();
105 res = A\b;
106 mprintf('\ntime with backslash: %.3f\n',toc());
107  ]]></programlisting>
108     </refsection>
109     <refsection role="see also">
110         <title>参照</title>
111         <simplelist type="inline">
112             <member>
113                 <link linkend="slash">slash</link>
114             </member>
115             <member>
116                 <link linkend="inv">inv</link>
117             </member>
118             <member>
119                 <link linkend="pinv">pinv</link>
120             </member>
121             <member>
122                 <link linkend="percent">percent</link>
123             </member>
124             <member>
125                 <link linkend="ieee">ieee</link>
126             </member>
127             <member>
128                 <link linkend="linsolve">linsolve</link>
129             </member>
130             <member>
131                 <link linkend="umfpack">umfpack</link>
132             </member>
133         </simplelist>
134     </refsection>
135     <refsection>
136         <title>履歴</title>
137         <revhistory>
138             <revision>
139                 <revnumber>5.4.1</revnumber>
140                 <revremark>バックスラッシュの条件数の閾値が増加しました.</revremark>
141             </revision>
142         </revhistory>
143     </refsection>
144 </refentry>