LinearAlgebra[LinearSolve] - 連立 1 次方程式 A . x = b を解きます
使い方
LinearSolve(A, B, m, t, c, ip, outopts, methopts)
パラメータ
A - 行列またはリスト
B - (オプション) 行列または列ベクトル
m - (オプション) method = name の形の等式、ただし name は 'none', 'solve', 'subs', 'Cholesky', 'LU', 'QR', 'hybrid', 'SparseLU', 'SparseDirect', 'SparseIterative' のいずれか。使用する方法
t - (オプション) free = name の形の等式; パラメータ表示された解で自由変数に対して使うための基本の名前
c - (オプション) BooleanOpt(conjugate); コレスキーまたは QR 分解法の場合にエルミート転置を使用するかどうかを指定する
ip - (オプション) BooleanOpt(inplace); 出力が2つ目の引数 B を上書きするかどうかを指定する
outopts - (オプション) outputoptions = list の形の等式; 結果オブジェクトに対するコンストラクタオプション
methopts - (オプション) methodoptions = list の形の等式; 解法をコントロールするためのオプション
|
説明
|
|
•
|
LinearSolve 関数は連立 1 次方程式 A . x = B を満たすベクトル x を返します。
|
|
B が行列またはベクトルとして呼出し手順に含まれていると、返されるオブジェクトは同じ型を持ちます。
|
|
B が省略されると、連立 1 次方程式は拡大線形系 A|B とみなさした最初の引数から解釈されます。ただし、B は列ベクトルです。
|
|
返されるオブジェクトの次元は行列方程式 A . x = B と一致します。A が m x n 次、B が m x p 次ならば、解 x は n x p になります。
|
|
B に応じた適切な解 x が計算されるためには、n は m 以上でなければなりません。返される解は連立 1 次方程式 A . x = B を満たします。
|
•
|
method='subs' が呼び出し手順で含まれるならば、最初の引数は三角型の行列でなければなりません。それが上三角行列ならば、その行列は上側階段形式であると見なされ、BackwardSubstitute を用いて後退代入が実行されます。行列が下三角行列ならば、 ForwardSubstitute を用いて前進代入が実行されます。
|
•
|
最初の引数が list ならば、リストの要素はある前分解のために行列 A の行列因子として解釈されます。これらの因子は、以下のように一意的に解釈されます。
|
|
* ベクトルのリスト、行列の項, [ipiv,LU] は、オプション output='NAG' で LUDecomposition を呼び出した結果として解釈されます。最初の部分はピボットベクトルと扱われ、2 つ目の部分は上側におかれたLU因子として扱われます。含まれるオプションは method=LU です。
|
|
* 行列のリスト、行列、行列の項、[P,L,U] はオプション output=['P','L','U'] で LUDecomposition を呼び出した結果として解釈されます。含まれるオプションは method=LU です。
|
|
* 行列の項のリスト、[L] はコレスキー分解の結果として解釈されます。そのデータは行列の下三角部分として取られます。含まれるオプションは method=Cholesky です。
|
|
* 行列のリスト、ベクトルの項 [QR,tau] はオプション output='NAG' で QRDecomposition を呼び出した結果として解釈されます。含まれるオプションは method=QR です。
|
|
* 行列のリスト、行列の項 [Q,R] はオプション output=['Q','R'] で QRDecomposition を呼び出した結果として解釈されます。含まれるオプションは method=QR です。
|
|
疎行列の方法はあらかじめ分解された入力に用いることはできません。
|
•
|
method='SparseIterative' オプションは、sparse[lower] または sparse[upper] の記憶モードを持つ実対称行列、または、複素エルミート行列に対応します。また、sparse の記憶モードを持つ実非対称、または、複素非対称行列にも対応します。これは、そのような行列が与えられているときのデフォルトの方法です。method='SparseDirect' オプションは、記憶モード sparse を持つ実数の行列に対応します。
|
•
|
method='hybrid' オプションは、ハードウェア浮動小数点モードとソフトウェア浮動小数点モードの両方を使い分けた LU 分解に基づくソルバを提供します。これは、Digits を高く設定するとより効率的なソルバーとなります。ハードウェア浮動小数点モードで LU 分解を計算し、その後、ソフトウェア浮動小数点モードで繰り返し改良を行います。
|
•
|
inplace オプション (ip) は結果がどこに返されるかを決定します。非拡大行列の場合には、inplace=true が呼び出し手順に含まれていると直接 2 番目の引数に対して計算が実行されます。inplace オプションは拡大行列に対してや、method='solve' の下では使うことができません。
|
|
条件 inplace=true は inplace と略記することができます。
|
|
inplace option は用心して使用しなければなりません、なぜなら、演算が失敗した場合、もとの引数は壊れてしまうかもしれないからです。
|
•
|
conjugate オプション (c) はコレスキーまたは QR 分解法を使用した方程式の解に HermitianTranspose を使うかどうかを指定します。デフォルトは使うようになっています。条件 conjugate=true は conjugate と略記することができます。
|
•
|
outputoptions オプション (outopts) はその結果の構成に対して追加情報 (readonly, shape, storage, order,datatype, attributes) を提供します。
|
•
|
methodoptions オプション (methopts) はその解法の振る舞いをコントロールする方法を提供します。現在、利用できる唯一のオプションは method=SparseIterative が使えます。詳細は、ヘルプ、 Sparse Iterative Solver Options を参照して下さい。
|
•
|
inplace と outputoptions オプションは同時には使えません。
|
|
|
例
|
|
>
|
with(LinearAlgebra):
M := <<1,1,1,4>|<1,1,-2,1>|<3,1,1,8>|<-1,1,-1,-1>|<0,1,1,0>>:
LinearSolve(M);
|
| (2.1) |
>
|
M[1..-1,1..-2] . % = M[1..-1,-1];
|
| (2.2) |
>
|
A := <<1,0,0>|<2,1,0>|<1,0,0>|<-1,-1,-3>>:
b := <2,-1,-9>:
LinearSolve(A, b, method='subs', free='s');
|
| (2.3) |
>
|
P := <<4,2,-1>|<2,4,3>|<-1,3,5>>:
z := <1,0,0>:
LinearSolve(P, z, method='Cholesky', inplace);
|
| (2.4) |
| (2.5) |
>
|
S := Matrix([[5,0,0,0,0,0],[0,2,-1,2,0,0],[0,0,3,0,0,0],[-2,0,0,1,1,0],
[1,0,0,1,2,3],[1,1,0,0,0,6]], datatype=float, storage=sparse):
t := Vector([15,12,18,3,-6,0], datatype=float):
LinearSolve(S, t, method='SparseIterative');
|
| (2.6) |
>
|
N := <<0,1,1,1,1>|<2,-2,0,-2,-3>|<0,0,1,1,3>|<-6,0,-3,-1,-3>|<2,2,2,2,4>>:
(q,r) := QRDecomposition(N, output=['Q','R']):
C := <<1,6,0,9,4>|<1,2,3,4,5>>:
LinearSolve([q,r], C);
|
| (2.7) |
| (2.8) |
|
|