绘制波动方程

Sha*_*haz 5 matlab wave

我一直在尝试在 Matlab 中绘制平面波动方程。我试图绘制 $(1/R)E^i(kR+wT)$ 的实部,即 $(1/R)cos(kR+wT)$。所以我在 Matlab 中使用了以下代码(对于一个瞬间,比如 t=5),

x=-5:0.1:5;
y=-5:0.1:5;

t=5;

w=1.3;
k=1.3;

[X,Y]=meshgrid(x,y);
R=(X.^2+Y.^2)^1/2;
u=20*cos(k*R+w*t);
surf(X,Y,u);
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我得到以下曲面图: 在此处输入图片说明 正如人们所期望的那样,我认为这看起来不错。但是如果我将波数和角频率因子增加到 15,我会得到以下结果: 在此处输入图片说明 它似乎是一种干扰模式,但我不知道为什么我会得到这个,因为我没有加入干扰效果。谁能解释这里发生了什么?

我真正想做的是绘制一个函数,用于径向向外移动的球面波(在表面上,如水面),以便在我的课堂上进行演示。我怎样才能把它变成一个动画,显示波浪从点源移出?

谢谢你的帮助

Lui*_*ndo 5

您看到了混叠,这是由采样不足引起的。这种混叠有(至少)两个可能的原因

  1. x , y值网格定义的函数采样不足。
  2. Matlab 在屏幕像素数有限的图形上绘制图形。的图形渲染涉及某种下采样的,如果与图的像素的数量相比较,其具有要被表示的矩阵是大的。在该下采样过程中,可能会出现混叠。

对于第一种混叠:当您增加波数时,波在xy方向上的变化会更快。因此,为了正确地可视化函数,您需要以相同的比例减少采样周期

这是你的原始代码,只有k=15w=15; 并surf替换imagesc为更清晰(该图与您的相似,但“从上方”看到):

x=-5:0.1:5;
y=-5:0.1:5;
t=5;
w=15;
k=15;
[X,Y]=meshgrid(x,y);
R=(X.^2+Y.^2)^1/2;
u=20*cos(k*R+w*t);
imagesc(x,y,u);
Run Code Online (Sandbox Code Playgroud)

生成的图形显示出锯齿现象:

在此处输入图片说明

现在,使用更精细的采样

x=-5:0.01:5; %// note: 0.01: finer grid
y=-5:0.01:5;
t=5;
w=15;
k=15;
[X,Y]=meshgrid(x,y);
R=(X.^2+Y.^2)^1/2;
u=20*cos(k*R+w*t);
imagesc(x,y,u);
Run Code Online (Sandbox Code Playgroud)

减少第一种混叠。但是,图中仍然可以看到一些工件:

在此处输入图片说明

这可能是由上面提到的第二种混叠引起的。为了确认这一点,我在Matlab R2014b 中运行了相同的代码,它在避免由图形渲染引起的锯齿方面做得更好(另请注意,此版本的 Matlab 上的默认颜色图已更改)。可以看到,与上图相比,结果有所提升:

在此处输入图片说明

底线:使用更精细的采样,如果可能,请移至 Matlab R2014b

  • 哇……这解释得很好。谢谢! (2认同)