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
Es gibt keine LaTeX-Unterstützung auf SO (leider) leicht schreiben, könnten Sie bitte umschreiben Ihre Frage ohne TeX? – Alessiox
@Alessiox Ist das leichter zu lesen? –