1746 lines
313 KiB
Plaintext
1746 lines
313 KiB
Plaintext
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Pola figur: całkowanie analityczne i metodą Monte Carlo\n",
|
||
|
"\n",
|
||
|
"W jaki sposób można obliczyć pole figury o zadanym kształcie, który jest trudny do analitycznego opisu?\n",
|
||
|
"W tym pliku przedyskutujemy sposób obliczania pól figur oparty na metodach losowych z wykorzystaniem prostych spacerów losowych. Porównamy wyniki z obliczeniami analitycznymi na konkretnym przykładzie.\n",
|
||
|
"\n",
|
||
|
"<div class=\"alert alert-block alert-info\"> \n",
|
||
|
"Aby wzbogacić nasz repertuar matematyczny wykorzystamy w tym pliku funkcjonalność SageMath - obszernej biblioteki, która rozwija metody symboliczne Pythona. Do uruchomienia tego pliku będziesz potrzebować jądra \"SageMath\" w wersji co najmniej 8.9. Bez instalacji ten plik można rekompilować np. w przeglądarkowej wersji SageMath pod adresem cocalc.com.</div>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"<h2>Problem</h2>\n",
|
||
|
"<div class=\"alert alert-block alert-success\"> \n",
|
||
|
"Oblicz z dokładnością $0.01$ pole wewnątrz następującej figury.</div>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 129,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAegAAAEFCAYAAAAoinRQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi40LCBodHRwOi8vbWF0cGxvdGxpYi5vcmcv7US4rQAAIABJREFUeJzt3Xlc1NX+P/DXsCOy5AaiuOae1xVxX7Ioy7VMy3IrK3O5l8xK85aaa1leK7FvesvlambXLdOuRaVokeUC7qgpCi5IqIG4DALn98f7NxACyjLD+czM6/l4zGOYYZh5f5iZz/tzzuec9zEppRSIiIjIUFx0B0BEREQFMUETEREZEBM0ERGRATFBExERGRATNBERkQExQRMRERkQEzQREZEBMUETEREZEBM0ERGRATFBExERGRATNBERkQG56Q6gtHJycnD+/Hn4+vrCZDLpDoeIiKhQSilcvXoVwcHBcHEpQbtYaRIdHa169+6tqlevrgCoDRs2lOjvk5KSFABeeOGFF154sYtLUlJSifKcthb0tWvX0KJFC4wcORKPP/54if/e19cXAJCUlAQ/Pz9rh0dERGQV6enpCAkJyc1bxaUtQffq1Qu9evUq9d9burX9/PyYoImIyPBKejrWbs5Bm81mmM3m3Nvp6ekaoyEiIrItuxnFPWfOHPj7++deQkJCdIdERERkM3aToCdPnoy0tLTcS1JSku6QiIiIbMZuurg9PT3h6empOwwiIqJyYTctaCIiImeirQWdkZGB33//Pfd2QkIC4uLiUKlSJdSqVUtXWERERIagLUHv2bMHPXr0yL09YcIEAMDw4cOxbNkyTVEREREZg7YE3b17dyildL08ERGRofEcNBERkQExQRMRERkQEzQREZEBMUETEREZkN0l6MjISDRt2hShoaG6QyEiIrIZk7LTodTp6enw9/dHWloaV7MiIiLDKm2+srsWNBERkTNggiYiIjIgJmgiIiIDYoImIiIyICZoIiIiA2KCJiIiMiAmaCIiIgNigiYiIjIgu0vQrCRGRETOgJXEiIiIbIiVxIiIiBwIEzQREZEBMUETEREZEBM0ERGRATFBExERGRATNBERkQExQRMRERkQEzQREZEB2V2CZiUxIiJyBqwkRkREZEOsJEZERORAmKCJiIgMiAmaiIjIgJigiYiI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
|
||
|
"text/plain": [
|
||
|
"Graphics object consisting of 1 graphics primitive"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 129,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"x,y=var('x,y')\n",
|
||
|
"implicit_plot((x**2+y**2)**2-2*(x**2-y**2),(x,-2,2),(y,-2,2),figsize=[5,5],ymax=1,ymin=-1,xmin=-2,xmax=2)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## Obliczenia analityczne\n",
|
||
|
"\n",
|
||
|
"W naszym pierwszym podejściu obliczymy pole wewnątrz \"ósemki\" w sposób dokładny (analityczny). W tym celu musimy rozwiazać uwikłane równanie opisujące krzywą."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"### Rozwiązanie równania\n",
|
||
|
"Najpierw \"rozwiązujemy\" nasze równanie uwikłane.\n",
|
||
|
"\n",
|
||
|
"$$(x^2+y^2)^2=2(x^2-y^2)$$"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 7,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"solv=solve((x**2+y**2)**2-2*(x**2-y**2)==0,(x,y))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 8,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/html": [
|
||
|
"<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left[\\left[x = r_{1}, y = \\sqrt{-r_{1}^{2} - \\sqrt{4 \\, r_{1}^{2} + 1} - 1}\\right], \\left[x = r_{2}, y = -\\sqrt{-r_{2}^{2} - \\sqrt{4 \\, r_{2}^{2} + 1} - 1}\\right], \\left[x = r_{3}, y = \\sqrt{-r_{3}^{2} + \\sqrt{4 \\, r_{3}^{2} + 1} - 1}\\right], \\left[x = r_{4}, y = -\\sqrt{-r_{4}^{2} + \\sqrt{4 \\, r_{4}^{2} + 1} - 1}\\right]\\right]</script></html>"
|
||
|
],
|
||
|
"text/plain": [
|
||
|
"[[x == r1, y == sqrt(-r1^2 - sqrt(4*r1^2 + 1) - 1)], [x == r2, y == -sqrt(-r2^2 - sqrt(4*r2^2 + 1) - 1)], [x == r3, y == sqrt(-r3^2 + sqrt(4*r3^2 + 1) - 1)], [x == r4, y == -sqrt(-r4^2 + sqrt(4*r4^2 + 1) - 1)]]"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"pretty_print(solv)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"<div class=\"alert alert-block alert-success\"> \n",
|
||
|
"<p>Powyższy obiekt przechowuje wszystke \"lokalne\" rozwiązania naszego równania. Wykorzystamy je do napisania równań funkcji, które kawałkami opisują kształt naszej \"ósemki\" (precyzyjnie: lemniskaty Bernoulliego).</p>\n",
|
||
|
"\n",
|
||
|
"<p><b>UWAGA:</b> dwie spośród podanych wyżej funkcji rozwiązań nie opisują rzeczywistych części wykresu - ignorujemy je.</p></div>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 9,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"y1=solv[2][1].rhs() #wybieramy prawą stronę trzeciego równania\n",
|
||
|
"r=y1.variables()[0] #odnosimy się do jego wewnętrznej zmiennej symbolicznej\n",
|
||
|
"f=y1.subs({r:x}) #i podstawiamy ustaloną przez nas od początku zmienną x\n",
|
||
|
"\n",
|
||
|
"#sprawdzamy równość podstawienia\n",
|
||
|
"assert bool(f==sqrt(-x^2 + sqrt(4*x^2 + 1) - 1))\n",
|
||
|
"\n",
|
||
|
"#to będzie nasza \"rozwiązana\" funkcja\n",
|
||
|
"funkcja=sqrt(-x^2 + sqrt(4*x^2 + 1) - 1)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"### W jakim prostokącie mieści się wykres lemniskaty?\n",
|
||
|
"\n",
|
||
|
"Obliczmy teraz formalnie liczby $a$ i $b$ takie, że zbiór punktów\n",
|
||
|
"\n",
|
||
|
"$$L=\\{(x,y)\\in\\mathbb{R}^2: (x^2+y^2)^2=2(x^2-y^2)\\}$$\n",
|
||
|
"spełnia\n",
|
||
|
"\n",
|
||
|
"$$\\max_{(x,y)\\in L} x = - \\min_{(x,y)\\in L} x = a$$\n",
|
||
|
"\n",
|
||
|
"oraz \n",
|
||
|
"\n",
|
||
|
"$$\\max_{(x,y)\\in L} y = - \\min_{(x,y)\\in L} y = b$$\n",
|
||
|
"\n",
|
||
|
"Wartość parametru $a$ przy nam się przy obliczaniu pola (całki) metodą analityczną. Parametr $b$ będzie nam potrzebny również przy obliczaniu pola numerycznie metodą Monte Carlo."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Liczbę $a$ wyznaczamy określając dziedzinę funkcji $f(x) = \\sqrt{\\sqrt{4x^2+1}-x^2-1}$"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 22,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"(x^2 + 1)^2 - 4*x^2 - 1 == 0"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 22,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"#UWAGA: w SageMath można używać zarówno ** jak i ^ jako symbolu potęgowania (w zwykłym Python symbol ^ oznacza\n",
|
||
|
"#operację XOR; w SageMath ta operacja jest oznaczona jako ^^)\n",
|
||
|
"eq1=0==-x^2 + sqrt(4*x^2 + 1) - 1 #formułujemy zerowanie argumenty pod zewnętrznym pierwiastkiem\n",
|
||
|
"\n",
|
||
|
"#wykonujemy przekształcenia na równaniu eq1, aby doprowadzić je do wygodnej wielomianowej postaci\n",
|
||
|
"eq1=eq1.add_to_both_sides(x^2+1)\n",
|
||
|
"eq1=eq1*eq1 #podniesienie obu stron do kwadratu\n",
|
||
|
"eq1=eq1.add_to_both_sides(-(4*x^2+1))\n",
|
||
|
"eq1"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 23,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"[x == -sqrt(2), x == sqrt(2), x == 0]"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 23,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"solve(eq1,x)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Zatem nasz parametr $a$ wynosi $\\sqrt{2}$."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Liczbę $b$ obliczymy wyznaczając maksimum osiągane przez funkcję $f(x)$ na przedziale $(0,\\sqrt{2})$."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"<div class=\"alert alert-block alert-success\"> \n",
|
||
|
"Obliczamy pochodną funkcji $f$ i zauważamy, że mianownik jest dodatni. Do określenia przebiegu funkcji użyjemy informacji o znaku licznika.</div>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 33,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"pochodnaf=funkcja.derivative(x).factor()\n",
|
||
|
"licznik=pochodnaf.numerator()\n",
|
||
|
"mianownik=pochodnaf.denominator()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 34,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/html": [
|
||
|
"<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}-x {\\left(\\sqrt{4 \\, x^{2} + 1} - 2\\right)}</script></html>"
|
||
|
],
|
||
|
"text/plain": [
|
||
|
"-x*(sqrt(4*x^2 + 1) - 2)"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"#licznik\n",
|
||
|
"pretty_print(licznik)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 35,
|
||
|
"metadata": {
|
||
|
"scrolled": true
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/html": [
|
||
|
"<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\sqrt{4 \\, x^{2} + 1} \\sqrt{-x^{2} + \\sqrt{4 \\, x^{2} + 1} - 1}</script></html>"
|
||
|
],
|
||
|
"text/plain": [
|
||
|
"sqrt(4*x^2 + 1)*sqrt(-x^2 + sqrt(4*x^2 + 1) - 1)"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"#mianownik\n",
|
||
|
"pretty_print(mianownik)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 104,
|
||
|
"metadata": {
|
||
|
"scrolled": true
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"Graphics object consisting of 1 graphics primitive"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 104,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"#wykres licznika pochodnej\n",
|
||
|
"plot(licznik,(x,0,sqrt(2)),figsize=[3,3])"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"<div class=\"alert alert-block alert-success\"> \n",
|
||
|
"Z postaci funkcji $-x(\\sqrt{4x^2+1}-2)$ wynika, że jest dodatnia dla $x<c$ i ujemna dla $x>c$, gdzie $c$ jest jedynym miejscem zerowym tej funkcji. Obliczmy zatem $c$.</div>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 41,
|
||
|
"metadata": {
|
||
|
"scrolled": true
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"[\n",
|
||
|
"x == 1/2*sqrt(3)\n",
|
||
|
"]\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"with assuming(x>0):\n",
|
||
|
" print(solve(licznik==0,x))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Czyli funkcja $f(x)$ jest rosnąca na przedziale $\\left(0,\\frac{\\sqrt{3}}{2}\\right)$ i malejąca na przedziale $\\left(\\frac{\\sqrt{3}}{2},\\sqrt{2}\\right)$. \n",
|
||
|
"\n",
|
||
|
"<div class=\"alert alert-block alert-success\"> \n",
|
||
|
"W punkcie $x=\\frac{\\sqrt{3}}{2}$ funkcja $f(x)$ osiąga maksimum równe $b=1/2$.</div>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 42,
|
||
|
"metadata": {
|
||
|
"scrolled": true
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"1/2"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 42,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"funkcja.subs({x:sqrt(3)/2})"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Wizualizacja pudełka ograniczającego kształt lemniskaty"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 231,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"Graphics object consisting of 12 graphics primitives"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"#rysowanie lemniskaty ze zmodyfikowaną skalą\n",
|
||
|
"pup=plot(f,(x,-sqrt(2),sqrt(2)),xmin=-sqrt(2)-0.2,xmax=sqrt(2)+0.2,ticks=[[-sqrt(2),-sqrt(2)/2,0,sqrt(2)/2,sqrt(2)],[-1/2,0,1/2]],tick_formatter=[sqrt(2)/2,1/2])\n",
|
||
|
"pdown=plot(-f,(x,-sqrt(2),sqrt(2)),ticks=[[-sqrt(3)/2,0,sqrt(3)/2],[-1/2,0,1/2]])\n",
|
||
|
"lemniskata=pdown+pup\n",
|
||
|
"\n",
|
||
|
"#pudełko dookoła lemniskaty\n",
|
||
|
"pudelko=plot(1/2,(x,-sqrt(2),sqrt(2)),color='red',fill='axis',fillcolor='green',fillalpha=0.1)+line([(-sqrt(2),-1/2),(-sqrt(2),1/2)],color='red')\n",
|
||
|
"pudelko+=plot(-1/2,(x,-sqrt(2),sqrt(2)),color='red')+line([(sqrt(2),-1/2),(sqrt(2),1/2)],color='red')\n",
|
||
|
"\n",
|
||
|
"#linie maksimów (przerywane, zielone)\n",
|
||
|
"linie=line([(sqrt(3)/2,0),(sqrt(3)/2,1/2)],linestyle=\"--\",color=\"green\")\n",
|
||
|
"linie+=line([(-sqrt(3)/2,0),(-sqrt(3)/2,1/2)],linestyle=\"--\",color=\"green\")\n",
|
||
|
"\n",
|
||
|
"#dodatkowe etykiety\n",
|
||
|
"teksty=text(\"$\\\\frac{\\\\sqrt{3}}{2}$\",(sqrt(3)/2+0.05,-0.05),color='green')\n",
|
||
|
"teksty+=text(\"$\\\\frac{-\\\\sqrt{3}}{2}$\",(-sqrt(3)/2-0.05,-0.05),color='green')\n",
|
||
|
"\n",
|
||
|
"#końcowy wykres\n",
|
||
|
"show(pudelko+lemniskata+teksty+linie,figsize=[6,6],aspect_ratio=1)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Teraz możemy obliczyć wartość pola wewnątrz figury jako sumę czterech całek (każda odpowiada jednej ćwiartce figury)."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 227,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"Graphics object consisting of 8 graphics primitives"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"plg=plot(f,(x,-sqrt(2),0),fill='min',fillcolor='blue', fillalpha=.2)\n",
|
||
|
"pld=plot(-f,(x,-sqrt(2),0),fill='max',fillcolor='red', fillalpha=.2)\n",
|
||
|
"ppg=plot(f,(x,0,sqrt(2)),fill='min',fillcolor='green', fillalpha=.2)\n",
|
||
|
"ppd=plot(-f,(x,0,sqrt(2)),fill='max',fillcolor='yellow', fillalpha=.2)\n",
|
||
|
"show(plg+pld+ppg+ppd,figsize=[4,4],aspect_ratio=1)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 105,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"2.0000000070692856"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 105,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"#Pole wewnątrz lemniskaty\n",
|
||
|
"2*integrate(funkcja,(x,-sqrt(2),sqrt(2))).n()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 114,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"(2.0000000070692856, 1.4825283125400555e-06)"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 114,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"#szybsza metoda numerycznego całkowania z kontrolą błędu (wartość całki, błąd)\n",
|
||
|
"integral_numerical(2*funkcja,-sqrt(2),sqrt(2),max_points=100)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Hmm, być może wartość pola wynosi $2$, więc wartość całki z $f(x)$ wynosi $1$ w przedziale $(-\\sqrt{2},\\sqrt{2})$. Sprawdźmy to !"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"<h3> Hipoteza</h3>\n",
|
||
|
"<div class=\"alert alert-block alert-info\"> \n",
|
||
|
"\n",
|
||
|
"$$P=\\int_{0}^{\\sqrt{2}}\\sqrt{\\sqrt{4x^2 + 1}-x^2 - 1}\\: dx = \\frac{1}{2}$$</div>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Wyznaczymy najpierw parametryzację promieniem i kątem $(r,t)$ dla naszego równania krzywej Bernoulliego.\n",
|
||
|
"\n",
|
||
|
"Korzystamy ze standardowej zamiany zmiennych\n",
|
||
|
"\n",
|
||
|
"$$x=r\\cos(t),\\quad y=r\\sin(t)$$"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 131,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"(r^2 + 4*sin(t)^2 - 2)*r^2"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 131,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"r,t=var('r,t')\n",
|
||
|
"((x**2+y**2)**2-2*(x**2-y**2)).subs({x:r*cos(t),y:r*sin(t)}).simplify_full().factor()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"<div class=\"alert alert-block alert-success\"> \n",
|
||
|
"Zatem równanie uwikłane lemniskaty we współrzędnych biegunowych $(r,t)$ jest postaci\n",
|
||
|
"\n",
|
||
|
"$$r^2+4\\sin(t)^2-2=0$$</div>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 132,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"[r == -sqrt(-4*sin(t)^2 + 2), r == sqrt(-4*sin(t)^2 + 2)]"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 132,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"solve(r^2 + 4*sin(t)^2 - 2==0,r)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Zatem możemy sparametryzować naszą krzywą następującymi równaniami\n",
|
||
|
"\n",
|
||
|
"$x=r \\cos(t), \\quad y=r \\sin(t)$, gdzie\n",
|
||
|
"\n",
|
||
|
"$r=\\pm \\sqrt{2-4 \\sin(t)^2}=\\pm \\sqrt{2\\cos(t)}=\\pm \\sqrt{4\\cos(t)^2-2}$"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 225,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"Graphics object consisting of 1 graphics primitive"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 225,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"parametric_plot((sqrt(2*cos(2*t))*cos(t),sqrt(2*cos(2*t))*sin(t)),(t,0,pi/4) ,figsize=[3,3])"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 224,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"Graphics object consisting of 1 graphics primitive"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 224,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"parametric_plot((-sqrt(2*cos(2*t))*cos(t),-sqrt(2*cos(2*t))*sin(t)),(t,-pi/4,pi/4),figsize=[3,3])"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Świetnie, zatem możemy naszą całkę $P$ przetransformować do postaci, gdzie będzie zależała wyłącznie od zmiennej $t$."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 276,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"f1=funkcja.subs({x:sqrt(4*cos(t)**2-2)*cos(t)})\n",
|
||
|
"d1=x.subs({x:sqrt(4*cos(t)**2-2)*cos(t)}).derivative(t)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 263,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/html": [
|
||
|
"<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\sqrt{-4 \\, \\cos\\left(t\\right)^{4} + 2 \\, \\cos\\left(t\\right)^{2} + \\sqrt{16 \\, \\cos\\left(t\\right)^{4} - 8 \\, \\cos\\left(t\\right)^{2} + 1} - 1}</script></html>"
|
||
|
],
|
||
|
"text/plain": [
|
||
|
"sqrt(-4*cos(t)^4 + 2*cos(t)^2 + sqrt(16*cos(t)^4 - 8*cos(t)^2 + 1) - 1)"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"f1=f1.simplify_full()\n",
|
||
|
"pretty_print(f1)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Zauważmy, że \n",
|
||
|
"\n",
|
||
|
"$$16\\cos(t)^4 - 8\\cos(t)^2 + 1 = (4\\cos(t)^2 - 1)^2$$\n",
|
||
|
"\n",
|
||
|
"oraz\n",
|
||
|
"\n",
|
||
|
"$4\\cos(t)^2 - 1\\geq 0$ skoro $t\\in(0,\\frac{\\pi}{4})$"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 285,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/html": [
|
||
|
"<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\sqrt{-4 \\, \\sin\\left(t\\right)^{4} + 2 \\, \\sin\\left(t\\right)^{2}}</script></html>"
|
||
|
],
|
||
|
"text/plain": [
|
||
|
"sqrt(-4*sin(t)^4 + 2*sin(t)^2)"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"f1=sqrt(-4*cos(t)**4+2*cos(t)**2+(4*cos(t)**2-1)-1)\n",
|
||
|
"pretty_print(f1.simplify_full())"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"To wyrażenie uprościmy dalej\n",
|
||
|
"\n",
|
||
|
"$$\\sqrt{-4\\sin(t)^4+2\\sin(t)^2} = \\sin(t)\\sqrt{2(1-2\\sin(t)^2)}=\\sin(t)\\sqrt{4\\cos(t)^2-2}$$ na mocy naszych założeń o $t$."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 300,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/html": [
|
||
|
"<html><script type=\"math/tex; mode=display\">\\newcommand{\\Bold}[1]{\\mathbf{#1}}-2 \\, {\\left(4 \\, \\cos\\left(t\\right)^{2} - 1\\right)} \\sin\\left(t\\right)^{2}</script></html>"
|
||
|
],
|
||
|
"text/plain": [
|
||
|
"-2*(4*cos(t)^2 - 1)*sin(t)^2"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"f1=(sin(t)*sqrt(4*cos(t)**2-2))\n",
|
||
|
"d1=d1.factor()\n",
|
||
|
"pretty_print((f1*d1).simplify().expand().simplify_full())"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 301,
|
||
|
"metadata": {
|
||
|
"scrolled": true
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"-2*(4*cos(t)^2 - 1)*sin(t)^2"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 301,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"(f1*d1).simplify().expand().simplify_full()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"<div class=\"alert alert-block alert-success\"> \n",
|
||
|
"Zatem metodą dokładną pole wewnątrz lemniskaty jest czterokrotnym polem jednego parametryzowanego kawałka $P$. Parametryzacja jest zgodna z orientacją osi, gdy $t$ maleje od $\\frac{\\pi}{4}$ do $0$. Czyli\n",
|
||
|
"\n",
|
||
|
"$P = \\int_{x=0}^{x=\\sqrt{2}} \\sqrt{\\sqrt{4x^2 + 1}-x^2-1}\\: dx=\\int_{t=\\pi/4}^{t=0}-2(4\\cos(t)^2-1)\\cdot \\sin(t)^2 dt$ </div>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 133,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"1/2"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 133,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"integrate(-2*(4*cos(t)^2 - 1)*sin(t)^2,(t,pi/4,0))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"<h3>Problem</h3>\n",
|
||
|
"<i>Czy możemy obliczyć przybliżenie pola lemniskaty za pomocą metody nieanalitycznej?</i>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"<h2> Metoda numeryczna 1:</h2>\n",
|
||
|
"<div class=\"alert alert-block alert-success\"> \n",
|
||
|
"Wygenerujemy zbiór punktów na płaszczyźnie w obszarze, w którym mieści się cała lemniskata.</div>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Nasza lemniskata styka się z bokami prostokąta $A=[-\\sqrt{2},\\sqrt{2}]\\times [-1/2,1/2]$.\n",
|
||
|
"\n",
|
||
|
"Pole tego prostokąta wynosi $2\\sqrt{2}$. Wylosujemy punkty w obu przedziałach (jednostajnie) i zobaczymy ile ich potrzeba, aby uzyskać rozsądne przybliżenie."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"<b>UWAGA:</b> W tym rozwiązaniu zastosujemy generator liczb pseudolosowych, który produkuje dla nas liczby z przedziału $[0,1]$ z rozkładem jednostajnym."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 222,
|
||
|
"metadata": {
|
||
|
"scrolled": true
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"Graphics object consisting of 1 graphics primitive"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 222,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"r=random() #zmienna o rozkładzie jednostajnym i wartościac w przedziale [0,1]\n",
|
||
|
"list_plot([random() for i in range(0,100)],figsize=[3,3])"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Generujemy losowy punkt w prostokącie $A$"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 137,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"def LosowyPunkt():\n",
|
||
|
" x=sqrt(2).n()*(2*random()-1)\n",
|
||
|
" y=random()-1/2\n",
|
||
|
" return (x,y)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 221,
|
||
|
"metadata": {
|
||
|
"scrolled": true
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"Graphics object consisting of 100 graphics primitives"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"li=[point(LosowyPunkt()) for _ in range(0,100)]\n",
|
||
|
"show(sum(li),figsize=[3,3])"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Teraz potrzebujemy funkcji, która wskaże czy zadany punkt znajduje się we wnętrzu lemniskaty lub nie."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 141,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"def CzyWewnatrzLemniskaty(punkt):\n",
|
||
|
" x,y=punkt\n",
|
||
|
" f=sqrt(-x^2 + sqrt(4*x^2 + 1) - 1)\n",
|
||
|
" if abs(y)<=f:\n",
|
||
|
" return True\n",
|
||
|
" else:\n",
|
||
|
" return False"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 146,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"True"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 146,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"CzyWewnatrzLemniskaty((1/4,1/8))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 147,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"False"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 147,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"CzyWewnatrzLemniskaty((0,1))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 198,
|
||
|
"metadata": {
|
||
|
"scrolled": true
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"Graphics object consisting of 9 graphics primitives"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 198,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"lem=plot(f,(x,-sqrt(2),sqrt(2)),fill='min',fillcolor='yellow', fillalpha=.2,figsize=[4,4],aspect_ratio=1,ticks=[[],[]])\n",
|
||
|
"lem+=plot(-f,(x,-sqrt(2),sqrt(2)),fill='max',fillcolor='yellow', fillalpha=.2)\n",
|
||
|
"pt=point((1/4,1/8))+point((0,1))\n",
|
||
|
"teksty=text(\"(1/4,1/8)\",(1/4+0.4,1/8))+text(\"(0,1)\",(+0.2,1-0.1))\n",
|
||
|
"teksty+=text(\"Lemniskata $(x^2+y^2)^2=2(x^2-y^2)$\", (0.0,1.3), background_color=(1,1,0.8),fontsize=8)\n",
|
||
|
"\n",
|
||
|
"lem+pt+teksty"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Obliczanie pola polega na wygenerowaniu zestawu próbek punktów, dla których sprawdzamy czy należą do wnętrza lemniskaty."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 199,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"def PoleLemniskaty(proba):\n",
|
||
|
" traf=0\n",
|
||
|
" for _ in range(0,proba):\n",
|
||
|
" if CzyWewnatrzLemniskaty(LosowyPunkt()):\n",
|
||
|
" traf+=1\n",
|
||
|
" return traf/proba*(2*sqrt(2).n()) #skalujemy ze względu na rozmiar prostokąta A"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 223,
|
||
|
"metadata": {
|
||
|
"scrolled": true
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"Graphics object consisting of 1 graphics primitive"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 223,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"list_plot([PoleLemniskaty(1000*k) for k in range(1,10)],figsize=[3,3])"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Przy wyborze niewielkiej liczby punktów próbkujących dokładność jest niezadowalająca. Jedną z przyczyn kłopotów z dobrym przybliżeniem jest też jakość próbek losowych pochodzących z funkcji `random`."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 209,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"2.82842712474619"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 209,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"PoleLemniskaty(5)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 214,
|
||
|
"metadata": {
|
||
|
"scrolled": true
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"2.00818325856980"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 214,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"PoleLemniskaty(500)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 207,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"2.00224356160783"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 207,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"PoleLemniskaty(50000)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"<h2>Metoda numeryczna 2</h2>\n",
|
||
|
" <h3> Całkowanie z wykorzystaniem spacerów losowych</h3>\n",
|
||
|
"\n",
|
||
|
"<div class=\"alert alert-block alert-success\"> \n",
|
||
|
"W ostatniej części postawimy sobie ambitniejsze zadanie. Zakładamy na początek, że mamy do dyspozycji tylko prosty generator bitowy `genbit` (który zwraca wartości $0$ i $1$ z prawdopodobieństwem bliskim $50\\%$).\n",
|
||
|
"\n",
|
||
|
"Skonstruujemy na bazie generatora bitowego zmienną losową `step`, która z prawdopodobieństwem $1/4$ zwraca wartość $-1$, z prawdopodobieństwem $1/2$ zwraca wartość $0$ i z prawdopodobieństwem $1/4$ zwraca wartość $1$.\n",
|
||
|
"\n",
|
||
|
"Zmienna $K$ może posłużyć do konstrukcji spaceru losowego po prostej, w którym połowę czasu spędzamy stojąc w miejscu.</div>\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 233,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"def genbit():\n",
|
||
|
" return choice([0,1])"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 239,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Częstość zer = 0.501960000000000\n",
|
||
|
"Częstość jedynek = 0.498040000000000\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"proba=100000\n",
|
||
|
"probka=[genbit() for _ in range(0,proba)]\n",
|
||
|
"\n",
|
||
|
"print(\"Częstość zer = \"+str(probka.count(0)/proba*1.0))\n",
|
||
|
"print(\"Częstość jedynek = \"+str(probka.count(1)/proba*1.0))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 240,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"def step():\n",
|
||
|
" go=genbit()\n",
|
||
|
" if go==1:\n",
|
||
|
" left=genbit()\n",
|
||
|
" if left==1:\n",
|
||
|
" return -1\n",
|
||
|
" else:\n",
|
||
|
" return 1\n",
|
||
|
" else:\n",
|
||
|
" return 0"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Zbadajmy numerycznie rozkłąd zmiennej losowej `step`"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 246,
|
||
|
"metadata": {
|
||
|
"scrolled": true
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"P(step=-1)=0.240000000000000\n",
|
||
|
"P(step=0)=0.508000000000000\n",
|
||
|
"P(step=1)=0.252000000000000\n",
|
||
|
"\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"proba=1000\n",
|
||
|
"li=[step() for i in range(0,proba)]\n",
|
||
|
"le=li.count(-1)\n",
|
||
|
"st=li.count(0)\n",
|
||
|
"ri=li.count(1)\n",
|
||
|
"ll=len(li)\n",
|
||
|
"print(''.join([\"P(step={})={}\\n\".format(x[0],x[1]*1.0/ll) for x in [(-1,le),(0,st),(1,ri)]]))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Dla ustalonej pozycji początkowej $\\{-1,0,1\\}$ konstruujemy dodatkową funkcję, która zwróci nam losową pozycję (stan) po zastosowaniu zmiennej `step`."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 247,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"states=[-1,0,1]\n",
|
||
|
"def RandomStep(init):\n",
|
||
|
" s=step()\n",
|
||
|
" if s==0:\n",
|
||
|
" return init\n",
|
||
|
" else:\n",
|
||
|
" return states[(init+s+1)%3]"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 248,
|
||
|
"metadata": {
|
||
|
"scrolled": true
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"P(step=-1)=0.253000000000000\n",
|
||
|
"P(step=0)=0.255000000000000\n",
|
||
|
"P(step=1)=0.492000000000000\n",
|
||
|
"\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"proba=1000\n",
|
||
|
"li=[RandomStep(1) for i in range(0,proba)]\n",
|
||
|
"le=li.count(-1)\n",
|
||
|
"st=li.count(0)\n",
|
||
|
"ri=li.count(1)\n",
|
||
|
"ll=len(li)\n",
|
||
|
"print(''.join([\"P(step={})={}\\n\".format(x[0],x[1]*1.0/ll) for x in [(-1,le),(0,st),(1,ri)]]))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"<div class=\"alert alert-block alert-success\"> \n",
|
||
|
"Teraz naszym celem jest skonstruowanie zmiennej losowej, która przyjmuje jeden ze stanów $\\{-1,0,1\\}$ z prawdopodobieństwem $1/3$. Nie możemy bezpośrednio do tego celu wykorzystać naszej poprzedniej zmiennej, ale korzystając z niej możemy skonstruować łańcuch Markowa, który będzie miał tę cechę, że jego rozkład graniczny będzie jednostajny.</div>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Nasz łańcuch Markowa jest aperiodyczny i nierozkładalny, zatem posiada jedyny stan stacjonarny, do którego zbiega każdy stan początkowy. Stan stacjonarny odpowiada wektorowi własnemu (znormalizowanemu) podporządkowanemu wartości własnej $1$."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 250,
|
||
|
"metadata": {
|
||
|
"scrolled": true
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"[1, 1/4, 1/4]"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 250,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"m=matrix([[1/2,1/4,1/4],[1/4,1/2,1/4],[1/4,1/4,1/2]])\n",
|
||
|
"m.eigenvalues()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 254,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"Looped digraph on 3 vertices"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 254,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"#graf łańcucha Markowa\n",
|
||
|
"g = DiGraph({-1: [-1,0,1], 0: [-1,0,1],1: [-1,0,1]}); g"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 266,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"pi_vec=m.eigenvectors_right()[0][1][0]*1/3"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 267,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"True"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 267,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"m*pi_vec==pi_vec"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Tempo zbieżności do rozkładu stacjonarnego jest dość duże w tym przypadku"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 269,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"[0.333333969116211 0.333333015441895 0.333333015441895]\n",
|
||
|
"[0.333333015441895 0.333333969116211 0.333333015441895]\n",
|
||
|
"[0.333333015441895 0.333333015441895 0.333333969116211]"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 269,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"m^10*1.0"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"<div class=\"alert alert-block alert-success\"> \n",
|
||
|
"Poniżej konstruujemy funkcję, która przy zadanym stanie początkowym i odpowiednim czasie mieszania `mixing` generuje wartości zgodne z łańcuchem Markowa opisanym powyżej. Wykorzystanie `yield` pozwala nam utworzyć jeden proces, który będzie można wykorzystywać we wszystkich funkcjach.</div>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 271,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"def MarkovChain(seed,mixing):\n",
|
||
|
" state=seed\n",
|
||
|
" #mieszanie początkowe dochodzące do stanu jednostajnego rozkładu\n",
|
||
|
" for _ in range(0,mixing):\n",
|
||
|
" state=RandomStep(state)\n",
|
||
|
" while true:\n",
|
||
|
" state=RandomStep(state)\n",
|
||
|
" yield state"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Sprawdzimy numerycznie własności naszego łańcucha Markowa"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 274,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"[0.336800000000000, 0.330300000000000, 0.332900000000000]"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 274,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"m1=MarkovChain(-1,500) #start w stanie -1 i \"wygrzewanie\" łańcucha w 500 krokach startowych \n",
|
||
|
" #(aby zgubić początkowy rozkład)\n",
|
||
|
"le=0 #zliczanie wartości -1\n",
|
||
|
"st=0 #zliczanie wartości 0\n",
|
||
|
"ri=0 #zliczanie wartości 1\n",
|
||
|
"samp=50000 #rozmiar próby\n",
|
||
|
"for _ in range(0,samp):\n",
|
||
|
" v=next(m1)\n",
|
||
|
" if v==-1:\n",
|
||
|
" le+=1\n",
|
||
|
" else:\n",
|
||
|
" if v==0:\n",
|
||
|
" st+=1\n",
|
||
|
" else:\n",
|
||
|
" ri+=1\n",
|
||
|
"[x*1.0/samp for x in [le,st,ri]]"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"<div class=\"alert alert-block alert-success\"> \n",
|
||
|
"Na bazie łańcucha Markowa `MarkovChain` możemy utworzyć spacer losowy po grafie odwzorowującym punkty o współrzędnych całkowitych na płaszczyźnie. Taki spacer posłuży nam do generowania próbek losowych punktów na płaszczyźnie (po normalizacji).</div>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 275,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"def RandomWalk(point):\n",
|
||
|
" x,y=point\n",
|
||
|
" mx=MarkovChain(0,500)\n",
|
||
|
" my=MarkovChain(0,500)\n",
|
||
|
" lipt=[(x,y)]\n",
|
||
|
" while true:\n",
|
||
|
" x+=next(mx) #modyfikacja zmiennej x za pomocą łańcucha mx\n",
|
||
|
" y+=next(my) #modyfikacja zmiennej y za pomocą łańcucha my\n",
|
||
|
" yield (x,y) #dodanie kolejnego punktu w spacerze "
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Zobaczmy jak \"wędruje\" punkt po płaszczyźnie w spacerze losowym zadanym powyżej."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 286,
|
||
|
"metadata": {
|
||
|
"scrolled": false
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"Graphics object consisting of 1 graphics primitive"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"rw=RandomWalk((0,0))\n",
|
||
|
"lin=[(0,0)]\n",
|
||
|
"\n",
|
||
|
"for _ in range(0,1000):\n",
|
||
|
" pp=next(rw)\n",
|
||
|
" lin.append(pp)\n",
|
||
|
" \n",
|
||
|
"#show(pt)\n",
|
||
|
"show(line(lin),aspect_ratio=1,figsize=[4,4])"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"W praktyce interesuje nas spacer nie po nieograniczonej płaszczyźnie, ale po organiczonym jej kawałku. Aby zastosować taki efekt, utożsamiamy brzegi pewnego kwadratu, aby uzyskać topologiczny model torusa, na którym realizuje się nasz spacer losowy."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 287,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"def RandomWalkWithBounds(point,size):\n",
|
||
|
" x,y=point\n",
|
||
|
" mx=MarkovChain(0,500)\n",
|
||
|
" my=MarkovChain(0,500)\n",
|
||
|
" lipt=[(x,y)]\n",
|
||
|
" while true:\n",
|
||
|
" x+=next(mx) #modyfikacja zmiennej x za pomocą łańcucha mx\n",
|
||
|
" x=x%size\n",
|
||
|
" y+=next(my) #modyfikacja zmiennej y za pomocą łańcucha my\n",
|
||
|
" y=y%size\n",
|
||
|
" yield (x,y) #dodanie kolejnego punktu w spacerze "
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Poniżej prześledzimy na mapie częstości (im ciemniejszy piksel tym więcej odwiedzin) jak często dany punkt jest odwiedzany w spacerze losowym. W granicy każdy punkt powinien być odwiedzany z tą samą częstotliwością."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 303,
|
||
|
"metadata": {
|
||
|
"scrolled": false
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"Graphics object consisting of 1 graphics primitive"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"rozmiar=30\n",
|
||
|
"rw=RandomWalkWithBounds((rozmiar//2,rozmiar//2),rozmiar)\n",
|
||
|
"li1=[]\n",
|
||
|
"for _ in range(0,50000):\n",
|
||
|
" li1.append(next(rw))\n",
|
||
|
"\n",
|
||
|
"freq={(i,j):(li1.count((i,j))) for i in range(0,rozmiar) for j in range(0,rozmiar)}\n",
|
||
|
"m=max([freq[x] for x in freq])*1.0\n",
|
||
|
"M=matrix(RR,rozmiar,rozmiar,0)\n",
|
||
|
"for el in freq:\n",
|
||
|
" M[el]=freq[el]/m\n",
|
||
|
" \n",
|
||
|
"show(matrix_plot(M),figsize=[3,3])"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Teraz możemy zdefiniować funkcję, która przy zadanym kształcie będzie zliczała odwiedziny."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 304,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"def ShapeFunction(x,y,S):\n",
|
||
|
" if S(x,y): #S jest warunkiem bycia wewnątrz kształtu\n",
|
||
|
" return 1\n",
|
||
|
" else:\n",
|
||
|
" return 0\n",
|
||
|
" \n",
|
||
|
"S1=(lambda x,y: y**2<=sqrt(4*x**2 + 1)-x**2 - 1) # wnętrze lemniskaty"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"I jeszcze jedna techniczna funkcja skalująca."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 308,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"def MapFunction(a,b,xbound,xsize,ybound,ysize): #(a,b) w [0,1]^2\n",
|
||
|
" return xbound+a*xsize,ybound+b*ysize"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"<div class=\"alert alert-block alert-success\"> \n",
|
||
|
"Teraz możemy już przygotować schemat całkowania metodą Monte Carlo z wykorzystaniem spaceru losowego. Po zainicjalizowaniu spaceru zliczamy te punkty wewnątrz kształtu, które odwiedziliśmy w trakcie spaceru. Zgodnie ze spodziewanym rozkładem jednostajnym zliczamy częstość odwiedzonych punktów w stosunku do wszystkich i mnożąc przez rozmiar próbkowanej przestrzeni.</div>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 309,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"def CalkowanieMarkowa(start,steps,size,S,xbound,xsize,ybound,ysize):\n",
|
||
|
" s=0\n",
|
||
|
" rw=RandomWalkWithBounds(start,size)\n",
|
||
|
" for _ in range(0,steps):\n",
|
||
|
" a,b=next(rw)\n",
|
||
|
" x,y=MapFunction(a*1.0/size,b*1.0/size,xbound,xsize,ybound,ysize)\n",
|
||
|
" s+=ShapeFunction(x,y,S)\n",
|
||
|
" return s*(xsize)*(ysize)/steps"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Przy nawet stosunkowo małych rozdzielczościach próbkowania (przykład poniżej dla 30 i 40 punktów w każdym z kierunków) i niezbyt dużej liczbie iteracji, otrzymujemy zadowalające przybliżenie wyniku."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 315,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"2.82842712474619"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 315,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"CalkowanieMarkowa((15,15),5,30,S1,-sqrt(2).n(),2*sqrt(2).n(),-1/2,1)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 316,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"1.94030100757589"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 316,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"CalkowanieMarkowa((15,15),500,30,S1,-sqrt(2).n(),2*sqrt(2).n(),-1/2,1)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 324,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"2.00659933937994"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 324,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"CalkowanieMarkowa((15,15),50000,30,S1,-sqrt(2).n(),2*sqrt(2).n(),-1/2,1)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"<div class=\"alert alert-block alert-info\"> \n",
|
||
|
"Przy rozdzielczości $40\\times 40$ punktów kraty i $2000$ iteracji otrzymujemy, że średnia wartość obliczonego metodą Monte Carlo pola ma błąd poniżej 0.05, a mediana przypada na wartość, której odchylenie również mieści się w zakresie około $0.01$.</div>\n",
|
||
|
"\n",
|
||
|
"Na wykresie poniżej prezentujemy rozkład wartości pola dla 100 prób wykonanych obliczeń. "
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 339,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"1.99339058470737\n",
|
||
|
"2.01808275350641\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"Graphics object consisting of 1 graphics primitive"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 339,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"li=[CalkowanieMarkowa((randint(0,40),randint(0,40)),2000,40,S1,-sqrt(2).n(),2*sqrt(2).n(),-1/2,1)*1.0 for i in [1..100]] \n",
|
||
|
"print sum(li)/len(li) #wartość średnia po wielu iteracjach\n",
|
||
|
"li.sort()\n",
|
||
|
"print li[floor(len(li)/2)] #wartość środkowa (mediana)\n",
|
||
|
"list_plot(li)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": []
|
||
|
}
|
||
|
],
|
||
|
"metadata": {
|
||
|
"kernelspec": {
|
||
|
"display_name": "SageMath 8.9",
|
||
|
"language": "sage",
|
||
|
"name": "sagemath"
|
||
|
},
|
||
|
"language_info": {
|
||
|
"codemirror_mode": {
|
||
|
"name": "ipython",
|
||
|
"version": 2
|
||
|
},
|
||
|
"file_extension": ".py",
|
||
|
"mimetype": "text/x-python",
|
||
|
"name": "python",
|
||
|
"nbconvert_exporter": "python",
|
||
|
"pygments_lexer": "ipython2",
|
||
|
"version": "2.7.15"
|
||
|
}
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 2
|
||
|
}
|