Novate Net

关注科学技术的最前沿

如何利用matlab对数据做拟合曲线

在学习中难免会遇到很多数据需要分析,举个例子给你一个数据让你分析x和y之间有什么关系(注:本文只是对于初学者的教程,高手请绕道):

数据并不是很多,这里也只是举个例子,在实际中数据往往也是上万个,如何让你直观的只看这些数据恐怕很难观察出x和y会有什么关系。不妨先画出它的散点图,这里在matlab中输入代码

clc;clear;close all;                
x=[0.5,1.0,1.5,2.0,2.5,3.0];
y=[1.75,2.45,3.81,4.80,7.00,8.60]; %输入原始数据
plot(x,y,’*’);
xlabel(‘x’);                                       %标记x轴
ylabel(‘y’);                                       %标记y轴

就可以很轻易的画出散点图如图:

观察图像,你很难直观的判断x和y是线性关系还是非线性关系,所以你需要对这些数据进行曲线拟合。

对数据拟合的算法有很多,这里我们用最小二乘法的原理进行拟合,具体原理读者可以去查阅资料,这里主要讲它的matlab编程如何实现。输入以下代码进行上面的数据线性拟合:

clc;clear;close all;
x=[0.5,1.0,1.5,2.0,2.5,3.0];
y=[1.75,2.45,3.81,4.80,7.00,8.60]; %输入原始数据
x1=[0.5:0.05:3.0];
a1=polyfit(x,y,1);                            %一次拟合
y1=a1(2)+a1(1)*x1;                       %一次多项式
plot(x,y,’*’);
hold on;
plot(x1,y1,’b–‘);

legend(‘原始数据’,’一次拟合’)

一次拟合图形如下:

往往进行了一次拟合之后需要进行二次拟合和三次拟合观察图像对比,同理进行二次拟合和三次拟合,输入代码:

clc;clear;close all;
x=[0.5,1.0,1.5,2.0,2.5,3.0];  
y=[1.75,2.45,3.81,4.80,7.00,8.60];                                  %输入原始数据
x1=[0.5:0.05:3.0];
a1=polyfit(x,y,1);                                                              %一次拟合
a2=polyfit(x,y,2);                                                              %二次拟合
a3=polyfit(x,y,3);                                                              %三次拟合
y1=a1(2)+a1(1)*x1;                                                          %一次多项式
y2=a2(3)+a2(2)*x1+a2(1).*x1.*x1;                                 %二次多项式
y3=a3(1).*x1.*x1.*x1+a3(2).*x1.*x1+a3(3).*x1+a3(4);%三次多项式
plot(x,y,’*’);
hold on;
plot(x1,y1,’b–‘,x1,y2,’k’,x1,y3,’ro’);
legend(‘原始数据’,’一次拟合’,’二次拟合’,’三次拟合’);

结果如图

这样对于这一组数据到底是什么函数关系想必看图像便能更直观的进行分析,当然上面的代码也具有’‘普遍性’,也就是你换一组数据套用上面的代码依然能用,当然对于高手你也可以直接写一个function函数,更便于以后分析的调用。

另外对曲线拟合很多其他的软件也能做,比如spss,或者用一些编程语言,比如R,matlab作为一个最强大的数学工具之一,功能范围还是比较大的,读者要是感兴趣可以查阅一些相关资料。

参考文献:

【1】余胜威,《MATLAB数学建模经典案例实战》,清华大学出版社,2016年

【2】刘浩,韩晶,《MATLAB R2014a完全自学一本通》,电子工业出版社,2016年

点赞

发表评论

/*广告*/ /*广告*/