绘制波动方程

时间:2014-12-24 08:40:47

标签: 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);

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

我真正想要做的是绘制一个径向向外移动的球面波的函数(在表面上,如水的表面可能),以便在我的课堂上进行演示。如何将其转换为动画,显示波浪从点光源移出?

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

您看到aliasing,这是由于采样不足造成的。该别名具有(至少)两个可能的原因

  1. x y -grid of values 定义的函数的抽样不足。
  2. Matlab在具有有限数量的屏幕像素的图形上绘制图形。如果必须表示的矩阵与图像像素的数量相比较大,则图形渲染涉及某种下采样。在该下采样过程中,可能会出现混叠。
  3. 对于第一种混叠:当您增加波数时,波在 x y 方向上的变化更快。因此,为了正确显示功能,您需要以相同的比例缩短采样周期

    这是您的原始代码,仅适用于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);
    

    结果图显示混叠伪像:

    enter image description here

    现在,使用更精细的采样

    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);
    

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

    enter image description here

    这可能是由上面提到的第二种别名引起的。为了确认这一点,我在 Matlab R2014b中执行相同的代码,它执行a better job at avoiding aliasing caused by graphic rendering (另请注意,此版本的Matlab上的默认颜色映射已更改)。您可以看到,与上图相比,结果得到了改善:

    enter image description here

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