|
汽车零部件采购、销售通信录 填写你的培训需求,我们帮你找 招募汽车专业培训老师
在做仿真实验的过程中,我们有时需要连续的数据作为实验测试的基本条件,或者是某一特定点的数据,而往往我们只能得到一系列离散的数据,于是“插值拟合”在数据处理的过程中起到十分重要的作用
今天我便来学习什么是插值、拟合,并如何在MATLAB软件中使用它们
相同点:
插值拟合都是根据某个未知函数(或已知但难于求解的函数)的几个已知数据点求出变化规律和特征相似的近似曲线的过程。
不同点:插值:需要完全经过真实测得的数据点
拟合:是得到最接近真实数据的结果,强调最小方差的概念。
接下来我们便一起通过下面的例子来说明如何使用“插值和拟合”来处理数据
已知某发动机试验测试的转矩特性为:
转速
n
r/min
|
1
0
0
0
|
1
5
0
0
|
2
0
0
0
|
2
5
0
0
|
3
0
0
0
|
3
5
0
0
|
3
8
0
0
|
4
0
0
0
|
转矩
Ttq
(Nm)
|
1
3
5
|
1
4
7
|
1
5
2
|
1
5
6
|
1
4
7
|
1
3
8
|
1
3
3
|
1
2
5
| (1)利用拟合方法绘制发动机转矩与转速之间的关系曲线
(2)分别利用拟合与插值的方法计算发动机转速在800r/min与3200r/min时的转矩;并进行比较
%原始数据n0=[1000 1500 2000 2500 3000 3500 3800 4000];Ttq0=[135 147 152 156 147 138 133 125];
%方法一:用cftool工具箱cftool
输入“cftool”命令打开拟合工具箱
界面如下:
选择数据,将n0、Ttq0分别导入x、y坐标轴
选择“多项式”的拟合类型以及自动模式
修改多项式次数,发现四次多项式拟合最佳,故次数选择4
勾选“中心化并缩放”,解决报错
“导出”-“生成代码”,并保存到相同文件路径中,默认名字为“createFit”
我们便可以在脚本中调用该“createFit”函数,得到发动机转矩与转速的拟合曲线[fitresult, gof]=createFit(n0,Ttq0);于是可以通过输入横坐标的值给输出结果“fitresult”(“createFit”函数将拟合的纵坐标结果赋给fitresult),得到我们需要的对应值n2=[8003200];y=fitresult(n2)结果为:
如果我们不使用“cftool”工具箱,又该如何编码得到拟合值呢?%方法二:使用“polyfit”和“polyval”函数
[p,~,mu]=polyfit(n0,Ttq0,4);% 4为最佳阶数,中心化并缩放问题大家参考polyfit函数的helpn=min(n0):max(n0);Ttq=polyval(p,n,[],mu);%绘制图像plot(n,Ttq);hold on% 后面还有插值的结果曲线,为作比较,将拟合结果和插值结果放在一个Figure里xlabel('speed(r/min)')ylabel('Torque(Nm)')
得到结果:
n2=[8003200];% 带入输入值Ttq2_poly=polyval(p,n2,[],mu)
拟合结果:
插值方法
?
%方法三:(之前的代码保留)利用一维数据插值函数“interp1”Ttq2_interp=interp1(n0,Ttq0,n2,'spline')
%用'o'表示原数据点,另外一条曲线则为插值结果plot(n0,Ttq0,'o',n,interp1(n0,Ttq0,n,'spline'))legend('fit','raw data','interp');% 拟合、原数据、插值最终比较结果为:
拟合和插值来处理数据的方法你学会了么
|
|