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ヘルプ >> Scilab > Scilab keywords > backslash

backslash

(\) 左行列除算.

呼び出し手順

X=A\B

説明

バックスラッシュは左行列除算を定義します. X=A\BA*X=Bの解です.

A が正方で非特異の場合, X=A\BX=inv(A)*B と等価です.しかし,計算はより正確で浮動小数点演算の負荷は小さくなります. すなわち,線形システムの方程式A*X=Bの解を計算する際には, バックスラッシュ演算子を使用するべきであり,inv関数の 使用は避けるべきです.

Aが正方の場合, 解Xは LU分解または線形最小二乗ソルバのどちらかにより計算できます. Aの条件数が1/(10*%eps)よりも小さい場合 (つまり,Aの条件が良い場合),ピボット選択付きLU分解が使用されます. そうでない場合(Aの条件が悪い場合), XAの完全直交分解を用いて ||A*X-B||を最小化する最小ノルム解となります (すなわち,Xは線形最小二乗問題の解です).

A が正方でない場合, X は最小二乗解となります. すなわち, norm(A*X-B) は,最小値 (ユークリッドノルム)となります. A が列フルランクの場合,最小二乗解, X=A\B, は 唯一の解 (norm(A*X-B)を最小化する唯一の Xが存在)となります. A が列フルランクでない場合, 最小二乗解は唯一ではなくなり, X=A\Bは一般に最小ノルム解ではなくなります (最小ノルム解は X=pinv(A)*Bです).

A.\B(i,j) エントリが A(i,j)\B(i,j)となる行列となります. A.\BA*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/examples/bcsstk24.rsa");

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

tic();
res = umfpack(A,'\',b);
mprintf('\nTime with umfpack: %.3f\n',toc());

tic();
res = linsolve(A,b);
mprintf('\ntime with linsolve: %.3f\n',toc());

tic();
res = A\b;
mprintf('\ntime with backslash: %.3f\n',toc());

参照

  • slash — (/) 右除算およびフィードバック
  • inv — 逆行列
  • pinv — 擬似逆行列
  • percent — (%) 特殊文字
  • ieee — 浮動小数点例外モードを設定
  • linsolve — 線形方程式ソルバ
  • umfpack — solve sparse linear system

履歴

バージョン記述
5.4.1 バックスラッシュの条件数の閾値が増加しました.
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Oct 02 13:58:18 CEST 2014