From f94dfe3ff4a245acb0b195ff6bcb432fc8396436 Mon Sep 17 00:00:00 2001 From: Andrew Fitzgibbon Date: Mon, 16 Oct 2023 17:27:15 +0100 Subject: [PATCH] new intro --- notebooks/gto_integrals.ipynb | 317 +++++++++++++--------------------- 1 file changed, 121 insertions(+), 196 deletions(-) diff --git a/notebooks/gto_integrals.ipynb b/notebooks/gto_integrals.ipynb index aafe7b1..ea68434 100644 --- a/notebooks/gto_integrals.ipynb +++ b/notebooks/gto_integrals.ipynb @@ -13,57 +13,101 @@ "\n", "# Integrals over Gaussian Type Orbitals (GTO)\n", "\n", - "Zooming straight past a number of details, a standard approach in density functional theory (DFT)\n", - "is to expand the molecular orbitals $\\{\\psi_i (\\br) \\}$ in a finite basis set:\n", + "We have a molecule comprising $M$ atoms (Mnemonic: $M$ for $\\text{ato}M$),\n", + "each with atomic number $Z_m$ and position $\\br_m \\in \\mathbb{R}^3$\n", "$$\n", - "\\tag{1}\n", - "\\psi_i (\\br) = \\sum_{i=1}^N c_i \\phi_i (\\br).\n", + "\\mathcal{A} = \\{ (Z_m, \\br_m) \\}_{m=1}^{M}\n", "$$\n", - "Typically the basis functions $\\{\\phi_i (\\br) \\}$ are taken as approximations of atomic orbitals and this is referred to as the linear combination of atomic orbitals (LCAO) method in the literature. There is some flexibility in how exactly this finite\n", - "basis is defined. Gaussian type orbitals (GTO) are perhaps\n", - "one of the most popular choices and take the following general form \n", + "\n", + "We will represent the electron density of the molecule as a sum of per-atom electron densities.\n", + "$$\n", + "\\psi(\\br) = \\sum_{m=1}^M \\psi_m(\\br)\n", + "$$\n", + "Atom $m$ has $N(Z_m)$ basis functions (determined by $Z_m$ and the basis set in use),\n", + "with coefficients $[c_{mi}]_{i=1}^{N(Z_m)}$:\n", + "$$\n", + "\\psi_m(\\br) = \\sum_{i=1}^{N(Z_m)} c_{mi}~ \\phi_{Z_m,i}(\\br - \\br_m)\n", + "$$\n", + "\n", + "Each function $\\phi_{z,i}$ is defined by the basis set as a fixed linear combination of primitive functions $p(\\br; \\nu)$, known as a \"contraction\":\n", "$$\n", - "These functions are parameterised by:\n", - "* $\\bA = (X_A, Y_A, Z_A)$ is the center of the Gaussian orbital that for our current treatment will be set by the atomic positions of the molecular structure we are simulating. We use the shorthand of $x_A = x - X_A$ in the leading polynomial term\n", - "* $\\alpha$ in the exponent determines the extent of the Gaussian orbital.\n", - "* $(l, m, n)$ are the angular momentum quantum numbers that take on non-negative integer values.\n", - "* normalising constant $N$ is a function of $\\alpha$ and $(l, m, n)$ and is derived later in this notebook.\n", + "\\phi_{z,i}(\\br) = \\sum_{k=1}^{K(z,i)} d_{z,i,k} ~ p_{f(z,i,k)}(\\br; \\nu_{z,i,k})\n", + "$$\n", + "The values of $d,\\nu$ and the function type $f$ are read from standard basis sets.\n", + "As these functions $\\phi$ are often taken as approximations of atomic orbitals, \n", + "this is referred to as the linear combination of atomic orbitals (LCAO) method in the literature.\n", + "In general the lengths $K(z,i)$ of the contractions have been pre-optimised alongside the contraction coefficients $d_{z,i,k}$ and the primitive exponents $\\alpha_\\mu$ to best approximate atomic orbitals. A range of Gaussian basis sets covering the periodic table with different compute-time-vs-accuracy tradeoffs are available from the [basis set exchange](https://www.basissetexchange.org/). We use their python API in this project to provide programmatic access to these basis sets.\n", + "\n", + "In this, we will consider only the function type \"GTO\", for Gaussian-type Orbital,\n", + "where the parameter packet $\\nu$ comprises three non-negative integers $(l,m,n)$, \n", + "called \"angular momentum quantum numbers\",\n", + "and a real value $\\alpha$, the \"exponent\".\n", + "The primitive is\n", + "$$\n", + "\\def\\pgto{p_{\\text{GTO}}}\n", + "\\pgto(\\br; \\nu) = \\pgto(\\br; l,m,n,\\alpha) = N(l,m,n,\\alpha) ~ x^l y^m z^n \\exp(-\\alpha\\|\\br\\|^2)\n", + "$$\n", + "where the normalizing constant $N(l,m,n,\\alpha)$ is a function of $\\alpha$ and $(l, m, n)$\n", + "and is chosen so that the function integrates to 1, as derived later in this notebook.\n", + "In the following, as we are dealing only with GTO, we will simply write $p(\\br;\\nu)$ or $p(\\br;l,m,n,\\alpha).$\n", "\n", - "Another complication that is worth mentioning up front is that we typically encounter \n", - "*contracted* Gaussian basis functions defined as:\n", + "Noting that a linear combination (LC) of LCs is just another LC, we will often \n", + "contract the two sets of coefficients, writing\n", "$$\n", - "\\tag{3}\n", - "\\phi_i (\\br; \\bA, l, m, n) = \\sum_{\\mu=1}^{K_i} d_{\\mu i} p_\\mu(\\br; \\bA, \\alpha_\\mu, l, m, n)\n", + "\\psi_m(\\br) = \\sum_{i=1}^{N(Z_m)} c_{mi} \\sum_{k=1}^{K(z,i)} d_{Z_m,i,k} ~ p(\\br - \\br_m; \\nu_{Z_m,i,k})\n", "$$\n", - "where we introduce the *primitive* Gaussian:\n", + "as\n", "$$\n", - "\\tag{4}\n", - "p_\\mu(\\br; \\bA, \\alpha_\\mu, l, m, n) = N x_A^l y_A^m z_A^n e^{-\\alpha_\\mu |\\br - \\bA|^2}.\n", + "\\psi_m(\\br) = \\sum_{j=1}^{N_m} a_{mj}~ p(\\br - \\br_m; \\nu_{mj})\n", "$$\n", - "In general the length of the contraction $K_i$ have been pre-optimised alongside the contraction coefficients $d_{\\mu i}$ and the primitive exponents $\\alpha_\\mu$ to best approximate atomic orbitals. A range of Gaussian basis sets covering the periodic table with different compute time vs accuracy tradeoffs are available from the [basis set exchange](https://www.basissetexchange.org/). We use their python API in this project to provide programmatic access to these basis sets.\n", + "where $N_m$ is just the total number of different $\\nu$ values in the basis set for atom $Z_m$.\n", + "For most basis sets, this will mean $N_m = \\sum_i K(Z_m,i)$.\n", + "\n", + "### This notebook\n", "\n", - "To demonstrate these concepts, we use the `basisset` function to build the atomic orbitals of a single oxygen atom. The `Basis` object built by `basisset` consists of a list of `Orbital` objects which are defined by a set of `coefficients` and corresponding `Primitive` objects." + "This notebook derives several key computations involved in DFT.\n", + "In particular, DFT involves integrals of the form\n", + "$$\n", + "\\def\\op{\\mathcal{Q}}\n", + "\\langle\\psi|\\op|\\psi\\rangle = \\int \\int \\psi(\\br_1) ~\\op \\psi(\\br_2) ~g(\\br_1, \\br_2) d \\br_1 d \\br_2\n", + "$$\n", + "where $\\op\\psi$ is an transformation of function $\\psi$ by an operator $\\op$, such as gradient $\\nabla$, and the function $g$ is some function of a pair of points, e.g. $g(\\mathbf r, \\mathbf s) = \\|\\mathbf r - \\mathbf s\\|^{-1}$.\n", + "Such integrals can be written in terms of the per-atom (or \"per-center\") functions $\\psi_m$\n", + "$$\n", + "\\langle\\psi|\\op|\\psi\\rangle = \\sum_{m_1=1}^M \\sum_{m_2=1}^M \\int \\int \\psi_{m_1}(\\br_1) ~\\op \\psi_{m_2}(\\br_2) ~g(\\br_1, \\br_2) d \\br_1 d \\br_2\n", + "$$\n", + "and then in terms of the primitives $p$, where again $\\op p$ is the operator $\\op$ applied to $p(\\br;...)$.\n", + "$$\n", + "\\langle\\psi|Q|\\psi\\rangle = \\sum_{m_1=1}^M \\sum_{m_2=1}^M \n", + " \\sum_{j_1=1}^{N_{m_1}} \\sum_{j_2=1}^{N_{m_2}} \n", + " a_{m_1,j_1} a_{m_2,j_2} \n", + " \\int \\int p(\\br_1 - \\br_{m_1}; \\nu_{m_1,j_1}) ~\\op p(\\br_2 - \\br_{m_2}; \\nu_{m_2,j_2}) ~ g(\\br_1, \\br_2) d \\br_1 d \\br_2\n", + "$$\n", + "all of which depends on the ability to compute integrals of the form\n", + "$$\n", + "\\def\\bB{\\mathbf B}\n", + "\\int \\int p(\\br_1 - \\bA; \\nu_A) ~\\op p(\\br_2 - \\bB; \\nu_B) ~g(\\br_1, \\br_2) ~d \\br_1 d \\br_2\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Basis set for a single-atom molecule\n", + "\n", + "Before deriving the integrals, we use the `basisset` function to build the atomic orbitals of a single oxygen atom $M=1$, $Z_1 = 8$, illustraiting typical values for the numbers of orbitals and consequent numbers of primitives.\n", + "The `Basis` object built by `basisset` consists of a list of `Orbital` objects which are defined by a set of `coefficients` and corresponding `Primitive` objects." ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "5" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "import numpy as np\n", "from pyscf_ipu.experimental.structure import Structure\n", @@ -87,20 +131,9 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "15" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "basis.num_primitives" ] @@ -129,7 +162,7 @@ "\n", "# Mapping between orbital label -> index in basis set\n", "orbital_idx = dict(zip([\"1s\", \"2s\", \"2px\", \"2py\", \"2pz\"], range(5)))\n", - "plot_volume(oxygen, orbitals[:, orbital_idx[\"2px\"]], axes)" + "plot_volume(oxygen, orbitals[:, orbital_idx[\"2px\"]], axes).spin(4)" ] }, { @@ -144,35 +177,30 @@ "The above visualisation uses the formulas defined earlier to numerically evaluate\n", "each atomic orbital from a linear combintation of primitive Gaussians. Introducing\n", "the basis set allows us to replace the problem of solving a system partial differential equations (e.g. the Kohn-Sham equations) with an algebraic system of equations that can be solved using standard matrix eigenvalue techniques.\n", - "The individual elements of the matrices in this system are integrals over pairs of\n", + "The individual elements of the matrices in this system are single integrals over pairs of\n", "basis functions:\n", "$$\n", "\\tag{5}\n", - "M_{ij} = \\int \\phi_i(\\br) \\hat{M}(\\br) \\phi_j(\\br) d\\br.\n", + "M_{ij} = \\int p(\\br - \\bA; \\nu_A) ~\\op p(\\br - \\bB; \\nu_B) d\\br.\n", "$$\n", - "We introduce the operator $\\hat{M}(\\br)$ which in its most general definition is\n", - "a function that transforms the $\\phi_j(\\br)$ basis functions to represent a physical\n", - "observable. That sounds fancy but is just a complicated way of saying we are breaking\n", + "The operator $\\op$ in its most general definition is\n", + "a function that transforms the $\\psi(\\br)$ function to represent a physical observable.\n", + "That sounds fancy but is just a complicated way of saying we are breaking\n", "down something we can measure (e.g. the energy, dipole moment, etc) into components\n", "that we can evaluate through these integrals. The simplest operator is simply an \n", - "identity mapping that we name the overlap:\n", + "identity mapping, $\\op p(\\br) := p(\\br)$, that we name the {\\em overlap}.\n", + "\n", + "## The overlap integral\n", + "\n", + "The overlap integral is defined by\n", "$$\n", "\\tag{6}\n", - "S_{ij} = \\int \\phi_i(\\br) \\phi_j(\\br) d\\br.\n", - "$$\n", - "Recalling that each of the atomic orbitals are represented as a linear combination of primitives allows us to further expand the overlap integral as:\n", - "$$\n", - "\\tag{7}\n", - "S_{ij} = \\int \\sum_{\\mu = 1}^{K_i} \\sum_{\\nu = 1}^{K_j} d_{\\mu i} d_{\\nu j} p_\\mu(\\br) p_{\\nu}(\\br) d\\br = \\sum_{\\mu \\nu} d_{\\mu i} d_{\\nu j} \\tilde{S}_{{\\mu \\nu}}.\n", + "S_{\\mu\\nu} = \\int p(\\br - \\br_\\mu; l_\\mu, m_\\mu, n_\\mu, \\alpha_\\mu) ~ p(\\br - \\br_\\nu; l_\\nu, m_\\nu, n_\\nu, \\alpha_\\nu) ~ d\\br.\n", "$$\n", - "Since we can swap the order of integration and the double-summation we are able to introduce $\\tilde{S}_{\\mu \\nu}$ as the elements of the overlap matrix in terms of the primitive functions:\n", - "$$\n", - "\\tag{8}\n", - "\\tilde{S}_{\\mu \\nu} = \\int p_\\mu(\\br) p_\\nu(\\br) d\\br.\n", - "$$\n", - "This finally sets us up to discuss the benefits of using an expansion in Gaussian type orbitals to iteratively solve Kohn-Sham equations using the self-consistent field (SCF) method. As an aside, for a nice overview and derivation of the SCF method we refer the reader to the following review article:\n", "\n", - "> Lehtola, S., Blockhuys, F. and Van Alsenoy, C., 2020. An overview of self-consistent field calculations within finite basis sets. Molecules, 25(5), p.1218. [open access](https://doi.org/10.3390/molecules25051218)\n", + "\n", "\n", "Gaussian basis functions of the form above have a few convenient properties that help\n", "make it easier to evaluate integrals of the form in equation (5). To show this\n", @@ -181,13 +209,13 @@ "\\tag{9}\n", "\\tilde{S}_{\\mu \\nu} = \\iiint p_\\mu(\\br) p_\\nu(\\br) dx dy dz,\n", "$$\n", - "and observing that a primitive $p_\\mu(\\br)$ can be written as a product of cartesian components:\n", + "and observing that a primitive $p_\\mu(\\br) = p(\\br - \\br_\\mu; l_\\mu, m_\\mu, n_\\mu, \\alpha_\\mu)$ can be written as a product of cartesian components:\n", "$$\n", "\\tag{10}\n", "p_\\mu(\\br) = N_\\mu\n", - "\\left(x_A^l e^{-\\alpha_\\mu x_A^2} \\right)\n", - "\\left(y_A^m e^{-\\alpha_\\mu y_A^2} \\right)\n", - "\\left(z_A^n e^{-\\alpha_\\mu z_A^2} \\right),\n", + "\\left((x - x_\\mu)^{l_\\mu} e^{-\\alpha_\\mu (x - x_\\mu)^2} \\right)\n", + "\\left((y - y_\\mu)^{m_\\mu} e^{-\\alpha_\\mu (y - y_\\mu)^2} \\right)\n", + "\\left((z - z_\\mu)^{n_\\mu} e^{-\\alpha_\\mu (z - z_\\mu)^2} \\right)\n", "$$\n", "we directly see that we can separate the three-dimensional integral in equation (9) as a\n", "product of three one-dimensional integrals:\n", @@ -199,8 +227,8 @@ "$$\n", "\\tag{12}\n", "\\tilde{S}_{\\mu \\nu}^{(x)} = \\int_{-\\infty}^\\infty \n", - "\\left(x_A^{l_\\mu} e^{-\\alpha_\\mu x_A^2} \\right)\n", - "\\left(x_B^{l_\\nu} e^{-\\alpha_\\nu x_B^2} \\right) dx,\n", + "\\left((x - x_\\mu)^{l_\\mu} e^{-\\alpha_\\mu (x - x_\\mu)^2} \\right)\n", + "\\left((x - x_\\nu)^{l_\\nu} e^{-\\alpha_\\nu (x - x_\\nu)^2} \\right) dx,\n", "$$\n", "and use the same definition for the y and z components.\n", "\n", @@ -218,16 +246,16 @@ "The one-dimensional self-overlap integral is:\n", "$$\n", "\\tag{15}\n", - "\\tilde{S}_{\\mu \\mu}^{(x)} = \\int_{-\\infty}^\\infty x^{2l} e^{-2 \\alpha_\\mu x^2} dx.\n", + "\\tilde{S}_{\\mu \\mu}^{(x)} = \\int_{-\\infty}^\\infty x^{2l_\\mu} e^{-2 \\alpha_\\mu x^2} dx.\n", "$$\n", - "We've made use of the translation invariance property of the integral over all $x$ when shifting by the constant $X_A$ in equation (15). \n", + "We've made use of the translation invariance property of the integral over all $x$ when shifting by the constant $x_\\mu$ in equation (15). \n", "\n", "These one dimensional integrals have a known analytic solution [see equation 42 of gaussian integral](https://mathworld.wolfram.com/GaussianIntegral.html), but we will lean on [SymPy](https://docs.sympy.org/latest/index.html) to help us derive a formula for normalising our primitive Gaussian functions." ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -240,7 +268,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -252,7 +280,7 @@ "" ] }, - "execution_count": 5, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -390,25 +418,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/latex": [ - "$\\displaystyle \\left(c_{a} + x_{c}\\right)^{i} \\left(c_{b} + x_{c}\\right)^{j}$" - ], - "text/plain": [ - " i j\n", - "(cₐ + x_c) ⋅(c_b + x_c) " - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "x, a, b = symbols(\"x_c, c_a, c_b\", real=True)\n", "i, j = symbols(\"i, j\", nonnegative=True, integers=True)\n", @@ -418,23 +430,9 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "\\begin{align*}(a + x)^0 (b + x)^0 &= 1\\\\(a + x)^0 (b + x)^1 &= c_{b} + x_{c}\\\\(a + x)^0 (b + x)^2 &= c_{b}^{2} + 2 c_{b} x_{c} + x_{c}^{2}\\\\(a + x)^1 (b + x)^0 &= c_{a} + x_{c}\\\\(a + x)^1 (b + x)^1 &= c_{a} c_{b} + x_{c} \\left(c_{a} + c_{b}\\right) + x_{c}^{2}\\\\(a + x)^1 (b + x)^2 &= c_{a} c_{b}^{2} + x_{c} \\left(2 c_{a} c_{b} + c_{b}^{2}\\right) + x_{c}^{2} \\left(c_{a} + 2 c_{b}\\right) + x_{c}^{3}\\\\(a + x)^2 (b + x)^0 &= c_{a}^{2} + 2 c_{a} x_{c} + x_{c}^{2}\\\\(a + x)^2 (b + x)^1 &= c_{a}^{2} c_{b} + x_{c} \\left(c_{a}^{2} + 2 c_{a} c_{b}\\right) + x_{c}^{2} \\cdot \\left(2 c_{a} + c_{b}\\right) + x_{c}^{3}\\\\(a + x)^2 (b + x)^2 &= c_{a}^{2} c_{b}^{2} + x_{c} \\left(2 c_{a}^{2} c_{b} + 2 c_{a} c_{b}^{2}\\right) + x_{c}^{2} \\left(c_{a}^{2} + 4 c_{a} c_{b} + c_{b}^{2}\\right) + x_{c}^{3} \\cdot \\left(2 c_{a} + 2 c_{b}\\right) + x_{c}^{4}\\\\\\end{align*}" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "from itertools import product\n", "\n", @@ -510,30 +508,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/latex": [ - "$\\displaystyle \\int\\limits_{-\\infty}^{\\infty} t^{s} e^{- a t^{2}}\\, dt$" - ], - "text/plain": [ - "∞ \n", - "⌠ \n", - "⎮ 2 \n", - "⎮ s -a⋅t \n", - "⎮ t ⋅ℯ dt\n", - "⌡ \n", - "-∞ " - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "s = symbols(\"s\", nonnegative=True, integer=True)\n", "a = symbols(\"a\", positive=True, real=True)\n", @@ -545,30 +522,9 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/latex": [ - "$\\displaystyle \\frac{\\left(-1\\right)^{s} a^{- \\frac{s}{2}} \\Gamma\\left(\\frac{s}{2} + \\frac{1}{2}\\right)}{2 \\sqrt{a}} + \\frac{a^{- \\frac{s}{2}} \\Gamma\\left(\\frac{s}{2} + \\frac{1}{2}\\right)}{2 \\sqrt{a}}$" - ], - "text/plain": [ - " -s -s \n", - " ─── ─── \n", - " s 2 ⎛s 1⎞ 2 ⎛s 1⎞\n", - "(-1) ⋅a ⋅Γ⎜─ + ─⎟ a ⋅Γ⎜─ + ─⎟\n", - " ⎝2 2⎠ ⎝2 2⎠\n", - "─────────────────── + ─────────────\n", - " 2⋅√a 2⋅√a " - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "expand(gint.doit())" ] @@ -582,24 +538,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAA0AAAAQCAYAAADNo/U5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAABJ0AAASdAHeZh94AAABEElEQVR4nJXSsUqcURCG4cfFKosYCKRSECR6BzFgJcLiTdiLQsA6xTCCrYVibiAXkNjapFK8A90Vwc5KVMSUroVn5fjrBp3mg5l5Z4ZzvpF+v++9MdpMZOYENrCET7jAH2REXMFIvSkzp3GIz9jDCb5iAV3MR8Rlc9PPAnyPiJ1q2BbWsYmVVmNLB+fYbQwL3GE5M9utqrBQdD8i7p8REbc4wAd8q6HZor3m45Q4LTpTQ+NFb4ZAg/zH1pCG/0YNDSaNv9ZY5a9rqFt0Zgj0pWivhv4W7WTms7Mzcwzz+Iejp2JEnGEfU1hrbEm08Ssi7pqOWPVoo+3MXMQx5jz+YQ8/aHivnDLppWF/G2bYt8YDKpZR3A7SAGIAAAAASUVORK5CYII=", - "text/latex": [ - "$\\displaystyle 0$" - ], - "text/plain": [ - "0" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "v = symbols(\"v\", nonnegative=True, integer=True, odd=True)\n", "gint.subs(s, v).doit()" @@ -614,25 +555,9 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/latex": [ - "$\\displaystyle a^{- s - \\frac{1}{2}} \\Gamma\\left(s + \\frac{1}{2}\\right)$" - ], - "text/plain": [ - " -s - 1/2 \n", - "a ⋅Γ(s + 1/2)" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "simplify(gint.subs(s, 2*s).doit())" ] @@ -685,7 +610,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.8.17" }, "orig_nbformat": 4 },