wolfram-mathematica - Mathematica 中的函数和

标签 wolfram-mathematica

我正在尝试曲线拟合任意分布的高斯总和到一个函数——每个都有自己的一组参数。目前,如果我想使用二十个功能,我会执行以下操作

φ[α_?NumberQ, x_?NumberQ, xi_?NumberQ, c_?NumberQ] := (
  c E^(- α (x - xi)^2/2))/Sqrt[α/π];
Data := Table[{n/50, N[f[n/50]]}, {n, -300, 300}];

model = φ[a1, x, x1, c1] + φ[a2, x, x2, c2] + φ[a3, x, x3, c3] + 
   φ[a4, x, x4, c4] + φ[a5, x, x5, c5] + φ[a6, x, x6, c6] + 
   φ[a7, x, x7, c7] + φ[a8, x, x8, c8] + φ[a9, x, x9, c9] + 
   φ[a10, x, x10, c10] + φ[a11, x, x11, c11] + φ[a12, x, x12, c12] + 
   φ[a13, x, x13, c13] + φ[a14, x, x14, c14] + φ[a15, x, x15, c15] + 
   φ[a16, x, x16, c16] + φ[a17, x, x17, c17] + φ[a18, x, x18, c18] + 
   φ[a19, x, x19, c19] + φ[a20, x, x20, c20];
nlm = NonlinearModelFit[Data, 
   model, {a1, x1, c1, a2, x2, c2, a3, x3, c3, a4, x4, c4, a5, x5, c5, a6, x6,
     c6, a7, x7, c7, a8, x8, c8, a9, x9, c9, a10, x10, c10, a11, x11, c11, 
     a12, x12, c12, a13, x13, c13, a14, x14, c14, a15, x15, c15, a16, x16, c16,
     a17, x17, c17, a18, x18, c18, a19, x19, c19, a20, x20, c20}, x];

这很有效,但手动创建这些线性组合很乏味。使用 a、xi 和 c 的系数向量创建函数的线性组合会很棒。我只是不确定如何解决这个问题,我希望你们能对此提供一些见解。

最好的事物,

托马斯

最佳答案

你可以试试:

Phi[α_, x_, xi_, c_] := (c E^(- α (x - xi)^2/2))/Sqrt[α/π];

model = Sum[Phi[a@i, x, xx@i, c@i], {i, 20}];

nlm = NonlinearModelFit[Data, model, Flatten@Table[{a@i, xx@i, c@i}, {i, 20}], x]

编辑

未经测试,但我认为为了让高斯的数量不定,您还可以执行以下操作:
nlm[n_] := NonlinearModelFit[Data, Sum[Phi[a@i, x, xx@i, c@i], {i, n}]
                                   Flatten@Table[{a@i, xx@i, c@i}, {i, n}], x];

nlm[20]

关于wolfram-mathematica - Mathematica 中的函数和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6742175/

相关文章:

c++ - Mathematica/CUDA 减少执行时间

python - 重用最后一行 Jupyter 的结果

dynamic - 在网格中指定本地动态

wolfram-mathematica - 处理下标变量

wolfram-mathematica - 使用结构体通过引用传递参数

arrays - append 到表的行

matlab - 寻找帐篷 map 的固定点/吸引器/排斥器

wolfram-mathematica - 操作 “intra”和 “inter”列表

string - 使用 Mathematica 在定义位置的左侧或右侧“StringCut”

algorithm - Matlab 中的排列函数