riemann integral berechnen von ober und untersummen



  • kennt jemand zufällig ein programm, mit dem man die obersummen und untersummen
    von einer funktion z.B -x^2+4 im intervall z.B [o;2] berechnen kann????
    irgendwie soll das ganze nur auf einer schleife basieren......



  • Erst mal überlegst Du, wie Du ein allgemeines Rechteckverfahren programmieren kannst: Du teilst dein Intervall [0,2] in N Rechtecke, wobei jedes Rechteck 2/N Einheiten breit ist. Die Höhe der Rechtecke hängt nun 'irgendwie' von den Funktionswerten in dem Bereich ab. Deine Funktion ist auf [0,2] streng monoton fallend, also ist der Funktionswert am linken Rand jedes Rechtecks größer als am rechten Rand, also ist der Funktionswert am linken Rand der, den Du für die Obersumme benutzt, der am linken Rand, für die Untersumme.

    for (c=0; c < 2; c+= 2.0/N) summe += f(c);
    summe *= 2.0/N;

    ist dann im wesentlichen dein Verfahren für die Obersumme.



  • mmhhh,sagt mir jetzt mal so gar nicht´s.......ich dachte eher daran, die teilintervalle so zu berechnen : x*= (b - a )/ n
    a wäre meine 0 und b meine 2...... n wäre die anzahl........
    Formel für die Untersummen S_u = m1 * x* + m2 * x* usw....
    für die Obersummen S-o = M1 * x* + M2 * x*.....usw

    wenn die differenz zwischen ober und untersumme < als mein x* ist soll das programm enden,andernfalls weiterrechnen.........

    nur wie wird das insgesamt ausgedrückt????
    keine grafischische ausgabe sondern lediglich
    ne text ausgabe.... printf(" Die Gesamtobersumme im Intervall beträgt : .....")
    printf("Die Gesamtuntersumme .......
    getch() ;



  • Hier: http://www.programmersheaven.com/zone3/cat415/25690.htm
    Sieh dir den Sourcecode mal an.



  • sieht sehr nett aus......nur es funktioniert leider nicht......also muss was neues her... :-))



  • Wieso funktioniert es nicht?



  • keine ahnung warum, aber ich habe oben auch ne falsche angabe gemacht.....
    das programm ,soll beendet werden wenn eine sog. vorher eingegebene toleranz grenze erreicht ist

    do
    {....}

    while
    {So - su > t*
    }

    naja, probieren geht über studieren werde wohl noch weiter überlegen müssen...



  • so hier ne ordentliche und nachvollziebare lösung des problem´s :-))

    #include <stdio.h>
    > #include <math.h>

    > float f(float x)
    > {
    > return(-x*x + 4);
    > }

    > float max(float a, float b)
    > {
    > if (a < b) { return(b); } else { return(a); }
    > }

    > float min(float a, float b)
    > {
    > if (a < b) { return(a); } else { return(b); }
    > }

    > int main()
    > {
    > float a;
    > float b;
    > float T;
    > printf("Dieses Programm berechnet Ober und Untersummen der Funktion
    > -x^2 + 4\n");
    > printf("Geben Sie die linke Intervallgrenze ein: ");
    > scanf("%g",&a);
    > printf("Geben Sie die rechte Intervallgrenze ein: ");
    > scanf("%g",&b);
    > printf("Geben Sie die gewuenschte Genauigkeit ein: ");
    > scanf("%g",&T);

    > if (a >= b)
    > {
    > printf("Fehler: Linke Intervallgrenze groesser als rechte
    > Intervallgrenze\n");
    > return(1);
    > }

    > float obersumme;
    > float untersumme;
    > long anzahlIntervalle = 10;
    > do {
    > float intervallLaenge = (b-a)/anzahlIntervalle;
    > obersumme = 0.0;
    > untersumme = 0.0;
    > int i;
    > for (i = 0;i < anzahlIntervalle;i++)
    > {
    > float x = a + iintervallLaenge;
    > float y1 = f(x);
    > float y2 = f(x + intervallLaenge);
    > float oberwert = max(y1, y2);
    > float unterwert = min(y1, y2);
    > obersumme += oberwert
    intervallLaenge;
    > untersumme += unterwert*intervallLaenge;
    > }
    > anzahlIntervalle = anzahlIntervalle * 2;
    > printf("Anzahlintervalle = %lu obersumme = %f untersumme = %f\n",
    > anzahlIntervalle, obersumme, untersumme);
    > } while (obersumme - untersumme > T);
    > printf("Obersumme = %f\n", obersumme);
    > printf("Untersumme = %f\n", untersumme);
    > }



  • dazu gaebs ne menge zu sagen, aber wenn das deiner definition von ordentlich genuegt...


Anmelden zum Antworten