Last active
March 18, 2019 10:23
-
-
Save pomo-mondreganto/5017af0afa13058e302ee291714a2ca5 to your computer and use it in GitHub Desktop.
Task 23 (5) from BHW 4
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"$f(x) = \\sqrt{1 - x^2} \\quad [a, b] = [0, 1]$\n", | |
"\n", | |
"$x_0 = 0, x_i = \\frac{i}{n}$\n", | |
"\n", | |
"$S_i = f\\left(\\frac{x_{i - 1} + x_i}{2}\\right) \\frac{1}{n}$\n", | |
"\n", | |
"$I = \\int \\limits_0^1 \\sqrt{1 - x^2} = \\frac{S_{\\text{circle}}}{4} = \\frac{\\pi}{4} \\approx 0.78539816$" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"import pandas as pd" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def f(x):\n", | |
" return np.sqrt(1 - x * x)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def get(n):\n", | |
" d = 1. / n\n", | |
" result = 0.\n", | |
" \n", | |
" for i in range(n):\n", | |
" x_i = d * i\n", | |
" x_ii = d * (i + 1)\n", | |
" result += f((x_i + x_ii) / 2.) / n\n", | |
" return result" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>real</th>\n", | |
" <th>approx</th>\n", | |
" <th>err</th>\n", | |
" <th>s</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>n</th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.789171732824577</td>\n", | |
" <td>0.003773569427129</td>\n", | |
" <td>2.683284822374950</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>16</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.786737951981630</td>\n", | |
" <td>0.001339788584182</td>\n", | |
" <td>2.385944730064856</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>32</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.785872850670559</td>\n", | |
" <td>0.000474687273111</td>\n", | |
" <td>2.208147001901588</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>64</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.785566168003386</td>\n", | |
" <td>0.000168004605938</td>\n", | |
" <td>2.089868598954976</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>128</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.785457593379461</td>\n", | |
" <td>0.000059429982013</td>\n", | |
" <td>2.005492790019204</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>256</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.785419180620520</td>\n", | |
" <td>0.000021017223072</td>\n", | |
" <td>1.942258551314332</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>512</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.785405595089595</td>\n", | |
" <td>0.000007431692147</td>\n", | |
" <td>1.893097536565201</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1024</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.785400791070969</td>\n", | |
" <td>0.000002627673521</td>\n", | |
" <td>1.853778253215027</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2048</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.785399092451015</td>\n", | |
" <td>0.000000929053567</td>\n", | |
" <td>1.821612262099438</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4096</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.785398491872911</td>\n", | |
" <td>0.000000328475462</td>\n", | |
" <td>1.794809255095244</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8192</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.785398279532022</td>\n", | |
" <td>0.000000116134574</td>\n", | |
" <td>1.772130702027616</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>16384</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.785398204457387</td>\n", | |
" <td>0.000000041059939</td>\n", | |
" <td>1.752692377329566</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>32768</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.785398177914360</td>\n", | |
" <td>0.000000014516912</td>\n", | |
" <td>1.735846010594087</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>65536</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.785398168529956</td>\n", | |
" <td>0.000000005132508</td>\n", | |
" <td>1.721105551736002</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>131072</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.785398165212066</td>\n", | |
" <td>0.000000001814618</td>\n", | |
" <td>1.708099249120909</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>262144</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.785398164039013</td>\n", | |
" <td>0.000000000641565</td>\n", | |
" <td>1.696538080966664</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>524288</th>\n", | |
" <td>0.785398163397448</td>\n", | |
" <td>0.785398163624275</td>\n", | |
" <td>0.000000000226827</td>\n", | |
" <td>1.686194097522441</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" real approx err \\\n", | |
"n \n", | |
"8 0.785398163397448 0.789171732824577 0.003773569427129 \n", | |
"16 0.785398163397448 0.786737951981630 0.001339788584182 \n", | |
"32 0.785398163397448 0.785872850670559 0.000474687273111 \n", | |
"64 0.785398163397448 0.785566168003386 0.000168004605938 \n", | |
"128 0.785398163397448 0.785457593379461 0.000059429982013 \n", | |
"256 0.785398163397448 0.785419180620520 0.000021017223072 \n", | |
"512 0.785398163397448 0.785405595089595 0.000007431692147 \n", | |
"1024 0.785398163397448 0.785400791070969 0.000002627673521 \n", | |
"2048 0.785398163397448 0.785399092451015 0.000000929053567 \n", | |
"4096 0.785398163397448 0.785398491872911 0.000000328475462 \n", | |
"8192 0.785398163397448 0.785398279532022 0.000000116134574 \n", | |
"16384 0.785398163397448 0.785398204457387 0.000000041059939 \n", | |
"32768 0.785398163397448 0.785398177914360 0.000000014516912 \n", | |
"65536 0.785398163397448 0.785398168529956 0.000000005132508 \n", | |
"131072 0.785398163397448 0.785398165212066 0.000000001814618 \n", | |
"262144 0.785398163397448 0.785398164039013 0.000000000641565 \n", | |
"524288 0.785398163397448 0.785398163624275 0.000000000226827 \n", | |
"\n", | |
" s \n", | |
"n \n", | |
"8 2.683284822374950 \n", | |
"16 2.385944730064856 \n", | |
"32 2.208147001901588 \n", | |
"64 2.089868598954976 \n", | |
"128 2.005492790019204 \n", | |
"256 1.942258551314332 \n", | |
"512 1.893097536565201 \n", | |
"1024 1.853778253215027 \n", | |
"2048 1.821612262099438 \n", | |
"4096 1.794809255095244 \n", | |
"8192 1.772130702027616 \n", | |
"16384 1.752692377329566 \n", | |
"32768 1.735846010594087 \n", | |
"65536 1.721105551736002 \n", | |
"131072 1.708099249120909 \n", | |
"262144 1.696538080966664 \n", | |
"524288 1.686194097522441 " | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"interesting = [2 ** x for x in range(3, 20)]\n", | |
"\n", | |
"results = []\n", | |
"\n", | |
"I = np.pi / 4.\n", | |
"\n", | |
"for n in interesting:\n", | |
" approx = get(n)\n", | |
" err = np.abs(approx - I)\n", | |
" s = - np.log(err) / np.log(n)\n", | |
" results.append([I, approx, err, s])\n", | |
"\n", | |
"pd.set_option(\"display.precision\", 15)\n", | |
"df = pd.DataFrame(index=interesting, columns=['real', 'approx', 'err', 's'], data=results)\n", | |
"df.index.name = 'n'\n", | |
"df" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Сходится со скоростью $\\frac{1}{n^{1.5}}$" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3.7", | |
"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.7.2" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment