x_new中的值高于/低于插值范围

时间:2014-02-04 02:57:32

标签: arrays numpy interpolation

这是我的代码。无论我使用的是inside_sig_r还是inside_sig_r2,我都会一直收到这个错误。如果我取出最后一行,我不会收到此错误。谢谢你的帮助。

import numpy as np
from scipy import integrate, interpolate
from math import sqrt,pi,cos,sin,exp

rho = 2.78e11 * .3
delta = 1.68

def M(r):
    return ((4*pi)/3)*(r**3)*rho

def R(M):
    return (( 3 * M) / (4 * pi * rho)) ** (.3333)

def W(x):
    return 3.*(sin(x) - x*cos(x))/(x**3.)

data = np.loadtxt("//Users//Slemons//Downloads//pk2.dat", float)
k_data = (10**data[:,0])
Pk_data = (10**data[:,1])



Pk = interpolate.interp1d(k_data,Pk_data,kind='cubic')

Masses = np.arange(1e10,1e16,1e10)
r_from_M = np.array(map(R,Masses),float)

print r_from_M[0]

def inside_sig_r(k,r):
    return ((W(k*r)**2.) * Pk(k) * (k**2.)) / (2. * (pi ** 2.))
def inside_sig_r2(z,r):
    k = (1.+z)/(1.-z)
    return inside_sig_r(k,r) *2./(1.-z)**2.

sigma_r = lambda k : sqrt(integrate.quad(inside_sig_r,.4,np.inf,args=(k)))

sigr = np.array(map(sigma_r,Masses),float)

1 个答案:

答案 0 :(得分:0)

这不是一个独立的代码,因为我无法在'// Users//Slemons//Downloads//pk2.dat'中看到您的数据。但是,错误非常具体 - inside_sig_r(2)生成的数据高于或低于您提供的范围(0.4,np.inf)。您应该更改范围或确保函数返回此范围内的值。