2016-04-22 8 views
-1

私はMatlabの完全な初心者です。以前はこれまで使用していなかったので、サブルーチンを生成する方法はほとんど分かりません。私は行列を生成し、関連する問題の解決に関してチュートリアルを認めなかったが、次のように私を助けるために、これまで何もしている:Matlabを使って配列の応答を生成する

私はM要素との間隔を均一リニアアレイのアレイ応答a(\theta)を生成するサブルーチンを作りたいです\Delta方向から来る光源への波長は\theta度です。私は承知していると、誰かがに証明することができれば限り、アレイ応答a(\theta)

a(\theta)=[1 ; e^{j2\pi\Delta\sin(\theta)} ; ..... ; e^{j2\pi(M-1)\Delta\sin(\theta)}] 

によって与えられ、今function a = gen_a(M,Delta,theta)

また、私はで動作するように以下のコードを与えられています私はこれがどのように行われたのか、少なくとも私は他の関数のためのサブルーチンを作成する方法の考えを持っています。

+0

SO(残念ながら)にはLaTeXのサポートはありません、あなたは、TeXせずにあなたの質問を書き直してくださいだろうか? – Alessiox

+0

@Alessioxが読みことが容易ですか? –

答えて

1

あなたの関数は、入力として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 
関連する問題