在 MATLAB 中“拟合曲线”通常有几类做法,从最简单的内置函数到自定义模型拟合。下面按常见场景给你一个清晰总结。
polyfit适合:已知大概是直线、二次、三次曲线
x = 1:10;
y = [2.1 3.9 6.2 8.1 10.5 12.8 15.1 17.0 19.2 21.0];
p = polyfit(x, y, 2); % 2次多项式
y_fit = polyval(p, x);
plot(x, y, 'o', x, y_fit, '-')
p:系数(从高次到低次)polyval:计算拟合值适合:不想写代码、快速看结果
x = 1:10;
y = rand(1,10);
plot(x, y, 'o')
然后:
fit + Curve Fitting Toolbox适合:指数、幂律、高斯等
x = 1:0.5:10;
y = 3*exp(-0.4*x) + randn(size(x))*0.2;
f = fit(x', y', 'exp1'); % exp1: a*exp(b*x)
plot(f, x, y)
常见模型:
'poly2' 二次'exp1' 单指数'power1' 幂律'gauss1' 高斯适合:公式很特殊
x = linspace(0,10,50)';
y = 2*x.^0.5 + randn(size(x))*0.3;
ft = fittype('a*sqrt(x)+b');
f = fit(x, y, ft, 'StartPoint', [1 1]);
plot(f, x, y)
lsqcurvefit适合:复杂模型、无 Curve Fitting Toolbox
x = 1:10;
y = 2*exp(-0.3*x) + 0.5;
model = @(p,x) p(1)*exp(p(2)*x) + p(3);
p0 = [1 0 0];
p = lsqcurvefit(model, p0, x, y);
plot(x, y, 'o', x, model(p,x), '-')
residual = y - y_fit;
R2 = 1 - sum(residual.^2)/sum((y-mean(y)).^2);
| 情况 | 推荐 |
|---|---|
| 直线/多项式 | polyfit |
| 快速看图 | Basic Fitting |
| 指数/高斯 | fit |
| 自定义公式 | fittype / lsqcurvefit |
如果你愿意,可以把你的数据或公式发我,我可以直接帮你写拟合代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。