Matlab曲面擬合和插值


插值和擬合都是數據優化的一種方法,當實驗數據不夠多時常常須要用到這樣的方法來繪圖。

matlab中都有特定的函數來完畢這些功能。

 

這兩種方法的確別在於:

當測量值是准確的,沒有誤差時,一般用插值;

當測量值與真實值有誤差時。一般用數據擬合。

 

插值:

對於一維曲線的插值,一般用到的函數yi=interp1(X,Y,xi,method) 。當中method包含nearstlinearsplinecubic

對於二維曲面的插值,一般用到的函數zi=interp2(X,Y,Z,xi,yi,method)。當中method也和上面一樣,經常使用的是cubic

 

擬合:

對於一維曲線的擬合,一般用到的函數p=polyfit(x,y,n)yi=polyval(p,xi)。這個是最經常使用的最小二乘法的擬合方法。

對於二維曲面的擬合,有非常多方法能夠實現。可是我這里自己用的是Spline Toolbox里面的函數功能。詳細用法能夠看后面的樣例。

 

對於一維曲線的插值和擬合相對照較簡單。這里就不多說了。對於二維曲面的插值和擬合還是比較有意思的。

總結歸納一下給出實例和解說。

 %第一給樣例

clc;clear;clf;
%原始數據的定義
x=[1:1:12];
y=[1:1:5];
%z是一個5乘12的矩陣。


z=[0.2 0.24 0.25 0.26 0.25 0.25 0.25 0.26 0.26 0.29 0.25 0.29;
0.27 0.31 0.3 0.3 0.26 0.28 0.29 0.26 0.26 0.26 0.26 0.29;
0.41 0.41 0.37 0.37 0.38 0.35 0.34 0.35 0.35 0.34 0.35 0.35;
0.41 0.42 0.42 0.41 0.4 0.39 0.39 0.38 0.36 0.36 0.36 0.36;
0.3 0.36 0.4 0.43 0.45 0.45 0.51 0.42 0.4 0.37 0.37 0.37];
%直接用原始數據繪圖例如以下:
%surf三維表面圖
surf(x,y,z);
title('Original data Plot');
xlabel('X'), ylabel('Y'), zlabel('Z'),
%對X,Y,Z軸范圍的控制
axis([0 15 0 6 0.2 0.55]);

%第二給樣例

clc;clear;clf;

%原始數據的定義

x=[1:1:12];

y=[1:1:5];

%z是一個512的矩陣。

z=[0.2 0.24 0.25 0.26 0.25 0.25 0.25 0.26 0.26 0.29 0.25 0.29;

0.27 0.31 0.3 0.3 0.26 0.28 0.29 0.26 0.26 0.26 0.26 0.29;

0.41 0.41 0.37 0.37 0.38 0.35 0.34 0.35 0.35 0.34 0.35 0.35;

0.41 0.42 0.42 0.41 0.4 0.39 0.39 0.38 0.36 0.36 0.36 0.36;

0.3 0.36 0.4 0.43 0.45 0.45 0.51 0.42 0.4 0.37 0.37 0.37];

%先考慮插值,須要用到的函數interp2

x1=1:0.2:12;

y1=1:0.2:5;

[x2,y2]=meshgrid(x1,y1);

t11=interp2(x,y,z,x2,y2,'cubic');

surf(x1,y1,t11);

title('After Fit data Plot');

xlabel('X'), ylabel('Y'), zlabel('Z'),

%X,Y,Z軸范圍的控制

axis([0 15 0 6 0.2 0.55]);
 

 

%第三個樣例

x = rand(100,1)*16 - 8;

y = rand(100,1)*16 - 8;

r = sqrt(x.^2 + y.^2) + eps;

z = sin(r)./r;

 

xlin = linspace(min(x),max(x),33);

ylin = linspace(min(y),max(y),33);

[X,Y] = meshgrid(xlin,ylin);

 

Z = griddata(x,y,z,X,Y,'cubic');

 

mesh(X,Y,Z) %interpolated

axis tight; hold on

plot3(x,y,z,'.','MarkerSize',15) %nonuniform

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM