2004/10/05 == # 固有値問題の応用例 建物が揺れるアニメーション 実測の結果と、計算の結果を比較 二点の実測値に、計算値を併せ、他の部分を信じる # 建物の中の記録が初めて取れた例だと思われる 結構、画像が古い => 地震の記録が、なかなか取れないため 建物が壊れるかどうかは、地震次第 橋桁などは、地震の方向にもよる まるい首都高速などは、どこかが、共振する。 一番下に力が働くのは当然として、 真中より少し上が小さいのが不思議 (鍵穴型) == 耐震の仕組 最近の建物には入っている。 重り付の支柱を揺らして、支柱の曲りで地震のエネルギーを吸収 余り曲りすぎると折れてしまう 曲りすぎないように支えを入れる 支えのカーブが林檎の柄のカーブと同じ == 建物の揺れのシミューレション 建物を離散化 => 行列ができる この行列の固有値を計算する => ほぼ、振動数 地震 (周波数分布) に対して、どのような振動をするかが解る 固有値に近い振動の場合は、共振して、沢山揺れることになる # 神戸の地震の例では、六甲やまに反射した地震波がぶつかった所が壊れた # => シミュレーションでも確認された == # 先週は、ヤコビ法の説明をした ヤコビ法 対称行列の解法 => 保存則を持つ物理現象の場合 ( 殆どがそう.. ) は、対称行列になる 解法 固有値をかえない変換を利用して対角化できれば Okey 「固有値をかえない変換」 => 相似変換 (ほぼ、座標回転) 対角要素の値が固有値になる # 二次元の場合 与えられた問題は、傾いた楕円として表現できる 固有値を求めることは、この楕円を回転して、楕円を寝かす作業 寢た楕円の長軸、単軸の長さが固有値 元の楕円の長軸、単軸の方向が、固有ベクトル 固有ベクトルを求めるには 固有値を求めるために、何度か回転を行う その回転の結果が、固有ベクトルになっている 対称行列の場合は、相異なる固有値に対する固有ベクトルは互いに直交する。 # 同一の固有値に対する固有ベクトルが複数有りうる ## 特性方程式が重根を持つ場合 # その場合は、シュミットの直交化を行い、同じ固有値に対する固有ベクトルも直交化することができる。 固有ベクトルは、方向を表している 大きさは意味がない ベクトルの要素の比が意味を持つ v が固有ベクトルならば \lambda v ( \lambda \ne 0 ) も固有値 # 根に任意性があるため、ライブラリによって、答が違うことになる # 規格化したい # v の長さを 1 にする # v の要素の最大値を 1 にする 固有値が重根になる場合 (二次元の場合) 図形的には、楕円ではなく、円になった状況 固有値は、决めることができるが、固有ベクトルは決らない # 長さが異れば、短軸と長軸の区別ができた => 独立 ( 直交 ) した、任意のベクトル対 ( 単位ベクトル ) を取る。 ヤコビ法を行うと、対角要素以外の要素の絶対値がなくなる 絶対値が小くなれば、回転角度が小くなる 固有値が重根を持つ場合は、グルグル周りだす ( 回転させても絶対値が小くならない ) 一般のモデルでは、固有値が重根を持つ <=> モデルに対称性がある場合 モデルから対称性を排除する ( 一部分だけを計算する ) # 対称性があるということは、一部を計算すれば、他も計算できるということ # 以前、ライブラリを比べたら、答が違った # 実は、問題のモデルに対称性があったためだった。 # # この為に、固有ベクトルに関して、任意性が生じてしまった。 == (現実的な..)固有値法の様々な手法 cf. 「行列算法」 ( 戸川隼人先生、オーム社 ) # ヤコビ法が基本だが、これを更に高速化するための工夫 対称行列の固有値問題 ( 密行列を仮定 ) ヤコビ法が基本 # 素直 反復回数が定まらない ( し、反復回数が多い ) 密行列を扱う (結果的に..) 計算量が増えてしまう 三重対角行列を中継地点とする ( 前段と後段の組み併せによって色々 ) => 前段 ( 三重対角行列化 ) は、繰り返し回数が固定で済む ( fill in しない ) ギブンス法 ほぼ、ヤコビ法と同じ方法 ハウスホルダー法 鏡像変換 ( 数学的には相似変換と同じだが見かけが異る ) => 後段は、三重対角行列 ( つまり、疎行列 ) だけを扱う 計算量 ( 3n に比例 ) が減る ( 繰り返し回数は判らないが.. ) バイセクション法 行列式の値を計算する グラフの交点を二分法で求める QR 法 QR 分解を利用する # LR 変換 ( 他にも色々な分割変換を利用する ) # この方法では、固有値だけが解る。 # 固有値 \lambda_1 が判れば、それに対応する固有ベクトル v_1 は次の、連立方程式を解けば良い # A v_1 = \lambda_1 v_1 # ただし、rank が(必ず) 一つ落るので、要素比しか求めることができない # => 固有ベクトルは元々、そのような物なので問題ない # 固有値問題を解く場合は、普通、ライブラリを使う # ライブラリを作る人は殆どいないはず # ライブラリを使うにしても、内部の動きを理解している方が、使い易い == NetLib ( Internet に公開されているライブラリ ) EISPACK -- 固有値問題を解く free なライブラリ # 1 万ステップの Fortran Program シュプリンガーからマニュアル ( #1, #2 ) が出版されている LINPACK -- 連立一次方程式 ACM からでマニュアルが出版されている # Bug が少い # <-> 「ニューメリカル・レシピズ」 # バグが沢山ある == 行列 A と、固有値、固有ベクトルの関係 \lambda_1, .., \lambda_n : 固有値 ( \lambda_i > \lambda_j ( for i>j )) v_1, .. v_n : 固有ベクトル A = \lambda_1 v_1 v_1^{T} + .. \lambda_n v_n v_n^{T} A 一つの要素 ( 例えば、a_{11} ) を考える \lambda_1 >> \lambda_n なので、a_{11} の内、\lambda_n の値は、殆ど反映されない ( 足し算で丸められる ) # 計算機は有限なので.. (計算機で、固有値問題を解くと..) 絶対値の大きい固有値は精度が求められる 絶対値の小さな固有値は精度が出ない <-> 固有ベクトルは精度が出る 直交化条件があるため # 固有値問題は、色々と面白い性質がある ( 数値計算に限らず !! ) # 村田けんろう、別府、片桐(電通大) # 固有値問題の性質 # 一般の行列の固有値問題 ( 非対称、重根がある場合 ) # 伊理先生 # # 数学より物理の本が詳しい == 次週は、羃乗法 == 演習 Text p.78 ヤコビ法 例題 p.80