91 lines
20 KiB
Plaintext
91 lines
20 KiB
Plaintext
|
|
{
|
||
|
|
"cells": [
|
||
|
|
{
|
||
|
|
"cell_type": "markdown",
|
||
|
|
"metadata": {},
|
||
|
|
"source": [
|
||
|
|
"\n",
|
||
|
|
"# Integrating a simple ODE\n",
|
||
|
|
"\n",
|
||
|
|
"Solve the ODE dy/dt = -2y between t = 0..4, with the initial condition\n",
|
||
|
|
"y(t=0) = 1.\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 1,
|
||
|
|
"metadata": {
|
||
|
|
"collapsed": false,
|
||
|
|
"jupyter": {
|
||
|
|
"outputs_hidden": false
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 400x300 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"import numpy as np\n",
|
||
|
|
"import scipy as sp\n",
|
||
|
|
"import matplotlib.pyplot as plt\n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
"def f(t, y):\n",
|
||
|
|
" return -2 * y\n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
"t_span = (0, 4) # time interval\n",
|
||
|
|
"t_eval = np.linspace(*t_span) # times at which to evaluate `y`\n",
|
||
|
|
"y0 = [\n",
|
||
|
|
" 1,\n",
|
||
|
|
"] # initial state\n",
|
||
|
|
"res = sp.integrate.solve_ivp(f, t_span=t_span, y0=y0, t_eval=t_eval)\n",
|
||
|
|
"\n",
|
||
|
|
"plt.figure(figsize=(4, 3))\n",
|
||
|
|
"plt.plot(res.t, res.y[0])\n",
|
||
|
|
"plt.xlabel(\"t\")\n",
|
||
|
|
"plt.ylabel(\"y\")\n",
|
||
|
|
"plt.title(\"Solution of Initial Value Problem\")\n",
|
||
|
|
"plt.tight_layout()\n",
|
||
|
|
"plt.show()"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": null,
|
||
|
|
"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.12.11"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"nbformat": 4,
|
||
|
|
"nbformat_minor": 4
|
||
|
|
}
|