*Bug #14330 fixed - luget was really slow.
[scilab.git] / scilab / modules / core / help / ru_RU / 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="ru" xml:id="backslash">
3     <refnamediv>
4         <refname>обратный слэш (\)</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             <code>X=A\B</code> является решением для <code>A*X=B</code>.
16         </para>
17         <para>
18             Если <literal>A</literal> - квадратная и невырожденная, то  <code>X=A\B</code>
19             (уникально определённая) эквивалентно <code>X=inv(A)*B</code> в точном арифметическом смысле, однако вычисления гораздо точнее и дешевле в арифметике с плавающей запятой.
20             Следовательно, чтобы вычислить решение линейной системы уравнений <code>A*X=B</code>,
21             следует использовать оператор "обратный слэш", а функцию  <function>inv</function> не следует использовать.
22         </para>
23         <para>
24             В случае, когда <literal>A</literal> - квадратная матрица,
25             решение <literal>X</literal> может быть вычислено
26             либо через LU-разложение, либо через программу линейного
27             решения по методу наименьших квадратов.
28             Если число обусловленности матрицы <literal>A</literal>
29             меньше, чем <code>1/(10*%eps)</code> (то есть, если
30             <literal>A</literal> хорошо обусловлена),
31             то используется LU-разложение с перестановками строк матрицы.
32             Если нет (то есть, если <literal>A</literal> плохо
33             обусловлена), то <literal>X</literal> является решением с
34             минимальной нормой, которое минимизирует
35             <literal>||A*X-B||</literal> используя полное ортогональное
36             разложение <literal>A</literal> (то есть
37             <literal>X</literal> - это решение линейной задачи по методу
38             наименьших квадратов).
39         </para>
40         <para>
41             Если <literal>A</literal> не квадратная, то <literal>X</literal> является решением наименьших квадратов,
42             т.е. <code>norm(A*X-B)</code> является минимальной (эвклидова норма). Если ранг матрицы <literal>A</literal>
43             полный, то решение наименьших квадратов, <code>X=A\B</code>, является уникально
44             определённым (есть уникальное <literal>X</literal>, которое минимизирует <code>norm(A*X-B)</code>).
45             Если ранг матрицы <literal>A</literal> неполный, то решение наименьших квадратов не является уникальным,
46             и <code>X=A\B</code>, в общем, не является решением с минимальной нормой (решение минимальной
47             нормы равно  <code>X=pinv(A)*B</code>).
48         </para>
49         <para>
50             <code>A.\B</code> является матрицей с <literal>(i,j)</literal>-тым элементом, равным <literal>A(i,j)\B(i,j)</literal>.
51             Если <literal>A</literal> (или <literal>B</literal>) является скаляром, то <code>A.\B</code> эквивалентно
52             <code>A*ones(B).\B</code> (или <code>A.\(B*ones(A))</code>.
53         </para>
54         <para>
55             <literal>A\.B</literal> является оператором без предопределённого значения. Он может использоваться
56             для определения нового оператора (см. <link linkend="overloading">перегрузку</link>) с тем же самым приоритетом что и <literal>*</literal> или <literal>/</literal>.
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 // close to zero
74
75 A=rand(3,2);
76 b=[1;1;1];
77 x=A\b;
78 y=pinv(A)*b;
79 x-y
80 A=rand(2,3);b=[1;1];
81 x=A\b;
82 y=pinv(A)*b;
83 x-y, A*x-b, A*y-b
84
85 // если ранг неполный
86 A=rand(3,1)*rand(1,2);
87 b=[1;1;1];
88 x=A\b;
89 y=pinv(A)*b;
90 A*x-b, A*y-b
91 A=rand(2,1)*rand(1,3);
92 b=[1;1];
93 x=A\b;
94 y=pinv(A)*b;
95 A*x-b, A*y-b
96
97 // Проверка эффективности нескольких программ решения систем линейных уравнений
98
99 [A,descr,ref,mtype] = ReadHBSparse(SCI+"/modules/umfpack/demos/bcsstk24.rsa");
100
101 b = zeros(size(A,1),1);
102
103 tic();
104 res = umfpack(A,'\',b);
105 mprintf('\nвремя, необходимое для решения системы с помощью umfpack: %.3f\n',toc());
106
107 tic();
108 res = linsolve(A,b);
109 mprintf('\nвремя, необходимое для решения системы с помощью linsolve: %.3f\n',toc());
110
111 tic();
112 res = A\b;
113 mprintf('\nвремя, необходимое для решения системы с помощью оператора ""обратный слэш"": %.3f\n',toc());
114  ]]></programlisting>
115     </refsection>
116     <refsection role="see also">
117         <title>Смотрите также</title>
118         <simplelist type="inline">
119             <member>
120                 <link linkend="slash">слэш</link>
121             </member>
122             <member>
123                 <link linkend="inv">inv</link>
124             </member>
125             <member>
126                 <link linkend="pinv">pinv</link>
127             </member>
128             <member>
129                 <link linkend="percent">процент</link>
130             </member>
131             <member>
132                 <link linkend="ieee">ieee</link>
133             </member>
134             <member>
135                 <link linkend="linsolve">linsolve</link>
136             </member>
137             <member>
138                 <link linkend="umfpack">umfpack</link>
139             </member>
140         </simplelist>
141     </refsection>
142     <refsection>
143         <title>History</title>
144         <revhistory>
145             <revision>
146                 <revnumber>5.4.1</revnumber>
147                 <revremark>
148                     Пороговый уровень для обусловливания в обратном слэше увеличен.
149                 </revremark>
150             </revision>
151         </revhistory>
152     </refsection>
153 </refentry>