Mathematica:FindFit提供了一个解决方案,但它不正确?

时间:2013-05-05 18:11:15

标签: wolfram-mathematica

我想要拟合数据:

data={{30.,3837.71},{93.75,3900.6},{300.,3962.19},{937.5,4040.79},{3000.,4113.21},{7500.,4174.15}};

以下型号:

model = H0*(1 - (1/Kstab*Log10[10^10*H0/(2*Kstab*x)])^0.5);

我正在使用:

FindFit[data,
   model, {{H0, 6000}, {Kstab, 100}}, x];

Mathematica给了我以下解决方案:

{{HZero->6548.42},{Kstab->59.7248}}

但是,如果我尝试使用Microcal Origin,我会得到: HZero = 6441,Kstab = 139,这实际上是一个很好的解决方案。

拜托,您对如何在Mathematica中获得更好的解决方案有什么建议吗? 感谢。

1 个答案:

答案 0 :(得分:2)

为什么第二种适合更好?

model[x_] = H0*(1 - (1/Kstab*Log10[10^10*H0/(2*Kstab*x)])^0.5);
sol = FindFit[data, model[x], {{H0, 6000}, {Kstab, 100}}, x];

model1[x_] = model[x] /. sol;
model2[x_] = model[x] /. {H0 -> 6441., Kstab -> 139.};

残差是:

Total[(#[[2]] - model1[#[[1]]])^2 & /@ data]
(* 75.0659 *)

Total[(#[[2]] - model2[#[[1]]])^2 & /@ data]
(* 4.15003*10^6 *)

以图形方式:

Show[Plot[{model1[x], model2[x]}, {x, 30, 7500}], ListPlot[data]]

plot