Files
2020-09-22 01:30:04 +03:00

315 lines
8.1 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Eigenvalues and Eigenvectors"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import scipy.linalg as la"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"Let A be a sqaure matrix. A non-zero vector v is an eigenvector for A with eigenvalue if\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"Rearranging the equation, we see v is a solution of homogenous system of equations"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"where I is the identity matrix of size n. Eigenvalues of A are roots of the characteristic polynomial"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"The function `scipy.linalg.eig` computes eigenvalues and eigenvectors of a square matrix "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 1 0]\n",
" [ 0 -1]]\n"
]
}
],
"source": [
"# Let's consider a simple example\n",
"A = np.array([[1,0],[0,-1]])\n",
"print(A)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"# The function la.eig returns eigenvalues and eigenvectors as tuples\n",
"eigvals, eigvecs = la.eig(A)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1.+0.j -1.+0.j]\n"
]
}
],
"source": [
"# The eigenvalues of A are\n",
"print(eigvals)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1. 0.]\n",
" [0. 1.]]\n"
]
}
],
"source": [
"# The eigenvectors of A are\n",
"print(eigvecs)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1. -1.]\n"
]
}
],
"source": [
"# If we know the eigenvalues are real numbers, A is symmetrics, then we use the method `.real` to convert into real numbers\n",
"print(eigvals.real)"
]
},
{
"attachments": {
"image.png": {
"image/png": "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"
}
},
"cell_type": "markdown",
"metadata": {},
"source": [
"## Symmetric Matrices\n",
"Symmetric matrix is a square matrix that is qual to its taranspose\n",
"\n",
"![image.png](attachment:image.png)\n",
"\n",
"- The entries of a symmetric matrix are symmetrics with respect to the main diagonal\n",
"- eigenvalues are real\n",
"- eigenvectors are always orthogonal"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 1 7 3]\n",
" [ 7 4 -5]\n",
" [ 3 -5 6]]\n"
]
}
],
"source": [
"A = np.array([[1, 7, 3],\n",
" [7, 4, -5],\n",
" [3, -5, 6]])\n",
"print(A)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 1 7 3]\n",
" [ 7 4 -5]\n",
" [ 3 -5 6]]\n"
]
}
],
"source": [
"# Transpose of A\n",
"print(A.T)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"eigvals, eigvecs = la.eig(A)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-7.00792852+0.j 7.03594585+0.j 10.97198268+0.j]\n"
]
}
],
"source": [
"# Eigenvalues have zero imaginary part\n",
"print(eigvals)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 0.68415383 -0.62878419 -0.36954564]\n",
" [-0.61391034 -0.22292725 -0.75724338]\n",
" [-0.39376087 -0.74493885 0.53853365]]\n"
]
}
],
"source": [
"print(eigvecs)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.0\n"
]
}
],
"source": [
"# Check that eigenvectors are orthogonal\n",
"# The dot product of eigenvectors and is zero \n",
"v1 = eigvecs[:,0] # First column is the first eigenvector\n",
"v2 = eigvecs[:,1] # Second column is the second eigenvector\n",
"print(v1 @ v2)\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "PyCharm (Qiskit)",
"language": "python",
"name": "pycharm-f8797ed6"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.9"
}
},
"nbformat": 4,
"nbformat_minor": 4
}