我试图用高斯(和更复杂)函数拟合一些数据.我在下面创建了一个小例子.
我的第一个问题是,我做得对吗?
我的第二个问题是,如何在x方向上添加错误,即在观察/数据的x位置?
如何在pyMC中进行这种回归很难找到很好的指南.也许是因为它更容易使用一些最小二乘或类似的方法,但我最终有很多参数,需要看看我们如何约束它们并比较不同的模型,pyMC似乎是一个很好的选择.
import pymc
import numpy as np
import matplotlib.pyplot as plt; plt.ion()
x = np.arange(5,400,10)*1e3
# Parameters for gaussian
amp_true = 0.2
size_true = 1.8
ps_true = 0.1
# Gaussian function
gauss = lambda x,amp,size,ps: amp*np.exp(-1*(np.pi**2/(3600.*180.)*size*x)**2/(4.*np.log(2.)))+ps
f_true = gauss(x=x,amp=amp_true, size=size_true, ps=ps_true )
# add noise to the data points
noise = np.random.normal(size=len(x)) * .02
f = f_true + noise
f_error = np.ones_like(f_true)*0.05*f.max()
# define the model/function to be fitted.
def model(x, f):
amp = pymc.Uniform('amp', …
Run Code Online (Sandbox Code Playgroud) 试图在上双轴=频率上绘制光谱,即速度与强度,x轴较低=速度
它们之间的关系(多普勒公式)是
f = (1-v/c)*f_0
Run Code Online (Sandbox Code Playgroud)
其中f是结果频率,v是速度,c是光速,f_0是v = 0时的频率,即.v_lsr.
我试图通过查看http://matplotlib.sourceforge.net/examples/axes_grid/parasite_simple2.html来解决它,它通过 它来解决
pm_to_kms = 1./206265.*2300*3.085e18/3.15e7/1.e5
aux_trans = matplotlib.transforms.Affine2D().scale(pm_to_kms, 1.)
ax_pm = ax_kms.twin(aux_trans)
ax_pm.set_viewlim_mode("transform")
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何用我的频率函数替换pm_to_kms?
有谁知道如何解决这个问题?