数学建模之拟合算法(含matlab源代码)

目录

一、拟合问题和插值问题区别

二、拟合计算

三、matlab代码

1、多项式拟合

应用举例

 2、非线性拟合

 应用举例

 3、拟合工具箱

应用举例

 四、拟合使用场景


一、拟合问题和插值问题区别

 1、插值函数过已知点,而拟合函数不一定过已知点;

2、插值主要用于求函数值,而拟合的主要目的是求函数关系,从而进行预测等进一步的分析。

二、拟合计算

曲线拟合需解决如下两个问题:
(1) 线型的选择;
(2) 线型中参数的计算。
线型的选择是拟合计算的关键和难点。通常主要根据专业知识和散点图确定线型。
线 性 拟 合 中 参 数 的 计 算 可 采 用 最 小 二乘法,而非线性拟合参数的计算则要应用Gauss-Newton迭代法。


三、matlab代码

1、多项式拟合

应用举例

x=1:12;
y=[5, 8, 9, 15, 25, 29, 31, 30, 22, 25, 27, 24];
a=polyfit(x,y,9)
xp=1:0.1:12;
yp=polyval(a,xp);
plot(x,y,'.k',xp,yp,'r');

 (x,y,9)表示最高此项为9;利用polyval求出系数,a表示系数;然后讲a和需要预测的xp带入polyval求出预测值。

 2、非线性拟合

 应用举例

 x=1:16;
y=[4.00 6.40 8.00 8.80 9.22 9.50 9.70 9.86 10.00 10.20 10.32 10.42 10.50 10.55 10.58 10.60];
y1=@(b,t)b(1)*exp(-t/b(2))+b(3)*exp(-t/b(4))+b(5);
b0=[-1 1 -1 1 1];
a=nlinfit(x,y,y1,b0)
xp=1:0.1:16;
yp=y1(a,xp);
plot(x,y,'.k',xp,yp,'r');

x y为自变量和因变量,y1为拟合的函数,b0为随机带的数。利用nlinfit求出参数后可以带入预测的数。

 3、拟合工具箱

命令窗口输入cftool启动

 在 命 令 窗 口 录 入 自 变 量 x 和 函 数 y 的 数 据 , (也可以导入数据)然 后 在Data菜单中即可选中上述数据,并产生Data sets。此时工具箱会自动画出散点图。

点击Fitting->New fit,可以修改Fit name, 选择Datasets(自动)和Type of Fit。Apply后即可完成拟合。

 若想自定义函数,可以选定Type of Fit中的Custom Equations,然后定义新函数。
 

应用举例

仍使用上方非线性拟合的数据

 点击不同的函数类型,使用不同的方法拟合效果都不同,

 

R-square和Adjusted R-square越大说明拟合效果越好

 四、拟合使用场景

1、求预测,小样本预测,样本比较少的时候,并且对未来很小范围的预测。比如有10年的数据,对未来11年预测。

2、通过x y坐标不能直接的答案,必须进行求导,也就是先要拟合出x和y之间的关系式才能进一步计算。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB中,有多个函数可用于进行数据拟合,具体选择取决于您的数据类型和拟合要求。以下是一些常用的数据拟合函数: 1. `polyfit`函数:用于多项式拟合。可以拟合数据集到一个多项式模型,并返回拟合多项式的系数。 ```matlab % 例子:使用二次多项式拟合数据 x = [1, 2, 3, 4, 5]; y = [2, 3, 5, 8, 10]; degree = 2; % 多项式的次数 coefficients = polyfit(x, y, degree); ``` 2. `fit`函数:用于非线性拟合。可以根据给定的模型函数和初始参数值,拟合数据集到一个非线性模型,并返回拟合参数。 ```matlab % 例子:使用指数函数拟合数据 x = [1, 2, 3, 4, 5]; y = [2.5, 3.6, 5.1, 7.4, 10.2]; model = fittype('a*exp(b*x)'); % 定义指数函数模型 startParams = [1, 1]; % 初始参数值 fittedModel = fit(x', y', model, 'StartPoint', startParams); ``` 3. `lsqcurvefit`函数:用于最小二乘曲线拟合。可以通过最小化残差平方和来拟合数据集到一个自定义的非线性模型,并返回拟合参数。 ```matlab % 例子:使用自定义的高斯函数拟合数据 x = [1, 2, 3, 4, 5]; y = [0.1, 0.5, 0.9, 0.3, 0.2]; model = @(params, x) params(1)*exp(-((x-params(2))/params(3)).^2); % 定义高斯函数模型 startParams = [1, 3, 1]; % 初始参数值 fittedParams = lsqcurvefit(model, startParams, x, y); ``` 这些是MATLAB中常用的数据拟合函数,你可以根据自己的数据和需求选择适合的函数进行拟合

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值