zeszyt_horner/Schemat Hornera.ipynb
2021-03-27 15:53:31 +01:00

259 lines
20 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "systematic-dining",
"metadata": {},
"source": [
"# Schemat Hornera"
]
},
{
"cell_type": "markdown",
"id": "fatal-canon",
"metadata": {},
"source": [
"Schemat Hornera jest metodą obliczania wartości wielomianu dla danej wartości argumentu. Ilość mnożeń jest zredukowana do minimum. Jest to również algorytm dzielenia wielomianu W(x) przez dwumian x - c. Schemat ten powiązany jest z nazwiskiem brytyjskiego matematyka Hornera żyjącego na przełomie XVIII i XIX wieku, który w 1819 roku podał sposób obliczania wartości wielomianu. 150 lat wcześniej Newton wykorzystał podobny sposób dla zmniejszenia liczby operacji fizycznych."
]
},
{
"cell_type": "markdown",
"id": "returning-paradise",
"metadata": {},
"source": [
"### Klasyczne podejście"
]
},
{
"cell_type": "markdown",
"id": "noticed-biotechnology",
"metadata": {},
"source": [
"Spójrzmy najpierw na tradycyjny sposób obliczania wartości wielomianu:"
]
},
{
"cell_type": "code",
"execution_count": 65,
"id": "martial-belle",
"metadata": {},
"outputs": [],
"source": [
"def oblicz_wartosc_wielomianu(wspolczynniki, x):\n",
" stopien = len(wspolczynniki) - 1\n",
" operacje = 0\n",
" wartosc = 0\n",
" \n",
" #do wyniku dodajemy kolejno obliczone ze współczynników wartości\n",
" for aktualny_stopien in range(stopien + 1):\n",
" wartosc += wspolczynniki[aktualny_stopien] * (x ** aktualny_stopien)\n",
" operacje += aktualny_stopien\n",
" if aktualny_stopien != 0:\n",
" #Po pierwszej iteracji współczynników, kolejne wymagają dodatkowej jednej operacji.\n",
" operacje += 1\n",
"\n",
" return f\"Wartość wielomianu dla argumentu {x} wynosi {wartosc}. Do obliczenia tej wartości, potrzebne było {operacje} operacji.\""
]
},
{
"cell_type": "markdown",
"id": "studied-cosmetic",
"metadata": {},
"source": [
"Powyższa funkcja oprócz wartości wielomianu liczy także ilość wykonanych operacji mnożenia. Możemy potem porównać, jak ta wartość wypada w porównaniu do schematu Hornera."
]
},
{
"cell_type": "code",
"execution_count": 85,
"id": "daily-radius",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Wartość wielomianu dla argumentu 10 wynosi 4841. Do obliczenia tej wartości, potrzebne było 9 operacji.\n"
]
}
],
"source": [
"#W(x) = 5x^3 - 2x^2 + 3x + 11\n",
"wspolczynniki = [11, 3, -2, 5] #w odwrotnej kolejności (zaczynając od najniższego stopnia)\n",
"x = 10\n",
"\n",
"print(oblicz_wartosc_wielomianu(wspolczynniki, x))"
]
},
{
"cell_type": "markdown",
"id": "proprietary-brighton",
"metadata": {},
"source": [
"### Schemat Hornera"
]
},
{
"cell_type": "markdown",
"id": "widespread-hawaiian",
"metadata": {},
"source": [
"Zobaczmy teraz, jak schemat Hornera radzi sobie z tym samym zadaniem:"
]
},
{
"cell_type": "code",
"execution_count": 57,
"id": "infectious-example",
"metadata": {},
"outputs": [],
"source": [
"def oblicz_wartosc_wielomianu_horner(wspolczynniki, x):\n",
" stopien = len(wspolczynniki) - 1\n",
" wartosc = wspolczynniki[stopien]\n",
" operacje = 0\n",
" \n",
" while stopien > 0:\n",
" stopien = stopien - 1\n",
" wartosc = wartosc * x + wspolczynniki[stopien]\n",
" \n",
" #wykonywana jest jedna operacja mnożenia\n",
" operacje += 1\n",
" \n",
" return f\"Wartość wielomianu dla argumentu {x} wynosi {wartosc}. Potrzebne było {operacje} operacji.\""
]
},
{
"cell_type": "markdown",
"id": "dutch-trading",
"metadata": {},
"source": [
"W tym przypadku, również zaczynając od najwyższego stopnia po kolei mnożymy wartość wielominu przez x, a następnie dodajemy ten współczynnik."
]
},
{
"cell_type": "code",
"execution_count": 63,
"id": "deluxe-evolution",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Wartość wielomianu dla argumentu 10 wynosi 4841. Potrzebne było 3 operacji.\n"
]
}
],
"source": [
"#W(x) = 5x^3 - 2x^2 + 3x + 11\n",
"wspolczynniki = [11, 3, -2, 5]\n",
"x = 10\n",
" \n",
"print(oblicz_wartosc_wielomianu_horner(wspolczynniki, x))"
]
},
{
"cell_type": "markdown",
"id": "useful-documentation",
"metadata": {},
"source": [
"Jak widać na powyższym przykładzie, schemat Hornera potrzebuje mniej operacji mnożenia, żeby obliczyć tą samą wartość wielomianu. Jest to szczególnie przydatne podczas optymalizowania aplikacji wykorzystujących wielomiany."
]
},
{
"cell_type": "markdown",
"id": "linear-intensity",
"metadata": {},
"source": [
"### Porównanie"
]
},
{
"cell_type": "markdown",
"id": "tutorial-brush",
"metadata": {},
"source": [
"Przy zastosowaniu schematu Hornera, liczba wymaganych operacji mnożenia jest taka sama, jak stopień wielomianu, podczas gdy klasyczne wyliczanie wartości wymaga ich znacznie więcej:"
]
},
{
"cell_type": "code",
"execution_count": 105,
"id": "genetic-freeware",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x2bc1ba20820>]"
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"x = [1, 2, 3, 4, 5, 6, 7, 8]\n",
"y1 = [2, 5, 9, 14, 20, 27, 35, 44]\n",
"y2 = [1, 2, 3, 4, 5, 6, 7, 8]\n",
"\n",
"plt.plot(x, y1, color='red', marker='o', linestyle='dashed')\n",
"plt.plot(x, y2, color='green', marker='o', linestyle='dashed')"
]
},
{
"cell_type": "markdown",
"id": "monthly-instrument",
"metadata": {},
"source": [
"Na powyższym wykresie widać zależność pomiędzy stopniem wielomianu (oś x), a liczbą wymaganych do obliczenia jego wartości operacji mnożenia (oś y)."
]
},
{
"cell_type": "markdown",
"id": "published-developer",
"metadata": {},
"source": [
"czerwony - Tradycyjna metoda \n",
"zielony - schemat Hornera"
]
}
],
"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.9.2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}