mathematica 如何在指定区间上进行拟合?
mathematica吧
全部回复
仅看楼主
level 1
我有一组数据
y={0.451503, 0.971407, 2.02925, 3.68123, 7.30039, 13.7389, 24.8517, 45.7971, 78.2373, 134.353, 226.263, 380.331, 620.045, 986.284, 1541.12, 2434.67}
对应的
x={10,25,1}
我希望利用函数
f[c_, n_, M_] := c*Sum[Binomial[M, l], {l, 2, 2*n}];
在M={10,25,1}这个区间上进行拟合,
但是无法在FindFit中指定拟合的范围。
有没有大佬可以给我一些建议或者指导?
2021年11月06日 04点11分 1
吧务
level 15
啥叫
对应的
x={10,25,1}

在函数f里充当自变量的又是什么?
2021年11月06日 05点11分 2
抱歉刚才没有说清楚。 横坐标是x={10,25,1},对应的数值为y,函数中充当自变量的是M,参数是c和n。 我希望的结果是找到一组c和n,使得M={10,25,1}时,函数能很好的拟合数据y。
2021年11月06日 05点11分
他说的估计是Range
2021年11月06日 06点11分
@asdasd1dsadsa 可是y里只有16个数啊。
2021年11月06日 06点11分
@xzcyr 10-25也是16个数啊
2021年11月06日 06点11分
吧务
level 15
……范围的问题很好解决,这个问题真正的坑点是n的取值只能是整数这点,因为几个拟合函数现在都没有限制整数域的选项。我能想到的解法是,先不限数域计算:
y = {0.451503, 0.971407, 2.02925, 3.68123, 7.30039, 13.7389, 24.8517, 45.7971, 78.2373,
134.353, 226.263, 380.331, 620.045, 986.284, 1541.12, 2434.67}
x = Range[10, 25, 1]
f[c_, n_, M_] = c*Sum[Binomial[M, l], {l, 2, 2*n}]
rule = FindFit[{x, y}\[Transpose], f[c, n, m], {c, n}, m]
(* {c -> 0.000384947, n -> 4.89074} *)
Plot[f[c, n, m] /. rule // Evaluate, {m, 10, 25}]~Show~ListPlot[{x, y}\[Transpose]]
从这个结果来看,n=5似乎是合适的,重算后发现效果也还可以:
rule2 = FindFit[{x, y}\[Transpose], f[c, 5, m], {c}, m]
(* {c -> 0.0003428} *)
Plot[f[c, 5, m] /. rule2 // Evaluate, {m, 10, 25}]~Show~ListPlot[{x, y}\[Transpose]]
但这个搞法有多强的可推广性就不知道了。
2021年11月06日 07点11分 3
棒啊!谢谢大佬!
2021年11月06日 08点11分
1