обратный слэш (\)
(\) левое матричное деление: точное решение или решение по методу наименьших квадратов
Синтаксис
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 [,;] >> |