How do I fit a surface to this data properly?

조회 수: 3(최근 30일)
Pablo Fernandez
Pablo Fernandez 2021년 9월 16일
댓글: Pablo Fernandez 2021년 9월 19일
Hi,
I have a set of datapoints (x,y,z) to which I want to fit a surface. I dont have a mathematical expression for the surface, so I tried to use the linear interpolation as in:
load ('data.mat')
PTSGRID = 256;
xs = min(x):(max(x)-min(x))/(PTSGRID-1):max(x);
ys = min(y):(max(y)-min(y))/(PTSGRID-1):max(y);
[xq, yq] = meshgrid(xs,ys);
zq = griddata(x,y,z,xq,yq,'linear');
plot3(x,y,z,'mo')
hold on
mesh(xq,yq,zq);
However the fitted surface takes very strange values where there is no data defined, very different from what I would visually expect. Take a look for example at this figure, and the zone I circled:
How can I fit in a better way to avoid this behavior?
Thanks!
  댓글 수: 2
Pablo Fernandez
Pablo Fernandez 2021년 9월 17일
Attached to the original post!

댓글을 달려면 로그인하십시오.

답변(2개)

KSSV
KSSV 2021년 9월 16일
  댓글 수: 3
Pablo Fernandez
Pablo Fernandez 2021년 9월 16일
Yes, I understand.
The specific point in my questions is how to get rid of the artifacts that appear when I try to interpolate the points in my dataset.

댓글을 달려면 로그인하십시오.


darova
darova 2021년 9월 19일
I don't have this problem
s = load('data.mat');
x = s.x;
y = s.y;
z = s.z;
xx = linspace(min(x),max(x),20);
yy = linspace(min(y),max(y),20);
[x1,y1] = meshgrid(xx,yy);
z1 = griddata(x,y,z,x1,y1);
Warning: Duplicate data points have been detected and removed - corresponding values have been averaged.
mesh(x1,y1,z1)
  댓글 수: 1
Pablo Fernandez
Pablo Fernandez 2021년 9월 19일
Hi, thanks for the answer.
You are not seing the effect in that plot because you are evaluating the interpolation in few points. The reason for the interpolation is to evaluate between the data lines. Try changing 20 for 256 in xx and yy definitions and you will notice the effect when plotting.
Regards

댓글을 달려면 로그인하십시오.

태그

제품


릴리스

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by