{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Интерполяция функций, аппроксимация функций\n", "\n", "## Интерполяция\n", "\n", "Подмодуль [scipy.interpolate](https://docs.scipy.org/doc/scipy/reference/interpolate.html#module-scipy.interpolate) содержит в себе методы для интерполяции.\n", "\n", "Коротко про интерполяцию можно почитать в [википедии](https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D0%BE%D0%BB%D1%8F%D1%86%D0%B8%D1%8F). Более подробное изложение можно найти в {cite}`Samarsky`.\n", "\n", "> Задача интерполирования состоит в том, чтобы по значениям функции $f(x)$ в нескольких точках отрезка восстановить ее значения в остальных точках этого отрезка. Разумеется, такая задача допускает сколь угодно много решений. Задача интерполирования возникает, например, в том случае, когда известны результаты измерения $y_h= f(x, k)$ некоторой физической величины $f(x)$ в точках $x_k, k = 0, 1, ..., n$, и требуется определить ее значения в других точках. Интерполирование используется также при сгущении таблиц, когда вычисление значений $f(x)$ трудоемко. Иногда возникает необходимость приближенной замены или аппроксимации данной функции другими функциями, которые легче вычислить. В частности, рассматривается задача о наилучшем приближении в нормированном пространстве $H$, когда заданную функцию $f\\in H$ требуется заменить линейной комбинацией $\\phi$ заданных элементов из $H$ так, чтобы отклонение $||f—\\phi||$ было минимальным. Результаты и методы теории интерполирования и приближения функций нашли широкое применение в численном анализе, например при выводе формул численного дифференцирования и интегрирования, при построении сеточных аналогов задач математической физики {cite}`Samarsky`.\n", "\n", "Для того чтобы рассмотреть интерполяцию, сгенерируем данные. Т.е. сгенерируем массив узлов интерполяционной сетки `x_data` и значений `y_data` некоторой функции $f$ в узлах этой сетки." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEWCAYAAABrDZDcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAA/zElEQVR4nO3deVxU9f7H8deHTVBUXHDHHRQERcXU0jLNskVtMa1ssVu3sjSjbL2ZZsvtXvtlVpZppe1lu2ldrdTMJddw3wBRcRcFQdnn+/tjBgICxGQ4M8zn+Xj4kDnnzMz7zHI+8z3L9yvGGJRSSnkuL6sDKKWUspYWAqWU8nBaCJRSysNpIVBKKQ+nhUAppTycFgKllPJwWgiUUsrDaSFQSikPp4VAWUJEkkTksiK3Q0QkS0SWWhhLKY+khUC5imeA01aHUMoTaSFQlhOR9sAI4LUi0y4UkeMiEuK43UVETopIR8ftcBFZKiKpIrJVRIaUeMy7RSRfRDIc/4zjeRCRUSKyvMTyySLSz/H3JBH5qJScl4lIUpHbzUTkKxE5JiJ7ROTBs6xneZnaichiEUlxrPfHIhJU5L4lW1B3F209FX0sx+3nRWSO4+/Wjvk+pWQqut5eIvKEiCQ4cswVkfrlrZOqHrQQKFfwLDALOFAwwRizEngbeF9EAoCPgAnGmB0i4gt8DywCGgFjgY9FpEORxxRgmTEm0BgTWNmBRcTLkWEj0BwYADwkIleUd7dyMgnwb6AZEA6EAJMqO/dZjAWuBS5x5DgJTK/iDMoCWgiUpUQkErgGeKmU2ZOAusAa7EWiYKPUCwgEXjLG5BhjFgPzgZuL3DcAyHFSbIAeQLAxZrIjQyL2YnZTOfcpM5MxJt4Y85MxJtsYcwx4BfsGuSrdB/zLGJNsjMnG/voPK60loaoXfYOV1SYDrxtjjolIsRnGmFzH7o3XgIfNn13lNgP2G2NsRRbfi/2XeYEmwLFynreXiKQWuV2nxPzhInINkAf8AdxbYn4roFmJx/AGfivnOcvMJCKNgWlAX6A29h9pJ0ss9q2I5Dn+9sNeIIvaICIFr4k/8FmJ+cdFxACHgReMMSV3f7UCvinyGAD5QGOKtNZU9aMtAmWlGKAf8HJpM0WkOTARmA38n4jUcMw6CIQ4ds8UaEnxjVVX7LttyvK7MSao4J/jMYua65jeDNgHvFhi/n5gT9HHMMbUNsZcVc5zlpfpRcAAUcaYOsCt2HcXFXVtkbylHY/oVmR+aa9pQ2NMPWAMMEdESu6e2g9cWWKd/I0xWgSqOS0EykqPAi8bY1JLzhB782AO8C5wF3AIeM4xezVwBnhMRHwdBzsH4/gFLCJRwMXAF+cb0BiTA2Tw1+/KGiBdRB4XkQAR8RaRSBHpUdrjVCBTbcfzpDkK4KPnm70cJ7EXmZKFZgbwgoi0AhCRYBEZ6sQcykVoIVBWyse+O6Q0D2I/EDzBsUvoTuBOEenr2DgPBq4EjgNvArc7DiS3xL4rJwDYUnCGjuMxvz+HbNc5zqg5AHQDni460xiTj/3YRjSwx5HjHezHNIqpYKZnHc+TBiwAvj6HrBWVJCLJwFzgHmNMeon504B5wCIRSQd+B3o6IYdyMaIjlKnqRERaA3OMMf1KmfezMeayv9zJAzMpVZS2CFR1k0fZB4nLO3jsTK6YSalC2iJQSikPpy0CpZTycG53HUHDhg1N69atrY6hlFJuZf369ceNMcGlzXO7QtC6dWvWrVtndQyllHIrIrK3rHm6a0gppTycFgKllPJwWgiUUsrDaSFQSikPp4VAqfNV8locvTZHuRmnFQIReU9EjorIljLmi4i8JiLxIrJJRLo5K4tSTjNpEsTG/rnxN8Z+e9IkK1MpdU6c2SKYAwwqZ/6VQKjj3z3AW07MolTlMwZSU2HatD+LQWys/XZqqrYMlNtw2nUExphljs62yjIU+MDRs+TvIhIkIk2NMYeclUmp85VvMxw+lcX+E2c4cTqHtJtjOeXditxVv8NF9sHJ/B5+hTojbqDulsM0CKxBSP0AGtf2x8urZK/PSrkGKy8oa459IIwCyY5pfykEInIP9lYDLVu2rJJwSmXl5rNh30k2J6ex5eApth1MY9+JM+Tml/il7xsGF4cVn/b15mI3/by9aNWgJp2a1SGyeV2imtclumUQNXy8nbwWSp2dW1xZbIyZCcwEiImJ0fa2cgpjDLuPZrBo62FWxKewft9JcvLsozY2DwogolkdBkY0oWX9moTUDyC4dg3q1PChzrMTqPH6n8MqZI8dR9rE5ziVlcfR9Gz2nzjD/pNnSDiaweo9J/g2zj4YWg0fL3q0rs9F7RtyeafGtAsuOWCYUlXDykJwAAgpcrsFOi6qskDCsQy+3pDMj5sPk3j8NACdmtXhjt6t6N2uAV1D6lGvlt9f71j0mMC4cTB1KsTG4jvtFQLJp/nUqYQ3LTkUMhzPyGbD3pOsSkxhVUIK//nfDv7zvx2ENQ5kUGRThnVrQcsGNZ292koVsrIQzAPGiMhn2EdBStPjA6qqZOXm8/3Gg8xdt5+1SSfx9hJ6t23AnX3acEVEYxrV8T/7g4hAUNCfRUDE/j/Yp0vpxwQaBtbg8k5NuLxTEwAOpmayaOthftxymDcW7+a1X3bTu20DbroghCsjm+Lno2d5K+dy2ngEIvIp9oHJGwJHsA9C7gtgjJnhGJP2DexnFp0B7jTGnLU3uZiYGKOdzqm/KyUjmw9/38uHq/aScjqHtg1rMbxHCNd3a06j2hXY+JfGmOIb/ZK3z8GhtEy+Wp/M3HXJ7Dtxhka1a3DHha0Z2bMlQTVLaZUoVUEist4YE1PqPHcbmEYLgfo7jqZnMWNpIh+v3kt2no0BHRtxV9829G7bAPmbG21nstkMv8Uf553fEvlt93Fq+nlzW+9W3Hdxu9J3Uyl1FloIlMdKPZPDW0sTeH9VErn5huu6Nue+S9rSvlFtq6NV2PZDp5jxawLzNh6kpq83/+jThnsubkttf1+royk3ooVAeZy8fBsfr97H1J93kZaZy9AuzRh3WRhtGtayOtrftutIOq/+vIsfNh+mYaAf4y/vwI0xIXjr9QmqArQQKI+yKiGFifO2sOtIBhe2a8CEayJKPXvHXW1KTuXZ77exfu9JOjWrw+ShkXRvVc/qWMrFaSFQHiHtTC4v/rCdz9ftJ6R+AE9fHcHlEY1d8hjA+TLG8P2mQ/z7h+0cPpXF7b1a8eigjgTWcItLg5QFyisE+qlR1cL/thzm6W+3cPJMDvde0paHBoQR4Fd9r9oVEYZ0aUb/jo14eeFO3l+VxKJtR/j39VH069DI6njKzegJysp9lNLdc3pWLuO/2Mh9H62nSd0afPfARTx5ZXi1LgJFBdbwYdKQTnw9+kJq+/swavZaJny7hTM5efYFtItsVQHaIlDuYdIke4+eBRduGcO6hyfxkH8XDlKDsf3b8+CAUHy9PfO3TdeW9Zg3pg8vL9zJO8v3sCL+OK+eWkPnUweLvWbExtovdtNuslURnvmtUe6lRHfPxmbj7fGvMsK3O175+Xxxb28eubyDxxaBAv6+3jx9TQSf3N2TzNx8hmWH88GyeIx2ka3OQlsEyvUV6bohbcY7PLK/Dj+H9uSq/CO8NPlW6gToBVZFXdi+IT882JeH58bxjIxm7bZf+bd/LQJzMot3h6GUg541pNzGrsOnuHviXA7Vaci/Fr/LHWu/Q7w8uxVQHpvN8PayBF7+YRttThxg1tfP0yYlWYuAhyrvrCH9Fim3sGjrYa6buoRM3xp8/skTjNowH3n4Yd3FUQ4vgdHfvsFHnz1NSs26DL39FX575Dl9zdRfaCFQLs0Yw/Qlu7nnw/W0O5zI9z5b6Ja83b6Lo+gQkaq4IscEel/fn3kTh9LMz3CHTzSzx7+ir5kqRguBclm5+Tae/HozUxbuYohXCnPr7afJ1Jf+PGYwbly53T17tBJdZIc0qMVXk2/gMpPCs74dmTx/OzabFgNlp8cIlEvKyM7jgY838OuuY4y5tD2PXB6GQKV19+wxSrxG+fk2nv9hO7NXJDGoUxNevSkaf1/PuObC0+kxAuVWUjKyuXnm7yyPP86L10Ux/ooO9m4iSm70tQicXYnXyNvbi4mDOzHhmggWbjvMyHdWk5aZa1E45Sq0ECiXcjA1k+Fvr2LXkXRm3d6dW3q2tDpStXRXnza8cXM3NiWnctPM3zmWnm11JGUhLQTKZew5fpobZ6zi6KlsPryrJ/07NrY6UrV2deemvHNHD5KOn2b426s4kJppdSRlES0EyiXsPpLOjTNWkZmbz6f39OKCNvWtjuQRLgkL5qO7L+B4RjY3vrWSvSmnrY6kLKCFQFlu15F0bp71OyIw995eRDava3Ukj9K9VX0+u6cXZ3LzuWnm71oMPJAWAmWpnYfTuXnm73iJ8Nk9vdxqCMnqpFOzunxydy+ycvMZ8fbvJB3XYuBJtBAoy8QfTeeWWb/j420vAu2CA62O5NEimtXhk3/2Iiffxk0zf2dfyhmrI6kqooVAWWJvymlumbUaEeHTf/airRYBlxDetA6f/LMnWXn5jHz3dw6l6QFkT6CFQFW5g6mZ3DJrNTn5Nj6+u6cWARfTsUkdPvjHBZw8ncvId1brqaUeQAuBqlLHM7K59Z3VnMrM5cN/9KRDEz0m4Io6twhi9p09OJiayW3v6kVn1Z0WAlVlMrLz+MectRxMy2T2nT2IaqFnB7myHq3rM+v2GBKOZfDP99eRlZtvdSTlJFoIVJXIybMx+qP1bD14ium3dCOmtV4n4A76hgbzyvBo1u49wYOf/kFevs3qSMoJtBAop7PZDOO/2Mhvu4/z0vVRDAjXK4bdyeAuzZh4TQSLth1hwndbcLeOKtXZ6VCVyun+u3An8zYe5LFBHbgxJsTqOOpvGHVRG45lZDN9SQLNgwIY0z/U6kiqEmkhUE71yep9zPg1gVt7tWT0Je2sjqPOw/jLO3AwNYuXF+0ipH5NhkY3tzqSqiRaCJTTLN15lAnfbeHSDsFMGtzJ3pW0clsiwks3RHEgNZNHv9hE07oB2idUNaHHCJRT7DyczphP/qBD49q8fks3fLz1o1Yd1PDxZuZt3WlRP4B7PlzHHu2Kolpw6rdTRAaJyE4RiReRJ0qZ31JElojIHyKySUSucmYeVTVSMrK56/211PTz5t1RMQTW0IZndRJU04/Zo3ogwN3vr+VUll5j4O6cVghExBuYDlwJRAA3i0hEicWeBuYaY7oCNwFvOiuPqho5eTZGf7yBY+nZzLw9hqZ1A6yOpJygVYNavDmyO3tTzjD2kz/I1/GP3ZozWwQXAPHGmERjTA7wGTC0xDIGqOP4uy5w0Il5lJMZY3jmuy2s2XOC/w7rTHRIkNWRlBP1bteAyUMj+XXXMV76cbvVcdR5cGabvTmwv8jtZKBniWUmAYtEZCxQC7istAcSkXuAewBattShC13Vh7/v5bO1+3ng0nZ6RomHuKVnS3YePsWs3/bQsUkdbujewupI6m+w+gjezcAcY0wL4CrgQxH5SyZjzExjTIwxJiY4OLjKQ6qzW5t0gsnfb2NAx0Y8MrCD1XFUFZpwTQS92tbnqW82s+VAmtVx1N/gzEJwACh69VALx7Si7gLmAhhjVgH+QEMnZlJOcORUFvd/vIGQ+jV5ZUQ0Xl56mqgn8fH24o1bulG/lh/3frieE6dzrI6kzpEzC8FaIFRE2oiIH/aDwfNKLLMPGAAgIuHYC8ExJ2ZSlaygD6HT2Xm8fVt36gb4Wh1JWaBhYA1m3NqdYxnZjP10g/ZJ5GacVgiMMXnAGGAhsB372UFbRWSyiAxxLPYI8E8R2Qh8Cowy2pGJW3lhwTY27EtlyrAuhDXWLqU9WZeQIJ4fGsmK+BT+76ddVsdR58CpJ3gbY34Afigx7Zkif28DLnJmBuU83288yPur9nJ3nzZc3bmp1XGUCxjeI4QN+07y1tIEYlrV0w4G3YTVB4uVm4o/msETX22ie6t6PH5lR6vjKBcyaUgnIprW4eG5G9l/Qsc9dgdaCNQ5O5OTx/0fr6eGrzdv3NIVX+0+QhXh7+vNmyO7YbMZxnyygew8HdDG1ek3WJ2zid9tZffRDF4dEa1XDqtStW5Yiyk3dmZjchov/bjD6jjqLLQQqHPyXdwBvlifzAP92nNxmF7Toco2KLIpoy5szewVSfy07YjVcVQ5tBCoCks6fpp/fbOFmFb1eOgyHZhEnd0TV3YkomkdHv1yI4fSMq2Oo8qghUBVSE6ejbGf/oGXwLSbu2q30qpC/H29ef2WruTk2Rj3aZxeX+Ci9NusKuTlRTvZfCCNKTd2oXmQHhdQFdcuOJDnhkayJukEbyyJtzqOKoUWAnVWy3cfZ+ayRG7t1ZIrOjWxOo5yQzd0b8G10c14fXE86/eetDqOKkELgfqrIhd3nzydwyNfxNG+USD/uqrkcBJKVdzkayNpWtefhz7/g/TMEv0RaYcCltJCoIqbNAliY8EYjDE88fUmTqRlMi31dwL8vK1Op9xYHX9fXh0RzYETZ5j0zPt/bvyNsX/mJk2yNJ8n00Kg/mQMpKbCtGkQG8vctftZuPUIjy2ZTadTh/RXmzpvMa3qMSYvka+8mzH/kZf+LALTptk/e/oZs4QOJqv+JAJTpwKwb85nTJaLuPDQbu66sKV9umj30uo8ifDgSw+w7KnPeDq/NT3qNKRxxgkYN04/YxbSFoEqToT8/3uF8VfH4mVsvPzDVLz0C6oqkY+PN6+MH0KWjx+PD3oQA1oELKaFQBVnDO8+No01IZE8+/PbNEs/XnjMQKlKYQxtX5zAU0tms7RdDJ92uUI/YxbTQqD+ZAw7H36al6UNg/KPcN2mn+1NdscxA/2iqvNW5JjArRe3p2/7hjx/xWj2vv+5fsYspMcIVKFcm+Fh/y7Usdl44elbEC+vwmMGBAVp012dPxH7Z2ncOLymTuW/p7K4fGoq4/85hc8D4vHSz5gltBCoQm8tTWCrqcWM27rRoLa/fWLBAWT9gqrKMmmS/Ze/CE3rBjBxcCfGf7GR2QPv4C6rs3ko3TWkANh+6BSvL97NkC7NGBRZYrQxLQKqshX5TN3QrTn9OzZiysId7Dl+2sJQnksLgSI338b4LzZSN8CPZ4d0sjqO8jAiwr+vj8LP24vHvtyIzabHCaqaFgJl3yV08BQvXBdJvVp+VsdRHqhxHX8mDu7E2qSTzF6ZZHUcj6OFwMPtOpLO64t3M7hLM+1QTlnq+iK7iPal6FjHVUkLgQfLtxke+3ITtf19mTRYO5RT1hIRXrguEh8vL574ehNGTyWtMloIPNjsFXuI25/KxMERNAisYXUcpWhaN4Anr+rIyoQU5q7bb3Ucj6GFwEPtSznDy4t2MqBjI4Z0aWZ1HKUK3dyjJT3b1Of5Bds5cirL6jgeQQuBBzLG8OQ3m/Dx8uL56yIRPT1UuRAvL+E/N3QmJ8/GhG+3WB3HI2gh8EBfbzjAivgUHr+yI03r6rCTyvW0bliL2IFhLNp2hP9tOWx1nGpPC4GHOXE6h+cXbKN7q3qMvKCl1XGUKtNdfdoQ3rQOk+ZtJT0r1+o41ZoWAg/z/IJtZGTn8e/ro/Dy0l1CynX5envx7+ujOJKexcsLd1odp1rTQuBBlu8+ztcbDnDvxe0Ia1zb6jhKnVV0SBB39G7NB7/vZcM+HfTeWbQQeIis3Hz+9e1m2jSsxZj+7a2Oo1SFjb+iA03q+PPU15vJzbdZHadacmohEJFBIrJTROJF5IkylhkuIttEZKuIfOLMPJ7szaUJ7E05w/PXRuLvq4PQK/cRWMOHSUM6seNwOnNWJFkdp1pyWiEQEW9gOnAlEAHcLCIRJZYJBZ4ELjLGdAIeclYeT5ZwLIMZSxO4NroZF7VvaHUcpc7Z5RGNuSy8EVN/3sWB1Eyr41Q7zmwRXADEG2MSjTE5wGfA0BLL/BOYbow5CWCMOerEPB7JGMOEb7dQw9eLf12t3Ugo9yQiTBzcCZsxPDtvq9Vxqh1nFoLmQNFrxJMd04oKA8JEZIWI/C4ig0p7IBG5R0TWici6Y8eOOSlu9fRd3EFWJqTw2KCOBNfWbiSU+wqpX5NxA+zXFvy87YjVcaoVqw8W+wChQD/gZmCWiASVXMgYM9MYE2OMiQkODq7ahG4sLTOX5xdsp0tIELfoNQOqGri7bxvCGgcycd5WMnPyrY5TbTizEBwAQorcbuGYVlQyMM8Yk2uM2QPswl4YVCWY+tMuUk5n88K1kXjrNQOqGvD19uK5oZEcSM1k+pJ4q+NUG84sBGuBUBFpIyJ+wE3AvBLLfIu9NYCINMS+qyjRiZk8xtaDaXywKolbe7Yisnldq+MoVWl6tm3AdV2bM3NZIonHMqyOUy04rRAYY/KAMcBCYDsw1xizVUQmi8gQx2ILgRQR2QYsAR41xqQ4K5OnsNkMz3y3laCafoy/vIPVcZSqdE9e1ZEaPl5MnLdVxy2oBD7OfHBjzA/ADyWmPVPkbwM87PinKslXG5JZv/ck/x3Wmbo1fa2Oo1Sla1Tbn9iBYUyev42FWw8zKLKp1ZHcmtUHi1UlS8vM5aUfd9C9VT2GdWthdRylnOb23q3o2KQ2k7/fxpmcPKvjuDUtBNXMqz/v4sSZHJ4d0kk7lVPVmo+3F89dG8nBtCxmLE2wOo5b00JQjew8nM4Hq/ZyywUt9QCx8gg9WtdnaHQzZixL1AHvz4MWgmrCGMOkeVsJrOGjB4iVR3nyynB8vITnFmyzOorb0kJQTfyw+TCrElMYf3kY9Wr5WR1HqSrTpK4/Y/uH8tO2I/y6S3se+Du0EFQDmTn5vLBgG+FN63BLz1ZWx1Gqyv2jT2vaNKzFs99vJSdPu6o+V1oIqoEZvyZwMC2LSYMj9Api5ZFq+HjzzDURJB47zQerkqyO43a0ELi5A6mZvL0sgas7N6Vn2wZWx1HKMpd2bES/DsFM+2U3xzOyrY7jVrQQuLmXftyBMfDklR2tjqKU5Z6+OoLMnHz+b9Euq6O4FS0Ebmxt0gm+33iQey9pR4t6Na2Oo5Tl2jcK5Pberfls7T62HkyzOo7b0ELgpmw2w7Pfb6VpXX/uu6St1XGUchnjBoRSr6Yfk7/fpv0QVZAWAjf15YZkthw4xRNXdqSmn1O7jFLKrdSt6cvDA8NYvecE/9ty2Oo4bkELgRs6nZ3HlIU76doyiCFdmlkdRymXc1OPEDo0rs2/f9xBdp4OYHM2Zy0EIjJWROpVRRhVMTN+TeBYejYTrolARE8XVaokH28vnr4mnH0nzjBnRZLVcVxeRVoEjYG1IjJXRAaJbnksdSA1k5nLEhncpRndWmp9VqosfUODubRDMG8sjtfTSc/irIXAGPM09uEj3wVGAbtF5EURaefkbKoU//3fDgAeH6T9CSl1Nv+6OpwzuflM/UlPJy1PhY4ROAaQOez4lwfUA74Ukf86MZsqIW5/Kt/FHeTuvm30dFGlKqB9o9rc2rMln67Zx64j6VbHcVkVOUYwTkTWA/8FVgBRxpjRQHfgBifnUw7GGF5YsI2GgTUY3a+91XGUchsPXRZGrRo+/PuH7VZHcVkVaRHUB643xlxhjPnCGJMLYIyxAdc4NZ0qtHDrEdYmneThgWEE1tDTRZWqqHq1/Bjbvz1Ldh5j+e7jVsdxSRU5RjDRGLO3jHlaYqtATp6Nl37cTmijQIbH6PCTSp2r23u3pkW9AJ5fsI18m15kVpJeR+AGPl69l6SUMzx1VTg+3vqWKXWu/H29eWxQR3YcTufrDclWx3E5ulVxcWmZuUz7ZTd92jekX4dgq+Mo5bYGd25KdEgQLy/aqYPdl6CFwMW9uTSetMxcnryqo148ptR5EBH+dXU4R05l8+5ve6yO41K0ELiwA6mZzF6RxPVdW9CpmQ5Gr9T56tG6Pld0asyMXxP0IrMitBC4sP9btBOARy4PsziJUtXHY4M6kpVn47VfdlsdxWVoIXBRWw+m8c0fB/jHRW1oFhRgdRylqo12wYHcfEEIn6zex57jp62O4xK0ELiol37cQd0AX0b30548lKps4waE4efjxZSFO6yO4hK0ELigZbuO8dvu44ztH0rdAF+r4yhV7QTXrsG9F7fjh82HWb/3pNVxLKeFwMXYbIaXftxBi3oB3NqrpdVxlKq27u7bhuDaNfjPjzs8fiQzLQQu5vtNB9l26BSPXtGBGj7eVsdRqtqqVcOHcQNCWZN0gsU7jlodx1JaCFxIdl4+UxbuJKJpHQZ31pHHlHK2ET1CaNOwFv/53w6P7nrCqYXAMZDNThGJF5EnylnuBhExIhLjzDyu7pPV+0g+mckTV3bEy0svHlPK2Xy9vXj0ig7sOpLh0V1POK0QiIg3MB24EogAbhaRiFKWqw2MA1Y7K4s7SM/K5fXF8VzYrgF9QxtaHUcpj3FlZBO6tKjLKz/tIivXM8c3dmaL4AIg3hiTaIzJAT4Dhpay3HPAf4AsJ2ZxTUUOUM1alsiJ0zk8Pki7klCqKokIj1/ZkUNpWXywMqn4TA85iOzMQtAc2F/kdrJjWiER6QaEGGMWlPdAInKPiKwTkXXHjh2r/KRWmDQJYmPBGI5nZPPO8j1clX+ELu++anUypTzOhe0acrFXGm/+sIlTmTn2icbYv6OTJlmarSpYdrBYRLyAV4BHzrasMWamMSbGGBMTHFwNeuA0BlJTYdo0iI3ljcXxZGfn8sh7z9ine8ivEKVchjE8lrmdVPFj1oS3/ywC06Z5xHfSmUNdHQBCitxu4ZhWoDYQCSx17AppAswTkSHGmHVOzGU9EZg6FYD9sz/lY99+DN/8C+1uG2afrruGlKpaIkS+MplrHnuPd2zNuD2wPsFnUmHcOI/4TjqzRbAWCBWRNiLiB9wEzCuYaYxJM8Y0NMa0Nsa0Bn4Hqn8RKOAoBlP7jMTLZmPcik894gOnlMsS4ZHHRpDr7cMbF46wT/OQ76TTCoExJg8YAywEtgNzjTFbRWSyiAxx1vO6DWPY+fDTfBN5KaPWf0+TjJTCYwZKKQsYQ5sXnmbEpkV8Ej2IfXUbe8x30qnHCIwxPxhjwowx7YwxLzimPWOMmVfKsv08pjXg2P84ZZ8XgeQzesEMexPUcczAEz54SrmUIscEHgwPxNu/BlP/+ZzHfCedeYxAlUWEDXWa83NoBOMvDyOoVo3CYwYEBXlEU1QplyJi/+6NG0fjqS9xx/92MHOZjfseeooOdX2r/XdS3K2zpZiYGLNunXs3HIwx3DJrNbuPpvPro5dSq4ZPwYxq/4FTyqU5voMnT+dw8X+X0KtdA2bdXj06PBCR9caYUldG+xqywIr4FFYlpvDApe3/LAKgRUApqzm+g/Vq+XHPxW35adsR/thX/bup1kJQxYwxTFm4g2Z1/bmlp3YzrZSrurNPGxrU8uNlx5Cx1ZkWgiq2cOsRNian8dBlYdrNtFIuLLCGD/df2p4V8SmsiD9udRyn0kJQhfJthld+2knbhrW4vlvzs99BKWWpkT1b0qyuP1MW7qzWg9doIahC3288yK4jGcQODMPHW196pVydv683YweEErc/lV+2V9/Ba3RrVEVy821M/XkX4U3rcHVUU6vjKKUqaFj3FrRqUJOXF+3EVk0Hr9FCUEW+XJ/M3pQzPDIwTAedUcqN+Hp7EXtZGDsOp7Ng8yGr4ziFFoIqkJWbz2u/7CY6JIgB4Y2sjqOUOkeDuzQjrHEgU3/eRV6+zeo4lU4LQRX4dM0+DqVl8egVHXTQGaXckLeX8PDADiQeO803fxw4+x3cjBYCJ8vMyWf6kgR6ta3PRe11CEql3NUVnRrTuUVdpv2ym5y86tUq0ELgZB+sSuJ4RjbjL+9gdRSl1HkQEWIHhpF8MpMv1u8/+x3ciBYCJ8rIzmPGrwlcEhZMTOv6VsdRSp2nfmHBdG9Vj9d/ia9WA91rIXCi2cv3cPJMLg8PDLM6ilKqEogIjwwM4/CpLD5ds8/qOJVGC4GTpJ3JZeZviQyMaEyXkCCr4yilKsmF7RvSu20Dpi9JIDOnerQKtBA4yTvLE0nPytPWgFLV0COXh3E8I5v3VyVZHaVSaCFwghOnc3hv+R6ujmpKeNM6VsdRSlWymNb1uTgsmLd/TSAjO8/qOOdNC4ETzFyWyJncfB66LNTqKEopJ3l4YBgnz+Ty/sokq6OcNy0Elex4Rjbvr0xiSJdmhDaubXUcpZSTRIcEMaBjI2YuS+RUVq7Vcc6LFoJK9vavCWTn5fPgAG0NKFXdxQ4MIy0zl9nLk6yOcl60EFSio6ey+GDVXq7t2px2wYFWx1FKOVlk87pc0akx7yxPJO2M+7YKtBBUord+TSDPZniwv7YGlPIUD10WRnpWHu8sT7Q6yt+mhaCSHE7L4uPV+7i+a3NaN6xldRylVBUpGGNk9ookUs/kWB3nb9FCUEneWhqPzWb02IBSHmjcZaGczslj1m/u2SrQQlAJDqVl8uma/Qzr3oKQ+jWtjqOUqmJhjWtzdVRT5qxI4sRp92sVaCGoBG8uScBmDA9c2t7qKEopi4wbEMqZ3Hy3bBVoIThPB1Mz+Xztfob3CNHWgFIeLLRxbQZ3bsb7K5NIyci2Os450UJwnqYvicegrQGlFDw4IJSs3HxmulmrQAvBeUg+eYa56/YzokcIzYMCrI6jlLJY+0aBDOnSjA9W7uW4G7UKnFoIRGSQiOwUkXgReaKU+Q+LyDYR2SQiv4hIK2fmqWxvLk1AEO7vp60BpZTd2AGhZOflM2uZ+7QKnFYIRMQbmA5cCUQAN4tIRInF/gBijDGdgS+B/zorT2VLPnmGLxytgWbaGlBKObQLDmRodHM+WOU+rQJntgguAOKNMYnGmBzgM2Bo0QWMMUuMMWccN38HWjgxT6UqaA2M7tfO6ihKKRczpn97svPymekmrQJnFoLmQNERnpMd08pyF/BjaTNE5B4RWSci644dO1aJEf8ebQ0opcrzZ6sgyS1aBS5xsFhEbgVigCmlzTfGzDTGxBhjYoKDg6s2XCkKjw1cqq0BpVTpxvZvT06ezS1aBc4sBAeAkCK3WzimFSMilwH/AoYYY1y+dBZtDTStq60BpVTp2gYHcq2jVXAs3bU3bc4sBGuBUBFpIyJ+wE3AvKILiEhX4G3sReCoE7NUGm0NKKUqaoyjVeDqVxs7rRAYY/KAMcBCYDsw1xizVUQmi8gQx2JTgEDgCxGJE5F5ZTycSziQmqmtAaVUhbV1HCv40MXPIPJx5oMbY34Afigx7Zkif1/mzOevbG8uiQfQM4WUUhU2pn97vos7wKxliTx5VbjVcUrlEgeL3cGB1MzCq4j1TCGlVEW1C3Zcbbxqr8v2QaSFoILeWlrQGtCriJVS52ZM/1Cy8vKZ9dseq6OUSgtBBRT2MBqjfQoppc5dYR9Eq1xzvAItBBXw1tIEQI8NKKX+vrH925PpouMVaCE4i8NpWXy+1j76WIt6Ot6AUurvad/IPorZByuTOOlirQItBGcx41f76GPaw6hS6nw96BjF7N3lrnWswKmnj7q7I6ey+GTNPm7o5t5jEefm5pKcnExWVpbVUZQ6b/7+/rRo0QJfX1+ro5yzsMa1uSqyKXNWJnF33zYE1fSzOhKghaBcM35NIN/m/qOPJScnU7t2bVq3bo2IWB1Hqb/NGENKSgrJycm0adPG6jh/y9gB7Vmw+RDvLd/Dw5d3sDoOoLuGynQ0PYtPVu/juq7NadnAfVsDAFlZWTRo0ECLgHJ7IkKDBg3cunXbsUkdBnVqwuwVSaRl5lodB9BCUKZZyxLJzbe5fWuggBYBVV1Uh8/ygwNCSc/OY86KJKujAFoISnU8I5uPft/HtdHNadOwltVxlFLVTESzOgyMaMy7yxNJz7K+VaCFoBSzfkskOy+fB/pXj9aAKwgMDCz8+8iRI9SsWZNJkyZZF0gxatQovvzyS6tjeKxxA0I5lZXH+yuTrI6ihaCkE6dz+HDVXgZ3aUa74MCz30Gds//7v/+jYcOGVsdQylKRzesyoGMj3lm+h4zsPEuzaCEo4d3liWTm5jOmmhwbKOnZ77cy4u1Vlfrv2e+3Vvj5T5w4wdy5c7nrrrsKp5X8ZRoZGUlSUhKPPvoo0dHRNGnShObNmxMdHc0zz9g7r50yZQo9evSgc+fOTJw4EYCkpCQ6duzIyJEjCQ8PZ9iwYZw5Yx8Su3Xr1kRFRREdHU1UVBStW7cG7AfS77zzTqKioujatStLliwpzDFnzhyCg4OJjo6mfv36hRmLtm769u3LNddcA8CkSZO47bbb6N27N6GhocyaNQuA22+/nW+//bbwPiNHjuS7774jPz+fRx99tHA93n77bQCWLl2KiPC///0PgJMnTxIQEFDYgpo1axY9evSgS5cu3HDDDYXrmJCQwAUXXEB0dDRt2rRh1KhRf3n99+/fT48ePejTpw/x8fF89NFHdOnShVGjRmGM4b333uOhhx4qXH7WrFnExsaSlJREZGRk4fQvv/yy8PGLvn+jR48uzFnW+wrQr18/1q1bB8DTTz9d7DW97777CA8PJzo6Gm9v77+sQ3UydkAoqWdy+XDVXktzaCEoIvVMDu+v3MtVUU0JbVzb6jjV0quvvspdd91FrVpnP/YyZcoU4uLiuO+++4iNjSUuLo7JkyezaNEidu/ezZo1a4iLi2P9+vUsW7YMgJ07d3L//fezfft26tSpw5tvvln4eEuWLCEuLq7Yxn769OmICJs3b+bTTz/ljjvuKDwjJT8/n5tvvpm4uDiGDBlCSQsWLCAtLa3YtE2bNrF48WJWrVrF5MmTOXjwIHfddRdz5swBIC0tjZUrV3L11Vfz7rvvUrduXdauXcvatWuZNWsWe/bYLzTq1q0bH3zwAQCffPIJXbp0KXyO66+/nrVr17Jx40bCw8N59913AXjzzTcZPnw4cXFxTJlS6qivPPvss4wePZqlS5eSm5tL586d2bhxI6dOnWL+/PkMHz6c77//ntxc+37r2bNn849//OOs7xXA5MmTsdls57TL7+jRo/zyyy+Ftzdv3szKlSvZunUrcXFxBARU7769okOCuCQsmFm/JXImx7pWgV5HUMR7K5LIyM7jwf6hVkdxmomDO1n23KdOneKDDz4gLi6Od955p9i8Rx99lOeffx6w/7Itz6JFi1i0aBFdu3YFICMjg927d9OyZUtCQkK46KKLALj11lt57bXXGD9+fJmPtXz5csaOHQtAx44dadWqFbt27aJz585kZmbi7+9f6v2MMbzwwgs89dRTfPTRR4XThw4dSkBAAAEBAVx66aWsWbOGa6+9lvvvv59jx47x1VdfccMNN+Dj48OiRYvYtGlT4a/mtLQ0du/ejZ+fH02bNiU7O5sTJ04wb948hgwZQk6OvVuCLVu28PTTT5OamkpGRgZXXHEFAN7e3qSnp5f72q1du5ZnnnkGHx8fwsPD6dy5MwADBgxg9erVDB48mP79+zN//nzCw8PJzc0lKiqKpKQkEhISiI6OLsx6ySWXFD7unDlz+Omnn9i/f3+5z1/Sc889x1NPPcXNN99cuA45OTnk5OSU+dpXN+MuC+X6N1fy8e/7+OfFbS3JoIXAIS0zl9kr9nBlZBM6NNHWgDNMnz6dkSNHEhQU9Jd5U6ZMYdiwYQDFdkGUxhjDk08+yb333ltselJS0l9OLTyfUw0PHjxIs2bNSp336aef0q9fP5o0aVLu8xXcvv322/noo4/47LPPmD17duF6vP7664Ub8gJLly4F4JZbbuHxxx+nQ4cO+Pn5FRaCUaNG8e2339KlSxfmzJlTuPxDDz3EsGHDmD17Nt7e3sU21AWMMWWub8G8u+++mxdffJGOHTty5513Fs5v164dcXFxgH3X0Pz58wvnnThxgqlTpzJ+/PjClszZJCUlsWXLFl5//fXCaREREQwfPpxGjRrRtm1bMjMzK/RY7qxby3r0DW3I28sSubVXKwL8qn53mO4acnh/ZRLpWXmM0TOFnCIvL4+ZM2cSGxt73o91xRVX8N5775GRkQHAgQMHOHrUPuT1vn37WLVqFWDfpdKnT59yH6tv3758/PHHAOzatYt9+/bRoUMHMjMzmT9/fmHroiibzcarr77KY4899pd53333HVlZWaSkpLB06VJ69OgB2Dfer776KmDf2BWsx1tvvVW4G2bXrl2cPn268LEGDx7MH3/88ZddM+np6TRt2pTc3NzC7AANGjTA19eXBQsWlLlrKCYmhp9//pm8vDy2b9/Opk2bAFi8eHFh1p49e7J//34++eSTwl/qZ/Pwww9z//33c/DgQRYtWlSh+zz77LM8++yzf5let25dxo0b5xG7hgo8OCCU4xnZfLpmnyXPr4UASM/K5d3le7gsvDGdmtW1Ok61lJ2dzfXXX18pZwtdfvnl3HLLLfTu3ZuoqCiGDRtWuEukQ4cOTJ8+nfDwcE6ePMno0aPLfaz7778fm81GVFQUI0aMYM6cOdSoUYMrr7ySESNGFG4ci8rMzOSGG24otWXTuXNnLr30Unr16sWECRMKWxSNGzcmPDy82C/su+++m4iICLp160ZkZCT33nsveXl/7if28/Nj3bp1hbtjCjz33HP07NmTiy66iI4dOxZOj42NZdSoUURFRZW5vhMnTmT69On069cPPz8/Nm/eTJcuXQgICCh2HGT48OFcdNFF1KtXr9zXr6S3336b2NjYwgPYEyZMoE+fPvTp04c9e/YU7oYDaNGiBRdffHGx+69YsYJFixaVWiCqsx6t69OrbX1m/JpAVm5+1QcwxrjVv+7du5vK9sbi3abV4/PNxv0nK/2xXcG2bdusjlAl9uzZYzp16mTZ80+cONFMmTKl1HmnT582bdu2NampqVWcqmx33HGH+eKLL0qdd/XVV5uff/650p/zkksuqZTHqY6f6RXxx0yrx+eb91fuccrjA+tMGdtVj28RnM7O453fErm0QzCdWwRZHUdVQz///DPh4eGMHTuWunVdu8WZmppKWFgYAQEBDBgwoNIfv+hpw6q43m0b0KN1Pd5amkB2XtW2CsSUc/DIFcXExJiC848rw9u/JvDvH3fw9f0X0q3luTWD3cX27dsJDw+3OoZSlaa6fqZ/232M295dwwvXRTKyZ6tKfWwRWW+MiSltnke3CDJz7MPG9Q1tWG2LgFLKffRp35DokCDeXJJAbr6typ7XowvBJ2v2cTwjhwcHVN/rBpRS7kNEGDcglAOpmXyz4UCVPa/HFoKs3Hze/jXBsV+uvtVxlFIKgH4dgolqXpfpS+PJq6JWgccWgrnr9nM0PZuxA/S6AaWU6xARxvZvz96UM8zbeLBKntMjC0F2Xj5vLU2gR+t69G7bwOo4rqfkCQSVdEJBZGQkERERREdH07x5c+2GWqkyDIxoTHjTOryxOJ58m/NP6PHIQvDV+gMcSstibP/QajHaUaWaNAliY//c+Btjv11JG+0ff/yRuLi4SrnCWKnqqqBVkHj8NPM3Ob9V4HGFIDffxptL44kOCaJvqPaJX4wxkJoK06b9WQxiY+23U1PPu2WQm5tLjRo1/jI9IyODAQMG0K1bN6Kiovjuu+8AKtz1MfzZxXHJ+xQo2s1xaV1YlyYwMJDo6GgiIiKKPWZSUhIBAQFER0fTsmVLxowZA8CaNWvo0qVLuS2eornfeecdRITjx4+Xua4FHb0VdMlc8PfBgwdJSEhg0KBBdO/enb59+7Jjx47C57jvvvuIiYkhLCyssE+got1qR0dHExwcXNgr6i+//ELXrl2JioriH//4B9nZ2YVZCrrwLvo6nDhxgn79+tGlSxc6dOhAv379AHtX3C+//HLhfa+55prCvpAqsu65ubm0bdu28DX1ZIM6NSG0USDTl8Rjc3KrwOMKwTd/HCD5ZCYPDmivrYGSRGDqVBg3zr7x9/Ky/z9unH36eb5e6enp1K791w79/P39+eabb9iwYQNLlizhkUceKbdztPNRXhfWJRljiIuL44cffig2PT8/n9DQ0MJusQv85z//YcKECRVq8WRlZTFjxgwaNWpU7nIFHb0V9LtT8HezZs245557eP3111m/fj0vv/wy999/f+H9kpKSWLNmDQsWLOC+++4r7Fp7xIgRhY8xYsSIwiyjRo3i888/Z/PmzeTl5fHWW28VW99ff/212Ovw8ccfExkZycaNG4v1d1QR5a37zJkzixVtT+blJYzp355dRzJYuPWwc5/LqY/uKhwblbx8G9OXxBPZrA6Xdij/C+ixCopBUZVQBPLz80lPTy91HAJjDE899RSdO3fmsssu48CBAxw5cgSg2C/iRx99tNj9CgauiY6OLtZ1ddH7vPDCC8XuU7QL627durFjxw527979l0x5eXnUrFmz1HUpq3vqinQDXWD69OnccccdxTpVK29dS8rIyGDlypXceOONREdHc++993Lo0KHC+cOHD8fLy4vQ0FDatm1b2Foozc6dO2nTpg1hYWEA3HHHHcWKY2nrey7rWlJp6w5w+vRpZs+eXaygebprOjejbcNavLZ4d/EfR5X8Q8mphUBEBonIThGJF5EnSplfQ0Q+d8xfLSKtKz1EkX3e3286yN6UM4xNWoZ4WKdWFVawO6iooscM/qbExMTCDU1JH3/8MceOHWP9+vXExcXRuHHjwl+wRX8Rl+xRs2Dgmri4ONq1a1c4veA+K1eu5P3332fnzp1FVs/ehXXB/eLj40vt9iApKYnmzZuXmres7qkLdou0b9+eqSWLaRGnTp3is88++0s32uWta0k2m42goKDC5ePi4ti+fXvh/MrqjjsrKwubzfaXonjbbbdx4sQJmjRpwsiRIyv8eGWtO8C0adO45557PGYcgorw9hIeSNvM9kPp/LzN/uOoso/bgRMLgYh4A9OBK4EI4GYRiSix2F3ASWNMe2Aq8J9KDVFkn3d+bCyvL46noy2dgVMnVMo+72qn6DGBcePAZvtzN9F5FoO5c+fSu3fvUuelpaXRqFEjfH19WbJkCXv3Vs6wfQEBAdSsWbOwm2covwvror744ovCIShLm1da99RNmjQhMDCQZcuWlbtraOrUqYwdOxY/P79zXaVCderUoU2bNnzxxReAvcBt3LixWEabzUZCQgKJiYl06NChzMfq0KEDSUlJxMfHA/Dhhx8WjmXw5Zdflvq+BQYG4uPjw4cffnhOu4bKWve0tDS+/fbbCo+G5jGMYWh6Ii1PHuK195dgbLZKPW5XwJkD01wAxBtjEgFE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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "from matplotlib import pyplot as plt\n", "%matplotlib inline\n", "\n", "L = 0\n", "R = np.pi\n", "n_points = 10 # при 63 уже ломается \n", "f = np.sin\n", "\n", "\n", "def plot_problem(ax, x_data, y_data):\n", " ax.scatter(x_data, y_data, marker=\"x\", color=\"red\")\n", " ax.set_xlabel(\"x\")\n", " ax.set_ylabel(\"y\")\n", " \n", "\n", "x_data = np.linspace(L, R, n_points - 1) # данные для интерполяции\n", "y_data = f(x_data) # данные для интерполяции\n", "\n", "\n", "x = np.linspace(L, R, 100) # данные для построения графика\n", "y = f(x) # данные для построения графика\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, y)\n", "plot_problem(ax, x_data, y_data)\n", "ax.set_title(\"Исходные данные\")\n", "ax.legend([\"Интерполируемая функция\", \"Данные для интерполяции\"])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Теперь когда данные готовы, осталось произвести интерполяцию. Методов интерполяции существует очень много. Рассмотрим полиномиальную интерполяцию и сплайн интерполяцию.\n", "\n", "### Полиномиальная интерполяция\n", "\n", "Полиномиальная интерполяция основывается на том факте, что существует единственный полином $P_{N}(x) = a_0 + a_1 x + \\cdots + a_{N} x ^ N $ степени $N$, проходящий через точки $\\{(x_1, y_1), ..., (x_{N + 1}, y_{N + 1})\\}$, если $x_i \\neq x_j \\quad \\forall i, j = 1, \\cdots, N + 1, \\quad i \\neq j$. \n", "\n", "Недостатком полиномиальной интерполяции является её нестабильность. Полиномиальная интерполяция проявляет себя очень плохо при больших $N$. " ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Интерполяция')" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from scipy import interpolate\n", "\n", "poly = interpolate.KroghInterpolator(x_data, y_data)\n", "y_poly = poly(x)\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, y_poly)\n", "plot_problem(ax, x_data, y_data)\n", "ax.legend([\"Полиномиальная интерполяция\", \"Данные для интерполяции\"])\n", "ax.set_title(\"Интерполяция\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Сплайн интерполяция\n", "\n", "> Интерполирование многочленом ... на всем отрезке $[a, b]$ с использованием большого числа узлов интерполяции часто приводит к плохому приближению, что объясняется сильным накоплением погрешностей в процессе вычислений. Кроме того, из-за расходимости процесса интерполяции увеличение числа узлов не обязано приводить к повышению точности. Для того чтобы избежать больших погрешностей, весь отрезок $[a, b]$ разбивают на частичные отрезки и на каждом из частичных отрезков приближенно заменяют функцию $f(х)$ многочленом невысокой степени (так называемая кусочно-полиномиальная интерполяция). Одним из способов интерполирования на всем отрезке является интерполирование с помощью сплайн-функций. Сплайн-функцией или сплайном называют кусочно-полиномиальную функцию, определенную на отрезке $[a, b]$ и имеющую на этом отрезке некоторое число непрерывных производных {cite}`Samarsky`. \n" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Интерполяция')" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "linear = interpolate.interp1d(x_data, y_data, kind=\"linear\")\n", "y_linear = linear(x)\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, y_linear)\n", "plot_problem(ax, x_data, y_data)\n", "ax.legend([\"Кусочно-линейная интерполяция\", \"Данные для интерполяции\"])\n", "ax.set_title(\"Интерполяция\")" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Интерполяция')" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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O+vXrwdg4cKFdO3alZiYGO666y7OnDkDwLp167jqqqvo0KEDnTp1Ii0tjY8++sh5XJ9++im9evUiJyenwPSdO3cSEBDgfC3Dw8Pp37+/c9/9+/d3vjclrZdffHw8PXv2pEOHDsTExJCQkMDSpUupXr060dHRREdHExoaWqBk1L17d1q0aEF0dLTzfUtMTKRbt27ExMQQExPDypUrAVi6dCm33norYP/8hoSEOF/H/K9V/s/AmTNnuOGGG4iJiaFdu3Z8++23zn2ICFOmTAEgLy+P0NBQ5/ue/7swbdo0RITjx4+fd8yuMvyGSNIyc5m5MtFt+ygNTQT5pJzJYvaqffw1OpSI2lWsDsct3nrrLR588EGqVLnw8U2YMIG4uDgefvhhRo0aRVxcHOPGjWPhwoXs3r2btWvXEhcXx4YNG1i+fDlgP2EMHTqU7du3U61aNd577z3n9pYsWUJcXFyBk/27776LiLB582bmzp3LoEGDnFdk5OXlMWDAAOLi4ujTp49znaeeeorly5cTFxdHt27dLur4p06dWiBhvPfee9x9993ExcUxYUKRI6U6zZo1i19//ZUPPvgAPz8/7r33XubMmQPYT+wdOnSgTp06HD16lKuuuorNmzfz8ssv8/e///28bY0bN47ISPuPDT8/P4wx5y1z/Phxxo8fz+LFi9m4cSOxsbG8+eabZGdn069fPyZNmsSmTZtYvHgxlSr9eWXb4sWLmTRpEl999dV517o/99xztGrVqsC0Q4cOcfLkSU6cOMGhQ4eKPPai1jtn4MCBPProo2zatImVK1fSoEEDALp160ZcXBxxcXGMGjWqwDp5eXnMnTuXuLg457S6deuyaNEiNm7cyGeffcaIESPO29crr7xCWFhYkXHkFxQUxNdff83GjRtZsmQJjz/+uPM1joyM5JtvvgHgp59+onHjxuetn5mZyZQpU6hbt+4F93U52jSszo2t6/Hhir2kZea4dV8l0aqhfKat2Etmbh5D3VQaACztjzw1NZVZs2YRFxfHtGnTCsx78sknGT9+PGD/lVyShQsXsnDhQq644grA/utr9+7dhIWF0bhxY66++moA7r33Xv773//yxBNPFLutFStWMHz4cABatmxJkyZN2LVrF+3btycjI4OgoPO79fDz8yMtLe2iv6Tp6enMmDGDoUOHsmXLFgD8/f1JS0u74LqLFy/ml19+Yc2aNQQE2L82DzzwAH379uWxxx5j+vTp3H///YD9WvP77rsPgB49epCSkkJqaqpzW1999RUdO3Zkw4YNANSpU4fDhw9z4sQJatas6Vxu9erVbNu2zfl6Zmdn07VrV3bu3EmDBg3o2LEjANWqVXOus3nzZmbNmsXMmTMLJDywl5JsNhtXXnllgekDBgzgk08+wRjDPffcwyuvvFKq9QDS0tJITk7mb3/7G0CR71dRinpvc3JyGDZsGHFxcfj7+7Nr164C85OTk1m9erVzX+cMHDjQmQgzMjIA+3vw73//m+XLl+Pn50dycjJHjhwBoGLFikRGRrJ161Zmz57Nfffdx7p16wps891332XQoEG88cYbpTqeyzGiRxS3vbOCWav2ua0m4kK0ROBwMj2bWSsTubV9QyLrBl94BS/07rvvMnDgQEJCQs6bd+7Xf1xcHM2alXzJrDGGp59+2rl8fHy8s6qp8KV1l3Op3cGDB2nYsOF50ydPnsxVV11F27ZtL6reeNKkSQwZMqTACeixxx5j0aJFhIWF8eSTTxa77p49e/j4448ZPXq085dl48aNqVevHr/88gtr167l5ptvBgqemAvLy8tjwoQJPP30085plSpVYty4cXTr1o3o6GhnVYcxhhtvvNH5Om/bto0PP/ywxGPcvn07n3zyCWPGjDnvWvfnnnuOF1988bx1+vTpw7x585g3bx633XbbefOLW+9yHDp0yFlyOGfixInUq1ePTZs2sX79erKzC15N88ILL/Dcc8+d95maM2eO8zU6lxDmzJnDsWPH2LBhA3FxcdSrV6/A63H//ffz2muvkZubS7169QpsLzU1lU8//ZSHHnrIlYdcrHaNqnN9izpM+3UP6Vm5ZbLPwjQROMz4bS/p2XkM71F+rhTKLzc3l6lTp55XRL8UvXr1Yvr06c766uTkZI4etQ85vX//flatWgXAJ598wjXXXFPitrp16+asXtm1axf79++nRYsWZGRk8P333zt/DefXsGFDOnTowKZNm0pdNXT69Gm++eYbHnjggQLTa9WqRWBgID/88EOJVUNDhgzh7rvvJiIigg8++MA5/R//+Af33nsvd911F/7+/gB07tzZeUxLly6ldu3azuTw8ccfc8stt5zXWP/oo4+ydetW4uLiiI2NBaBLly789ttvxMfb73BPT09n165dtGjR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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cubic = interpolate.interp1d(x_data, y_data, kind=\"cubic\")\n", "y_cubic = cubic(x)\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(x, y_cubic)\n", "plot_problem(ax, x_data, y_data)\n", "ax.legend([\"Интерполяция кубическими сплайнами\", \"Данные для интерполяции\"])\n", "ax.set_title(\"Интерполяция\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Аппроксимация функций\n", "\n", "Задача аппроксимации функции очень похожа на задачу интерполирования, но в интерполировании обычно ставится целью поиск такой функции $\\phi$, которая в точности проходит через известные нам точки $(x_i, y_i)$, где $y_i = f(x_i), i = 1, ..., N$, а при аппроксимации допускается отклонение функции $\\phi$ от этих точек. \n", "\n", "В ряде ситуаций, значение исходной функции $f$ в точках $x_i, i=1,...,N$ может быть известно не точно, а в пределах какой-то погрешности или с точностью до какой-то случайной величины, т.е., например, $y_i = f(x_i) + \\varepsilon_i, \\, i = 1, ..., N$. В таком случае такое строгое требование на то, чтобы наше решение $\\phi(x)$ в точности проходило через все точки $(x_i, y_i), i=1, ..., N$ не имеет большого смысла и может быть ослаблено, например, до поиска такой функции $\\phi$ из определенного класса функций, которая меньше всего отклоняется от значений $(x_i, y_i), i=1,..., n$. \n", "\n", "Пусть, аппроксимирующая функция дана в параметризованном виде и задача аппроксимации ставится следующим образом:\n", "\n", "$$\n", " \\sum_{i=1}^{N}||\\phi_p(x_i) - y_i||^2 \\sim \\min_{p\\in D}.\n", "$$\n", "\n", "Иными словами требуется найти такие параметры $p$, что функция $\\phi_p(x)$ наименее всего отклоняется от точек $(x_i, y_i), i=1, ..., N$ в среднеквадратичном смысле. \n", "\n", "\n", "```{note}\n", "В общем случае, и $x_i$, $y_i$ и $p$ --- здесь векирные величины.\n", "```\n", "\n", "При такой постановке часто выделяют линейную и нелинейную аппроксимации. Аппроксимация является линейной, если $\\phi_p(x)$ линейно зависит от параметров $p$, не линейной в ином случае. \n", "\n", "\n", "```{note}\n", "Аппроксимация функций реализована во множестве других библиотек, таких как [statsmodels](https://www.statsmodels.org/stable/index.html), [scikit-learn](https://scikit-learn.org/stable/) и некоторых других. \n", "```\n", "\n", "### Линейная аппроксимация\n", "\n", "Разберем в качестве примера полиномиальную аппроксимацию. Для начала сгенерируем данные." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "from matplotlib import pyplot as plt\n", "%matplotlib inline\n", "\n", "def f(x):\n", " return 0.5 + 2 * x + 3 * x * x\n", "\n", "def plot_problem(ax, x_true, y_true, x_data, y_data):\n", " ax.scatter(x_data, y_data)\n", " ax.plot(x_true, y_true, 'r')\n", " ax.set_xlabel(\"x\")\n", " ax.set_xlabel(\"y\")\n", " ax.set_title(\"Аппроксимация\")\n", "\n", "\n", "\n", "N = 100\n", "sigma = 0.2\n", "x_data = np.random.uniform(low=0, high=1, size=N)\n", "y_data = f(x_data) + np.random.normal(loc=0, scale=sigma, size=N)\n", "\n", "x = np.linspace(0, 1, 100) # чтобы строить график\n", "y = f(x) # чтобы строить график\n", "\n", "\n", "fig, ax = plt.subplots()\n", "plot_problem(ax, x, y, x_data, y_data)\n", "ax.legend([\"Исходная функция\", \"Данные для апроксимации\",])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В ячейке выше, мы сгенерировали массив `x_data` случайных значений в интервале $[0, 1]$. На основе него и функции `f` мы сгенерировали массив `y_data`, который представляют из себя сумму значений функции `f` в точках с координатами `x_data` и случайного шума, распределенного по Гауссу с нулевым средним и дисперсией `sigma`. \n", "\n", "На графике мы построили набор получившихся точек и исходную функцию `f`. Теперь попробуем приблизить её линейной функцией $\\phi_1(x) = \\alpha_1 + \\beta_1 x$ методом наименьших квадратов, т.е. мы хотим решить задачу минимизации невязки `R`, где невязка для заданных параметров $\\alpha_1$ и $\\beta_1$ задаётся суммой квадратов отклонений функции $\\phi_1(x)$ в точках $x_i$ от $y_i$: \n", "\n", "$$\n", "R_1 = \\sum_{i=1}^{N} (\\phi_1(x_i) - y_i) ^ 2 = \\sum_{i=1}^{N} (\\alpha_1 + \\beta_1 x_i - y_i) ^ 2 \\sim \\min_{\\alpha_1, \\beta_1},\n", "$$\n", "\n", "где $x_i$ соответствует `x_data[i]`, а $y_i$ соответствует `y_data[i]`.\n", "\n", "Решить эту задачу можно методом [scipy.linalg.lstsq](https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.lstsq.html#scipy.linalg.lstsq). Он позволяет найти такой $x$, который минимизирует невязку СЛАУ $A x = b$ методом наименьших квадратов, т.е. $x = \\text{argmin}_{x\\in\\mathbb{R}^2} || A x- b|| ^ 2$. В нашей задаче этот $x$ представляет собой вектор параметров $\\alpha_1$ и $\\beta_1$. Нам необходимо составить матрицу $A$ и вектор $b$ таким образом, чтобы невязка $|| A x - b || ^ 2$ для заданного вектора $x = \\begin{pmatrix} \\alpha_1 \\\\ \\beta_1 \\end{pmatrix}$ совпадала с $R_1$. Для этого составим матрицу $A$ следующего вида:\n", "\n", "$$\n", "A = \\begin{pmatrix}\n", "1 & x_0 \\\\\n", "1 & x_1 \\\\\n", "\\vdots & \\vdots \\\\\n", "1 & x_n\n", "\\end{pmatrix},\n", "$$\n", "а в качестве вектора $b$ возьмем наш массив `y_data` и заметим, что невязка уравнения\n", "\n", "$$\n", "\\begin{pmatrix}\n", "1 & x_0 \\\\\n", "1 & x_1 \\\\\n", "\\vdots & \\vdots \\\\\n", "1 & x_n\n", "\\end{pmatrix} \\begin{pmatrix}\n", "\\alpha_1 \\\\ \\beta_1\n", "\\end{pmatrix} = \\begin{pmatrix} y_0 \\\\ y_1 \\\\ \\vdots \\\\ y_n\n", "\\end{pmatrix}\n", "$$ \n", "\n", "совпадает с искомой минимизируемой величиной $R_1$." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.0036541526156261706 5.057467746802313\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from scipy import linalg\n", "\n", "A = x_data[:, np.newaxis] ** [0, 1]\n", "b = y_data\n", "\n", "sol, _, _, _ = linalg.lstsq(A, b)\n", "alpha_1, beta_1 = sol\n", "y_approx = alpha_1 + beta_1 * x\n", "print(alpha_1, beta_1)\n", "\n", "\n", "fig, ax = plt.subplots()\n", "plot_problem(ax, x, y, x_data, y_data)\n", "ax.plot(x, y_approx)\n", "ax.legend([\"Исходная функция\", \"Аппроксимация прямой\", \"Данные для аппроксимации\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Как видно, аппроксимирующая функция подстроилась под набор точек, но не идеально. Это связано с тем, что мы искали решение в классе линейных функций, а искомая функция имеет квадратичное слагаемое. Расширим класс наших функций. Будем искать решение в виде функции $\\phi_2(x) = \\alpha_2 + \\beta_2 x + \\gamma_2 x^2$. \n", "\n", "Соответствующая СЛАУ с нужной нам невязкой будет иметь вид:\n", "\n", "$$\n", "\\begin{pmatrix}\n", "1 & x_0 & x_0 ^ 2\\\\\n", "1 & x_1 & x_1 ^ 2\\\\\n", "\\vdots & \\vdots & \\vdots \\\\\n", "1 & x_n & x_n^2\n", "\\end{pmatrix} \\begin{pmatrix}\n", "\\alpha_2 \\\\ \\beta_2 \\\\ \\gamma_2\n", "\\end{pmatrix} = \\begin{pmatrix} y_0 \\\\ y_1 \\\\ \\vdots \\\\ y_n\n", "\\end{pmatrix}.\n", "$$ " ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.4254345494947798 2.3228917501598714 2.7353265065738697\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "A = x_data[:, np.newaxis] ** [0, 1, 2]\n", "b = y_data\n", "\n", "sol, _, _, _ = linalg.lstsq(A, b)\n", "alpha_2, beta_2, gamma_2 = sol\n", "y_approx = alpha_2 + beta_2 * x + gamma_2 * x * x\n", "print(alpha_2, beta_2, gamma_2)\n", "\n", "fig, ax = plt.subplots()\n", "plot_problem(ax, x, y, x_data, y_data)\n", "ax.plot(x, y_approx)\n", "ax.legend([\"Исходная функция\", \"Аппроксимация квадратным трехчленом\", \"Данные для аппроксимации\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Квадратный трехчлен гораздо ближе проходит к исходной функции. \n", "\n", "Вообще говоря, таким способом можно искать решение в виде линейной комбинации любых функций $\\varphi(x) = c_1\\varphi_1(x) + \\cdots + c_k\\varphi_k(x)$. Соответствующая матрица $A$ будет иметь вид\n", "\n", "$$\n", "A = \\begin{pmatrix}\n", "\\varphi_1(x_1) &\\cdots & \\varphi_k(x_1) \\\\\n", "\\vdots & \\ddots & \\vdots \\\\\n", "\\varphi_1(x_N) &\\cdots & \\varphi_k(x_N)\n", "\\end{pmatrix}.\n", "$$\n", "\n", "А конкретно для полиномиальных функций существует функция [np.polyfit](https://numpy.org/doc/stable/reference/generated/numpy.polyfit.html). \n", "\n", "\n", "```{note}\n", "Все вышерассмотренные случаи представляют собой линейную аппроксимацию, т.к. аппроксимирующая функция линейно зависила от подбираемых параметров (коэффициентов).\n", "```\n", "\n", "### Нелинейная аппроксимация\n", "\n", "Сгенерируем данные для нелинейной аппроксимации." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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cG4/YcIEZsyYwfLly+nZs6dz+fTp0537z2rpZ2Rk0Lt3b958880cy7Nk/8bTqFEjDhywc5DfcsstREdHA3D69Gn69u3r/FmVxVpRAX1RNOvCp45yUXl64AFITPTuPlu3hmyJKz8vvPACQ4cOJTw8nOPHjwNw33330bVrVz799FMyMjI4fvw4VapUoXfv3kycOJG0tDRnovrkk09ITExk48aNHDhwgHbt2tGlSxfq1KlDRkYG7du3Z+nSpcyePdujLpCRI0fy2GOPAXDrrbeyaNEievXqxbPPPsujjz7KDTfcwPTp052xZvfggw8yc+ZM2rVrR0xMDPHx8bz33nt06tSJTZs2cccdd9CvXz8eeOABMjMz+fDDD1m7di2bN28uMK7hw4fTsWNHbr/9do9+rgCbN29my5YtztdfffUV6enpbNmyhQMHDhAXF+fxvoJFQLfQlfJnf/31F2+//TajRo3KsXzp0qXcfffdAISGhlKlShXAtnD/97//sW7dOh5+2E4humrVKgYOHEhoaCi1atWia9eu/PjjjwAcP36c8847z+2x58yZQ+vWrWndunWOVv2yZcvo0KEDMTExLF26lJ9++skZx7Fjx/I9nw0bNnDZZZc5x/i3atWKcuXK0aVLF9auXUujRo2oVq0aCQkJLFmyhDZt2lCtWjUAVq5c6Yzn3//+d479Tpo0iYULF/LQQw959HPNMnHiRJ544gnn69DQUE6ePElGRkY+7wpuAd1C12GLqkAetqRLwosvvsigQYOIjIz0aPuDBw9y/Phx0tPTOXXqFOecc06+2+/atYuoqCi36wYMGMDMmTMBnN0vp06d4p577mHdunXUr1+fSZMmOe+mnTRpEv379+fpp58mLS2Nu+66y8OztLK6bu68805mz57Nvn37uOOOO5zrL730UhYtWgSQ6xtAhQoVGD58OE8//TSTJ0/26HirV68mIiKC2NhY57IePXowb948atSoQb16ZfP/f0C30HXYovJXZ86c4bXXXmP06NG51nXv3p2XX34ZgIyMDI4ePQrYbocnn3ySQYMG8cgjjwA2Ec6ZM4eMjAxSU1NZsWIF7du3xxjDJ598kqNvuiBZybt69eocP36cjz/+2Lmudu3aREREsGLFCrcxA7Ru3Zply5Zx7NgxkpKS2LRpExkZGXz77be0a9cOgL59+/Lll1/y448/Eh8f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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "from matplotlib import pyplot as plt\n", "%matplotlib inline\n", "\n", "def f(x):\n", " return 2*np.exp(-3*x) + 4\n", "\n", "def plot_problem(ax, x_true, y_true, x_data, y_data):\n", " ax.scatter(x_data, y_data)\n", " ax.plot(x_true, y_true, 'r')\n", " ax.set_xlabel(\"x\")\n", " ax.set_xlabel(\"y\")\n", " ax.set_title(\"Аппроксимация\")\n", "\n", "\n", "\n", "N = 50\n", "sigma = 0.2\n", "x_data = np.random.uniform(low=0, high=1, size=N)\n", "y_data = f(x_data) + np.random.normal(loc=0, scale=sigma, size=N)\n", "\n", "x = np.linspace(0, 1, 100) # чтобы строить график\n", "y = f(x) # чтобы строить график\n", "\n", "\n", "fig, ax = plt.subplots()\n", "plot_problem(ax, x, y, x_data, y_data)\n", "ax.legend([\"Исходная функция\", \"Данные для апроксимации\",])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Будем искать нашу функцию в виде\n", "\n", "$$\n", "\\phi_{\\alpha, \\beta, \\gamma}(x) = \\alpha e^{\\beta x} + \\gamma,\n", "$$\n", "\n", "и попробуем восстановить значения параметров $\\alpha, \\beta$ и $\\gamma$ из сгенерированных данных. Аппроксимация не линейна, т.к. $\\phi$ нелинейно зависит от параметра $\\beta$. Метод [optimize.curve_fit](https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html) позволяет искать приближенное решение задачи нелинейной аппроксимации.\n", "\n", "Чтобы воспользоваться этим методом, необходимо определить функцию, которая первым своим аргументом принимает $x$ (может быть скаляром, а может быть и вектором), а остальными аргументами принимает параметры $p$. В примере ниже это функция `f_approx`." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Найденные параметры: \n", "alpha: 1.928,\n", "beta: -3.292,\n", "gamma: 4.060\n", "\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from scipy import optimize\n", "\n", "def f_approx(x, alpha, beta, gamma):\n", " return alpha * np.exp(beta * x) + gamma\n", "\n", "p, _ = optimize.curve_fit(f_approx, x_data, y_data, p0=[3, -6, 10])\n", "\n", "y_approx = f_approx(x, *p)\n", "\n", "fig, ax = plt.subplots()\n", "plot_problem(ax, x, y, x_data, y_data)\n", "ax.plot(x, y_approx, color=\"g\")\n", "ax.legend([\"Исходная функция\", \"Аппроксимация\", \"Данные для аппроксимации\"])\n", "\n", "print(\"\"\"\n", "Найденные параметры: \n", "alpha: {:.3f},\n", "beta: {:.3f},\n", "gamma: {:.3f}\n", "\"\"\".format(*p)\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В случае нелинейной аппроксимации следует проявлять особую осторожность, т.е. среднеквадратичное отклонение минимизируется численными методами и начальное предположение о значениях параметров $p0$ играет большую роль: при не удачном $p0$ алгоритм может сойтись не туда или вообще не сойтись. \n", "\n", "## Список литературы\n", "\n", "```{bibliography}\n", ":style: unsrt\n", "```" ] } ], "metadata": { "interpreter": { "hash": "1baa965d5efe3ac65b79dfc60c0d706280b1da80fedb7760faf2759126c4f253" }, "kernelspec": { "display_name": "Python 3.8.10 64-bit", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 2 }