LinearSolve

LinearSolve[m,b]

行列方程式 m.x==b を解くx を求める.

LinearSolve[m]

異なる b に繰り返し適用できるLinearSolveFunction[]を生成する.

LinearSolve[a,b]

配列方程式 a.x==b を解く x を求める.

詳細とオプション

  • LinearSolveは,数値行列,記号行列,SparseArrayオブジェクトに使うことができる.
  • 引数 b はベクトルか行列のどちらかである. »
  • 行列 m は正方行列か矩形行列のどちらかである. »
  • LinearSolve[m]LinearSolveFunction[]は,同じ数値近似線形系を何度も解く効率的な方法を提供する.
  • LinearSolve[m,b]LinearSolve[m][b]と等価である.
  • 劣決定系において,LinearSolveは可能な解の1つを返す.Solveは一般解を返す. »
  • n1××nk×m 配列 an1××nk×d1××dl 配列 b について,LinearSolve[a,b]a.xb となるような m×d1××dl 配列 x を与える.
  • LinearSolveのオプションと設定値
  • Method Automatic使用するメソッド
    Modulus 0n を法として解くかどうか
    ZeroTestAutomaticいつ式がゼロであるかを判断する検定
  • ZeroTestオプションは,厳密行列および記号行列のみに使うことができる.
  • Method->Automaticのとき,メソッドは入力に従って自動的に選択される.
  • 厳密行列および記号行列についての明示的なMethod設定
  • "CofactorExpansion"Laplace余因子展開
    "DivisionFreeRowReduction"除算なし掃出し法のBareissメソッド
    "OneStepRowReduction"標準的な掃出し法
  • 近似数値行列についての明示的なMethod設定
  • "Banded"帯行列ソルバ
    "Cholesky"正定値エルミート行列についてのCholesky法
    "Krylov"反復Krylov疎ソルバ
    "Multifrontal"直接疎LU分解
    "Pardiso"PARDISO(並列直接法疎)ソルバ

例題

すべて開くすべて閉じる

  (3)

行列ベクトル方程式 で解く:

解を確かめる:

行列方程式 で解く:

解を確かめる:

矩形行列方程式を解く:

解を確かめる:

スコープ  (16)

基本的な用法  (9)

を機械精度で解く:

が行列の場合を解く:

を複素行列について解く:

厳密矩形行列の解を求める:

任意精度で解を計算する:

を記号行列について解く:

が行列のときに系を解く:

を有限体上で解く:

CenteredInterval行列について を解く:

mb のランダムな代表の mrepbrep を求める:

solLinearSolve[mrep,brep]を含むことを確認する:

が次元が異なる行列のときに について を解く:

の右辺 が与えられていない場合はLinearSolveFunctionが返される:

次は, のいくつかの値について問題を素早く解くためのデータを含んでいる:

特殊行列  (6)

を疎な行列で解く:

結果は通常は疎ではないので,通常のリストとして返される:

疎なメソッドは疎な行列を効率的に解くために使われる:

結果を可視化する:

系を構造化行列で解く:

別のタイプの行列構造を使う:

恒等行列は常に自明な解を生む:

係数行列がヒルベルト(Hilbert)行列である線形系を解く:

係数が次数の一変量多項式であるの系を解く:

Arrays  (1)

2×3×6 配列 と 2×3×4×5 配列 を解く:

結果は6×4×5配列である:

解を確かめる:

オプション  (7)

Method  (6)

"Banded"  (1)

帯行列法を使って を解く:

計算された解の相対誤差をチェックする:

"Cholesky"  (1)

コレスキー(Cholesky)分解を使って を解く:

計算された解の相対誤差をチェックする:

"Krylov"  (2)

