complex Imaginärteil



  • Hallo
    Ich habe folgenden code:

    ...
    double R,C,omega;
    complex<double> Zs;
    ...
    Zs = R + 1.0/(omega*C);
    ...
    

    Meine Frage ist jetzt, wie teile ich dem Compiler mit dass 1.0/(omega*C) Imaginärteil ist ?

    Wäre dankbar für die Antwort auf diese Frage.



  • Hallo,

    Zs = complex(R, 1.0/(omega*C));
    oder gleich im Konstruktor initialisieren wenn möglich.



  • Viele dank fuer Antwort.

    Mit complex<double>(0, 1.0/(omega*L)) geht es natürlich auch.
    Gibt es vielleicht auch eine C++ Methode um es wie in C einzugeben ?

    //Wie geht so was in C++?
    Zs = R + I*(1.0/(omega*C));
    


  • Was meinst du jetzt wie in C eingeben? Die Formel da? Die kannst du in C++ genauso hinschreiben wenn I auch vom Typ complex ist.
    Was für einen Datentyp nimmst du in C statt complex dafü?



  • Marcin schrieb:

    Viele dank fuer Antwort.

    Mit complex<double>(0, 1.0/(omega*L)) geht es natürlich auch.
    Gibt es vielleicht auch eine C++ Methode um es wie in C einzugeben ?

    //Wie geht so was in C++?
    Zs = R + I*(1.0/(omega*C));
    

    Ganz einfach:

    const complex<double> I(0,1);
    

    mal vorher irgendwann hinschreiben. Kostet Dich allerdings wohl etwas Laufzeit.



  • @Braunstein
    Wie du sicher weiss kann man in C folgendes schreiben:

    complex double Zs;
    Zs = R + I*(1.0/(omega*C));
    

    R ist realteil, 1.0/(omega*C) ist (wegen I*) Imaginärteil.
    Diese Schreibweise finde ich sehr elegant und würde sie gerne auch in C++ verwenden (oder etwas gleichwertiges).
    Mit konstante geht es auch:

    Zs = 4 + 4i
    


  • Marcin schrieb:

    Diese Schreibweise finde ich sehr elegant und würde sie gerne auch in C++ verwenden (oder etwas gleichwertiges).

    Ich hab doch gerade beschrieben wie das geht. 😕



  • Hallo Jester

    Ich schrieb mein Beitrag genau zu gleichen Zeit wie du als Antwort auf für Braunstein.

    Ansonsten dein Vorschlag klingt logisch aber ich habe ihn nicht zu ende verstanden, so wie ich ihn verstanden habe müsste es so aussehen:

    #include <cmath>
    #include <iostream>
    #include <complex>
    
    #define PI 3.14159265359
    
    using namespace std;
    
    int main(int argc, char **argv)
    {
        const complex<double> I(0,1);
        complex<double> Zs;
        double f,R,L,C,omega;
    
        f = 1000;/*Hz*/
        R = 1000;/*Ω */
        L = 150; /*H */
        C = 2e-7;/*F */
        omega = 2*PI*f;
        /*Hier entscheidende Zeile*/
        Zs = R +  I*(1.0/(omega*C));
    
        cout << Zs << endl;
        return 0;
    }
    

    So kann es aber nicht funktionieren.
    Wie hast du es gemeint, könntest du ein Beispiel posten ?

    /*Edit*/
    Ich habe in meinem Programm ausversehen anstelle von R eine 0(int) gehabt, das war das Problemm.
    Also danke Jester, deine Lösung war das was ich suchte.



  • Marcin schrieb:

    So kann es aber nicht funktionieren.

    Dein Programm kompiliert und läuft. Was ist dein Problem damit?



  • @Marcin
    R + I rechnen mach irgendwie keinen Sinn. Was du vermutlich willst ist C + C rechnen!



  • Marcin schrieb:

    @Braunstein
    Wie du sicher weiss kann man in C folgendes schreiben:

    complex double Zs;
    Zs = R + I*(1.0/(omega*C));
    

    Ehrlich gesagt weiß ich das nicht, und habe eine solche Schreibweise auch noch nicht gesehen. Der Hinweis in meinem Post sollte eigentlich das ausdrücken, was Jester dann geschrieben hat.



  • @kmdf

    R + I rechnen mach irgendwie keinen Sinn.

    Es ist auch keine Berechnung sondern nur komplexe Zahl in kartesischer Form.

    @Braunstein

    und habe eine solche Schreibweise auch noch nicht gesehen

    Jetzt schon, falls dich das interessiert schau die wie komplexe Zahlen in C99 gehandhabt werden.

    @.filmor
    Ich bin mit C++ nicht so geübt,und dachte dass + operator nur für complex + complex definiert ist.

    Ansonsten Danke für die Antworten das Problem ist gelöst.


Anmelden zum Antworten