Хитрая тригонометрия - начальная позиция волны в предопределенной сетке в Matlab - PullRequest
2 голосов
/ 06 марта 2012

Я моделирую распространение плоской акустики с помощью Matlab. Я пытаюсь написать цикл, который изменяет угол падения волны и затем запускает симуляцию. Довольно просто, но я изо всех сил пытаюсь определить акустическую волну внутри петли. Это довольно просто проиллюстрировать, но по сути кодирование проблемы триггера вызывает у меня проблемы.

image of scenario

Я сделал это для случая точечного источника следующим образом

angular_increments = 300;
for i=1:angular_increments,
    % source position is positive along the  y-z-axis
    theta= 0+(angular_inc *i);
    x_position = 0; % fixed - independant of angle
    y_position = d * cos((pi/2)-theta);
    y_position = y_position * dy;
    z_position = d * sin((pi/2)-theta);
    z_position = z_position * dz;

    % Source function - defines a point of pressure
    source_grid = (kgrid.x = x_position);
    source_grid = source_grid&(kgrid.y = y_position);
    source_grid = source_grid&(kgrid.z = z_position);

Любые идеи о том, как подойти к этому, были бы очень кстати.

1 Ответ

0 голосов
/ 06 марта 2012

Я бы попробовал применить принцип Гюйгенса : вы решаете задачу для нескольких отдельных лучей, где вы рассчитываете распространение лучей в разные моменты времени. Затем вы комбинируете положение отдельных лучей в каждый данный момент времени, чтобы сформировать ваш волновой фронт, либо подгоняя прямую линию через точки, либо применяя сплайн (если интерфейс между волной и средой более сложный, или среда неоднородна.

...