"Krylov"メソッドでは,次のサブオプションを指定することができる:

  • "BasisSize"Krylov基底の大きさ(GMRESのみ)
    "MaxIterations"反復の最大数
    "Method"使用するメソッド
    "Preconditioner"どの前提条件子を適用するか
    "PreconditionerSide"前提条件子をどのように適用するか("Left"または"Right"
    "ResidualNormFunction"解の残差のノルムを計算するノルム関数
    "StartingVector"反復を始めるための初期ベクトル
    "Tolerance"反復の終了に使用される許容度
  • "Method"の可能な設定値:

  • "BiCGSTAB"任意の正方行列のための反復法
    "ConjugateGradient"正定値エルミート行列のための反復法
    "GMRES"任意の正方行列のための反復法
  • "Preconditioner"の可能な設定値:

  • "ILU0"充填なしのもとの行列の不完全LU因子分解に基づいた前提条件子
    "ILUT"充填ありのILU0の異形
    "ILUTP"列の置換があるILUTの異形
  • "Preconditioner"の使用可能なサブオプション:

  • "FillIn"ILUT事前調整期によって導入された行中の追加的な非零要素の数の上界
    "PermutationTolerance"列をいつ置換するか
    "Tolerance"許容度を落とす(許容度未満の大きさの要素は0として扱われる)
  • Krylovメソッドを使って を解く:

    計算された解の相対誤差をチェックする:

    "Multifrontal"  (1)

    直接マルチフロンタル法を使って を解く:

    計算された解の相対誤差をチェックする:

    "Pardiso"  (1)

    直接マルチフロンタル法を使って を解く:

    計算した解の相対誤差を計算する:

    Modulus  (1)

    47を法としたm.x==bの解xを求める:

    解を検証する:

    アプリケーション  (11)

    スパンと線形独立  (3)

    次の3つのベクトルは線形独立ではない:

    一般的な右辺を持つ方程式には解がない:

    同様に,右辺に恒等行列を持つ方程式にも解がない:

    次の3つのベクトルは線形独立である:

    一般的な右辺を持つ方程式には解がある:

    同様に,右辺に恒等行列を持つ方程式にも解がある:

    解はの逆である:

    次のベクトルが線形独立かどうかを判定する:

    は任意の について解を持たないので,これらは線形独立ではない:

    方程式の解法と可逆性  (6)

    次の方程式系を解く:

    系を行列形式に書き直す:

    LinearSolveを使って解を求める:

    NullSpaceを使って解が一意であることを示す:

    SolveValuesを使って解を確かめる:

    次の方程式系のすべての解を求める:

    まず,係数行列 ,変数ベクトル ,定数ベクトル を書く:

    書き換えを確かめる:

    LinearSolveは特殊解を与える:

    NullSpaceは同次方程式 の解の基底を与える:

    の要素の任意の線形結合であると定義する:

    一般解は の和である:

    次の行列に逆行列があるかどうか判定する:

    には解がないので, は逆行列を持たない:

    Inverseを使って結果を確かめる:

    次の行列に非零の行列式があるかどうかを判定する:

    は解を持つので, の行列式は非零でなくてはならない:

    Detを使って結果を確認する:

    次の行列の逆行列を求める:

    逆行列を求めるために,まず系 を解く:

    Inverseを使って結果を確かめる:

    LinearSolveFunctionを計算することで の値を変えて系 を解く:

    行列を逆にして逆行列をかけることで計算を行う:

    LinearSolveFunctionの方がはるかに高速ではあるが,結果は事実上同一である:

    微積分  (2)

    多変数関数の根を求めるニュートン(Newton)法:

    FindRootで求まった結果と比較する:

    離散的な差分を使って境界値問題 を近似的に解く:

    厳密解と比較したときの誤差を示す:

    特性と関係  (9)

    可逆行列 について,LinearSolve[m,b]は対応する方程式系についてはSolveValuesと同じ結果を与える:

    線形方程式の対応する系を作成する:

    SolveValuesが同じ結果を与えることを確認する:

    LinearSolveは同次方程式 に対して常に自明な解 を返す:

    が特異な場合は,NullSpaceを使って解の完全な張る(スパニング)集合を得る:

    SolveValuesの結果と比較する:

    が非特異で が恒等行列である場合は, の解 の逆数である:

    この場合は の解は存在しない:

    LeastSquaresを使ってを最小にする:

    一般的な最小化と比較する:

    が可解なら,LeastSquaresLinearSolveに等しい:

    正方行列について,LinearSolve[m,b]Det[m]!=0のときかつそのときに限って一般的な b についての解を持つ:

    正方行列について,LinearSolve[m,b]m の階数が最大のときかつそのときに限って一般的な b についての解を持つ:

    正方行列について,LinearSolve[m,b]m が逆行列を持つときかつそのときに限って一般的な b についての解を持つ:

    正方行列について,LinearSolve[m,b]m が自明な零空間を持つときかつそのときに限って一般的な b についての解を持つ:

    考えられる問題  (3)

    劣決定系についての解は一意的ではない:

    Solveによって求まったすべての解:

    LinearSolveに対応する解を与える:

    悪い条件の行列の場合,数値解は十分正しくないかもしれない:

    十分に高い精度が使われた場合,解がより正確なものとなる:

    使用可能な線形ソルバの中には決定論的ではないものがある.方程式系を設定する:

    ソルバ関数を作成する:

    "Pardiso"ソルバは決定論的ではない:

    Automaticソルバメソッドは決定論的である:

    おもしろい例題  (3)

    100,000個の方程式を,直接法を使って解く:

    百万個の方程式を反復法を使って解く:

    解の相対誤差をチェックする:

    帯行列法を使って同じ方程式系を解く:

    解の相対誤差をチェックする:

    Wolfram Research (1988), LinearSolve, Wolfram言語関数, https://reference.wolfram.com/language/ref/LinearSolve.html (2024年に更新).

    テキスト

    Wolfram Research (1988), LinearSolve, Wolfram言語関数, https://reference.wolfram.com/language/ref/LinearSolve.html (2024年に更新).

    CMS

    Wolfram Language. 1988. "LinearSolve." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2024. https://reference.wolfram.com/language/ref/LinearSolve.html.

    APA

    Wolfram Language. (1988). LinearSolve. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/LinearSolve.html

    BibTeX

    @misc{reference.wolfram_2024_linearsolve, author="Wolfram Research", title="{LinearSolve}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/LinearSolve.html}", note=[Accessed: 22-November-2024 ]}

    BibLaTeX

    @online{reference.wolfram_2024_linearsolve, organization={Wolfram Research}, title={LinearSolve}, year={2024}, url={https://reference.wolfram.com/language/ref/LinearSolve.html}, note=[Accessed: 22-November-2024 ]}