插值
一维插值函数
类似于拟合
网格插值函数
数据是网格数据
数据长度:x=a y=b z=a*b
散点插值函数
数据是散点数据
数据长度:x=y=z
interp2与griddata区别
二者均是常用的二维差值方法,两者的区别是
interp2的插值数据必须是矩形域,即已知数据点(x,y)组成规则的矩阵,或称之为栅格,可使用meshgid生成。
而griddata函数的已知数据点(X,Y)不要求规则排列,特别是对试验中随机没有规律采取的数据进行插值具有很好的效果。
X和Y提供的已知数据点,XI和YI是需要插值的数据点,一般使用meshgrid生成,当然也可以其他数据,但是那样绘图的时候就比较麻烦,不能使用mesh等,只能使用trimesh。
应用
-
将离散数据转为连续数值
-
计算各时间流量
- 插值拟合计算时间与流量关系函数
- 对函数随时间的积分得到流量
-
-
一般都选取三次样条插值法,有能力也可进行论文查找选取符合题目的插值方法
代码实现
%一维插值函数
x=(0.1:1:5);
y=1./x;
X=(0.1:0.01:5);
Y=interp1(x,y,X,'cubic');
plot(X,Y);
hold on;
plot(x,y,'+');
axis([0 20 0 20])
%网格插值函数
x=1200:400:4800;
y=1200:400:4800;
z=[1130 1250 1280 1230 1040 900 500 700 780 750;
1320 1450 1420 1400 1300 700 900 850 840 380;
1390 1500 1500 1400 900 1100 1060 950 870 900;
1500 1200 1100 1350 1450 1200 1150 1010 880 1000;
1500 1200 1100 1550 1600 1550 1380 1070 900 1050;
1500 1550 1600 1550 1600 1600 1600 1550 1500 1500;
1480 1500 1550 1510 1430 1300 1200 980 850 750;
1450 1470 1320 1280 1200 1080 940 780 620 460;
1430 1440 1140 1110 1050 950 820 690 540 380;
1400 1410 960 940 880 800 690 570 430 290];
X=(1200:40:4800);
Y=(1200:40:4800);
Z1=interp2(x,y,z,X,Y','cubic');
mesh(X,Y,Z1);
%散点插值函数
x=[129 140 103.5 88 185.5 195 105 157.5 107.5 77 81 162 162 117.5];
y=[7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5];
z=[ 4 8 6 8 6 8 8 9 9 8 8 9 4 9];
[cx,cy]=meshgrid(75:5:200,-90:5:150); %生成的x数量=y的数量
Z1=griddata(x,y,z,cx,cy,'cubic');
mesh(cx,cy,Z1);
##也可用app