Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語 -

Please note that the recommended version of Scilab is 6.0.1. This page might be outdated.
See the recommended documentation of this function

Scilab help >> Scilab > Ключевые слова Scilab > backslash (\)

backslash (\)

(\) левое матричное деление.

Последовательность вызова

x=A\b

Описание

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

Если A -- квадратная и невырожденная, то x=A\b (уникально определённая) эквивалентно x=inv(A)*b (но вычисления гораздо дешевле).

Если 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 является оператором без предопределённого значения. Он может использоваться для определения нового оператора (см. overloading) с тем же самым приоритетом что и * или /.

Примеры

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/examples/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());

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

  • слэш — (/) правое деление и обратная связь
  • inv — matrix inverse
  • pinv — pseudoinverse
  • процент — (%) специальный символ
  • ieee — установка режима исключения с плавающей запятой
  • linsolve — linear equation solver
  • umfpack — solve sparse linear system
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon Oct 01 17:40:57 CEST 2012