チュートリアル Linear Algebra Part2解答例
Linear Algebra=線形代数
Sample Answers for QuantumKatas Linear Algebra part I
https://github.com/microsoft/QuantumKatas/tree/master/tutorials/LinearAlgebra
(いきなりこのページに飛んできた人で最初から勉強されたい方はこちらをご参照ください)
ここではQ#による量子プログラミングにあたっての数学的前提知識の学習を行います。
Part 2は内積・外積などを学習します。
Exercise 9: Inner product. (行列の内積)
行列の内積(スカラー積)@exercise def inner_prod(v : Matrix, w : Matrix) -> complex: n = len(v) c = create_empty_matrix(n, 0) c = conjugate(v) x = 0 + 0j for i in range(n): x =x + c[i][0] * w[i][0] return(x)
Exercise 10: Normalized vectors
単位ベクトルの生成@exercise def normalize(v : Matrix) -> Matrix: n = len(v) m = len(v[0]) w = inner_prod(v, v) a = math.sqrt(w.real) c = create_empty_matrix(n, m) for i in range(n): c[i][0] = v[i][0] / a return c
Exercise 11: Outer product
行列の外積(ベクトル積)mは変数にしなくても1でハードコーディングでよいです。
@exercise def outer_prod(v : Matrix, w : Matrix) -> Matrix: n = len(v) m = len(w) c = create_empty_matrix(m, 0) c = conjugate(w) d = create_empty_matrix(n, m) for i in range(n): for j in range(m): d[i][j] = v[i][0] * c[j][0] return(d)
Exercise 12*: Tensor Product.
テンソル積出来上がる行列のインデックスをきちんと考えればそれほど難しい問題ではないですね。
@exercise def tensor_product(a : Matrix, b : Matrix) -> Matrix: n = len(a) m = len(a[0]) k = len(b) l = len(b[0]) c = create_empty_matrix(n * k, m * l) for ia in range(n): for ja in range(m): for ib in range(k): for jb in range(l): c[ia*k+ib][ja*l+jb] = a[ia][ja]*b[ib][jb] return c
次はLinear Algebra Part 3です。Go to Part 3