Skip to content

Instantly share code, notes, and snippets.

@mariogeiger
Created August 9, 2022 01:28
Show Gist options
  • Save mariogeiger/afd3d207e60bc7c0a72c1f9db1f36509 to your computer and use it in GitHub Desktop.
Save mariogeiger/afd3d207e60bc7c0a72c1f9db1f36509 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from functools import cache\n",
"from math import factorial\n",
"\n",
"import jax\n",
"import matplotlib.pyplot as plt\n",
"from jax import grad, jit\n",
"from jax import numpy as jnp\n",
"from jax import vmap\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def u(p: int, x: jnp.ndarray) -> jnp.ndarray:\n",
" return (\n",
" 1 - (p + 1) * (p + 2) / 2 * x**p + p * (p + 2) * x ** (p + 1) - p * (p + 1) / 2 * x ** (p + 2)\n",
" )\n",
"\n",
"\n",
"def constraints(x: float, n_deriv: int, order: int) -> jnp.ndarray:\n",
" return jnp.array(\n",
" [\n",
" [0 if d > N else factorial(N) // factorial(N - d) * x ** (N - d) for N in range(order)]\n",
" for d in range(n_deriv)\n",
" ]\n",
" )\n",
"\n",
"\n",
"def solve_poly(\n",
" x0: float,\n",
" der0: jnp.ndarray,\n",
" x1: float,\n",
" der1: jnp.ndarray,\n",
") -> jnp.ndarray:\n",
" A = jnp.concatenate(\n",
" [\n",
" constraints(\n",
" x0,\n",
" len(der0),\n",
" len(der0) + len(der1),\n",
" ),\n",
" constraints(\n",
" x1,\n",
" len(der1),\n",
" len(der0) + len(der1),\n",
" ),\n",
" ],\n",
" axis=0,\n",
" )\n",
" B = jnp.concatenate([der0, der1], axis=0)\n",
" return jnp.linalg.solve(A, B)\n",
"\n",
"\n",
"@cache\n",
"def poly_envelope(n_der0: int, n_der1: int):\n",
" with jax.ensure_compile_time_eval():\n",
" jax.config.update(\"jax_enable_x64\", True)\n",
"\n",
" c = solve_poly(\n",
" -0.5,\n",
" jnp.array([1.0] + [0.0] * n_der0),\n",
" 0.5,\n",
" jnp.array([0.0] + [0.0] * n_der1),\n",
" )\n",
"\n",
" jax.config.update(\"jax_enable_x64\", False)\n",
"\n",
" return jit(lambda x: jnp.polyval(c[::-1], x - 0.5))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING:absl:No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 360x252 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig, axes = plt.subplots(1, 1, figsize=(5, 3.5))\n",
"\n",
"x = jnp.linspace(0.0, 1.0, 1000)\n",
"\n",
"p = 6\n",
"plt.plot(x, u(p, x), label=f\"$u_{p}(x)$\", lw=2)\n",
"plt.plot(x, poly_envelope(p - 1, 2)(x), \"k--\", lw=1)\n",
"\n",
"p = 2\n",
"plt.plot(x, u(p, x), label=f\"$u_{p}(x)$\", lw=2)\n",
"plt.plot(\n",
" x,\n",
" poly_envelope(p - 1, 2)(x),\n",
" \"k--\",\n",
" label=\"$f_{p-1,2}(x)$\",\n",
" lw=1,\n",
")\n",
"\n",
"plt.legend()\n",
"plt.xlabel(\"$x$\")\n",
"plt.tight_layout()\n",
"\n",
"plt.savefig(\"u.pgf\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 360x252 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig, axes = plt.subplots(1, 1, figsize=(5, 3.5))\n",
"\n",
"n0, n1 = 14, 6\n",
"fn = poly_envelope(n0, n1)\n",
"\n",
"x = jnp.linspace(0.0, 1.0, 1000)\n",
"\n",
"y = fn(x)\n",
"plt.plot(x, y, \"k\", lw=2, zorder=10)\n",
"\n",
"y = vmap(grad(fn))(x)\n",
"plt.plot(x, y / jnp.max(jnp.abs(y)), \"k--\", lw=1)\n",
"\n",
"y = vmap(grad(grad(fn)))(x)\n",
"plt.plot(x, y / jnp.max(jnp.abs(y)), \"--\", lw=1)\n",
"\n",
"y = vmap(grad(grad(grad(fn))))(x)\n",
"plt.plot(x, y / jnp.max(jnp.abs(y)), \"--\", lw=1)\n",
"\n",
"y = vmap(grad(grad(grad(grad(fn)))))(x)\n",
"plt.plot(x, y / jnp.max(jnp.abs(y)), \"--\", lw=1)\n",
"\n",
"y = vmap(grad(grad(grad(grad(grad(fn))))))(x)\n",
"plt.plot(x, y / jnp.max(jnp.abs(y)), \"--\", lw=1)\n",
"\n",
"plt.legend(\n",
" [\n",
" rf\"$f_{{{n0}, {n1}}}(x)$\",\n",
" \"5 first derivatives\",\n",
" ]\n",
")\n",
"plt.yticks([])\n",
"plt.xlabel(\"$x$\")\n",
"plt.ylabel(\"rescaled amplitudes\")\n",
"plt.tight_layout()\n",
"\n",
"plt.savefig(\"poly_envelope.pgf\")"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 360x252 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig, axes = plt.subplots(1, 1, figsize=(5, 3.5))\n",
"\n",
"x = jnp.linspace(0.0, 1.0, 1000)\n",
"\n",
"def pl(n0, n1, xt, yt):\n",
" fn = poly_envelope(n0, n1)\n",
" plt.plot(x, fn(x), lw=1)\n",
" plt.annotate(fr\"$f_{{{n0},{n1}}}$\", (xt - (fn(xt) - yt) / grad(fn)(xt), yt))\n",
"\n",
"pl(0, 0, 0.2, 0.8)\n",
"pl(3, 3, 0.4, 0.85)\n",
"pl(6, 3, 0.5, 0.8)\n",
"pl(15, 5, 0.7, 0.8)\n",
"pl(15, 15, 0.5, 0.6)\n",
"\n",
"plt.xlabel(\"$x$\")\n",
"plt.tight_layout()\n",
"\n",
"plt.savefig(\"variations.pgf\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.9.2 ('base')",
"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"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "b5e6a81650e2ec12c36e53f44b5573c56b5183943fab134b82eca30c58c300d8"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment