Maple Professionel
Maple Académique
Maple Edition Étudiant
Maple Personal Edition
Maple Player
Maple Player for iPad
MapleSim Professionel
MapleSim Académique
Maple T.A. - Suite d'examens de classement
Maple T.A. MAA Placement Test Suite
Möbius - Didacticiels de mathématiques en ligne
Machine Design / Industrial Automation
Aéronautique
Ingénierie des véhicules
Robotics
Energie
System Simulation and Analysis
Model development for HIL
Modélisation du procédé pour la conception de systèmes de contrôle
Robotics/Motion Control/Mechatronics
Other Application Areas
Enseignement des mathématiques
Enseignement de l’ingénierie
Enseignement secondaire et supérieur (CPGE, BTS)
Tests et évaluations
Etudiants
Modélisation financière
Recherche opérationnelle
Calcul haute performance
Physique
Webinaires en direct
Webinaires enregistrés
Agenda des évènements
Forum MaplePrimes
Blog Maplesoft
Membres Maplesoft
Maple Ambassador Program
MapleCloud
Livres blancs techniques
Bulletin électronique
Livres Maple
Math Matters
Portail des applications
Galerie de modèles MapleSim
Cas d'Etudes Utilisateur
Exploring Engineering Fundamentals
Concepts d’enseignement avec Maple
Centre d’accueil utilisateur Maplesoft
Centre de ressources pour enseignants
Centre d’assistance aux étudiants
疎行列反復法のオプション
LinearAlgebra[LinearSolve] 関数を用いて Ax=b の形の連立1次方程式を解き未知数 x を求めることができます。A が疎対称行列のとき、LinearSolve を呼び出すときに method=SparseIterative オプションを指定することによって反復解法を選択することができます。methodoptions=list オプションもまた反復法の振る舞いをコントロールするためにつけることができます。この list の要素は以下に挙げるオプションからいくつか選ぶことができます。変数 n は連立1次方程式の次元を示します。
* itermethod=methodname 、ただし methodname は CG か SYMMLQ のいずれか;反復法
* BooleanOpt(precon); precon=true が指定されると、前処理を行う。
* levelfill=k、ただし k は型 nonnegint ; フィルのレベル
* droptol=d、ただし d は型 nonnegative ; 許容誤差を落とす
* norm=p、ただし p は 1, 2, infinity, Euclidean のいずれか; 停止条件に対するノルム
* matnorm=v、ただし v は型 positive ; 行列ノルム評価
* toler=tval、ただし tval は型 nonnegative ; 停止条件に対する許容誤差
* maxiter=m、ただし m は型 posint ; 最大反復回数
* BooleanOpt(modify); modify=true が指定されると、修正された分解を使用する
* diagscal=ds、ただし ds 型 nonnegative ; 対角要素を 1.0+ds でスケーリング
* BooleanOpt(pivot); pivot=true が指定されると、ピボッティングを行う
* weight=w、ただし w は n 個の非負の値のベクトル;停止条件に対するウェイト
* initsol=x0、ただし x0 は n 個の非負の値のベクトル; 初期値
* precstor=ps、ただし ps は型 posint ; 前処理の作業領域の次元
これらのオプションは以下のセクションで詳述します。与えられたリストにあるオプションはそれらが現れる順に処理されます。したがって、後に続くオプションと先のオプションとが衝突すると先のオプションが無効になります。
一般的なオプション
itermethod オプションは共役勾配 (CG) 法または SYMMLQ 法を用いるかどうかを決定します。このオプションが指定されず、行列が positive_definite の属性を持っていると、CG 法が使用されます。その他の場合、SYMMLQ 法が使用されます。CG 法は正定値行列に対して設計されているので、不定値行列に対してはうまくいかないかもしれません。SYMMLQ 法は正定値と不定値行列の両方に対して適切ですが、正定値行列に対しては CG 法よりも効率がよくありません。
initsol オプションは疎行列解法に対して初期値を与えるために使われます。このオプションが指定されないと、初期値はゼロベクトルです。
前処理オプション
precon オプションは前処理を適用するかどうかを指定するために使用されます。そしてこれはデフォルトで precon=true に設定されています。前処理が指定されていない場合、追加フィルを行わない不完全コレスキー分解が前処理として使用されます。別の種類の前処理が指定されていない場合に、前処理行列は対称正定値行列でなければなりません。
levelfill=k オプションはレベル k のフィルをもつ前処理を指定するために使用されます。あるいは、droptol オプションはそのフィルをコントロールするために低下許容誤差を指定するために使用することができます。droptol オプションは levelfill オプションが提供されている場合は無視されます。
modify オプションは行和を保存するために分解を修正することを指定するために使用されます。デフォルトは modify=false、すなわち、修正無しの分解です。
diagscal=ds オプションは分解を始める際に 1.0+ds の要素を対角要素に乗算することを指定するために使用されます。これは前処理行列が正定値となることを保証するために使用されます。デフォルトではスケーリングされません。
pivot オプションはピボッティング戦略を適用することを指定するために使用されます。デフォルトは pivot=true 、マルコビッツピボッティング法において最小化フィル-インになります。pivot=false が指定された場合、ピボッティングは行われません。
precstor=ps オプションは前処理の作業領域の次元を指定するために使用します。次元は ps の最大値に調整されます、そしてデフォルト値は問題のサイズと前処理の種類に基づいています。
停止条件
用いられる停止条件は ||r||<=t*(||b||+||A||*||x||) です。ここで r と x は現在の残差とある特定の反復時点での解の値です。デフォルトのノルムは無限大ノルムを使用します。norm=p オプション (p は 1, 2, Euclidean, infinity に設定)は異なるノルムを指定するために使用します。
matnorm オプションは ||A|| に対する評価を与えるために使用します。この評価は norm=2 または norm=Euclidean オプションが指定されているとき、与えなければなりません。その他の場合、評価は自動的にソルバーによって生成されます。
weight オプションは停止条件においてベクトルノルムを計算する際に使われる重みベクトルを指定するために使用します。デフォルトは重みをつけません。
toler=tval オプションは停止条件において t の値を設定するために使用されます。値 t は max(tval, 10*eps, sqrt(n)*eps) として計算されます、ただし、eps はマシン精度です。toler オプションが与えられないと、デフォルト値が使用されます。
maxiter オプションは実行される反復最大回数を指定するために使用されます。これが与えられないと、デフォルト値が使用されます。
付記
いろいろな設定と最終的な結果についての詳細は userinfo から得られるかもしれません。これらは infolevel[LinearAlgebra] の値を設定することによって表示されます
不完全コレスキー分解前処理が 0 より大きい値に設定された levelfill か、低下した許容誤差を指定して作られると、生成されるフィルの合計を予測することは困難です。LinearSolve ルーチンは十分な前処理領域が利用できないことを示すエラーメッセージを出すかもしれません。この問題は precstor オプションでワークスペースを増やすフィルのレベルを減少させ、低下した許容誤差を増やすことによって解決されるかもしれません。
例
with(LinearAlgebra): M := Matrix(4,4,[[5.0],[0.2,-1.0],[0.0,3.0,0.0],[-2.0,0.0,0.0,1.0]], shape=symmetric,storage=sparse[lower],datatype=float): b := Vector(4,1.0,datatype=float): LinearSolve(M,b,method=SparseIterative,methodoptions=[itermethod=CG,levelfill=1]);
参照
LinearAlgebra[LinearSolve], userinfo
Download Help Document