Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Есть три достаточных условия экстремума функции, есть ли пирнципиальная разница когда что использовать?\n",
- "\n",
- "В методе наискорейшего спуска по какому критерии выбираются границы отрезка с минимумом?"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Лабораторная работа №1. Часть I\n",
- "## Методы одномерного поиска экстремума\n",
- "### Вариант 8"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Теоретический экстремум\n",
- "\n",
- "$$f(x) = x^3 - x$$\n",
- "\n",
- "Найдем производную\n",
- "$$f^{'}(x) = 3x^2 - 1$$\n",
- "\n",
- "Нули функции производной\n",
- "$$x_0 = -\\frac{1}{3^{1/2}};x_1 = \\frac{1}{3^{1/2}}$$\n",
- "\n",
- "<p align=\"center\">\n",
- " <img width=300 src=\"./img/lab1_1.png\"/>\n",
- "</p>\n",
- "\n",
- "Искомый минимум \n",
- "$$x_1 = \\frac{1}{3^{1/2}}$$"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Условие Липшица\n",
- "\n",
- "Как было сказано, производная равна\n",
- "$$f^{'}(x) = 3x^2 - 1$$\n",
- "\n",
- "Условие Липшица (ограничение на скорость изменения функции)\n",
- "\n",
- "$$|f(x^{'}) - f(x^{''})| \\leq L|x^{'} - x^{''}|$$\n",
- "\n",
- "Так как производная показывает скорость роста функции, то максимальная скорость равна максимуму по модулю функции производной, в нашем случае график производной это парабола, следовательно достаточно рассмотреть крайние точки. Несложный анализ показывает, что максимум достигается при x=1.\n",
- "\n",
- "Таким образом константа Липшица равна\n",
- "\n",
- "$$L = 2$$"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "import matplotlib.pyplot as plt\n",
- "import numpy as np\n",
- "import pandas as pd\n",
- "%matplotlib inline"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Параметры задачи\n",
- "left_border = 0\n",
- "right_border = 1\n",
- "e = 0.001 # ошибка\n",
- "L = 2\n",
- "theor_x = 1 / 3**(1/2)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[<matplotlib.lines.Line2D at 0x12178a7f0>]"
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "<Figure size 432x288 with 1 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "# Целевая функция\n",
- "def f(x):\n",
- " return x ** 3 - x\n",
- "\n",
- "x = np.arange(left_border, right_border, 0.01)\n",
- "plt.title('Целевая функция')\n",
- "plt.plot(x, f(x))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Метод дихтомии"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [],
- "source": [
- "def dichotomy(f, a, b, e, left_borders, right_borders, x1, x2, f1, f2):\n",
- " delta = e / 3 \n",
- " \n",
- " while True: \n",
- " x1_n = (a + b) / 2 - delta\n",
- " x2_n = (a + b) / 2 + delta\n",
- " f1_n = f(x1_n)\n",
- " f2_n = f(x2_n)\n",
- " \n",
- " left_borders.append(a)\n",
- " right_borders.append(b)\n",
- " x1.append(x1_n)\n",
- " x2.append(x2_n)\n",
- " f1.append(f1_n)\n",
- " f2.append(f2_n)\n",
- " \n",
- " if f1_n <= f2_n:\n",
- " b = x2_n\n",
- " else:\n",
- " a = x1_n\n",
- "\n",
- " if b - a <= e:\n",
- " return (b + a) / 2"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Полученное значение: 0.5774629720052082\n",
- "Теоретическое: 0.5773502691896258\n"
- ]
- }
- ],
- "source": [
- "left_borders = []\n",
- "right_borders = []\n",
- "x1 = []\n",
- "x2 = []\n",
- "f1 = []\n",
- "f2 = []\n",
- "\n",
- "print('Полученное значение:', dichotomy(f, left_border, right_border, e, left_borders, right_borders, x1, x2, f1, f2))\n",
- "print('Теоретическое:', theor_x)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "<div>\n",
- "<style scoped>\n",
- " .dataframe tbody tr th:only-of-type {\n",
- " vertical-align: middle;\n",
- " }\n",
- "\n",
- " .dataframe tbody tr th {\n",
- " vertical-align: top;\n",
- " }\n",
- "\n",
- " .dataframe thead th {\n",
- " text-align: right;\n",
- " }\n",
- "</style>\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>Left border</th>\n",
- " <th>Length ratio</th>\n",
- " <th>Right border</th>\n",
- " <th>f(x1)</th>\n",
- " <th>f(x2)</th>\n",
- " <th>x1</th>\n",
- " <th>x2</th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " <tr>\n",
- " <th>0</th>\n",
- " <td>0.000000</td>\n",
- " <td>NaN</td>\n",
- " <td>1.000000</td>\n",
- " <td>-0.374917</td>\n",
- " <td>-0.375083</td>\n",
- " <td>0.499667</td>\n",
- " <td>0.500333</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>1</th>\n",
- " <td>0.499667</td>\n",
- " <td>1.998668</td>\n",
- " <td>1.000000</td>\n",
- " <td>-0.328468</td>\n",
- " <td>-0.328010</td>\n",
- " <td>0.749500</td>\n",
- " <td>0.750167</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>2</th>\n",
- " <td>0.499667</td>\n",
- " <td>1.997339</td>\n",
- " <td>0.750167</td>\n",
- " <td>-0.380931</td>\n",
- " <td>-0.380816</td>\n",
- " <td>0.624583</td>\n",
- " <td>0.625250</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>3</th>\n",
- " <td>0.499667</td>\n",
- " <td>1.994691</td>\n",
- " <td>0.625250</td>\n",
- " <td>-0.384502</td>\n",
- " <td>-0.384536</td>\n",
- " <td>0.562125</td>\n",
- " <td>0.562792</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>4</th>\n",
- " <td>0.562125</td>\n",
- " <td>1.989439</td>\n",
- " <td>0.625250</td>\n",
- " <td>-0.384452</td>\n",
- " <td>-0.384414</td>\n",
- " <td>0.593354</td>\n",
- " <td>0.594021</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>5</th>\n",
- " <td>0.562125</td>\n",
- " <td>1.979099</td>\n",
- " <td>0.594021</td>\n",
- " <td>-0.384900</td>\n",
- " <td>-0.384898</td>\n",
- " <td>0.577740</td>\n",
- " <td>0.578406</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>6</th>\n",
- " <td>0.562125</td>\n",
- " <td>1.959053</td>\n",
- " <td>0.578406</td>\n",
- " <td>-0.384805</td>\n",
- " <td>-0.384822</td>\n",
- " <td>0.569932</td>\n",
- " <td>0.570599</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>7</th>\n",
- " <td>0.569932</td>\n",
- " <td>1.921328</td>\n",
- " <td>0.578406</td>\n",
- " <td>-0.384879</td>\n",
- " <td>-0.384886</td>\n",
- " <td>0.573836</td>\n",
- " <td>0.574503</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>8</th>\n",
- " <td>0.573836</td>\n",
- " <td>1.854131</td>\n",
- " <td>0.578406</td>\n",
- " <td>-0.384896</td>\n",
- " <td>-0.384899</td>\n",
- " <td>0.575788</td>\n",
- " <td>0.576454</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>9</th>\n",
- " <td>0.575788</td>\n",
- " <td>1.745400</td>\n",
- " <td>0.578406</td>\n",
- " <td>-0.384900</td>\n",
- " <td>-0.384900</td>\n",
- " <td>0.576764</td>\n",
- " <td>0.577430</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>10</th>\n",
- " <td>0.576764</td>\n",
- " <td>1.594134</td>\n",
- " <td>0.578406</td>\n",
- " <td>-0.384900</td>\n",
- " <td>-0.384900</td>\n",
- " <td>0.577252</td>\n",
- " <td>0.577918</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>11</th>\n",
- " <td>0.576764</td>\n",
- " <td>1.422611</td>\n",
- " <td>0.577918</td>\n",
- " <td>-0.384900</td>\n",
- " <td>-0.384900</td>\n",
- " <td>0.577008</td>\n",
- " <td>0.577674</td>\n",
- " </tr>\n",
- " </tbody>\n",
- "</table>\n",
- "</div>"
- ],
- "text/plain": [
- " Left border Length ratio Right border f(x1) f(x2) x1 \\\n",
- "0 0.000000 NaN 1.000000 -0.374917 -0.375083 0.499667 \n",
- "1 0.499667 1.998668 1.000000 -0.328468 -0.328010 0.749500 \n",
- "2 0.499667 1.997339 0.750167 -0.380931 -0.380816 0.624583 \n",
- "3 0.499667 1.994691 0.625250 -0.384502 -0.384536 0.562125 \n",
- "4 0.562125 1.989439 0.625250 -0.384452 -0.384414 0.593354 \n",
- "5 0.562125 1.979099 0.594021 -0.384900 -0.384898 0.577740 \n",
- "6 0.562125 1.959053 0.578406 -0.384805 -0.384822 0.569932 \n",
- "7 0.569932 1.921328 0.578406 -0.384879 -0.384886 0.573836 \n",
- "8 0.573836 1.854131 0.578406 -0.384896 -0.384899 0.575788 \n",
- "9 0.575788 1.745400 0.578406 -0.384900 -0.384900 0.576764 \n",
- "10 0.576764 1.594134 0.578406 -0.384900 -0.384900 0.577252 \n",
- "11 0.576764 1.422611 0.577918 -0.384900 -0.384900 0.577008 \n",
- "\n",
- " x2 \n",
- "0 0.500333 \n",
- "1 0.750167 \n",
- "2 0.625250 \n",
- "3 0.562792 \n",
- "4 0.594021 \n",
- "5 0.578406 \n",
- "6 0.570599 \n",
- "7 0.574503 \n",
- "8 0.576454 \n",
- "9 0.577430 \n",
- "10 0.577918 \n",
- "11 0.577674 "
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "lengths_ratio = [(right_borders[i - 1] - left_borders[i - 1]) / (right_borders[i] - left_borders[i]) for i in range(1, len(left_borders))]\n",
- "lengths_ratio.insert(0, None)\n",
- "\n",
- "data = pd.DataFrame({\n",
- " 'Left border' : left_borders,\n",
- " 'Right border' : right_borders,\n",
- " 'x1': x1,\n",
- " 'x2': x2,\n",
- " 'f(x1)' : f1,\n",
- " 'f(x2)' : f2,\n",
- " 'Length ratio' : lengths_ratio\n",
- "})\n",
- "data\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Колличество итераций: 12\n",
- "Колличество вычислений функции: 24\n"
- ]
- }
- ],
- "source": [
- "print('Колличество итераций:', data.shape[0])\n",
- "print('Колличество вычислений функции:', data.shape[0] * 2)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[<matplotlib.lines.Line2D at 0x121a7e630>]"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "<Figure size 432x288 with 1 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "precisions = np.arange(0.0001, 0.05, 0.005)\n",
- "counts = []\n",
- "\n",
- "for precision in precisions:\n",
- " left_borders = []\n",
- " right_borders = []\n",
- " x1 = []\n",
- " x2 = []\n",
- " f1 = []\n",
- " f2 = []\n",
- " dichotomy(f, left_border, right_border, precision, left_borders, right_borders, x1, x2, f1, f2)\n",
- " counts.append(len(left_borders) * 2)\n",
- " \n",
- "plt.plot(np.log(precisions), counts)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Метод золотого сечения"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [],
- "source": [
- "from scipy.constants import golden\n",
- "\n",
- "def golden_ratio(f, a, b, e, left_borders, right_borders, x1, x2, f1, f2):\n",
- " t = golden - 1\n",
- " x1_n = a + (1 - t) * (b - a)\n",
- " x2_n = a + t * (b - a)\n",
- " f1_n = f(x1_n)\n",
- " f2_n = f(x2_n)\n",
- " e_n = (b - a) / 2\n",
- " \n",
- " while True: \n",
- " left_borders.append(a)\n",
- " right_borders.append(b)\n",
- " x1.append(x1_n)\n",
- " x2.append(x2_n)\n",
- " f1.append(f1_n)\n",
- " f2.append(f2_n)\n",
- " \n",
- " if e_n <= e:\n",
- " return (b + a) / 2\n",
- " \n",
- " if f1_n <= f2_n:\n",
- " b = x2_n\n",
- " x2_n = x1_n\n",
- " f2_n = f1_n\n",
- " x1_n = a + (1 - t) * (b - a)\n",
- " f1_n = f(x1_n)\n",
- " else:\n",
- " a = x1_n\n",
- " x1_n = x2_n\n",
- " f1_n = f2_n\n",
- " x2_n = a + t * (b - a)\n",
- " f2_n = f(x2_n)\n",
- " e_n = t * e_n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0.5776074468978706\n",
- "0.5773502691896258\n"
- ]
- }
- ],
- "source": [
- "left_borders = []\n",
- "right_borders = []\n",
- "x1 = []\n",
- "x2 = []\n",
- "f1 = []\n",
- "f2 = []\n",
- "\n",
- "print(golden_ratio(f, left_border, right_border, e, left_borders, right_borders, x1, x2, f1, f2))\n",
- "print(theor_x)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "<div>\n",
- "<style scoped>\n",
- " .dataframe tbody tr th:only-of-type {\n",
- " vertical-align: middle;\n",
- " }\n",
- "\n",
- " .dataframe tbody tr th {\n",
- " vertical-align: top;\n",
- " }\n",
- "\n",
- " .dataframe thead th {\n",
- " text-align: right;\n",
- " }\n",
- "</style>\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>Left border</th>\n",
- " <th>Length ratio</th>\n",
- " <th>Right border</th>\n",
- " <th>f(x1)</th>\n",
- " <th>f(x2)</th>\n",
- " <th>x1</th>\n",
- " <th>x2</th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " <tr>\n",
- " <th>0</th>\n",
- " <td>0.000000</td>\n",
- " <td>NaN</td>\n",
- " <td>1.000000</td>\n",
- " <td>-0.326238</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.381966</td>\n",
- " <td>0.618034</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>1</th>\n",
- " <td>0.381966</td>\n",
- " <td>1.618034</td>\n",
- " <td>1.000000</td>\n",
- " <td>-0.381966</td>\n",
- " <td>-0.318107</td>\n",
- " <td>0.618034</td>\n",
- " <td>0.763932</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>2</th>\n",
- " <td>0.381966</td>\n",
- " <td>1.618034</td>\n",
- " <td>0.763932</td>\n",
- " <td>-0.380780</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.527864</td>\n",
- " <td>0.618034</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>3</th>\n",
- " <td>0.527864</td>\n",
- " <td>1.618034</td>\n",
- " <td>0.763932</td>\n",
- " <td>-0.381966</td>\n",
- " <td>-0.367904</td>\n",
- " <td>0.618034</td>\n",
- " <td>0.673762</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>4</th>\n",
- " <td>0.527864</td>\n",
- " <td>1.618034</td>\n",
- " <td>0.673762</td>\n",
- " <td>-0.384832</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.583592</td>\n",
- " <td>0.618034</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>5</th>\n",
- " <td>0.527864</td>\n",
- " <td>1.618034</td>\n",
- " <td>0.618034</td>\n",
- " <td>-0.384512</td>\n",
- " <td>-0.384832</td>\n",
- " <td>0.562306</td>\n",
- " <td>0.583592</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>6</th>\n",
- " <td>0.562306</td>\n",
- " <td>1.618034</td>\n",
- " <td>0.618034</td>\n",
- " <td>-0.384832</td>\n",
- " <td>-0.384241</td>\n",
- " <td>0.583592</td>\n",
- " <td>0.596748</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>7</th>\n",
- " <td>0.562306</td>\n",
- " <td>1.618034</td>\n",
- " <td>0.596748</td>\n",
- " <td>-0.384894</td>\n",
- " <td>-0.384832</td>\n",
- " <td>0.575462</td>\n",
- " <td>0.583592</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>8</th>\n",
- " <td>0.562306</td>\n",
- " <td>1.618034</td>\n",
- " <td>0.583592</td>\n",
- " <td>-0.384818</td>\n",
- " <td>-0.384894</td>\n",
- " <td>0.570437</td>\n",
- " <td>0.575462</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>9</th>\n",
- " <td>0.570437</td>\n",
- " <td>1.618034</td>\n",
- " <td>0.583592</td>\n",
- " <td>-0.384894</td>\n",
- " <td>-0.384898</td>\n",
- " <td>0.575462</td>\n",
- " <td>0.578567</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>10</th>\n",
- " <td>0.575462</td>\n",
- " <td>1.618034</td>\n",
- " <td>0.583592</td>\n",
- " <td>-0.384898</td>\n",
- " <td>-0.384883</td>\n",
- " <td>0.578567</td>\n",
- " <td>0.580487</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>11</th>\n",
- " <td>0.575462</td>\n",
- " <td>1.618034</td>\n",
- " <td>0.580487</td>\n",
- " <td>-0.384900</td>\n",
- " <td>-0.384898</td>\n",
- " <td>0.577381</td>\n",
- " <td>0.578567</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>12</th>\n",
- " <td>0.575462</td>\n",
- " <td>1.618034</td>\n",
- " <td>0.578567</td>\n",
- " <td>-0.384899</td>\n",
- " <td>-0.384900</td>\n",
- " <td>0.576648</td>\n",
- " <td>0.577381</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>13</th>\n",
- " <td>0.576648</td>\n",
- " <td>1.618034</td>\n",
- " <td>0.578567</td>\n",
- " <td>-0.384900</td>\n",
- " <td>-0.384900</td>\n",
- " <td>0.577381</td>\n",
- " <td>0.577834</td>\n",
- " </tr>\n",
- " </tbody>\n",
- "</table>\n",
- "</div>"
- ],
- "text/plain": [
- " Left border Length ratio Right border f(x1) f(x2) x1 \\\n",
- "0 0.000000 NaN 1.000000 -0.326238 -0.381966 0.381966 \n",
- "1 0.381966 1.618034 1.000000 -0.381966 -0.318107 0.618034 \n",
- "2 0.381966 1.618034 0.763932 -0.380780 -0.381966 0.527864 \n",
- "3 0.527864 1.618034 0.763932 -0.381966 -0.367904 0.618034 \n",
- "4 0.527864 1.618034 0.673762 -0.384832 -0.381966 0.583592 \n",
- "5 0.527864 1.618034 0.618034 -0.384512 -0.384832 0.562306 \n",
- "6 0.562306 1.618034 0.618034 -0.384832 -0.384241 0.583592 \n",
- "7 0.562306 1.618034 0.596748 -0.384894 -0.384832 0.575462 \n",
- "8 0.562306 1.618034 0.583592 -0.384818 -0.384894 0.570437 \n",
- "9 0.570437 1.618034 0.583592 -0.384894 -0.384898 0.575462 \n",
- "10 0.575462 1.618034 0.583592 -0.384898 -0.384883 0.578567 \n",
- "11 0.575462 1.618034 0.580487 -0.384900 -0.384898 0.577381 \n",
- "12 0.575462 1.618034 0.578567 -0.384899 -0.384900 0.576648 \n",
- "13 0.576648 1.618034 0.578567 -0.384900 -0.384900 0.577381 \n",
- "\n",
- " x2 \n",
- "0 0.618034 \n",
- "1 0.763932 \n",
- "2 0.618034 \n",
- "3 0.673762 \n",
- "4 0.618034 \n",
- "5 0.583592 \n",
- "6 0.596748 \n",
- "7 0.583592 \n",
- "8 0.575462 \n",
- "9 0.578567 \n",
- "10 0.580487 \n",
- "11 0.578567 \n",
- "12 0.577381 \n",
- "13 0.577834 "
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "lengths_ratio = [(right_borders[i - 1] - left_borders[i - 1]) / (right_borders[i] - left_borders[i]) for i in range(1, len(left_borders))]\n",
- "lengths_ratio.insert(0, None)\n",
- "\n",
- "data = pd.DataFrame({\n",
- " 'Left border' : left_borders,\n",
- " 'Right border' : right_borders,\n",
- " 'x1': x1,\n",
- " 'x2': x2,\n",
- " 'f(x1)' : f1,\n",
- " 'f(x2)' : f2,\n",
- " 'Length ratio' : lengths_ratio\n",
- "})\n",
- "data"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Колличество итераций: 14\n",
- "Колличество вычислений функции: 15\n"
- ]
- }
- ],
- "source": [
- "print('Колличество итераций:', data.shape[0])\n",
- "print('Колличество вычислений функции:', data.shape[0] + 1)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[<matplotlib.lines.Line2D at 0x121cd0dd8>]"
- ]
- },
- "execution_count": 13,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "<Figure size 432x288 with 1 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "precisions = np.arange(0.0001, 0.05, 0.005)\n",
- "counts = []\n",
- "\n",
- "for precision in precisions:\n",
- " left_borders = []\n",
- " right_borders = []\n",
- " x1 = []\n",
- " x2 = []\n",
- " f1 = []\n",
- " f2 = []\n",
- " golden_ratio(f, left_border, right_border, precision, left_borders, right_borders, x1, x2, f1, f2)\n",
- " counts.append(len(left_borders) + 1)\n",
- " \n",
- "plt.plot(np.log(precisions), counts)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Метод Фибоначчи"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [],
- "source": [
- "import math\n",
- "\n",
- "def fibonacci_number(n):\n",
- " return int((((1 + math.sqrt(5))/2)**n - ((1 - math.sqrt(5))/2)**n )/ math.sqrt(5))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [],
- "source": [
- "def fibbonacci_method (f, xmin, xmax, e, left_borders, right_borders, x1, x2, f1, f2):\n",
- " n_2_fib_num = (xmax - xmin) / e\n",
- " \n",
- " n_iter = 1\n",
- " while fibonacci_number(n_iter + 2) < n_2_fib_num:\n",
- " n_iter += 1\n",
- " \n",
- " if n_iter == 1:\n",
- " return (xmax - xmin) / 2\n",
- " \n",
- " a = [xmin]\n",
- " b = [xmax]\n",
- " \n",
- " tmp_l = [a[0] + (b[0] - a[0]) * fibonacci_number(n_iter - 2)/fibonacci_number(n_iter)]\n",
- " tmp_r = [a[0] + (b[0] - a[0]) * fibonacci_number(n_iter - 1)/fibonacci_number(n_iter)]\n",
- " \n",
- " i = 1\n",
- " \n",
- " while i <= n_iter-1:\n",
- " f_tmp_l = f(tmp_l[i-1])\n",
- " f_tmp_r = f(tmp_r[i-1])\n",
- " \n",
- " f1.append(f_tmp_l)\n",
- " f2.append(f_tmp_r)\n",
- " \n",
- " if f_tmp_l > f_tmp_r:\n",
- " a.append(tmp_l[i-1])\n",
- " b.append(b[i-1]) \n",
- " tmp_l.append(tmp_r[i-1])\n",
- " tmp_r.append(a[i] + (b[i] - a[i]) * fibonacci_number(n_iter - i - 1)/fibonacci_number(n_iter - i))\n",
- " else:\n",
- " a.append(a[i-1])\n",
- " b.append(tmp_r[i-1])\n",
- " tmp_r.append(tmp_l[i-1])\n",
- " tmp_l.append(a[i] + (b[i] - a[i]) * fibonacci_number(n_iter - i - 2)/fibonacci_number(n_iter - i))\n",
- " \n",
- " i += 1\n",
- " \n",
- " tmp_l.append(tmp_l[n_iter-1])\n",
- " tmp_r.append(tmp_l[n_iter] + e)\n",
- " if f(tmp_l[i]) == f(tmp_r[i]):\n",
- " a.append(tmp_l[n_iter])\n",
- " b.append(tmp_r[n_iter-1])\n",
- " else:\n",
- " a.append(tmp_l[n_iter-1])\n",
- " b.append(tmp_r[n_iter])\n",
- "\n",
- " left_borders.append(a)\n",
- " right_borders.append(b)\n",
- " x1.append(tmp_l)\n",
- " x2.append(tmp_r)\n",
- " \n",
- " return (a[n_iter] + b[n_iter]) / 2"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0.577549180327869\n"
- ]
- }
- ],
- "source": [
- "left_borders = []\n",
- "right_borders = []\n",
- "x1 = []\n",
- "x2 = []\n",
- "f1 = []\n",
- "f2 = []\n",
- "\n",
- "print(fibbonacci_method(f, left_border, right_border, e, left_borders, right_borders, x1, x2, f1, f2))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "<div>\n",
- "<style scoped>\n",
- " .dataframe tbody tr th:only-of-type {\n",
- " vertical-align: middle;\n",
- " }\n",
- "\n",
- " .dataframe tbody tr th {\n",
- " vertical-align: top;\n",
- " }\n",
- "\n",
- " .dataframe thead th {\n",
- " text-align: right;\n",
- " }\n",
- "</style>\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>Left border</th>\n",
- " <th>Length ratio</th>\n",
- " <th>Right border</th>\n",
- " <th>f(x1)</th>\n",
- " <th>f(x2)</th>\n",
- " <th>x1</th>\n",
- " <th>x2</th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " <tr>\n",
- " <th>0</th>\n",
- " <td>0.000000</td>\n",
- " <td>NaN</td>\n",
- " <td>1.000000</td>\n",
- " <td>-0.326239</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.381967</td>\n",
- " <td>0.618033</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>1</th>\n",
- " <td>0.381967</td>\n",
- " <td>1.618037</td>\n",
- " <td>1.000000</td>\n",
- " <td>-0.326239</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.618033</td>\n",
- " <td>0.763934</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>2</th>\n",
- " <td>0.381967</td>\n",
- " <td>1.618026</td>\n",
- " <td>0.763934</td>\n",
- " <td>-0.326239</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.527869</td>\n",
- " <td>0.618033</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>3</th>\n",
- " <td>0.527869</td>\n",
- " <td>1.618056</td>\n",
- " <td>0.763934</td>\n",
- " <td>-0.326239</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.618033</td>\n",
- " <td>0.673770</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>4</th>\n",
- " <td>0.527869</td>\n",
- " <td>1.617978</td>\n",
- " <td>0.673770</td>\n",
- " <td>-0.326239</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.583607</td>\n",
- " <td>0.618033</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>5</th>\n",
- " <td>0.527869</td>\n",
- " <td>1.618182</td>\n",
- " <td>0.618033</td>\n",
- " <td>-0.326239</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.562295</td>\n",
- " <td>0.583607</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>6</th>\n",
- " <td>0.562295</td>\n",
- " <td>1.617647</td>\n",
- " <td>0.618033</td>\n",
- " <td>-0.326239</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.583607</td>\n",
- " <td>0.596721</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>7</th>\n",
- " <td>0.562295</td>\n",
- " <td>1.619048</td>\n",
- " <td>0.596721</td>\n",
- " <td>-0.326239</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.575410</td>\n",
- " <td>0.583607</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>8</th>\n",
- " <td>0.562295</td>\n",
- " <td>1.615385</td>\n",
- " <td>0.583607</td>\n",
- " <td>-0.326239</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.570492</td>\n",
- " <td>0.575410</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>9</th>\n",
- " <td>0.570492</td>\n",
- " <td>1.625000</td>\n",
- " <td>0.583607</td>\n",
- " <td>-0.326239</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.575410</td>\n",
- " <td>0.578689</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>10</th>\n",
- " <td>0.575410</td>\n",
- " <td>1.600000</td>\n",
- " <td>0.583607</td>\n",
- " <td>-0.326239</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.578689</td>\n",
- " <td>0.580328</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>11</th>\n",
- " <td>0.575410</td>\n",
- " <td>1.666667</td>\n",
- " <td>0.580328</td>\n",
- " <td>-0.326239</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.577049</td>\n",
- " <td>0.578689</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>12</th>\n",
- " <td>0.575410</td>\n",
- " <td>1.500000</td>\n",
- " <td>0.578689</td>\n",
- " <td>-0.326239</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.577049</td>\n",
- " <td>0.577049</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>13</th>\n",
- " <td>0.575410</td>\n",
- " <td>2.000000</td>\n",
- " <td>0.577049</td>\n",
- " <td>-0.326239</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.575410</td>\n",
- " <td>0.577049</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>14</th>\n",
- " <td>0.575410</td>\n",
- " <td>1.000000</td>\n",
- " <td>0.577049</td>\n",
- " <td>-0.326239</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.577049</td>\n",
- " <td>0.575410</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>15</th>\n",
- " <td>0.577049</td>\n",
- " <td>1.639344</td>\n",
- " <td>0.578049</td>\n",
- " <td>-0.326239</td>\n",
- " <td>-0.381966</td>\n",
- " <td>0.577049</td>\n",
- " <td>0.578049</td>\n",
- " </tr>\n",
- " </tbody>\n",
- "</table>\n",
- "</div>"
- ],
- "text/plain": [
- " Left border Length ratio Right border f(x1) f(x2) x1 \\\n",
- "0 0.000000 NaN 1.000000 -0.326239 -0.381966 0.381967 \n",
- "1 0.381967 1.618037 1.000000 -0.326239 -0.381966 0.618033 \n",
- "2 0.381967 1.618026 0.763934 -0.326239 -0.381966 0.527869 \n",
- "3 0.527869 1.618056 0.763934 -0.326239 -0.381966 0.618033 \n",
- "4 0.527869 1.617978 0.673770 -0.326239 -0.381966 0.583607 \n",
- "5 0.527869 1.618182 0.618033 -0.326239 -0.381966 0.562295 \n",
- "6 0.562295 1.617647 0.618033 -0.326239 -0.381966 0.583607 \n",
- "7 0.562295 1.619048 0.596721 -0.326239 -0.381966 0.575410 \n",
- "8 0.562295 1.615385 0.583607 -0.326239 -0.381966 0.570492 \n",
- "9 0.570492 1.625000 0.583607 -0.326239 -0.381966 0.575410 \n",
- "10 0.575410 1.600000 0.583607 -0.326239 -0.381966 0.578689 \n",
- "11 0.575410 1.666667 0.580328 -0.326239 -0.381966 0.577049 \n",
- "12 0.575410 1.500000 0.578689 -0.326239 -0.381966 0.577049 \n",
- "13 0.575410 2.000000 0.577049 -0.326239 -0.381966 0.575410 \n",
- "14 0.575410 1.000000 0.577049 -0.326239 -0.381966 0.577049 \n",
- "15 0.577049 1.639344 0.578049 -0.326239 -0.381966 0.577049 \n",
- "\n",
- " x2 \n",
- "0 0.618033 \n",
- "1 0.763934 \n",
- "2 0.618033 \n",
- "3 0.673770 \n",
- "4 0.618033 \n",
- "5 0.583607 \n",
- "6 0.596721 \n",
- "7 0.583607 \n",
- "8 0.575410 \n",
- "9 0.578689 \n",
- "10 0.580328 \n",
- "11 0.578689 \n",
- "12 0.577049 \n",
- "13 0.577049 \n",
- "14 0.575410 \n",
- "15 0.578049 "
- ]
- },
- "execution_count": 17,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "lengths_ratio = [(right_borders[0][i - 1] - left_borders[0][i - 1]) / (right_borders[0][i] - left_borders[0][i]) for i in range(1, len(left_borders[0]))]\n",
- "lengths_ratio.insert(0, None)\n",
- "\n",
- "data = pd.DataFrame({\n",
- " 'Left border' : left_borders[0],\n",
- " 'Right border' : right_borders[0],\n",
- " 'x1': x1[0],\n",
- " 'x2': x2[0],\n",
- " 'f(x1)' : f1[0],\n",
- " 'f(x2)' : f2[0],\n",
- " 'Length ratio' : lengths_ratio\n",
- "})\n",
- "data"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Поиск минимума функции на прямой"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "[0.20469999999999997, 0.8190999999999999]"
- ]
- },
- "execution_count": 18,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "def find_on_straight(f, x0, sigma = 0.0001):\n",
- " if f(x0) > f(x0 + sigma):\n",
- " x = x0 + sigma\n",
- " h = sigma\n",
- " else:\n",
- " x = x0 - sigma\n",
- " h = -sigma\n",
- " while True: \n",
- " h *= 2\n",
- " x_next = x + h\n",
- " \n",
- " if f(x) > f(x_next):\n",
- " x = x_next\n",
- " else:\n",
- " return [x - h / 2, x_next]\n",
- " \n",
- "find_on_straight(f, 0)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Часть II\n",
- "## Методы многомерного поиска экстремума. Методы первого порядка: метод наискорейшего спуска\n",
- "### Вариант 5"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Найдем частные производные функции\n",
- "\n",
- "$$f(x_1, x_2) = (1.5 - x_1(1 - x_2))^2 + (2.25 - x_1(1 - x_2^2))^2 + (2.625 - x_1(1 - x_2^3))^2$$\n",
- "\n",
- "$$f_{x_1}^{'}(x_1, x_2) = 2(1.5 - x_1(1 - x_2))(x_2 - 1) + 2(2.25 - x_1(1 - x_2^2))(x_2^2 - 1) + 2(2.625 - x_1(1 - x_2^3))(x_2^3 - 1)$$\n",
- "\n",
- "$$f_{x_2}^{'}(x_1, x_2) = 2(1.5 - x_1(1 - x_2))x_1 + 2(2.25 - x_1(1 - x_2^2))2x_1x_2 + 2(2.625 - x_1(1 - x_2^3))3x_2^2x_1$$"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "metadata": {},
- "outputs": [],
- "source": [
- "def f(x):\n",
- " return (1.5 - x[0] * (1 - x[1]))**2 + (2.25 - x[0] * (1 - x[1]**2))**2 + (2.625 - x[0] * (1 - x[1]**3))**2"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Аналитическое вычисление градиента"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {},
- "outputs": [],
- "source": [
- "def theory_gradient(x1, x2):\n",
- " derivative_x1 = 2 * (1.5 - x1 * (1 - x2)) * (x2 - 1) + 2 * (2.25 - x1 * (1 - x2**2)) * (x2**2 - 1) + 2 * (2.625 - x1 * (1 - x2**3)) * (x2**3 - 1)\n",
- " derivative_x2 = 2 * (1.5 - x1 * (1 - x2)) * x1 + 2 * (2.25 - x1 * (1 - x2**2)) * 2 * x1 * x2 + 2 * (2.625 - x1 *(1 - x2**3)) * 3 * x2**2 * x1\n",
- " \n",
- " return np.array([derivative_x1, derivative_x2])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Численное вычисление градиента"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Метод двусторонней разности\n",
- "def numerical_gradient(x1, x2, dx = 1e-6):\n",
- " derivative_x1 = (f([x1 + dx, x2]) - f([x1 - dx, x2])) / (2*dx)\n",
- " derivative_x2 = (f([x1, x2 + dx]) - f([x1, x2 - dx])) / (2*dx)\n",
- " \n",
- " return np.array([derivative_x1, derivative_x2])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Реализация\n",
- "\n",
- "Метод одномерного поиска для величины шага"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "metadata": {},
- "outputs": [],
- "source": [
- "from scipy.constants import golden\n",
- "\n",
- "def golden_ratio(f, a, b, e, grad, x):\n",
- " t = golden - 1\n",
- " x1_n = a + (1 - t) * (b - a)\n",
- " x2_n = a + t * (b - a)\n",
- " f1_n = f(x - x1_n * grad)\n",
- " f2_n = f(x - x2_n * grad)\n",
- " e_n = (b - a) / 2\n",
- " \n",
- " while True: \n",
- " if e_n <= e:\n",
- " return (b + a) / 2\n",
- " \n",
- " if f1_n <= f2_n:\n",
- " b = x2_n\n",
- " x2_n = x1_n\n",
- " f2_n = f1_n\n",
- " x1_n = a + (1 - t) * (b - a)\n",
- " f1_n = f(x - x1_n * grad)\n",
- " else:\n",
- " a = x1_n\n",
- " x1_n = x2_n\n",
- " f1_n = f2_n\n",
- " x2_n = a + t * (b - a)\n",
- " f2_n = f(x - x2_n * grad)\n",
- " e_n = t * e_n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 23,
- "metadata": {},
- "outputs": [],
- "source": [
- "def find_on_straight(f, x0, grad, x_, sigma = 0.0001):\n",
- " if f(x_ - x0 * grad) > f(x_ - (x0 + sigma) * grad):\n",
- " x = x0 + sigma\n",
- " h = sigma\n",
- " else:\n",
- " x = x0 - sigma\n",
- " h = -sigma\n",
- " while True: \n",
- " h *= 2\n",
- " x_next = x + h\n",
- "\n",
- " if f(x_ - x * grad) > f(x_ - x_next * grad):\n",
- " x = x_next\n",
- " else:\n",
- " return [x - h / 2, x_next]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Алгоритм наискорейшего спуска"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 81,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(array([3.00288908, 0.50071582]), 1696)"
- ]
- },
- "execution_count": 81,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from numpy.linalg import norm\n",
- "\n",
- "def gradient_descent(f, gradient, x, e = 0.001, limit = 5000):\n",
- " nit = 0\n",
- " x_min = x.copy()\n",
- " \n",
- " for i in range(0, 5):\n",
- " j = 0\n",
- " x = x + np.array([30 * i * (-1)**i] * len(x))\n",
- " grad = gradient(x[0], x[1])\n",
- " grad = grad / norm(grad)\n",
- " borders = find_on_straight(f, 0, grad, x)\n",
- " h = golden_ratio(f, borders[0], borders[1], e = 0.0000001, grad = grad, x = x)\n",
- " \n",
- " while norm(gradient(x[0], x[1])) > e and j < limit:\n",
- " j += 1\n",
- " borders = find_on_straight(f, 0, grad, x)\n",
- " h = golden_ratio(f, borders[0], borders[1], e = 0.0000001, grad = grad, x = x)\n",
- " x = x - h * grad\n",
- " grad = gradient(x[0], x[1])\n",
- " grad = grad / norm(grad)\n",
- " nit += 1\n",
- " \n",
- " if(f(x_min) > f(x)):\n",
- " x_min = x.copy()\n",
- " \n",
- " return (x_min, nit)\n",
- "\n",
- "gradient_descent(f, theory_gradient, [100, 100], e = 0.001)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Анализ сходимости"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 25,
- "metadata": {},
- "outputs": [],
- "source": [
- "count = np.array([0])\n",
- "\n",
- "def wrap_f(x):\n",
- " count[0] += 1\n",
- " return f(x)\n",
- "\n",
- "def wrap_theory_gradient(x1, x2):\n",
- " count[0] += 2\n",
- " return theory_gradient(x1, x2)\n",
- "\n",
- "def wrap_numerical_gradient(x1, x2):\n",
- " count[0] += 2\n",
- " return numerical_gradient(x1, x2)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 86,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "<div>\n",
- "<style scoped>\n",
- " .dataframe tbody tr th:only-of-type {\n",
- " vertical-align: middle;\n",
- " }\n",
- "\n",
- " .dataframe tbody tr th {\n",
- " vertical-align: top;\n",
- " }\n",
- "\n",
- " .dataframe thead th {\n",
- " text-align: right;\n",
- " }\n",
- "</style>\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>Значение x1</th>\n",
- " <th>Значение x2</th>\n",
- " <th>Колличество вычислений</th>\n",
- " <th>Колличество итераций</th>\n",
- " <th>Точность</th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " <tr>\n",
- " <th>0</th>\n",
- " <td>2.997108</td>\n",
- " <td>0.499282</td>\n",
- " <td>269923</td>\n",
- " <td>15127</td>\n",
- " <td>0.001</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>1</th>\n",
- " <td>2.993840</td>\n",
- " <td>0.498468</td>\n",
- " <td>201439</td>\n",
- " <td>8591</td>\n",
- " <td>0.002</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>2</th>\n",
- " <td>3.007099</td>\n",
- " <td>0.501725</td>\n",
- " <td>76955</td>\n",
- " <td>2628</td>\n",
- " <td>0.003</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>3</th>\n",
- " <td>3.009583</td>\n",
- " <td>0.502327</td>\n",
- " <td>141519</td>\n",
- " <td>4371</td>\n",
- " <td>0.004</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>4</th>\n",
- " <td>2.988893</td>\n",
- " <td>0.497287</td>\n",
- " <td>144254</td>\n",
- " <td>5375</td>\n",
- " <td>0.005</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>5</th>\n",
- " <td>2.983587</td>\n",
- " <td>0.495902</td>\n",
- " <td>3485</td>\n",
- " <td>69</td>\n",
- " <td>0.006</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>6</th>\n",
- " <td>2.979580</td>\n",
- " <td>0.494894</td>\n",
- " <td>3269</td>\n",
- " <td>60</td>\n",
- " <td>0.007</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>7</th>\n",
- " <td>2.977210</td>\n",
- " <td>0.494295</td>\n",
- " <td>3197</td>\n",
- " <td>58</td>\n",
- " <td>0.008</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>8</th>\n",
- " <td>2.974556</td>\n",
- " <td>0.493624</td>\n",
- " <td>3125</td>\n",
- " <td>56</td>\n",
- " <td>0.009</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>9</th>\n",
- " <td>2.971582</td>\n",
- " <td>0.492870</td>\n",
- " <td>3053</td>\n",
- " <td>54</td>\n",
- " <td>0.010</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>10</th>\n",
- " <td>2.968247</td>\n",
- " <td>0.492022</td>\n",
- " <td>2981</td>\n",
- " <td>52</td>\n",
- " <td>0.011</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>11</th>\n",
- " <td>2.968247</td>\n",
- " <td>0.492022</td>\n",
- " <td>2981</td>\n",
- " <td>52</td>\n",
- " <td>0.012</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>12</th>\n",
- " <td>2.964509</td>\n",
- " <td>0.491069</td>\n",
- " <td>2909</td>\n",
- " <td>50</td>\n",
- " <td>0.013</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>13</th>\n",
- " <td>2.960306</td>\n",
- " <td>0.489994</td>\n",
- " <td>2837</td>\n",
- " <td>48</td>\n",
- " <td>0.014</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>14</th>\n",
- " <td>2.960306</td>\n",
- " <td>0.489994</td>\n",
- " <td>2837</td>\n",
- " <td>48</td>\n",
- " <td>0.015</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>15</th>\n",
- " <td>2.955583</td>\n",
- " <td>0.488782</td>\n",
- " <td>2758</td>\n",
- " <td>46</td>\n",
- " <td>0.016</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>16</th>\n",
- " <td>2.955583</td>\n",
- " <td>0.488782</td>\n",
- " <td>2758</td>\n",
- " <td>46</td>\n",
- " <td>0.017</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>17</th>\n",
- " <td>2.950264</td>\n",
- " <td>0.487411</td>\n",
- " <td>2679</td>\n",
- " <td>44</td>\n",
- " <td>0.018</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>18</th>\n",
- " <td>2.950264</td>\n",
- " <td>0.487411</td>\n",
- " <td>2679</td>\n",
- " <td>44</td>\n",
- " <td>0.019</td>\n",
- " </tr>\n",
- " </tbody>\n",
- "</table>\n",
- "</div>"
- ],
- "text/plain": [
- " Значение x1 Значение x2 Колличество вычислений Колличество итераций \\\n",
- "0 2.997108 0.499282 269923 15127 \n",
- "1 2.993840 0.498468 201439 8591 \n",
- "2 3.007099 0.501725 76955 2628 \n",
- "3 3.009583 0.502327 141519 4371 \n",
- "4 2.988893 0.497287 144254 5375 \n",
- "5 2.983587 0.495902 3485 69 \n",
- "6 2.979580 0.494894 3269 60 \n",
- "7 2.977210 0.494295 3197 58 \n",
- "8 2.974556 0.493624 3125 56 \n",
- "9 2.971582 0.492870 3053 54 \n",
- "10 2.968247 0.492022 2981 52 \n",
- "11 2.968247 0.492022 2981 52 \n",
- "12 2.964509 0.491069 2909 50 \n",
- "13 2.960306 0.489994 2837 48 \n",
- "14 2.960306 0.489994 2837 48 \n",
- "15 2.955583 0.488782 2758 46 \n",
- "16 2.955583 0.488782 2758 46 \n",
- "17 2.950264 0.487411 2679 44 \n",
- "18 2.950264 0.487411 2679 44 \n",
- "\n",
- " Точность \n",
- "0 0.001 \n",
- "1 0.002 \n",
- "2 0.003 \n",
- "3 0.004 \n",
- "4 0.005 \n",
- "5 0.006 \n",
- "6 0.007 \n",
- "7 0.008 \n",
- "8 0.009 \n",
- "9 0.010 \n",
- "10 0.011 \n",
- "11 0.012 \n",
- "12 0.013 \n",
- "13 0.014 \n",
- "14 0.015 \n",
- "15 0.016 \n",
- "16 0.017 \n",
- "17 0.018 \n",
- "18 0.019 "
- ]
- },
- "execution_count": 86,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "iters = []\n",
- "counts = []\n",
- "errors = []\n",
- "x1 = []\n",
- "x2 = []\n",
- "\n",
- "for e in np.arange(0.001, 0.02, 0.001):\n",
- " count[0] = 0\n",
- " res = gradient_descent(wrap_f, wrap_theory_gradient, [0, 0], e = e)\n",
- " counts.append(count[0])\n",
- " iters.append(res[1])\n",
- " errors.append(e)\n",
- " x1.append(res[0][0])\n",
- " x2.append(res[0][1])\n",
- "\n",
- "data = pd.DataFrame({\n",
- " 'Колличество итераций' : iters,\n",
- " 'Колличество вычислений': counts,\n",
- " 'Точность': errors,\n",
- " 'Значение x1' : x1,\n",
- " 'Значение x2' : x2\n",
- "})\n",
- "\n",
- "data"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 87,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "<div>\n",
- "<style scoped>\n",
- " .dataframe tbody tr th:only-of-type {\n",
- " vertical-align: middle;\n",
- " }\n",
- "\n",
- " .dataframe tbody tr th {\n",
- " vertical-align: top;\n",
- " }\n",
- "\n",
- " .dataframe thead th {\n",
- " text-align: right;\n",
- " }\n",
- "</style>\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>Значение x1</th>\n",
- " <th>Значение x2</th>\n",
- " <th>Колличество вычислений</th>\n",
- " <th>Колличество итераций</th>\n",
- " <th>Точность</th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " <tr>\n",
- " <th>0</th>\n",
- " <td>2.997108</td>\n",
- " <td>0.499282</td>\n",
- " <td>264753</td>\n",
- " <td>14698</td>\n",
- " <td>0.001</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>1</th>\n",
- " <td>2.994444</td>\n",
- " <td>0.498619</td>\n",
- " <td>246605</td>\n",
- " <td>13842</td>\n",
- " <td>0.002</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>2</th>\n",
- " <td>3.007156</td>\n",
- " <td>0.501739</td>\n",
- " <td>105016</td>\n",
- " <td>4158</td>\n",
- " <td>0.003</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>3</th>\n",
- " <td>2.988147</td>\n",
- " <td>0.497046</td>\n",
- " <td>81870</td>\n",
- " <td>2397</td>\n",
- " <td>0.004</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>4</th>\n",
- " <td>2.985272</td>\n",
- " <td>0.496326</td>\n",
- " <td>24299</td>\n",
- " <td>689</td>\n",
- " <td>0.005</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>5</th>\n",
- " <td>2.983574</td>\n",
- " <td>0.495899</td>\n",
- " <td>3485</td>\n",
- " <td>69</td>\n",
- " <td>0.006</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>6</th>\n",
- " <td>2.979559</td>\n",
- " <td>0.494888</td>\n",
- " <td>3269</td>\n",
- " <td>60</td>\n",
- " <td>0.007</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>7</th>\n",
- " <td>2.977186</td>\n",
- " <td>0.494289</td>\n",
- " <td>3197</td>\n",
- " <td>58</td>\n",
- " <td>0.008</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>8</th>\n",
- " <td>2.974529</td>\n",
- " <td>0.493617</td>\n",
- " <td>3125</td>\n",
- " <td>56</td>\n",
- " <td>0.009</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>9</th>\n",
- " <td>2.971557</td>\n",
- " <td>0.492864</td>\n",
- " <td>3053</td>\n",
- " <td>54</td>\n",
- " <td>0.010</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>10</th>\n",
- " <td>2.968226</td>\n",
- " <td>0.492017</td>\n",
- " <td>2981</td>\n",
- " <td>52</td>\n",
- " <td>0.011</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>11</th>\n",
- " <td>2.968226</td>\n",
- " <td>0.492017</td>\n",
- " <td>2981</td>\n",
- " <td>52</td>\n",
- " <td>0.012</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>12</th>\n",
- " <td>2.964487</td>\n",
- " <td>0.491064</td>\n",
- " <td>2909</td>\n",
- " <td>50</td>\n",
- " <td>0.013</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>13</th>\n",
- " <td>2.960289</td>\n",
- " <td>0.489990</td>\n",
- " <td>2837</td>\n",
- " <td>48</td>\n",
- " <td>0.014</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>14</th>\n",
- " <td>2.960289</td>\n",
- " <td>0.489990</td>\n",
- " <td>2837</td>\n",
- " <td>48</td>\n",
- " <td>0.015</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>15</th>\n",
- " <td>2.955565</td>\n",
- " <td>0.488778</td>\n",
- " <td>2758</td>\n",
- " <td>46</td>\n",
- " <td>0.016</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>16</th>\n",
- " <td>2.955565</td>\n",
- " <td>0.488778</td>\n",
- " <td>2758</td>\n",
- " <td>46</td>\n",
- " <td>0.017</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>17</th>\n",
- " <td>2.950247</td>\n",
- " <td>0.487407</td>\n",
- " <td>2679</td>\n",
- " <td>44</td>\n",
- " <td>0.018</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>18</th>\n",
- " <td>2.950247</td>\n",
- " <td>0.487407</td>\n",
- " <td>2679</td>\n",
- " <td>44</td>\n",
- " <td>0.019</td>\n",
- " </tr>\n",
- " </tbody>\n",
- "</table>\n",
- "</div>"
- ],
- "text/plain": [
- " Значение x1 Значение x2 Колличество вычислений Колличество итераций \\\n",
- "0 2.997108 0.499282 264753 14698 \n",
- "1 2.994444 0.498619 246605 13842 \n",
- "2 3.007156 0.501739 105016 4158 \n",
- "3 2.988147 0.497046 81870 2397 \n",
- "4 2.985272 0.496326 24299 689 \n",
- "5 2.983574 0.495899 3485 69 \n",
- "6 2.979559 0.494888 3269 60 \n",
- "7 2.977186 0.494289 3197 58 \n",
- "8 2.974529 0.493617 3125 56 \n",
- "9 2.971557 0.492864 3053 54 \n",
- "10 2.968226 0.492017 2981 52 \n",
- "11 2.968226 0.492017 2981 52 \n",
- "12 2.964487 0.491064 2909 50 \n",
- "13 2.960289 0.489990 2837 48 \n",
- "14 2.960289 0.489990 2837 48 \n",
- "15 2.955565 0.488778 2758 46 \n",
- "16 2.955565 0.488778 2758 46 \n",
- "17 2.950247 0.487407 2679 44 \n",
- "18 2.950247 0.487407 2679 44 \n",
- "\n",
- " Точность \n",
- "0 0.001 \n",
- "1 0.002 \n",
- "2 0.003 \n",
- "3 0.004 \n",
- "4 0.005 \n",
- "5 0.006 \n",
- "6 0.007 \n",
- "7 0.008 \n",
- "8 0.009 \n",
- "9 0.010 \n",
- "10 0.011 \n",
- "11 0.012 \n",
- "12 0.013 \n",
- "13 0.014 \n",
- "14 0.015 \n",
- "15 0.016 \n",
- "16 0.017 \n",
- "17 0.018 \n",
- "18 0.019 "
- ]
- },
- "execution_count": 87,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "iters = []\n",
- "counts = []\n",
- "errors = []\n",
- "x1 = []\n",
- "x2 = []\n",
- "\n",
- "for e in np.arange(0.001, 0.02, 0.001):\n",
- " count[0] = 0\n",
- " res = gradient_descent(wrap_f, wrap_numerical_gradient, [0, 0], e = e)\n",
- " counts.append(count[0])\n",
- " iters.append(res[1])\n",
- " errors.append(e)\n",
- " x1.append(res[0][0])\n",
- " x2.append(res[0][1])\n",
- "\n",
- "data = pd.DataFrame({\n",
- " 'Колличество итераций' : iters,\n",
- " 'Колличество вычислений': counts,\n",
- " 'Точность': errors,\n",
- " 'Значение x1' : x1,\n",
- " 'Значение x2' : x2\n",
- "})\n",
- "\n",
- "data"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "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.5.6"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement