B
    Xb^^	                 @   sH   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 Z
dS )    N)D_funcc             C   s   t d| |  S )N   )npsqrt)Ddt r   A/Users/vegardjervell/Documents/6_semester/matmod8_2/num_losere.py<lambda>   s    r
   c                st   t  fddt D }|t dddg }||d dd< x.td d D ]}||| |d |d < qPW |S )Nc                s   g | ]}t  qS r   )r   zeros).0i)nr   r	   
<listcomp>   s    zget_A.<locals>.<listcomp>r   r         )r   arrayrange)r   kAdiagr   r   )r   r	   get_A   s    r   c                s   t | }t||}tj| tjd |d}t| || |d   }t |}t }|| }	t	 fddt
t|| D }
tj|
d< tj|
d< x0t
t|
d D ]}t|	|
| |
|d < qW dd |
D |dd  fS )	Nr   )stepc                s   g | ]}t  qS r   )r   r   )r   r   )r   r   r	   r   $   s    zeksplisitt.<locals>.<listcomp>r   )r   r   r   c             S   s   g | ]}|d d qS )r   Nr   )r   liner   r   r	   r   -   s    )r   dx_explicitr   arangecLlenr   identityr   r   intC0Csdot)Tt_stopr   r   dxZx_liner   r   IMCr   r   )r   r	   
eksplisitt   s    


$

r+   c       
         s   t | }tjtj tjd tj tjd}t| || tjd  }t |}t | }tj	
|}t fddtt|| D }tj|d< tj|d< x0tt|d D ]}	t|||	 ||	d < qW dd |D |dd  fS )	Nr   )r   c                s   g | ]}t  qS r   )r   r   )r   r   )r   r   r	   r   =   s    zimplisitt.<locals>.<listcomp>r   )r   r   r   c             S   s   g | ]}|d d qS )r   Nr   )r   r   r   r   r	   r   E   s    )r   r   r   r   dx_impr   r   r   r    linalginvr   r   r!   r"   r#   r$   )
r%   r&   r   r   x_pointsr   r   r)   r*   r   r   )r   r	   	implisitt/   s    "
$

r0   c                s  t | }tjtj tjd tj tjd}t| || tjd  }t |}t	 }d| | }d| | }	t
tj||	}
t fddtt|| D }tj|d< tj|d< x0tt|d D ]}t
|
|| ||d < qW dd |D |dd  fS )	Nr   )r   c                s   g | ]}t  qS r   )r   r   )r   r   )r   r   r	   r   Y   s    z#crank_nicholson.<locals>.<listcomp>r   )r   r   r   c             S   s   g | ]}|d d qS )r   Nr   )r   r   r   r   r	   r   a   s    )r   r   r   r   dx_crankr   r   r,   r   r    r$   r-   r.   r   r   r!   r"   r#   )r%   r&   r   r   r/   r   r   r(   ZM1M2r)   r*   r   r   )r   r	   crank_nicholsonG   s    "

$

r3   )numpyr   	constantsr   
analyticalr   r   r   r+   r0   r3   r   r   r   r	   <module>   s   