0

反対方向に動く 2 つの正弦波を追加するコードをオンラインで見ました。

x = [0:0.1:2*pi];
w = 1;
for t=0:0.01:10
  f1 = sin(x - w*t);
  f2 = sin(x + w*t);
  f = f1+f2;
  plot(x, f);
  drawnow;
end

2 つのサインを追加することを考えていますが、異なる方向に移動します (たとえば、1 つは 30 度に沿って進み、もう 1 つは 90 度に沿って進みます)。テキストを読んだところ、異なる方向に移動する正弦波は波動ベクトルに依存すると書かれていました

  f1 = sin(kx*x + ky*y - w*t);
  f2 = sin(kx*x + ky*y + w*t);

しかし、ここでは x と y の 2 つの変数があるので、波を視覚化するにはどうすればよいでしょうか。

私がプロットしようとしているのは、3D のサイン プレートではなく、3D ラインです。たとえば、次のプロットでは、サーフェスではなく 3D 曲線 (太字の赤) を表示したい

ここに画像の説明を入力

4

1 に答える 1

1

この場合、3D プロットで波を視覚化する必要があります。たとえば、これには surf コマンドを使用できます。

x = [0:0.1:2*pi];
y = [0:0.1:2*pi];
[X,Y]=meshgrid(x,y);
kx=1;
ky=0.5;
w = 1;
for t=0:0.01:10
  f1 = sin(kx*X +ky*Y - w*t);
  f2 = sin(kx*X + ky*Y - w*t);
  f = f1+f2;
  surf(X,Y,f)
  drawnow;
end

アップデート:

2 つの波を同じ方向に向けない場合は、波ベクトルに個別の値が必要になります。たとえば、波が 30 度に沿って進むkx1=sqrt(3)/2, ky1=1/2場合、波が 90 度に進む場合などkx2=0, ky2=1です。

さらに、3D プレートの代わりに波線が必要な場合は、選択した線の方向にサイン プレートのスライスを作成できます。

たとえば、45 度 (x = y) の方向にスライスを受け取りたいとします。

最初のステップは、スライス ライン ポイントのベクトルを生成することです。

lx = 1/sqrt(2);    % (lx,ly) - direction vector for slice line
ly = 1/sqrt(2);
r = [0:0.1:4*pi];     % parameter to produce line in parametric form
x = lx * r;
y = ly * r;

これらのベクトルを正弦方程式の入力として使用します。

kx1=sqrt(3)/2;
ky1=0.5;
kx2=0;
ky2=1;
w = 1;
for t=0:0.01:10
  f1 = sin(kx1*x + ky1*y + w*t);
  f2 = sin(kx2*x + ky2*y + w*t);
  f = f1+f2;
  plot(r,f);
  drawnow;
end

もちろん、サインラインの形状はスライスラインの方向によって異なり、スライス方向によって異なる波を受信できます。

于 2013-07-02T04:36:13.877 に答える