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.


  • Mod

    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 }
    //---------------------------------------------------------------------------


Log in to reply