Python 多重二维多项式拟合

1 投票
1 回答
899 浏览
提问于 2025-04-18 00:20

我使用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])

你也可以用同样的方法选择第二个范围。

撰写回答