{"nbformat":4,"nbformat_minor":0,"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.8.5"},"colab":{"name":"code_interpol.ipynb","provenance":[]}},"cells":[{"cell_type":"markdown","metadata":{"id":"HnDXdE43EuFS"},"source":["# Интерполяция"]},{"cell_type":"markdown","metadata":{"id":"oLIjiU-jEuFm"},"source":["## Понятие интерполяции"]},{"cell_type":"markdown","metadata":{"id":"DVD9CUMsEuFo"},"source":["Пусть дана неизвестная функция $f$, причем известны ее значения $y_0, y_1, ..., y_{N-1}$ в точках $x_0, x_1, ..., x_{N-1}$ соответсвенно, причем $x_i > x_{i - 1}, i = 1, ..., N-1$ (точки монотонно возрастают). Тогда задачу отыскания значения функции $f$ в какой-либо точке $x \\in [x_0, x_{N - 1}]$ назовем задачей интерполяции."]},{"cell_type":"markdown","metadata":{"id":"Gi0P12feEuFp"},"source":["Существует множество видов интерполяции, отличающиеся точностью и вычислительной сложносью. Рассмотрим самый простой из них - линейную интерполяцию."]},{"cell_type":"markdown","metadata":{"id":"_R9KVu3-EuFq"},"source":["## Линейная интерполяция"]},{"cell_type":"markdown","metadata":{"id":"adJYaXzcEuFq"},"source":["Линейная интерполяция - самый простой тип интерполяции. Полагается, что на промежутке между двумя соседними точками функция ведет себя как прямая. Для построения интерполяции необходимо сделать следующие шаги:\n","* вычисление для каждого отрезка наклона прямой\n","* вычисление для каждого отрезка свободного коэффициента прямой\n","* способ нахождения отрезка $[x_{i-1}, x_i]$, которому принадлежит произволная точка $x$\n","\n","Вычислим сначала коэффициенты прямой на каждом отрезке. Известно, что на отрезке $[x_{i-1}, x_i]$ прямая проходит через точки $(x_{i-1}, y_{i-1}), (x_{i}, y_{i})$. Это означает, что ее коэффициент наклона и свободный коэффициент равны: \n","$$\n","k = \\frac{y_i - y_{i-1}}{x_i - x_{i - 1}},\\\\\n","b = y_i - k * x_i\n","$$\n","\n","Для простоты положим, что расстояния между любыми соседними точками из $x_1, x_2, ..., x_{N-1}$ постянны и равны шагу $h$. То есть $x_i = x_0 + i * h$. Тогда задача определениz отрезка, которому принадлежит точка $x$, сводится к следующему:\n","\n","$$\n","i = floor(\\frac{x - x_0}{h})\n","$$\n","\n","где $floor$ - округление до целого числа вниз.\n","\n","В случае, когда разбиение отрезка неравномерно (соседние точки имеют разное расстояние) нахождение отрезка, которому принадлежит точка, может быть сделано, например, половинным делением, (а если вам не жалко Ваш компьютер, то и перебором всех отрезков).\n","\n","Реализуем функцию линейной интерполяции!"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":265},"id":"XXmlBt9pEuFr","executionInfo":{"status":"ok","timestamp":1611723756554,"user_tz":-180,"elapsed":1664,"user":{"displayName":"Елизавета Анатольевна Ежова","photoUrl":"","userId":"14939378082555044100"}},"outputId":"6b9fb11c-cde5-49b2-c01d-94a1e0a7c828"},"source":["import numpy as np\n","import matplotlib.pyplot as plt\n","\n","\n","\n","def calc_coefs(x_array, y_array):\n","    \"\"\"\n","    Фукция подсчета коэффициентов линейной интерполяции\n","    \"\"\"\n","    k_coefs =(y_array[1:] - y_array[:-1]) / (x_array[1:] - x_array[:-1])  # помним про sclice ?\n","    # y[1:] - массив всех y, начиная с единицы (эквивалентно y[1: len(y)])\n","    # y[: -1] - массив всех y, кроме последнего (эквивалентно y[0:len(y) - 1])\n","    # для x аналогично\n","    b_coefs = y_array[1:] - k_coefs * x_array[1:]\n","    return k_coefs, b_coefs\n","\n","def linear_interpolation(x, x_array, step, k_coefs, b_coefs):\n","    \"\"\"\n","    Функций линейной интерполяции\n","    \"\"\"\n","    if x == x_array[-1]:\n","        return k_coefs[-1] * x + b_coefs[-1]\n","    number_of_section = int(np.floor((x - x_array[0]) / step))\n","    return k_coefs[number_of_section] * x + b_coefs[number_of_section]\n","\n","h = 0.4\n","x_ar = np.linspace(0, 2, 6)  # точки от 0 до 2 с шагом h\n","y_ar = np.sin(x_ar)  # массив значений функции\n","\n","k_coefs, b_coefs = calc_coefs(x_ar, y_ar)\n","x_interpolated = []\n","y_interpolated = []\n","for t in np.arange(0, 2, 0.01):\n","    x_interpolated.append(t)\n","    y_interpolated.append(linear_interpolation(t, x_ar, h, k_coefs, b_coefs))\n","\n","plt.plot(x_interpolated, y_interpolated)\n","plt.show()\n"],"execution_count":1,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]}]}