scatteredInterpolant function is providing too much noise in interpolation
2 次查看(过去 30 天)
显示 更早的评论
Hello there.
I have a function V = f(X,Y). Where the mesh on X,Y is non uniform and its boundaries aren't rectangular. I am trying to use scatteredinterpolant function to evaluate Vq = f(Xq, Yq), but MATLAB always provide a lot of noise in the interpolated results, and I am not able to identify the reason.
Please refer to the attached data file for the numerical values of the variables (X,Y,V,Xq,Yq). I am using the following code,
clc
clear
load('Interpolation.mat')
surf(X,Y,V)
h=gca;
xlabel ('X');ylabel ('Y');
zlabel ('V');
set(h,'xscale','log')
F = scatteredInterpolant(X(:),Y(:),V(:));
Vq = F(Xq,Yq);
surf(Xq,Yq,Vq)
h=gca;
xlabel ('Xq');ylabel ('Yq');
zlabel ('Vq');
set(h,'xscale','log')
Can anyone tell what is the reason and how can I fix the noise in the results?
Thanks and best,
Ahmad
0 个评论
采纳的回答
Bruno Luong
2022-8-7
The problem raises from the fact that scatteredInterpolant use Delaunay triangulation, meaning that X and Y are assumed to have the same unit.
In your case not only they do not have the proper normalization, but it seems X is log scale.
To fix it, you have to transform your variables:
load('Interpolation.mat');
ScaleLogX = 10;
ScaleY = 2000000;
F = scatteredInterpolant(log(X(:))/ScaleLogX,Y(:)/ScaleY,V(:));
Vq = F(log(Xq)/ScaleLogX,Yq/ScaleY);
surf(Xq,Yq,Vq)
h=gca;
xlabel ('Xq');ylabel ('Yq');
zlabel ('Vq');
set(h,'xscale','log')
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!