あなたの関数は、入力としてdelta
(波長)、M
(配列要素の数)、theta
(到着方向)となります。
あなたの数式が正しいと仮定すると、最初の選択肢はforループをすべての配列要素に対して実行するよりも書くことです。さんはm
配列のインデックスを呼ぶことにしましょう:
for m=1:M
a(m)=exp(1i*2*pi*delta*sin(theta)*(m-1));
end
delta=1;
theta=pi/4;
場合とM=10;
(デモのためにはいくつかのランダムな数字)あなたが持っているでしょう:
a =
Columns 1 through 4
1.0000 + 0.0000i -0.2663 - 0.9639i -0.8582 + 0.5133i 0.7233 + 0.6906i
Columns 5 through 8
0.4731 - 0.8810i -0.9752 - 0.2214i 0.0462 + 0.9989i 0.9506 - 0.3105i
Columns 9 through 10
-0.5524 - 0.8336i -0.6564 + 0.7544i
上記のコードでは、pi
されます定数π1i
は虚数単位jであり、exp(x)
は単にe^xと評価される関数です。
theta
がラジアンの場合、このコードが機能します。そうでない場合は、theta
が度である場合、で、sin()
ではなく使用する必要があります。
Matlabの美しさは、ベクトル化された式に関しては、実際にはかなり高速です。実際、次のように上記のコードを簡素化するスマートな方法があります:
a2=exp(1i*2*pi*delta*sin(theta)*((1:M)-1));
とa2
は、上記の評価をa
とまったく同じになります。この単純化されたコードはMatlab(たいていの場合)では、与えられた関数(ここではexp
)に値の配列全体を供給することができ、Matlabは入力配列のあらゆる点で評価される関数を返します。例えばsin(pi)
とsin(pi/2)
をsin([pi pi/2])
というワンショットの方法で評価することができます。入力ベクトルを作成してsin()
にフェッチしたことがわかります。
だから、結論では、あなたが簡単とあなたの関数を書くことができますいずれか
function a = gen_a(M,Delta,theta)
for m=1:M
a(m)=exp(1i*2*pi*Delta*sin(Theta)*(m-1));
end
end
または
function a = gen_a(M,Delta,theta)
a=exp(1i*2*pi*Delta*sin(Theta)*((1:M)-1));
end
SO(残念ながら)にはLaTeXのサポートはありません、あなたは、TeXせずにあなたの質問を書き直してくださいだろうか? – Alessiox
@Alessioxが読みことが容易ですか? –