Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2023.0.0 - Русский


обратный слэш (\)

(\) левое матричное деление: точное решение или решение по методу наименьших квадратов

Синтаксис

X = A \ B

Описание

Обратный слэш означает левое матричное деление. X=A\B является решением для A*X=B.

Если A - квадратная и невырожденная, то X=A\B (уникально определённая) эквивалентно X=inv(A)*B в точном арифметическом смысле, однако вычисления гораздо точнее и дешевле в арифметике с плавающей запятой. Следовательно, чтобы вычислить решение линейной системы уравнений A*X=B, следует использовать оператор "обратный слэш", а функцию inv не следует использовать.

В случае, когда A - квадратная матрица, решение X может быть вычислено либо через LU-разложение, либо через программу линейного решения по методу наименьших квадратов. Если число обусловленности матрицы A меньше, чем 1/(10*%eps) (то есть, если A хорошо обусловлена), то используется LU-разложение с перестановками строк матрицы. Если нет (то есть, если A плохо обусловлена), то X является решением с минимальной нормой, которое минимизирует ||A*X-B|| используя полное ортогональное разложение A (то есть X - это решение линейной задачи по методу наименьших квадратов).

Если A не квадратная, то X является решением наименьших квадратов, т.е. norm(A*X-B) является минимальной (эвклидова норма). Если ранг матрицы A полный, то решение наименьших квадратов, X=A\B, является уникально определённым (есть уникальное X, которое минимизирует norm(A*X-B)). Если ранг матрицы A неполный, то решение наименьших квадратов не является уникальным, и X=A\B, в общем, не является решением с минимальной нормой (решение минимальной нормы равно X=pinv(A)*B).

A.\B является матрицей с (i,j)-тым элементом, равным A(i,j)\B(i,j). Если A (или B) является скаляром, то A.\B эквивалентно A*ones(B).\B (или A.\(B*ones(A)).

A\.B является оператором без предопределённого значения. Он может использоваться для определения нового оператора (см. перегрузку) с тем же самым приоритетом что и * или /.

Примеры

A=[
   9.   -36.    30.
  -36.   192.  -180.
   30.  -180.   180.
];
b=[
   3.
  -24.
   30.
];
x=A\b
A*x-b // близко к нулю

A=rand(3,2);
b=[1;1;1];
x=A\b;
y=pinv(A)*b;
x-y
A=rand(2,3);b=[1;1];
x=A\b;
y=pinv(A)*b;
x-y, A*x-b, A*y-b

// если ранг неполный
A=rand(3,1)*rand(1,2);
b=[1;1;1];
x=A\b;
y=pinv(A)*b;
A*x-b, A*y-b
A=rand(2,1)*rand(1,3);
b=[1;1];
x=A\b;
y=pinv(A)*b;
A*x-b, A*y-b

// Проверка эффективности нескольких программ решения систем линейных уравнений

[A,descr,ref,mtype] = ReadHBSparse(SCI+"/modules/umfpack/demos/bcsstk24.rsa");

b = zeros(size(A,1),1);

tic();
res = umfpack(A,'\',b);
mprintf('\nвремя, необходимое для решения системы с помощью umfpack: %.3f\n',toc());

tic();
res = linsolve(A,b);
mprintf('\nвремя, необходимое для решения системы с помощью linsolve: %.3f\n',toc());

tic();
res = A\b;
mprintf('\nвремя, необходимое для решения системы с помощью оператора ""обратный слэш"": %.3f\n',toc());

Смотрите также

  • slash — (/) правое деление и обратная связь
  • lsq — линейное решение наименьших квадратов A*X=B с минимальной norm(X)
  • inv — matrix inverse
  • pinv — pseudoinverse
  • linsolve — linear equation solver
  • umfpack — solve sparse linear system
  • datafit — Non linear (constrained) parametric fit of measured (weighted) data
  • kron .\. — Kronecker left and right divisions
  • перегрузка — возможности перегрузки отображения, функций и операторов

История

ВерсияОписание
5.5.0 Пороговый уровень, который переключает при вычислении A\B между исключением по методу Гаусса и перестановкой строк матрицы, уменьшен от sqrt(eps) до eps.
Report an issue
<< процент Ключевые слова Scilab brackets [,;] >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Mar 07 09:28:36 CET 2023