Phasengang mit C# berechnen

Gast #1250180
Lesenswert?

Hi,

ich bin gerade dabei den Phasengang mit der Programmiersprache C# zu 
berechnen. Der Realteil sowie Imaginärteil liegen jeweils separat in 
einem Array von der Größe 100.
1
double radians = 0;
2
for (int i=0; i<100; i++)
3
  if (realteil[i] == 0)
4
     y[i] = (double)90;
5
  else
6
  {
7
     radians = Math.Atan((double)(imaginaerteil[i] / realteil[i]));
8
     y[i] = radians * (180 / Math.PI); // angle
9
  }
10
}

Wenn ich diesen Code wie oben gezeigt ausführe, dann bin ich mir nicht 
ganz sicher ob die berechnungen so stimmen. Es können ja bei der arctan 
Funktion Phasensprünge von +/- pi vorkommen. Ich weiss nicht wie ich 
dies in meinem Code integrieren könnte.
Gast #1250589
Lesenswert?

> Es können ja bei der arctan Funktion Phasensprünge von +/- pi
> vorkommen.

Deswegen gibt es die Atan2-Funktion. Ganz nebenbei sparst du dir auch
den Vergleich mit 0:
1
for (int i=0; i<100; i++)
2
  radians = Math.Atan2(imaginaerteil[i], realteil[i]);
3
  y[i] = radians * (180 / Math.PI); // angle
4
}
Gast #1250599
Lesenswert?

Ergänzug: Die Sprünge zwischen ±pi gibt es auch bei der Atan2-Funktion
(irgendwo muss sich der Kreis ja schließen), was aber normalerweise
nicht stört. Der Vorteil gegenüber der Atan-Funktion besteht vor allem
darin, dass Atan2 für alle vier Quadranten das gewünschte Ergebnis
liefert, während Atan dies nur im ersten und vierten Quadranten tut.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren