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

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

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

linsolve

線形システム方程式の求解

構文

X = linsolve(A,B)
X = linsolve(A,B,opts)

説明

X = linsolve(A,B) は、線形方程式 A*X = B を解きます。A が正方な場合は、部分的なピボットで LU 分解を使用し、そうでない場合は、列ピボットで QR 分解を使用します。A の行数は、B の行数と等しくなる必要があります。A が m 行 n 列で B が m 行 k 列の場合、X は n 行 k 列です。関数 linsolve は、A が正方で、悪条件な場合または A が正方ではなく、ランク落ちの場合は、警告を返します。

[X, R] = linsolve(A,B) は、上記の警告を非表示にし、R を返します。ここで、RA が正方の場合、A の条件数の逆数になり、A が正方でない場合、A のランクになります。

X = linsolve(A,B,opts) は、行列 A のプロパティに与えられる最適なソルバーを使用して、線形方程式 A*X = B または A'*X = B を解きます。この最適なソルバーは、ユーザーが opts で指定します。たとえば、A が上三角行列の場合、関数 linsolve が上三角行列に適したソルバーを使用するように、opts.UT = true を設定できます。Aopts にプロパティをもつ場合、関数 linsolve は、関数 mldivide より計算が速くなります。これは A が指定されたプロパティをもつかどうかを検証するためのテストを関数 linsolve が実行しないためです。

    メモ:   Aopts で指定されるプロパティをもたない場合、関数 linsolve は、不当な結果を返し、エラー メッセージを返しません。A が指定されたプロパティをもつかどうかわからない場合は、代わりに関数 mldivide を使用してください。

    関数 mldivide を使用することとは対照的に、三角行列に関数 linsolve を使用する計算速度の利点はありません。

opts 構造体の TRANSA フィールドは、ユーザーが解こうとする線形システムの形式を指定します。

  • opts.TRANSA = false を設定した場合、linsolve(A,B,opts)A*X = B を解きます。

  • opts.TRANSA = true を設定した場合、linsolve(A,B,opts)A'*X = B を解きます。

次の表は、opts のすべてのフィールドとそれに対応する行列プロパティを示します。opts のフィールド値は、logical になる必要があります。すべてのフィールドの既定値は、false です。

フィールド名

行列プロパティ

LT

下三角行列

UT

上三角行列

UHESS

上 Hessenberg 行列

SYM

実数対称行列または複素 Hermitian 行列

POSDEF

正定行列

RECT

一般的な矩形行列

TRANSA

複素共役転置 — 関数が A*X = B または A'*X = B のどちらを解くかを指定します。

次の表は、関数 linsolve に有効な opts 内のフィールド値のすべての組み合わせを示しています。true/false のエントリは、関数 linsolve が true または false を受け入れることを示します。

LT

UT

UHESS

SYM

POSDEF

RECT

TRANSA

true

false

false

false

false

true/false

true/false

false

true

false

false

false

true/false

true/false

false

false

true

false

false

false

true/false

false

false

false

true

true/false

false

true/false

false

false

false

false

false

true/false

true/false

以下のコードは、上三角行列 A に関数 mldividelinsolve を使用して、方程式 A'x = b を解きます。

A = triu(rand(5,3)); x = [1 1 1 0 0]'; b = A'*x;
y1 = (A')\b         
opts.UT = true; opts.TRANSA = true;
y2 = linsolve(A,b,opts)

y1 =

    1.0000
    1.0000
    1.0000
         0
         0


y2 =

    1.0000
    1.0000
    1.0000
         0
         0

    メモ:   異なるプロパティをもつ行列を扱う場合、行列の各タイプに options 構造体 (たとえば、opts_sym) を作成することが有用です。この方法は、異なるタイプの行列 A で方程式を解く場合でもフィールドを変更する必要がありません。

参考

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