如何用MATLAB对二组数据同时进行曲线拟合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用MATLAB对二组数据同时进行曲线拟合相关的知识,希望对你有一定的参考价值。

各位MATLAB专家,本人对这个软件不懂,但是想用它来拟合一组数据成曲线和方程,我现在已经知道一组(X,Y)如何来拟合成曲线和方程了,可是要是有二组数据要同时拟合成曲线且在一个坐标区内又如何拟合呢?谢谢。如:x=[0 10 20 30 40 50 60 70 80 90 100];y1=[0 0.07 0.15 0.25 0.35 0.49 0.59 0.72 0.91 1.14 1.47];y2=[0 0.08 0.17 0.26 0.36 0.50 0.61 0.73 0.93 1.16 1.48]这个就是指在X是一样的情况下所获得的二组Y数据。请多指教。同时如果是三组、四组呢?再次谢谢。
上面两位的意思是一样的,我试过了都可以获得二条曲线,但是在图中散点没有了,只有曲线了,要是能在图中同时有散点和曲线就好了,另外是否可以有像拟合一条曲线一样的简易方法,也就是用CFTOOL(X,Y)的方法呢?而且直接就得到了方程。

1、首先打开电脑上的“matlab”软件,在命令行输入x=0:2*pi/8:2*pi确定x的取值,使用y=sin(x)产生正弦函数的数值,使用x和y的数据进行拟合,方便验证拟合结果。

2、接着在命令行输入cftool,打开matlab自带的曲线拟合工具箱。

3、曲线拟合工具箱的界面如下图所示,方框处可以选择拟合的数据。

4、选择自变量为x,因变量为y,接下来点击方框处选择拟合方法,可以根据自己的需要选择,此处点击“sum of sine”进行正弦曲线拟合。

5、选择拟合方法后,系统会自动对数据进行拟合,拟合结果如方框处所示。

参考技术A Matlab是一个很强大的数据处理软件,是人们进行数据分析的得力助手。一般我们做社会调研或科学研究时,会得到很多实验数据。当需要研究两个变量之间的关系时,经常要用到曲线拟合。曲线拟合不仅能给出拟合后的关系式,还能用图形直观的展现出变量之间的关系。 其实用matlab做曲线拟合很便捷,下面将以两个变量(y=f(x))为例详细介绍:
运行Matlab软件。
在工作空间中存入变量的实验数据。具体如下:
可以直接用矩阵来存放数据,直接在命令窗口输入
x=[数据x1,数据x2,...,数据xn];
y=[数据y1,数据y2,...,数据yn];
当数据较多时,可以从excel,txt等文件中导入。
把数据存入工作空间后,在命令窗口中输入cftool,回车运行。
在这个拟合工具窗口的左边,选择变量,即分别选择x,y。
选择拟合的曲线类型,一般是线性拟合,高斯曲线,平滑曲线等,根据需要选择。
选择完后会自动完成拟合,并且给出拟合函数表达式。
参考技术B 这个我会,其实很简单,只要在程序上加上hold on 即可,程序如下:
x=[0 10 20 30 40 50 60 70 80 90 100];
y1=[0 0.07 0.15 0.25 0.35 0.49 0.59 0.72 0.91 1.14 1.47];
y2=[0 0.08 0.17 0.26 0.36 0.50 0.61 0.73 0.93 1.16 1.48];
[p,S]=polyfit(x,y1,2);
[p,S]=polyfit(x,y2,2);
Y=polyconf(p,x,y1);
plot(x,y1,'r');
hold on;
Y=polyconf(p,x,y2);
plot(x,y2,'b')
我运行了,没有问题
要多组也是没有问题的,加上hold on 就行了
方程的话,求出p和S就行了!如下:
x=[0 10 20 30 40 50 60 70 80 90 100];
y1=[0 0.07 0.15 0.25 0.35 0.49 0.59 0.72 0.91 1.14 1.47];
y2=[0 0.08 0.17 0.26 0.36 0.50 0.61 0.73 0.93 1.16 1.48];
[p1,S]=polyfit(x,y1,2);
[p2,S]=polyfit(x,y2,2);
p1,p2

p1 =

0.0001 0.0031 0.0308

p2 =

0.0001 0.0035 0.0355
方程就是:y1=0.0001x^2+0.0031x+0.0308
y2=0.0001x^2+0.0035x+0.0355

