From 00e233507a6e81f7142fa0d9addd23a2b1287928 Mon Sep 17 00:00:00 2001 From: Andrey Golikov Date: Fri, 17 Feb 2023 17:19:12 +0600 Subject: [PATCH] Initial commit --- task1.ipynb | 205 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 task1.ipynb diff --git a/task1.ipynb b/task1.ipynb new file mode 100644 index 0000000..88abd88 --- /dev/null +++ b/task1.ipynb @@ -0,0 +1,205 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "from typing import Callable" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "precision = 3\n", + "eps = 1 / precision\n", + "\n", + "def dichotomy(a: float, b: float, func: Callable[[float], float]) -> float:\n", + " while True:\n", + " x = (a + b) / 2\n", + "\n", + " x1 = x - eps / 2\n", + " f1 = func(x1)\n", + "\n", + " x2 = x + eps / 2\n", + " f2 = func(x2)\n", + "\n", + " if f1 > f2:\n", + " a = x1\n", + " else:\n", + " b = x2\n", + " \n", + " if abs(a - b) <= 2 * eps:\n", + " break\n", + " return round(func((a + b) / 2), precision)\n", + "\n", + "\n", + "def fibonacci(a: float, b: float, func: Callable[[float], float]) -> float:\n", + " n: int = 1000\n", + " fibonacciSequence = [1, 1]\n", + " \n", + " for i in range(1, n - 1):\n", + " fibonacciSequence.append(fibonacciSequence[i - 1] + fibonacciSequence[i])\n", + " \n", + " L = b - a\n", + " while n > 2:\n", + " x1 = a + L * fibonacciSequence[n - 2] / fibonacciSequence[n - 1]\n", + " x2 = b - L * fibonacciSequence[n - 2] / fibonacciSequence[n - 1]\n", + "\n", + " f1 = func(x1)\n", + " f2 = func(x2)\n", + "\n", + " if f1 > f2:\n", + " b = x1\n", + " f1 = f2\n", + " x1 = x2\n", + " L = b - a\n", + " x2 = a + (b - x1)\n", + " f2 = func(x2)\n", + " else:\n", + " a = x2\n", + " f2 = f1\n", + " x2 = x1\n", + " L = b - a\n", + " x1 = b - (x2 - a)\n", + " f1 = func(x1)\n", + " \n", + " n -= 1\n", + " return round(min(f1, f2), precision)\n", + "\n", + "\n", + "def goldenRatio(a: float, b: float, func: Callable[[float], float]) -> float:\n", + " ratio = 0.618\n", + " while True:\n", + " L: float = abs(a - b)\n", + "\n", + " x1 = a + L * ratio\n", + " x2 = b - L * ratio\n", + "\n", + " f1 = func(x1)\n", + " f2 = func(x2)\n", + "\n", + " if f1 > f2:\n", + " b = x1\n", + " f1 = f2\n", + " x1 = x2\n", + " L = b - a\n", + " x2 = a + (b - x1)\n", + " f2 = func(x2)\n", + " else:\n", + " a = x2\n", + " f2 = f1\n", + " x2 = x1\n", + " L = b - a\n", + " x1 = b - (x2 - a)\n", + " f1 = func(x1)\n", + " \n", + " if L <= eps:\n", + " break\n", + " return round(min(f1, f2), precision)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "func = lambda x: (x - 15)**2 + 5\n", + "a = 12\n", + "b = 20" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5.0003370667" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dichotomy(a, b, func)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5.0" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fibonacci(a, b, func)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5.0000883205" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "goldenRatio(a, b, func)" + ] + } + ], + "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.10.4" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "d68a9a56d9a25e4bd7befbd53d862537883bbf75717698e3f2bd31fa571ddf98" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}