[doc] misc. fix & improvements
[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"
3           xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML"
4           xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org"
5           xml:lang="ru" xml:id="backslash">
6     <refnamediv>
7         <refname>обратный слэш (\)</refname>
8         <refpurpose>(\) левое матричное деление.</refpurpose>
9     </refnamediv>
10     <refsynopsisdiv>
11         <title>Синтаксис</title>
12         <synopsis>X=A\B</synopsis>
13     </refsynopsisdiv>
14     <refsection>
15         <title>Описание</title>
16         <para>
17             Обратный слэш означает левое матричное деление.
18             <code>X=A\B</code> является решением для <code>A*X=B</code>.
19         </para>
20         <para>
21             Если <literal>A</literal> - квадратная и невырожденная, то  <code>X=A\B</code>
22             (уникально определённая) эквивалентно <code>X=inv(A)*B</code> в точном арифметическом смысле, однако вычисления гораздо точнее и дешевле в арифметике с плавающей запятой.
23             Следовательно, чтобы вычислить решение линейной системы уравнений <code>A*X=B</code>,
24             следует использовать оператор "обратный слэш", а функцию  <function>inv</function> не следует использовать.
25         </para>
26         <para>
27             В случае, когда <literal>A</literal> - квадратная матрица,
28             решение <literal>X</literal> может быть вычислено
29             либо через LU-разложение, либо через программу линейного
30             решения по методу наименьших квадратов.
31             Если число обусловленности матрицы <literal>A</literal>
32             меньше, чем <code>1/(10*%eps)</code> (то есть, если
33             <literal>A</literal> хорошо обусловлена),
34             то используется LU-разложение с перестановками строк матрицы.
35             Если нет (то есть, если <literal>A</literal> плохо
36             обусловлена), то <literal>X</literal> является решением с
37             минимальной нормой, которое минимизирует
38             <literal>||A*X-B||</literal> используя полное ортогональное
39             разложение <literal>A</literal> (то есть
40             <literal>X</literal> - это решение линейной задачи по методу
41             наименьших квадратов).
42         </para>
43         <para>
44             Если <literal>A</literal> не квадратная, то <literal>X</literal> является решением наименьших квадратов,
45             т.е. <code>norm(A*X-B)</code> является минимальной (эвклидова норма). Если ранг матрицы <literal>A</literal>
46             полный, то решение наименьших квадратов, <code>X=A\B</code>, является уникально
47             определённым (есть уникальное <literal>X</literal>, которое минимизирует <code>norm(A*X-B)</code>).
48             Если ранг матрицы <literal>A</literal> неполный, то решение наименьших квадратов не является уникальным,
49             и <code>X=A\B</code>, в общем, не является решением с минимальной нормой (решение минимальной
50             нормы равно  <code>X=pinv(A)*B</code>).
51         </para>
52         <para>
53             <code>A.\B</code> является матрицей с <literal>(i,j)</literal>-тым элементом, равным <literal>A(i,j)\B(i,j)</literal>.
54             Если <literal>A</literal> (или <literal>B</literal>) является скаляром, то <code>A.\B</code> эквивалентно
55             <code>A*ones(B).\B</code> (или <code>A.\(B*ones(A))</code>.
56         </para>
57         <para>
58             <literal>A\.B</literal> является оператором без предопределённого значения. Он может использоваться
59             для определения нового оператора (см. <link linkend="overloading">перегрузку</link>) с тем же самым приоритетом что и <literal>*</literal> или <literal>/</literal>.
60         </para>
61     </refsection>
62     <refsection>
63         <title>Примеры</title>
64         <programlisting role="example"><![CDATA[
65 A=[
66    9.   -36.    30.
67   -36.   192.  -180.
68    30.  -180.   180.
69 ];
70 b=[
71    3.
72   -24.
73    30.
74 ];
75 x=A\b
76 A*x-b // близко к нулю
77
78 A=rand(3,2);
79 b=[1;1;1];
80 x=A\b;
81 y=pinv(A)*b;
82 x-y
83 A=rand(2,3);b=[1;1];
84 x=A\b;
85 y=pinv(A)*b;
86 x-y, A*x-b, A*y-b
87
88 // если ранг неполный
89 A=rand(3,1)*rand(1,2);
90 b=[1;1;1];
91 x=A\b;
92 y=pinv(A)*b;
93 A*x-b, A*y-b
94 A=rand(2,1)*rand(1,3);
95 b=[1;1];
96 x=A\b;
97 y=pinv(A)*b;
98 A*x-b, A*y-b
99
100 // Проверка эффективности нескольких программ решения систем линейных уравнений
101
102 [A,descr,ref,mtype] = ReadHBSparse(SCI+"/modules/umfpack/demos/bcsstk24.rsa");
103
104 b = zeros(size(A,1),1);
105
106 tic();
107 res = umfpack(A,'\',b);
108 mprintf('\nвремя, необходимое для решения системы с помощью umfpack: %.3f\n',toc());
109
110 tic();
111 res = linsolve(A,b);
112 mprintf('\nвремя, необходимое для решения системы с помощью linsolve: %.3f\n',toc());
113
114 tic();
115 res = A\b;
116 mprintf('\nвремя, необходимое для решения системы с помощью оператора ""обратный слэш"": %.3f\n',toc());
117  ]]></programlisting>
118     </refsection>
119     <refsection role="see also">
120         <title>Смотрите также</title>
121         <simplelist type="inline">
122             <member>
123                 <link linkend="slash">слэш</link>
124             </member>
125             <member>
126                 <link linkend="inv">inv</link>
127             </member>
128             <member>
129                 <link linkend="pinv">pinv</link>
130             </member>
131             <member>
132                 <link linkend="percent">процент</link>
133             </member>
134             <member>
135                 <link linkend="ieee">ieee</link>
136             </member>
137             <member>
138                 <link linkend="linsolve">linsolve</link>
139             </member>
140             <member>
141                 <link linkend="umfpack">umfpack</link>
142             </member>
143         </simplelist>
144     </refsection>
145     <refsection>
146         <title>История</title>
147         <revhistory>
148             <revision>
149                 <revnumber>5.5.0</revnumber>
150                 <revremark>
151                   Пороговый уровень, который переключает при вычислении A\B между исключением по
152                   методу Гаусса и перестановкой строк матрицы, уменьшен от sqrt(eps) до eps.
153                 </revremark>
154             </revision>
155         </revhistory>
156     </refsection>
157 </refentry>