[Scipy-svn] r3028 - trunk/Lib/interpolate

scipy-svn at scipy.org scipy-svn at scipy.org
Tue May 22 05:19:19 EDT 2007


Author: oliphant
Date: 2007-05-22 04:19:14 -0500 (Tue, 22 May 2007)
New Revision: 3028

Modified:
   trunk/Lib/interpolate/interpolate.py
Log:
Add smoothest interpolation.

Modified: trunk/Lib/interpolate/interpolate.py
===================================================================
--- trunk/Lib/interpolate/interpolate.py	2007-05-22 07:15:29 UTC (rev 3027)
+++ trunk/Lib/interpolate/interpolate.py	2007-05-22 09:19:14 UTC (rev 3028)
@@ -401,8 +401,35 @@
     res1 = np.dot(np.outer(V2,V2)/val,A)
     mk = np.dot(np.eye(Np1)-res1,np.dot(Bd,b))
     return mk    
+
+def _find_smoothest3(xk, yk):
+    N = len(xk)-1
+    Np1 = N+1
+    Nm1 = N-1
+    dk = np.diff(xk)    
+    # find B and then take pseudo-inverse
+    B = np.zeros((Nm1,Np1))
+    _setdiag(B,0,dk[:-1])
+    _setdiag(B,1,2*(dk[1:]+dk[:-1]))
+    _setdiag(B,2,dk[1:])
+    u,s,vh = np.dual.svd(B)
+    V2 = vh[-2:,:].T
+    Bd = np.dot(vh[:-2,:].T, np.dot(diag(1.0/s),u.T))
+    b0 = np.diff(yk)/dk
+    b = 6*np.diff(b0)
+    J = np.zeros((N-1,N+1))
+    idk = 1.0/dk
+    _setdiag(J,0,idk[:-1])
+    _setdiag(J,1,-idk[1:]-idk[:-1])
+    _setdiag(J,2,idk[1:])
+    A = np.dot(J.T,J)
+    sub = np.dot(V2.T,np.dot(A,V2))
+    subi = np.linalg.inv(sub)
+    res0 = np.dot(V2,subi)
+    res1 = np.dot(res0,np.dot(V2.T,A))
+    mk = np.dot(np.eye(Np1)-res1,np.dot(Bd,b))
+    return mk        
     
-    
 
 def _get_spline2_Bb(xk, yk, kind, conds):
     Np1 = len(xk)




More information about the Scipy-svn mailing list