完全な上三角系を解きたい場合は、linsolve(A,b,'UT')
と呼ぶことができます。ただし、これは現在、疎な行列ではサポートされていません。どうすればこれを克服できますか?あなたは何が必要のでSolve * sparse *上三角系
答えて
編集 ...あなたのスパース行列に関数mldivide(\)またはMRDIVIDE(/)演算子を使用することができます
私は彼が 'A = triu(...)'(完全)vs 'A =まばらな(トゥルー(...))'(疎)を意味すると思います –
@RodyOldenhuisああ、もう一度読んでいます。 。しかし、私の答えはとにかく三角形の解法(後方/前方置換)についての情報を含んでいます - 最後に、あなたは行列を因数分解した後にあなたがすることです:) – angainor
は三角形がすることができます、また、前方/後方代入と呼ばれる、手順を解決するためでありますそのため通常のMATLABバックスラッシュ\
演算子を使用します。
x = U\b
、MATLABは、あなたの行列が三角形であるという事実を認識します。そのことを確認するには、にあるcs_usolve
プロシージャのパフォーマンスを比較できます。 Cで実装されているmex関数で、上三角スパース行列(これにも同様の関数があります:cs_lsolve
、cs_utsolve
およびcs_ltsolve
)のスパースな三角解を計算します。
疎なコレスキー分解では、ネイティブMATLABのperformance comparisonとcs_l(t)solve
を見ることができます。基本的に、MATLABのパフォーマンスは良好です。あなたは転置システム
x = U'\b
MATLABは、ことを認識し、明示的にU
の転置を作成していないを解決したい場合にのみ落とし穴があります。その場合は、cs_utsolve
を明示的に呼び出す必要があります。
オリジナル答えお使いのシステムが対称であるとあなただけcholは対称行列を処理し、(それは私があなたの質問にフルを理解する方法である)、およびコレスキー分解があなたのために適している場合、上三角行列の一部を保存する場合、あなたの行列が正定値ならば。不定行列の場合はldlを使用できます。どちらもスパースストレージを処理し、対称マトリクスパーツを処理します。
新しいmatlabのバージョンはcholmod and suitesparseを使用しています。それは私が知っている最も優れたコレスキー因子分解です。 matlabでは、並列BALSで並列化されています。
あなたは上記の機能から取得率は
A=LL'
は、あなたが今やらなければならないことが前方に実行されるように、上三角行列Lと簡単で安価である後退代入、です。 MATLABで、これは自動的にTHAバックスラッシュオペレータに
x=L'\(L\b)
が行われる行列は、疎であることができ、MATLABは、下/上三角であることを認識するであろう。コレスキー因子分解を使用して得られたファクタについても、前方代入と一緒にこのコールを使用します。
UTとLTシステムは、解決するのが最も簡単なシステムです。約on the wikiを読んでください。
%# some example data
A = sparse(triu(rand(100)));
b = rand(100,1);
%# solve UT system by back substitution
x = zeros(size(b));
for n = size(A,1):-1:1
x(n) = (b(n) - A(n,n+1:end)*x(n+1:end))/A(n,n);
end
手順はLTシステムのために非常に似ています。このことを知って、あなた自身のUTやLTソルバを書くのは簡単です。ネイトが既に示されているようにも、スペア行列のために働く
x = A\b
:
は、MATLABのバックスラッシュ演算子を使用することが一般的にはるかに簡単かつ高速である、と述べました。この演算子は、非正方形A
を持つUTシステム、またはA
がいくつかの要素が主対角線にゼロ(または< eps
)である場合にも解決されることに注意してください。それはあなたに望ましいかもしれないし、そうでないかもしれない最小二乗の意味でこれらのケースを解決します。 (バック)についてもっと読む
if size(A,1)==size(A,2) && all(abs(diag(A)) > eps)
x = A\b;
else
%# error, warning, whatever you want
end
MATLABコマンドプロンプトで
>> help \
または
>> help slash
を入力して、演算子をスラッシュ:あなたは解決を行う前に、これらの例を確認することができ。
もちろん、私はその逆置換を自分で実装することができます。問題はforループが非常に遅いのでmatlabで一般的に回避されるということです。 スラッシュ演算は、三角行列に対してバック置換を使用することが保証されていますか? – olamundo
@noam:[こちらをご覧ください](http://scicomp.stackexchange.com/questions/1001/how-does-the-matlab-backslash-operator-solve-ax-b-for-square-matrices)。 –
\はバックスラッシュまたは左区切り( 'mldivide')ですが、'/'はスラッシュまたは右区切り(' mrdivide')です。 – angainor
- 1. スパースな上三角系を解く
- 2. python行列の上三角形から下三角形にコピー
- 3. THREE.js sparse planeBufferGeometry
- 4. 上下反転数の三角形
- 5. 上三角行列のカスタム表示?
- 6. Matlabの上三角形を得る
- 7. 三角法三角法(ActionScript 3)
- 8. 三角法三次元三人カメラアルゴリズム
- 9. 三角フロート
- 10. シェルピンスキー三角形
- 11. ドラッグアンドドロップ三角形
- 12. 三角形アルゴリズム
- 13. パス三角形
- 14. 三角メッシュトポロジ
- 15. センター三角形
- 16. 角度の三角関数
- 17. 角が丸い三角形
- 18. Numpy matrix product - sparse matrix
- 19. は、上三角行列と下三角行列を単一のデータフレームに結合します。
- 20. 下三角行列と上三角行列は私に間違った答えを与える
- 21. 上三角行列と下三角行列の最小値を計算するための行列操作
- 22. シンプルな三角法?
- 23. 三角数字パターン
- 24. 脇三角形の
- 25. レイトレーシングの三角形
- 26. 角5、三Jsエラー
- 27. Javaの三角形
- 28. フロイドの三角形
- 29. 依存三角形
- 30. 三角形の最小許容三角形を見つける
['full'](http://www.mathworks.com/help/matlab/ref/full.html)を使用しますか? – chaohuang
@chaohuang非常に悪い考えです。彼は理由のために '希薄 'を使用します。 – angainor
私の更新された答えを見てください。 – angainor