{ "cells": [ { "cell_type": "markdown", "id": "3bbe8002-bdf3-490c-bde0-80dd3713a3d0", "metadata": {}, "source": [ "## The reversible Synthesis/Decomposition reaction `A + B <-> C`\n", "#### with 1st-order kinetics for each species, taken to equilibrium.\n", "#### Comparison of 2 approximate solutions and exact solutions " ] }, { "cell_type": "markdown", "id": "1b7d393d-a9b5-4437-80ae-c2b3effd9ca8", "metadata": {}, "source": [ "### TAGS : \"uniform compartment\", \"numerical\"" ] }, { "cell_type": "code", "execution_count": 1, "id": "5dafa9a4-85de-49a5-925d-e268ff1402a1", "metadata": {}, "outputs": [], "source": [ "LAST_REVISED = \"Sep. 8, 2024\"\n", "LIFE123_VERSION = \"1.0.0.beta.38\" # Version this experiment is based on" ] }, { "cell_type": "code", "execution_count": 2, "id": "82191b23-e6f5-4638-a26d-3716fc728055", "metadata": {}, "outputs": [], "source": [ "#import set_path # Using MyBinder? Uncomment this before running the next cell!\n", " # Importing this local file will add the project's home directory to sys.path" ] }, { "cell_type": "code", "execution_count": 3, "id": "4bbaa8f3", "metadata": { "tags": [] }, "outputs": [], "source": [ "#import sys\n", "#sys.path.append(\"C:/some_path/my_env_or_install\") # CHANGE to the folder containing your venv or libraries installation!\n", "# NOTE: If any of the imports below can't find a module, uncomment the lines above, or try: import set_path\n", "\n", "import pandas as pd\n", "from life123 import check_version, UniformCompartment, ReactionDynamics, PlotlyHelper" ] }, { "cell_type": "code", "execution_count": 4, "id": "4f91f11c-caf8-4ce6-a2c4-dc2a7cab7396", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "OK\n" ] } ], "source": [ "check_version(LIFE123_VERSION)" ] }, { "cell_type": "code", "execution_count": null, "id": "22559b04-73d8-4bd2-8c8d-c95dbdb0e862", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "3db339d2-4ee0-46b8-a596-419a2b075cc2", "metadata": {}, "source": [ "# 1. Run a simulation with low accuracy" ] }, { "cell_type": "markdown", "id": "9329208b-070f-4902-8f37-0f11ddf75ed6", "metadata": {}, "source": [ "### Initialize the System\n", "Specify the chemicals, the reactions, and the initial concentrations" ] }, { "cell_type": "code", "execution_count": 5, "id": "e328c104-126d-400b-89fe-c4bbe1dc2212", "metadata": {}, "outputs": [], "source": [ "# Instantiate the simulator and specify the chemicals\n", "# Here we use the \"fast\" preset for the variable steps, which leads to fewer steps, but generally less-accurate results\n", "uc_fast = UniformCompartment(preset=\"fast\") " ] }, { "cell_type": "code", "execution_count": 6, "id": "1521d60a-b189-40d1-be43-013a6f5ac510", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of reactions: 1 (at temp. 25 C)\n", "0: A + B <-> C (kF = 5 / kR = 2 / delta_G = -2,271.4 / K = 2.5) | 1st order in all reactants & products\n", "Set of chemicals involved in the above reactions: {'C', 'B', 'A'}\n" ] } ], "source": [ "# Reaction A + B <-> C , with 1st-order kinetics for each species\n", "uc_fast.add_reaction(reactants=[\"A\" , \"B\"], products=\"C\",\n", " forward_rate=5., reverse_rate=2.)\n", "\n", "uc_fast.describe_reactions()" ] }, { "cell_type": "code", "execution_count": 7, "id": "ae304704-c8d9-4cef-9e0b-2587bb3909ef", "metadata": {}, "outputs": [], "source": [ "# Set the initial concentrations of all the chemicals\n", "uc_fast.set_conc({\"A\": 10., \"B\": 50., \"C\": 20.}, snapshot=True)" ] }, { "cell_type": "code", "execution_count": null, "id": "42f757ce-98bb-4d3f-871d-78d059cba2a9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "fc516ca2-e62d-4784-b826-5372ff7f4c75", "metadata": { "tags": [] }, "source": [ "### Run the reaction" ] }, { "cell_type": "code", "execution_count": 8, "id": "2502cd11-0df9-4303-8895-98401a1df7b8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Some steps were backtracked and re-done, to prevent negative concentrations or excessively large concentration changes\n", "23 total step(s) taken\n", "Number of step re-do's because of elective soft aborts: 3\n", "Norm usage: {'norm_A': 13, 'norm_B': 9, 'norm_C': 9, 'norm_D': 9}\n" ] } ], "source": [ "uc_fast.single_compartment_react(initial_step=0.004, duration=0.06, variable_steps=True)" ] }, { "cell_type": "code", "execution_count": 9, "id": "80fbaee3-bd6f-4197-9270-23374d46a4a7", "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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SYSTEM TIMEABCcaption
00.00000010.00000050.00000020.000000Initialized state
10.0008647.87456047.87456022.125440
20.0015556.60226546.60226523.397735
30.0022465.57126645.57126624.428734
40.0029384.72759444.72759425.272406
50.0036294.03174644.03174625.968254
60.0046663.16530543.16530526.834695
70.0057022.51265242.51265227.487348
80.0067392.01589842.01589827.984102
90.0077761.63484241.63484228.365158
100.0088131.34080441.34080428.659196
110.0098501.11288341.11288328.887117
120.0108860.93559540.93559529.064405
130.0119230.79732140.79732129.202679
140.0134780.63521140.63521129.364789
150.0150340.52583340.52583329.474167
160.0165890.45180540.45180529.548195
170.0189220.37649040.37649029.623510
180.0212540.33739340.33739329.662607
190.0247540.30687140.30687129.693129
200.0300020.29396540.29396529.706035
210.0378760.29543740.29543729.704563
220.0496850.29408240.29408229.705918
230.0674000.29696940.29696929.703031
\n", "
" ], "text/plain": [ " SYSTEM TIME A B C caption\n", "0 0.000000 10.000000 50.000000 20.000000 Initialized state\n", "1 0.000864 7.874560 47.874560 22.125440 \n", "2 0.001555 6.602265 46.602265 23.397735 \n", "3 0.002246 5.571266 45.571266 24.428734 \n", "4 0.002938 4.727594 44.727594 25.272406 \n", "5 0.003629 4.031746 44.031746 25.968254 \n", "6 0.004666 3.165305 43.165305 26.834695 \n", "7 0.005702 2.512652 42.512652 27.487348 \n", "8 0.006739 2.015898 42.015898 27.984102 \n", "9 0.007776 1.634842 41.634842 28.365158 \n", "10 0.008813 1.340804 41.340804 28.659196 \n", "11 0.009850 1.112883 41.112883 28.887117 \n", "12 0.010886 0.935595 40.935595 29.064405 \n", "13 0.011923 0.797321 40.797321 29.202679 \n", "14 0.013478 0.635211 40.635211 29.364789 \n", "15 0.015034 0.525833 40.525833 29.474167 \n", "16 0.016589 0.451805 40.451805 29.548195 \n", "17 0.018922 0.376490 40.376490 29.623510 \n", "18 0.021254 0.337393 40.337393 29.662607 \n", "19 0.024754 0.306871 40.306871 29.693129 \n", "20 0.030002 0.293965 40.293965 29.706035 \n", "21 0.037876 0.295437 40.295437 29.704563 \n", "22 0.049685 0.294082 40.294082 29.705918 \n", "23 0.067400 0.296969 40.296969 29.703031 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_fast = uc_fast.get_history()\n", "df_fast" ] }, { "cell_type": "markdown", "id": "6ac3dd4e-9dd0-4d3a-aa83-76102bd79524", "metadata": { "tags": [] }, "source": [ "### Plots changes of concentrations with time" ] }, { "cell_type": "code", "execution_count": 10, "id": "5f73e330-2d43-4cef-b2a0-c6eb379eea2e", "metadata": {}, "outputs": [ { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hovertemplate": "Chemical=A
SYSTEM TIME=%{x}
Concentration=%{y}", "legendgroup": "A", "line": { "color": "red", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines", "name": "A", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ 0, 0.0008639999999999999, 0.0015551999999999996, 0.0022463999999999995, 0.0029375999999999994, 0.0036287999999999993, 0.004665599999999999, 0.005702399999999999, 0.006739199999999999, 0.007775999999999999, 0.008812799999999999, 0.009849599999999998, 0.010886399999999997, 0.011923199999999997, 0.013478399999999996, 0.015033599999999996, 0.016588799999999994, 0.018921599999999993, 0.021254399999999993, 0.024753599999999994, 0.03000239999999999, 0.03787559999999999, 0.04968539999999999, 0.06740009999999999 ], "xaxis": "x", "y": [ 10, 7.874560000000001, 6.6022649832669185, 5.571266196412786, 4.727593830730617, 4.031745738170395, 3.165304930294141, 2.512652422560647, 2.0158977994878757, 1.6348420991345631, 1.3408039110369463, 1.1128829584716142, 0.9355954461437876, 0.7973205671737157, 0.6352106326726121, 0.525833400282096, 0.45180455730262453, 0.37648974220125575, 0.3373928293875607, 0.30687098340433216, 0.29396529878725997, 0.295437049136851, 0.294082474812173, 0.29696851083086506 ], "yaxis": "y" }, { "hovertemplate": "Chemical=B
SYSTEM TIME=%{x}
Concentration=%{y}", "legendgroup": "B", "line": { "color": "darkorange", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines", "name": "B", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ 0, 0.0008639999999999999, 0.0015551999999999996, 0.0022463999999999995, 0.0029375999999999994, 0.0036287999999999993, 0.004665599999999999, 0.005702399999999999, 0.006739199999999999, 0.007775999999999999, 0.008812799999999999, 0.009849599999999998, 0.010886399999999997, 0.011923199999999997, 0.013478399999999996, 0.015033599999999996, 0.016588799999999994, 0.018921599999999993, 0.021254399999999993, 0.024753599999999994, 0.03000239999999999, 0.03787559999999999, 0.04968539999999999, 0.06740009999999999 ], "xaxis": "x", "y": [ 50, 47.87456, 46.60226498326692, 45.571266196412786, 44.72759383073062, 44.0317457381704, 43.16530493029415, 42.512652422560656, 42.01589779948788, 41.634842099134566, 41.34080391103695, 41.112882958471616, 40.935595446143786, 40.79732056717371, 40.63521063267261, 40.525833400282096, 40.45180455730262, 40.37648974220125, 40.337392829387554, 40.30687098340432, 40.29396529878725, 40.295437049136844, 40.294082474812164, 40.29696851083086 ], "yaxis": "y" }, { "hovertemplate": "Chemical=C
SYSTEM TIME=%{x}
Concentration=%{y}", "legendgroup": "C", "line": { "color": "green", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines", "name": "C", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ 0, 0.0008639999999999999, 0.0015551999999999996, 0.0022463999999999995, 0.0029375999999999994, 0.0036287999999999993, 0.004665599999999999, 0.005702399999999999, 0.006739199999999999, 0.007775999999999999, 0.008812799999999999, 0.009849599999999998, 0.010886399999999997, 0.011923199999999997, 0.013478399999999996, 0.015033599999999996, 0.016588799999999994, 0.018921599999999993, 0.021254399999999993, 0.024753599999999994, 0.03000239999999999, 0.03787559999999999, 0.04968539999999999, 0.06740009999999999 ], "xaxis": "x", "y": [ 20, 22.12544, 23.397735016733083, 24.428733803587217, 25.272406169269388, 25.96825426182961, 26.834695069705866, 27.48734757743936, 27.98410220051213, 28.36515790086544, 28.659196088963057, 28.887117041528388, 29.064404553856214, 29.202679432826287, 29.36478936732739, 29.474166599717908, 29.54819544269738, 29.62351025779875, 29.662607170612443, 29.69312901659567, 29.70603470121274, 29.70456295086315, 29.70591752518783, 29.70303148916914 ], "yaxis": "y" } ], "layout": { "autosize": true, "legend": { "title": { "text": "Chemical" }, "tracegroupgap": 0 }, "shapes": [ { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0, "x1": 0, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.0008639999999999999, "x1": 0.0008639999999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.0015551999999999996, "x1": 0.0015551999999999996, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.0022463999999999995, "x1": 0.0022463999999999995, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.0029375999999999994, "x1": 0.0029375999999999994, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.0036287999999999993, "x1": 0.0036287999999999993, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.004665599999999999, "x1": 0.004665599999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.005702399999999999, "x1": 0.005702399999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.006739199999999999, "x1": 0.006739199999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.007775999999999999, "x1": 0.007775999999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.008812799999999999, "x1": 0.008812799999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.009849599999999998, "x1": 0.009849599999999998, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.010886399999999997, "x1": 0.010886399999999997, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.011923199999999997, "x1": 0.011923199999999997, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.013478399999999996, "x1": 0.013478399999999996, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.015033599999999996, "x1": 0.015033599999999996, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.016588799999999994, "x1": 0.016588799999999994, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.018921599999999993, "x1": 0.018921599999999993, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.021254399999999993, "x1": 0.021254399999999993, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.024753599999999994, "x1": 0.024753599999999994, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.03000239999999999, "x1": 0.03000239999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.03787559999999999, "x1": 0.03787559999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.04968539999999999, "x1": 0.04968539999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" }, { "line": { "color": "gray", "dash": "dot", "width": 1 }, "type": "line", "x0": 0.06740009999999999, "x1": 0.06740009999999999, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" } ], "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Reaction `A + B <-> C` . Changes in concentrations with time (time steps shown in dashed lines)" }, "xaxis": { "anchor": "y", "autorange": true, "domain": [ 0, 1 ], "range": [ -6.0286314847942746e-05, 0.06746038631484794 ], "title": { "text": "SYSTEM TIME" }, "type": "linear" }, "yaxis": { "anchor": "x", "autorange": true, "domain": [ 0, 1 ], "range": [ -2.467481073502337, 52.7614463722896 ], "title": { "text": "Concentration" }, "type": "linear" } } }, "image/png": "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", "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "uc_fast.plot_history(colors=['red', 'darkorange', 'green'], show_intervals=True)" ] }, { "cell_type": "code", "execution_count": null, "id": "ffce0ef2-b389-4718-8ef7-6fff9bc002b9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "6c387b79-b4cf-4be6-85a4-6e535cc3a836", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "77506b0f-29a8-4754-ac71-2410eec4a3d4", "metadata": {}, "source": [ "# 2. Let's now repeat the simulation with the \"slow\" preset, which yields more data points\n", "### and, generally, more accuracy" ] }, { "cell_type": "code", "execution_count": 11, "id": "3bc4c583-70b7-49fd-b7c1-09275750bb19", "metadata": {}, "outputs": [], "source": [ "# Instantiate the simulator and specify the chemicals\n", "uc_slow = UniformCompartment(preset=\"slow\")" ] }, { "cell_type": "code", "execution_count": 12, "id": "aa1302f6-a60a-4272-9636-2b5530639413", "metadata": {}, "outputs": [], "source": [ "# Reaction A + B <-> C , with 1st-order kinetics for each species\n", "uc_slow.add_reaction(reactants=[\"A\" , \"B\"], products=\"C\",\n", " forward_rate=5., reverse_rate=2.)\n", "\n", "# Set the initial concentrations of all the chemicals\n", "uc_slow.set_conc({\"A\": 10., \"B\": 50., \"C\": 20.}, snapshot=True)" ] }, { "cell_type": "code", "execution_count": 13, "id": "053e133b-c3c6-4e21-94d5-e81a733b2c01", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Some steps were backtracked and re-done, to prevent negative concentrations or excessively large concentration changes\n", "80 total step(s) taken\n", "Number of step re-do's because of elective soft aborts: 2\n", "Norm usage: {'norm_A': 38, 'norm_B': 36, 'norm_C': 36, 'norm_D': 36}\n" ] } ], "source": [ "uc_slow.single_compartment_react(initial_step=0.004, duration=0.06, variable_steps=True)" ] }, { "cell_type": "markdown", "id": "63bd2edd-abb9-414e-ad46-ed3c0ca16e63", "metadata": {}, "source": [ "### Note that **80 steps** were now used, instead of the earlier 23" ] }, { "cell_type": "code", "execution_count": 14, "id": "00369fbd-12df-464a-b2c9-1f7be6e53850", "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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SYSTEM TIMEABCcaption
00.00000010.00000050.00000020.000000Initialized state
10.0001609.60640049.60640020.393600
20.0003369.19422449.19422420.805776
30.0005308.76445148.76445121.235549
40.0007438.31840748.31840721.681593
..................
760.0453290.29499740.29499729.705003
770.0487080.29491440.29491429.705086
780.0524240.29488640.29488629.705114
790.0565110.29487940.29487929.705121
800.0610080.29487840.29487829.705122
\n", "

81 rows × 5 columns

\n", "
" ], "text/plain": [ " SYSTEM TIME A B C caption\n", "0 0.000000 10.000000 50.000000 20.000000 Initialized state\n", "1 0.000160 9.606400 49.606400 20.393600 \n", "2 0.000336 9.194224 49.194224 20.805776 \n", "3 0.000530 8.764451 48.764451 21.235549 \n", "4 0.000743 8.318407 48.318407 21.681593 \n", ".. ... ... ... ... ...\n", "76 0.045329 0.294997 40.294997 29.705003 \n", "77 0.048708 0.294914 40.294914 29.705086 \n", "78 0.052424 0.294886 40.294886 29.705114 \n", "79 0.056511 0.294879 40.294879 29.705121 \n", "80 0.061008 0.294878 40.294878 29.705122 \n", "\n", "[81 rows x 5 columns]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_slow = uc_slow.get_history()\n", "df_slow" ] }, { "cell_type": "code", "execution_count": null, "id": "21b752d3-940c-4085-846a-57573a724669", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "3de66610-b963-4ebe-86ac-f32f136bef40", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "c19592e7-2eb5-441a-b5e6-0a67562300e2", "metadata": {}, "source": [ "# 3. And, finally, get the EXACT analytical solution" ] }, { "cell_type": "code", "execution_count": 15, "id": "dbd3acc4-441d-4aa4-bda5-8d2376685794", "metadata": {}, "outputs": [], "source": [ "rxn = uc_slow.get_chem_data().get_reaction(0)" ] }, { "cell_type": "code", "execution_count": 16, "id": "c0164252-ec72-4b3d-be3f-48a097bdc78e", "metadata": {}, "outputs": [], "source": [ "reactants, products, kF, kR = rxn.unpack_for_dynamics()" ] }, { "cell_type": "code", "execution_count": 17, "id": "72585e7a-8693-444d-95bd-288e6f2f2417", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0. , 0.00016 , 0.000336 , 0.0005296 , 0.00074256,\n", " 0.00095552, 0.00116848, 0.00140274, 0.00163699, 0.00187125,\n", " 0.0021055 , 0.00233976, 0.00257402, 0.00280827, 0.00304253,\n", " 0.00327678, 0.00351104, 0.00376872, 0.0040264 , 0.00428408,\n", " 0.00454177, 0.00479945, 0.00505713, 0.00531481, 0.00557249,\n", " 0.00583017, 0.00608786, 0.00637131, 0.00665476, 0.00693821,\n", " 0.00722166, 0.0075051 , 0.00778855, 0.008072 , 0.00835545,\n", " 0.0086389 , 0.0089507 , 0.00926249, 0.00957429, 0.00988608,\n", " 0.01019788, 0.01050967, 0.01085265, 0.01119562, 0.01153859,\n", " 0.01188157, 0.01222454, 0.01260181, 0.01297909, 0.01335636,\n", " 0.01377136, 0.01418636, 0.01460135, 0.01505785, 0.01551435,\n", " 0.0160165 , 0.01651865, 0.01707101, 0.01762338, 0.01823098,\n", " 0.01889934, 0.01963453, 0.02044325, 0.02133283, 0.02231138,\n", " 0.02338778, 0.02457182, 0.02587426, 0.02730695, 0.02888291,\n", " 0.03061646, 0.03252337, 0.03462097, 0.03692833, 0.03946642,\n", " 0.04225833, 0.04532942, 0.04870763, 0.05242365, 0.05651128,\n", " 0.06100767])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We'll use the same, larger, number of time points as in the \"slow\" simulation of step 2\n", "t_arr = uc_slow.get_history(columns=\"SYSTEM TIME\").to_numpy()\n", "t_arr" ] }, { "cell_type": "code", "execution_count": 18, "id": "8b9c3430-3af8-4d90-ac88-d3930b81c25c", "metadata": {}, "outputs": [], "source": [ "# The EXACT, analytical solution\n", "A_exact, B_exact, C_exact = ReactionDynamics.exact_solution_combination_rxn(kF, kR, A0=10., B0=50., C0=20., t_arr=t_arr)" ] }, { "cell_type": "code", "execution_count": 19, "id": "97a5440a-84c1-42fe-9af8-132d3c18d722", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([20. , 20.38428133, 20.78635288, 21.20524964, 21.6396822 ,\n", " 22.04847547, 22.4334779 , 22.83150536, 23.20481157, 23.5552385 ,\n", " 23.88445876, 24.19399451, 24.48523397, 24.75944576, 25.01779145,\n", " 25.26133651, 25.49105997, 25.72886518, 25.95213657, 26.16188313,\n", " 26.35903074, 26.54443041, 26.71886558, 26.88305852, 27.03767606,\n", " 27.18333468, 27.32060504, 27.46254403, 27.59562315, 27.72044255,\n", " 27.83755633, 27.94747672, 28.0506777 , 28.14759841, 28.23864606,\n", " 28.32419863, 28.41237799, 28.49476579, 28.57176219, 28.6437373 ,\n", " 28.7110337 , 28.77396873, 28.83851038, 28.89849234, 28.95424822,\n", " 29.00608568, 29.05428868, 29.10342657, 29.14880498, 29.19071874,\n", " 29.23314457, 29.27203478, 29.30768978, 29.34349988, 29.37605771,\n", " 29.40847188, 29.43767245, 29.46646524, 29.4921423 , 29.51719352,\n", " 29.5413468 , 29.5643336 , 29.58589997, 29.60581836, 29.62389976,\n", " 29.64000483, 29.65405309, 29.66602889, 29.6759832 , 29.68403037,\n", " 29.69033984, 29.69512319, 29.69861779, 29.70106905, 29.70271321,\n", " 29.70376305, 29.7043981 , 29.70476006, 29.70495332, 29.70504935,\n", " 29.70509345])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "C_exact" ] }, { "cell_type": "code", "execution_count": 20, "id": "084f74d9-7518-4519-abac-a21a737c4241", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SYSTEM TIMEC_exact
00.00000020.000000
10.00016020.384281
20.00033620.786353
30.00053021.205250
40.00074321.639682
.........
760.04532929.704398
770.04870829.704760
780.05242429.704953
790.05651129.705049
800.06100829.705093
\n", "

81 rows × 2 columns

\n", "
" ], "text/plain": [ " SYSTEM TIME C_exact\n", "0 0.000000 20.000000\n", "1 0.000160 20.384281\n", "2 0.000336 20.786353\n", "3 0.000530 21.205250\n", "4 0.000743 21.639682\n", ".. ... ...\n", "76 0.045329 29.704398\n", "77 0.048708 29.704760\n", "78 0.052424 29.704953\n", "79 0.056511 29.705049\n", "80 0.061008 29.705093\n", "\n", "[81 rows x 2 columns]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_exact = pd.DataFrame({\n", " 'SYSTEM TIME': t_arr,\n", " 'C_exact': C_exact\n", "})\n", "\n", "df_exact" ] }, { "cell_type": "code", "execution_count": null, "id": "bd613b77-772d-4b0c-a9cf-ada74236ef04", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "8111731a-6e83-4479-89dd-e52a846e02a4", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "220b3406-61e1-4ed3-9ff5-46bcd753639a", "metadata": {}, "source": [ "# 4. Let's compare plots for the concentration of `C`, as a function of time, from the earlier 3 simulations" ] }, { "cell_type": "code", "execution_count": 21, "id": "d181c8bc-e35e-4358-97cc-3b158ee2a020", "metadata": {}, "outputs": [], "source": [ "p1 = uc_fast.plot_history(chemicals=\"C\", colors=['#F5B914'], title=\"fast (less precise)\", show=False)\n", "p2 = uc_slow.plot_history(chemicals=\"C\", colors=['#DBF514'], title=\"slow (more precise)\", show=False)\n", "p3 = PlotlyHelper.plot_pandas(df=df_exact, fields=[\"SYSTEM TIME\", \"C_exact\"], colors=['forestgreen'], title=\"exact\", show=False)" ] }, { "cell_type": "code", "execution_count": 22, "id": "c7cd288b-1052-4fb1-b5b8-7067764f8391", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hovertemplate": "fast (less precise)
SYSTEM TIME=%{x}
C=%{y}", "legendgroup": "", "line": { "color": "#F5B914", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines", "name": "fast (less precise)", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ 0, 0.0008639999999999999, 0.0015551999999999996, 0.0022463999999999995, 0.0029375999999999994, 0.0036287999999999993, 0.004665599999999999, 0.005702399999999999, 0.006739199999999999, 0.007775999999999999, 0.008812799999999999, 0.009849599999999998, 0.010886399999999997, 0.011923199999999997, 0.013478399999999996, 0.015033599999999996, 0.016588799999999994, 0.018921599999999993, 0.021254399999999993, 0.024753599999999994, 0.03000239999999999, 0.03787559999999999, 0.04968539999999999, 0.06740009999999999 ], "xaxis": "x", "y": [ 20, 22.12544, 23.397735016733083, 24.428733803587217, 25.272406169269388, 25.96825426182961, 26.834695069705866, 27.48734757743936, 27.98410220051213, 28.36515790086544, 28.659196088963057, 28.887117041528388, 29.064404553856214, 29.202679432826287, 29.36478936732739, 29.474166599717908, 29.54819544269738, 29.62351025779875, 29.662607170612443, 29.69312901659567, 29.70603470121274, 29.70456295086315, 29.70591752518783, 29.70303148916914 ], "yaxis": "y" }, { "hovertemplate": "slow (more precise)
SYSTEM TIME=%{x}
C=%{y}", "legendgroup": "", "line": { "color": "#DBF514", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines", "name": "slow (more precise)", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ 0, 0.00016, 0.00033600000000000004, 0.0005296000000000001, 0.0007425600000000002, 0.0009555200000000003, 0.0011684800000000004, 0.0014027360000000006, 0.0016369920000000007, 0.001871248000000001, 0.002105504000000001, 0.002339760000000001, 0.002574016000000001, 0.002808272000000001, 0.003042528000000001, 0.003276784000000001, 0.003511040000000001, 0.003768721600000001, 0.004026403200000001, 0.004284084800000002, 0.004541766400000002, 0.004799448000000002, 0.005057129600000002, 0.005314811200000003, 0.005572492800000003, 0.005830174400000003, 0.0060878560000000035, 0.006371305760000004, 0.006654755520000004, 0.006938205280000004, 0.007221655040000005, 0.007505104800000005, 0.007788554560000005, 0.008072004320000005, 0.008355454080000005, 0.008638903840000005, 0.008950698576000005, 0.009262493312000004, 0.009574288048000004, 0.009886082784000003, 0.010197877520000002, 0.010509672256000002, 0.010852646465600002, 0.011195620675200002, 0.011538594884800002, 0.011881569094400002, 0.012224543304000001, 0.012601814934560002, 0.012979086565120002, 0.013356358195680002, 0.013771356989296003, 0.014186355782912004, 0.014601354576528005, 0.015057853249505605, 0.015514351922483205, 0.016016500462758567, 0.016518649003033927, 0.017071012397336823, 0.01762337579163972, 0.018230975525372905, 0.01889933523247941, 0.019634530910296565, 0.020443246155895437, 0.021332832926054195, 0.02231137837322883, 0.023387778365120928, 0.024571818356202237, 0.025874262346391674, 0.027306950735600057, 0.028882907963729276, 0.03061646091467142, 0.03252336916070778, 0.03462096823134777, 0.036928327209051766, 0.03946642208452616, 0.04225832644754799, 0.045329421246872004, 0.04870762552612842, 0.052423650233310484, 0.05651127741121075, 0.06100766730690105 ], "xaxis": "x", "y": [ 20, 20.3936, 20.805775703244798, 21.235548751748496, 21.681592871320913, 22.100335635004186, 22.493833686134767, 22.900960836068613, 23.2818582098693, 23.638567267404103, 23.97293222793699, 24.28662336455126, 24.581157051025958, 24.857913079403644, 25.118149673861133, 25.36301655212325, 25.59356632562356, 25.832484296432327, 26.056326918821462, 26.266178884024864, 26.4630318991009, 26.64779431494654, 26.821299572543545, 26.98431363436174, 27.13754154135871, 27.281633214172338, 27.417188599014167, 27.55751960820491, 27.688816255735112, 27.811710708713367, 27.92678492995523, 28.034575359956804, 28.135577083053768, 28.230247543603113, 28.319009868537254, 28.402255844665962, 28.488157867148047, 28.568233129687368, 28.642897582970008, 28.712534855430714, 28.777499094496452, 28.838117517808726, 28.900350227896414, 28.958030053496, 29.011501940168678, 29.0610830636544, 29.10706528880962, 29.153982590210155, 29.197170474926015, 29.236932731814342, 29.27720875751137, 29.31398427686326, 29.34756940876596, 29.38131347468918, 29.41184800589546, 29.442246228934884, 29.469473580508957, 29.49630387462533, 29.5200638778668, 29.543212692573473, 29.5654786345939, 29.586591513468495, 29.606294281138492, 29.624356073890986, 29.640585851810744, 29.654845515151756, 29.667061094747478, 29.677230447743945, 29.685425927451732, 29.691790819806155, 29.696528999483565, 29.699888238311456, 29.702138775865496, 29.70354989620817, 29.704368011208, 29.704799787872545, 29.70500296743816, 29.705085790276517, 29.705113817722584, 29.70512116777708, 29.705122479542585 ], "yaxis": "y" }, { "hovertemplate": "exact
Chemical=C_exact
SYSTEM TIME=%{x}
Concentration=%{y}", "legendgroup": "C_exact", "line": { "color": "forestgreen", "dash": "solid" }, "marker": { "symbol": "circle" }, "mode": "lines", "name": "exact", "orientation": "v", "showlegend": true, "type": "scatter", "x": [ 0, 0.00016, 0.00033600000000000004, 0.0005296000000000001, 0.0007425600000000002, 0.0009555200000000003, 0.0011684800000000004, 0.0014027360000000006, 0.0016369920000000007, 0.001871248000000001, 0.002105504000000001, 0.002339760000000001, 0.002574016000000001, 0.002808272000000001, 0.003042528000000001, 0.003276784000000001, 0.003511040000000001, 0.003768721600000001, 0.004026403200000001, 0.004284084800000002, 0.004541766400000002, 0.004799448000000002, 0.005057129600000002, 0.005314811200000003, 0.005572492800000003, 0.005830174400000003, 0.0060878560000000035, 0.006371305760000004, 0.006654755520000004, 0.006938205280000004, 0.007221655040000005, 0.007505104800000005, 0.007788554560000005, 0.008072004320000005, 0.008355454080000005, 0.008638903840000005, 0.008950698576000005, 0.009262493312000004, 0.009574288048000004, 0.009886082784000003, 0.010197877520000002, 0.010509672256000002, 0.010852646465600002, 0.011195620675200002, 0.011538594884800002, 0.011881569094400002, 0.012224543304000001, 0.012601814934560002, 0.012979086565120002, 0.013356358195680002, 0.013771356989296003, 0.014186355782912004, 0.014601354576528005, 0.015057853249505605, 0.015514351922483205, 0.016016500462758567, 0.016518649003033927, 0.017071012397336823, 0.01762337579163972, 0.018230975525372905, 0.01889933523247941, 0.019634530910296565, 0.020443246155895437, 0.021332832926054195, 0.02231137837322883, 0.023387778365120928, 0.024571818356202237, 0.025874262346391674, 0.027306950735600057, 0.028882907963729276, 0.03061646091467142, 0.03252336916070778, 0.03462096823134777, 0.036928327209051766, 0.03946642208452616, 0.04225832644754799, 0.045329421246872004, 0.04870762552612842, 0.052423650233310484, 0.05651127741121075, 0.06100766730690105 ], "xaxis": "x", "y": [ 19.999999999999996, 20.3842813288264, 20.78635287896649, 21.205249635107318, 21.639682199084223, 22.048475469971823, 22.4334779012473, 22.83150536213485, 23.20481156793951, 23.55523850485545, 23.884458761772574, 24.19399450819425, 24.48523396742698, 24.75944576284361, 25.017791451276246, 25.26133650569857, 25.49105996691087, 25.728865175844483, 25.952136567943796, 26.161883128349317, 26.359030737405085, 26.544430411864642, 26.718865579250178, 26.88305851571123, 27.03767605801434, 27.183334683870683, 27.320605041076444, 27.462544027211493, 27.595623147539108, 27.720442546941683, 27.837556333460146, 27.947476715705523, 28.050677701813175, 28.147598413699257, 28.238646062945737, 28.32419862834289, 28.41237799166894, 28.494765785444777, 28.571762188968496, 28.64373730131571, 28.711033696655843, 28.773968727785586, 28.838510384584595, 28.89849234463122, 28.95424821809336, 29.00608567891178, 29.054288682415176, 29.10342656709122, 29.148804982903073, 29.19071874418843, 29.233144565775515, 29.272034775257193, 29.307689778997783, 29.343499881523815, 29.376057712645107, 29.40847187533152, 29.437672450417228, 29.46646524388176, 29.492142299239973, 29.517193516194887, 29.541346795363324, 29.564333604289505, 29.585899965726597, 29.60581835949108, 29.62389976286067, 29.640004833921964, 29.654053088883668, 29.66602889031317, 29.67598319804877, 29.68403037079213, 29.690339842717833, 29.695123185229285, 29.698617792998096, 29.701069053939502, 29.702713209041224, 29.703763049921402, 29.704398099726724, 29.70476006299508, 29.704953319905407, 29.705049350896005, 29.705093448212427 ], "yaxis": "y" } ], "layout": { "autosize": true, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Comparison of simulation accuracies" }, "xaxis": { "range": [ 0, 0.02 ], "title": { "text": "SYSTEM TIME" }, "type": "linear" }, "yaxis": { "autorange": true, "range": [ 19.46077584993262, 30.245258851280116 ], "title": { "text": "[C]" }, "type": "linear" } } }, "image/png": "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", "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "PlotlyHelper.combine_plots([p1, p2, p3], title=\"Comparison of simulation accuracies\", xrange=[0, 0.02])" ] }, { "cell_type": "markdown", "id": "a2390325-c71a-4ef1-86cc-de67893e5760", "metadata": {}, "source": [ "## The comparison reveals a gradient \"less precise\" -> \"more precise\" -> \"exact\" solution" ] }, { "cell_type": "code", "execution_count": null, "id": "9d9ca463-5064-469c-be43-008c4b1a671d", "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.8.10" } }, "nbformat": 4, "nbformat_minor": 5 }