[C++] Funktion für die Simpsonregel

ganymed1610

Cadet 2nd Year
Registriert
Dez. 2002
Beiträge
16
Ich muss ein C-Programm schreiben, das für eine stetige Funktion das Integral näherungsweise mit den Quadraturformeln Trapezregel und Simpsonregel berechnet. Das Programm ansich ist dabei gar nicht das Problem, weil ich alle nötigen Formeln habe. Allerdings habe ich Probleme damit die Formeln in C umzusetzen. Das ganze muss ja dann mit einer Schleife gelöst werden. Für die Trapezregel habe ich diese bereits in Erfahrung bringen können. Aber bei der Simpsonregel habe ich absolut keinen Plan wie ich das jetzt umsetzen soll.

Hier sind die Formeln für die Trapez- und Simpsonregel:
Quadraturformeln1.jpg


Das ist die passende Funktion für die Trapezregel:
Code:
double trapez(double a, double b, int n)
{
 double h,x,T=0;
 int i=0;
 h=(b-a)/n;
 for(i=1; i<=n-1; i++)
    {
     x=a+i*h;
     T=T+2.0*f(x);
    }

  T=T+f(a)+f(b);
  T=T*((b-a)/(2*n));

  return T;
}

a und b sind die Intervallgrenzen, n ist die Anzahl der Unterteilungen (je größer n desto genauer das Ergebnis), h ist irgendeine Stützstelle die wohl auch benötigt wird, die Funktion f gibt den jeweiligen Sinuswert der Variable zurück, die Werte werden im Hauptprogramm eingelesen und dann dieser Funktion übergeben

Ich hoffe es kann mir einer helfen eine entsprechende Funktion für die Simpsonregel zu finden.
 
Schau dir einmal diese internet-seite an:
http://sites.inka.de/picasso/Wenz/integral.htm
Und vor allem diese "vereinfachte" formel. Mit dieser versteht man die "regelmäßigkeit" dahinter:
Image316.gif


EDIT: Hab jetzt noch schnell eine C-Funktion dazu geschrieben. Ich habe sie nicht getestet, aber eigentlich müsste sie schon stimmen.

Code:
double simpson(double a, double b, int n)
{
   double h=(b-a)/(2*n), Summe0=0, Summe1=0, Summe2=0;
   for (int i=0; i<=2*n; ++i)
   {
      if ((i==0) || (i==2*n))
        Summe0+=f(a+i*h);      
      if (i%2==1)
        Summe1+=f(a+i*h);
      if ((i%2==0) && (i!=2*n))
        Summe2+=f(a+i*h);    
   }
   
   return (h/3)*(Summe0+4*Summe1+2*Summe2);
}
 
Zuletzt bearbeitet:
Vielen Dank, deine Funktion funktioniert einwandfrei. Endlich kann ich das Programm fertigstellen.


@ Green Mamba
Ich verstehe schon, dass es nicht toll ist seine Aufgaben an andere weiterzuleiten, aber ich habe mich schon mit meinem Problem auseinandergesetzt. Nur bin ich einfach nicht weitergekommen und habe auf diesem Weg nach Hilfe gesucht. Zudem habe ich ja auch ein konkretes Problem und habe nicht einfach nach dem kompletten Programm gefragt.
 
Zurück
Oben