我一直试图在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);
当我运行此代码时,我得到以下表面图: 我认为这看起来很好,正如人们所期望的那样。但如果我将波数和角频率因子增加到15,我得到以下结果: 它似乎是一种干涉模式,但我不知道为什么我得到这个,因为我没有放入干扰效果。谁能解释一下这里发生了什么?
我真正想要做的是绘制一个径向向外移动的球面波的函数(在表面上,如水的表面可能),以便在我的课堂上进行演示。如何将其转换为动画,显示波浪从点光源移出?
感谢您的帮助
答案 0 :(得分:3)
您看到aliasing,这是由于采样不足造成的。该别名具有(至少)两个可能的原因:
对于第一种混叠:当您增加波数时,波在 x 和 y 方向上的变化更快。因此,为了正确显示功能,您需要以相同的比例缩短采样周期。
这是您的原始代码,仅适用于k=15
和w=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);
结果图显示混叠伪像:
现在,使用更精细的采样
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);
减少了第一种别名。但是,图中仍然可以看到一些工件:
这可能是由上面提到的第二种别名引起的。为了确认这一点,我在 Matlab R2014b中执行相同的代码,它执行a better job at avoiding aliasing caused by graphic rendering (另请注意,此版本的Matlab上的默认颜色映射已更改)。您可以看到,与上图相比,结果得到了改善:
底线:使用更精细的采样,如果可能,请转到Matlab R2014b 。