ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

mldivide, \

x に対する線形方程式 Ax = B の求解

構文

  • x = A\B
  • x = mldivide(A,B)

説明

x = A\B は線形方程式 A*x = B を解きます。行列 A と行列 B の行数は同じでなければなりません。MATLAB® は、A のスケールが不適当またはほぼ特異値の場合は警告メッセージを表示しますが、計算は関係なく実行します。

  • A がスカラーの場合、A\BA.\B と等価です。

  • Ann 列の正方行列、Bn 行の行列である場合、x = A\B は存在する場合は A*x = B の方程式の解となります。

  • Am ~= n である mn 列の矩形行列で、Bm 行の行列の場合、A\BA*x= B の方程式の最小二乗解を返します。

x = mldivide(A,B)x = A\B 実行の代替方法ですが、まれにしか使用されません。これは、クラスの演算子のオーバーロードを有効にします。

すべて展開する

方程式

単純な線形方程式 A*x = B を解きます。

A = magic(3);
B = [15; 15; 15];
x = A\B
x =

    1.0000
    1.0000
    1.0000

特異行列を扱う線形方程式

特異行列 A を含む線形方程式 A*x = b を解きます。

A = magic(4);
b = [34; 34; 34; 34];
x = A\b
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND =
1.306145e-17. 

x =

    1.5000
    2.5000
   -0.5000
    0.5000

rcond の範囲が 0eps の間である場合、MATLAB によって特異値に近い場合の警告が表示されますが、計算は続行されます。悪条件の行列を扱う場合、残差 (b-A*x) が比較的小さい値であっても信頼できない解となる可能性があります。この例では、rcond が小さい値であっても、残差のノルムは 0 であり、厳密解が得られます。

rcond0 に等しい場合、特異値の警告が表示されます。

A = [1 0; 0 0];
b = [1; 1];
x = A\b
Warning: Matrix is singular to working precision. 

x =

     1
   Inf

この場合、ゼロ除算により Inf や NaN の計算が発生し、計算結果が信頼できないものになります。

劣決定系の最小二乗解

線形方程式 A*x = b を解きます。

A = [1 2 0; 0 4 3];
b = [8; 18];
x = A\b
ans =

         0
    4.0000
    0.6667

スパース行列を扱う線形方程式

スパース行列を使って単純な線形方程式を解きます。

以下の行列方程式 A*x = B を考えます。

A = sparse([0 2 0 1 0; 4 -1 -1 0 0; 0 0 0 3 -6; -2 0 0 0 2; 0 0 4 2 0]);
B = sparse([8; -1; -18; 8; 20]);
x = A\B
x =

   (1,1)       1.0000
   (2,1)       2.0000
   (3,1)       3.0000
   (4,1)       4.0000
   (5,1)       5.0000

入力引数

すべて展開する

A - 係数行列ベクトル | 非スパース行列 | スパース行列

ベクトル、非スパース行列またはスパース行列として指定される、係数行列。Am 個の行をもつ場合、Bm 個の行をもたなければなりません。

データ型:single | double
複素数のサポート: あり

B - 右辺ベクトル | 非スパース行列 | スパース行列

右辺を、ベクトル、非スパース行列またはスパース行列として指定します。Bm 個の行をもつ場合、Am 個の行をもたなければなりません。

データ型:single | double
複素数のサポート: あり

出力引数

すべて展開する

x - 解ベクトル | 非スパース行列 | スパース行列

ベクトル、非スパース行列またはスパース行列として返される解。Amn 列の行列で Bmp 列の行列の場合、x は、np 列の行列になります。これは p==1 の場合を含みます。

x がスパース行列となるのは、AB が両方ともスパース行列の場合のみです。

詳細

すべて展開する

ヒント

  • A が正方行列の場合、A\B はおおよそ inv(A)*B に等しくなりますが、MATLAB では信頼性がより高い、別の方法で A\B を処理します。

  • A のランクが A の列数よりも小さい場合には、x = A\B は最小ノルム解である必要はありません。計算時間が長くかかりますが x = pinv(A)*B は最小ノルムの最小二乗解を計算します。

  • 非スパースな特異値入力に対しては、関数 linsolve を使えば最小二乗解を計算できます。

参考

| | | | | | | | |

この情報は役に立ちましたか?