Matlab 使用nlinfit 函数进行多元非线性回归,并且绘制曲线拟合的误差区间

Matlab 使用nlinfit 函数进行多元非线性回归,并且绘制曲线拟合的误差区间

一、前言

这个也是最近我接到的一个小项目里的内容:
有一组数据x、y:

x=[2000	2001	2002	2003	2004	2005	2006	2007	2008	2009	2010	2011	2012	2013	2014	2015	2016	2017	2018	2019]

y=[320	224	335	529	802	1966	3385	4340	4616	4752	4597	4431	4930	5770	5576	5510	5468	6970	6558	6177]

参考文献后发现需要利用这组数据拟合成特定的函数形式:
在这里插入图片描述
因此,使用MATLAB中多元非线性回归nlinfit 函数进行自定义函数的拟合,并且绘制出置信度95%下的拟合误差阴影,效果如下:
在这里插入图片描述
在这里插入图片描述
下面是回归具体拟合过程和置信区间下的误差阴影绘制。

二、nlinfit函数使用

1、函数语法

在这里插入图片描述

2、拟合示例:

x=[2000	2001	2002	2003	2004	2005	2006	2007	2008	2009	2010	2011	2012	2013	2014	2015	2016	2017	2018	2019];

y=[320	224	335	529	802	1966	3385	4340	4616	4752	4597	4431	4930	5770	5576	5510	5468	6970	6558	6177]%内联函数创建自定义函数 beta为参数数组
mymodel = inline('beta(1)./(1+exp(-(beta(2)).*(x-beta(3))))','beta','x');
%定义参数初始值
beta0=[500 1 2006];
%进行拟合
[beta,r,J]= nlinfit(x,y,mymodel,beta0);
%打印拟合参数值
fprintf("拟合结果为:K=%f a=%f b=%f\n",vpa(beta(1)),vpa(beta(2)),vpa(beta(3)));

三、误差阴影绘制

%Y是预测值 delta是置信度为95%的拟合误差
[Y,delta]=nlpredci(mymodel,x,beta,r,J);
figure
x=x;
Y=Y';
delta=delta';
%绘制置信区域
fill([x x(end:-1:1)],[Y+delta Y(end:-1:1)-delta(end:-1:1)],[204/255 204/255 204/255],'EdgeColor','none');
hold on
plot(x,y,'ko',x,Y,'k');
xlabel("xx");
ylabel("y");
title("Title")

四、整体源码

x=[2000	2001	2002	2003	2004	2005	2006	2007	2008	2009	2010	2011	2012	2013	2014	2015	2016	2017	2018	2019];

y=[320	224	335	529	802	1966	3385	4340	4616	4752	4597	4431	4930	5770	5576	5510	5468	6970	6558	6177]%内联函数创建自定义函数 beta为参数数组
mymodel = inline('beta(1)./(1+exp(-(beta(2)).*(x-beta(3))))','beta','x');
%定义参数初始值
beta0=[500 1 2006];
%进行拟合
[beta,r,J]= nlinfit(x,y,mymodel,beta0);
%打印拟合参数值
fprintf("拟合结果为:K=%f a=%f b=%f\n",vpa(beta(1)),vpa(beta(2)),vpa(beta(3)));
%Y是预测值 delta是置信度为95%的拟合误差
[Y,delta]=nlpredci(mymodel,x,beta,r,J);
figure
x=x;
Y=Y';
delta=delta';
%绘制置信区域
fill([x x(end:-1:1)],[Y+delta Y(end:-1:1)-delta(end:-1:1)],[204/255 204/255 204/255],'EdgeColor','none');
hold on
plot(x,y,'ko',x,Y,'k');
xlabel("xx");
ylabel("y");
title("Title")

运行结果如前言所示(当然x轴的文字是另外修改的)

五、思考

  • 关于自定义函数的拟合:一开始我用的matlab拟合工具箱,拟合结束后发现只能得到拟合参数的值和一些描述拟合结果的误差,不能绘制出来误差阴影图,搜索之后发现多元非线性回归可以实现这个需求,详见【参考博客1】。
  • 关于95%置信区间误差阴影绘制:有很多博客写到了多项式拟合以及拟合之后的95%置信区间误差阴影绘制,我对此进行了参考,详见【参考博客2】。
  • 关于其余置信区间误差区域计算、绘制例如90%,只需要nlpredci函数中设定’Alpha’,0.1即可。详见MATLAB【help-nlpredc】。

参考博客

1、使用MATLAB进行多元非线性回归——nlinfit函数的使用
2、Matlab绘制带置信区间的拟合曲线

欢迎各位留言交流!!!


同时,如果各位在作图方面有需要可以闲鱼搜索用户:Man小洁,欢迎交流。


  • 19
    点赞
  • 160
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
非线性回归拟合是在使用Matlab进行数据分析和建模时常见的任务之一。Matlab提供了许多函数和工具箱来支持非线性回归分析。 首先,您需要准备您的数据。假设您已经有了一个包含自变量和因变量的数据集。接下来,您可以使用Matlab曲线拟合工具箱(Curve Fitting Toolbox)来进行非线性回归拟合。 以下是一个简单的示例代码,展示了如何使用Matlab进行非线性回归拟合: ```matlab % 假设您的数据存储在两个向量 x 和 y 中 % 定义自定义的非线性模型函数 model = @(coeffs, x) coeffs(1)*exp(coeffs(2)*x); % 初始化初始参数估计值 initialCoeffs = [1, 1]; % 使用 nlinfit 函数进行非线性回归拟合 estimatedCoeffs = nlinfit(x, y, model, initialCoeffs); % 使用估计得到的参数进行预测 predictedValues = model(estimatedCoeffs, x); % 绘制原始数据和拟合曲线 plot(x, y, 'o'); hold on; plot(x, predictedValues); legend('原始数据', '拟合曲线'); ``` 在上述代码中,我们首先定义了一个自定义的非线性模型函数 `model`,这里使用了指数模型。然后,我们初始化了参数的初始估计值 `initialCoeffs`。接下来,我们使用 `nlinfit` 函数进行非线性回归拟合,得到了参数的估计值 `estimatedCoeffs`。最后,我们使用估计得到的参数进行预测,并绘制了原始数据和拟合曲线。 请注意,这只是一个简单的示例,实际应用中可能需要根据具体情况进行适当的调整和修改。Matlab提供了更多的函数和工具箱来支持不同类型的非线性回归分析,您可以根据具体需求选择合适的方法和工具。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值