绘制为曲面时,周期性数据似乎不是周期性的

时间:2017-11-10 09:00:04

标签: matlab matrix 3d visualization surface

我正在模拟波浪入射到多层球体上的问题。

我有一个名为forceZ1的变量,它是另外两个名为phasefrequency的变量的函数。我已经解决了一个方程并找到了forceZ1的矩阵。另外我知道frequency是1 * 3000矩阵,phase大小相同。显然forceZ1将是3000 * 3000。

在这种情况下,相位在02*pi之间变化,并且根据数据,我得到的力应该是周期性的,周期为2π。这可以通过绘制forceZ1中与角度相关的任何列向量来验证,例如

figure(); plot(ang1, forceZ1(:,567));

给出了:

Example periodic output

我尝试绘制表面forceZ1frequencyphase,但该图未显示周期性行为。我做错了什么?

Figure not showing periodic behavior

这是我的绘图代码:

Z=forceZ1;
X=ang1;
Y=frequency;

figure
surf(X,Y,Z,'edgecolor','none')
shading interp
view(3)
xlim([0,2*pi]);
xlabel('X=phase')
ylabel('Y=nondimensional frequency')
zlabel('Z=force in Z direction')
title('Force-Frequency-Phase')
colormap jet

我上传了.mat file of my data供您参考。

1 个答案:

答案 0 :(得分:1)

似乎你的forceZ1矩阵在途中被转移了。正如你所说,数据确实是周期性的,但周期性的方向是你的 Y 轴。

如果您按照以下方式绘制数据,它将开始有意义:

surf(X,Y,Z.','edgecolor','none');

...导致:

Desired result...

但是,由于您的数据包含因相位,幅度和偏移而不同的谐波,您可能需要尝试使用不同类型的图表来突出谐波的形状,例如ribbon

figure(); ribbon(Z(1:40:end,1:100:end));

Ribbon example

...或尝试使用显示频率的滑块制作动画或交互式图表。

此外,您的数据可能不仅仅是转置,而且还可以翻转,因此您可能需要使用flip来获得正确的结果。