Komplexe Zahlen
-
Hallo zusammen
Ich bin Elektrotechniker und habe ein kleines Problem bei dem Ihr mir vielleicht weiterhelfen könntet/möchtet.
Ich möcht eine komplexe Zahl z.B. (5+2i)mOhm automatisch berechnen in die Polarfunktion z.B. 5.38 cis 21.8 Grad. Geht das überhaupt? Oder muss ich es immer über den arctan rechnen? Kann man die Polarform auch dividieren z.b. I=U/5.38 cis 21.8?
Bis jetzt weiss ich erst, dass ich die def. Klassen verwenden darf: #include<complex>
using namespace std;
und die Datentypen float und double benutzen kann.Ich wäre euch sehr dankbar wenn ihr mir weiterhelfen könntet. in der Hilfe( FAQ's) habe ich leider nichts gefunden.
mfg
michi
-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hier findest du eine Referenz des complex Headers:
http://www.cplusplus.com/reference/std/complex/
Da sind alle Operationen zu finden, nach denen du gefragt hast.
-
Michi 380 schrieb:
Ich möcht eine komplexe Zahl z.B. (5+2i)mOhm automatisch berechnen in die Polarfunktion z.B. 5.38 cis 21.8 Grad. Geht das überhaupt? Oder muss ich es immer über den arctan rechnen? Kann man die Polarform auch dividieren z.b. I=U/5.38 cis 21.8?
Hallo Michi,
das geht alles - in C++ etwa so:
#include <iostream> #include <complex> #include <cmath> const double PI = std::acos( -1.0 ); const double GRAD2RAD = PI / 180; int main() { using namespace std; complex< double > z = polar( 5.38516, 21.8014 * GRAD2RAD ); cout << "z=" << z << endl; double U = 12.0; complex< double > I = U / z; cout << "I=" << I << endl; return 0; }
Die Ausgabe des Programms ist:
z=(5,2) I=(2.06897,-0.827587)
Gruß
Werner
-
Hallo Werner/ SeppJ
Vielen Dank für eure Hilfe.
Ich werde das am Wochenende mal ausprobieren, ich hätte das nie hingekriegt als Anfänger. Aber wie funktioniert jetzt die direkte umwandlung von 5+2i in Polarform? Wäre euch sehr dankbar wenn ihr mir noch ein letztes mal helfen könntet.
mfg
Michi
-
SeppJ schrieb:
Hier findest du eine Referenz des complex Headers:
http://www.cplusplus.com/reference/std/complex/
Da sind alle Operationen zu finden, nach denen du gefragt hast.Michi 380 schrieb:
Aber wie funktioniert jetzt die direkte umwandlung von 5+2i in Polarform?
RTFM!
-
Michi 380 schrieb:
... Aber wie funktioniert jetzt die direkte umwandlung von 5+2i in Polarform?
noch einfacher als umgekehrt:
#include <iostream> #include <complex> #include <cmath> const double PI = std::acos( -1.0 ); const double GRAD2RAD = PI / 180; int main() { using namespace std; complex< double > z( 5, 2 ); // 5 + 2i cout << "z=" << z << endl; cout << "Betrag=" << abs( z ) << " Phi=" << arg( z )/GRAD2RAD << "Grad" << endl; return 0; }
Sebastian Pizer schrieb:
RTFM!
Ja - aber das liest sich auch einfacher, wenn man nicht mehr der blutige Anfänger ist - oder?
Gruß
Werner
-
Werner Salomon schrieb:
Sebastian Pizer schrieb:
RTFM!
Ja - aber das liest sich auch einfacher, wenn man nicht mehr der blutige Anfänger ist - oder?
Also mit dieser Referenz sollte das aber kein Problem sein, sofern man ein wenig Englisch kann. Es gibt ja auch überall kleine, komplette Beispiele, die die Funktion erklären. So eine geniale Referenz gibt es nicht zu jeder Sprache.. Hast du z.B mal was mit Eiffel gemacht? - Da gibts nur eine Möglichkeit. Try&Error und da wäre ich oft sehr froh mal eine Referenz zu haben, die überhaupt mal was erklärt. (und nicht nur die Signatur zeigt..)
-
Hallo zusammen
Habe es jetzt folgendermassen gelöst, habe aber noch einen kleinen Fehler. Ich habe es mit dem Button12 nicht fertig gebracht, von komplexen Format in polarform auszuschreiben.. Es schreibt mir immer den Imaginärteil heraus..
const double PI = std::acos( -1.0 );
const double GRAD2RAD = PI / 180;
using namespace std;
complex< double > z=(0,0);void __fastcall TForm1::Button10Click(TObject Sender)
{
z= polar(Edit15->Text.ToDouble(),Edit16->Text.ToDouble() GRAD2RAD);
Label12->Caption=real(z);
Label13->Caption=imag(z);
}void __fastcall TForm1::Button11Click(TObject *Sender)
{
double U=(Edit17->Text.ToDouble());
complex< double > I = U / z;
Label15->Caption=real(I);
Label16->Caption=imag(I);
}
//---------------------------------------------------------------------------void __fastcall TForm1::Button12Click(TObject *Sender)
{
z =(Edit18->Text.ToDouble(),Edit19->Text.ToDouble());
Label18->Caption=abs(z);
Label19->Caption=arg(z)/GRAD2RAD;// arg=Winkel }
//---------------------------------------------------------------------------