{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "I-46MAJZImXY"
},
"source": [
"# Matrix diagonalization\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Ortogonal matrices\n",
"\n",
"\n",
"\\begin{align}\n",
" x'=&x\\cos\\theta+y\\sin\\theta \\nonumber\\\\\n",
" y'=&y\\cos\\theta-x\\sin\\theta\\,.\n",
"\\end{align}\n",
"En forma matricial, la transformación del sistema de coordenas inicial al sistema de coordenados rotado por un ángulo $\\theta$ está dado por\n",
"\\begin{align}\n",
" \\begin{pmatrix}\n",
" x'\\\\\n",
" y'\\\\\n",
" \\end{pmatrix}=\n",
" \\begin{pmatrix}\n",
" \\cos\\theta & \\sin\\theta\\\\\n",
" -\\sin\\theta& \\cos\\theta\\\\\n",
" \\end{pmatrix}\n",
" \\begin{pmatrix}\n",
" x\\\\\n",
" y\\\\\n",
" \\end{pmatrix}.\n",
"\\end{align}"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "40WhQJy2EWqx"
},
"source": [
"## Theorem 1\n",
"\n",
"If $\\boldsymbol{A}$ is Hermitic, e.g:\n",
"\\begin{align}\n",
"\\boldsymbol{A}^\\dagger =\\boldsymbol{A}\\,,\n",
"\\end{align}\n",
"Then exists an _unitary matrix_ $\\boldsymbol{V}$ e.g:\n",
"\\begin{align}\n",
"\\boldsymbol{V}^{\\ -1}=\\boldsymbol{V}^\\dagger \\,,\n",
"\\end{align}\n",
"such that\n",
"\\begin{equation}\n",
" \\boldsymbol{V}^\\dagger\\boldsymbol{A}\\,\\boldsymbol{V}=\\boldsymbol{A}_{\\text{diag}}\\,,\n",
"\\end{equation}\n",
"where \n",
"$\\boldsymbol{A}_{\\text{diag}}=\\operatorname{diag}(\\lambda_1,\\lambda_2,\\ldots \\lambda_n)$ is the diagonalized mass matrix."
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "QousO-tmLx5e"
},
"source": [
"### Corollary 1\n",
"\n",
"If $\\boldsymbol{A}$ is symmetric, e.g:\n",
"\\begin{align}\n",
"\\boldsymbol{A}^{\\operatorname{T}} =\\boldsymbol{A}\\,,\n",
"\\end{align}\n",
"Then exists an _ortogonal matrix_ $\\boldsymbol{V}$, e.g:\n",
"\\begin{align}\n",
"\\boldsymbol{V}^{-1}=\\boldsymbol{V}^{\\operatorname{T}} \\,,\n",
"\\end{align}\n",
"such that\n",
"\\begin{equation}\n",
" \\boldsymbol{V}^{\\operatorname{T}}\\boldsymbol{A}\\,\\boldsymbol{V}=\\boldsymbol{A}_{\\text{diag}}\\,,\n",
"\\end{equation}\n",
"where \n",
"$\\boldsymbol{A}_{\\text{diag}}=\\operatorname{diag}(\\lambda_1,\\lambda_2,\\ldots \\lambda_n)$ is the diagonalized mass matrix."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"____"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "Czn5t78GZepT"
},
"source": [
"### Eigenvector problem\n",
"Note that each eigenvector, corresponding to each column of the matrix, is associated to each eigenvalue\n",
"$$\n",
"\\boldsymbol{V}=\\begin{bmatrix}\n",
"\\boldsymbol{V}_1 \\vdots \\boldsymbol{V}_2\\cdots \\vdots \\boldsymbol{V}_i \\vdots \\boldsymbol{V}_j\\vdots\\cdots \\vdots \\boldsymbol{V}_n \n",
"\\end{bmatrix}.\n",
"$$\n",
"where $\\boldsymbol{V}_i$ is the $i$-th column of the matrix $\\boldsymbol{V}$.\n",
"\n",
"In this way, if we interchange the $i\\leftrightarrow j$ columns of the diagonalization matrix $\\boldsymbol{V}$, the order of the eigenvalues also change\n",
"$$\n",
"\\begin{bmatrix}\n",
"\\boldsymbol{V}_1 \\vdots \\boldsymbol{V}_2\\cdots \\vdots \\boldsymbol{V}_j \\vdots \\boldsymbol{V}_i\\vdots\\cdots \\vdots \\boldsymbol{V}_n \n",
"\\end{bmatrix}^\\dagger \\boldsymbol{A} \\begin{bmatrix}\n",
"\\boldsymbol{V}_1 \\vdots \\boldsymbol{V}_2\\cdots \\vdots \\boldsymbol{V}_j \\vdots \\boldsymbol{V}_i\\vdots\\cdots \\vdots \\boldsymbol{V}_n \n",
"\\end{bmatrix}=\\operatorname{diag}(\\lambda_1,\\lambda_2,\\ldots,\\lambda_j,\\lambda_i,\\ldots \\lambda_n).\n",
"$$\n",
"This property is very important because usually the diagonalizationn alghoritm gives not the desired ordering of the eigenvalues and eigenvectors. It is recommended to use the `np.c_` method for the eigenvector reoirdering\n",
"\n",
"However, the __Theorem__ only guarantees existence. Tor really calculate the diagonalization matrix we must establish the eigenvector problem:\n",
"\n",
"We can use the unitary propery to write\n",
"\\begin{align}\n",
" \\boldsymbol{V}\\boldsymbol{V}^\\dagger\\boldsymbol{A}\\,\\boldsymbol{V}=&\\boldsymbol{V}\\boldsymbol{A}_{\\text{diag}}\\\\\n",
"\\boldsymbol{A}\\,\\boldsymbol{V}=&\\boldsymbol{V}\\boldsymbol{A}_{\\text{diag}}\\,,\n",
"\\end{align}\n",
"or\n",
"$$\n",
"\\boldsymbol{A}\\begin{bmatrix}\n",
"\\boldsymbol{V}_1 \\vdots \\boldsymbol{V}_2\\cdots \\vdots \\boldsymbol{V}_n \n",
"\\end{bmatrix} =\\operatorname{diag}(\\lambda_1,\\lambda_2\\ldots,\\lambda_n)\\begin{bmatrix}\n",
"\\boldsymbol{V}_1 \\vdots \\boldsymbol{V}_2\\cdots \\vdots \\boldsymbol{V}_n \n",
"\\end{bmatrix}.\n",
"$$\n",
"Therefore, the eigenvalue equation is just:\n",
"\\begin{align}\n",
"%$$\n",
" \\boldsymbol{A}\\,\\boldsymbol{V}_i=&\\lambda_i\\boldsymbol{V}_i \\nonumber\\\\\n",
" \\boldsymbol{A}\\,\\boldsymbol{V}_i-\\lambda_i\\boldsymbol{V}_i=&\\boldsymbol{0} \\nonumber\\\\\n",
" (\\boldsymbol{A}-\\lambda_i \\,\\boldsymbol{I})\\boldsymbol{V}_i=&\\boldsymbol{0}\\,,\n",
"%$$\n",
"\\end{align}\n",
"where $\\boldsymbol{V}_i$ is the $i$-th column of the matrix $\\boldsymbol{V}$, and $\\boldsymbol{I}$ is the identity matrix. \n",
"\n",
"To avoid the trivial solution $\\boldsymbol{V}_i=\\boldsymbol{0}$, we require that $\\boldsymbol{A}-\\lambda_i\\, \\boldsymbol{I}$\n",
"does not have an inverse, or equivalently\n",
"$$\\det( \\boldsymbol{A}-\\lambda_i\\, \\boldsymbol{I})=0\\,.$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Example\n",
"From [arXiv:2010.06458](https://arxiv.org/pdf/2010.06458.pdf):\n",
"\n",
"> In the three flavor neutrino oscillation, the neutrino flavor states $\\left|\\nu_{\\alpha}\\right\\rangle(\\alpha=e, \\mu, \\tau)$ are linear superposition of mass eigenstates $\\left|\\nu_{j}\\right\\rangle(j=1,2,3):\\left|\\nu_{\\alpha}\\right\\rangle=\\Sigma_{j} U_{\\alpha j}\\left|\\nu_{j}\\right\\rangle,$ where $U_{\\alpha j}$ are the elements of the lepton mixing matrix known as PMNS (Pontecorvo-Maki-Nakagawa-Sakita) matrix such that\n",
"$$\n",
"\\left(\\begin{array}{l}\n",
"\\left|\\nu_{e}\\right\\rangle \\\\\n",
"\\left|\\nu_{\\mu}\\right\\rangle \\\\\n",
"\\left|\\nu_{\\tau}\\right\\rangle\n",
"\\end{array}\\right)=\\left(\\begin{array}{lll}\n",
"U_{e 1} & U_{e 2} & U_{e 3} \\\\\n",
"U_{\\mu 1} & U_{\\mu 2} & U_{\\mu 3} \\\\\n",
"U_{\\tau 1} & U_{\\tau 2} & U_{\\tau 3}\n",
"\\end{array}\\right)\\left(\\begin{array}{l}\n",
"\\left|\\nu_{1}\\right\\rangle \\\\\n",
"\\left|\\nu_{2}\\right\\rangle \\\\\n",
"\\left|\\nu_{3}\\right\\rangle\n",
"\\end{array}\\right)\n",
"$$\n",
"The time evolution follows $\\left|\\nu_{\\alpha}(t)\\right\\rangle=\\Sigma_{j} e^{-i E_{j} t} U_{\\alpha j}\\left|\\nu_{j}\\right\\rangle,$ where $E_{j}$ is the energy associated with the mass eigenstates $\\left|\\nu_{i}\\right\\rangle$ This is a superposition state. \n",
"\n",
"The observables associated to the three neutrinos are the entries of the $3\\times 3$ unitary matrix $\\boldsymbol{U}=\\begin{pmatrix}\\boldsymbol{U}_1\\vdots\\boldsymbol{U}_2\\vdots\\boldsymbol{U}_3\\end{pmatrix}$, and the eigenvalues associated to each eigenvector $\\boldsymbol{U}_1\\to m_1$, $\\boldsymbol{U}_2\\to m_2$, $\\boldsymbol{U}_3\\to m_3$. The normal ordering is $m_1Activity__: Usar np.lingalg.solve"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
},
"colab_type": "code",
"id": "FbDQyS3_Wi-f",
"outputId": "e44b25b2-55ad-455e-c4a5-68176d5bb6e2"
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.04],\n",
" [-0.2 ],\n",
" [-0.52]])"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.linalg.solve(A,B)"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "agZ-WPWgZeoe"
},
"source": [
"We can now check some properties.\n",
"\n",
"\\begin{equation}\n",
" \\boldsymbol{V}^{\\operatorname{T}}\\boldsymbol{A}\\,\\boldsymbol{V}=\\boldsymbol{A}_{\\text{diag}}\\,,\n",
"\\end{equation}\n",
"\n",
"$$\n",
"\\begin{bmatrix}\n",
"\\boldsymbol{V}_1 \\vdots \\boldsymbol{V}_2\\cdots \\vdots \\boldsymbol{V}_j \\vdots \\boldsymbol{V}_i\\vdots\\cdots \\vdots \\boldsymbol{V}_n \n",
"\\end{bmatrix}^\\dagger \\boldsymbol{A} \\begin{bmatrix}\n",
"\\boldsymbol{V}_1 \\vdots \\boldsymbol{V}_2\\cdots \\vdots \\boldsymbol{V}_j \\vdots \\boldsymbol{V}_i\\vdots\\cdots \\vdots \\boldsymbol{V}_n \n",
"\\end{bmatrix}=\\operatorname{diag}(\\lambda_1,\\lambda_2,\\ldots,\\lambda_j,\\lambda_i,\\ldots \\lambda_n).\n",
"$$\n",
"\n",
"For the case $3\\times 3$\n",
"* Obtain $\\theta_{12}$ for $|\\lambda_1|<|\\lambda_2|<|\\lambda_3|$ and, in the proper order\n",
"$$\n",
"\\boldsymbol{U}=\\left(\\begin{array}{ccc}c_{12} c_{13} & s_{12} c_{13} & s_{13} e^{-i \\delta_{\\mathrm{CP}}} \\\\ -s_{12} c_{23}-c_{12} s_{13} s_{23} e^{i \\delta_{\\mathrm{CP}}} & c_{12} c_{23}-s_{12} s_{13} s_{23} e^{i \\delta_{\\mathrm{CP}}} & c_{13} s_{23} \\\\ s_{12} s_{23}-c_{12} s_{13} c_{23} e^{i \\delta_{\\mathrm{CP}}} & -c_{12} s_{23}-s_{12} s_{13} c_{23} e^{i \\delta_{\\mathrm{CP}}} & c_{13} c_{23}\\end{array}\\right)\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 71
},
"colab_type": "code",
"id": "KAruEyXoZeoe",
"outputId": "506837cc-f6f5-4daa-885f-74de9d7e0a9e"
},
"outputs": [
{
"data": {
"text/plain": [
"array([11.09901951, 0.90098049, 5. ])"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"A=np.array( [[5,-4,0],\n",
" [-4,7,-3],\n",
" [0,-3,5]])\n",
"\n",
"λ,V=np.linalg.eig( A )\n",
"A_diag=np.diag(λ)\n",
"λ"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-5.07191124e-01, -6.18673713e-01, -6.00000000e-01],\n",
" [ 7.73342141e-01, -6.33988906e-01, 1.91548674e-16],\n",
" [-3.80393343e-01, -4.64005285e-01, 8.00000000e-01]])"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"V"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Extract the first eigenvector"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 71
},
"colab_type": "code",
"id": "Lg_7lshmZeoh",
"outputId": "171eeba4-27f8-443a-8b44-72e7807b3c86"
},
"outputs": [
{
"data": {
"text/plain": [
"array([[-0.50719112],\n",
" [ 0.77334214],\n",
" [-0.38039334]])"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.c_[ V[: ,0] ]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"associated with the eigenvalue"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
},
"colab_type": "code",
"id": "VAFBe0g_Zeok",
"outputId": "b096d3be-9235-46ac-cb8a-1762fed22867"
},
"outputs": [
{
"data": {
"text/plain": [
"(11.099019513592784, 11.099019513592784)"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A_diag[0,0],λ[0]"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 179
},
"colab_type": "code",
"id": "ButZ6c29Zeom",
"outputId": "bb46e578-01a6-42d1-b495-aa9853a12df4"
},
"outputs": [
{
"data": {
"text/plain": [
"array([[-0.50719112],\n",
" [ 0.77334214],\n",
" [-0.38039334]])"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"array([[-0.61867371],\n",
" [-0.63398891],\n",
" [-0.46400528]])"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"array([[-6.00000000e-01],\n",
" [ 1.91548674e-16],\n",
" [ 8.00000000e-01]])"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"V0=np.c_[ V[:,0] ]\n",
"V1=np.c_[ V[:,1] ]\n",
"V2=np.c_[ V[:,2] ]\n",
"display(V0)\n",
"display(V1)\n",
"V2"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "2gSZQGhwZMbU"
},
"source": [
"Check: $ A V_i=\\lambda_i V_i$\n",
"\n",
"Which means the eigenvalue associated to the \"operator\" $A$ acting on the eigenvector $V_1$"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 125
},
"colab_type": "code",
"id": "MkfNpMwbZeow",
"outputId": "7759c6fb-c985-435d-9a3c-5e0a22487e26"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-5.62932419]\n",
" [ 8.58333952]\n",
" [-4.22199314]] =\n",
"[[-5.62932419]\n",
" [ 8.58333952]\n",
" [-4.22199314]]\n"
]
}
],
"source": [
"print(f'{A@V0} =\\n{λ[0]*V0}')"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 125
},
"colab_type": "code",
"id": "N7rTShl9Zeoz",
"outputId": "e2cc0abe-6639-4789-f7ba-4957ea65c6e3"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-0.55741294]\n",
" [-0.57121163]\n",
" [-0.41805971]] =\n",
"[[-0.55741294]\n",
" [-0.57121163]\n",
" [-0.41805971]]\n"
]
}
],
"source": [
"print(f'{A@V1} =\\n{λ[1]*V1}')"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 125
},
"colab_type": "code",
"id": "zRu4zQHKZeo2",
"outputId": "b123d387-d8da-43db-808e-0600748ceb2d"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-3.]\n",
" [ 0.]\n",
" [ 4.]] =\n",
"[[-3.]\n",
" [ 0.]\n",
" [ 4.]]\n"
]
}
],
"source": [
"print(f'{(A@V2).round(14)} =\\n{(λ[2]*V2).round(14)}')"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "wmszgFZdZeo5"
},
"source": [
"The diagonalization matrix can be rebuild from the eigenvectors"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 71
},
"colab_type": "code",
"id": "2uAsu7Bgarxo",
"outputId": "3ea7390e-f31b-494e-c759-27544186198a"
},
"outputs": [
{
"data": {
"text/plain": [
"array([[-5.07191124e-01, -6.18673713e-01, -6.00000000e-01],\n",
" [ 7.73342141e-01, -6.33988906e-01, 1.91548674e-16],\n",
" [-3.80393343e-01, -4.64005285e-01, 8.00000000e-01]])"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"V"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "_AjDSlz3bIPW"
},
"source": [
"is rebuild with"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 71
},
"colab_type": "code",
"id": "5Q0PN44GavcA",
"outputId": "7aadd247-dfaa-4096-9aae-972755b4259a"
},
"outputs": [],
"source": [
"V=np.c_[ V0,V1,V2]"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "E_TOP-rdZeo5"
},
"source": [
"or with: `np.hstack((V0,V1,V2))`"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-5.07191124e-01, -6.18673713e-01, -6.00000000e-01],\n",
" [ 7.73342141e-01, -6.33988906e-01, 1.91548674e-16],\n",
" [-3.80393343e-01, -4.64005285e-01, 8.00000000e-01]])"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"V"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[11.09901951, 0. , 0. ],\n",
" [ 0. , 0.90098049, 0. ],\n",
" [ 0. , 0. , 5. ]])"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"( V.transpose()@A@V).round(14)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that a sign of an egigenvalues can be changed:"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [],
"source": [
"V=np.c_[ V0,-V1,V2]"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "9bls0mm5Zeo9"
},
"source": [
"### Eigenvector reordering"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Activity__: https://beta.deepnote.com/project/17b487c8-b092-4032-94f5-438ba4eeb1e9"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "DOBPvoJ1Zeo-"
},
"source": [
"We can use this to check the proper order of the eigenvalues.\n",
"\n",
"The order of eigenvalues can now be changed by changing the order of the eigenvectors and redifining the diagonalization matrix. For example, from small to large.\n",
"\n",
"Then the proper order in the eigenvalues can be obtained"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.90098049, 0. , 0. ],\n",
" [ 0. , 5. , 0. ],\n",
" [ 0. , 0. , 11.09901951]])"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U=np.c_[ V1,V2,V0]\n",
"( U.transpose()@A@U).round(14)"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-6.18673713e-01, -6.00000000e-01, -5.07191124e-01],\n",
" [-6.33988906e-01, 1.91548674e-16, 7.73342141e-01],\n",
" [-4.64005285e-01, 8.00000000e-01, -3.80393343e-01]])"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Once in the proper order, the mixing angles can be obtained\n",
"$$\n",
"\\boldsymbol{U}_1=\\begin{pmatrix}U_{e1}\\\\ U_{\\mu 1}\\\\ U_{\\tau 1}\\end{pmatrix}=\\begin{pmatrix}\n",
"c_{12} c_{13} \\\\\n",
"-s_{12} c_{23}-c_{12} s_{13} s_{23} e^{i \\delta_{\\mathrm{CP}}} \\\\\n",
"s_{12} s_{23}-c_{12} s_{13} c_{23} e^{i \\delta_{\\mathrm{CP}}}\n",
"\\end{pmatrix},\\qquad \n",
"\\boldsymbol{U}_2=\\begin{pmatrix}U_{e2}\\\\ U_{\\mu 2}\\\\ U_{\\tau 2}\\end{pmatrix}=\\begin{pmatrix}\n",
"s_{12} c_{13} \\\\\n",
"c_{12} c_{23}-s_{12} s_{13} s_{23} e^{i \\delta_{\\mathrm{CP}}} \\\\\n",
"-c_{12} s_{23}-s_{12} s_{13} c_{23} e^{i \\delta_{\\mathrm{CP}}}\n",
"\\end{pmatrix},\\qquad\n",
"\\boldsymbol{U}_3=\\begin{pmatrix}U_{e3}\\\\ U_{\\mu 3}\\\\ U_{\\tau 3}\\end{pmatrix}=\\begin{pmatrix}\n",
"s_{13} e^{-i \\delta_{\\mathrm{CP}}} \\\\\n",
"c_{13} s_{23} \\\\\n",
"c_{13} c_{23}\n",
"\\end{pmatrix},\n",
"$$\n",
"so that\n",
"$$\n",
"\\tan\\theta_{12}=\\frac{U_{e2}}{U_{e1}}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [],
"source": [
"θ_12=np.arctan( U[0,1]/U[0,0] )"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0.7700763823614476, 44.122126612013574)"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"θ_12, θ_12*180/np.pi"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Implementation of an algorithm for reordering"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([11.09901951, 0.90098049, 5. ])"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"λ"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
},
"colab_type": "code",
"id": "pixl0cvzZepB",
"outputId": "b913c528-c7f8-413f-ab91-f36c0bdd36f1"
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.90098049, 5. , 11.09901951])"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.sort( np.abs(λ))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Returns the indices that would sort an array."
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
},
"colab_type": "code",
"id": "DeIj8z5kZepL",
"outputId": "90606a4c-6f6a-4709-ebd9-4a5141f75ee4"
},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 2, 0])"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"index=np.abs(λ).argsort()\n",
"index"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "v5Mhuh-QZepP"
},
"source": [
"can be implemented in general with a _comprehension_ list"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 71
},
"colab_type": "code",
"id": "iWvRFdz9etKa",
"outputId": "ac48d6bf-e16f-4056-9ead-ccb31362f3c8"
},
"outputs": [
{
"data": {
"text/plain": [
"array([[-5.07191124e-01, 6.18673713e-01, -6.00000000e-01],\n",
" [ 7.73342141e-01, 6.33988906e-01, 1.91548674e-16],\n",
" [-3.80393343e-01, 4.64005285e-01, 8.00000000e-01]])"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"V"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For rebuild"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 71
},
"colab_type": "code",
"id": "UeBueRxbfeUc",
"outputId": "0b497826-0400-4b28-9291-149f038b47c1"
},
"outputs": [
{
"data": {
"text/plain": [
"array([[-5.07191124e-01, 6.18673713e-01, -6.00000000e-01],\n",
" [ 7.73342141e-01, 6.33988906e-01, 1.91548674e-16],\n",
" [-3.80393343e-01, 4.64005285e-01, 8.00000000e-01]])"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.c_[ tuple( [ np.c_[V[:,i]] for i in range(3) ] ) ]"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "WwokXTJ-elVp"
},
"source": [
"And for reorder to `index`"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 71
},
"colab_type": "code",
"id": "wObPrmb4dgrs",
"outputId": "8b850a8f-89b5-4e48-b587-7c298651f085"
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 6.18673713e-01, -6.00000000e-01, -5.07191124e-01],\n",
" [ 6.33988906e-01, 1.91548674e-16, 7.73342141e-01],\n",
" [ 4.64005285e-01, 8.00000000e-01, -3.80393343e-01]])"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U=np.c_[ tuple( [ np.c_[V[:,i]] for i in np.abs(λ).argsort() ] ) ]\n",
"U"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "u0PoVQJshW8A"
},
"source": [
"or: \n",
"```python\n",
"n=3\n",
"U=np.hstack( [ np.reshape( V[:,i], (n,1) ) for i in index ] )\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 71
},
"colab_type": "code",
"id": "2_A609DeZepR",
"outputId": "d10f93b9-2dc0-4e95-ee4f-86cc1c7cc751"
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.90098049, -0. , -0. ],\n",
" [-0. , 5. , 0. ],\n",
" [-0. , 0. , 11.09901951]])"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"( U.transpose()@A@U).round(14)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Implementation as function"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [],
"source": [
"def argeig(A):\n",
" λ,V=np.linalg.eig(A)\n",
" λ=np.array([λ[i] for i in np.abs(λ).argsort()])\n",
" V=np.c_[ tuple( [ np.c_[V[:,i]] for i in np.abs(λ).argsort() ] ) ]\n",
" return λ,V"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab": {},
"colab_type": "code",
"id": "1VNLtnpSlEU9"
},
"source": [
""
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([ 0.90098049, 5. , 11.09901951]),\n",
" array([[-5.07191124e-01, -6.18673713e-01, -6.00000000e-01],\n",
" [ 7.73342141e-01, -6.33988906e-01, 1.91548674e-16],\n",
" [-3.80393343e-01, -4.64005285e-01, 8.00000000e-01]]))"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"λ,V=argeig(A)\n",
"λ,V"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 89
},
"colab_type": "code",
"id": "94ZHLjM0l-vS",
"outputId": "7484c181-7184-4514-f8c5-494b36427feb"
},
"source": [
"```python\n",
"#1.\n",
"λ,V=argeig(A)\n",
"λ,V\n",
"Out[1]:\n",
"(array([ 0.90098049, 5. , 11.09901951]),\n",
" array([[-6.18673713e-01, -6.00000000e-01, -5.07191124e-01],\n",
" [-6.33988906e-01, 1.91548674e-16, 7.73342141e-01],\n",
" [-4.64005285e-01, 8.00000000e-01, -3.80393343e-01]])) \n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 71
},
"colab_type": "code",
"id": "SqxnBdaDmBXq",
"outputId": "33bb5733-facd-4397-f312-6456b038cd65"
},
"source": [
"```python\n",
"#2.\n",
"( V.transpose()@A@V).round(14)\n",
"Out[1]:\n",
"array([[ 0.90098049, 0. , 0. ],\n",
" [ 0. , 5. , 0. ],\n",
" [ 0. , 0. , 11.09901951]])\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab": {},
"colab_type": "code",
"id": "CFemQeVVZepT",
"outputId": "2374fd3a-8f31-49a3-85c4-8e314158be78"
},
"source": [
"```python\n",
"#3.\n",
"print( np.linalg.det(A- λ[0]*np.identity(3) ) )\n",
"print( np.linalg.det(A- λ[1]*np.identity(3) ) )\n",
"np.linalg.det(A- λ[2]*np.identity(3) )\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "ryPEhIWgiE-O"
},
"source": [
"__Activity__: Build a function that diagonalize symmetric matrices with the eigenvalues in increasing order in the eigenvalues as a replacement of `np.linalg.eig`\n",
"```python\n",
"def argeig(A):\n",
" l,V=np.linalg.eig(A)\n",
" ....\n",
" return argl, argV\n",
"```\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "QLp5N41JZepX"
},
"source": [
"### General matrix"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from scipy import linalg"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Example__: Consider the following general real matrix without any specific symmetry"
]
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {},
"outputs": [],
"source": [
"A=np.array([[ 6.666746440000001 , 3.1312125300000013],\n",
" [-0.23343504999999923, 5.890289299999999 ]])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this case we need to make the bidiogalization process of Theorem 2 with the Singular value decomposition (SVD) implemented in Scipy"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {},
"outputs": [],
"source": [
"V,diag,Udagger=linalg.svd(A)"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [],
"source": [
"U=Udagger.transpose().conjugate()"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 8., -0.],\n",
" [ 0., 5.]])"
]
},
"execution_count": 122,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A_diag=(V.transpose().conjugate()@A@U).round(14)\n",
"A_diag"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is important to stablish that the eigenvectors are determined until ordering and permutations"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-0.8660254, -0.5 ],\n",
" [-0.5 , 0.8660254]])"
]
},
"execution_count": 123,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"V"
]
},
{
"cell_type": "code",
"execution_count": 124,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-0.70710678, -0.70710678],\n",
" [-0.70710678, 0.70710678]])"
]
},
"execution_count": 124,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For a general matrix they are just ortogonal matrices"
]
},
{
"cell_type": "code",
"execution_count": 125,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[1., 0.],\n",
" [0., 1.]])"
]
},
"execution_count": 125,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(U.transpose()@U).round(14)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We define below a $2\\times 2$ orthogonal matrix:"
]
},
{
"cell_type": "code",
"execution_count": 126,
"metadata": {},
"outputs": [],
"source": [
"def orthogonal(θ):\n",
" return np.array( [[np.cos(θ) ,np.sin(θ)],\n",
" [-np.sin(θ),np.cos(θ)]] )"
]
},
{
"cell_type": "code",
"execution_count": 127,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.5 , 0.8660254],\n",
" [-0.8660254, 0.5 ]])"
]
},
"execution_count": 127,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"π=np.pi\n",
"Vp=orthogonal(π/3)\n",
"Vp"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that, for $V=[V_1\\vdots V_2]$, after\n",
"* Interchange $V_1 \\to V_2$ and $V_2 \\to V_1$\n",
"* $V \\to -V$,\n",
"\n",
"we get $V'$"
]
},
{
"cell_type": "code",
"execution_count": 128,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.70710678, 0.70710678],\n",
" [-0.70710678, 0.70710678]])"
]
},
"execution_count": 128,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Up=orthogonal(π/4)\n",
"Up"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that after\n",
"* Interchange $U_1 \\to U_2$ and $U_2 \\to U_1$\n",
"* $U \\to -U$,\n",
"\n",
"we get $U'$.\n",
"\n",
"Since the required trasformations in $V$ and $U$ are the same, the Theorem 2 is unnafected, only the order in the eigenvalues change to the normal ordering. In Fact"
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 5., -0.],\n",
" [ 0., 8.]])"
]
},
"execution_count": 130,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A_diag=(Vp.transpose()@A@Up).round(8)\n",
"A_diag"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Activity__: https://beta.deepnote.com/project/17b487c8-b092-4032-94f5-438ba4eeb1e9"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Activity__: Solve the system\n",
"$$ \\boldsymbol{A} \\boldsymbol{x}=\\boldsymbol{B}$$\n",
"for the previous $ \\boldsymbol{A}$ matrix and\n",
"$$\\boldsymbol{B}=\\begin{bmatrix}\n",
" 1\\\\\n",
" -4\\\\\n",
" \\end{bmatrix}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Interpretations of Theorem 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Single Diagonalization matrix\n",
"In Theorem 2 establishes a unique set of a matrices: $A$ with its eigenvalues matrix, $A_{\\rm diag}$, and their eigenvectors matrices $U$ and $V$. However, for a fixed set of eigenvalues and eigenvectors we can have several possibilities of $A'$ matrices. For example, if we fix $U'=\\boldsymbol{1}$ \n",
"\\begin{equation}\n",
" {V'}^\\dagger \\boldsymbol{A'}=\\boldsymbol{A}_{\\text{diag}}\\,,\n",
"\\end{equation}\n",
"so that\n",
"\\begin{equation}\n",
" \\boldsymbol{A}'=V'\\boldsymbol{A}_{\\text{diag}}\n",
"\\end{equation}\n",
"\n",
"Therefore: Under this conditions, for a fixed set of eigenvalues and eigenvectors (associated to the matrix $V'$) there is a unique $A'$ matrix\n",
"\n",
"__Example__\n",
"Let $V'=U^{\\operatorname{T}} V$ in the previous example. Find the matrix $A'$ which gives rise to the same eigenvalues"
]
},
{
"cell_type": "code",
"execution_count": 133,
"metadata": {},
"outputs": [],
"source": [
"Adiag=np.array( [[5,0],\n",
" [0,8]] )"
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.96592583, 0.25881905],\n",
" [-0.25881905, 0.96592583]])"
]
},
"execution_count": 134,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Vp=orthogonal(np.pi/4).transpose()@orthogonal(np.pi/3)\n",
"Vp"
]
},
{
"cell_type": "code",
"execution_count": 135,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 4.82962913, 2.07055236],\n",
" [-1.29409523, 7.72740661]])"
]
},
"execution_count": 135,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Ap=Vp@Adiag\n",
"Ap"
]
},
{
"cell_type": "code",
"execution_count": 136,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[5., 0.],\n",
" [0., 8.]])"
]
},
"execution_count": 136,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(Vp.transpose()@Ap).round(14)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finally, we can use the full procedure of hermitic matrices to obtain the bidiagonal matrices $U,V$\n",
"\n",
"__Example__:\n",
"Diagonalize the matrix $A$ by using the Theorem 1 instead"
]
},
{
"cell_type": "code",
"execution_count": 137,
"metadata": {},
"outputs": [],
"source": [
"A=np.array([[ 6.66674644, 3.13121253],\n",
" [-0.23343505, 5.8902893 ]])"
]
},
{
"cell_type": "code",
"execution_count": 139,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[54.25 , 16.88749537],\n",
" [16.88749537, 34.74999996]])"
]
},
"execution_count": 139,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A@A.transpose()"
]
},
{
"cell_type": "code",
"execution_count": 140,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[44.50000002, 19.50000001],\n",
" [19.50000001, 44.49999995]])"
]
},
"execution_count": 140,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A.transpose()@A "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"→ is obtained with `+i` or, similarly: ↓←"
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[63.99999999 24.99999997] → [8. 5.]\n"
]
},
{
"data": {
"text/plain": [
"array([[ 0.8660254, -0.5 ],\n",
" [ 0.5 , 0.8660254]])"
]
},
"execution_count": 141,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"λ2,V=np.linalg.eig( A@A.transpose() )\n",
"print(λ2,'→',np.sqrt(λ2))\n",
"#V=np.c_[ -V[:,0],V[:,0] ]\n",
"V"
]
},
{
"cell_type": "code",
"execution_count": 142,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[8. 5.]\n"
]
},
{
"data": {
"text/plain": [
"array([[ 0.70710678, -0.70710678],\n",
" [ 0.70710678, 0.70710678]])"
]
},
"execution_count": 142,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"λ2p,U=np.linalg.eig( A.transpose()@A )\n",
"print(np.sqrt(λ2))\n",
"U"
]
},
{
"cell_type": "code",
"execution_count": 143,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 8., -0.],\n",
" [ 0., 5.]])"
]
},
"execution_count": 143,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(V.transpose()@A@U ).round(14)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Actividad:__ Make the algorithm of reordering for theorem 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Mixed terms"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let:\n",
"\\begin{align}\n",
"X' = \n",
"\\begin{bmatrix}\n",
"B \\\\ \n",
"W \\\\\n",
"\\end{bmatrix}\n",
"\\end{align}\n",
"\n",
"Consider the quadratic equation \n",
"\\begin{align}\n",
"X^{\\prime\\operatorname{T}} M X^\\prime=& \\begin{bmatrix}\n",
"B & W \n",
"\\end{bmatrix}\n",
"\\begin{bmatrix}\n",
"M_{11} & M_{12} \\\\\n",
"M_{12} & M_{22} \\\\\n",
"\\end{bmatrix}\n",
"\\begin{bmatrix}\n",
"B \\\\ \n",
"W \\\\\n",
"\\end{bmatrix}\\\\\n",
"=& \n",
"\\begin{bmatrix}\n",
"B & W \n",
"\\end{bmatrix}\n",
"\\begin{bmatrix}\n",
"M_{11}B + M_{12}W \\\\\n",
"M_{12}B + M_{22}W \\\\\n",
"\\end{bmatrix}\\\\\n",
"=& \n",
"B( M_{11}B + M_{12}W)+ W ( M_{12}B + M_{22}W )\\\\\n",
"=&M_{11} B^2 + 2M_{12} BW+ M_{22} W^2\\,. \n",
"\\end{align}\n",
"The quadratic equation is in terms of: $M_{11}$, $M_{12}$ y $M_{22}$\n",
"\n",
"We can simplify this expression if we change to a new basis \n",
"$$\n",
"X=\\begin{bmatrix}\n",
"A\\\\\n",
"Z\n",
"\\end{bmatrix}\n",
"$$\n",
"in which $M$ is diagonal, in such a case the crossed term would disappear. \n",
"The rotation from $X'\\to X$ is defined by\n",
"\\begin{align}\n",
"X'=\n",
"\\begin{bmatrix}\n",
"B\\\\\n",
"W\n",
"\\end{bmatrix}\\equiv\n",
"\\begin{bmatrix}\n",
"\\cos\\theta & \\sin\\theta\\\\\n",
"-\\sin\\theta & \\cos\\theta\n",
"\\end{bmatrix}\n",
"\\begin{bmatrix}\n",
"A\\\\\n",
"Z\n",
"\\end{bmatrix}=\n",
"V X \n",
"\\end{align}\n",
"where $V$ is the rotation matrix\n",
"$$\n",
"V=\\begin{bmatrix}\n",
"\\cos\\theta & \\sin\\theta\\\\\n",
"-\\sin\\theta & \\cos\\theta\n",
"\\end{bmatrix}.\n",
"$$\n",
"Therefore\n",
"\\begin{align}\n",
"X\\equiv\n",
"\\begin{bmatrix}\n",
"A\\\\\n",
"Z\n",
"\\end{bmatrix}=V^{\\operatorname{T}} X' \\to X^{\\operatorname{T}}= X^{\\prime\\operatorname{T}} V\\,,\n",
"\\end{align}\n",
"\n",
"\n",
"\n",
"In the new basis\n",
"\\begin{align}\n",
"X^{\\prime\\operatorname{T}} M X^\\prime=&X^{\\prime\\operatorname{T}}V V^{\\operatorname{T}} M V V^{\\operatorname{T}} X^\\prime\\\\\n",
"=&(X^{\\prime\\operatorname{T}}V) (V^{\\operatorname{T}} M V) (V^{\\operatorname{T}} X^\\prime)\\\\\n",
"=& X^{\\operatorname{T}} M_{\\text{diag}} X \\\\\n",
"=& \\lambda_1 A^2+\\lambda_2 Z^2\\,.\n",
"\\end{align}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"such that $|\\lambda_1|\\le|\\lambda_2|$, where\n",
"\\begin{align}\n",
"M_{\\text{diag}}\\equiv V^{\\operatorname{T}} M V=\\begin{bmatrix}\n",
"\\lambda_1 & 0 \\\\ \n",
"0 & \\lambda_2 \\\\\n",
"\\end{bmatrix}\\,,\n",
"\\end{align}\n",
"\n",
"In this basis, the quadratic equation is in terms of eigenvalues and mixing angle, $\\theta$.\n",
"Therefore, there are not longer mixed terms.\n",
"\n",
"The diagonalization of quadratic equations can be straightforwardly generalized to $n$-th degree equations in terms of $n\\times n$ matrices\n"
]
},
{
"cell_type": "code",
"execution_count": 145,
"metadata": {
"hide_input": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"g =0.64996\n",
"gp=0.35523\n",
"v=246.22046 #GeV"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Example: Electroweak interactions\n",
"To understand the electromagnetic and weak fundamental interactions, the mathematical formulation need to be done in one basis where the photon field, denoted with a symbol $A$, is still not well defined. Instead, the field $B$, the precursor of $A$, appears along with the weak field $W$, the precursor of the electroweak field $Z$. In the _mathematical_ basis we have then\n",
"\\begin{align}\n",
"X' = \n",
"\\begin{bmatrix}\n",
"B \\\\ \n",
"W \\\\\n",
"\\end{bmatrix},\n",
"\\end{align}\n",
"and there, the symmetric mass matrix is calculated as (Details here: [PDF](https://github.com/restrepo/TCC/releases/latest))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "code",
"execution_count": 146,
"metadata": {},
"outputs": [],
"source": [
"M=(v**2/4)*np.array([[gp**2,-g*gp],\n",
" [-g*gp, g**2]])"
]
},
{
"cell_type": "code",
"execution_count": 147,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1912.52692086, -3499.32718938],\n",
" [-3499.32718938, 6402.67629426]])"
]
},
"execution_count": 147,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"M"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Checking that the determinant is zero"
]
},
{
"cell_type": "code",
"execution_count": 148,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.0"
]
},
"execution_count": 148,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.linalg.det(M).round(8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This imply that one egivanlue is zero"
]
},
{
"cell_type": "code",
"execution_count": 149,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0. , 8315.20321512])"
]
},
"execution_count": 149,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.linalg.eigvals(M).round(12)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"which means that the matrix rank, the number of non-zero eigenvalues, is 1"
]
},
{
"cell_type": "code",
"execution_count": 150,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 150,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.linalg.matrix_rank(M)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To make the change to the _phyisical_ basis,\n",
"$$\n",
"X=\\begin{bmatrix}\n",
"A\\\\\n",
"Z\n",
"\\end{bmatrix}\n",
"$$\n",
"through the rotation matrix\n",
"$$\n",
"V=\\begin{bmatrix}\n",
"\\cos\\theta_W & \\sin\\theta_W\\\\\n",
"-\\sin\\theta_W & \\cos\\theta_W\n",
"\\end{bmatrix},\n",
"$$\n",
"the following transformation need to be established\n",
"\\begin{align}\n",
"X'=\n",
"\\begin{bmatrix}\n",
"B\\\\\n",
"W\n",
"\\end{bmatrix}\\equiv\n",
"\\begin{bmatrix}\n",
"\\cos\\theta_W & \\sin\\theta_W\\\\\n",
"-\\sin\\theta_W & \\cos\\theta_W\n",
"\\end{bmatrix}\n",
"\\begin{bmatrix}\n",
"A\\\\\n",
"Z\n",
"\\end{bmatrix}=\n",
"V X\\,,\n",
"\\end{align}\n",
"such that $V$ is the diagonalization matrix of $M$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$M_{\\text{diag}}=V^{\\operatorname{T}} M V$$\n",
"with the normal ordering: $|\\lambda_1|\\le|\\lambda_2|$, and"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* $V$ → Diagonalization matrix\n",
"* $V$ → Ortogonal matrix\n",
"* $V$ → Rotation matrix\n",
"\n",
"To obtain the eigensystem, we use"
]
},
{
"cell_type": "code",
"execution_count": 152,
"metadata": {},
"outputs": [],
"source": [
"λ,V=np.linalg.eig(M)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"which in fact satisfy"
]
},
{
"cell_type": "code",
"execution_count": 153,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ -0. , 0. ],\n",
" [ 0. , 8315.20321512]])"
]
},
"execution_count": 153,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"( V.transpose()@M@V).round(12)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since the first (zero) eigenvalue is the one associated to $A$, we can interpret directly the rotation matrix without changing the order of the eigenvectors"
]
},
{
"cell_type": "code",
"execution_count": 154,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-0.87749437, 0.47958694],\n",
" [-0.47958694, -0.87749437]])"
]
},
"execution_count": 154,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"V"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that in fact, the absolute value of the first element of the first eigenvector is the larger one and corresponds to the component along the $B$-axis."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Therefore"
]
},
{
"cell_type": "code",
"execution_count": 155,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.5001839211647364"
]
},
"execution_count": 155,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"θ_W=np.arcsin( V[0,1] )\n",
"θ_W"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The eigenvalue associated to $Z$ is"
]
},
{
"cell_type": "code",
"execution_count": 156,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"91.18773610041056"
]
},
"execution_count": 156,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mZ=np.sqrt(λ[1])\n",
"mZ #GeV"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"corresponding to the $Z$ mass in units of $\\text{GeV}/c^2$. As a reference, the proton mass is approximately $1\\ \\text{GeV}/c^2$\n",
"\n",
"The physical observable associated to the _weak mixing angle_, $\\theta_W$, is (see [PDF](https://pdg.lbl.gov/2019/reviews/rpp2018-rev-phys-constants.pdf), along with the $Z^0$ _boson mass_, $m_Z$)"
]
},
{
"cell_type": "code",
"execution_count": 157,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.23000362966286086"
]
},
"execution_count": 157,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.sin(θ_W)**2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Corolary 1 Theorem II\n",
"For a unique unitary $n\\times n$ matrix $\\boldsymbol{V}$ and a set of unique of eigenvalues $\\lambda_1,\\lambda_2,\\ldots\\lambda_n$ there exists an infite set of mass matrices $\\boldsymbol{A}$, associated to the infinite sets of matrices $\\boldsymbol{U}$, such that\n",
"$$ \\boldsymbol{V}^\\dagger\\boldsymbol{A}\\,\\boldsymbol{U}=\\boldsymbol{A}_{\\text{diag}}\\,, $$\n",
"where \n",
"$\\boldsymbol{A}_{\\text{diag}}=\\operatorname{diag}(\\lambda_1,\\lambda_2,\\ldots \\lambda_n)$ is the diagonalized mass matrix. In particular, if $\\boldsymbol{A}$ is hermitic then there is only one possibility for $\\boldsymbol{U}=\\boldsymbol{V}$ and therefore $\\boldsymbol{A}$ is unique.\n",
"\n",
"## Corolary 2 Theorem II\n",
"An unique hermitic mass matrix, $\\boldsymbol{A}$, can be generated from an infinite set of arbitrary matrices $\\boldsymbol{Y}$, such that\n",
"$\\boldsymbol{A}=\\boldsymbol{Y}^{\\dagger}\\boldsymbol{Y}$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Example: Neutrino mass matrix\n",
"Returning back to the neutrino mixing discussion, it is worth noticing that in the mathematical basis\n",
"$$\n",
"N=\\left(\\begin{array}{l}\n",
"\\left|\\nu_{e}\\right\\rangle \\\\\n",
"\\left|\\nu_{\\mu}\\right\\rangle \\\\\n",
"\\left|\\nu_{\\tau}\\right\\rangle\n",
"\\end{array}\\right)\n",
"$$\n",
"the mass matrix, $\\mathcal{M}_\\nu$ is non-diagonal. However, if we assume that it is hermitic, then an unitary tranformation (rotation in the symmetric case), $\\boldsymbol{U}$ ,can be defined to diagonal basis as\n",
"$$\n",
"\\left(\\begin{array}{l}\n",
"\\left|\\nu_{e}\\right\\rangle \\\\\n",
"\\left|\\nu_{\\mu}\\right\\rangle \\\\\n",
"\\left|\\nu_{\\tau}\\right\\rangle\n",
"\\end{array}\\right)= \\boldsymbol{U}\\left(\\begin{array}{l}\n",
"\\left|\\nu_{1}\\right\\rangle \\\\\n",
"\\left|\\nu_{2}\\right\\rangle \\\\\n",
"\\left|\\nu_{3}\\right\\rangle\n",
"\\end{array}\\right),\n",
"$$\n",
"which is identified as the diagonalization matrix\n",
"$$\n",
"\\boldsymbol{U}^\\dagger \\mathcal{M}_\\nu \\boldsymbol{U}=\\operatorname{diag}(m_1,m_2,m_3).\n",
"$$\n",
"\n",
"According to the corrolary there is a set of infinite matrices complatible with an unique $\\boldsymbol{U}$ and the eigenvalues $m_1,m_2,m_3$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Casas-Ibarra parameterization\n",
"Consider a $n\\times n$ symmetric matrix $A$. We can assumme without lost of generality that this can be generated from a matrix $Y$ such that\n",
"$$\n",
"A=Y^{\\operatorname{T}}Y\n",
"$$\n",
"Theorem 1 gurantees that exists an ortogonal matrix $U$ such that\n",
"$$\n",
"U^{\\operatorname{T}} A U=U^{\\operatorname{T}} Y^{\\operatorname{T}}Y U=D_\\lambda\n",
"$$\n",
"where\n",
"$$\n",
"D_{\\lambda}=A_{\\text{diag}}=\\operatorname{diag}\\left(\\lambda_1,\\lambda_2,\\ldots,\\lambda_n\\right)\n",
"$$\n",
"where $\\lambda_i$ are the eigenvalues of $A$. Therefore\n",
"\\begin{align}\n",
" Y^{\\operatorname{T}}Y =&U D_\\lambda U^{\\operatorname{T}}\\\\\n",
" =&U D_{\\sqrt{\\lambda}} D_{\\sqrt{\\lambda}} U^{\\operatorname{T}}\\\\\n",
"\\end{align}\n",
"where\n",
"$$\n",
"D_{\\sqrt{\\lambda}}=\\operatorname{diag}\\left(\\sqrt{\\lambda_1},\\sqrt{\\lambda_2},\\ldots \\sqrt{\\lambda_n}\\right)\n",
"$$\n",
"Therefore, exists an ortogonal arbitrary matrix $R$, such that\n",
"$$\n",
" Y^{\\operatorname{T}}Y =U D_{\\sqrt{\\lambda}}R^{\\operatorname{T}}R D_{\\sqrt{\\lambda}} U^{\\operatorname{T}}\n",
"$$\n",
"\n",
"In this way, the matrix $Y$ can be parameterized in terms of $R$ as\n",
"$$\n",
"Y=R D_{\\sqrt{\\lambda}} U^{\\operatorname{T}}\n",
"$$\n",
"\n",
"\n",
"1) By using the previous equations, build a $2\\times 2$ $Y$ matrix with the following conditions\n",
"* $R$ is an orthogonal matrix with a rotation angle as a random number between $(0,2\\pi)$. Use your identification number as the seed of the random number generator.\n",
"* The eigenvalues are $\\lambda_1=2$ and $\\lambda_2=4$. \n",
"* $U$ is a diagonalization matrix with mixing angle $\\pi/4$\n",
"\n",
"2) Build the matrix $A$ and check that has the proper eigenvalues and eigenvectors"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1)"
]
},
{
"cell_type": "code",
"execution_count": 167,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"#np.random.seed(98554575)\n",
"\n",
"θ=np.random.uniform(0,2*np.pi)\n",
"\n",
"def orthogonal(θ):\n",
" return np.array( [[ np.cos(θ), np.sin(θ)],\n",
" [ -np.sin(θ), np.cos(θ) ]] )"
]
},
{
"cell_type": "code",
"execution_count": 168,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"R=\n"
]
},
{
"data": {
"text/plain": [
"array([[-0.97721326, -0.21225986],\n",
" [ 0.21225986, -0.97721326]])"
]
},
"execution_count": 168,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"λ1=2; λ2=4\n",
"R=orthogonal(θ)\n",
"U=orthogonal(np.pi/4)\n",
"D_sqrtλ=np.diag( np.sqrt([λ1,λ2]) )\n",
"print('R=')\n",
"R"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"From the equation for $Y$"
]
},
{
"cell_type": "code",
"execution_count": 169,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-1.27739403, 0.67703248],\n",
" [-1.16972838, -1.5942481 ]])"
]
},
"execution_count": 169,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Y=np.dot( np.dot( R,D_sqrtλ), U.transpose() )\n",
"Y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The symmetric matrix is"
]
},
{
"cell_type": "code",
"execution_count": 170,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[3., 1.],\n",
" [1., 3.]])"
]
},
"execution_count": 170,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Unique mass matrix\n",
"A=np.dot( Y.transpose(), Y)\n",
"A"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"2)"
]
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Eigenvalues=[4. 2.]\n",
"U=\n"
]
},
{
"data": {
"text/plain": [
"array([[ 0.70710678, -0.70710678],\n",
" [ 0.70710678, 0.70710678]])"
]
},
"execution_count": 162,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"λ,Unew=np.linalg.eig(A)\n",
"print('Eigenvalues={}'.format(λ))\n",
"print('U=')\n",
"Unew"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"After the reordering of the eigenvalues, we would obtain the original $U$ and therefore"
]
},
{
"cell_type": "code",
"execution_count": 172,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[2., 0.],\n",
" [0., 4.]])"
]
},
"execution_count": 172,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(U.transpose()@A@U).round(14)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this way, there is an infinity set of symmetric matrices $A$ which have the same eigenvalues and eigenvectors"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### THDM CP-even masses and mixing\n",
"Some times, the convention to identify the large projections in the non-diagonal basis.\n",
"\n",
"In this case we have the rotation between an interaction basis and a physical basis defined as\n",
"$$\n",
"\\begin{pmatrix}\n",
"R_1\\\\\n",
"R_2\\\\\n",
"\\end{pmatrix}=\n",
"\\begin{pmatrix}\n",
"\\cos\\alpha & -\\sin\\alpha \\\\\n",
"\\sin\\alpha & \\cos\\alpha \\\\\n",
"\\end{pmatrix}\n",
"\\begin{pmatrix}\n",
"H\\\\\n",
"h\\\\\n",
"\\end{pmatrix}.\n",
"$$\n",
"Since the diagonalization of a symmetric $2\\times 2$ matrix can be obtained analitically,\n",
"here we build a $2\\times 2$ symmetric matrix from the eigenvalues, $m_H$ and $m_h$, and the rotation angle, $\\alpha$, and check with the numerical results by using a benchmark point:\n",
"\n",
"→ [Benchmark point BP9](https://twiki.cern.ch/twiki/pub/LHCPhysics/LHCHXSWG3Benchmarks2HDM/Exotic_Benchmarks.pdf)\n",
"\n",
"Here, the eigenvalue $m_h$ is defined as the one with the eigenvector with the larger projection upon $R_2$"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from scipy import optimize\n",
"G_F=1.1663787E-5 #GeV^-2\n",
"v=1/np.sqrt(np.sqrt(2.)*G_F) # GeV\n",
"\n",
"#********* BP9 ************\n",
"tanβ=2\n",
"sinβ_α=0.6 # sin(β-α)\n",
"m_h = 125 # GeV/c^2 (c→1)\n",
"m_H = 300 # GeV/c^2 \n",
"m_A = 300 # GeV/c^2\n",
"m_Hp= 400 # GeV/c^2\n",
"m2_12=100**2 # (GeV/c^2)^2\n",
"#***********************"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The formula for the mass matrix in terms of the previous parameters can be found in [[hep-ph/0207010](https://arxiv.org/pdf/hep-ph/0207010.pdf),[arXiv:1507.00933](https://arxiv.org/pdf/1507.00933.pdf)]. We assumme here that $\\lambda_6=\\lambda_7=0$. See Appendix D of [[hep-ph/0207010](https://arxiv.org/pdf/hep-ph/0207010.pdf)] for full formulas"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"α= 0.46364760900080604\n"
]
},
{
"data": {
"text/plain": [
"1.63919914780058"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"β=np.arctan(tanβ)\n",
"α=β-np.arcsin(sinβ_α) # <= np.pi/2~1.57\n",
"print('α=',α)\n",
"λ1 =(m_H**2*np.cos(α)**2+m_h**2*np.sin(α)**2-m2_12*np.tan(β))/(v**2*np.cos(β)**2)\n",
"λ_2 =(m_H**2*np.sin(α)**2+m_h**2*np.cos(α)**2-m2_12/np.tan(β))/(v**2*np.sin(β)**2)\n",
"λ3 =((m_H**2-m_h**2)*np.cos(α)*np.sin(α)+2*m_Hp**2*np.sin(β)*np.cos(β)-m2_12)/(v**2*np.sin(β)*np.cos(β))\n",
"λ4 =((m_A**2-2*m_Hp**2)*np.sin(β)*np.cos(β)+m2_12)/(v**2*np.sin(β)*np.cos(β))\n",
"λ5 =(m2_12-m_A**2*np.sin(β)*np.cos(β))/(v**2*np.sin(β)*np.cos(β))\n",
"λ345=λ3+λ4+λ5\n",
"λ345"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [],
"source": [
"def M2(β,λ1,λ_2,λ5,λ345,m2_12,v=246.2):\n",
" mA2=m2_12/(np.sin(β)*np.cos(β))-λ5*v**2\n",
" M11=λ1*v**2*np.cos(β)**2+(mA2+λ5*v**2)*np.sin(β)**2\n",
" M12=(λ345*v**2-(mA2+λ5*v**2))*np.sin(β)*np.cos(β)\n",
" M22=λ_2*v**2*np.sin(β)**2+(mA2+λ5*v**2)*np.cos(β)**2\n",
" return np.array( [[M11, M12],\n",
" [M12, M22]])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this way, from the BP point, we can build the $2\\times2$ symmetric mass $\\mathcal{M}$:"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[75125., 29750.],\n",
" [29750., 30500.]])"
]
},
"execution_count": 96,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ℳ2=M2(β,λ1,λ_2,λ5,λ345,m2_12,v=v)\n",
"ℳ2"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [],
"source": [
"m2,V=np.linalg.eig(ℳ2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"By using the proper basis\n",
"$$\n",
"\\left(\\begin{array}{cc}\n",
"m_{H}^{2} & 0 \\\\\n",
"0 & m_{h}^{2}\n",
"\\end{array}\\right)=\\left(\\begin{array}{rr}\n",
"\\cos{\\alpha} & \\sin{\\alpha} \\\\\n",
"-\\sin{\\alpha} & \\cos{\\alpha}\n",
"\\end{array}\\right)\\left(\\begin{array}{ll}\n",
"\\mathcal{M}_{11}^{2} & \\mathcal{M}_{12}^{2} \\\\\n",
"\\mathcal{M}_{12}^{2} & \\mathcal{M}_{22}^{2}\n",
"\\end{array}\\right)\\left(\\begin{array}{lr}\n",
"\\cos{\\alpha} & -\\sin{\\alpha} \\\\\n",
"\\sin{\\alpha} & \\cos{\\alpha}\n",
"\\end{array}\\right).\n",
"$$\n",
"Therefore\n",
"$$\n",
"U=\\left(\\begin{array}{lr}\n",
"\\cos{\\alpha} & -\\sin{\\alpha} \\\\\n",
"\\sin{\\alpha} & \\cos{\\alpha}\n",
"\\end{array}\\right).\n",
"$$\n",
"Since $-\\pi/2\\le\\alpha\\le\\pi/2$ then $\\cos\\alpha\\ge 0$. In this way, we must obtain $\\alpha$ from $\\tan\\alpha$ to avoid ambiguities with a global sign in the second eigenvector \n",
"$$\n",
"\\tan\\alpha=\\frac{\\sin\\alpha}{\\cos\\alpha}=-\\frac{U_{01}}{U_{11}}\\,.\n",
"$$\n",
"\n",
"The eigenvector with large projection in the second component along $R_2$ ( Interaction basis $(R_1,R_2)$ → Mass basis $(H^0,h^0)$) is the associated with the standard model Higgs mass, $m_h$"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.89442719, -0.4472136 ],\n",
" [ 0.4472136 , 0.89442719]])"
]
},
"execution_count": 98,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"V"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0, 1)"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"if np.abs(V[0,1])<=np.abs(V[1,1]):\n",
" H=0; h=1\n",
"else:\n",
" H=1; h=0\n",
"(H,h)"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.89442719, -0.4472136 ],\n",
" [ 0.4472136 , 0.89442719]])"
]
},
"execution_count": 100,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U=np.c_[ V[:,H],V[:,h] ]\n",
"U"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(300.0, 125.0)"
]
},
"execution_count": 101,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"M2diag=np.dot( np.dot( U.transpose(),ℳ2), U).round(9)\n",
"mH,mh=np.sqrt(M2diag[0,0]),np.sqrt(M2diag[1,1])\n",
"mH,mh"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.4636476090008061\n"
]
}
],
"source": [
"tanα=-U[0,1]/U[1,1]\n",
"\n",
"α=np.arctan(tanα)\n",
"if α>=-np.pi/2 and α<=np.pi/2:\n",
" print(α)\n",
"else:\n",
" print('Bad α range')"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8"
]
},
"execution_count": 103,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.cos(β-α)"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.5999999999999999"
]
},
"execution_count": 104,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.sin(β-α)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Analytical diagonalization from [[arXiv:1507.00933](https://arxiv.org/pdf/1507.00933.pdf)]"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [],
"source": [
"Δ=np.sqrt( (ℳ2[0,0]-ℳ2[1,1])**2+4*ℳ2[0,1]**2 )"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([300., 125.])"
]
},
"execution_count": 106,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.sqrt( [0.5*( ℳ2[0,0]+ℳ2[1,1]+Δ ),\n",
" 0.5*( ℳ2[0,0]+ℳ2[1,1]-Δ ) ])"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"U=\n"
]
},
{
"data": {
"text/plain": [
"array([[ 0.89442719, -0.4472136 ],\n",
" [ 0.4472136 , 0.89442719]])"
]
},
"execution_count": 107,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Cosα,Sinα=( np.sqrt((Δ+ℳ2[0,0]-ℳ2[1,1])/(2*Δ)),\n",
" np.sqrt(2)*ℳ2[0,1]/np.sqrt(Δ*(Δ+ℳ2[0,0]-ℳ2[1,1])) )\n",
"print('U=')\n",
"np.array([[Cosα,-Sinα],[Sinα,Cosα]])"
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"cos(β-α)=0.8\n"
]
}
],
"source": [
"print('cos(β-α)={}'.format(np.cos( β- np.arctan( Sinα/Cosα) )))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Activity\n",
"Let\n",
"$$\n",
"\\boldsymbol{M}=\\begin{bmatrix}\n",
"1 & 2\\\\\n",
"3 & 4\\\\\n",
"\\end{bmatrix}\n",
"$$\n",
"Choose the diagonalization method (A/B)\n",
"* A: \n",
"```python\n",
"np.linalg.eig(M)\n",
"```\n",
"* B:\n",
"```python\n",
"from scipy import linalg\n",
"linalg.svd(M)\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from activities import *\n",
"x=input('A or B?\\n')\n",
"activities(x,\"7.1\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"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.9.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}