Skip to content

Instantly share code, notes, and snippets.

@charmoniumQ
Last active February 1, 2024 21:57
Show Gist options
  • Save charmoniumQ/5a7851d7a0b105138f78f19c86647625 to your computer and use it in GitHub Desktop.
Save charmoniumQ/5a7851d7a0b105138f78f19c86647625 to your computer and use it in GitHub Desktop.
Evan's dumb gravity question
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "8c993b14-df2c-4699-80a8-355e285e9398",
"metadata": {},
"source": [
"Let the universe be a plane.\n",
"\n",
"Let the gravitational constant be 1.\n",
"\n",
"Let the earth be a line segment at $y = 0$ from $x = -1$ to $1$.\n",
"\n",
"Let the base be a line segment at $y = -1$ from $x = -P$ to $P$.\n",
"\n",
"Let the mass of this line at each point, $p$, be $m(p)$ for $-P \\leq p \\leq P$.\n",
"\n",
"The distance from a point $p$ on the base to a point $x$ on earth, can be given by Pythagorean's theorem $\\sqrt{1 + (p-x)^2}$. The gravitational field contribution of the segment at $p$ to a point on the earth $x$ is therefore\n",
"$$\\frac{m(p)}{1 + (p-x)^2}$$\n",
"in the direction of $\\tan^{-1}(p-x)$ counter-clockwise from straight-down; e.g., when $p = x$, the force is straight-down.\n",
"\n",
"<!-- $\\cos \\tan^{-1}(a) = \\frac{1}{\\sqrt{1 + a^2}}$ and $\\sin \\tan^{-1}(a) = \\frac{a}{\\sqrt{1 + a^2}}$. -->\n",
"\n",
"The vertical component of the gravitational contribution of $p$ to $x$ is\n",
"$$\n",
"\\frac{m(p)}{1 + (p-x)^2} \\frac{1}{\\sqrt{1 + (p-x)^2}}.\n",
"$$\n",
"<!--\n",
"which we can change variables with $\\Delta = p-x$ to get\n",
"\n",
"$$\n",
"\\int_{-P-x}^{P-x} \\frac{m(p)}{(1 + \\Delta^2)^{\\frac{3}{2}}} d p\n",
"$$\n",
"-->\n",
"\n",
"We want that integral to not vary with $x$.\n",
"\n",
"The vertical component multiplies the integrand by $p-x$, and we want it to equal 0.\n",
"\n",
"In the following notebook, guess a certain $m$ as a function of $p$ (not allowed to use $x$) and $P$ and the notebook will plot the result."
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "bda8a91c-069d-4900-bf80-2d6c56aa64c6",
"metadata": {},
"outputs": [],
"source": [
"import sympy\n",
"import numpy\n",
"import matplotlib.pyplot\n",
"%matplotlib inline \n",
"\n",
"x = sympy.Symbol(\"x\")\n",
"p = sympy.Symbol(\"p\")\n",
"m = sympy.Symbol(\"m\")\n",
"P = sympy.Symbol(\"P\")\n",
"three = sympy.S(3)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "7f292d63-0dcf-437d-8c19-7360582c1d3a",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\int\\limits_{- P}^{P} \\frac{m}{\\left(\\left(p - x\\right)^{2} + 1\\right)^{\\frac{3}{2}}}\\, dp$"
],
"text/plain": [
"Integral(m/((p - x)**2 + 1)**(3/2), (p, -P, P))"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"vert_field = sympy.Integral(m / (1 + (p - x)**2)**(three/2), (p, -P, P))\n",
"vert_field"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "a5062942-42b1-4285-ae7c-4de359bff134",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\int\\limits_{- P}^{P} \\frac{m \\left(p - x\\right)}{\\left(\\left(p - x\\right)^{2} + 1\\right)^{\\frac{3}{2}}}\\, dp$"
],
"text/plain": [
"Integral(m*(p - x)/((p - x)**2 + 1)**(3/2), (p, -P, P))"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"horiz_field = sympy.Integral(m * (p-x) / (1 + (p - x)**2)**(three/2), (p, -P, P))\n",
"horiz_field"
]
},
{
"cell_type": "markdown",
"id": "3e22777a-c783-47f0-8494-62ac13d6ce03",
"metadata": {},
"source": [
"Enter a guess for $m(p)$ and $P$."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "6db1e149-c7b2-44e4-9808-58299d7d2c34",
"metadata": {},
"outputs": [],
"source": [
"guess_m = p**2\n",
"guess_P = 2"
]
},
{
"cell_type": "markdown",
"id": "47cf5749-0510-4258-a7f3-7d75b3f8c359",
"metadata": {},
"source": [
"In the true answer, this integral will not be dependent on $x$."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "57ca4e4b-b99a-477d-8081-7a9d942c37de",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle - \\int\\limits_{-2}^{2} \\left(- \\frac{p^{3}}{p^{2} \\sqrt{p^{2} - 2 p x + x^{2} + 1} - 2 p x \\sqrt{p^{2} - 2 p x + x^{2} + 1} + x^{2} \\sqrt{p^{2} - 2 p x + x^{2} + 1} + \\sqrt{p^{2} - 2 p x + x^{2} + 1}}\\right)\\, dp - \\int\\limits_{-2}^{2} \\frac{p^{2} x}{p^{2} \\sqrt{p^{2} - 2 p x + x^{2} + 1} - 2 p x \\sqrt{p^{2} - 2 p x + x^{2} + 1} + x^{2} \\sqrt{p^{2} - 2 p x + x^{2} + 1} + \\sqrt{p^{2} - 2 p x + x^{2} + 1}}\\, dp$"
],
"text/plain": [
"-Integral(-p**3/(p**2*sqrt(p**2 - 2*p*x + x**2 + 1) - 2*p*x*sqrt(p**2 - 2*p*x + x**2 + 1) + x**2*sqrt(p**2 - 2*p*x + x**2 + 1) + sqrt(p**2 - 2*p*x + x**2 + 1)), (p, -2, 2)) - Integral(p**2*x/(p**2*sqrt(p**2 - 2*p*x + x**2 + 1) - 2*p*x*sqrt(p**2 - 2*p*x + x**2 + 1) + x**2*sqrt(p**2 - 2*p*x + x**2 + 1) + sqrt(p**2 - 2*p*x + x**2 + 1)), (p, -2, 2))"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"vert_field2 = horiz_field.subs({P: guess_P, m: guess_m}).doit()\n",
"vert_field2"
]
},
{
"cell_type": "markdown",
"id": "eddb66b6-f05d-4c5f-afc9-b156359f019b",
"metadata": {},
"source": [
"In the true answer, this integral will be zero"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "583325df-059f-4fbb-9a29-df89dd759187",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\int\\limits_{-2}^{2} \\frac{p^{2}}{\\left(p^{2} - 2 p x + x^{2} + 1\\right)^{\\frac{3}{2}}}\\, dp$"
],
"text/plain": [
"Integral(p**2/(p**2 - 2*p*x + x**2 + 1)**(3/2), (p, -2, 2))"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"horiz_field2 = vert_field.subs({P: guess_P, m: guess_m}).doit()\n",
"horiz_field2"
]
},
{
"cell_type": "markdown",
"id": "a3126282-9233-47b4-bb9e-9e03f23336a8",
"metadata": {},
"source": [
"It turns out Sympy doesn't know how to do thos integrals, so I'll have to proceed using Gaussian quadrature."
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "a208229a-7f04-4537-ab8f-aae717b4e521",
"metadata": {},
"outputs": [],
"source": [
"import scipy.integrate\n",
"m = lambda p: p**2\n",
"P = 2\n",
"vert_field3 = lambda x: scipy.integrate.quad(lambda p: m(p) / (1 + (p - x)**2)**(3/2), -P, P)[0]\n",
"horiz_field3 = lambda x: scipy.integrate.quad(lambda p: (m(p)*(p-x)) / (1 + (p - x)**2)**(3/2), -P, P)[0]"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "5c9caba1-b133-411c-8ea4-5cf1b72dfe76",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7fff25c16710>"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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4glCQkLo3Lkze/fudWhxIiIiImXN7jD0wgsv2GanT0xM5K233uLll18mLCyMxx57zOEFioiIiJQluwddTE1NpUGDBgB89913XH/99dx777106dKFnj17Oro+ERERkTJl95mhqlWrkpmZCcDPP/9M3759AfDz8+PUqVOOrU5ERESkjNl9Zujqq6/mnnvuoU2bNuzYsYO//e1vAGzevJm6des6uj4RERGRMmX3maG3336bTp06cejQIWbNmkX16tUBWLt2LTfffLPDCxQREREpSxbDMAxnF+HKsrOzCQ4OJisri6CgIGeXIyIiIqVgz+e33WeGRERERCoShSERERGp1BSGREREpFJTGBIREZFKTWFIREREKrVSjTPUpk0bLBZLqV7wjz/+uKKCRERERMpTqcLQ0KFDbV/n5ubyzjvv0KxZMzp16gTAypUr2bx5Mw888ECZFCkiIiJSVkoVhp555hnb1/fccw8PP/wwzz///HnrpKamOrY6ERERkTJm96CLwcHBrFmzhoYNGxZr37lzJ/Hx8WRlZTm0QGfToIsiIiLup0wHXfT392f58uXntS9fvhw/Pz97X05ERETEqeyeqPXRRx/l/vvvZ+3atXTs2BEw+wx9/PHHPP300w4vUERERKQs2R2Gxo8fT7169XjzzTf58ssvAWjatCnTpk1jxIgRDi9QREREpCxpotZLUJ8hERER96OJWkVERERKqVSXyapVq1bqQRePHDlyRQWJiIiIlKdShaE33nijjMsQERERcY5ShaGRI0eWdR0iIiIiTnFZfYZ2797Nv/71L26++WYyMjIAWLBgAZs3b3ZocSIiIiJlze4wtGTJElq0aMGqVauYPXs2J06cAGDDhg3Fpu0QERERcQd2h6Hx48fzf//3fyxcuBAfHx9be69evUhMTHRocSIiIiJlze4wtHHjRoYNG3Zee40aNcjMzHRIURfzzjvvEBsbi5+fH+3atWPZsmUXXHfx4sVYLJbzlm3btpV5nSIiIuIe7A5DISEhpKWlndeelJREzZo1HVLUhcyYMYNHH32Up556iqSkJLp168aAAQNISUm56Hbbt28nLS3Ntpw7yayIiIhUXnaHoVtuuYUnn3yS9PR0LBYLVquVFStW8Pjjj3PHHXeURY02r7/+OnfffTf33HMPTZs25Y033iAmJoZ33333otuFh4cTGRlpWzw9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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = matplotlib.pyplot.figure()\n",
"ax = fig.add_subplot(1, 1, 1)\n",
"earth = numpy.linspace(-1, 1, 40)\n",
"ax.plot(earth, [vert_field3(x) for x in earth], label=\"vertical\")\n",
"ax.plot(earth, [horiz_field3(x) for x in earth], label=\"horizontal\")\n",
"ax.set_xlabel(\"earth\")\n",
"ax.set_ylabel(\"field strength\")\n",
"ax.legend()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a6c8e4ba-d630-4690-9032-d0b74b402b4a",
"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.11.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1705309234,
"narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1706683685,
"narHash": "sha256-FtPPshEpxH/ewBOsdKBNhlsL2MLEFv1hEnQ19f/bFsQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "5ad9903c16126a7d949101687af0aa589b1d7d3d",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}
{
inputs.flake-utils.url = "github:numtide/flake-utils";
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
in {
devShells = {
default = pkgs.mkShell {
packages = [
(pkgs.python311.withPackages(pypkgs: with pypkgs; [
sympy
jupyter
numpy
matplotlib
]))
];
};
};
}
)
;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment