我一直在尝试在 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,我会得到以下结果:
它似乎是一种干扰模式,但我不知道为什么我会得到这个,因为我没有加入干扰效果。谁能解释这里发生了什么?
我真正想做的是绘制一个函数,用于径向向外移动的球面波(在表面上,如水面),以便在我的课堂上进行演示。我怎样才能把它变成一个动画,显示波浪从点源移出?
谢谢你的帮助
您看到了混叠,这是由采样不足引起的。这种混叠有(至少)两个可能的原因:
对于第一种混叠:当您增加波数时,波在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);
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。
| 归档时间: |
|
| 查看次数: |
8475 次 |
| 最近记录: |