1

再次!

我正在尝试使用 Mathematica 拟合数据点列表。问题是,即使我假设所有参数都是实数并且函数中没有虚单位,它也会给我一个错误,即当它试图拟合时函数很复杂。是什么让我相信这是因为我对 Mathematica 不够了解,因为它在评估函数时所说的虚构项应该被认为是完美的零:2.975219565012465*10^-753 I。但它来自哪里?

现在代码:

FindFit[Table[{X[[i]], weight[[i]]}, {i, Length[weight]}], {allFunc[x,
a, b, c, d, e, f, g], {a \[Element] Reals, b \[Element] Reals, 
x \[Element] Reals, c \[Element] Reals, d \[Element] Reals, 
e \[Element] Reals, f \[Element] Reals, g \[Element] Reals}}, {{a, 
10.42}, {b, -0.05435}, {c, 7.59}, {d, 3.986}, {e, 88.19}, {f, 
6.958}, {g, 104500}}, x]

虽然 allFunc 是:

crystalBall[x_, \[Alpha]_, n_, \[Mu]_, \[Sigma]_, Norma_] :=
If[(x - \[Mu])/\[Sigma] > -\[Alpha],
Norma*Exp[-((x - \[Mu])^2/(2 \[Alpha]^2))],
Norma*(n/Abs[\[Alpha]])^
n Exp[-(Abs[\[Alpha]]^2/2)] (n/Abs[\[Alpha]] - Abs[\[Alpha]] - (
 x - \[Mu])/\[Sigma])^-n];
allFunc[x_, const_, slope_, alpha_, en_, miu_, sigma_, norm_] := 
Exp[const + slope*x] + crystalBall[x, alpha, en, miu, sigma, norm];

对代码的方面感到抱歉。我得到的错误是:

FindFit::nrnum: 函数值 1.74493*10^14+2.975219565012465*10^-753 I 不是实数 {a,b,c,d,e,f,g} = {13.3122,0.0104586,-58.8739 ,3.986,87.764,6.958,104500.}。>>

我已经在我的适合范围内绘制了带有这些参数的函数,并且没有出现复杂的警告。我也在互联网上寻找解决方案,但我只收到想要做复杂拟合的人的问题,而我没有。

4

1 回答 1

2

用 Re[] 或 Chop[] 包装你的函数

于 2013-05-10T11:37:35.493 回答