【问题标题】:FindFit returns a weird nrnumFindFit 返回一个奇怪的 nrnum
【发布时间】:2013-05-10 21:01:08
【问题描述】:

再来一次!

我正在尝试使用 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.}。 >>

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

【问题讨论】:

    标签: wolfram-mathematica


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2011-12-01
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多