Advertisement
oshuej

Untitled

Dec 7th, 2019
302
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 105.50 KB | None | 0 0
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {},
  6. "source": [
  7. "Есть три достаточных условия экстремума функции, есть ли пирнципиальная разница когда что использовать?\n",
  8. "\n",
  9. "В методе наискорейшего спуска по какому критерии выбираются границы отрезка с минимумом?"
  10. ]
  11. },
  12. {
  13. "cell_type": "markdown",
  14. "metadata": {},
  15. "source": [
  16. "# Лабораторная работа №1. Часть I\n",
  17. "## Методы одномерного поиска экстремума\n",
  18. "### Вариант 8"
  19. ]
  20. },
  21. {
  22. "cell_type": "markdown",
  23. "metadata": {},
  24. "source": [
  25. "### Теоретический экстремум\n",
  26. "\n",
  27. "$$f(x) = x^3 - x$$\n",
  28. "\n",
  29. "Найдем производную\n",
  30. "$$f^{'}(x) = 3x^2 - 1$$\n",
  31. "\n",
  32. "Нули функции производной\n",
  33. "$$x_0 = -\\frac{1}{3^{1/2}};x_1 = \\frac{1}{3^{1/2}}$$\n",
  34. "\n",
  35. "<p align=\"center\">\n",
  36. " <img width=300 src=\"./img/lab1_1.png\"/>\n",
  37. "</p>\n",
  38. "\n",
  39. "Искомый минимум \n",
  40. "$$x_1 = \\frac{1}{3^{1/2}}$$"
  41. ]
  42. },
  43. {
  44. "cell_type": "markdown",
  45. "metadata": {},
  46. "source": [
  47. "### Условие Липшица\n",
  48. "\n",
  49. "Как было сказано, производная равна\n",
  50. "$$f^{'}(x) = 3x^2 - 1$$\n",
  51. "\n",
  52. "Условие Липшица (ограничение на скорость изменения функции)\n",
  53. "\n",
  54. "$$|f(x^{'}) - f(x^{''})| \\leq L|x^{'} - x^{''}|$$\n",
  55. "\n",
  56. "Так как производная показывает скорость роста функции, то максимальная скорость равна максимуму по модулю функции производной, в нашем случае график производной это парабола, следовательно достаточно рассмотреть крайние точки. Несложный анализ показывает, что максимум достигается при x=1.\n",
  57. "\n",
  58. "Таким образом константа Липшица равна\n",
  59. "\n",
  60. "$$L = 2$$"
  61. ]
  62. },
  63. {
  64. "cell_type": "code",
  65. "execution_count": 1,
  66. "metadata": {},
  67. "outputs": [],
  68. "source": [
  69. "import matplotlib.pyplot as plt\n",
  70. "import numpy as np\n",
  71. "import pandas as pd\n",
  72. "%matplotlib inline"
  73. ]
  74. },
  75. {
  76. "cell_type": "code",
  77. "execution_count": 2,
  78. "metadata": {},
  79. "outputs": [],
  80. "source": [
  81. "# Параметры задачи\n",
  82. "left_border = 0\n",
  83. "right_border = 1\n",
  84. "e = 0.001 # ошибка\n",
  85. "L = 2\n",
  86. "theor_x = 1 / 3**(1/2)"
  87. ]
  88. },
  89. {
  90. "cell_type": "code",
  91. "execution_count": 3,
  92. "metadata": {},
  93. "outputs": [
  94. {
  95. "data": {
  96. "text/plain": [
  97. "[<matplotlib.lines.Line2D at 0x12178a7f0>]"
  98. ]
  99. },
  100. "execution_count": 3,
  101. "metadata": {},
  102. "output_type": "execute_result"
  103. },
  104. {
  105. "data": {
  106. "image/png": "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\n",
  107. "text/plain": [
  108. "<Figure size 432x288 with 1 Axes>"
  109. ]
  110. },
  111. "metadata": {
  112. "needs_background": "light"
  113. },
  114. "output_type": "display_data"
  115. }
  116. ],
  117. "source": [
  118. "# Целевая функция\n",
  119. "def f(x):\n",
  120. " return x ** 3 - x\n",
  121. "\n",
  122. "x = np.arange(left_border, right_border, 0.01)\n",
  123. "plt.title('Целевая функция')\n",
  124. "plt.plot(x, f(x))"
  125. ]
  126. },
  127. {
  128. "cell_type": "markdown",
  129. "metadata": {},
  130. "source": [
  131. "### Метод дихтомии"
  132. ]
  133. },
  134. {
  135. "cell_type": "code",
  136. "execution_count": 4,
  137. "metadata": {},
  138. "outputs": [],
  139. "source": [
  140. "def dichotomy(f, a, b, e, left_borders, right_borders, x1, x2, f1, f2):\n",
  141. " delta = e / 3 \n",
  142. " \n",
  143. " while True: \n",
  144. " x1_n = (a + b) / 2 - delta\n",
  145. " x2_n = (a + b) / 2 + delta\n",
  146. " f1_n = f(x1_n)\n",
  147. " f2_n = f(x2_n)\n",
  148. " \n",
  149. " left_borders.append(a)\n",
  150. " right_borders.append(b)\n",
  151. " x1.append(x1_n)\n",
  152. " x2.append(x2_n)\n",
  153. " f1.append(f1_n)\n",
  154. " f2.append(f2_n)\n",
  155. " \n",
  156. " if f1_n <= f2_n:\n",
  157. " b = x2_n\n",
  158. " else:\n",
  159. " a = x1_n\n",
  160. "\n",
  161. " if b - a <= e:\n",
  162. " return (b + a) / 2"
  163. ]
  164. },
  165. {
  166. "cell_type": "code",
  167. "execution_count": 5,
  168. "metadata": {},
  169. "outputs": [
  170. {
  171. "name": "stdout",
  172. "output_type": "stream",
  173. "text": [
  174. "Полученное значение: 0.5774629720052082\n",
  175. "Теоретическое: 0.5773502691896258\n"
  176. ]
  177. }
  178. ],
  179. "source": [
  180. "left_borders = []\n",
  181. "right_borders = []\n",
  182. "x1 = []\n",
  183. "x2 = []\n",
  184. "f1 = []\n",
  185. "f2 = []\n",
  186. "\n",
  187. "print('Полученное значение:', dichotomy(f, left_border, right_border, e, left_borders, right_borders, x1, x2, f1, f2))\n",
  188. "print('Теоретическое:', theor_x)"
  189. ]
  190. },
  191. {
  192. "cell_type": "code",
  193. "execution_count": 6,
  194. "metadata": {},
  195. "outputs": [
  196. {
  197. "data": {
  198. "text/html": [
  199. "<div>\n",
  200. "<style scoped>\n",
  201. " .dataframe tbody tr th:only-of-type {\n",
  202. " vertical-align: middle;\n",
  203. " }\n",
  204. "\n",
  205. " .dataframe tbody tr th {\n",
  206. " vertical-align: top;\n",
  207. " }\n",
  208. "\n",
  209. " .dataframe thead th {\n",
  210. " text-align: right;\n",
  211. " }\n",
  212. "</style>\n",
  213. "<table border=\"1\" class=\"dataframe\">\n",
  214. " <thead>\n",
  215. " <tr style=\"text-align: right;\">\n",
  216. " <th></th>\n",
  217. " <th>Left border</th>\n",
  218. " <th>Length ratio</th>\n",
  219. " <th>Right border</th>\n",
  220. " <th>f(x1)</th>\n",
  221. " <th>f(x2)</th>\n",
  222. " <th>x1</th>\n",
  223. " <th>x2</th>\n",
  224. " </tr>\n",
  225. " </thead>\n",
  226. " <tbody>\n",
  227. " <tr>\n",
  228. " <th>0</th>\n",
  229. " <td>0.000000</td>\n",
  230. " <td>NaN</td>\n",
  231. " <td>1.000000</td>\n",
  232. " <td>-0.374917</td>\n",
  233. " <td>-0.375083</td>\n",
  234. " <td>0.499667</td>\n",
  235. " <td>0.500333</td>\n",
  236. " </tr>\n",
  237. " <tr>\n",
  238. " <th>1</th>\n",
  239. " <td>0.499667</td>\n",
  240. " <td>1.998668</td>\n",
  241. " <td>1.000000</td>\n",
  242. " <td>-0.328468</td>\n",
  243. " <td>-0.328010</td>\n",
  244. " <td>0.749500</td>\n",
  245. " <td>0.750167</td>\n",
  246. " </tr>\n",
  247. " <tr>\n",
  248. " <th>2</th>\n",
  249. " <td>0.499667</td>\n",
  250. " <td>1.997339</td>\n",
  251. " <td>0.750167</td>\n",
  252. " <td>-0.380931</td>\n",
  253. " <td>-0.380816</td>\n",
  254. " <td>0.624583</td>\n",
  255. " <td>0.625250</td>\n",
  256. " </tr>\n",
  257. " <tr>\n",
  258. " <th>3</th>\n",
  259. " <td>0.499667</td>\n",
  260. " <td>1.994691</td>\n",
  261. " <td>0.625250</td>\n",
  262. " <td>-0.384502</td>\n",
  263. " <td>-0.384536</td>\n",
  264. " <td>0.562125</td>\n",
  265. " <td>0.562792</td>\n",
  266. " </tr>\n",
  267. " <tr>\n",
  268. " <th>4</th>\n",
  269. " <td>0.562125</td>\n",
  270. " <td>1.989439</td>\n",
  271. " <td>0.625250</td>\n",
  272. " <td>-0.384452</td>\n",
  273. " <td>-0.384414</td>\n",
  274. " <td>0.593354</td>\n",
  275. " <td>0.594021</td>\n",
  276. " </tr>\n",
  277. " <tr>\n",
  278. " <th>5</th>\n",
  279. " <td>0.562125</td>\n",
  280. " <td>1.979099</td>\n",
  281. " <td>0.594021</td>\n",
  282. " <td>-0.384900</td>\n",
  283. " <td>-0.384898</td>\n",
  284. " <td>0.577740</td>\n",
  285. " <td>0.578406</td>\n",
  286. " </tr>\n",
  287. " <tr>\n",
  288. " <th>6</th>\n",
  289. " <td>0.562125</td>\n",
  290. " <td>1.959053</td>\n",
  291. " <td>0.578406</td>\n",
  292. " <td>-0.384805</td>\n",
  293. " <td>-0.384822</td>\n",
  294. " <td>0.569932</td>\n",
  295. " <td>0.570599</td>\n",
  296. " </tr>\n",
  297. " <tr>\n",
  298. " <th>7</th>\n",
  299. " <td>0.569932</td>\n",
  300. " <td>1.921328</td>\n",
  301. " <td>0.578406</td>\n",
  302. " <td>-0.384879</td>\n",
  303. " <td>-0.384886</td>\n",
  304. " <td>0.573836</td>\n",
  305. " <td>0.574503</td>\n",
  306. " </tr>\n",
  307. " <tr>\n",
  308. " <th>8</th>\n",
  309. " <td>0.573836</td>\n",
  310. " <td>1.854131</td>\n",
  311. " <td>0.578406</td>\n",
  312. " <td>-0.384896</td>\n",
  313. " <td>-0.384899</td>\n",
  314. " <td>0.575788</td>\n",
  315. " <td>0.576454</td>\n",
  316. " </tr>\n",
  317. " <tr>\n",
  318. " <th>9</th>\n",
  319. " <td>0.575788</td>\n",
  320. " <td>1.745400</td>\n",
  321. " <td>0.578406</td>\n",
  322. " <td>-0.384900</td>\n",
  323. " <td>-0.384900</td>\n",
  324. " <td>0.576764</td>\n",
  325. " <td>0.577430</td>\n",
  326. " </tr>\n",
  327. " <tr>\n",
  328. " <th>10</th>\n",
  329. " <td>0.576764</td>\n",
  330. " <td>1.594134</td>\n",
  331. " <td>0.578406</td>\n",
  332. " <td>-0.384900</td>\n",
  333. " <td>-0.384900</td>\n",
  334. " <td>0.577252</td>\n",
  335. " <td>0.577918</td>\n",
  336. " </tr>\n",
  337. " <tr>\n",
  338. " <th>11</th>\n",
  339. " <td>0.576764</td>\n",
  340. " <td>1.422611</td>\n",
  341. " <td>0.577918</td>\n",
  342. " <td>-0.384900</td>\n",
  343. " <td>-0.384900</td>\n",
  344. " <td>0.577008</td>\n",
  345. " <td>0.577674</td>\n",
  346. " </tr>\n",
  347. " </tbody>\n",
  348. "</table>\n",
  349. "</div>"
  350. ],
  351. "text/plain": [
  352. " Left border Length ratio Right border f(x1) f(x2) x1 \\\n",
  353. "0 0.000000 NaN 1.000000 -0.374917 -0.375083 0.499667 \n",
  354. "1 0.499667 1.998668 1.000000 -0.328468 -0.328010 0.749500 \n",
  355. "2 0.499667 1.997339 0.750167 -0.380931 -0.380816 0.624583 \n",
  356. "3 0.499667 1.994691 0.625250 -0.384502 -0.384536 0.562125 \n",
  357. "4 0.562125 1.989439 0.625250 -0.384452 -0.384414 0.593354 \n",
  358. "5 0.562125 1.979099 0.594021 -0.384900 -0.384898 0.577740 \n",
  359. "6 0.562125 1.959053 0.578406 -0.384805 -0.384822 0.569932 \n",
  360. "7 0.569932 1.921328 0.578406 -0.384879 -0.384886 0.573836 \n",
  361. "8 0.573836 1.854131 0.578406 -0.384896 -0.384899 0.575788 \n",
  362. "9 0.575788 1.745400 0.578406 -0.384900 -0.384900 0.576764 \n",
  363. "10 0.576764 1.594134 0.578406 -0.384900 -0.384900 0.577252 \n",
  364. "11 0.576764 1.422611 0.577918 -0.384900 -0.384900 0.577008 \n",
  365. "\n",
  366. " x2 \n",
  367. "0 0.500333 \n",
  368. "1 0.750167 \n",
  369. "2 0.625250 \n",
  370. "3 0.562792 \n",
  371. "4 0.594021 \n",
  372. "5 0.578406 \n",
  373. "6 0.570599 \n",
  374. "7 0.574503 \n",
  375. "8 0.576454 \n",
  376. "9 0.577430 \n",
  377. "10 0.577918 \n",
  378. "11 0.577674 "
  379. ]
  380. },
  381. "execution_count": 6,
  382. "metadata": {},
  383. "output_type": "execute_result"
  384. }
  385. ],
  386. "source": [
  387. "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",
  388. "lengths_ratio.insert(0, None)\n",
  389. "\n",
  390. "data = pd.DataFrame({\n",
  391. " 'Left border' : left_borders,\n",
  392. " 'Right border' : right_borders,\n",
  393. " 'x1': x1,\n",
  394. " 'x2': x2,\n",
  395. " 'f(x1)' : f1,\n",
  396. " 'f(x2)' : f2,\n",
  397. " 'Length ratio' : lengths_ratio\n",
  398. "})\n",
  399. "data\n"
  400. ]
  401. },
  402. {
  403. "cell_type": "code",
  404. "execution_count": 7,
  405. "metadata": {},
  406. "outputs": [
  407. {
  408. "name": "stdout",
  409. "output_type": "stream",
  410. "text": [
  411. "Колличество итераций: 12\n",
  412. "Колличество вычислений функции: 24\n"
  413. ]
  414. }
  415. ],
  416. "source": [
  417. "print('Колличество итераций:', data.shape[0])\n",
  418. "print('Колличество вычислений функции:', data.shape[0] * 2)"
  419. ]
  420. },
  421. {
  422. "cell_type": "code",
  423. "execution_count": 8,
  424. "metadata": {},
  425. "outputs": [
  426. {
  427. "data": {
  428. "text/plain": [
  429. "[<matplotlib.lines.Line2D at 0x121a7e630>]"
  430. ]
  431. },
  432. "execution_count": 8,
  433. "metadata": {},
  434. "output_type": "execute_result"
  435. },
  436. {
  437. "data": {
  438. "image/png": "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\n",
  439. "text/plain": [
  440. "<Figure size 432x288 with 1 Axes>"
  441. ]
  442. },
  443. "metadata": {
  444. "needs_background": "light"
  445. },
  446. "output_type": "display_data"
  447. }
  448. ],
  449. "source": [
  450. "precisions = np.arange(0.0001, 0.05, 0.005)\n",
  451. "counts = []\n",
  452. "\n",
  453. "for precision in precisions:\n",
  454. " left_borders = []\n",
  455. " right_borders = []\n",
  456. " x1 = []\n",
  457. " x2 = []\n",
  458. " f1 = []\n",
  459. " f2 = []\n",
  460. " dichotomy(f, left_border, right_border, precision, left_borders, right_borders, x1, x2, f1, f2)\n",
  461. " counts.append(len(left_borders) * 2)\n",
  462. " \n",
  463. "plt.plot(np.log(precisions), counts)"
  464. ]
  465. },
  466. {
  467. "cell_type": "markdown",
  468. "metadata": {},
  469. "source": [
  470. "### Метод золотого сечения"
  471. ]
  472. },
  473. {
  474. "cell_type": "code",
  475. "execution_count": 9,
  476. "metadata": {},
  477. "outputs": [],
  478. "source": [
  479. "from scipy.constants import golden\n",
  480. "\n",
  481. "def golden_ratio(f, a, b, e, left_borders, right_borders, x1, x2, f1, f2):\n",
  482. " t = golden - 1\n",
  483. " x1_n = a + (1 - t) * (b - a)\n",
  484. " x2_n = a + t * (b - a)\n",
  485. " f1_n = f(x1_n)\n",
  486. " f2_n = f(x2_n)\n",
  487. " e_n = (b - a) / 2\n",
  488. " \n",
  489. " while True: \n",
  490. " left_borders.append(a)\n",
  491. " right_borders.append(b)\n",
  492. " x1.append(x1_n)\n",
  493. " x2.append(x2_n)\n",
  494. " f1.append(f1_n)\n",
  495. " f2.append(f2_n)\n",
  496. " \n",
  497. " if e_n <= e:\n",
  498. " return (b + a) / 2\n",
  499. " \n",
  500. " if f1_n <= f2_n:\n",
  501. " b = x2_n\n",
  502. " x2_n = x1_n\n",
  503. " f2_n = f1_n\n",
  504. " x1_n = a + (1 - t) * (b - a)\n",
  505. " f1_n = f(x1_n)\n",
  506. " else:\n",
  507. " a = x1_n\n",
  508. " x1_n = x2_n\n",
  509. " f1_n = f2_n\n",
  510. " x2_n = a + t * (b - a)\n",
  511. " f2_n = f(x2_n)\n",
  512. " e_n = t * e_n"
  513. ]
  514. },
  515. {
  516. "cell_type": "code",
  517. "execution_count": 10,
  518. "metadata": {},
  519. "outputs": [
  520. {
  521. "name": "stdout",
  522. "output_type": "stream",
  523. "text": [
  524. "0.5776074468978706\n",
  525. "0.5773502691896258\n"
  526. ]
  527. }
  528. ],
  529. "source": [
  530. "left_borders = []\n",
  531. "right_borders = []\n",
  532. "x1 = []\n",
  533. "x2 = []\n",
  534. "f1 = []\n",
  535. "f2 = []\n",
  536. "\n",
  537. "print(golden_ratio(f, left_border, right_border, e, left_borders, right_borders, x1, x2, f1, f2))\n",
  538. "print(theor_x)"
  539. ]
  540. },
  541. {
  542. "cell_type": "code",
  543. "execution_count": 11,
  544. "metadata": {},
  545. "outputs": [
  546. {
  547. "data": {
  548. "text/html": [
  549. "<div>\n",
  550. "<style scoped>\n",
  551. " .dataframe tbody tr th:only-of-type {\n",
  552. " vertical-align: middle;\n",
  553. " }\n",
  554. "\n",
  555. " .dataframe tbody tr th {\n",
  556. " vertical-align: top;\n",
  557. " }\n",
  558. "\n",
  559. " .dataframe thead th {\n",
  560. " text-align: right;\n",
  561. " }\n",
  562. "</style>\n",
  563. "<table border=\"1\" class=\"dataframe\">\n",
  564. " <thead>\n",
  565. " <tr style=\"text-align: right;\">\n",
  566. " <th></th>\n",
  567. " <th>Left border</th>\n",
  568. " <th>Length ratio</th>\n",
  569. " <th>Right border</th>\n",
  570. " <th>f(x1)</th>\n",
  571. " <th>f(x2)</th>\n",
  572. " <th>x1</th>\n",
  573. " <th>x2</th>\n",
  574. " </tr>\n",
  575. " </thead>\n",
  576. " <tbody>\n",
  577. " <tr>\n",
  578. " <th>0</th>\n",
  579. " <td>0.000000</td>\n",
  580. " <td>NaN</td>\n",
  581. " <td>1.000000</td>\n",
  582. " <td>-0.326238</td>\n",
  583. " <td>-0.381966</td>\n",
  584. " <td>0.381966</td>\n",
  585. " <td>0.618034</td>\n",
  586. " </tr>\n",
  587. " <tr>\n",
  588. " <th>1</th>\n",
  589. " <td>0.381966</td>\n",
  590. " <td>1.618034</td>\n",
  591. " <td>1.000000</td>\n",
  592. " <td>-0.381966</td>\n",
  593. " <td>-0.318107</td>\n",
  594. " <td>0.618034</td>\n",
  595. " <td>0.763932</td>\n",
  596. " </tr>\n",
  597. " <tr>\n",
  598. " <th>2</th>\n",
  599. " <td>0.381966</td>\n",
  600. " <td>1.618034</td>\n",
  601. " <td>0.763932</td>\n",
  602. " <td>-0.380780</td>\n",
  603. " <td>-0.381966</td>\n",
  604. " <td>0.527864</td>\n",
  605. " <td>0.618034</td>\n",
  606. " </tr>\n",
  607. " <tr>\n",
  608. " <th>3</th>\n",
  609. " <td>0.527864</td>\n",
  610. " <td>1.618034</td>\n",
  611. " <td>0.763932</td>\n",
  612. " <td>-0.381966</td>\n",
  613. " <td>-0.367904</td>\n",
  614. " <td>0.618034</td>\n",
  615. " <td>0.673762</td>\n",
  616. " </tr>\n",
  617. " <tr>\n",
  618. " <th>4</th>\n",
  619. " <td>0.527864</td>\n",
  620. " <td>1.618034</td>\n",
  621. " <td>0.673762</td>\n",
  622. " <td>-0.384832</td>\n",
  623. " <td>-0.381966</td>\n",
  624. " <td>0.583592</td>\n",
  625. " <td>0.618034</td>\n",
  626. " </tr>\n",
  627. " <tr>\n",
  628. " <th>5</th>\n",
  629. " <td>0.527864</td>\n",
  630. " <td>1.618034</td>\n",
  631. " <td>0.618034</td>\n",
  632. " <td>-0.384512</td>\n",
  633. " <td>-0.384832</td>\n",
  634. " <td>0.562306</td>\n",
  635. " <td>0.583592</td>\n",
  636. " </tr>\n",
  637. " <tr>\n",
  638. " <th>6</th>\n",
  639. " <td>0.562306</td>\n",
  640. " <td>1.618034</td>\n",
  641. " <td>0.618034</td>\n",
  642. " <td>-0.384832</td>\n",
  643. " <td>-0.384241</td>\n",
  644. " <td>0.583592</td>\n",
  645. " <td>0.596748</td>\n",
  646. " </tr>\n",
  647. " <tr>\n",
  648. " <th>7</th>\n",
  649. " <td>0.562306</td>\n",
  650. " <td>1.618034</td>\n",
  651. " <td>0.596748</td>\n",
  652. " <td>-0.384894</td>\n",
  653. " <td>-0.384832</td>\n",
  654. " <td>0.575462</td>\n",
  655. " <td>0.583592</td>\n",
  656. " </tr>\n",
  657. " <tr>\n",
  658. " <th>8</th>\n",
  659. " <td>0.562306</td>\n",
  660. " <td>1.618034</td>\n",
  661. " <td>0.583592</td>\n",
  662. " <td>-0.384818</td>\n",
  663. " <td>-0.384894</td>\n",
  664. " <td>0.570437</td>\n",
  665. " <td>0.575462</td>\n",
  666. " </tr>\n",
  667. " <tr>\n",
  668. " <th>9</th>\n",
  669. " <td>0.570437</td>\n",
  670. " <td>1.618034</td>\n",
  671. " <td>0.583592</td>\n",
  672. " <td>-0.384894</td>\n",
  673. " <td>-0.384898</td>\n",
  674. " <td>0.575462</td>\n",
  675. " <td>0.578567</td>\n",
  676. " </tr>\n",
  677. " <tr>\n",
  678. " <th>10</th>\n",
  679. " <td>0.575462</td>\n",
  680. " <td>1.618034</td>\n",
  681. " <td>0.583592</td>\n",
  682. " <td>-0.384898</td>\n",
  683. " <td>-0.384883</td>\n",
  684. " <td>0.578567</td>\n",
  685. " <td>0.580487</td>\n",
  686. " </tr>\n",
  687. " <tr>\n",
  688. " <th>11</th>\n",
  689. " <td>0.575462</td>\n",
  690. " <td>1.618034</td>\n",
  691. " <td>0.580487</td>\n",
  692. " <td>-0.384900</td>\n",
  693. " <td>-0.384898</td>\n",
  694. " <td>0.577381</td>\n",
  695. " <td>0.578567</td>\n",
  696. " </tr>\n",
  697. " <tr>\n",
  698. " <th>12</th>\n",
  699. " <td>0.575462</td>\n",
  700. " <td>1.618034</td>\n",
  701. " <td>0.578567</td>\n",
  702. " <td>-0.384899</td>\n",
  703. " <td>-0.384900</td>\n",
  704. " <td>0.576648</td>\n",
  705. " <td>0.577381</td>\n",
  706. " </tr>\n",
  707. " <tr>\n",
  708. " <th>13</th>\n",
  709. " <td>0.576648</td>\n",
  710. " <td>1.618034</td>\n",
  711. " <td>0.578567</td>\n",
  712. " <td>-0.384900</td>\n",
  713. " <td>-0.384900</td>\n",
  714. " <td>0.577381</td>\n",
  715. " <td>0.577834</td>\n",
  716. " </tr>\n",
  717. " </tbody>\n",
  718. "</table>\n",
  719. "</div>"
  720. ],
  721. "text/plain": [
  722. " Left border Length ratio Right border f(x1) f(x2) x1 \\\n",
  723. "0 0.000000 NaN 1.000000 -0.326238 -0.381966 0.381966 \n",
  724. "1 0.381966 1.618034 1.000000 -0.381966 -0.318107 0.618034 \n",
  725. "2 0.381966 1.618034 0.763932 -0.380780 -0.381966 0.527864 \n",
  726. "3 0.527864 1.618034 0.763932 -0.381966 -0.367904 0.618034 \n",
  727. "4 0.527864 1.618034 0.673762 -0.384832 -0.381966 0.583592 \n",
  728. "5 0.527864 1.618034 0.618034 -0.384512 -0.384832 0.562306 \n",
  729. "6 0.562306 1.618034 0.618034 -0.384832 -0.384241 0.583592 \n",
  730. "7 0.562306 1.618034 0.596748 -0.384894 -0.384832 0.575462 \n",
  731. "8 0.562306 1.618034 0.583592 -0.384818 -0.384894 0.570437 \n",
  732. "9 0.570437 1.618034 0.583592 -0.384894 -0.384898 0.575462 \n",
  733. "10 0.575462 1.618034 0.583592 -0.384898 -0.384883 0.578567 \n",
  734. "11 0.575462 1.618034 0.580487 -0.384900 -0.384898 0.577381 \n",
  735. "12 0.575462 1.618034 0.578567 -0.384899 -0.384900 0.576648 \n",
  736. "13 0.576648 1.618034 0.578567 -0.384900 -0.384900 0.577381 \n",
  737. "\n",
  738. " x2 \n",
  739. "0 0.618034 \n",
  740. "1 0.763932 \n",
  741. "2 0.618034 \n",
  742. "3 0.673762 \n",
  743. "4 0.618034 \n",
  744. "5 0.583592 \n",
  745. "6 0.596748 \n",
  746. "7 0.583592 \n",
  747. "8 0.575462 \n",
  748. "9 0.578567 \n",
  749. "10 0.580487 \n",
  750. "11 0.578567 \n",
  751. "12 0.577381 \n",
  752. "13 0.577834 "
  753. ]
  754. },
  755. "execution_count": 11,
  756. "metadata": {},
  757. "output_type": "execute_result"
  758. }
  759. ],
  760. "source": [
  761. "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",
  762. "lengths_ratio.insert(0, None)\n",
  763. "\n",
  764. "data = pd.DataFrame({\n",
  765. " 'Left border' : left_borders,\n",
  766. " 'Right border' : right_borders,\n",
  767. " 'x1': x1,\n",
  768. " 'x2': x2,\n",
  769. " 'f(x1)' : f1,\n",
  770. " 'f(x2)' : f2,\n",
  771. " 'Length ratio' : lengths_ratio\n",
  772. "})\n",
  773. "data"
  774. ]
  775. },
  776. {
  777. "cell_type": "code",
  778. "execution_count": 12,
  779. "metadata": {},
  780. "outputs": [
  781. {
  782. "name": "stdout",
  783. "output_type": "stream",
  784. "text": [
  785. "Колличество итераций: 14\n",
  786. "Колличество вычислений функции: 15\n"
  787. ]
  788. }
  789. ],
  790. "source": [
  791. "print('Колличество итераций:', data.shape[0])\n",
  792. "print('Колличество вычислений функции:', data.shape[0] + 1)"
  793. ]
  794. },
  795. {
  796. "cell_type": "code",
  797. "execution_count": 13,
  798. "metadata": {},
  799. "outputs": [
  800. {
  801. "data": {
  802. "text/plain": [
  803. "[<matplotlib.lines.Line2D at 0x121cd0dd8>]"
  804. ]
  805. },
  806. "execution_count": 13,
  807. "metadata": {},
  808. "output_type": "execute_result"
  809. },
  810. {
  811. "data": {
  812. "image/png": "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\n",
  813. "text/plain": [
  814. "<Figure size 432x288 with 1 Axes>"
  815. ]
  816. },
  817. "metadata": {
  818. "needs_background": "light"
  819. },
  820. "output_type": "display_data"
  821. }
  822. ],
  823. "source": [
  824. "precisions = np.arange(0.0001, 0.05, 0.005)\n",
  825. "counts = []\n",
  826. "\n",
  827. "for precision in precisions:\n",
  828. " left_borders = []\n",
  829. " right_borders = []\n",
  830. " x1 = []\n",
  831. " x2 = []\n",
  832. " f1 = []\n",
  833. " f2 = []\n",
  834. " golden_ratio(f, left_border, right_border, precision, left_borders, right_borders, x1, x2, f1, f2)\n",
  835. " counts.append(len(left_borders) + 1)\n",
  836. " \n",
  837. "plt.plot(np.log(precisions), counts)"
  838. ]
  839. },
  840. {
  841. "cell_type": "markdown",
  842. "metadata": {},
  843. "source": [
  844. "### Метод Фибоначчи"
  845. ]
  846. },
  847. {
  848. "cell_type": "code",
  849. "execution_count": 14,
  850. "metadata": {},
  851. "outputs": [],
  852. "source": [
  853. "import math\n",
  854. "\n",
  855. "def fibonacci_number(n):\n",
  856. " return int((((1 + math.sqrt(5))/2)**n - ((1 - math.sqrt(5))/2)**n )/ math.sqrt(5))"
  857. ]
  858. },
  859. {
  860. "cell_type": "code",
  861. "execution_count": 15,
  862. "metadata": {},
  863. "outputs": [],
  864. "source": [
  865. "def fibbonacci_method (f, xmin, xmax, e, left_borders, right_borders, x1, x2, f1, f2):\n",
  866. " n_2_fib_num = (xmax - xmin) / e\n",
  867. " \n",
  868. " n_iter = 1\n",
  869. " while fibonacci_number(n_iter + 2) < n_2_fib_num:\n",
  870. " n_iter += 1\n",
  871. " \n",
  872. " if n_iter == 1:\n",
  873. " return (xmax - xmin) / 2\n",
  874. " \n",
  875. " a = [xmin]\n",
  876. " b = [xmax]\n",
  877. " \n",
  878. " tmp_l = [a[0] + (b[0] - a[0]) * fibonacci_number(n_iter - 2)/fibonacci_number(n_iter)]\n",
  879. " tmp_r = [a[0] + (b[0] - a[0]) * fibonacci_number(n_iter - 1)/fibonacci_number(n_iter)]\n",
  880. " \n",
  881. " i = 1\n",
  882. " \n",
  883. " while i <= n_iter-1:\n",
  884. " f_tmp_l = f(tmp_l[i-1])\n",
  885. " f_tmp_r = f(tmp_r[i-1])\n",
  886. " \n",
  887. " f1.append(f_tmp_l)\n",
  888. " f2.append(f_tmp_r)\n",
  889. " \n",
  890. " if f_tmp_l > f_tmp_r:\n",
  891. " a.append(tmp_l[i-1])\n",
  892. " b.append(b[i-1]) \n",
  893. " tmp_l.append(tmp_r[i-1])\n",
  894. " tmp_r.append(a[i] + (b[i] - a[i]) * fibonacci_number(n_iter - i - 1)/fibonacci_number(n_iter - i))\n",
  895. " else:\n",
  896. " a.append(a[i-1])\n",
  897. " b.append(tmp_r[i-1])\n",
  898. " tmp_r.append(tmp_l[i-1])\n",
  899. " tmp_l.append(a[i] + (b[i] - a[i]) * fibonacci_number(n_iter - i - 2)/fibonacci_number(n_iter - i))\n",
  900. " \n",
  901. " i += 1\n",
  902. " \n",
  903. " tmp_l.append(tmp_l[n_iter-1])\n",
  904. " tmp_r.append(tmp_l[n_iter] + e)\n",
  905. " if f(tmp_l[i]) == f(tmp_r[i]):\n",
  906. " a.append(tmp_l[n_iter])\n",
  907. " b.append(tmp_r[n_iter-1])\n",
  908. " else:\n",
  909. " a.append(tmp_l[n_iter-1])\n",
  910. " b.append(tmp_r[n_iter])\n",
  911. "\n",
  912. " left_borders.append(a)\n",
  913. " right_borders.append(b)\n",
  914. " x1.append(tmp_l)\n",
  915. " x2.append(tmp_r)\n",
  916. " \n",
  917. " return (a[n_iter] + b[n_iter]) / 2"
  918. ]
  919. },
  920. {
  921. "cell_type": "code",
  922. "execution_count": 16,
  923. "metadata": {},
  924. "outputs": [
  925. {
  926. "name": "stdout",
  927. "output_type": "stream",
  928. "text": [
  929. "0.577549180327869\n"
  930. ]
  931. }
  932. ],
  933. "source": [
  934. "left_borders = []\n",
  935. "right_borders = []\n",
  936. "x1 = []\n",
  937. "x2 = []\n",
  938. "f1 = []\n",
  939. "f2 = []\n",
  940. "\n",
  941. "print(fibbonacci_method(f, left_border, right_border, e, left_borders, right_borders, x1, x2, f1, f2))"
  942. ]
  943. },
  944. {
  945. "cell_type": "code",
  946. "execution_count": 17,
  947. "metadata": {},
  948. "outputs": [
  949. {
  950. "data": {
  951. "text/html": [
  952. "<div>\n",
  953. "<style scoped>\n",
  954. " .dataframe tbody tr th:only-of-type {\n",
  955. " vertical-align: middle;\n",
  956. " }\n",
  957. "\n",
  958. " .dataframe tbody tr th {\n",
  959. " vertical-align: top;\n",
  960. " }\n",
  961. "\n",
  962. " .dataframe thead th {\n",
  963. " text-align: right;\n",
  964. " }\n",
  965. "</style>\n",
  966. "<table border=\"1\" class=\"dataframe\">\n",
  967. " <thead>\n",
  968. " <tr style=\"text-align: right;\">\n",
  969. " <th></th>\n",
  970. " <th>Left border</th>\n",
  971. " <th>Length ratio</th>\n",
  972. " <th>Right border</th>\n",
  973. " <th>f(x1)</th>\n",
  974. " <th>f(x2)</th>\n",
  975. " <th>x1</th>\n",
  976. " <th>x2</th>\n",
  977. " </tr>\n",
  978. " </thead>\n",
  979. " <tbody>\n",
  980. " <tr>\n",
  981. " <th>0</th>\n",
  982. " <td>0.000000</td>\n",
  983. " <td>NaN</td>\n",
  984. " <td>1.000000</td>\n",
  985. " <td>-0.326239</td>\n",
  986. " <td>-0.381966</td>\n",
  987. " <td>0.381967</td>\n",
  988. " <td>0.618033</td>\n",
  989. " </tr>\n",
  990. " <tr>\n",
  991. " <th>1</th>\n",
  992. " <td>0.381967</td>\n",
  993. " <td>1.618037</td>\n",
  994. " <td>1.000000</td>\n",
  995. " <td>-0.326239</td>\n",
  996. " <td>-0.381966</td>\n",
  997. " <td>0.618033</td>\n",
  998. " <td>0.763934</td>\n",
  999. " </tr>\n",
  1000. " <tr>\n",
  1001. " <th>2</th>\n",
  1002. " <td>0.381967</td>\n",
  1003. " <td>1.618026</td>\n",
  1004. " <td>0.763934</td>\n",
  1005. " <td>-0.326239</td>\n",
  1006. " <td>-0.381966</td>\n",
  1007. " <td>0.527869</td>\n",
  1008. " <td>0.618033</td>\n",
  1009. " </tr>\n",
  1010. " <tr>\n",
  1011. " <th>3</th>\n",
  1012. " <td>0.527869</td>\n",
  1013. " <td>1.618056</td>\n",
  1014. " <td>0.763934</td>\n",
  1015. " <td>-0.326239</td>\n",
  1016. " <td>-0.381966</td>\n",
  1017. " <td>0.618033</td>\n",
  1018. " <td>0.673770</td>\n",
  1019. " </tr>\n",
  1020. " <tr>\n",
  1021. " <th>4</th>\n",
  1022. " <td>0.527869</td>\n",
  1023. " <td>1.617978</td>\n",
  1024. " <td>0.673770</td>\n",
  1025. " <td>-0.326239</td>\n",
  1026. " <td>-0.381966</td>\n",
  1027. " <td>0.583607</td>\n",
  1028. " <td>0.618033</td>\n",
  1029. " </tr>\n",
  1030. " <tr>\n",
  1031. " <th>5</th>\n",
  1032. " <td>0.527869</td>\n",
  1033. " <td>1.618182</td>\n",
  1034. " <td>0.618033</td>\n",
  1035. " <td>-0.326239</td>\n",
  1036. " <td>-0.381966</td>\n",
  1037. " <td>0.562295</td>\n",
  1038. " <td>0.583607</td>\n",
  1039. " </tr>\n",
  1040. " <tr>\n",
  1041. " <th>6</th>\n",
  1042. " <td>0.562295</td>\n",
  1043. " <td>1.617647</td>\n",
  1044. " <td>0.618033</td>\n",
  1045. " <td>-0.326239</td>\n",
  1046. " <td>-0.381966</td>\n",
  1047. " <td>0.583607</td>\n",
  1048. " <td>0.596721</td>\n",
  1049. " </tr>\n",
  1050. " <tr>\n",
  1051. " <th>7</th>\n",
  1052. " <td>0.562295</td>\n",
  1053. " <td>1.619048</td>\n",
  1054. " <td>0.596721</td>\n",
  1055. " <td>-0.326239</td>\n",
  1056. " <td>-0.381966</td>\n",
  1057. " <td>0.575410</td>\n",
  1058. " <td>0.583607</td>\n",
  1059. " </tr>\n",
  1060. " <tr>\n",
  1061. " <th>8</th>\n",
  1062. " <td>0.562295</td>\n",
  1063. " <td>1.615385</td>\n",
  1064. " <td>0.583607</td>\n",
  1065. " <td>-0.326239</td>\n",
  1066. " <td>-0.381966</td>\n",
  1067. " <td>0.570492</td>\n",
  1068. " <td>0.575410</td>\n",
  1069. " </tr>\n",
  1070. " <tr>\n",
  1071. " <th>9</th>\n",
  1072. " <td>0.570492</td>\n",
  1073. " <td>1.625000</td>\n",
  1074. " <td>0.583607</td>\n",
  1075. " <td>-0.326239</td>\n",
  1076. " <td>-0.381966</td>\n",
  1077. " <td>0.575410</td>\n",
  1078. " <td>0.578689</td>\n",
  1079. " </tr>\n",
  1080. " <tr>\n",
  1081. " <th>10</th>\n",
  1082. " <td>0.575410</td>\n",
  1083. " <td>1.600000</td>\n",
  1084. " <td>0.583607</td>\n",
  1085. " <td>-0.326239</td>\n",
  1086. " <td>-0.381966</td>\n",
  1087. " <td>0.578689</td>\n",
  1088. " <td>0.580328</td>\n",
  1089. " </tr>\n",
  1090. " <tr>\n",
  1091. " <th>11</th>\n",
  1092. " <td>0.575410</td>\n",
  1093. " <td>1.666667</td>\n",
  1094. " <td>0.580328</td>\n",
  1095. " <td>-0.326239</td>\n",
  1096. " <td>-0.381966</td>\n",
  1097. " <td>0.577049</td>\n",
  1098. " <td>0.578689</td>\n",
  1099. " </tr>\n",
  1100. " <tr>\n",
  1101. " <th>12</th>\n",
  1102. " <td>0.575410</td>\n",
  1103. " <td>1.500000</td>\n",
  1104. " <td>0.578689</td>\n",
  1105. " <td>-0.326239</td>\n",
  1106. " <td>-0.381966</td>\n",
  1107. " <td>0.577049</td>\n",
  1108. " <td>0.577049</td>\n",
  1109. " </tr>\n",
  1110. " <tr>\n",
  1111. " <th>13</th>\n",
  1112. " <td>0.575410</td>\n",
  1113. " <td>2.000000</td>\n",
  1114. " <td>0.577049</td>\n",
  1115. " <td>-0.326239</td>\n",
  1116. " <td>-0.381966</td>\n",
  1117. " <td>0.575410</td>\n",
  1118. " <td>0.577049</td>\n",
  1119. " </tr>\n",
  1120. " <tr>\n",
  1121. " <th>14</th>\n",
  1122. " <td>0.575410</td>\n",
  1123. " <td>1.000000</td>\n",
  1124. " <td>0.577049</td>\n",
  1125. " <td>-0.326239</td>\n",
  1126. " <td>-0.381966</td>\n",
  1127. " <td>0.577049</td>\n",
  1128. " <td>0.575410</td>\n",
  1129. " </tr>\n",
  1130. " <tr>\n",
  1131. " <th>15</th>\n",
  1132. " <td>0.577049</td>\n",
  1133. " <td>1.639344</td>\n",
  1134. " <td>0.578049</td>\n",
  1135. " <td>-0.326239</td>\n",
  1136. " <td>-0.381966</td>\n",
  1137. " <td>0.577049</td>\n",
  1138. " <td>0.578049</td>\n",
  1139. " </tr>\n",
  1140. " </tbody>\n",
  1141. "</table>\n",
  1142. "</div>"
  1143. ],
  1144. "text/plain": [
  1145. " Left border Length ratio Right border f(x1) f(x2) x1 \\\n",
  1146. "0 0.000000 NaN 1.000000 -0.326239 -0.381966 0.381967 \n",
  1147. "1 0.381967 1.618037 1.000000 -0.326239 -0.381966 0.618033 \n",
  1148. "2 0.381967 1.618026 0.763934 -0.326239 -0.381966 0.527869 \n",
  1149. "3 0.527869 1.618056 0.763934 -0.326239 -0.381966 0.618033 \n",
  1150. "4 0.527869 1.617978 0.673770 -0.326239 -0.381966 0.583607 \n",
  1151. "5 0.527869 1.618182 0.618033 -0.326239 -0.381966 0.562295 \n",
  1152. "6 0.562295 1.617647 0.618033 -0.326239 -0.381966 0.583607 \n",
  1153. "7 0.562295 1.619048 0.596721 -0.326239 -0.381966 0.575410 \n",
  1154. "8 0.562295 1.615385 0.583607 -0.326239 -0.381966 0.570492 \n",
  1155. "9 0.570492 1.625000 0.583607 -0.326239 -0.381966 0.575410 \n",
  1156. "10 0.575410 1.600000 0.583607 -0.326239 -0.381966 0.578689 \n",
  1157. "11 0.575410 1.666667 0.580328 -0.326239 -0.381966 0.577049 \n",
  1158. "12 0.575410 1.500000 0.578689 -0.326239 -0.381966 0.577049 \n",
  1159. "13 0.575410 2.000000 0.577049 -0.326239 -0.381966 0.575410 \n",
  1160. "14 0.575410 1.000000 0.577049 -0.326239 -0.381966 0.577049 \n",
  1161. "15 0.577049 1.639344 0.578049 -0.326239 -0.381966 0.577049 \n",
  1162. "\n",
  1163. " x2 \n",
  1164. "0 0.618033 \n",
  1165. "1 0.763934 \n",
  1166. "2 0.618033 \n",
  1167. "3 0.673770 \n",
  1168. "4 0.618033 \n",
  1169. "5 0.583607 \n",
  1170. "6 0.596721 \n",
  1171. "7 0.583607 \n",
  1172. "8 0.575410 \n",
  1173. "9 0.578689 \n",
  1174. "10 0.580328 \n",
  1175. "11 0.578689 \n",
  1176. "12 0.577049 \n",
  1177. "13 0.577049 \n",
  1178. "14 0.575410 \n",
  1179. "15 0.578049 "
  1180. ]
  1181. },
  1182. "execution_count": 17,
  1183. "metadata": {},
  1184. "output_type": "execute_result"
  1185. }
  1186. ],
  1187. "source": [
  1188. "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",
  1189. "lengths_ratio.insert(0, None)\n",
  1190. "\n",
  1191. "data = pd.DataFrame({\n",
  1192. " 'Left border' : left_borders[0],\n",
  1193. " 'Right border' : right_borders[0],\n",
  1194. " 'x1': x1[0],\n",
  1195. " 'x2': x2[0],\n",
  1196. " 'f(x1)' : f1[0],\n",
  1197. " 'f(x2)' : f2[0],\n",
  1198. " 'Length ratio' : lengths_ratio\n",
  1199. "})\n",
  1200. "data"
  1201. ]
  1202. },
  1203. {
  1204. "cell_type": "markdown",
  1205. "metadata": {},
  1206. "source": [
  1207. "### Поиск минимума функции на прямой"
  1208. ]
  1209. },
  1210. {
  1211. "cell_type": "code",
  1212. "execution_count": 18,
  1213. "metadata": {},
  1214. "outputs": [
  1215. {
  1216. "data": {
  1217. "text/plain": [
  1218. "[0.20469999999999997, 0.8190999999999999]"
  1219. ]
  1220. },
  1221. "execution_count": 18,
  1222. "metadata": {},
  1223. "output_type": "execute_result"
  1224. }
  1225. ],
  1226. "source": [
  1227. "def find_on_straight(f, x0, sigma = 0.0001):\n",
  1228. " if f(x0) > f(x0 + sigma):\n",
  1229. " x = x0 + sigma\n",
  1230. " h = sigma\n",
  1231. " else:\n",
  1232. " x = x0 - sigma\n",
  1233. " h = -sigma\n",
  1234. " while True: \n",
  1235. " h *= 2\n",
  1236. " x_next = x + h\n",
  1237. " \n",
  1238. " if f(x) > f(x_next):\n",
  1239. " x = x_next\n",
  1240. " else:\n",
  1241. " return [x - h / 2, x_next]\n",
  1242. " \n",
  1243. "find_on_straight(f, 0)"
  1244. ]
  1245. },
  1246. {
  1247. "cell_type": "markdown",
  1248. "metadata": {},
  1249. "source": [
  1250. "# Часть II\n",
  1251. "## Методы многомерного поиска экстремума. Методы первого порядка: метод наискорейшего спуска\n",
  1252. "### Вариант 5"
  1253. ]
  1254. },
  1255. {
  1256. "cell_type": "markdown",
  1257. "metadata": {},
  1258. "source": [
  1259. "Найдем частные производные функции\n",
  1260. "\n",
  1261. "$$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",
  1262. "\n",
  1263. "$$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",
  1264. "\n",
  1265. "$$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$$"
  1266. ]
  1267. },
  1268. {
  1269. "cell_type": "code",
  1270. "execution_count": 19,
  1271. "metadata": {},
  1272. "outputs": [],
  1273. "source": [
  1274. "def f(x):\n",
  1275. " 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"
  1276. ]
  1277. },
  1278. {
  1279. "cell_type": "markdown",
  1280. "metadata": {},
  1281. "source": [
  1282. "Аналитическое вычисление градиента"
  1283. ]
  1284. },
  1285. {
  1286. "cell_type": "code",
  1287. "execution_count": 20,
  1288. "metadata": {},
  1289. "outputs": [],
  1290. "source": [
  1291. "def theory_gradient(x1, x2):\n",
  1292. " 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",
  1293. " 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",
  1294. " \n",
  1295. " return np.array([derivative_x1, derivative_x2])"
  1296. ]
  1297. },
  1298. {
  1299. "cell_type": "markdown",
  1300. "metadata": {},
  1301. "source": [
  1302. "Численное вычисление градиента"
  1303. ]
  1304. },
  1305. {
  1306. "cell_type": "code",
  1307. "execution_count": 21,
  1308. "metadata": {},
  1309. "outputs": [],
  1310. "source": [
  1311. "# Метод двусторонней разности\n",
  1312. "def numerical_gradient(x1, x2, dx = 1e-6):\n",
  1313. " derivative_x1 = (f([x1 + dx, x2]) - f([x1 - dx, x2])) / (2*dx)\n",
  1314. " derivative_x2 = (f([x1, x2 + dx]) - f([x1, x2 - dx])) / (2*dx)\n",
  1315. " \n",
  1316. " return np.array([derivative_x1, derivative_x2])"
  1317. ]
  1318. },
  1319. {
  1320. "cell_type": "markdown",
  1321. "metadata": {},
  1322. "source": [
  1323. "### Реализация\n",
  1324. "\n",
  1325. "Метод одномерного поиска для величины шага"
  1326. ]
  1327. },
  1328. {
  1329. "cell_type": "code",
  1330. "execution_count": 22,
  1331. "metadata": {},
  1332. "outputs": [],
  1333. "source": [
  1334. "from scipy.constants import golden\n",
  1335. "\n",
  1336. "def golden_ratio(f, a, b, e, grad, x):\n",
  1337. " t = golden - 1\n",
  1338. " x1_n = a + (1 - t) * (b - a)\n",
  1339. " x2_n = a + t * (b - a)\n",
  1340. " f1_n = f(x - x1_n * grad)\n",
  1341. " f2_n = f(x - x2_n * grad)\n",
  1342. " e_n = (b - a) / 2\n",
  1343. " \n",
  1344. " while True: \n",
  1345. " if e_n <= e:\n",
  1346. " return (b + a) / 2\n",
  1347. " \n",
  1348. " if f1_n <= f2_n:\n",
  1349. " b = x2_n\n",
  1350. " x2_n = x1_n\n",
  1351. " f2_n = f1_n\n",
  1352. " x1_n = a + (1 - t) * (b - a)\n",
  1353. " f1_n = f(x - x1_n * grad)\n",
  1354. " else:\n",
  1355. " a = x1_n\n",
  1356. " x1_n = x2_n\n",
  1357. " f1_n = f2_n\n",
  1358. " x2_n = a + t * (b - a)\n",
  1359. " f2_n = f(x - x2_n * grad)\n",
  1360. " e_n = t * e_n"
  1361. ]
  1362. },
  1363. {
  1364. "cell_type": "code",
  1365. "execution_count": 23,
  1366. "metadata": {},
  1367. "outputs": [],
  1368. "source": [
  1369. "def find_on_straight(f, x0, grad, x_, sigma = 0.0001):\n",
  1370. " if f(x_ - x0 * grad) > f(x_ - (x0 + sigma) * grad):\n",
  1371. " x = x0 + sigma\n",
  1372. " h = sigma\n",
  1373. " else:\n",
  1374. " x = x0 - sigma\n",
  1375. " h = -sigma\n",
  1376. " while True: \n",
  1377. " h *= 2\n",
  1378. " x_next = x + h\n",
  1379. "\n",
  1380. " if f(x_ - x * grad) > f(x_ - x_next * grad):\n",
  1381. " x = x_next\n",
  1382. " else:\n",
  1383. " return [x - h / 2, x_next]"
  1384. ]
  1385. },
  1386. {
  1387. "cell_type": "markdown",
  1388. "metadata": {},
  1389. "source": [
  1390. "Алгоритм наискорейшего спуска"
  1391. ]
  1392. },
  1393. {
  1394. "cell_type": "code",
  1395. "execution_count": 81,
  1396. "metadata": {},
  1397. "outputs": [
  1398. {
  1399. "data": {
  1400. "text/plain": [
  1401. "(array([3.00288908, 0.50071582]), 1696)"
  1402. ]
  1403. },
  1404. "execution_count": 81,
  1405. "metadata": {},
  1406. "output_type": "execute_result"
  1407. }
  1408. ],
  1409. "source": [
  1410. "from numpy.linalg import norm\n",
  1411. "\n",
  1412. "def gradient_descent(f, gradient, x, e = 0.001, limit = 5000):\n",
  1413. " nit = 0\n",
  1414. " x_min = x.copy()\n",
  1415. " \n",
  1416. " for i in range(0, 5):\n",
  1417. " j = 0\n",
  1418. " x = x + np.array([30 * i * (-1)**i] * len(x))\n",
  1419. " grad = gradient(x[0], x[1])\n",
  1420. " grad = grad / norm(grad)\n",
  1421. " borders = find_on_straight(f, 0, grad, x)\n",
  1422. " h = golden_ratio(f, borders[0], borders[1], e = 0.0000001, grad = grad, x = x)\n",
  1423. " \n",
  1424. " while norm(gradient(x[0], x[1])) > e and j < limit:\n",
  1425. " j += 1\n",
  1426. " borders = find_on_straight(f, 0, grad, x)\n",
  1427. " h = golden_ratio(f, borders[0], borders[1], e = 0.0000001, grad = grad, x = x)\n",
  1428. " x = x - h * grad\n",
  1429. " grad = gradient(x[0], x[1])\n",
  1430. " grad = grad / norm(grad)\n",
  1431. " nit += 1\n",
  1432. " \n",
  1433. " if(f(x_min) > f(x)):\n",
  1434. " x_min = x.copy()\n",
  1435. " \n",
  1436. " return (x_min, nit)\n",
  1437. "\n",
  1438. "gradient_descent(f, theory_gradient, [100, 100], e = 0.001)"
  1439. ]
  1440. },
  1441. {
  1442. "cell_type": "markdown",
  1443. "metadata": {},
  1444. "source": [
  1445. "### Анализ сходимости"
  1446. ]
  1447. },
  1448. {
  1449. "cell_type": "code",
  1450. "execution_count": 25,
  1451. "metadata": {},
  1452. "outputs": [],
  1453. "source": [
  1454. "count = np.array([0])\n",
  1455. "\n",
  1456. "def wrap_f(x):\n",
  1457. " count[0] += 1\n",
  1458. " return f(x)\n",
  1459. "\n",
  1460. "def wrap_theory_gradient(x1, x2):\n",
  1461. " count[0] += 2\n",
  1462. " return theory_gradient(x1, x2)\n",
  1463. "\n",
  1464. "def wrap_numerical_gradient(x1, x2):\n",
  1465. " count[0] += 2\n",
  1466. " return numerical_gradient(x1, x2)"
  1467. ]
  1468. },
  1469. {
  1470. "cell_type": "code",
  1471. "execution_count": 86,
  1472. "metadata": {},
  1473. "outputs": [
  1474. {
  1475. "data": {
  1476. "text/html": [
  1477. "<div>\n",
  1478. "<style scoped>\n",
  1479. " .dataframe tbody tr th:only-of-type {\n",
  1480. " vertical-align: middle;\n",
  1481. " }\n",
  1482. "\n",
  1483. " .dataframe tbody tr th {\n",
  1484. " vertical-align: top;\n",
  1485. " }\n",
  1486. "\n",
  1487. " .dataframe thead th {\n",
  1488. " text-align: right;\n",
  1489. " }\n",
  1490. "</style>\n",
  1491. "<table border=\"1\" class=\"dataframe\">\n",
  1492. " <thead>\n",
  1493. " <tr style=\"text-align: right;\">\n",
  1494. " <th></th>\n",
  1495. " <th>Значение x1</th>\n",
  1496. " <th>Значение x2</th>\n",
  1497. " <th>Колличество вычислений</th>\n",
  1498. " <th>Колличество итераций</th>\n",
  1499. " <th>Точность</th>\n",
  1500. " </tr>\n",
  1501. " </thead>\n",
  1502. " <tbody>\n",
  1503. " <tr>\n",
  1504. " <th>0</th>\n",
  1505. " <td>2.997108</td>\n",
  1506. " <td>0.499282</td>\n",
  1507. " <td>269923</td>\n",
  1508. " <td>15127</td>\n",
  1509. " <td>0.001</td>\n",
  1510. " </tr>\n",
  1511. " <tr>\n",
  1512. " <th>1</th>\n",
  1513. " <td>2.993840</td>\n",
  1514. " <td>0.498468</td>\n",
  1515. " <td>201439</td>\n",
  1516. " <td>8591</td>\n",
  1517. " <td>0.002</td>\n",
  1518. " </tr>\n",
  1519. " <tr>\n",
  1520. " <th>2</th>\n",
  1521. " <td>3.007099</td>\n",
  1522. " <td>0.501725</td>\n",
  1523. " <td>76955</td>\n",
  1524. " <td>2628</td>\n",
  1525. " <td>0.003</td>\n",
  1526. " </tr>\n",
  1527. " <tr>\n",
  1528. " <th>3</th>\n",
  1529. " <td>3.009583</td>\n",
  1530. " <td>0.502327</td>\n",
  1531. " <td>141519</td>\n",
  1532. " <td>4371</td>\n",
  1533. " <td>0.004</td>\n",
  1534. " </tr>\n",
  1535. " <tr>\n",
  1536. " <th>4</th>\n",
  1537. " <td>2.988893</td>\n",
  1538. " <td>0.497287</td>\n",
  1539. " <td>144254</td>\n",
  1540. " <td>5375</td>\n",
  1541. " <td>0.005</td>\n",
  1542. " </tr>\n",
  1543. " <tr>\n",
  1544. " <th>5</th>\n",
  1545. " <td>2.983587</td>\n",
  1546. " <td>0.495902</td>\n",
  1547. " <td>3485</td>\n",
  1548. " <td>69</td>\n",
  1549. " <td>0.006</td>\n",
  1550. " </tr>\n",
  1551. " <tr>\n",
  1552. " <th>6</th>\n",
  1553. " <td>2.979580</td>\n",
  1554. " <td>0.494894</td>\n",
  1555. " <td>3269</td>\n",
  1556. " <td>60</td>\n",
  1557. " <td>0.007</td>\n",
  1558. " </tr>\n",
  1559. " <tr>\n",
  1560. " <th>7</th>\n",
  1561. " <td>2.977210</td>\n",
  1562. " <td>0.494295</td>\n",
  1563. " <td>3197</td>\n",
  1564. " <td>58</td>\n",
  1565. " <td>0.008</td>\n",
  1566. " </tr>\n",
  1567. " <tr>\n",
  1568. " <th>8</th>\n",
  1569. " <td>2.974556</td>\n",
  1570. " <td>0.493624</td>\n",
  1571. " <td>3125</td>\n",
  1572. " <td>56</td>\n",
  1573. " <td>0.009</td>\n",
  1574. " </tr>\n",
  1575. " <tr>\n",
  1576. " <th>9</th>\n",
  1577. " <td>2.971582</td>\n",
  1578. " <td>0.492870</td>\n",
  1579. " <td>3053</td>\n",
  1580. " <td>54</td>\n",
  1581. " <td>0.010</td>\n",
  1582. " </tr>\n",
  1583. " <tr>\n",
  1584. " <th>10</th>\n",
  1585. " <td>2.968247</td>\n",
  1586. " <td>0.492022</td>\n",
  1587. " <td>2981</td>\n",
  1588. " <td>52</td>\n",
  1589. " <td>0.011</td>\n",
  1590. " </tr>\n",
  1591. " <tr>\n",
  1592. " <th>11</th>\n",
  1593. " <td>2.968247</td>\n",
  1594. " <td>0.492022</td>\n",
  1595. " <td>2981</td>\n",
  1596. " <td>52</td>\n",
  1597. " <td>0.012</td>\n",
  1598. " </tr>\n",
  1599. " <tr>\n",
  1600. " <th>12</th>\n",
  1601. " <td>2.964509</td>\n",
  1602. " <td>0.491069</td>\n",
  1603. " <td>2909</td>\n",
  1604. " <td>50</td>\n",
  1605. " <td>0.013</td>\n",
  1606. " </tr>\n",
  1607. " <tr>\n",
  1608. " <th>13</th>\n",
  1609. " <td>2.960306</td>\n",
  1610. " <td>0.489994</td>\n",
  1611. " <td>2837</td>\n",
  1612. " <td>48</td>\n",
  1613. " <td>0.014</td>\n",
  1614. " </tr>\n",
  1615. " <tr>\n",
  1616. " <th>14</th>\n",
  1617. " <td>2.960306</td>\n",
  1618. " <td>0.489994</td>\n",
  1619. " <td>2837</td>\n",
  1620. " <td>48</td>\n",
  1621. " <td>0.015</td>\n",
  1622. " </tr>\n",
  1623. " <tr>\n",
  1624. " <th>15</th>\n",
  1625. " <td>2.955583</td>\n",
  1626. " <td>0.488782</td>\n",
  1627. " <td>2758</td>\n",
  1628. " <td>46</td>\n",
  1629. " <td>0.016</td>\n",
  1630. " </tr>\n",
  1631. " <tr>\n",
  1632. " <th>16</th>\n",
  1633. " <td>2.955583</td>\n",
  1634. " <td>0.488782</td>\n",
  1635. " <td>2758</td>\n",
  1636. " <td>46</td>\n",
  1637. " <td>0.017</td>\n",
  1638. " </tr>\n",
  1639. " <tr>\n",
  1640. " <th>17</th>\n",
  1641. " <td>2.950264</td>\n",
  1642. " <td>0.487411</td>\n",
  1643. " <td>2679</td>\n",
  1644. " <td>44</td>\n",
  1645. " <td>0.018</td>\n",
  1646. " </tr>\n",
  1647. " <tr>\n",
  1648. " <th>18</th>\n",
  1649. " <td>2.950264</td>\n",
  1650. " <td>0.487411</td>\n",
  1651. " <td>2679</td>\n",
  1652. " <td>44</td>\n",
  1653. " <td>0.019</td>\n",
  1654. " </tr>\n",
  1655. " </tbody>\n",
  1656. "</table>\n",
  1657. "</div>"
  1658. ],
  1659. "text/plain": [
  1660. " Значение x1 Значение x2 Колличество вычислений Колличество итераций \\\n",
  1661. "0 2.997108 0.499282 269923 15127 \n",
  1662. "1 2.993840 0.498468 201439 8591 \n",
  1663. "2 3.007099 0.501725 76955 2628 \n",
  1664. "3 3.009583 0.502327 141519 4371 \n",
  1665. "4 2.988893 0.497287 144254 5375 \n",
  1666. "5 2.983587 0.495902 3485 69 \n",
  1667. "6 2.979580 0.494894 3269 60 \n",
  1668. "7 2.977210 0.494295 3197 58 \n",
  1669. "8 2.974556 0.493624 3125 56 \n",
  1670. "9 2.971582 0.492870 3053 54 \n",
  1671. "10 2.968247 0.492022 2981 52 \n",
  1672. "11 2.968247 0.492022 2981 52 \n",
  1673. "12 2.964509 0.491069 2909 50 \n",
  1674. "13 2.960306 0.489994 2837 48 \n",
  1675. "14 2.960306 0.489994 2837 48 \n",
  1676. "15 2.955583 0.488782 2758 46 \n",
  1677. "16 2.955583 0.488782 2758 46 \n",
  1678. "17 2.950264 0.487411 2679 44 \n",
  1679. "18 2.950264 0.487411 2679 44 \n",
  1680. "\n",
  1681. " Точность \n",
  1682. "0 0.001 \n",
  1683. "1 0.002 \n",
  1684. "2 0.003 \n",
  1685. "3 0.004 \n",
  1686. "4 0.005 \n",
  1687. "5 0.006 \n",
  1688. "6 0.007 \n",
  1689. "7 0.008 \n",
  1690. "8 0.009 \n",
  1691. "9 0.010 \n",
  1692. "10 0.011 \n",
  1693. "11 0.012 \n",
  1694. "12 0.013 \n",
  1695. "13 0.014 \n",
  1696. "14 0.015 \n",
  1697. "15 0.016 \n",
  1698. "16 0.017 \n",
  1699. "17 0.018 \n",
  1700. "18 0.019 "
  1701. ]
  1702. },
  1703. "execution_count": 86,
  1704. "metadata": {},
  1705. "output_type": "execute_result"
  1706. }
  1707. ],
  1708. "source": [
  1709. "iters = []\n",
  1710. "counts = []\n",
  1711. "errors = []\n",
  1712. "x1 = []\n",
  1713. "x2 = []\n",
  1714. "\n",
  1715. "for e in np.arange(0.001, 0.02, 0.001):\n",
  1716. " count[0] = 0\n",
  1717. " res = gradient_descent(wrap_f, wrap_theory_gradient, [0, 0], e = e)\n",
  1718. " counts.append(count[0])\n",
  1719. " iters.append(res[1])\n",
  1720. " errors.append(e)\n",
  1721. " x1.append(res[0][0])\n",
  1722. " x2.append(res[0][1])\n",
  1723. "\n",
  1724. "data = pd.DataFrame({\n",
  1725. " 'Колличество итераций' : iters,\n",
  1726. " 'Колличество вычислений': counts,\n",
  1727. " 'Точность': errors,\n",
  1728. " 'Значение x1' : x1,\n",
  1729. " 'Значение x2' : x2\n",
  1730. "})\n",
  1731. "\n",
  1732. "data"
  1733. ]
  1734. },
  1735. {
  1736. "cell_type": "code",
  1737. "execution_count": 87,
  1738. "metadata": {},
  1739. "outputs": [
  1740. {
  1741. "data": {
  1742. "text/html": [
  1743. "<div>\n",
  1744. "<style scoped>\n",
  1745. " .dataframe tbody tr th:only-of-type {\n",
  1746. " vertical-align: middle;\n",
  1747. " }\n",
  1748. "\n",
  1749. " .dataframe tbody tr th {\n",
  1750. " vertical-align: top;\n",
  1751. " }\n",
  1752. "\n",
  1753. " .dataframe thead th {\n",
  1754. " text-align: right;\n",
  1755. " }\n",
  1756. "</style>\n",
  1757. "<table border=\"1\" class=\"dataframe\">\n",
  1758. " <thead>\n",
  1759. " <tr style=\"text-align: right;\">\n",
  1760. " <th></th>\n",
  1761. " <th>Значение x1</th>\n",
  1762. " <th>Значение x2</th>\n",
  1763. " <th>Колличество вычислений</th>\n",
  1764. " <th>Колличество итераций</th>\n",
  1765. " <th>Точность</th>\n",
  1766. " </tr>\n",
  1767. " </thead>\n",
  1768. " <tbody>\n",
  1769. " <tr>\n",
  1770. " <th>0</th>\n",
  1771. " <td>2.997108</td>\n",
  1772. " <td>0.499282</td>\n",
  1773. " <td>264753</td>\n",
  1774. " <td>14698</td>\n",
  1775. " <td>0.001</td>\n",
  1776. " </tr>\n",
  1777. " <tr>\n",
  1778. " <th>1</th>\n",
  1779. " <td>2.994444</td>\n",
  1780. " <td>0.498619</td>\n",
  1781. " <td>246605</td>\n",
  1782. " <td>13842</td>\n",
  1783. " <td>0.002</td>\n",
  1784. " </tr>\n",
  1785. " <tr>\n",
  1786. " <th>2</th>\n",
  1787. " <td>3.007156</td>\n",
  1788. " <td>0.501739</td>\n",
  1789. " <td>105016</td>\n",
  1790. " <td>4158</td>\n",
  1791. " <td>0.003</td>\n",
  1792. " </tr>\n",
  1793. " <tr>\n",
  1794. " <th>3</th>\n",
  1795. " <td>2.988147</td>\n",
  1796. " <td>0.497046</td>\n",
  1797. " <td>81870</td>\n",
  1798. " <td>2397</td>\n",
  1799. " <td>0.004</td>\n",
  1800. " </tr>\n",
  1801. " <tr>\n",
  1802. " <th>4</th>\n",
  1803. " <td>2.985272</td>\n",
  1804. " <td>0.496326</td>\n",
  1805. " <td>24299</td>\n",
  1806. " <td>689</td>\n",
  1807. " <td>0.005</td>\n",
  1808. " </tr>\n",
  1809. " <tr>\n",
  1810. " <th>5</th>\n",
  1811. " <td>2.983574</td>\n",
  1812. " <td>0.495899</td>\n",
  1813. " <td>3485</td>\n",
  1814. " <td>69</td>\n",
  1815. " <td>0.006</td>\n",
  1816. " </tr>\n",
  1817. " <tr>\n",
  1818. " <th>6</th>\n",
  1819. " <td>2.979559</td>\n",
  1820. " <td>0.494888</td>\n",
  1821. " <td>3269</td>\n",
  1822. " <td>60</td>\n",
  1823. " <td>0.007</td>\n",
  1824. " </tr>\n",
  1825. " <tr>\n",
  1826. " <th>7</th>\n",
  1827. " <td>2.977186</td>\n",
  1828. " <td>0.494289</td>\n",
  1829. " <td>3197</td>\n",
  1830. " <td>58</td>\n",
  1831. " <td>0.008</td>\n",
  1832. " </tr>\n",
  1833. " <tr>\n",
  1834. " <th>8</th>\n",
  1835. " <td>2.974529</td>\n",
  1836. " <td>0.493617</td>\n",
  1837. " <td>3125</td>\n",
  1838. " <td>56</td>\n",
  1839. " <td>0.009</td>\n",
  1840. " </tr>\n",
  1841. " <tr>\n",
  1842. " <th>9</th>\n",
  1843. " <td>2.971557</td>\n",
  1844. " <td>0.492864</td>\n",
  1845. " <td>3053</td>\n",
  1846. " <td>54</td>\n",
  1847. " <td>0.010</td>\n",
  1848. " </tr>\n",
  1849. " <tr>\n",
  1850. " <th>10</th>\n",
  1851. " <td>2.968226</td>\n",
  1852. " <td>0.492017</td>\n",
  1853. " <td>2981</td>\n",
  1854. " <td>52</td>\n",
  1855. " <td>0.011</td>\n",
  1856. " </tr>\n",
  1857. " <tr>\n",
  1858. " <th>11</th>\n",
  1859. " <td>2.968226</td>\n",
  1860. " <td>0.492017</td>\n",
  1861. " <td>2981</td>\n",
  1862. " <td>52</td>\n",
  1863. " <td>0.012</td>\n",
  1864. " </tr>\n",
  1865. " <tr>\n",
  1866. " <th>12</th>\n",
  1867. " <td>2.964487</td>\n",
  1868. " <td>0.491064</td>\n",
  1869. " <td>2909</td>\n",
  1870. " <td>50</td>\n",
  1871. " <td>0.013</td>\n",
  1872. " </tr>\n",
  1873. " <tr>\n",
  1874. " <th>13</th>\n",
  1875. " <td>2.960289</td>\n",
  1876. " <td>0.489990</td>\n",
  1877. " <td>2837</td>\n",
  1878. " <td>48</td>\n",
  1879. " <td>0.014</td>\n",
  1880. " </tr>\n",
  1881. " <tr>\n",
  1882. " <th>14</th>\n",
  1883. " <td>2.960289</td>\n",
  1884. " <td>0.489990</td>\n",
  1885. " <td>2837</td>\n",
  1886. " <td>48</td>\n",
  1887. " <td>0.015</td>\n",
  1888. " </tr>\n",
  1889. " <tr>\n",
  1890. " <th>15</th>\n",
  1891. " <td>2.955565</td>\n",
  1892. " <td>0.488778</td>\n",
  1893. " <td>2758</td>\n",
  1894. " <td>46</td>\n",
  1895. " <td>0.016</td>\n",
  1896. " </tr>\n",
  1897. " <tr>\n",
  1898. " <th>16</th>\n",
  1899. " <td>2.955565</td>\n",
  1900. " <td>0.488778</td>\n",
  1901. " <td>2758</td>\n",
  1902. " <td>46</td>\n",
  1903. " <td>0.017</td>\n",
  1904. " </tr>\n",
  1905. " <tr>\n",
  1906. " <th>17</th>\n",
  1907. " <td>2.950247</td>\n",
  1908. " <td>0.487407</td>\n",
  1909. " <td>2679</td>\n",
  1910. " <td>44</td>\n",
  1911. " <td>0.018</td>\n",
  1912. " </tr>\n",
  1913. " <tr>\n",
  1914. " <th>18</th>\n",
  1915. " <td>2.950247</td>\n",
  1916. " <td>0.487407</td>\n",
  1917. " <td>2679</td>\n",
  1918. " <td>44</td>\n",
  1919. " <td>0.019</td>\n",
  1920. " </tr>\n",
  1921. " </tbody>\n",
  1922. "</table>\n",
  1923. "</div>"
  1924. ],
  1925. "text/plain": [
  1926. " Значение x1 Значение x2 Колличество вычислений Колличество итераций \\\n",
  1927. "0 2.997108 0.499282 264753 14698 \n",
  1928. "1 2.994444 0.498619 246605 13842 \n",
  1929. "2 3.007156 0.501739 105016 4158 \n",
  1930. "3 2.988147 0.497046 81870 2397 \n",
  1931. "4 2.985272 0.496326 24299 689 \n",
  1932. "5 2.983574 0.495899 3485 69 \n",
  1933. "6 2.979559 0.494888 3269 60 \n",
  1934. "7 2.977186 0.494289 3197 58 \n",
  1935. "8 2.974529 0.493617 3125 56 \n",
  1936. "9 2.971557 0.492864 3053 54 \n",
  1937. "10 2.968226 0.492017 2981 52 \n",
  1938. "11 2.968226 0.492017 2981 52 \n",
  1939. "12 2.964487 0.491064 2909 50 \n",
  1940. "13 2.960289 0.489990 2837 48 \n",
  1941. "14 2.960289 0.489990 2837 48 \n",
  1942. "15 2.955565 0.488778 2758 46 \n",
  1943. "16 2.955565 0.488778 2758 46 \n",
  1944. "17 2.950247 0.487407 2679 44 \n",
  1945. "18 2.950247 0.487407 2679 44 \n",
  1946. "\n",
  1947. " Точность \n",
  1948. "0 0.001 \n",
  1949. "1 0.002 \n",
  1950. "2 0.003 \n",
  1951. "3 0.004 \n",
  1952. "4 0.005 \n",
  1953. "5 0.006 \n",
  1954. "6 0.007 \n",
  1955. "7 0.008 \n",
  1956. "8 0.009 \n",
  1957. "9 0.010 \n",
  1958. "10 0.011 \n",
  1959. "11 0.012 \n",
  1960. "12 0.013 \n",
  1961. "13 0.014 \n",
  1962. "14 0.015 \n",
  1963. "15 0.016 \n",
  1964. "16 0.017 \n",
  1965. "17 0.018 \n",
  1966. "18 0.019 "
  1967. ]
  1968. },
  1969. "execution_count": 87,
  1970. "metadata": {},
  1971. "output_type": "execute_result"
  1972. }
  1973. ],
  1974. "source": [
  1975. "iters = []\n",
  1976. "counts = []\n",
  1977. "errors = []\n",
  1978. "x1 = []\n",
  1979. "x2 = []\n",
  1980. "\n",
  1981. "for e in np.arange(0.001, 0.02, 0.001):\n",
  1982. " count[0] = 0\n",
  1983. " res = gradient_descent(wrap_f, wrap_numerical_gradient, [0, 0], e = e)\n",
  1984. " counts.append(count[0])\n",
  1985. " iters.append(res[1])\n",
  1986. " errors.append(e)\n",
  1987. " x1.append(res[0][0])\n",
  1988. " x2.append(res[0][1])\n",
  1989. "\n",
  1990. "data = pd.DataFrame({\n",
  1991. " 'Колличество итераций' : iters,\n",
  1992. " 'Колличество вычислений': counts,\n",
  1993. " 'Точность': errors,\n",
  1994. " 'Значение x1' : x1,\n",
  1995. " 'Значение x2' : x2\n",
  1996. "})\n",
  1997. "\n",
  1998. "data"
  1999. ]
  2000. }
  2001. ],
  2002. "metadata": {
  2003. "kernelspec": {
  2004. "display_name": "Python 3",
  2005. "language": "python",
  2006. "name": "python3"
  2007. },
  2008. "language_info": {
  2009. "codemirror_mode": {
  2010. "name": "ipython",
  2011. "version": 3
  2012. },
  2013. "file_extension": ".py",
  2014. "mimetype": "text/x-python",
  2015. "name": "python",
  2016. "nbconvert_exporter": "python",
  2017. "pygments_lexer": "ipython3",
  2018. "version": "3.5.6"
  2019. }
  2020. },
  2021. "nbformat": 4,
  2022. "nbformat_minor": 2
  2023. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement