多项式拟合
拟合又称曲线逼近,不要求一定过数据点
指令拟合
X = [1:9];
Y = [9,7,6,3,-1,2,5,7,20]; //对X/Y数据进行拟合
FitPoly = polyfit(X,Y,5); //对数据点进行5次多项式拟合,返回值是拟合函数
NewX = linspace(0,9); //产生0~9线性等间距的100个数据
NewY = polyval(FitPoly,NewX);//计算拟合函数在自变量NewX对应的函数值
figure('name','Data Curve Fitting','NumberTitle','off');//定义窗口名和关掉Title等信息
plot(X,Y,'o',NewX,NewY);
图形操作拟合
X = [1:9];
Y = [9,7,6,3,-1,2,5,7,20]; //对X/Y数据进行拟合
plot(X,Y,'o');
图形界面->“工具”->“基本拟合”
然后就可以选择拟合曲线阶次等信息
自定义函数拟合
clc;clear;
syms t; //定义符号变量t
x = [0,0.4,1.2,2,2.8,3.6,4.4,5.2,6,7.2,8,9.2,10.4,11.6,12.4,13.6,14.4,15];
x = x'; //fit函数要求x,y必须为列向量
y = [1,0.85,0.29,-0.27,-0.53,-0.4,-0.12,0.17,0.28,0.15,-0.03,-0.15,-0.071,0.059,0.08,0.032,-0.015,-0.02];
y = y';
f = fittype('a*cos(k*t)*exp(w*t)','independent','t','coefficients',{'a','k','w'}); //生成一个fittype,fit函数第3个参数是fittype类型
cfun = fit(x,y,f); //拟合曲线,包含了系数大小
NewX = [0:0.1:20];
NewY = cfun(NewX);
plot(x,y,'o',NewX,NewY);
曲线拟合工具箱cftool
打开方法:command输入cftool
—————————————————————————————————————————————————
插值
插值与拟合的区别
插值曲线要过数据点,拟合曲线整体效果更好
插值实例
x,y方向均为1~10
clc;clear
[x,y] = meshgrid(1:10); //生成测量网格,x,y方向均为1~10,x与y均为10x10矩阵
AltitudeData = [0,0.02,-0.12,0,-2.09,0,-0.58,-0.08,0,0;
0.02,0,0,-2.38,0,-4.96,0,0,0,-0.1;
0,0.1,1,0,-3.04,0,-0.53,0,0.1,0;
0,0,0,3.52,0,0,0,0,0,0;
-0.43,-1.98,0,0,0,0.77,0,2.17,0,0;
0,0,-2.29,0,0.69,0,2.59,0,0.3,0;
-0.09,-0.31,0,0,0,4.27,0,0,0,-0.01;
0,0,0,5.13,7.4,0,1.89,0,0.04,0;
0.1,0,0.58,0,0,1.75,0,-0.11,0,0;
0,-0.01,0,0,0.3,0,0,0,0,0.01;]
[xi,yi] = meshgrid(1:0.1:10); //查询点的测量网格
iAltitudeData = interp2(x,y,AltitudeData,xi,yi,'spline'); //插值(x,y,AltitudeData)是样本点的数据,xi,yi是测量点数据
surf(xi,yi,iAltitudeData); //绘制三维曲面图
xlabel('x'),ylabel('y');zlabel('h');