Skip to content

Instantly share code, notes, and snippets.

@sauravrt
Created November 22, 2012 05:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sauravrt/4129484 to your computer and use it in GitHub Desktop.
Save sauravrt/4129484 to your computer and use it in GitHub Desktop.
WishartMatrix
{
"metadata": {
"name": "WishartMatrix"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": "## Wishart Matrix and Marchenko Pastur Distribution\n\nA Wishart matrix is a $N \\times N$ random matrix of the form $W = XX^H$, where X is an $N \\times L$ random matrix with IID entries. A Wishart matrix is parameterized by $c = \\frac{N}{L}$. \nThe limiting eigenvalue denisty function of a Wishart matrix as $N, L \\rightarrow \\infty$ and $\\frac{N}{L} \\rightarrow c$ is given by the **Marchenko Pastur** density function.\n"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Marchenko Pastur Distribution is given by\n\n<center>\n $f(x) = \\frac{1}{2\\pi c}\\sqrt{(a - x)(x - b)}$\n</center>\n\nwhere $a = (1 + \\sqrt{c})^2$ and $b = (1 - \\sqrt{c})^2$ are the upper and lower bounds of $f(x)$."
},
{
"cell_type": "code",
"collapsed": false,
"input": "def marcenkopasturpdf(x, c):\n # Marchenko Pastur Density Function for c > 1\n ub = (1 + sqrt(c))**2\n lb = (1 - sqrt(c))**2\n mp = sqrt((x - lb)*(ub - x))/(2*pi*c*x)\n return (mp)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 74
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Example below shows a case of Wishat matrix obtained from a random matrix of size $N \\times L$ with Complex Gaussian IID entries. The parameter $c$ is set to a fixed value and for a choice of value for $N$, $L = N/c$. \nA histogram of the eigenvalues of the computed Wishart matrix is compared with the actual Marchenko Pastur density for a given $c$."
},
{
"cell_type": "code",
"collapsed": false,
"input": "N = 256\nc = 0.8\nL = N/c\n\n# Random matrix realization\nX = sqrt(0.5)*(randn(N, L) + 1j*randn(N, L))\nWc = dot(X, conj(X.T))/L\nD, U = eig(Wc)\nhist(D, 40, normed=True)\n\nmp = marcenkopasturpdf(arange(lb, ub, 0.01), c)\nplot(arange(lb, ub, 0.01), mp, linewidth = 2, color='red')\nxlim((lb,ub))\nylabel('f(x)')\nxlabel('Eigenvalue')\n",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 76,
"text": "<matplotlib.text.Text at 0x6499a50>"
},
{
"output_type": "display_data",
"png": "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\nw0GXiC1PR7u7u1u6c7GxsRiNRi5cuNCldXaEmp/q7s7X3Gg0sn79eqZMmcL48eObHO/O172t2rvz\ndW/k4eFBbGwsp0+ftnq9O1/3Ri3V3pHrLiFwidjydHRZWZnlL4zGoaJLMaZnb2p+qru7XnNFUXjl\nlVcICwvjuuuua/ac7nrdbam9u153g8FARUUFUH+3zdGjR5vc+dNdr7sttXfkusvDYpdQW09Hf/nl\nlyQlJaHVanF1deW2225j8ODBDq4aNmzYQGpqKgaDAV9fX+bNm4fJZAK6/1PdbdXeXa/5iRMnePzx\nxxkwYACahuXRb775Zktvsjtfd1tq767XPScnh02bNmE2m1EUhSuvvJLZs2erYhUDW2rvyHWXEBBC\niF5MhoOEEKIXkxAQQoheTEJACCF6MQkBIYToxSQERI/23XffsWbNGkeX0apVq1axc+dOR5cheil5\nYlj0CPfddx/l5eVotb/8XXP11Vfz5z//mSlTpjiwsrY13mYphCNICIge45FHHuGyyy5zdBlCqIqE\ngOjRvv32W3bu3MkTTzwBwOHDh3njjTcoLy9nypQp5OTkcNVVVzFt2jQAdu7cyWeffUZZWRnR0dHc\nc889loUBb7zxRu666y4+//xzDAYDkydP5s4776Suro67776bJ598kv79+wP1T3cuWrSIzZs3o9Vq\n2bhxI+np6ZhMJoYOHcrdd9/d7FIE//znPykoKGDx4sVA/QJtixcv5v3330er1VJZWclbb71FSkoK\nGo2Gq6++mnnz5ln1gIRoD/kvR/QYbT33aDAYeOGFF7jlllt44403CAkJIS0tzXJ8//79fPzxxyxb\ntozExERiYmKaLL6VnJzM2rVrWbduHd9//z0pKSk4OzszYcIE9uzZYzlv7969DB8+HB8fHwCmTZvG\n5s2bSUhIwMXFhcTExA79jps2bcLJyYmXX36Z5557jsOHD8t8gugUCQHRY6xbt44///nPlq8dO3ZY\nHT906BADBgxg/PjxaLVaZs6cabUmTFJSEnPmzCE0NBStVsucOXPIysqyWhhwzpw5eHh4EBAQwPDh\nw8nKygJg8uTJViGwZ88eJk2aBNSv3TJ+/HhcXFxwc3Nj7ty5pKamtvv3KysrIyUlhdtvvx0XFxd8\nfHyYOXOm1ecK0V4yHCR6jIceeqjJnMC3335r+b60tLTJEMzF68afO3eOrVu38s4771idc/FeEReH\nhqurKzU1NQAMHz6c2tpa0tPT8fHxISsry7K6Zk1NDW+99RaHDx+2rOhYXV2NoijtmhQuKirCaDRy\nzz33WF4zm81W+1gI0V4SAqLX8PPz4+DBg5afFUWxWjI4ICCAG264gcmTJ7e7ba1Wy8SJE9mzZw8+\nPj7ExcVZ1tj/7LPPyM/P5+mnn6ZPnz5kZWXx8MMPNxsCrq6u1NbWWn6+eEcrf39/nJ2dSUxMlDkA\nccnIf0mix2hrTiA2NpacnBz279+PyWRi+/btVv/IxsfHs23bNnJzcwGorKzk+++/t/nzGoeEdu/e\nbRkKgvqegIuLCx4eHly4cIF//vOfLbYZHh5OamoqRUVFVFZW8vHHH1uO+fn5MWrUKN5++22qqqow\nm80UFBR0aGhJiEbSExA9xrPPPmv1F/LIkSOJi4uz/LXt4+PD0qVLefPNN9m0aRNTpkwhKioKZ2dn\nAMaPH091dTUvvvgi586dw8PDg1GjRjFx4sRmP+/Xf8VHR0fj5uZGWVkZsbGxltdnzpzJSy+9xJ13\n3oler+f6669vcf/pkSNHcsUVV7Bs2TJ8fHyYPXu2Ve/lvvvu47333uNvf/sbVVVVBAUF8bvf/a5j\nF0wIZClp0YuZzWYWLlzIkiVLGDZsmKPLEcIhZDhI9CqHDx+moqKCuro6tm3bBtBkk3QhehMZDhK9\nSlpaGi+99BJGo5GwsDCWLVtmGQ4SojeS4SAhhOjFZDhICCF6MQkBIYToxSQEhBCiF5MQEEKIXkxC\nQAghejEJASGE6MX+P/T85v7c87ufAAAAAElFTkSuQmCC\n"
}
],
"prompt_number": 76
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment