チュートリアル Linear Algebra Part3解答例

Linear Algebra=線形代数
Sample Answers for QuantumKatas Linear Algebra part I
https://github.com/microsoft/QuantumKatas/tree/master/tutorials/LinearAlgebra 

(いきなりこのページに飛んできた人で最初から勉強されたい方はこちらをご参照ください)

ここではQ#による量子プログラミングにあたっての数学的前提知識の学習を行います。
前提知識の学習はPart 3がいよいよ最後です。

Eigenvalue: 固有値
Eigenvector: 固有ベクトル

Exercise 13: Finding an eigenvalue

固有値を求める
固有ベクトルはゼロベクトルではないので、2つの行列を掛け算し、結果をVのゼロでない要素で割り算すれば求まります。
@exercise

def find_eigenvalue(a : Matrix, v : Matrix) -> float:

    n = len(v)
    x = matrix_mult(a, v)

    for i in range(n):
        if v[i][0] ==0:
            continue
        else:
            return x[i][0] / v[i][0]


Exercise 14**: Finding an eigenvector

固有ベクトルを求める。固有ベクトルの求め方については下記リンクを参照
https://to-kei.net/linear-algebra/eigenvalue/eigenvalue-and-eigenvector/

行の要素がオールゼロの場合は別の行を選択する必要があります。

@exercise
def find_eigenvector(a : Matrix, x : float) -> Matrix:
    v = create_empty_matrix(2, 1)
    if a[0][0] == 0 and a[1][0] == 0:
        v[0][0] = 0
        v[1][0] = a[1][1] / x
    elif a[1][0] == 0 and a[1][1] == 0:
        v[0][0] = a[0][0] / x
        v[1][0] = 0
    else:
        v[0][0] = a[0][1]
        v[1][0] = x - a[0][0]

    return v



いよいよ次は基本的な数学の準備から抜け出して、量子ビット(Qubit)について学習していきます。