Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

Interpolation basis

1073 views
�
�eVW&�@s�ddljZddlmZmZmZmZmZddl	Z
ddl	mZmZddl
jZddlmZddlmZGdd�d�ZdS)�N)�symbols�diff�Matrix�lambdify�latex)�linspace�array)�dbg)�	DataFramec@sveZdZdd�Zdd�Zddd�Zddd	d
dgdddddgdd
d�Zdd�ZdS)�SplineParabcCsXtd�|_g|_g|_i|_tj�|_d|_i|_g|_	dS)N�xr)
rr�points�y�polinoms�lg�Lagrange�n�texPolinoms�
dataFrames)�self�r�E/projects/91f280f0-b3af-42e1-a2e0-ed2660b96906/jupyter/src/splines.py�__init__
s					zSplineParab.__init__cCs`g|_xPt|j�D]?}|jjt|j|dfgd|j|df��qWdS)Nr�columns�)r�ranger�appendr
r)r�irrr�showInNotebooks	zSplineParab.showInNotebookrcCs�|j|df\}}}}|j|df\}}}}	t|j�}
t|j�}tj|
||||�|||�|||�||	|��
tjd
dd�tj�d	S)z�
        i for plot 
           p[i]   in points x[i],x[i+1]
           g      in points x[i+1],(x[i+1]+x[i+2])/2.
           h      in points (x[i+1]+x[i+2])/2.,x[i+2]
           p[i+1] in points x[i+2],x[i+3] 
        rr�p0(x)�g(x)�h(x)�p1(x)�locz
upper leftN)rr r!r")rrr
r�plt�plot�legend�show)rr�a0�a1�a2�a3�p0�g�h�p1�arrrrr%s@zSplineParab.plotr���zsin(x)c
s||_||_|j�i|_i|_t|dd��|_x�t|j�D]�}g}g}|jj	d||||d||dgd|d||||d||dg�}|jj	d||d||d||dgd|d||d||d||dg�}|j
|�||d||dd}	|j|j||d|	||dg||g��|j
|�|j
t
||||dd	��|j
t
||d|	d	��|j
t
|	||dd	��|j
t
||d||dd	���fd
d�|D�|j|df<||j|df<d
d�|D�|j|df<t||||dg�t||d|	g�t|	||dg�t||d||dg�g|j|df<qVW|jS)a<
        DESCRIPTION:
        this function interpolate y use parabol splines
        f for case of ...
        
        
        TESTs:
        d=sp.splineParab(points=[0,1,2,3,4],y=[0,0,1,0,0])
        a0,a1,a2,a3=d[(0,1)]
        p0,g,h,p1=d[(0,0)]
        plt.plot(a0,p0(a0),a1,g(a1),a2,h(a2),a3,p1(a3))
        Nr2r
rr1�funcrg@�
cs"g|]}t�|d��qS)�numpy)r)�.0�p)rrr�
<listcomp>Ns	z+SplineParab.splineParab.<locals>.<listcomp>rcSs$g|]}dt|�d�qS)�$)r)r7r8rrrr9Ps	�����)r
rrrr�lenrrr�lagrangeInterpr�extend�
findParabsr�str)
rr
r�frZ
localPolinomsZlocalPointsr,r/�xHalfr)rr�splineParab+s0
					[c
8
%!!)& zSplineParab.splineParabcCs�|j}|d}|d}|d}|d}|d}t|j||��}	t|j||��}
tt||�j||��}tt||�j||��}ti|	|
||fd6�t||d||dg||||gg�}
t|
|	||||||||dg�}|
d}||\}}ti||||||fd6�|	||||||d}|
||||||d}||gS)a
        DESCRIPTION:
        find parabols equations g,h in points listX
        from that restrictions:
        g(x0)=p0(x0)
        g'(x0)=p0'(x0)
        h(x1)=p1(x1)
        h'(x1)=p1'(x1)
        g(xHalf)=h(xHalf)
        g'(xHalf)=h'(xHalf)
        rrr1zfindParabs|part1g@zfindParabs|part2�����)r�float�subsrr	r)rZlistXZlistPr�x0rB�x1r,r/r(r)�b0�b1�C�b�invC�c0�c1r-r.rrrr?Vs&	




!!86
#""zSplineParab.findParabsN)�__name__�
__module__�__qualname__rrr%rCr?rrrrr	s

3+r)�src.lagrange�lagranger�sympyrrrrrr6�nprr�matplotlib.pyplot�pyplotr$�src.dbgr	�pandasr
rrrrr�<module>s(