Die cos
Funktion sieht wie folgt aus:
Image Source: Wikipedia, Trigonometric functions
Wie man deutlich sehen kann, ist die Cosinus nie oben 1
oder unter -1
geht. Sie arbeiten mit der acos
, die die umgekehrte Funktion des Kosinus ist. Sie stellen grundsätzlich die Frage: "Welchen Wert für x
macht cos(x)
geben meine gegebenen y
Wert?" Jetzt
, für h=3
, Ihr Code erstellt cos_theta
‚s die unter-1
sind. Wie Sie aus dem Diagramm sehen können, ist es nicht möglich, solche Werte mit reellen Zahlen zu erreichen. Jedoch kann der Kosinus einer komplexen Zahl Werte über 1
und unter -1
erreichen. MATLAB erkennt korrekt, dass keine echte Lösung existiert, aber komplexe Lösungen - und liefert daher komplexe Winkel. Für h=1
und h=2
verhalten sich die cos_theta
gut und sind kleiner als -1
, so dass die Ergebnisse echt sind.
PS: For-Schleifen sind schlecht/langsam. Sie können dies löschen, indem Sie h
einen Spaltenvektor anstelle eines Zeilenvektors erstellen (indem Sie ihn mit .'
transponieren) und dann entweder bsxfun
(in "alten" MATLAB-Versionen) verwenden oder die integrierte Übertragung in R2016 oder neuer verwenden.
h = (1:K-2).';
cos_theta = bsxfun(@minus, cos_theta_0 , h*log(2)); % For older than R2016
cos_theta = cos_theta_0 - h*log(2); % For newer than R2016
theta = acos(cos_theta);
Was ist der * tatsächliche * Wert von 'alpha'. – Suever
Weil Sie, wie Matlabs gute Dokumentation sagt, "acos" ein Argument außerhalb von "[-1,1]" gegeben haben? –
'alpha' ist ein Array bestehend aus 19 Werten von 1 bis 10 mit einem 0,5-step @Suever – ElenaPhys