rref
行の階段型への変換 (ガウス ジョルダン消去)
説明
例
行列を作成し、行簡約階段形を計算します。この形式では、行列の各列のピボット位置に先行する 1 があります。
A = magic(3)
A = 3×3
8 1 6
3 5 7
4 9 2
RA = rref(A)
RA = 3×3
1 0 0
0 1 0
0 0 1
3 行 3 列の魔方陣行列はフル ランクであるため、行簡約階段形は単位行列です。
ここで、4 行 4 列の魔方陣行列の行簡約階段形を計算します。非ゼロのピボット列を返すために 2 つの出力を指定します。この行列はランク落ちであるため、結果は単位行列ではありません。
B = magic(4)
B = 4×4
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
[RB,p] = rref(B)
RB = 4×4
1 0 0 1
0 1 0 3
0 0 1 -3
0 0 0 0
p = 1×3
1 2 3
拡大行列に対してガウス ジョルダン消去法を使用して線形システムを解き、逆行列を計算します。これらの手法は主として学術的観点からのものであり、こうした値の計算には、より効率的で数値的に安定した方法があります。
3 行 3 列の魔方陣行列を作成します。行列の最後に列をさらに追加します。拡大行列は、 に対応する余分な列をもつ線形システム を表します。
A = magic(3); A(:,4) = [1; 1; 1]
A = 3×4
8 1 6 1
3 5 7 1
4 9 2 1
A
の行簡約階段形を計算します。R
にインデックスを付けて、線形システムに対する解が含まれている余分な (拡大された) 列にあるエントリを抽出します。
R = rref(A)
R = 3×4
1.0000 0 0 0.0667
0 1.0000 0 0.0667
0 0 1.0000 0.0667
x = R(:,end)
x = 3×1
0.0667
0.0667
0.0667
この線形システムを解くより効率的な方法は、バックスラッシュ演算子 x = A\b
を使用することです。
同様の魔方陣行列を作成しますが、今回は同じサイズの単位行列を終了列に追加します。
A = [magic(3) eye(3)]
A = 3×6
8 1 6 1 0 0
3 5 7 0 1 0
4 9 2 0 0 1
A
の行簡約階段形を計算します。この形式では、余分な列には 3 行 3 列の魔方陣行列の逆行列が含まれます。
R = rref(A)
R = 3×6
1.0000 0 0 0.1472 -0.1444 0.0639
0 1.0000 0 -0.0611 0.0222 0.1056
0 0 1.0000 -0.0194 0.1889 -0.1028
inv_A = R(:,4:end)
inv_A = 3×3
0.1472 -0.1444 0.0639
-0.0611 0.0222 0.1056
-0.0194 0.1889 -0.1028
逆行列を計算するより効率的な方法は inv(A)
を使用することです。
4 つの方程式と 3 つの未知数からなる線形連立方程式について検討します。
連立方程式を表す拡大行列を作成します。
A = [1 1 5; 2 1 8; 1 2 7; -1 1 -1]; b = [6 8 10 2]'; M = [A b];
システムを行簡約階段形で表すには、rref
を使用します。
R = rref(M)
R = 4×4
1 0 3 2
0 1 2 4
0 0 0 0
0 0 0 0
R
の最初の 2 行には、 の観点から と を表す方程式が含まれます。次の 2 つの行は、右側のベクトルに適合する解が少なくとも 1 つ存在することを示しています (そうでない場合、いずれかの方程式が を読み取ります)。3 番目の列にはピボットが含まれていないため、 は独立変数です。そのため、 および には解が無限に存在し、 は自由に選択できます。
たとえば、 である場合、 および です。
数値的な観点からは、この連立方程式を解くより効率的な方法は x0 = A\b
を使用することです。これは、(方形行列 A
に対して) 最小二乗解を計算します。この場合、rank(A)
が未知数の数と等しいか確認することで、norm(A*x0-b)/norm(b)
を使用した解決法の正確性と、解の一意性を確認できます。複数の解が存在する場合、それらの形式はすべて になります。ここで、 はヌル空間 null(A)
であり、 は自由に選択できます。
入力引数
入力行列。
データ型: single
| double
複素数のサポート: あり
ピボット許容誤差。スカラーとして指定します。ピボット列内の最大要素 (絶対値) が許容誤差未満である場合、その列はゼロとして除外されます。これにより、許容誤差より小さい非ゼロのピボット要素を使用した除算と乗算が回避されます。
データ型: single
| double
出力引数
制限
通常、
rank
、orth
、null
は高速でより正確に行列のランクと基底ベクトルを計算します。線形システムを解くには
mldivide
を使用することを推奨します。
詳細
部分ピボットは、ピボット列で最大の絶対値をもつ列要素を選択し、この要素がピボット位置 (行内で一番左にある非ゼロの要素) にくるように行列の行を入れ替える手法です。
たとえば、下の行列では、アルゴリズムはまず 1 列目の最大値 ((2,1) の位置にある値 1.1
) を特定し、この値が (1,1) の位置に表示されるように、第 1 列と第 2 列全体を入れ替えます。
ガウスの消去法で部分ピボットを使用することで、計算の丸め誤差が軽減されます (ただし、なくすことはできません)。
次の条件が満たされる場合、行列は "行階段形" です。
すべての非ゼロ行がすべてゼロの行より上にある。
各行の最初の係数が厳密に、その上の行内の係数の右側にある。
行階段形の行列の例を示します。
"行簡約階段形" の追加要件は次のとおりです。
最初の係数はすべて 1 でなければならず、その列の中で唯一の非ゼロでなければならない。
多くの場合、単位行列は行簡約階段形に関連付けられていますが、他の形式も使用できます。行簡約階段形をとる別の行列の例です。
アルゴリズム
関数 rref
は、部分ピボットを使ってガウス ジョルダン消去法を実装します。max(size(A))*eps*norm(A,inf)
の既定の許容誤差は、丸め誤差を減らすためにゼロとして除外された列の要素が無視できるかどうかを判定します。
拡張機能
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)