def N(i,k,u): if k == 1: if kv[i] <= u and u < kv[i+1]: return 1 else: return 0 else: val = 0 if N(i,k-1,u)*(u - kv[i])==0 and (kv[i+k-1] - kv[i])==0: val += 0 else: val += N(i,k-1,u)*(u - kv[i])/(kv[i+k-1] - kv[i]) if N(i+1,k-1,u)*(kv[i+k] - u)==0 and (kv[i+k] - kv[i+1])==0: val += 0 else: val += N(i+1,k-1,u)*(kv[i+k] - u)/(kv[i+k] - kv[i+1]) return val def Q(u): k=4 sum_x = 0 sum_y = 0 totaln = 0 for i in range(len(points)): temp= N(i,k,u) totaln += temp sum_x += points[i][0]*temp sum_y += points[i][1]*temp #check if total N = 1.0 , which it should if totaln < 0.99999 or totaln > 1.000001: print "totaln = %.15f at u= %f "% (totaln, u) return (sum_x,sum_y)