B
    •åb^  ã               @   s^   d dl mZ d dlmZmZ d dlmZmZ d dl	Z
d dlmZ d dlZdd
d„Zdd„ ZdS )é    N)ÚH_funcÚ	bb_H_func)ÚZ_solver_dictÚstep_func_dict)Údisplayé   é   éè  ÚNewtonÚRK4c          	      sÎ  t | }d|krRˆ dkr&tdƒ d‰ nˆ | kr>tdƒ | d ‰ |t |¡ d }n|dkrl|t |d¡ }nd }t| }t| ˆ |||||d	\}}}	}
tjdd
ddgd\}}dd„ |
 	¡ D ƒ}x<|D ]4}| 
¡ \}}|d j||| ¡ | ¡ | ¡ d qÆW |d jd|	gddgdd |d  d¡ |d  d¡ |d  d¡ |d  ¡  |d j||dd |d j|‡ fdd„|D ƒdddd |d jdd |d  ¡  |d  d¡ |d  d ¡ t ¡  d S )!NzImplicit Euler, Bisectionr   zÇThe bisection root finder has a hard time in implicit euler if Hv = 0
so im putting Hv = 1 to avoid negative numbers in log-function when finding Z.
Use Implicit Euler with Newton if you want Hv = 0.r   z”Implicit Euler with Bisection root finder does not function if Hv > H0.
So im putting Hv = H0 - 1
Use Implicit Euler with Newton if you want Hv > 0.é   zImplicit Euler, Newtongš™™™™™é?)ÚH0ÚHvÚdtÚt_endÚZ_solverÚ	step_funcÚ	plot_freqé   r   é   )Úfigsizec             S   s   g | ]}|‘qS © r   )Ú.0Úliner   r   ú@/Users/vegardjervell/Documents/6_semester/matmod/matmod9/main.pyú
<listcomp>#   s    zmain.<locals>.<listcomp>)ÚcolorÚmarkerÚlabelÚBlack)r   u   Z [â€“]z$f(Z) = Z-ln{(1-Z)} + K(H)$zmMarkers display numerical solution of $f(Z) = 0$
Tolerance is dynamic, and depends on H and the chosen solverz[%H])r   c                s   g | ]}ˆ ‘qS r   r   )r   Út)r   r   r   r   1   s    z--ÚorangeZH_v)Ú	linestyler   r   ú-)r"   zt [s]z
%H [p.p.m])r   ÚprintÚnpÚsqrtÚpowerr   r   ÚpltZsubplotsÚ	get_linesÚget_dataZplotZ	get_colorZ
get_markerZ	get_labelZ
set_xlabelZ
set_ylabelÚ	set_titleÚlegendZgridÚshow)r   r   r   r   r   r   r   ZH_valsZt_valsZmax_zZz_axÚfigZaxsZz_linesr   ÚxÚyr   )r   r   Úmain   s>    
(&r1   c              C   s°   t jddddd} t jddddd}t jddddd}t jt ¡ dd	}t jt ¡ d
d	}t  t  ||g¡t  | ||g¡g¡}t jt	| ||||d}t
t  ||jd g¡ƒ d S )Nr   r   F)ÚminÚmaxÚstepÚcontinuous_updater   é
   éd   zSolver for Z)ÚoptionsÚdescriptionz
ODE-solver)r   r   r   r   r   éÿÿÿÿ)ÚwidÚ	IntSliderÚDropdownr   Úkeysr   ÚVBoxÚHBoxÚinteractiver1   r   Úchildren)r   r   r   r   r   ÚcontrolsÚoutputr   r   r   Úrun9   s    $rE   )r   r   r   r	   r
   r   )Úmatplotlib.pyplotÚpyplotr(   Zdifferensialr   r   Znumerikkr   r   Ú
ipywidgetsr;   ÚIPython.displayr   Únumpyr%   r1   rE   r   r   r   r   Ú<module>   s   
1