Logarithmusberechnung nach Iterationsvorschrift



  • Hallo,

    ich soll für die Uni so eine C++ Übungsaufgabe lösen. Es sollen Funktionswerte der Logarithmusfunktion iterativ berechnet werden. Habe das auch hinbekommen. Allerdings weiß ich nicht, warum es so wie unten nicht funktioniert. Man bekommt keine sinnvollen Ausgaben. Wäre toll, wenn ihr mal drüberschaun könntet.

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    int main()
      {
        int x,z;
        double xalt,xneu,zalt,zneu,relativ;
    
        while(x >= 1)
          {
            cout << "Bitte den x-Wert fuer die Logarithmusfunktion eingeben: ";
            cin >> x;
            cin.get();
    
            //Anfangswerte für Schleife festlegen
            xneu=x-1;
            zneu=1;
            while(xneu < xalt)//solange bis xneu ungefähr xalt
              {
                xalt=xneu;
                zalt=zneu;
    
                xneu=(2*xalt)/(1+sqrt(1+zalt*xalt));//Iterationsvorschrift
                zneu=(zalt/2);
            }
    
            relativ = fabs(log(x)-xalt)/(fabs(log(x))); 
    
            cout << "Ergebnis der Iteration: " << xneu << endl;
            cout << "relativer Fehler: " << relativ << "%" << endl;
          }
        cout << "keine gueltige Eingabe";
      getchar(); 
      return 0;
    }
    


  • dama schrieb:

    int x,z;
    

    'x' sollte besser ein double sein. 'z' wird nicht benötigt.

    dama schrieb:

    while(x >= 1)
          {
    

    x ist nicht initialisiert. evt wird die Schleife gleich übersprungen.

    dama schrieb:

    while(xneu < xalt)//solange bis xneu ungefähr xalt
              {
    

    hier ist 'xalt' nicht initialisiert. Wenn Du z.B. mit xalt = xneu + 1.0 den Eintritt in die Schleife erzwingst, sind die Ergebnisse der Iteration recht gut.

    Gruß
    Werner



  • ok, danke das wars... jetzt gehts auch so


Anmelden zum Antworten