Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- "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
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement