[ModSim] Oplossing examen

1936 days ago by Toon.Baeyens

Vraag 1

(a) 4

(b) Zonder twijfel varieert $\theta$ tussen $-\frac{\pi}{4}$ en $\frac{\pi}{4}$.

Met behulp van de definitie van $\cos$ kunnen we een formule voor $r$ bepalen:

theta = pi/8 (polygon([(1,1),(0,0),(1,-1)], fill=None) + line([(0,0),(1, 0)], color="black") + line([(0,0),(1, tan(theta))], color="red") + text('$\\theta$', (0.2,0.04), color="red") + text('$r$', (0.5,0.24), color="red") + text('$1$', (0.5,-0.06), color="black")).show(axes=False) 
       

Uit de figuur leiden we af dat: $\cos(\theta) = \frac{1}{r}$. Dus:

$$r(\theta) = \frac{1}{\cos(\theta)}\text{ met }-\frac{\pi}{4} \leq \theta \leq \frac{\pi}{4}$$

(c) De oppervlakte van deze driehoek $\Delta$ wordt nu gegeven door:

$$\int_{-\frac{\pi}{4}}^{\frac{\pi}{4}} \int_{0}^{\frac{1}{cos(\theta)}} r\,dr\,d\theta$$

Deze extra $r$ verschijnt door de transformatie naar poolcoördinaten.

theta, r = var('theta', 'r') binnenste = integral(r, r, 0, 1/cos(theta)) binnenste 
       

                                
                            

                                
onbepaald = integral(binnenste, theta) # Sage heeft hier last met de bepaalde integraal onbepaald 
       

                                
                            

                                
onbepaald.subs({theta: pi/4}) - onbepaald.subs({theta: -pi/4}) 
       

                                
                            

                                

Dus $1$. Dit komt overeen met ons resultaat uit vraag (a).

Vraag 2

Als eerste simuleren we één dobbelsteenworp ter controle:

k = 6 n = 2 ceil(random()*k) # Dit simuleert een dubbelsteenworp met k ogen 
       

                                
                            

                                

Daarna berekenen we de som van $n$ stenen $5000$ keer.

samples = [sum(ceil(random()*k) for i in range(n)) for j in range(5000)] histogram(samples, range=(n-.5,k*n+1+.5), bins=k*n-n+2) 
       

Dit kunnen we nu voor alle gevraagde paren van $n$ en $k$.

for n, k in [(2, 6), (4, 6), (6, 4), (10, 6), (3, 20)]: samples = [sum(ceil(random()*k) for i in range(n)) for j in range(5000)] histogram(samples, range=(n-.5,k*n+1+.5), bins=k*n-n+2).show(title="n: %d, k: %d"%(n, k)) 
       




(b) Hier gebruiken we dezelfde plots, maar we voegen een normale verdeling toe: 

for n, k in [(2, 6), (4, 6), (6, 4), (10, 6), (3, 20)]: samples = [sum(ceil(random()*k) for i in range(n)) for j in range(5000)] mu = mean(samples) sigma = std(samples) normal_density = lambda x: 1/sqrt(2*pi*sigma^2) * exp(-(x-mu)^2/(2*sigma^2)) ( histogram(samples, range=(n-.5,k*n+1+.5), bins=k*n-n+2, normed=True) + plot(normal_density, (n-1, k*n+1), color="red") ).show(title="n: %d, k: %d"%(n, k)) 
       




Vraag 3

(a) De krachten die werken op het deeltje zijn:

De eerste (horizontale) veer: $\Bold{F_1} = (1-L_1)\frac{1}{L_1}\left(\begin{array}{c}x - (-1)\\ y - 0\end{array}\right) $

Hierbij is $L_1$ de totale lengte van de veer $\left|\left(\begin{array}{c}x - (-1)\\ y - 0\end{array}\right)\right| = \sqrt{(1+x)^2 + y^2}$.

Dus $L_1 - 1$ is de uitwijking van deze veer. En $\frac{1}{L_1}\left(\begin{array}{c}x - (-1)\\ y - 0\end{array}\right)$ is een eenheidsvector die de richting aangeeft.

Analoog voor de tweede veer: $\Bold{F_2} = (1-L_2)\frac{1}{L_2}\left(\begin{array}{c}x - 0 \\ y - 1\end{array}\right) $

Met $L_2$ de totale lente van deze veer: $\sqrt{x^2 + (y-1)^2}$

Dus samen met $\Bold{F} = \Bold{F_1} + \Bold{F_2} = m \Bold{a} = m \Bold{x}''$ hebben we:

$$\begin{array}{rl} x''=&(1-L_1) \frac{x+1}{L_1} + (1-L_2) \frac{x}{L_2} \\ y''=&(1-L_1) \frac{y}{L_1} + (1-L_2) \frac{y-1}{L_2} \end{array}$$

 

(b) Dit stelsel ziet eruit als:

$$\left(\begin{array}{c}x\\x'\\y\\y'\end{array}\right) ' = \left(\begin{array}{l} x'\\(1-L_1) \frac{x+1}{L_1} + (1-L_2) \frac{x}{L_2} \\ y' \\ (1-L_1) \frac{y}{L_1} + (1-L_2) \frac{y-1}{L_2} \end{array}\right)$$

 (c) Dit kunnen we implementeren als:
def f(xy, t): x, dx, y, dy = xy l1 = sqrt((1+x)^2 + y^2) l2 = sqrt(x^2 + (y-1)^2) return (dx, (1-l1)*(x+1)/l1 + (1-l2)*x/l2, dy, (1-l1)*y/l1 + (1-l2)*(y-1)/l2) 
       
from scipy.integrate import odeint result = odeint(f, [-.2,0,.4,0], [0,.1..30]) points = [(x, y) for x, _, y, _ in result] list_plot(points, plotjoined=True) 
       
result = odeint(f, [.5,0,.4,0], [0,.1..50]) points = [(x, y) for x, _, y, _ in result] list_plot(points, plotjoined=True) 
       
result = odeint(f, [-.55,0,.2,0], [0,.1..50]) points = [(x, y) for x, _, y, _ in result] list_plot(points, plotjoined=True) 
       
animate([list_plot(points[:i], plotjoined=True, xmin=-1, xmax=1, ymin=-1, ymax=1) for i in range(2,len(points),10)]) 
       

(d)

$(-0.5, 0.5)$ is een onstabiele evenwichtspositie. Hierdoor beweegt ons deeltje niet.

$(-0.2, 0.8)$ Zou in theorie op de lijn tussen de twee veren moeten blijven. In praktijk zorgen afrondingsfouten ervoor dat hier toch een afwijking optreedt. Deze afwijking wordt alleen maar versterkt door de onstabiliteit van deze positie.

r = odeint(f, [-.5,0,.5,0], [0,.1..50]) print r[0] print r[10] print r[100] print r[-1] 
       
[-0.5  0.   0.5  0. ]
[-0.5  0.   0.5  0. ]
[-0.5  0.   0.5  0. ]
[-0.5  0.   0.5  0. ]
[-0.5  0.   0.5  0. ]
[-0.5  0.   0.5  0. ]
[-0.5  0.   0.5  0. ]
[-0.5  0.   0.5  0. ]
result = odeint(f, [-.2,0,.8,0], [0,.1..50]) points = [(x, y) for x, _, y, _ in result] list_plot(points, plotjoined=True)