我有一组红移值和相应的宇宙减速参数值。情节如下:
python - 在X轴上查找对应于Y的任意值的值,该值不包含在用于在python中绘制数据的列表中-LMLPHP
现在我需要从q=0的图中精确地得到z的值。我试过很多命令,但都会导致一些错误。因为我不太懂python,所以我甚至不能尝试如何纠正所有这些问题。
当我尝试命令时:
z1 = interp1d(z,q,0)
结果是:
scipy.interpolate.interpolate.interp1d对象位于0x051899F0
我该怎么解决?
我的代码:

while z0<zf:' '
    z.append(z0)
    a.append(1/(1+z0))
    term=((1+(omega/(B-1)))*a[k]**(3*(B-1)))
    H.append(((term-(omega/(B-1)))*H02)**0.5)
    q.append(-1-((H0*term*3*(B-1)*(term-(omega/(B-1)))-0.5)/(2*H[k])))
    print '%.2f \t%.4f \t%.4f \t%.15f'%(z[k],a[k],H[k],q[k])
    k=k+1
    z0=z0+h

最佳答案

你的代码有问题。我这里只有Python 3,所以如果您在理解ask时有任何问题(稍微更改了printinput函数部分)。
你没有定义H02,所以我只是说它等于H0。如果是错的,就改正。这是您更正的代码(有关重要内容,请参阅注释):

from pylab import*
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d

fig, ax = subplots()
k = 0
omega, B, H0 = 0.6911, 0.019921992722139001, 67.74
H02 = H0 + 0 # You didn't specify this so I had to make up something
z0 = 0
h = 0.05

z, a, H, q = [], [], [], []
print('Value of H0, Omega and Beta:%.3f,%.4f,%.18f'%(H0, omega, B))
zf = float(input('Enter the final value of redshift:')) # Remember that this needs to output a number
print('Red shift Scale factor Hubble parameter q value') # I chose 10 in my test.
print('===========================================================')

while z0 < zf:
    z.append(z0)
    a.append(1/(1+z0))
    term=((1+(omega/(B-1)))*a[k]**(3*(B-1)))
    H.append(((term-(omega/(B-1)))*H02)**0.5)
    q.append(-1-((H0*term*3*(B-1)*(term-(omega/(B-1)))-0.5)/(2*H[k])))
    print('%.2f \t%.4f \t%.4f \t%.15f'%(z[k], a[k], H[k], q[k]))
    k = k+1
    z0 = z0+h

title('Decceleration parameter(q) versus Red shift(z) graph ')
xlabel('Redshift z')
ylabel('Decceleration parameter q')

z1 = interp1d(q, z)
print(z1(40000)) # I used a redshift parameter of 10 and 0 does not exist in the data limits so I just used 40 000.
plot(z, q)
plot([z1(40000), z1(40000)], [0, 40000], c='r')
plot([0, z1(40000)], [40000, 40000], c='r')

ax.spines['left'].set_position('zero')
ax.spines['right'].set_color('none')
ax.yaxis.tick_left()
ax.spines['bottom'].set_position('zero')
ax.spines['top'].set_color('none')
ax.xaxis.tick_bottom()
show()

,结果是:
python - 在X轴上查找对应于Y的任意值的值,该值不包含在用于在python中绘制数据的列表中-LMLPHP
我添加了红线以向您显示这样进行的插值的结果:
z1 = interp1d(q, z) # Create your function with your q (input) and z (output)
result = z1(40000) # This is checking the value of z when q=40000

您需要记住的是interp1D只能在您提供的数据区域内插值。因此,如果q10100之内,就不能插值q=0
我用了10的红移(不知道该用什么,尽管主题看起来很有趣)。这似乎不影响情节,所以我猜当你把代码放在这里,或者当我试图从你的评论中理解它时(因为你的情节与我的不同),会出问题。确保每件事都是应该的,只是使用你可以用来解决你的问题的部分。

关于python - 在X轴上查找对应于Y的任意值的值,该值不包含在用于在python中绘制数据的列表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37762875/

10-09 07:09
查看更多