补充:你还要图中的散点?也简单,如下:
x=[0 10 20 30 40 50 60 70 80 90 100];
y1=[0 0.07 0.15 0.25 0.35 0.49 0.59 0.72 0.91 1.14 1.47];
y2=[0 0.08 0.17 0.26 0.36 0.50 0.61 0.73 0.93 1.16 1.48];
[p,S]=polyfit(x,y1,2);
[p,S]=polyfit(x,y2,2);
Y=polyconf(p,x,y1);
plot(x,y1,'r+',x,y1,'r');
hold on;
Y=polyconf(p,x,y2);
plot(x,y2,'b*',x,y2,'b')
要是用cftool的话,真是没办法说,但是可以确定的是,可以将它们放在同一个图上,但是首先还是要选择变量!!!本回答被提问者采纳
参考技术C 这个我会,其实很简单,只要在程序上加上hold
on
即可,程序如下:
x=[0
10
20
30
40
50
60
70
80
90
100];
y1=[0
0.07
0.15
0.25
0.35
0.49
0.59
0.72
0.91
1.14
1.47];
y2=[0
0.08
0.17
0.26
0.36
0.50
0.61
0.73
0.93
1.16
1.48];
[p,S]=polyfit(x,y1,2);
[p,S]=polyfit(x,y2,2);
Y=polyconf(p,x,y1);
plot(x,y1,'r');
hold
on;
Y=polyconf(p,x,y2);
plot(x,y2,'b')
我运行了,没有问题
要多组也是没有问题的,加上hold
on
就行了
方程的话,求出p和S就行了!如下:
x=[0
10
20
30
40
50
60
70
80
90
100];
y1=[0
0.07
0.15
0.25
0.35
0.49
0.59
0.72
0.91
1.14
1.47];
y2=[0
0.08
0.17
0.26
0.36
0.50
0.61
0.73
0.93
1.16
1.48];
[p1,S]=polyfit(x,y1,2);
[p2,S]=polyfit(x,y2,2);
p1,p2
p1
=
0.0001
0.0031
0.0308
p2
=
0.0001
0.0035
0.0355
方程就是:y1=0.0001x^2+0.0031x+0.0308
y2=0.0001x^2+0.0035x+0.0355
补充:你还要图中的散点?也简单,如下:
x=[0
10
20
30
40
50
60
70
80
90
100];
y1=[0
0.07
0.15
0.25
0.35
0.49
0.59
0.72
0.91
1.14
1.47];
y2=[0
0.08
0.17
0.26
0.36
0.50
0.61
0.73
0.93
1.16
1.48];
[p,S]=polyfit(x,y1,2);
[p,S]=polyfit(x,y2,2);
Y=polyconf(p,x,y1);
plot(x,y1,'r+',x,y1,'r');
hold
on;
Y=polyconf(p,x,y2);
plot(x,y2,'b*',x,y2,'b')
要是用cftool的话,真是没办法说,但是可以确定的是,可以将它们放在同一个图上,但是首先还是要选择变量!!!
参考技术D 不好意思,没有找到直接拟合多组数据的函数,说一条替代方案吧.
方案一 拟合两次,同时画出图像;方案二 拟合两次,分别画图,但在同一张图中显示
具体的程序:
方案一
x=[0 10 20 30 40 50 60 70 80 90 100];
y1=[0 0.07 0.15 0.25 0.35 0.49 0.59 0.72 0.91 1.14 1.47];
y2=[0 0.08 0.17 0.26 0.36 0.50 0.61 0.73 0.93 1.16 1.48];
p1=polyfit(x,y1,3);%拟合高阶方程得系数,这个你应该知道的吧
p2=polyfit(x,y2,3);
x1=0:100;
new_y1=polyval(p1,x1);
new_y2=polyval(p2,x1);
plot(x1,new_y1,'r',x1,new_y2,'-b')

方案二
x=[0 10 20 30 40 50 60 70 80 90 100];
y1=[0 0.07 0.15 0.25 0.35 0.49 0.59 0.72 0.91 1.14 1.47];
y2=[0 0.08 0.17 0.26 0.36 0.50 0.61 0.73 0.93 1.16 1.48];
p1=polyfit(x,y1,3);
p2=polyfit(x,y2,3);
x1=0:100;
new_y1=polyval(p1,x1);
new_y2=polyval(p2,x1);
plot(x1,new_y1,'r')
hold on;%同时显示两张图
plot(x1,new_y2,'-b')

以上是关于如何用MATLAB对二组数据同时进行曲线拟合的主要内容,如果未能解决你的问题,请参考以下文章

matlab 二维数据点 光滑曲线

如何用matlab做正弦曲线拟合

怎么通过一组数据拟合出总体分布

如何用matlab实现对边缘检测后的图像的边缘细化和曲线拟合?

如何用r语言对rugarch拟合好的模型做诊断

如何用matlab数据拟合函数?