Plotting wave equation

早过忘川 提交于 2019-12-04 10:06:44

You are seeing aliasing, which is caused by insufficient sampling. That aliasing has (at least) two possible causes:

  1. The sampling of the function defined by the x,y-grid of values is insufficient.
  2. Matlab plots the graph on a figure with a limited number of screen pixels. The graphical rendering involves some kind of downsampling, if the matrix that has to be represented is large compared with the number of figure pixels. In that downsampling process, aliasing may appear.

As for the first type of aliasing: when you increase the wavenumber, the wave varies faster in the x and y directions. So, in order to visualize the function properly you need to reduce the sampling period in the same proportion.

This is your original code, only with k=15 and w=15; and with surf replaced by imagesc for greater clarity (the figure is like yours but seen "from above"):

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

The resulting figure exhibits aliasing artifacts:

Now, using finer sampling

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

reduces the first type of aliasing. However, some artifacts are still visible in the figure:

This is probably caused by the second type of aliasing referred to above. To confirm this, I ran the same code in Matlab R2014b, which does a better job at avoiding aliasing caused by graphic rendering (note also that the default colormap has been changed on this version of Matlab). You can see that, compared with the previous figure, the results are improved:

Bottom line: use finer sampling, and move to Matlab R2014b if possible.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!