B
    s^                 @   sZ   d dl Zd dlmZ d dlZdddZdddZdddZd	d
 Z	dd Z
eeedZdS )    NFc       	         s   dd }|dkrbt  }tjtj|  | | t  }t  }td| dt|| dd n&tjtj|  | | t  }|dkr|S | d	 d
 }tdt	t
| | }tjfdd|D  fdd|D ddddd d S )Nc             S   s   dt |  S )Ng      ?)npsin)theta r   H/Users/vegardjervell/Documents/6_semester/matmod/matmod10/needle_drop.py<lambda>   s    z!find_pi_meanval.<locals>.<lambda>Tz#Mean value approximation of pi withzrandom values took   secondsFn   g袋.V@r   c                s   g | ]} | qS r   r   ).0i)
theta_valsr   r   
<listcomp>   s    z#find_pi_meanval.<locals>.<listcomp>c                s   g | ]} | qS r   r   )r   r   )	func_valsr   r   r      s    . g      ?red)marker	linestyle
markersizecolor)timeprocess_timer   pirandomsumprintroundrangelenintpltplot)	Ntimerr"   funct0	pi_approxt1num_plotted_points
plot_ranger   )r   r   r   find_pi_meanval   s$    $r+   c       	         s   dd }|dkr`t  }tdtj| | | t  }t  }td| dt|| dd n$tdtj| | | t  }|d	kr|S | d
 d }tdt	t
| | }tjfdd|D  fdd|D ddddd d S )Nc             S   s   dt |  S )Ng      ?)r   r   )r   r   r   r   r      s    z find_pi_norand.<locals>.<lambda>Tr   z#Mean value approximation of pi withzevenly distributed values tookr   r	   Fr
   g袋.V@c                s   g | ]} | qS r   r   )r   r   )r   r   r   r   /   s    z"find_pi_norand.<locals>.<listcomp>c                s   g | ]} | qS r   r   )r   r   )r   r   r   r   /   s    r   r   g      ?r   )r   r   r   r   )r   r   r   linspacer   r   r   r   r   r   r    r!   r"   )	r#   r$   r"   r%   r&   r'   r(   r)   r*   r   )r   r   r   find_pi_norand   s$    $r-   c             C   sJ  dd }|dkrzt  }dtj|  }tjtj|  }t|||k }d|  | }t  }	td| dt|	| dd	 n>dtj|  }tjtj|  }t|||k }d|  | }|d
kr|S ||}
| d d }xltdt	|t
| | D ]P}|| |
| kr&tj|| || dddd qtj|| || dddd qW d S )Nc             S   s   dt |  S )Ng      ?)r   r   )r   r   r   r   r   4   s    z#find_pi_randcheck.<locals>.<lambda>Tg      ?   z%Random count approximation of pi withzrandom values tookr   r	   Fr
   g袋.V@r   r      r   )r   r   r   g      ?green)r   r   r   r   r   r   r   r   r   r   r    r!   r"   )r#   r$   r"   r%   r&   ZD_valsr   countr'   r(   funcvalsr)   r   r   r   r   find_pi_randcheck3   s.    
r3   c             C   sb   dd }t dt jd}tj|||dd td td || d	d
 td t  d S )Nc             S   s   dt |  S )Ng      ?)r   r   )r   r   r   r   r   U   s    z plot_integrand.<locals>.<lambda>r   d   z$$f(\theta) = \frac{1}{2}sin(\theta)$)labelz$\theta$ [rad]z$f(\theta)$T)r"   zPoints used to calculate $\pi$)	r   r,   r   r!   r"   xlabelylabeltitlelegend)r#   finderZ	integrandr   r   r   r   plot_integrandT   s    


r;   c                s   t j| |t||  d d} fdd|d d D }| |d dd tj||dd	 tj|d
 |d gt jt jgdddd td td t	  d S )Nr4   )stepc                s   g | ]} |qS r   r   )r   r#   )r:   r   r   r   d   s    z$plot_convergence.<locals>.<listcomp>T)r$   zApproximated value of $\pi$)r5   r   z--orangez$\pi$)r   r   r5   zNumber of valueszCalculated value of $\pi$)
r   aranger    appendr!   r"   r   r6   r7   r9   )startstopr:   ZN_valsZpi_valsr   )r:   r   plot_convergence`   s    (

rC   )z
Mean valuezRandom counterzNon-random mean value)FF)FF)FF)numpyr   matplotlib.pyplotpyplotr!   r   r+   r-   r3   r;   rC   needle_finder_dictr   r   r   r   <module>   s   


!