如何在Matlab中实现阶乘拟合?Curve Fitting App使用疑问
在Matlab中实现阶乘拟合的方法
Matlab的Curve Fitting App本身没有内置阶乘拟合选项,你可以通过自定义拟合方程来实现,具体操作如下:
打开Curve Fitting App并导入数据
- 先运行数据定义代码:
x = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]; y = [20, 30, 42, 56, 512, 729, 1000, 1331, 1728, 2197, 2744, 3375, 28800, 36992, 46818, 58482, 72200, 88200, 106722, 128018, 1068672, 1322500, 1622400, 1974375, 2384928, 2861082, 3410400]; - 命令行输入
cftool打开Curve Fitting App,将x设为自变量、y设为因变量导入。
- 先运行数据定义代码:
自定义阶乘拟合模型
- 在拟合类型下拉框中选择
Custom Equation(自定义方程)。 - 输入拟合模型,比如单参数阶乘模型:
或带常数项的双参数模型:y = a * factorial(x)y = a * factorial(x) + b注意:阶乘
factorial(x)的数值增长极快(比如30!≈2.6×10³²),但你的y值最大仅约3.4×10⁶,直接用原始阶乘拟合容易出现数值溢出或拟合效果极差的情况。此时可以对模型做对数转换,将非线性拟合转为线性拟合:对y = a*x!两边取自然对数,得到ln(y) = ln(a) + ln(x!),令Y = ln(y)、X = ln(factorial(x)),模型就变为Y = k + X(其中k = ln(a)),用线性拟合求解后,再通过a = exp(k)还原参数。
- 在拟合类型下拉框中选择
执行拟合并分析结果
- 点击
Fit按钮执行拟合。 - 在结果面板查看参数估计值、拟合优度等指标,通过绘图对比拟合曲线与原始数据的匹配度。
- 点击
命令行实现方式
如果更习惯用命令行操作,可直接使用fit函数:
% 定义自定义拟合模型 model = fittype('a*factorial(x) + b', 'independent', 'x', 'dependent', 'y'); % 执行拟合(注意x和y需要转为列向量) fit_result = fit(x', y', model); % 输出拟合结果 disp(fit_result); % 绘制拟合曲线与原始数据 plot(fit_result, x, y);
额外提示:观察你的数据可以发现,x=4-7时y值接近x*(x+1),x=8-15时y=x³,后续数据又有不同的增长规律,单一阶乘模型可能难以适配所有数据,建议先分析数据的分段规律,再选择合适的拟合模型。
内容的提问来源于stack exchange,提问作者Goncalo Freitas
相关产品推荐
相关产品推荐

