Julia 使用LsqFit(或其他方法)自动查找x轴的比例因子?
我有以下数据:向量Julia 使用LsqFit(或其他方法)自动查找x轴的比例因子?,julia,curve-fitting,least-squares,data-fitting,Julia,Curve Fitting,Least Squares,Data Fitting,我有以下数据:向量B和向量R。向量B是“独立”变量。对于这一对,我有两个数据集:一个是对Bex,Rex的实验测量,另一个是由meBsim,Rsim生成的模拟。模拟没有x轴的任何“比例”(即B矢量)。因此,当我试图将我的曲线拟合到实验中时,我必须“用眼睛”找出一个缩放参数B0,然后用这个数字B0乘以整个Bsim向量,然后简单地绘图(Bsim,Rsim,Bex,Rex) 我想使用包LsqFit使程序自动化,更准确。然而,我很难理解如何使用它来找到自变量的标度 我的第一个想法是“颠倒”B和R的角色。然
B
和向量R
。向量B
是“独立”变量。对于这一对,我有两个数据集:一个是对Bex,Rex的实验测量,另一个是由meBsim,Rsim
生成的模拟。模拟没有x轴的任何“比例”(即B
矢量)。因此,当我试图将我的曲线拟合到实验中时,我必须“用眼睛”找出一个缩放参数B0
,然后用这个数字B0
乘以整个Bsim
向量,然后简单地绘图(Bsim,Rsim,Bex,Rex)
我想使用包LsqFit
使程序自动化,更准确。然而,我很难理解如何使用它来找到自变量的标度
我的第一个想法是“颠倒”B
和R
的角色。然而,我认为有两个问题让事情变得更糟:1)曲线/数据不是单调的,2)实验数据更“密集”(数据点更多:我的模拟总共有120个点,实验有数千个点)
下面我给出了一个例子,如果我想完成什么(当然,答案不需要使用LsqFit
)。我还附上两个数字,非常清楚地说明了一切
#= stuff happened before this point =#
Bsim, Rsim = load(simulation)
Bex, Rex = load(experiment)
#this is what I want to do:
some_model(x, p) = ???
fit = curve_fit(some_model, Bex, Rex, [3.5])
B0 = fit.param[1]
#this is what I currently do by trail and error:
B0 = 3.85 #this is what I currently do by trial and error
plot(B0*Bsim, Rsim, Bex, Rex)
注:R
曲线(因变量)均通过其最大值进行标准化,因为其标度并不重要。
一种简单的方法iff你可以期望你的实验和模拟都有一个高峰,你可以确定只有一个比例因子而不是一个偏移量,就是简单地将你的
Bsim
向量乘以mode\u rex/mode\rsim
(例如,在您的示例中,mode\u rsim
=1,mode\u rex
=4,所以将Bsim
乘以4。但我相信您已经想到了这一点
对于更一般的方法,一种方法如下:
- 添加和加载插值包
- 创建要在其上插值的栅格,例如,
grid=0:0.01:Bex[end]
- 在该网格上插入
,例如Rex
RexInterp = interpolate( (Bex,), Rex, Gridded(Linear())); RexGridVec = RexInterp[Grid];
- 在同一网格上插值
,但在Bsim“节点”上引入乘数,例如Rsim
- 现在,您可以计算
和RsimGridVec
之间的平方误差值,例如RexGridVec
SqErr = sum((RsimGridVec - RexGridVec).^2)
SqErr = sum((RsimGridVec - RexGridVec).^2)