Python 多重二维多项式拟合
我使用IPython Notebook应用已经有半年了,主要是为了我的天体物理学硕士论文。这是我第一次在这里提问,但我之前已经从Stack Overflow上受益匪浅。所以,我已经在网上和Stack Overflow的数据库里搜索过,但没有找到解决我问题的方法。
我有一组数据点,它们形成了一条曲线,这条曲线有两个“断点”,因为它的倾斜度发生了变化。现在,我想在这个图上至少画出两条一阶的拟合线,分别对应曲线中的断点。
我已经知道怎么为一条一阶多项式进行拟合,但我不知道怎么定义拟合的范围。我的意思是,我想告诉Python在[0,15]这个范围内为数据点做一次拟合,在[15, 30]这个范围内再做一次。
我的代码看起来是这样的:
plt.subplot(1,2,1)
scatter(res1_c18o[:,4], res1_c18o[:,3], c= res1_c18o[:,2], s=10)
plt.colorbar()
x= res1_c18o[:,4]
y=res1_c18o[:,3]
p = np.polyfit(x,y, 1)
pl.plot(x,p[0]*x+p[1])
正如上面提到的,这段代码为整个曲线建立了一条拟合线。这是我硕士论文中最后需要做的事情。这实际上是最后一章的最后几幅图;)
请分享你的想法,我会非常感激任何帮助!
非常感谢,
贝蒂
1 个回答
0
首先选择你的适合范围,x
的值在 [0,15]
之间。
import numpy as np
xrange = x[np.logical_and(x>=0,x<=15)]
yrange = y[np.logical_and(x>=0,x<=15)]
p = np.polyfit(xrange,yrange, 1)
#plot the fit only in its range of validity:
plt.plot(xrange,p[0]*xrange+p[1])
你也可以用同样的方法选择第二个范围。