exponentialfunktion darstellen



  • guten Abend.

    Ich Bin Maschinenbaustudent und benötige Hilfe bei Informatik.. und ich bin neu hier.. Also.. Aufgabenstellung ist :

    1.1 Aufgabenstellung
    Schreiben Sie ein C Programm, das die Exponentialfunktion mit Hilfe einer
    Reihenentwicklung berechnet, und zwar mit folgender Summen-Formel:

    ehochx = summe von k=0 bis unendlich = 1+x+1/2x2+1/2x3x3 usw...ich habe den ersten teil der Forschleife fast geschafft.

    ich schaffe es nur nicht bei k=0 zu starten, da ich später damit rechen muss.. und iwas mit 0 zu multiplizieren ist nicht so toll.. seht selbst.

    #include <stdio.h>
    #include <math.h>
    int main (void) {
    double x;
    int n=123456%100;
    int k;
    double ergebnis;
    double kfakultaet = 1;
    double xhochk = 1;

    if(n < 10)
    n=10;

    scanf("%lf", &x);
    for(k=0; k <= n; k=k+1)

    {
    ergebnis = ergebnis+xhochk/ kfakultaet;

    xhochk = xhochk*x;

    kfakultaet = kfakultaet*k;

    printf("Aktueller Wert von k: %i\n Aktueller Summenwert der Reihe: %lf \n\n",k,ergebnis);
    }
    printf("\n\nFOR-Schleife ist beendet\n\n");

    return 0;
    }

    es geht um das k in der schleife. das muss 0 sein.. also der erste Ausdruck aber bei kfakltät muss ich damit rechen und wenn es dann null ist, bekomme ich keine ergebnisse..

    kann mir jemand helfen?

    mehr aufgabentext oder anderes kann ich nachhreichen.. möchte hier nicht an text übertreiben.

    Danke



  • Du musst nicht bei 0 anfangen. Du weißt ja, das der Wert für k = 0 gleich 1 ist.
    Oder du machst noch eine if-Abfrage für k == 0 und verzichtest dann auf die Multiplikation.



  • Kurze Hinweise:
    - unendlich in Programmen ist unerwünscht, jedenfalls in Schleifen
    - bitte Code eingerückt in Tags [ C ] ... [ C ] darstellen
    - es steht dir frei, eine for-Schleife auch mit for (k = 1; k < n; k++) zu machen
    - ergebnis muss vor der Schleife mit 0.00 initialisiert sein



  • Puh, ich hätte überhaupt nicht gewusst, worum es geht, wenn andere in anderen Foren nicht die Formel gepostet hätten:

    ϵx=k=0xkk!\LARGE\epsilon^x = \sum\limits_{k=0}^{\infty} \frac{x^k}{k!}

    Du musst nicht mit k=0 anfangen, dessen Ergebnis kannst Du schnell im Kopf ausrechnen.
    Die Funktion lauft auf ein Limes zu: Irgendwann verändert sich das Ergebnis nicht mehr. Eine genauere Gleitkommazahl braucht zwar etwas länger, aber irgendwann ist das Ende der Fahnenstange erreicht. Du kannst also das aktuelle Ergebnis mit dem letzten Ergebnis vergleichen und bei Gleichstand die Schleife verlassen. ACHTUNG! Das ist einer der ganz wenigen Fälle, wo eine Gleitkommazahl auf Gleichheit oder Ungleichheit getestet werden kann!

    Und hier ein Beispiel, das Du mit Deinem Programm vergleichen kannst:

    #include <stdio.h>
    
    int main ( void )
    {
        double x;
        int k = 0;
        double ergebnis = 1, e_hold = 0;
        double kfakultaet = 1, xhochk = 1;
    
    //    scanf("%lf", &x);
        x = 3.4;
    
        while( ergebnis != e_hold )
        {
            k++;
            kfakultaet *= k;
            xhochk *= x;
            e_hold = ergebnis;
            ergebnis += xhochk / kfakultaet;
            printf("%3i) %.50f \n", k, ergebnis);
        }
    
        printf("\n\nWHILE-Schleife ist beendet\n\n");
    
        return 0;
    }
    

    viele grüße
    ralph



  • das mit k=0 steht in der aufgabenstellung.. ...

    Schreiben Sie ein C Programm, das die Exponentialfunktion mit Hilfe einer
    Reihenentwicklung berechnet, und zwar mit folgender Summen-Formel:

    Ihr Programm soll einen Wert für x als Benutzereingabe einlesen (Datentyp double). Danach
    soll mit einer for–Schleife die Reihe der Exponentialfunktion von k=0 bis
    k=(Ihre_Matrikel_Nummer%100) (mindestens jedoch bis k=10) berechnet werden. Die
    Reihe soll also abgebrochen werden, wenn k den Wert erreicht, der sich als Rest der Integer-
    Division Ihrer Matrikelnummer durch 100 ergibt. Wenn dieser Wert kleiner als 10 ist, soll bis
    k=10 gelaufen werden (if Anweisung verwenden!). Bei jedem Schleifendurchlauf sollen der
    Wert für k und der aktuelle Summenwert der Reihe mit printf ausgegeben werden.
    Nach der for–Schleife soll die Reihe noch einmal berechnet werden. Dieses Mal soll dazu
    eine while–Schleife verwendet werden. Diese Schleife soll nicht eine feste Anzahl von
    Durchläufen ausführen, sondern sie soll die Reihe solange fortsetzen, bis eine vorgegebene
    Absolut-Differenz zum Wert der Exponentialfunktion aus der C Mathematik-Bibliothek
    (Funktion exp(), math.h mit #include einfügen!) erreicht wird. Die Mathematik-Funktion
    exp liefert den Wert der Exponentialfunktion mit der Genauigkeit des Datentyps double. Für
    die Berechnung der Laufbedingung der while–Schleife müssen Sie das Ergebnis von exp(x)
    von dem aktuellen Summenwert Ihrer Reihe abziehen und von der Differenz den
    Absolutbetrag bilden (mit Funktion fabs, siehe Übung 2). Die Schleife soll nur solange
    laufen wie diese Absolut-Differenz größer als der Wert (100.0/Ihre_Matrikelnummer),
    Quotient aus 100.0 und Ihrer Matrikelnummer, ist.
    Bei jedem Schleifendurchlauf sollen die Absolut-Differenz und der aktuelle
    Summenwert der Reihe ausgegeben werden.



  • nu fang mal langsam an meen jung



  • wonmit anfangen???



  • mit programmieren vielleicht? 😕



  • wie du siehst habe ich angefangen aber kann dem aufgebentext nicht ganz gerecht werden.

    und den 2ten teil mit der while schleife bekomme ich noch weniger hin


  • Mod

    Wo ist eigentlich groß das Problem?
    http://ideone.com/DxNhuT
    Alles wie gewollt.



  • nicht ganz .. aber vllt kann ich da ewtwas für meine zwecke gebrauchen, danke



  • @ SeppJ

    der link, den du gepostet hast ist gut aber nicht meine aufgabe.. leider. scheint wohl doch nicht so leicht zu sein



  • Jan1989 schrieb:

    @ SeppJ

    der link, den du gepostet hast ist gut aber nicht meine aufgabe.. leider. scheint wohl doch nicht so leicht zu sein

    Das brauchst du doch nur noch auszubauen.



  • wenn ich das ausbaue, bin ich genauso weit, wie ich es oben gepostet habe.. kommt es dann zur rechnung mit k, stört wieder die null. weil 0 mal irgendwas ja bekanntlich 0 ist



  • Nö, das siehst du verkehrt.
    Was du gepostet hast ist schon vom Ansatz her falsch, jetzt hast du ne vernünftige Basis, nämlich die Berechnung der Fakultät.



  • vom ansatz stimmt meins, das kann ich ja im compiler prüfen.

    dann verstehst du die aufgabe nicht ganz.. schade. habe gehofft, dass mir im forum einer helfen kann.

    oder was stimmt denn deiner meinung nach bei meinem ansatz nicht.



  • Das würdest du schon sehen, wenn du wenigstens den Ansatz lauffähig machen und dir dann die Werte anschauen würdest.
    Tipp: nicht initialisierte Variable ergeben nicht vorhersehbare, nicht berechenbare Ergebnisse.
    Vielleicht kommst du dann auch darauf, dass du gar nichts mit 0 multiplizieren brauchst.



  • sprich doch in klaren worten. was kann ich bei meinem programm verändern, dass es läuft.? in der forschleife muss K=0 stehen, das ist aufgabenstellung


  • Mod

    Tipp: Mein Programm ist in der Tat ein guter Ansatz und mit Bedacht so gewählt, dass du darauf aufbauen kannst. Ein bisschen Eigeninitiative musst du schon zeigen. Schau dir die wenigen Zeilen an und verstehe, was ich warum anders mache und wieso ich zu jedem k die passende Fakultät erhalte und du nicht.



  • sollte das stimmen, was du sagst und du meine aufgebe verstehst, komme ich nicht auf den springenden punkt, wo sich deins von meinem im grundaufbau unterscheidet.

    ps: eingeninitiative zeige ich seit 3 wochen und weiter als nun bin ich nicht.. also sitze nun insgesamt vllt 20 h dran. montag ist abgabe ..


Anmelden zum Antworten