{ "cells": [ { "cell_type": "markdown", "id": "a76d7161-3803-4ce3-b43f-d5aa09bf5bd4", "metadata": {}, "source": [ "\"Open
\n", "[![nbviewer](https://raw.githubusercontent.com/jupyter/design/master/logos/Badges/nbviewer_badge.svg)](https://nbviewer.org/github/4dsolutions/School_of_Tomorrow/blob/master/Synchronizing_on_S.ipynb)" ] }, { "cell_type": "markdown", "id": "178584f0-f9d8-4732-bb60-c86299d46b3f", "metadata": {}, "source": [ "# Synchronizing Around the S Module\n", "\n", "To \"synchronize\" is a lot like to \"omni-triangulate\" i.e. to well-order in space and/or time. \"Synchronized swimming\" is where they don't crash into each other, the whole point being to show off tightly coreographed dance moves.\n", "\n", "In this Notebook we cross-check our way of deriving a tetrahedron's volume, against published edge lengths and an expected outcome. By enlisting sympy, we gain access to arbitrary precision decimals." ] }, { "cell_type": "markdown", "id": "6b2a44a0-4a96-4ea9-9457-6b55f72bd01b", "metadata": {}, "source": [ "Let's start with a published page from Synergetics (R. Buckminster Fuller), showing clearly what we mean by \"the S module\":\n", "\n", "\"S" ] }, { "cell_type": "markdown", "id": "a341afca-9ecc-4e2d-b285-b616fa8f9f8b", "metadata": {}, "source": [ "Corresponding to this picture, is the corresponding plane net (note that the letters match):\n", "\n", "\"f988_13A\"/" ] }, { "cell_type": "markdown", "id": "0a7f617f-962e-42e5-b4b1-c0e6582ecea3", "metadata": { "tags": [] }, "source": [ "What we're going to need are the six edges of the S module tetrahedron, for one of our tetravolume computing algorithms, the ones that eat edges for input. To this end, let's gather all the distances in the above diagram. \n", "\n", "Note that the plane net contains duplicate edges. We will make sure our labels are alphabetized internally i.e. given EG and GE, we will pick EG as the canonical representation, because E < G in the alphabet." ] }, { "cell_type": "code", "execution_count": 1, "id": "4c9064ad-ed16-485a-b2e4-cdcb59813231", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EdgesLengths
0EF0.540182
1EG0.270091
2EH0.381966
3FG0.467811
4FH0.618034
5GH0.270091
\n", "
" ], "text/plain": [ " Edges Lengths\n", "0 EF 0.540182\n", "1 EG 0.270091\n", "2 EH 0.381966\n", "3 FG 0.467811\n", "4 FH 0.618034\n", "5 GH 0.270091" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "import numpy as np\n", "\n", "import math\n", "from math import sqrt as rt2\n", "\n", "a = 1\n", "\n", "EF = a * rt2(7 - 3 * rt2(5))\n", "EG = (a/2) * rt2(7 - 3 * rt2(5))\n", "EH = (a/2) * (3 - rt2(5))\n", "FG = (a/2) * rt2(3) * rt2(7 - 3 * rt2(5))\n", "FH = (a/2) * (rt2(5) - 1)\n", "GH = (a/2) * rt2(7 - 3 * rt2(5))\n", "\n", "S_net = pd.DataFrame({'Edges' : ['EF', 'EG', 'EH', 'FG', 'FH', 'GH'],\n", " 'Lengths': [EF, EG, EH, FG, FH, GH]})\n", "\n", "S_net" ] }, { "cell_type": "markdown", "id": "e9553927-2a16-4c8b-b9fd-3c124c6d426e", "metadata": {}, "source": [ "Now we want a volume formula that eats edge lengths in a particular order, and returns volume.\n", "\n", "We have at least three to choose from:\n", "\n", "* Piero della Francesca's\n", "* Gerald de Jong's\n", "* Cayley-Menger Determinant\n", "\n", "All three are described [here](https://nbviewer.org/github/4dsolutions/School_of_Tomorrow/blob/master/VolumeTalk.ipynb).\n", "\n", "We start with an apex vertex (any vertex), say E, extending to EF, EG, EH, and then we go around the opposite face in the same order i.e. FG GH FH.\n", "\n", "Here we go then:" ] }, { "cell_type": "code", "execution_count": 2, "id": "8fc2bd0d-7754-4497-8942-e3536f5d480c", "metadata": {}, "outputs": [], "source": [ "def CM_ivm(a, b, c, d, e, f):\n", " # double and 2nd power us\n", " A,B,C,D,E,F = [(2*x)**2 for x in (a,b,c,d,e,f)]\n", " \n", " # Construct a 5x5 matrix per Caley-Menger\n", " M = np.ones((5,5))\n", " M[0,0:5] = 0, 1, 1, 1, 1\n", " M[1,0:5] = 1, 0, A, B, C\n", " M[2,0:5] = 1, A, 0, D, F\n", " M[3,0:5] = 1, B, D, 0, E\n", " M[4,0:5] = 1, C, F, E, 0\n", " print(M) # comment out?\n", " return math.sqrt(np.linalg.det(M))/16 # Syn3 factored in " ] }, { "cell_type": "markdown", "id": "2d188631-6a74-4146-bae1-53cb9dfeadb4", "metadata": {}, "source": [ "The reference prime vector length is set to 1 in this formula, meaning the octahedron in which the icosahedron is inscribed, and what's left with the 24 S modules subtracted, is the diameter of a unit radius IVM sphere." ] }, { "cell_type": "code", "execution_count": 3, "id": "43c05f5d-ad47-4a9e-84e1-59cfa166ef7a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0. 1. 1. 1. 1. ]\n", " [1. 0. 1.16718427 0.29179607 0.58359214]\n", " [1. 1.16718427 0. 0.8753882 1.52786405]\n", " [1. 0.29179607 0.8753882 0. 0.29179607]\n", " [1. 0.58359214 1.52786405 0.29179607 0. ]]\n" ] }, { "data": { "text/plain": [ "0.045084971874737007" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "CM_ivm(EF, EG, EH, FG, GH, FH)" ] }, { "cell_type": "markdown", "id": "5f4d104a-9df0-45cf-b547-f63e551466b8", "metadata": {}, "source": [ "What's our usual value for the S mod volume?" ] }, { "cell_type": "code", "execution_count": 4, "id": "a289b016-3256-4852-8cd6-05f10b12a74a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.04508497187473711" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "φ = (rt2(5)+1)/2 # golden ratio\n", "Smod = (φ**-5) / 2 # home base Smod\n", "Smod" ] }, { "cell_type": "markdown", "id": "094d4803-a7c2-4746-bc6d-92219df94c66", "metadata": {}, "source": [ "Another Synergetics motif has been the S_Factor, or S_volume / E_volume...\n", "\n", "\"skew_relationship\"/\n", "\n", "The 2.5 volume cuboctahedron, connecting mid-points of the containing volume 4 octahedron, transforms into an icosahedron when its 12 vertices travel from these midpoints, to new positions consistent with the 12 vertices of the faces-flush icosahedron. \n", "\n", "This motion, akin to the Jitterbug but with edges changing length, is tantamount to multiplying the initial volume of 2.5 times the S_Factor, times the S_Factor (i.e. times the S_Factor to the 2nd power)." ] }, { "cell_type": "code", "execution_count": 5, "id": "cb62e147-1480-43e6-9353-94c5ca9b0221", "metadata": {}, "outputs": [], "source": [ "Emod = (rt2(2) / 8) * (φ**-3) # home base Emod\n", "S_factor = Smod / Emod # 2*sqrt(7-3*sqrt(5))" ] }, { "cell_type": "code", "execution_count": 6, "id": "29bb8790-86bf-4b49-a753-b968141bfd59", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.9179606750063085" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "icosa_within = 2.5 * S_factor * S_factor\n", "icosa_within" ] }, { "cell_type": "code", "execution_count": 7, "id": "551d616c-d468-43a5-833a-b6df835cd69a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.999999999999999" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "icosa_within + 24 * Smod" ] }, { "cell_type": "markdown", "id": "111e3685-f9f3-4c2e-b7e5-01b272718cc1", "metadata": {}, "source": [ "# Recomputing the S Module with sympy" ] }, { "cell_type": "markdown", "id": "65b75cef-ea27-47fc-92bd-340c22fad27e", "metadata": {}, "source": [ "That's the target Octahedron volume, or close. The next step is to audit the above using `sympy` and its arbitrary precision numbers.\n", "\n", "[sympy documentation](https://docs.sympy.org/latest/index.html)" ] }, { "cell_type": "code", "execution_count": 8, "id": "9fce4778-915b-4084-b382-d1b472bc258e", "metadata": {}, "outputs": [], "source": [ "from sympy import symbols, sqrt as rt2, Matrix, ones\n", "import sympy as sy" ] }, { "cell_type": "code", "execution_count": 9, "id": "d8b75d5f-db57-47dc-8b37-52167afd2527", "metadata": {}, "outputs": [], "source": [ "a = symbols('a')" ] }, { "cell_type": "code", "execution_count": 10, "id": "2a4f5894-7f09-4e33-89f5-8b21df9c689f", "metadata": {}, "outputs": [], "source": [ "EF = a * rt2(7 - 3 * rt2(5))\n", "EG = (a/2) * rt2(7 - 3 * rt2(5))\n", "EH = (a/2) * (3 - rt2(5))\n", "FG = (a/2) * rt2(3) * rt2(7 - 3 * rt2(5))\n", "FH = (a/2) * (rt2(5) - 1)\n", "GH = (a/2) * rt2(7 - 3 * rt2(5))" ] }, { "cell_type": "code", "execution_count": 11, "id": "95558a13-87cf-4b7d-9967-62e7f4e93d01", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle a \\sqrt{7 - 3 \\sqrt{5}}$" ], "text/plain": [ "a*sqrt(7 - 3*sqrt(5))" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "EF" ] }, { "cell_type": "code", "execution_count": 12, "id": "409e4288-cc3a-4181-a013-8d8dedafd753", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{a \\left(-1 + \\sqrt{5}\\right)}{2}$" ], "text/plain": [ "a*(-1 + sqrt(5))/2" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "FH" ] }, { "cell_type": "code", "execution_count": 13, "id": "eceb1b0d-85df-43af-a2b0-a8609a0deb79", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 0.618033988749894848204586834365638117720309179805762862135449$" ], "text/plain": [ "0.618033988749894848204586834365638117720309179805762862135449" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "FH.evalf(60,subs={a: 1}) # to 60 decimal places" ] }, { "cell_type": "code", "execution_count": 14, "id": "f1997c78-a2d2-4b26-934f-d3d31aba7265", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
LengthsValues
Edges
EFa*sqrt(7 - 3*sqrt(5))0.54018151347545290720308631409818785099473024...
EGa*sqrt(7 - 3*sqrt(5))/20.27009075673772645360154315704909392549736512...
EHa*(3 - sqrt(5))/20.38196601125010515179541316563436188227969082...
FGsqrt(3)*a*sqrt(7 - 3*sqrt(5))/20.46781091332446829000553859902741320909259887...
FHa*(-1 + sqrt(5))/20.61803398874989484820458683436563811772030917...
GHa*sqrt(7 - 3*sqrt(5))/20.27009075673772645360154315704909392549736512...
\n", "
" ], "text/plain": [ " Lengths \\\n", "Edges \n", "EF a*sqrt(7 - 3*sqrt(5)) \n", "EG a*sqrt(7 - 3*sqrt(5))/2 \n", "EH a*(3 - sqrt(5))/2 \n", "FG sqrt(3)*a*sqrt(7 - 3*sqrt(5))/2 \n", "FH a*(-1 + sqrt(5))/2 \n", "GH a*sqrt(7 - 3*sqrt(5))/2 \n", "\n", " Values \n", "Edges \n", "EF 0.54018151347545290720308631409818785099473024... \n", "EG 0.27009075673772645360154315704909392549736512... \n", "EH 0.38196601125010515179541316563436188227969082... \n", "FG 0.46781091332446829000553859902741320909259887... \n", "FH 0.61803398874989484820458683436563811772030917... \n", "GH 0.27009075673772645360154315704909392549736512... " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S_net = pd.DataFrame({'Edges' : ['EF', 'EG', 'EH', 'FG', 'FH', 'GH'],\n", " 'Lengths': [EF, EG, EH, FG, FH, GH],\n", " 'Values' : [L.evalf(60, subs={a:1}) \n", " for L in [EF, EG, EH, FG, FH, GH]]})\n", "\n", "S_net.set_index('Edges', inplace=True)\n", "S_net" ] }, { "cell_type": "markdown", "id": "65171651-87a0-4c3e-a06a-1a46280d6bce", "metadata": {}, "source": [ "\"S" ] }, { "cell_type": "code", "execution_count": 15, "id": "73f8e6fa-a637-4125-aab0-ac23f7c58713", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Index: 6 entries, EF to GH\n", "Data columns (total 2 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 Lengths 6 non-null object\n", " 1 Values 6 non-null object\n", "dtypes: object(2)\n", "memory usage: 144.0+ bytes\n" ] } ], "source": [ "S_net.info()" ] }, { "cell_type": "markdown", "id": "f4722cff-5e8c-471e-8b9b-6a274994d71e", "metadata": {}, "source": [ "In the following cells, we compute ratios, such as EG/EH, EF/EH, FH/EH, netting $\\sqrt{2}/2$, $\\sqrt{2}$, and $\\phi$ respectively. We're using pandas syntax to look up the numbers in the Values column, per whatever indexed rows.\n", "\n", "If the S-modules were scaled such that EH = 1, the same ratios would obtain as in the figure below, as the other edges would likewise be scaled accordingly.\n", "\n", "\"casey_poster_s_mod\"/\n", "
by Casey House ([Syn-U](https://www.casey-house.com/syn-u))\n", "\n", "\"house_s_modules\"/\n", "
by Casey House ([Syn-U](https://www.casey-house.com/syn-u))" ] }, { "cell_type": "code", "execution_count": 16, "id": "453b764e-0b5a-4fa6-a787-c38412e40f12", "metadata": {}, "outputs": [], "source": [ "def L(edge):\n", " \"lookup named edge and return the pre-computed length\"\n", " return S_net.loc[edge].Values # consult the DataFrame" ] }, { "cell_type": "code", "execution_count": 17, "id": "0dccff17-8e05-4f6c-93f8-e1bbc14b9021", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 0.70710678118654752440084436210484903928483593768847403658834$" ], "text/plain": [ "0.707106781186547524400844362104849039284835937688474036588340" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L('EG')/L('EH') # EG/EH = rt2(2)/2" ] }, { "cell_type": "code", "execution_count": 18, "id": "77ace5cb-3557-4e13-89df-fb35255baf46", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 0.70710678118654752440084436210484903928483593768847403658834$" ], "text/plain": [ "0.707106781186547524400844362104849039284835937688474036588340" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sy.N(rt2(2)/2, 60)" ] }, { "cell_type": "code", "execution_count": 19, "id": "a1ac6b04-51ea-42db-8e71-aaef95c1b5cc", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 1.41421356237309504880168872420969807856967187537694807317668$" ], "text/plain": [ "1.41421356237309504880168872420969807856967187537694807317668" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L('EF')/L('EH') # EF/EH = rt2(2)" ] }, { "cell_type": "code", "execution_count": 20, "id": "28d4c41f-fee6-4842-9a6d-0a1cc67e2f7a", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 1.41421356237309504880168872420969807856967187537694807317668$" ], "text/plain": [ "1.41421356237309504880168872420969807856967187537694807317668" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sy.N(rt2(2), 60)" ] }, { "cell_type": "code", "execution_count": 21, "id": "da40f7b0-ae90-4d6f-afdf-845cf6491915", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{1}{2} + \\frac{\\sqrt{5}}{2}$" ], "text/plain": [ "1/2 + sqrt(5)/2" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "φ = (rt2(5)+1)/2 # golden ratio\n", "φ" ] }, { "cell_type": "code", "execution_count": 22, "id": "350e736e-c5cd-4500-b188-b02c6a59f3fe", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 1.61803398874989484820458683436563811772030917980576286213545$" ], "text/plain": [ "1.61803398874989484820458683436563811772030917980576286213545" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L('FH')/L('EH') # FH/EH = φ" ] }, { "cell_type": "code", "execution_count": 23, "id": "b48c512c-d991-40a7-8b6c-bac03482bf47", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 1.61803398874989484820458683436563811772030917980576286213545$" ], "text/plain": [ "1.61803398874989484820458683436563811772030917980576286213545" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "φ.evalf(60)" ] }, { "cell_type": "code", "execution_count": 24, "id": "8ee0b72b-cdd2-4b47-aaa3-6a88d01ad301", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 1.22474487139158904909864203735294569598297374032833506421635$" ], "text/plain": [ "1.22474487139158904909864203735294569598297374032833506421635" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L('FG')/L('EH') # FH/EH = φ" ] }, { "cell_type": "markdown", "id": "b5163fc4-8e18-4522-8cfa-4d7906633020", "metadata": {}, "source": [ "Now it's time to recast the Cayley-Menger matrix using `sympy` instead of `numpy`. We'll be able to use arbitrary precision inputs." ] }, { "cell_type": "code", "execution_count": 25, "id": "fbd627d3-15e6-411f-86c1-b3e708a5b2f7", "metadata": {}, "outputs": [], "source": [ "def CM_ivm(a, b, c, d, e, f):\n", " # double and 2nd power us\n", " A,B,C,D,E,F = [(2*x)**2 for x in (a,b,c,d,e,f)]\n", " \n", " # Construct a 5x5 matrix per Caley-Menger\n", " M = Matrix(\n", " [\n", " [0, 1, 1, 1, 1],\n", " [1, 0, A, B, C],\n", " [1, A, 0, D, F],\n", " [1, B, D, 0, E],\n", " [1, C, F, E, 0]])\n", " # print(M) # comment out?\n", " return rt2(M.det())/16 # Syn3 factored in" ] }, { "cell_type": "code", "execution_count": 26, "id": "51069115-3cee-4f8f-8247-a5473176d833", "metadata": {}, "outputs": [], "source": [ "args = S_net.loc[['EF', 'EG', 'EH', 'FG', 'GH', 'FH'], 'Values'] # lookup in order" ] }, { "cell_type": "code", "execution_count": 27, "id": "94ef8546-c0a3-4a41-9db5-7c56262b24ed", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Edges\n", "EF 0.54018151347545290720308631409818785099473024...\n", "EG 0.27009075673772645360154315704909392549736512...\n", "EH 0.38196601125010515179541316563436188227969082...\n", "FG 0.46781091332446829000553859902741320909259887...\n", "GH 0.27009075673772645360154315704909392549736512...\n", "FH 0.61803398874989484820458683436563811772030917...\n", "Name: Values, dtype: object" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "args" ] }, { "cell_type": "code", "execution_count": 28, "id": "58866fec-36c2-46f3-a2a1-e376e4753ef2", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 0.0450849718747371205114670859140952943007729495144071553386216$" ], "text/plain": [ "0.0450849718747371205114670859140952943007729495144071553386216" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Svol = CM_ivm(*args) # pass to Cayley-Menger algorithm, adjusted for tetravolumes\n", "Svol" ] }, { "cell_type": "code", "execution_count": 29, "id": "8a4ccd1d-1ad2-453b-ab35-2e587cf41055", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{1}{2 \\left(\\frac{1}{2} + \\frac{\\sqrt{5}}{2}\\right)^{5}}$" ], "text/plain": [ "1/(2*(1/2 + sqrt(5)/2)**5)" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Svol2 = (φ**-5) / 2\n", "Svol2" ] }, { "cell_type": "markdown", "id": "3b7bfad0-5da0-4851-afd5-60ec3d6316a5", "metadata": {}, "source": [ "We have attained our expected target volume, per the [Koski Identities](https://replit.com/@kurner/SandE-Modules#main.py), for the S module." ] }, { "cell_type": "code", "execution_count": 30, "id": "d5a013d9-fc56-453c-b89d-05721162ff64", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 0.0450849718747371205114670859140952943007729495144071553386216$" ], "text/plain": [ "0.0450849718747371205114670859140952943007729495144071553386216" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Svol2 = Svol2.evalf(60)\n", "Svol2" ] }, { "cell_type": "code", "execution_count": 31, "id": "8f378b68-007a-4f68-965d-d7bdc68753d0", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 0.0450849718747371205114670859140952943007729495144071553386216$" ], "text/plain": [ "0.0450849718747371205114670859140952943007729495144071553386216" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Svol" ] }, { "cell_type": "markdown", "id": "3a69b013-056d-45b8-9d0a-d68e8662fa30", "metadata": {}, "source": [ "Looking good!" ] }, { "cell_type": "code", "execution_count": 32, "id": "95d17e47-b1af-417d-a21b-72b0b0baf52c", "metadata": {}, "outputs": [], "source": [ "Evol = (rt2(2) / 8) * (φ**-3) # home base Emod\n", "S_factor = Svol / Evol # 2*sqrt(7-3*sqrt(5))" ] }, { "cell_type": "code", "execution_count": 33, "id": "3d022e07-65a0-4728-bdd0-580804107bef", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 2.91796067500630910772478993806171293678144921165422827187308$" ], "text/plain": [ "2.91796067500630910772478993806171293678144921165422827187308" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "2.5 * S_factor.evalf(60)**2" ] }, { "cell_type": "code", "execution_count": 34, "id": "5e7383ad-695e-46c5-8815-cae861d5ff5e", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 0.0450849718747371205114670859140952943007729495144071553386216$" ], "text/plain": [ "0.0450849718747371205114670859140952943007729495144071553386216" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Svol" ] }, { "cell_type": "code", "execution_count": 35, "id": "ad0faf2d-6db8-40f0-bfde-5d7870a6225a", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 4.0$" ], "text/plain": [ "4.00000000000000000000000000000000000000000000000000000000000" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "icosa_within = 2.5 * S_factor.evalf(60) * S_factor.evalf(60)\n", "icosa_within + 24 * Svol" ] }, { "cell_type": "markdown", "id": "8f84990f-12dc-43aa-8c34-a46fb4871f6d", "metadata": {}, "source": [ "Yup!" ] } ], "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.3" } }, "nbformat": 4, "nbformat_minor": 5 }