{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Решение нелинейных уравнений\n", "\n", "Подмодуль [scipy.optimize](https://docs.scipy.org/doc/scipy/reference/optimize.html#module-scipy.optimize) также содержит в себе методы для поиска корней нелинейных уравнений и их систем." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Поиск корня скалярной функции одного аргумента\n", "\n", "Функция [scipy.optimize.root_scalar](https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.root_scalar.html#scipy.optimize.root_scalar) позволяет искать корни функции $f: \\mathbb{R} \\to \\mathbb{R}$:\n", "\n", "$$\n", "f(x) = 0.\n", "$$\n", "\n", "Функция `root_scalar` предоставляет доступ к разным методам поиска корней, таким как `newton`, `bisect`, `secant` и многим другим. Какие-то из этих методов ищут корень внутри отрезка `bracket`, а другие ищут корень, начиная с какого-то начального приближения `x0`. " ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " converged: True\n", " flag: 'converged'\n", " function_calls: 46\n", " iterations: 44\n", " root: 1.0000000000002274\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "from scipy import optimize\n", "from matplotlib import pyplot as plt\n", "\n", "\n", "def f(x):\n", " return x**3 - 1\n", "\n", "def fprime(x):\n", " return 3 * x**2\n", "\n", "\n", "sol = optimize.root_scalar(f, bracket=[-10, 10], method=\"bisect\")\n", "print(sol)\n", "\n", "\n", "x = np.linspace(-3, 3, 100)\n", "plt.plot(x, f(x))\n", "plt.scatter(sol.root, f(sol.root), color=\"r\")\n", "plt.xticks([1])\n", "plt.yticks([0])\n", "plt.xlabel(\"x\")\n", "plt.ylabel(\"y\")\n", "plt.legend([\"f(x)\", \"Корень\"])\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Метод бисекции сошелся за 44 итерации. Проверим метод Ньютона." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " converged: True\n", " flag: 'converged'\n", " function_calls: 22\n", " iterations: 11\n", " root: 1.0\n" ] } ], "source": [ "sol = optimize.root_scalar(f, fprime=fprime, x0=10, method=\"newton\")\n", "print(sol)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Метод Ньютона сошелся за 11 итераций." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Решение системы нелинейных уравнений.\n", "\n", "Функция $F$ предназначена для поиска корней уравнений вида\n", "\n", "$$\n", "F(x) = 0,\n", "$$\n", "\n", "где $x$ и $F(x)$ многомерны, т.е. таких систем \n", "\n", "$$\n", "\\begin{cases}\n", "f_1(x_1, ..., x_n) = 0 \\\\\n", "\\cdots \\\\\n", "f_n(x_1, ..., x_n) = 0\n", "\\end{cases}.\n", "$$\n", "\n", "Рассмотрим поиск корня на примере функции \n", "\n", "$$\n", "\\begin{cases}\n", "x_1 + \\frac{(x_1 - x_2)^3}{2} = 1 \\\\\n", "\\frac{(x_2 - x_1)^3}{2} + x_2 = 1\n", "\\end{cases}.\n", "$$\n", "\n", "Матрица Якоби этого уравнения имеет вид\n", "\n", "$$\n", "\\begin{pmatrix}\n", "1 + \\frac{3}{2}(x_2 - x_1)^2 & \\frac{3}{2}(x_2 - x_1)^2 \\\\\n", "\\frac{3}{2}(x_2 - x_1)^2 & 1 + \\frac{3}{2}(x_2 - x_1)^2\n", "\\end{pmatrix},\n", "$$\n", "\n", "а единственный действительный корень которой\n", "\n", "$$\n", "\\begin{cases}\n", "x_1 = 1 \\\\\n", "x_2 = 1\n", "\\end{cases}.\n", "$$" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " fjac: array([[-0.89914291, 0.43765515],\n", " [-0.43765515, -0.89914291]])\n", " fun: array([-1.11022302e-16, 0.00000000e+00])\n", " message: 'The solution converged.'\n", " nfev: 12\n", " qtf: array([ 1.19565972e-11, -4.12770392e-12])\n", " r: array([-2.16690469, 1.03701789, -1.10605417])\n", " status: 1\n", " success: True\n", " x: array([0.8411639, 0.1588361])\n" ] } ], "source": [ "import numpy as np\n", "from scipy import optimize\n", "from matplotlib import pyplot as plt\n", "from mpl_toolkits.mplot3d import Axes3D\n", "\n", "def f(x):\n", " x = np.array(x)\n", " return np.array([\n", " x[0] + 0.5 * (x[0] - x[1])**3 - 1.0,\n", " 0.5 * (x[1] - x[0])**3 + x[1] - 1.0\n", " ])\n", "\n", "\n", "def jac(x):\n", " return np.array([[1 + 1.5 * (x[0] - x[1])**2,\n", " -1.5 * (x[0] - x[1])**2],\n", " [-1.5 * (x[1] - x[0])**2,\n", " 1 + 1.5 * (x[1] - x[0])**2]])\n", "\n", "\n", "root = optimize.root(f, x0 = [0, 0]) \n", "print(root) " ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " fjac: array([[ 0.89914291, -0.43765515],\n", " [ 0.43765515, 0.89914291]])\n", " fun: array([-1.11022302e-16, 0.00000000e+00])\n", " message: 'The solution converged.'\n", " nfev: 10\n", " njev: 1\n", " qtf: array([-1.19565972e-11, 4.12770392e-12])\n", " r: array([ 2.16690469, -1.03701789, 1.10605417])\n", " status: 1\n", " success: True\n", " x: array([0.8411639, 0.1588361])\n" ] } ], "source": [ "root = optimize.root(f, jac=jac, x0 = [0, 0], method=\"hybr\") \n", "print(root) " ] } ], "metadata": { "interpreter": { "hash": "8617202e12f254480e1fae3258716b685f1a56bcbf234a446366b4fd3345ed22" }, "kernelspec": { "display_name": "Python 3.8.10 64-bit", "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": 2 }