MATLAB中的三维海洋温度插值

MATLAB中的三维海洋温度插值,matlab,interpolation,temperature,ocean,Matlab,Interpolation,Temperature,Ocean,我正在执行自主水下航行器任务,这些任务给了我纬度、长度、深度和温度数据,我正试图用这些数据创建3D插值。我能够创建环境的三维模型,但我试图让颜色填充成为每个相关位置的插值温度 下图是我得到的3d深度图,我希望填充颜色是这些位置的温度: 我尝试过使用colormap,其中surf(X,Y,Z,C)和C是温度数据,但这不起作用 这就是我的代码,其中VPSA是我的数据集,X=经度,y=纬度,Z=深度,C=温度 %Making Variables: X = VPSA {:,1}; Y = VPSA {:

我正在执行自主水下航行器任务,这些任务给了我纬度、长度、深度和温度数据,我正试图用这些数据创建3D插值。我能够创建环境的三维模型,但我试图让颜色填充成为每个相关位置的插值温度

下图是我得到的3d深度图,我希望填充颜色是这些位置的温度:

我尝试过使用colormap,其中surf(X,Y,Z,C)和C是温度数据,但这不起作用

这就是我的代码,其中VPSA是我的数据集,X=经度,y=纬度,Z=深度,C=温度

%Making Variables:
X = VPSA {:,1};
Y = VPSA {:,2};
Z = VPSA {:,3};
C = VPSA {:,4};

%Three axis plot
%Plotting Variable with coordinates
xi = linspace(min(X),max(X),1000);
yi = linspace(min(Y),max(Y),1000);

[Xi,Yi] = meshgrid(xi,yi);
Zi = griddata(X,Y,Z, Xi,Yi);
mesh (Xi,Yi,-Zi)
    xlabel('Latitude')
    ylabel('Longitude')
    zlabel('Depth') 
更新:我添加了以下代码行

Ci = griddata(X,Y,C,Xi,Yi);
mesh(Xi,Yi,-Zi,Ci)
 
为了得到下图,但是很难判断到底发生了什么,我想知道是否有一种方法可以将插值平滑到一个长方体中,这样它就不会像锯齿一样


谢谢

我假设原始的
X,Y,Z,C
数据点匹配,您可以使用命令
mesh(X,Y,Z,C)
获得可用的绘图。现在,您希望使用插值数据集执行相同的操作

在这种情况下,只需为
mesh
命令a提供颜色数据
C

C
也需要插值,因此可能类似于:

Ci = griddata(X,Y,C,Xi,Yi); % Interpolate C the same way you did for Z
mesh(Xi,Yi,-Zi,Ci)

编辑:为之前的错误回答道歉。

我假设原始的
X,Y,Z,C
数据点匹配,您可以使用命令
mesh(X,Y,Z,C)
获得可用的绘图。现在,您希望使用插值数据集执行相同的操作

在这种情况下,只需为
mesh
命令a提供颜色数据
C

C
也需要插值,因此可能类似于:

Ci = griddata(X,Y,C,Xi,Yi); % Interpolate C the same way you did for Z
mesh(Xi,Yi,-Zi,Ci)

编辑:对前面的错误回答表示歉意。

很难确切知道“不工作”是什么意思,或者温度矩阵C的性质是什么,但C的规格如下:

  • 与Z的大小相同(更具体地说,Z中的每个元素对应于位于相同位置的C的每个元素)
  • C中的每个元素都是一个整数,对应于当前颜色映射中的一个位置。(这意味着如果更新颜色贴图,曲面图将相应更新)
  • 打印后,可以通过曲面打印的
    cdata
    属性检查/更改整数
  • 您可能需要更改绘图是将颜色贴图视为缩放还是直接(即CDATA贴图)。查看对象的属性以了解

    • 很难确切知道“不工作”是什么意思,或者温度矩阵C的性质是什么,但C的规格如下:

      • 与Z的大小相同(更具体地说,Z中的每个元素对应于位于相同位置的C的每个元素)
      • C中的每个元素都是一个整数,对应于当前颜色映射中的一个位置。(这意味着如果更新颜色贴图,曲面图将相应更新)
      • 打印后,可以通过曲面打印的
        cdata
        属性检查/更改整数
      • 您可能需要更改绘图是将颜色贴图视为缩放还是直接(即CDATA贴图)。查看对象的属性以了解

      谢谢!将温度数据添加到与Z相同的矩阵中,然后对其进行网格化,这一切对我来说都很好!你知道有没有办法使插值平滑,这样插值就不会像锯齿一样了吗?我会用更新后的数字编辑我的原始帖子,这样你就能明白我的意思了。非常感谢你!函数
      griddata
      提供了几种不同的插值方法。使用的默认方法是线性插值,因此是锯齿状特征;其他可能给出“更平滑”结果的方法是自然近邻
      griddata(…,'natural')
      ,以及立方插值
      griddata(…,'cubic')
      。您必须决定这些是否适用于您的用例。除此之外,您还必须考虑其他选项,例如取插值数据集的平均值等。是否有一种方法可以插入到定义的多维数据集中?而不是在griddata函数中使用平滑因子?不幸的是,我不知道有任何MATLAB函数允许您使用自定义插值方法。下面是MathWorks提供的插值方法的示例。我认为最接近你想要的是函数,它允许你创建任意次数的分段多项式函数。不过你得想办法用它来做插值函数,谢谢!将温度数据添加到与Z相同的矩阵中,然后对其进行网格化,这一切对我来说都很好!你知道有没有办法使插值平滑,这样插值就不会像锯齿一样了吗?我会用更新后的数字编辑我的原始帖子,这样你就能明白我的意思了。非常感谢你!函数
      griddata
      提供了几种不同的插值方法。使用的默认方法是线性插值,因此是锯齿状特征;其他可能给出“更平滑”结果的方法是自然近邻
      griddata(…,'natural')
      ,以及立方插值
      griddata(…,'cubic')
      。您必须决定这些是否适用于您的用例。除此之外,您还必须考虑其他选项,例如取插值数据集的平均值等。是否有一种方法可以插入到定义的多维数据集中?而不是在griddata函数中使用平滑因子?不幸的是,我不知道有任何MATLAB函数允许您使用自定义插值方法。下面是MathWorks提供的插值方法的示例。我认为最接近你想要的是函数,它允许你创建任意次数的分段多项式函数。虽然你得弄清楚