【问题标题】:Griddata has unwanted interpolation in MatlabGriddata 在 Matlab 中有不需要的插值
【发布时间】:2016-05-03 22:29:25
【问题描述】:

我正在尝试在 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;这对于说明不需要的插值发生的位置无关紧要。

【问题讨论】:

    标签: matlab interpolation extrapolation


    【解决方案1】:

    发生这种情况是因为 griddata 根据定义不会外推,内插大致基于数据的凸包。如果您查看具有数据的输入值,凸包看起来与第二张图片中显示的结果相似。

    这与对scatteredInterpolant 使用none 外推法相同。

    没有外推。 F.Points 的凸包之外的任何查询都返回 NaN。

    在这里,我展示了叠加在插值结果上的输入(Xin2Yin2)的黑色凸包(convhull)。

    K = convhull(Xin2, Yin2);
    plot(Xin2(K), Yin2(K))
    

    至于如何防止这种情况,您只能在您知道位于初始数据集边界内的点进行查询。至于如何这样做,您需要创建一些初始数据的大纲并使用inpolygon 测试每个查询点,然后只通过查询点(X_i 和 @此大纲内的 987654333@) 到 griddata

    要获得此大纲,您可以使用 gptoolbox 中的 ordered_outline 之类的内容。

    【讨论】:

    • 谢谢@Suever。我最终按照您的建议使用了 inpolygon,并掩盖了凸包内但在原始数据边界之外的区域。
    猜你喜欢
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2020-08-19
    相关资源
    最近更新 更多