文章目录
- 一、实验目的
- 二、实验内容
- 三、仿真结果
- 四、实践中遇到的问题及解决方法
一、实验目的
1. 熟悉根据已知数据进行回归法曲线拟合。
2. 熟悉根据已知数据进行多项式曲线拟合。
3. 熟悉根据已知数据利用指定方法进行数据插值(临近插值、线性插值、立方插值、三次样条插值)。
4. 熟悉脚本文件和函数文件的概念、各自的特点以及二者的区别。
5. 熟悉主函数和私有函数的特点。
6. 了解MATLAB编程的特点。
二、实验内容
1.多项式曲线拟合的介绍
已知变量x,y之间的函数关系为y=a1x(n)+a2x(n-1)+…+a(n)x+a(n+1)
现在希望通过实验获得一组关于(x,y)的测量数据,确定出系数(a1,a2,…a(n+1))。这类问题就称为多项式拟合。MATLAB求解该问题的命令是:
p=polyfit(x,y,n) %x,y数组所给数据的n阶拟合多项式系数向量p
2.多项式曲线拟合的注意事项
A、为保证较好的拟合效果,多项式阶数要取得恰当。过低,可能残差较大;过高,拟合模型包含噪声影响。观察数据图形曲线,有助于适当阶数的确定。
B、拟合多项式只能在给定数据所限定的区间内使用,不要任意向外拓展。
3.多项式曲线拟合的应用举例
>> x=0:0.1:1;
y=[-0.447,1.978,3.11,5.25,5.02,4.66,4.01,4.58,3.45,5.35,9.22];
p=polyfit(x,y,3) %三次拟合
xx=0:0.001:1;
yy=polyval(p,xx);
plot(xx,yy)
p =56.6915 -87.1174 40.0070 -0.9043
4. 回归法曲线拟合的说明
A、最小二乘解的求取方法不仅适用于多项式模型,还适用于其他更广泛的模型。
B、适用最小二乘解的条件是:只要应变量y与自变量x的数据阵X满足线性关系即可。
5.回归法曲线拟合的应用举例
t=[0,0.3,0.8,1.1,1.6,2.3]';
y=[0.5,0.82,1.14,1.25,1.35,1.40]';
x=[ones(size(t)),t,t.^2];
a=x\y
T=(0:0.1:2.5)';
Y=[ones(size(T)),T,T.^2]*a;
plot(T,Y,'O')
a =0.53180.9191-0.2387
6.插值介绍
插值就是在已知数之间寻找估计值。一般的,从各种试验得来的数据总是有一定的数量,而利用插值技术能够从有限的数据中获取系统整体的状态。因此,数据插值在各行各业,特别是信号处理领域内有着广泛的应用。MATLAB软件作为数据处理的优秀软件之一,自然提供了常用的各种数据插值计算的函数。
7.一维插值的两种类型
A、多项式插值
格式:yi=interp1(x,y,xi,method)。xi用于插值的点;method指定插值的方法
B、基于傅里叶变换的一维插值
格式:y=interpfit(x,n)。x为含有周期函数值的矢量,并且为等间距点的个数,n为返回等间距点的个数。
8. 一维插值中多项式插值的方法
一维插值中多项式插值的方法9.二维插值
格式:y=interp2(x,y,z,xi,yi,method)
9.三种二维插值
插值 | 说明 |
---|---|
临近插值 | 用分段连续的面来拟合已知数据,插入最邻近的点 |
双线性插值 | 用分段的双线性来拟合已知数据 |
二重三次方插值 | 通过已知数据拟合一个双立体面 |
10.常用一维插值中多项式插值的指令
指令 | 说明 |
---|---|
y=interp1(x,y,x1,‘spline’) | 三次样条插值 |
y=interp1(x,y,x1,‘nearest’) | 临近插值 |
y=interp1(x,y,x1,‘linear’) | 线性插值 |
y=interp1(x,y,x1,‘cublic’) | 立方插值 |
三、仿真结果
1.给出两组数据x=[0 0.3 0.8 1.1 1.6 2.3]’ y=[0.82 0.72 0.63 0.60 0.55 0.50]’,我们可以简单的认为这组数据在一条衰减的指数函数曲线上,y=C1+C2exp(-x)通过曲线拟合求出这条衰减曲线的表达式,并且在图形窗口画出这条曲线,已知的点用*表示。
答:
>> x=[0 0.3 0.8 1.1 1.6 2.3]';
y=[0.82 0.72 0.63 0.60 0.55 0.50]';
x1=[ones(size(x)),exp(-x)];
c=x1\y
T=(0:0.1:10)';
y1=[ones(size(T)),exp(-T)]*c;
plot(T,y1, x,y,'*')
c =0.4760
0.3413
由程序结果可知衰减曲线的表达式:y1=0.4760+0.3413*exp(-t)
2.通过测量得到一组数据:
t | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
y | 4.842 | 4.362 | 3.754 | 3.368 | 3.169 | 3.083 | 3.034 | 3.016 | 3.012 | 3.005 |
分别采用y1(t)= C1+C2exp(-t)和y2(t)= d1+d2t*exp(-t)进行拟合,并画出拟合曲线进行对比。
答:
>> t=[1:10]';
y=[4.842 4.362 3.754 3.368 3.169 3.083 3.034 3.016 3.012 3.005]';
x1=[ones(size(t)),exp(-t)];
c=x1\y
x2=[ones(size(t)),t.*exp(-t)];
d=x2\y
T=(0:0.1:10)';
y1=[ones(size(T)),exp(-T)]*c;
y2=[ones(size(T)),T.*exp(-T)]*d;
plot(T,y1,T,y2,t,y,'*'),
legend('y1(t)= C1+C2*exp(-t)','y2(t)= d1+d2*t*exp(-t)')
c =3.16215.1961
d =3.0039
5.0046
由程序结果可知衰减曲线的表达式:y1=3.1621+5.1961exp(-t);y2=3.0039+5.0046t*exp(-t);
分析:从图中可以看出,曲线y2更加准确,与各点的误差较小
3.从某一个过程中通过测量得到:
t | 0 | 0.2 | 0.4 | 0.6 | 0.8 | 1.0 | 2.0 | 5.0 |
---|---|---|---|---|---|---|---|---|
y | 1.0 | 1.51 | 1.88 | 2.13 | 2.29 | 2.40 | 2.60 | -4.00 |
分别采用多项式和指数函数进行曲线拟合。
答:采用三次多项式拟合以及指数函数y1=c1+c2*exp(-t)拟合,具体程序如下:
>> x=[0,0.2,0.4,0.6,0.8,1.0,2.0,5.0];
y=[1.0,1.51,1.88,2.13,2.29,2.40,2.60,-4.00];
p=polyfit(x,y,3) %三次多项式拟合
xx=0:0.1:8;
yy=polyval(p,xx);
x1=[ones(size(x')),exp(-x')]; %指数函数拟合
c=x1\y'
T=(0:0.1:10)';
y1=[ones(size(T)),exp(-T)]*c;
plot(xx,yy,T,y1,x,y,'*')
legend('三次多项式拟合','指数函数y1=c1+c2*exp(-t)拟合')
p =0.0190 -0.7217 2.1198 1.0712
c =-0.0565
2.5674
分析:从图中可以看出,三次多项式拟合更加准确,与各点的误差较小,而指数函数拟合误差很大,不适合该题
4.对应时间矢量t,测得一组矢量y
t | 0 | 0.3 | 0.8 | 1.1 | 1.6 | 2.3 |
---|---|---|---|---|---|---|
y | 0.5 | 0.82 | 1.14 | 1.25 | 1.35 | 1.40 |
采用一个带有线性参数的指数函数进行拟合,y=a0+a1exp(-t)+a2t*exp(-t),利用回归方法求出拟合函数,并画出拟合曲线,已知点用圆点表示。
答:
>> x=[0,0.3,0.8,1.1,1.6,2.3]';
y=[0.5,0.82,1.14,1.25,1.35,1.40]';
x1=[ones(size(x)),exp(-x),x.*exp(-x)];
c=x1\y
T=(0:0.1:5)';
y1=[ones(size(T)),exp(-T),T.*exp(-T)]*c;
plot(T,y1,x,y,'o')
c =1.3974-0.89880.4097
由程序结果可知曲线的表达式:y=1.3974-0.8988exp(-t)+ 0.4097t*exp(-t)
5.某钢材厂从1990年到2010年的产量如下表所示,请利用三次样条插值的方法计算1999年该钢材厂的产量,并画出曲线,已知数据用星号表示。要求写出达到题目要求的MATLAB操作过程,不要去计算结果。
年份 | 1990 | 1992 | 1994 | 1996 | 1998 | 2000 | 2002 | 2004 | 2006 | 2008 | 2010 |
---|---|---|---|---|---|---|---|---|---|---|---|
产量(万吨) | 75.99 | 91.97 | 105.71 | 123.20 | 131.66 | 150.69 | 179.32 | 203.21 | 226.50 | 249.63 | 256.34 |
答:
>> x=1990:2:2010;
y=[75.95,91.97,105.71,123.20,131.66,150.69,179.32,203.21,226.21,249.63,256.34];
x1=1990:0.01:2020;
y1=interp1(x,y,x1,'spline');
plot(x1,y1,x,y,'*')
y1=interp1(x,y,1999,'spline')
y1 =139.2732
四、实践中遇到的问题及解决方法
1.问题:以上面第三题为例,多项式和指数函数进行曲线拟合时数组x和y分不清什么时候转置?
解决办法:其中多项式拟合多为非转置,而指数函数拟合多为数组转置x’和y’。
2.问题:回归法曲线拟合步骤的原理我开始一直不懂是为什么?
解决办法:我询问了一下同学,明白了其实是利用解方程的原理来求解曲线式中未知的参数,其中ones(size(x))对应的是1。
3.问题:有这麽一道题:数据具有y=x^2的变化趋势,用最小二乘法 求解y并画图。开始我以为只能用曲线拟合的方法做。
解决办法:后来我明白了最小二乘解的求取方法同样适用于多项式模型,直接用多项式拟合求解即可。