Griddata 在 Matlab 中有不需要的插值
Griddata has unwanted interpolation in Matlab
我正在尝试在 MATLAB 中将数据从一个网格插入到另一个网格。第一个网格在 y
中间隔不均匀,而第二个则不是。当我执行插值时(使用 griddata
),结果会在不存在数据的区域进行推断。
这是代码,以及插值前后的图。
输入变量:
Xin2 = [619000 619000 619000 619000 619000 619000
621000 621000 621000 621000 621000 621000
623000 623000 623000 623000 623000 623000
625000 625000 625000 625000 625000 625000
627000 627000 627000 627000 627000 627000
629000 629000 629000 629000 629000 629000
631000 631000 631000 631000 631000 631000
633000 633000 633000 633000 633000 633000
635000 635000 635000 635000 635000 635000
637000 637000 637000 637000 637000 637000
639000 639000 639000 639000 639000 639000
641000 641000 641000 641000 641000 641000
643000 643000 643000 643000 643000 643000
645000 645000 645000 645000 645000 645000
647000 647000 647000 647000 647000 647000
649000 649000 649000 649000 649000 649000
651000 651000 651000 651000 651000 651000
653000 653000 653000 653000 653000 653000
655000 655000 655000 655000 655000 655000
657000 657000 657000 657000 657000 657000
659000 659000 659000 659000 659000 659000];
Yin2 = [-688.38 -626.71 -568.39 -514.5 -465.64 -422.03
-688.36 -626.64 -568.28 -514.35 -465.46 -421.82
-688.32 -626.51 -568.07 -514.06 -465.1 -421.4
-688.25 -626.31 -567.74 -513.61 -464.54 -420.75
-688.2 -626.18 -567.53 -513.33 -464.19 -420.34
-688.19 -626.13 -567.45 -513.23 -464.06 -420.19
-688.14 -625.99 -567.22 -512.91 -463.67 -419.73
-688.06 -625.74 -566.82 -512.37 -463.01 -418.95
-688.01 -625.6 -566.59 -512.06 -462.61 -418.49
-688 -625.57 -566.54 -511.99 -462.53 -418.4
-687.13 -623.02 -562.4 -506.38 -455.59 -410.27
-677.94 -595.9 -518.32 -446.64 -381.64 -323.64
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3];
Tempin2 = [0.74399 0.734 0.71456 0.68519 0.64358 0.58546
0.7444 0.73442 0.71505 0.68578 0.64421 0.58598
0.7446 0.73456 0.71517 0.68589 0.64428 0.58594
0.74389 0.7338 0.71437 0.68505 0.64341 0.58507
0.74176 0.73172 0.71234 0.68311 0.64166 0.58365
0.73842 0.72847 0.70929 0.68033 0.63925 0.58175
0.73554 0.72561 0.70641 0.67755 0.63666 0.57929
0.73602 0.72568 0.70602 0.67671 0.63529 0.57718
0.74297 0.73128 0.7101 0.67944 0.63682 0.57729
0.75596 0.74156 0.71799 0.68532 0.6408 0.57963
0.77081 0.75286 0.72441 0.68681 0.63783 0.57257
0.77558 0.74655 0.7048 0.65198 0.58381 0.49389
0.76412 0.73625 0.69626 0.6459 0.57968 0.49109
0.7519 0.72508 0.68915 0.64346 0.58165 0.49733
0.74398 0.72001 0.68661 0.64361 0.58471 0.50343
0.7387 0.718 0.68708 0.64565 0.58851 0.50948
0.73546 0.71749 0.68821 0.64767 0.59183 0.51471
0.73255 0.71626 0.68831 0.64861 0.59397 0.51842
0.72843 0.71274 0.68603 0.64778 0.5947 0.52053
0.72166 0.7065 0.68148 0.64538 0.59429 0.52148
0.71285 0.69917 0.67631 0.64259 0.59351 0.52205];
%And the code to make the interpolation variables and run the interpolation:
[X_i,Y_i]=meshgrid([Xin2(:,1)],[-700:5:-315]);
Temp_i=griddata(Xin2,Yin2,Tempin2,X_i,Y_i);
figure,pcolor(Xin2,Yin2,Tempin2), shading flat % original data
figure,pcolor(X_i,Y_i,Temp_i),shading flat %interpolated data
之前:
之后:
谁能解释外推数据的深蓝色三角形(从大约 (6.4e5,-325) 到 (6.2e5,-425) 的对角线连接),我该如何阻止它?
注意,我忘记为两个地块保持相同的 caxis;这对于说明不需要的插值发生在哪里并不重要。
发生这种情况是因为 griddata
根据定义不会外推, 但是 插值大致基于数据的凸包。如果您查看具有数据的输入值,凸包看起来与第二张图片中显示的结果相似。
这与对scatteredInterpolant
使用none
外推法是一样的。
No extrapolation. Any queries outside the convex hull of F.Points return NaN.
这里我显示了你的输入(Xin2
和 Yin2
)的黑色凸包(convhull
)叠加在你的插值结果上。
K = convhull(Xin2, Yin2);
plot(Xin2(K), Yin2(K))
就如何防止这种情况而言,您只能在您知道在初始数据集边界内的点进行查询。至于 如何 做到这一点,您需要创建一些初始数据的轮廓并使用 inpolygon
测试每个查询点,然后只传递查询点 ( X_i
和 Y_i
) 在此大纲内到 griddata
.
要获得此大纲,您可以使用 gptoolbox
中的 ordered_outline
之类的东西。
我正在尝试在 MATLAB 中将数据从一个网格插入到另一个网格。第一个网格在 y
中间隔不均匀,而第二个则不是。当我执行插值时(使用 griddata
),结果会在不存在数据的区域进行推断。
这是代码,以及插值前后的图。
输入变量:
Xin2 = [619000 619000 619000 619000 619000 619000
621000 621000 621000 621000 621000 621000
623000 623000 623000 623000 623000 623000
625000 625000 625000 625000 625000 625000
627000 627000 627000 627000 627000 627000
629000 629000 629000 629000 629000 629000
631000 631000 631000 631000 631000 631000
633000 633000 633000 633000 633000 633000
635000 635000 635000 635000 635000 635000
637000 637000 637000 637000 637000 637000
639000 639000 639000 639000 639000 639000
641000 641000 641000 641000 641000 641000
643000 643000 643000 643000 643000 643000
645000 645000 645000 645000 645000 645000
647000 647000 647000 647000 647000 647000
649000 649000 649000 649000 649000 649000
651000 651000 651000 651000 651000 651000
653000 653000 653000 653000 653000 653000
655000 655000 655000 655000 655000 655000
657000 657000 657000 657000 657000 657000
659000 659000 659000 659000 659000 659000];
Yin2 = [-688.38 -626.71 -568.39 -514.5 -465.64 -422.03
-688.36 -626.64 -568.28 -514.35 -465.46 -421.82
-688.32 -626.51 -568.07 -514.06 -465.1 -421.4
-688.25 -626.31 -567.74 -513.61 -464.54 -420.75
-688.2 -626.18 -567.53 -513.33 -464.19 -420.34
-688.19 -626.13 -567.45 -513.23 -464.06 -420.19
-688.14 -625.99 -567.22 -512.91 -463.67 -419.73
-688.06 -625.74 -566.82 -512.37 -463.01 -418.95
-688.01 -625.6 -566.59 -512.06 -462.61 -418.49
-688 -625.57 -566.54 -511.99 -462.53 -418.4
-687.13 -623.02 -562.4 -506.38 -455.59 -410.27
-677.94 -595.9 -518.32 -446.64 -381.64 -323.64
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3
-677.06 -593.29 -514.08 -440.89 -374.52 -315.3];
Tempin2 = [0.74399 0.734 0.71456 0.68519 0.64358 0.58546
0.7444 0.73442 0.71505 0.68578 0.64421 0.58598
0.7446 0.73456 0.71517 0.68589 0.64428 0.58594
0.74389 0.7338 0.71437 0.68505 0.64341 0.58507
0.74176 0.73172 0.71234 0.68311 0.64166 0.58365
0.73842 0.72847 0.70929 0.68033 0.63925 0.58175
0.73554 0.72561 0.70641 0.67755 0.63666 0.57929
0.73602 0.72568 0.70602 0.67671 0.63529 0.57718
0.74297 0.73128 0.7101 0.67944 0.63682 0.57729
0.75596 0.74156 0.71799 0.68532 0.6408 0.57963
0.77081 0.75286 0.72441 0.68681 0.63783 0.57257
0.77558 0.74655 0.7048 0.65198 0.58381 0.49389
0.76412 0.73625 0.69626 0.6459 0.57968 0.49109
0.7519 0.72508 0.68915 0.64346 0.58165 0.49733
0.74398 0.72001 0.68661 0.64361 0.58471 0.50343
0.7387 0.718 0.68708 0.64565 0.58851 0.50948
0.73546 0.71749 0.68821 0.64767 0.59183 0.51471
0.73255 0.71626 0.68831 0.64861 0.59397 0.51842
0.72843 0.71274 0.68603 0.64778 0.5947 0.52053
0.72166 0.7065 0.68148 0.64538 0.59429 0.52148
0.71285 0.69917 0.67631 0.64259 0.59351 0.52205];
%And the code to make the interpolation variables and run the interpolation:
[X_i,Y_i]=meshgrid([Xin2(:,1)],[-700:5:-315]);
Temp_i=griddata(Xin2,Yin2,Tempin2,X_i,Y_i);
figure,pcolor(Xin2,Yin2,Tempin2), shading flat % original data
figure,pcolor(X_i,Y_i,Temp_i),shading flat %interpolated data
之前:
之后:
谁能解释外推数据的深蓝色三角形(从大约 (6.4e5,-325) 到 (6.2e5,-425) 的对角线连接),我该如何阻止它?
注意,我忘记为两个地块保持相同的 caxis;这对于说明不需要的插值发生在哪里并不重要。
发生这种情况是因为 griddata
根据定义不会外推, 但是 插值大致基于数据的凸包。如果您查看具有数据的输入值,凸包看起来与第二张图片中显示的结果相似。
这与对scatteredInterpolant
使用none
外推法是一样的。
No extrapolation. Any queries outside the convex hull of F.Points return NaN.
这里我显示了你的输入(Xin2
和 Yin2
)的黑色凸包(convhull
)叠加在你的插值结果上。
K = convhull(Xin2, Yin2);
plot(Xin2(K), Yin2(K))
就如何防止这种情况而言,您只能在您知道在初始数据集边界内的点进行查询。至于 如何 做到这一点,您需要创建一些初始数据的轮廓并使用 inpolygon
测试每个查询点,然后只传递查询点 ( X_i
和 Y_i
) 在此大纲内到 griddata
.
要获得此大纲,您可以使用 gptoolbox
中的 ordered_outline
之类的东西。