0

我有 3 个包含坐标 X、Y 和 Z 的 csv 文件。我正在尝试使用 surf 函数在 matlab 中绘制它们。这些坐标是按时间记录的,

例如。FirstX.csv,包含,

                                 10,20,30
                                 20,30,40
                                 20,30,40

此文件中的每一行都是针对记录时间的 X 坐标。FirstY.csv 和 FirstZ.csv 的相似之处

我尝试了类似以下的方法,

X=csvread(FirstX.csv)
Y=csvread(FirstY.csv)
Z=csvread(FirstZ.csv)

surf(X,Y,Z)

给出错误说“数据维度必须一致”

任何帮助,将不胜感激。

4

1 回答 1

0

您将在此处的 matlab 帮助页面上找到答案。我在下面重现其相关示例。您必须为每个时间点重复这些步骤。

X,Y,Z使用向量实现曲面图的众多解决方案之一是:

- 在 [-8, 8] 范围内生成不均匀采样的数据,并用它来评估函数:

x = rand(100,1)*16 - 8;
y = rand(100,1)*16 - 8;
r = sqrt(x.^2 + y.^2) + eps;
z = sin(r)./r;

- linspace 函数提供了一种方便的方法来创建具有所需元素数量的均匀间隔数据。以下语句生成随机数据范围内的向量,其分辨率与前一个 sinc 示例中的 -8:.5:8 语句生成的分辨率相同:

xlin = linspace(min(x),max(x),33);
ylin = linspace(min(y),max(y),33);

- 现在使用这些点来生成一个均匀间隔的网格:

[X,Y] = meshgrid(xlin,ylin);

- 此过程的关键是使用scatterInterpolant 根据原始数据点处的函数值(在此示例中是随机的),对均匀间隔点处的函数值进行插值。此语句使用默认的线性插值来生成新数据:

f = scatteredInterpolant(x,y,z);
Z = f(X,Y);

- 绘制插值和非均匀数据以产生:

figure
mesh(X,Y,Z) %interpolated
axis tight; hold on
plot3(x,y,z,'.','MarkerSize',15) %nonuniform

您也可以使用 matlab 的函数griddata,TriScatteredInterpgridfitFile Exchange - 新引入的 matlab 函数scatteredInterpolant是最先进的解决方案。

于 2013-09-08T22:38:14.233 回答