2016-04-22 9 views
-1

Ich bin ein kompletter Neuling in Matlab, nie zuvor verwendet, und haben daher nicht die geringste Ahnung, wie Subroutinen zu generieren. Ich habe Tutorials in Bezug gefunden Matrizen zu erzeugen, und die damit verbundene Probleme zu lösen, aber bisher nichts mir mit folgendem zu helfen:Generieren einer Array-Antwort mit Matlab

Ich mag ein Unterprogramm, um eine Array Antwort a(\theta) eine einheitlichen linearen Anordnung mit M Elementen und den Abstand zu erzeugen, \Delta Wellenlängen zu einer Quelle aus Richtung \theta Grad. function a = gen_a(M,Delta,theta)

Nun, soweit ich weiß, die Array-Antwort a(\theta) ist gegeben durch

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

Wenn jemand nachweisen kann:

Ich habe auch mit dem folgenden Code arbeiten gegeben worden mir, wie das gemacht wird, dann werde ich wenigstens eine Idee haben, wie ich Unterprogramme für andere Funktionen erstellen kann.

+0

Es gibt keine LaTeX-Unterstützung auf SO (leider) leicht schreiben, könnten Sie bitte umschreiben Ihre Frage ohne TeX? – Alessiox

+0

@Alessiox Ist das leichter zu lesen? –

Antwort

1

So nimmt Ihre Funktion als Eingabe delta (Wellenlänge), M (Anzahl der Array-Elemente) und theta (Richtung der Ankunft).

Unter der Annahme, dass Ihre Formel korrekt ist, besteht Ihre erste Option darin, eine For-Schleife zu schreiben, die für alle Array-Elemente ausgeführt wird. Nennen wir m der Array-Index:

for m=1:M 
    a(m)=exp(1i*2*pi*delta*sin(theta)*(m-1)); 
end 

Wenn theta=pi/4;delta=1; und M=10; (nur einige Zufallszahlen aus Gründen der Demo) Sie haben:

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 

Im Codeausschnitt oben, pi ist die Konstante π, 1i ist die imaginäre Einheit j, während exp(x) eine Funktion ist, die einfach e^x auswertet.
Dieser Code funktioniert, wenn theta im Bogenmaß angegeben ist; Andernfalls, wenn theta in Grad angegeben ist, müssen Sie sind() und nicht sin() verwenden.

Die Schönheit von Matlab ist, dass es ziemlich schnell ist, wenn es um vektorisierte Ausdrücke geht. Tatsächlich gibt es eine intelligente Art und Weise über den Code zu vereinfachen, wie folgt:

a2=exp(1i*2*pi*delta*sin(theta)*((1:M)-1)); 

und a2 werden genau die gleiche wie a oben bewertet. Dieser vereinfachte Code basiert auf der Tatsache, dass Sie in Matlab (meistens) eine bestimmte Funktion (exp, in unserem Fall) eine ganze Reihe von Werten liefern können und Matlab wird die Funktion an jedem Punkt im Eingabe-Array zurückgeben: z.B Ich kann sin(pi) und sin(pi/2) in einem One-Shot-Mode dank sin([pi pi/2]) bewerten, wie Sie sehen können, habe ich einen Eingabevektor erstellt und einen solchen Vektor zu sin() abgerufen.

So, zum Schluss können Sie Ihre Funktion als entweder

function a = gen_a(M,Delta,theta) 
    for m=1:M 
     a(m)=exp(1i*2*pi*Delta*sin(Theta)*(m-1)); 
    end 
end 

oder

function a = gen_a(M,Delta,theta) 
    a=exp(1i*2*pi*Delta*sin(Theta)*((1:M)-1)); 
end 
Verwandte Themen