{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Coulomb's law for a one-dimensional source:\n",
"Using the notation of Griffiths, the electric field at observation point ${\\bf r}$ due to a one-dimensional charge\n",
"distribution is\n",
"\n",
"$$\n",
"{\\bf E}({\\bf r}) = \\frac{1}{4\\pi\\epsilon_0}\\, \\int\\frac{{\\bf s}}{s^3}\\, \\lambda({\\bf r}^\\prime)\\, d\\ell^\\prime,\n",
"\\tag{1}\n",
"$$\n",
"\n",
"where $\\lambda$ Is the linear charge density of the 1-d source, $d\\ell^\\prime$ is an infinitesimal length along the 1-d source, \n",
"and ${\\bf s}$ is a stand-in for Griffiths' script-r vector from source point $dq=\\lambda\\, d\\ell^\\prime$ at position ${\\bf r}^\\prime$ to the observation point at ${\\bf r}$:\n",
"\n",
"\\begin{equation}\n",
"{\\bf s} \\equiv {\\bf r} - {\\bf r}^\\prime.\n",
"\\tag{2}\n",
"\\end{equation}\n",
"\n",
"Equation (1) is just Griffiths Eq. (2.6), with the substition\n",
"\n",
"$$\n",
"\\frac{\\hat{\\bf s}}{s^2} \\longrightarrow \\frac{\\bf s}{s^3}.\n",
"\\tag{3}\n",
"$$\n",
"\n",
"For 1-d sources it is appropriate to parametrize the path in terms of a single scalar \n",
"variable which I call $t$:\n",
"\n",
"$$\n",
"{\\boldsymbol \\ell}^\\prime(t) = \n",
"x^\\prime(t)\\, \\hat{{\\bf x}}\n",
"+ y^\\prime(t)\\, \\hat{{\\bf y}}\n",
"+ z^\\prime(t)\\, \\hat{{\\bf z}},\n",
"\\tag{4}\n",
"$$\n",
"\n",
"so \n",
"$$\n",
"{\\bf s} \\longrightarrow {\\bf r} - {\\boldsymbol \\ell}^\\prime(t),\n",
"\\tag{5}\n",
"$$\n",
"\n",
"and the linear charge density becomes\n",
"\n",
"$$\n",
"\\lambda \\longrightarrow \\lambda(t).\n",
"\\tag{6}\n",
"$$\n",
"\n",
"We also have\n",
"\n",
"$$ \n",
"d{\\boldsymbol \\ell}^\\prime = \\left(\n",
"\\frac{dx^\\prime}{dt}\\, \\hat{\\bf x} + \n",
"\\frac{dy^\\prime}{dt}\\, \\hat{\\bf y} + \n",
"\\frac{dz^\\prime}{dt}\\, \\hat{\\bf z}\\right)\\, dt\n",
"\\tag{7}\n",
"$$\n",
"\n",
"which gives\n",
"\n",
"$$\n",
"d\\ell^\\prime = \\sqrt{\\left(\\frac{dx^\\prime}{dt}^2 + \\frac{dy^\\prime}{dt}^2 + \n",
"\\frac{dz^\\prime}{dt}^2\\right)}\\, dt\n",
"\\tag{8}\n",
"$$\n",
"\n",
"It is convenient to work with dimensionless parameters defined in terms of some length\n",
"$R$ and charge $Q$ characterizing the source:\n",
"\n",
"$$\n",
"{\\bf r}^\\ast \\equiv \\frac{\\bf r}{R} \\quad\\quad {\\boldsymbol \\ell}^\\ast \\equiv \\frac{\\boldsymbol \\ell}{R}\\quad\\quad \n",
"{\\bf s}^\\ast \\equiv \\frac{\\bf s}{R}\\quad\\quad \\lambda^\\ast = \\frac{\\lambda}{Q/R}\\quad\\quad \n",
"\\mbox{and} \\quad\\quad{\\bf E}^\\ast \\equiv \\frac{{\\bf E}}{Q/(4\\pi \\epsilon_0 R^2)}.\n",
"\\tag{9}\n",
"$$\n",
"\n",
"Coulomb's law for 1-d sources written in terms of these parameters is \n",
"\n",
"\\begin{eqnarray*}\n",
"{\\bf E}^\\ast &=& \\int \\frac{{\\bf s}^\\ast}{{s^\\ast}^3}\\lambda^\\ast\\, d{l^\\prime}^\\ast \\\\\n",
" &=& \\int_{t_1}^{t_2} \\frac{{\\bf s}^\\ast}{{s^\\ast}^3} \\lambda^\\ast(t)\\, \n",
" \\sqrt{\\left(\\frac{d{x^\\prime}^\\ast}{dt}^2 + \\frac{d{y^\\prime}^\\ast}{dt}^2 + \n",
"\\frac{d{z^\\prime}^\\ast}{dt}^2\\right)}\\, dt\n",
"\\tag{10}\n",
"\\end{eqnarray*}\n",
"\n",
"This is really three separate integrals, one for each component.\n",
"\n",
"All calculations in what follow will be in terms of dimensionless variables, asterisks will \n",
"be implicit. The dimensional electric \n",
"field can be recovered by multiplying the numerical results below by the factor $Q/(4\\pi\\epsilon_0 R^2)$.\n",
"\n",
"This notebook uses the quad_vec
method from the integrate
submodule of scipy
\n",
"for numerical integration. There are other choices, but this works well (and I like to use scipy
\n",
"tools when they're available).\n",
"\n",
"\n",
"Marty Ligare, November 2022, March 2024"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from scipy import integrate\n",
"import numdifftools as nd\n",
"\n",
"import matplotlib as mpl\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# %matplotlib notebook # Use this for notebooks before Notebook 7\n",
" # If used in Notebook 7, graphics calls return \"Javascript Error: IPython is not defined\"\n",
" #\n",
" # Use following for Notebook 7. See https://github.com/jupyter/notebook/issues/7115\n",
"%matplotlib widget \n",
"\n",
"mpl.style.use('classic')\n",
"\n",
"# M.L. modifications of matplotlib defaults using syntax of v.2.0\n",
"# More info at http://matplotlib.org/2.0.0/users/deflt_style_changes.html\n",
"# Changes can also be put in matplotlibrc file, or effected using mpl.rcParams[]\n",
"plt.rc('figure', figsize=(6, 4.5)) # Reduces overall size of figures\n",
"plt.rc('axes', labelsize=16, titlesize=14)\n",
"# Adjusts supblot parameters for new size\n",
"plt.rc('figure', autolayout=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Source-independent functions\n",
"### These functions do not have to be modfified for different 1-d charge distributions\n",
"Vectors will be represented with `numpy` arrays."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"def integrand(t, x, y, z):\n",
" '''\n",
" Integrand of Eq. (10) above.\n",
" Inputs are 1) the parameter \"t\" used in Eqs. (4-8) above, and the cartesian coordinates x, y, and z of the obesrvation\n",
" point. Individual cartesion coordinats are used (rather than an array representing a vector for ease of passing of 'args'\n",
" for the numerical integration done by scipy's integrate.quad_vec().\n",
" Return value coefficients in an infinitesimal vector field element in represented in a numpy array (with cartesian \n",
" coordinates as its elements).\n",
" '''\n",
" r = np.array([x,y,z]) # numpy array representing observation point vector\n",
" s = r - l(t) # numpy array representing vector from source point to observation point.\n",
" dE = s/np.dot(s,s)**(3/2)*lam(t)*np.sqrt(np.dot(dl(t),dl(t)))\n",
" return dE # infinitesimal field vector returned as numpy array\n",
"\n",
"def e(r):\n",
" '''\n",
" Numerical integration of Eq. (10) above.\n",
" Input is a numpy array representing the observation point vector.\n",
" Return is the vector field represented in a numpy array (with cartesian coordinates as its elements).\n",
" '''\n",
" #x = r[0]\n",
" #y = r[1]\n",
" #z = r[2]\n",
" a = integrate.quad_vec(integrand, t1, t2, args=tuple(r))\n",
" return(a[0])\n",
"\n",
"def ex(x, y, z):\n",
" '''\n",
" Isolation of the x-component of the vector field returned by function e(r).\n",
" This is useful when creating meshgrids necessary for use in matplotlib plotting of field vectors.\n",
" '''\n",
" r = np.array([x,y,z])\n",
" return e(r)[0]\n",
"\n",
"def ey(x, y, z):\n",
" '''\n",
" Isolation of the y-component of the vector field returned by function e(r).\n",
" This is useful when creating meshgrids necessary for use in matplotlib plotting of field vectors.\n",
" '''\n",
" r = np.array([x,y,z])\n",
" return e(r)[1]\n",
"\n",
"def ez(x, y, z):\n",
" '''\n",
" Isolation of the z-component of the vector field returned by function e(r).\n",
" This is useful when creating meshgrids necessary for use in matplotlib plotting of field vectors.\n",
" '''\n",
" r = np.array([x,y,z])\n",
" return e(r)[2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Circle of charge; extending Griffiths Problem 2.5\n",
"#### This is the same source as considered in the notebook `coulomb_1D_circle_1`. The difference is the way that the differential line element is determined. In `coulomb_1D_circle_1` the derivatives are taken 'by hand' and then rendered into code. In this notebook, `coulomb_1D_circle_2`, the derivatives are determined numerically using the `nd.Dervative()` function from the `numdifftools` package.\n",
"\n",
"#### Characterizing the source\n",
"Charge $Q$ uniformly distributed on a ring of radius $R$ in the $x$-$y$ plane. An obvious choices for the \n",
"characteristic length and charge is $R$ and $Q$.\n",
"One way to parametrize of charge (in dimensionless variables) is\n",
"\n",
"$$ \n",
"{\\boldsymbol \\ell}(t) = \\cos(\\pi t)\\, \\hat{{\\bf x}} + \\sin(\\pi t)\\, \\hat{\\bf y}\\quad\\quad\\mbox{for $t=0 \\longrightarrow 2$},\n",
"\\tag{11}\n",
"$$\n",
"\n",
"giving \n",
"\n",
"$$\n",
"d{\\boldsymbol \\ell} = \\left[-\\pi \\sin(\\pi t) dt\\, \\hat{\\bf x} + \\pi \\cos(\\pi t)\\, \\hat{{\\bf y}} \\right]\\, dt.\n",
"\\tag{12}\n",
"$$\n",
"\n",
"The dimensionless charge density is \n",
"\n",
"$$ \n",
"\\lambda^\\ast = \\frac{\\lambda}{Q/R} = \\frac{Q/2\\pi R}{Q/R} = \\frac{1}{2\\pi}.\n",
"\\tag{13}\n",
"$$\n",
"\n",
"NOTE: In this example it is easy to determine $d{\\boldsymbol \\ell}$. In a later example I will show how \n",
"to find the derviative numerically with the numdifftools
package. (For an an intro \n",
"to numdifftools
see https://www.eg.bucknell.edu/~phys310/jupyter/numdiff.html, or, in Jupyter notebook form, https://www.eg.bucknell.edu/~phys310/jupyter/numdiff.ipynb.)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Python functions that characterize the source\n",
"### These functions do need to be modified for different sources\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"# limits for the paramter t; see Eqs. (11&12) above\n",
"t1 = 0\n",
"t2 = 2\n",
"\n",
"def l(t):\n",
" '''\n",
" Parameterization of linear charge distribution position vector\n",
" See Eq. (11) above.\n",
" '''\n",
" lx = np.cos(np.pi*t)\n",
" ly = np.sin(np.pi*t)\n",
" lz = 0\n",
" return np.array([lx, ly, lz])\n",
"\n",
"def dl(t):\n",
" '''\n",
" Coefficients in differential vector line element.\n",
" See Eq. (12) above.\n",
" Use numdifftools to calculate components of dfferential line element vector.\n",
" '''\n",
" dl = nd.Derivative(l)\n",
" return np.array([dl(t)[0], dl(t)[1], dl(t)[2]])\n",
"\n",
"def lam(t):\n",
" '''\n",
" Linear charge density.\n",
" See Eq. (13) above.\n",
" '''\n",
" return 1/2/np.pi"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Comparing analytical and computational results for on-axis field\n",
"#### Computational result for non-dimensional point (0,0,1)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([7.96454916e-16, 1.36002321e-15, 3.53553391e-01])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r = np.array([0,0,1])\n",
"e(r)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Computational non-dimensional ${\\bf E}$:\n",
"\n",
"$$\n",
"{\\bf E}^\\ast \\simeq 0.353555\\, \\hat{\\bf z}\n",
"$$ \n",
"\n",
"Computational dimensional field:\n",
"$$\n",
"{\\bf E} \\simeq \\frac{Q}{4\\pi\\epsilon_0 R^2} \\times {\\bf E}^\\ast = \\frac{Q}{4\\pi\\epsilon_0 R^2}\\times 0.35355\\, \\hat{\\bf z}\n",
"$$\n",
"\n",
"Analytical result (solution of Griffiths problem 2.5):\n",
"$$\n",
"{\\bf E}(0,0,z) = \\frac{1}{4\\pi\\epsilon_0}\\, \\frac{\\lambda (2\\pi R) z}{(R^2 + z^2)^{3/2}} \\, \\hat{\\bf z}\n",
" = \\frac{1}{4\\pi\\epsilon_0 R^3}\\, \\frac{Q z}{(1 + (z/R)^2)^{3/2}} \\, \\hat{\\bf z}\n",
"$$\n",
"\n",
"\n",
"\n",
"Non-dimensional $z^\\ast = 1$ $\\longrightarrow$ $z = R$, so the analytical result for this point is \n",
"\n",
"$$\n",
"{\\bf E}(0,0,R) = \\frac{Q}{4\\pi\\epsilon_0 R^2}\\, \\frac{1}{{2}^{3/2}} \\, \\hat{\\bf z} \\simeq \\frac{Q}{4\\pi\\epsilon_0 R^2}\\, 0.353555\\, \\hat{\\bf z}\n",
"$$\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Visualizing the vector field."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"z = np.linspace(1,3,3)\n",
"x = np.linspace(-2,2,5)\n",
"X, Z = np.meshgrid(x,z)\n",
"\n",
"vec_ex = np.vectorize(ex)\n",
"vec_ez = np.vectorize(ez)\n",
"U, W = vec_ex(X, 0, Z), vec_ez(X, 0, Z)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "04f200e659104ed9ae37414d444dccbe",
"version_major": 2,
"version_minor": 0
},
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAAxOAAAMTgF/d4wjAABMO0lEQVR4nO3deVhUZf8G8JtFRUHBBdwTl19ipuKauSSKy6smmmspKqaliYaOW6iV+YpJaa+WmZh7pVJqGfoiWuJSQqQlr5pYJi4puCGDiKxzfn/gjHNYhsM2z2Hm/lwXV82ZM8N3bp8zX845z5yxkSRJAhEREZmVregCiIiIrBEbMBERkQBswERERAKwARMREQnABkxERCQAGzAREZEAbMBEREQCsAETEREJwAZMREQkABswERGRAGzAREREArABExERCcAGTEREJAAbMBERkQBswERERAKwAZezJUuWwMbGpsCfKVOmGNZxcHAol9//3XffYe3atcWqt6xq+c9//gN3d3fY29vD09OzxM9fnMc4ODhgyZIlZfZ8lkztORQ0fiqassxYxL9XWf0b+Pn5wcPDo+wKsxD2oguwBpUrV8axY8fyLXdzcyv33/3dd98hOjoaM2bMULT+lClTMGjQoFL/3vPnz0Oj0WDevHkYNmwYqlevXqbPXxpqqKE4Hj16hPnz58Pd3R2JiYlwc3PDvHnzRJdVrgobPxVNRRtrxizl30DN2IDNwMbGBl27dhVdhkmSJCEjIwONGjVCo0aNSv18cXFxAIBp06ahWbNmhuVl9fyloYYaiuOtt95C7dq1MWfOHACAl5cXmjRpgtGjRwuurPwUNn6M6cesmvfiixpran4NSv4N1ELNOZrCQ9AqFhMTg/79+6N69epwcnLC0KFDER8fL1vn119/xeDBg+Hi4gJHR0d4enpi586dAHIP+2zbtg0XL140HPb28/Mz3Ofh4YEffvgBHTt2hIODA3bt2lXoYS5TvycvPz8/jBw5EgDQvHlz2NjYYOvWrQAKPoym5HUWZOvWrWjevDmqVq2K7t2748yZM0U+pqAa9FmcPHkSnTt3RrVq1dCuXTv8+OOPip6vPKWlpWHjxo0YPny4YdlLL72E7du3m3yc/jX9+OOP8PT0hIODA5599lkcPHjQ5ON++eUXvPTSS2jYsCGqVauG1q1b46OPPoJOp8v33EryKsm/bWHjp7Axq7d//3507twZVatWRZ06dTBx4kTcvn07X92RkZFo3749qlatig4dOuDUqVPIzMzErFmz4Orqirp16yIwMFD2mgtT1HZR2Fgr6DUUZxsrTb5K8jK1DZc0CwBFjhkl409fX2E5btq0Cc2aNTO8L8TGxhZ4aqo02ZUVNmAzyc7OzvcjSVKh68fExOCFF16Avb09vvzyS3zxxRe4evUqvL29kZGRAQCIiopCz549kZSUhPXr12Pfvn2YMGECrl69CgB4++23MWjQIDRp0gRRUVGIiorC22+/bfgdt27dwrRp0+Dv74+DBw8Wupde1O/J6+2338a///1vAMDevXsRFRWFwYMHl/h1FiQ8PByTJk3Cc889h2+//RajRo3CiBEjkJOTU+hjTLl9+zZef/11zJw5E3v37kX16tXx0ksvISkpqUTPV1YuXryItLQ0NGnSxLCsSZMmOHbsmMnxA+S+pldffRUzZ87E7t270aBBA/j4+OCPP/4o9DFXr15F586dERISggMHDuDVV1/FkiVL8r15KcmrpP+2psZPYWP2wIED8PHxQaNGjbB792588MEHiIiIQO/evZGeni6rOyAgAHPnzsXu3buRmZmJ4cOH47XXXkNmZia++uorvPHGG1ixYgW+/PJLk/kWd7vQK+g1lOS5SpqvkryKsw0rzULJmFE6/grL8cCBA5gyZQp69OiBb7/9FmPGjMHIkSPzvS+UJrsyJVG5evfddyUABf5s2bLFsE6VKlVkj+vVq5fUqVMnKScnx7Ds5s2bkoODg/TZZ59JkiRJ3bt3l1q2bCllZmYW+vsnTpwotWzZssDlAKQTJ07kqzdvLUp+T147d+6UAEjx8fEmn1/J6yyopq5du0pdunSRLfv0008lANK7775rsra8z6fP4vfffzcsu3DhggRA+vLLL00+1/r166V33nlHWrx4sWHZ9u3bpSlTpph8nFLh4eESACkrK8uw7NChQxIASavVFvo4/Wv673//a1iWkZEhNWzYUBo7dqwkSQXnakyn00lZWVlSUFCQ5Obmlu+5i8pLyb9tYQoaP4WNWUmSpA4dOkjt27eXdDqdYdnJkyclANLGjRtljz9z5oxhnbCwMAmANHToUNnzdezYUXrxxRdN1qhkuyhsrOV9DSV5rtLkqySvwrbhghRVf0m2scLGn/Hz5c3xueeek7p37y5b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",
"text/html": [
"\n",
"
Software | Version |
---|---|
Python | 3.11.7 64bit [GCC 11.2.0] |
IPython | 8.20.0 |
OS | Linux 4.9.0 9 amd64 x86\\_64 with glibc2.28 |
numpy | 1.26.4 |
scipy | 1.11.4 |
numdifftools | 0.9.41 |
matplotlib | 3.8.0 |
Sun Apr 07 19:54:31 2024 EDT |