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