All published worksheets from http://sagenb.org
Image: ubuntu2004
行列計算に挑戦
リスト
次にリストプロットを紹介するのですが、その前にpythonのリストについて簡単に説明します。 pythonでリストは、項目をカンマ区切りで並べたリストをカギ括弧で括って表します。空のリストは
[]になります。
変数l1に1, 2, 3, 4の4個のリストをセットするときは、以下のようにします。
要素: リスト[要素のインデックス] 指定範囲のサブリスト: リスト[開始インデックス:終了インデックス] $\cdots$ 終了インデックスを含めません。 指定以降のサブリスト: リスト[開始インデックス:] 先頭から指定までのサブリスト: リスト[:終了インデックス] $\cdots$ 終了インデックスを含めません。
range(終了) : 0から終了の前までの整数のリストを生成します range(開始, 終了) : 開始インデックスから終了インデックスの前まで整数のリストを生成します range(開始, 終了, 増分) : 開始から終了の前までの値を増分ごとに追加したリストを生成します以下にrangeの例を示します。
以下の例は、リストl1の各要素の自乗を要素とするリストを返します。
- sqrtを式のままリストに保持
- sqrtの値を5桁の数値で保持
- リストを整形して出力した場合
以下の例では、数値と文字のリストをzipで結合します。
リストプロット
これで、ようやくリストプロットの例を説明することができます。list_plot(プロットするリスト)0から24までの値の自乗の値をプロットします。
ベクトルと行列
ベクトルの生成
ベクトルは、vector関数で生成します。vector(値のリスト) または、 vector(環, 値のリスト)以下は、を生成しています。環については後ほど紹介します。
ベクトルの内積
ベクトルの内積は、dot_product関数で計算します。よく知られているようにベクトルの内積は、
で表されます。
ベクトルの外積
同様にベクトルの外積は、cross_product関数で計算します。 ベクトルの外積の大きさは、
であり、その方向は、ベクトルvからベクトルwにねじを回して進む方向となります。
行列の生成
行列は、matrix関数で生成します。
matrix(行列の要素のリスト) または matrix(環, 行列の要素のリスト)
行列の解
solve_right関数を使って行列の解を得ることができます。
となるようなXを求めるのが、solve_right関数です。
転置行列
転置行列は、transpose関数で取得できます。転置行列の性質は、
- $(\mathbf{A}\mathbf{B})^T = \mathbf{B}^T\mathbf{A}^T
行列式
行列式、det関数で取得できます。行列式は、逆行列の計算に使われるので、よく逆行列が存在するか否かの判別に使用されます。
逆行列
逆行列は、inverse関数で取得できます。逆行列の性質は、
- $(\mathbf{A}\mathbf{B})^{-1} = \mathbf{B}^{-1}\mathbf{A}^{-1}
単位行列
単位行列は、identity_matrixで生成します。対角行列
対角行列は、diagonal_matrixで生成します。diagonal_matrix(対角要素のリスト)
環
環は、数の集合を表します。 よく使われる環を以下に示します。- 整数: ZZ
- 実数: R
- 有理数: QQ
- 複素数: CC
- 倍精度小数(real double): RDF
-
です。
以下に有理数の環を使って行列を生成する例を示します。
固有値解析
固有値と固有ベクトルは、が0ベクトル以外の解を持つときに、をの固有値、を固有ベクトルといいます。
固有値は、
の解です。
sageで固有値と固有ベクトルを取得するには、eigenmatrix_left関数を使います。eigenmatrix_leftの戻り値は固有値の対角行列と各固有値の固有ベクトルからなる行列Pをタプルとして返します。
先に定義したの固有値と固有ベクトルをeigenmatrix_rightで計算してみます。
eigenmatrix_rightは、定義とすこし違いP*self = P*DとなるDとPを返します。
Dの対角成分が固有値で、Pの各列が固有値に対応する固有ベクトルがセットされています。 固有値解析の場合、固有値の大きな順に固有ベクトルを計算します。
どの固有値までがもとになるAを表現するかを、固有値に係数を掛けて見てみることで主要な成分を求めることができます。
SVD分解
固有値を使った主成分分析は正方行列しか使えないため、n, mが異なる行列での主成分分析にはSVD分解を使います。
となるU, S, Vを計算するのが、SVD関数です。