Опитвам се да начертая уравнение на равнина вълнав 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, получавам следното: Изглежда, че е интерферентен модел, но нямам представа защо аз получавам това, защото не съм сложил ефектите на смущението. Може ли някой да обясни какво се случва тук?
Това, което всъщност се опитвам да направя, е да начертая функцияза радиално навън движеща се сферична вълна (на повърхност, подобна повърхност на водата може да бъде) за демонстрация в моя клас. Как мога да превърна това в анимация, която показва вълни от вълни, излизащи от точков източник?
Благодаря за вашата помощ
Отговори:
3 за отговор № 1Виждате псевдоними, което се дължи на недостатъчното вземане на проби. Това псевдоними има (най-малко) две възможни причини:
- Вземането на проби от функцията, определена от х,ш- матрица от стойности е недостатъчно.
- Matlab начертава графиката на фигура с ограничен брой пиксели на екрана. Най- графично изобразяване включва някакъв вид downsampling, ако матрицата, която трябва да бъде представена, е голяма в сравнение с броя на фиксираните пиксели. В този процес на отслабване може да се появи aliasing.
Колкото до първи тип псевдоними: когато увеличите броя на вълните, вълната се променя по - бързо в х и ш посоки. Така че, за да визуализирате функцията правилно, трябва намаляване на периода на вземане на проби в същото съотношение.
Това е вашият оригинален код, само с 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, което прави по-добра работа за избягване на псевдоними, причинени от графично изобразяване (имайте предвид също, че стандартната colormap е променена на тази версия на Matlab). Можете да видите, че в сравнение с предишната фигура, резултатите са подобрени:
Bottomline: използвайте по-фини извадки и придвижете се до Matlab R2014b, ако е възможно.