Bertrandův paradox¶

Bertrand paradox

In [9]:
import numpy as np
import matplotlib.pyplot as plt
In [10]:
#vykreslení kružnice
#budeme předpokládat, že poloměr kružnice je 1
def circle(): 
    phi=np.linspace(0,2*np.pi,1000)
    x=np.cos(phi)
    y=np.sin(phi)
    return(x,y)

Metoda 1¶

metoda 1

In [11]:
#metoda 1 - náhodně zvolíme dva body na kružnici a jejich spojnice bude sečna
def chord1():
    phi1=2*np.pi*np.random.random()
    x1=np.cos(phi1)
    y1=np.sin(phi1)
    phi2=2*np.pi*np.random.random()
    x2=np.cos(phi2)
    y2=np.sin(phi2)
    return(x1,y1,x2,y2) #souřadnice koncových bodů sečny

Metoda 2¶

metoda 2

In [12]:
#metoda 2 - zvolíme poloměr v náhodném směru a na něm náhodně zvolíme bod, sečna bude kolmice procházející tímto bodem
def chord2():
    alpha=2*np.pi*np.random.random()
    rc=np.random.random()
    beta=np.arccos(rc)
    phi1=alpha+beta
    x1=np.cos(phi1)
    y1=np.sin(phi1)
    phi2=alpha-beta
    x2=np.cos(phi2)
    y2=np.sin(phi2)
    return(x1,y1,x2,y2) #souřadnice koncových bodů sečny

Metoda 3¶

metoda 3

In [13]:
#metoda 3 - náhodně zvolíme bod uvnitř kružnice a to bude střed sečny
def chord3():
    rc=2
    while rc>1: #bod musí být uvnitř kružnice 
        xc=2*np.random.random()-1
        yc=2*np.random.random()-1
        rc=np.sqrt(xc**2+yc**2)
    alpha=np.arctan(yc/xc)
    if xc<0:
        alpha+=np.pi
    beta=np.arccos(rc)
    phi1=alpha+beta
    x1=np.cos(phi1)
    y1=np.sin(phi1)
    phi2=alpha-beta
    x2=np.cos(phi2)
    y2=np.sin(phi2)
    return(x1,y1,x2,y2) #souřadnice koncových bodů sečny
In [14]:
N_repeat=1000 #počet generovaných sečen
xc=[] #x-ová souřadnice středu sečny
yc=[] #y-ová souřadnice středu sečny 
fig,ax=plt.subplots(1,2,figsize=(13,6))
x,y=circle() #vykreslení kružnice
ax[0].plot(x,y,lw=3)
ax[1].plot(x,y,lw=3)
for i in range(N_repeat):
    x1,y1,x2,y2=chord1() #vykreslení sečen
    ax[0].plot([x1,x2],[y1,y2],c='grey',lw=0.2) 
    xc=np.append(xc,(x1+x2)/2) #to je pro rychlejší běh středy sečen vykreslíme najednou po doběhnutí cyklu
    yc=np.append(yc,(y1+y2)/2)
ax[0].set_xlabel('x')
ax[0].set_ylabel('y')
ax[0].set_title("metoda 1 - sečny")
ax[1].scatter(xc,yc,c='grey',s=1)
ax[1].set_xlabel('x')
ax[1].set_ylabel('y')
ax[1].set_title("metoda 1 - středy sečen")
plt.show()
No description has been provided for this image
In [15]:
xc=[] #x-ová souřadnice středu sečny
yc=[] #y-ová souřadnice středu sečny 
fig,ax=plt.subplots(1,2,figsize=(13,6))
x,y=circle() #vykreslení kružnice
ax[0].plot(x,y,lw=3)
ax[1].plot(x,y,lw=3)
for i in range(N_repeat):
    x1,y1,x2,y2=chord2() #vykreslení sečen
    ax[0].plot([x1,x2],[y1,y2],c='grey',lw=0.2) 
    xc=np.append(xc,(x1+x2)/2) #to je pro rychlejší běh středy sečen vykreslíme najednou po doběhnutí cyklu
    yc=np.append(yc,(y1+y2)/2)
ax[0].set_xlabel('x')
ax[0].set_ylabel('y')
ax[0].set_title("metoda 2 - sečny")
ax[1].scatter(xc,yc,c='grey',s=1)
ax[1].set_xlabel('x')
ax[1].set_ylabel('y')
ax[1].set_title("metoda 2 - středy sečen")
plt.show()
No description has been provided for this image
In [16]:
xc=[] #x-ová souřadnice středu sečny
yc=[] #y-ová souřadnice středu sečny 
fig,ax=plt.subplots(1,2,figsize=(13,6))
x,y=circle() #vykreslení kružnice
ax[0].plot(x,y,lw=3)
ax[1].plot(x,y,lw=3)
for i in range(N_repeat):
    x1,y1,x2,y2=chord3() #vykreslení sečen
    ax[0].plot([x1,x2],[y1,y2],c='grey',lw=0.2) 
    xc=np.append(xc,(x1+x2)/2) #to je pro rychlejší běh středy sečen vykreslíme najednou po doběhnutí cyklu
    yc=np.append(yc,(y1+y2)/2)
ax[0].set_xlabel('x')
ax[0].set_ylabel('y')
ax[0].set_title("metoda 3 - sečny")
ax[1].scatter(xc,yc,c='grey',s=1)
ax[1].set_xlabel('x')
ax[1].set_ylabel('y')
ax[1].set_title("metoda 3 - středy sečen")
plt.show()
No description has been provided for this image
In [ ]:
 

¶