Files

143 lines
26 KiB
Plaintext
Raw Permalink Normal View History

2025-10-21 11:20:44 +08:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"# Finding the minimum of a smooth function\n",
"\n",
"Demos various methods to find the minimum of a function.\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x10f014710>]"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAisAAAGdCAYAAADT1TPdAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAARDlJREFUeJzt3Xd00/XiPvDnkzRNOlPa0kVbKHuUtkDZW6WCiAxFEVRw3OsAr8h1XPSq6FdF3F4QHFdFRZSrMhURFCh7t0CBAgU66J7pTtrk8/sjpT8qq4Wm70+S53VOjocklIcebJ++pyTLsgwiIiIihVKJDkBERER0NSwrREREpGgsK0RERKRoLCtERESkaCwrREREpGgsK0RERKRoLCtERESkaCwrREREpGguogPcKIvFgqysLHh5eUGSJNFxiIiIqBFkWUZZWRlCQkKgUl197MTuy0pWVhbCwsJExyAiIqLrkJGRgdDQ0Ku+x+7LipeXFwDrX9bb21twGiIiImqM0tJShIWF1X8fvxq7LysXpn68vb1ZVoiIiOxMY5ZwcIEtERERKRrLChERESkaywoREREpGssKERERKRrLChERESkaywoREREpGssKERERKRrLChERESkaywoREREpGssKERERKRrLChERESkaywoREREpGsvKFRRVmPDw0v04kFokOgoREZFTY1m5gv/8eRp/Judh1vIEFJYbRcchIiJyWiwrV/DMrV3QobUHckqrMXtFIswWWXQkIiIip8SycgWeWhcsua8P3DRqbD9dgIWbT4uORERE5JRYVq6ic6AX3pgYCQD46M/T2HYqX3AiIiIi58Oycg2Teofi3n7hkGVg9opEZBuqREciIiJyKiwrjfDKuO7oEeKNogoTZn53CDVmi+hIREREToNlpRF0GjWWTOsDL50LDqWXYOHmFNGRiIiInAbLSiOF+7lj/qSeAICPt6QgMaNEbCAiIiInwbLSBLdHhWB8TAjMFhlPr0hEpalWdCQiIiKHx7LSRK/dEYkgbx3OFVRg/vpk0XGIiIgcHstKE+ndNXh3cjQA4Ns9aYjndmYiIiKbYlm5DkM6+WPGoHYAgGd/PIziCpPYQERERA6MZeU6PT+6K9q39kBemREvrz0mOg4REZHDYlm5Tm6uanxwdwxUErDucBa2JOeJjkREROSQWFZuQHSYDx4eEgEA+Pfq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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"def f(x):\n",
" return x**2 + 10 * np.sin(x)\n",
"\n",
"\n",
"x = np.arange(-5, 5, 0.1)\n",
"plt.plot(x, f(x))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now find the minimum with a few methods\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" message: Optimization terminated successfully.\n",
" success: True\n",
" status: 0\n",
" fun: -7.945823375615215\n",
" x: [-1.306e+00]\n",
" nit: 5\n",
" jac: [-1.192e-06]\n",
" hess_inv: [[ 8.589e-02]]\n",
" nfev: 12\n",
" njev: 6\n"
]
}
],
"source": [
"import scipy as sp\n",
"\n",
"# The default (Nelder Mead)\n",
"print(sp.optimize.minimize(f, x0=0))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [],
"source": [
"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
}