B
    b^@                 @   s   d dl Zd dlZd dlmZ dd Zdd Zdd Zd	d
 Z	dddZ
dddZdddZefddZeee	dZe
eeedZdS )    N)fsolvec             C   s
   t j|  S )N)cK)H r   D/Users/vegardjervell/Documents/6_semester/matmod/matmod9/numerikk.py<lambda>   s    r   c             C   sr   t | }|}d}d| |td|  |  | }x:t||krl||7 }d| |td|  |  | }q4W |S )Ng      ?   )K_funcnplogabs)r   r   	tolerancezstepr   r   r   Z_newton   s    "&r   c       
         s  t |   fdd}d}d}|| d }|| d } }||}||}||}	x||kr||	 dk r||	 }}|| d }||}	n|	| dk r||	 }}|| d }||}	nX|	dkr|S tdt| d t| d t| d t| d	 t| d t|	 |d }qRW |S )
Nc                s   | t d|     S )Nr	   )r   r   )r   )r   r   r   r      s    zZ_bisection.<locals>.<lambda>r   gv?   zledge :  z	
redge = z

center = )r
   	Exceptionstr)
r   fledgeredgecentererrorr   f_lf_rf_cr   )r   r   Z_bisection   s2    



Jr   c                s&   t |   fdd}t|dd }|S )Nc                s   | t d|     S )Nr	   )r   r   )r   )r   r   r   r   >   s    zZ_fsolve.<locals>.<lambda>g      ?r   )r
   r   )r   Zz_funcZr   )r   r   Z_fsolve<   s    r    c             C   sd   || }|| || d  }|| || d  }|| ||  }| |d |d|  d|  |   S )Nr      r   )yhdy_dxsolverk1k2Zk3Zk4r   r   r   rk4_step_funcF   s
    r(   c             C   s,   | |||   }| |d || ||   S )Nr   r   )r"   r#   r$   r%   Znext_y_merkr   r   r   heuns_step_funcN   s    r)   c                s    fdd}d }d }x||dk r8|d8 }q"W d||  }|| d }d}	||}
||}||}xx||	kr|
| dk r|| }}|| d }||}n8|| dk r|| }}
|| d }||}n|dkr|S |d }qpW |S )	Nc                s    d   |    |  S )Nr   r   )Znext_y)r$   r#   r"   r   r   r   S   s    z,impl_euler_bisec_step_func.<locals>.<lambda>gMbP?r   g{Gz?g      ?r   gh㈵>r   )r"   r#   r$   r%   nullfuncr   r   r   r   r   r   r   r   r   )r$   r#   r"   r   impl_euler_bisec_step_funcR   s0    




r+   c                sh    fddfddfdd}t  } }||}x t||krb|| }||}qDW |S )Nc                s     d  |    |  S )Nr   r   )next_H)r   r$   r#   r   r   r   u   s    z-impl_euler_newton_step_func.<locals>.<lambda>c                s2   dd d j  tj d|   |   j   S )Nr      r	   )C1r   r   C2)r,   )r$   r#   r%   r   r   r   v   s    c                s    | |  S )Nr   )Zthis_H)r*   nullfunc_derir   r   r   x   s    )r
   r   )r   r#   r$   r%   r   tolr,   Z	this_stepr   )r   r$   r#   r*   r1   r%   r   impl_euler_newton_step_funct   s    r3   )NewtonZ	Bisectionzscipy.fsolve)RK4ZHeunszImplicit Euler, NewtonzImplicit Euler, Bisection)N)N)N)numpyr   	constantsr   Zscipy.optimizer   r
   r   r   r    r(   r)   r+   r3   Z_solver_dictstep_func_dictr   r   r   r   <module>   s   &



"