Angewandte Mathematik

Simpson Regel

N-Fache Simpson Regel

ein kleines Programm zur Simulation.
#include <stdio.h>
#include <math.h>

#define FUNC(x) (*func)(x)


double simpson(double (*func)(double),double a, double b, int N)
/* Uebergabe einer Funktion, Intervall Anfang a und Ende b, halbe Anzahl
   der Stuetzstellen N, Ergebnis ist das Integral nach der Simpson-Regel */

{
  int n=0,M=2*N;
  /* Zaehler n, M Anzahl der Intervalle */

  double x=a, I=0, del=(b-a)/M;
  /* Intervalllaenge del */

  while(n<M)
    {
      I=I+FUNC(x)+4*FUNC(x+del)+FUNC(x+2*del);
      x+=2*del;
      n+=2;
    }
  I=I/(3*M);
  /* Berechnung des Integrals nach der Simpson-Regel */
  return I;
}

int main()
{
  double I;
  I=simpson(exp,0.0,1.0,50);
  /* Beispiel mit Funktion exp, Intervall (0,1) und 2*50 Stuetzstellen */

  printf("%10.10f \n",I);

  return 0;
}

 

 

ein kleines Programm zur Simulation.

#include <stdio.h>
#include <math.h>
double funk(double);
void ittrapez(int,double,double);
void itsimpson(int,double,double);

double funk(double x)
{
return (exp(x));
}

void ittrapez(int N, double a, double b)
{
int I;
double sum;
sum=0.5*(funk(a)+funk(b));
for(I=1;I<=N-1;I++) sum=sum+funk(a+(I*(b-a)/N));
sum=sum*(b-a)/N;
printf("Die %.2i-te iterierte Trapez-Naeherung lautet: % .12E.\n",N,sum);
}

void itsimpson(int N, double a, double b)
{
int I;
double sum;
sum=(funk(a)+funk(b))/3.0;
for(I=0;I<=N-1;I++) sum=sum+(4.0*funk(a+((2.0*I+1.0)*(b-a)/(2.0*N)))/3.0);
for(I=1;I<=N-1;I++) sum=sum+(2.0*funk(a+(2.0*I*(b-a)/(2.0*N)))/3.0);
sum=sum*(b-a)/(2.0*N);
printf("Die %.2i-te iterierte Simpson-Naeherung lautet: % .12E.\n",N,sum);
}

/* Hauptprogramm */
int main(void)
{
double a,b;
a=0.0;
b=1.0;
printf("\n");
ittrapez(1,a,b);
ittrapez(4,a,b);
ittrapez(8,a,b);
ittrapez(20,a,b);
printf("\n");
printf("\n");
itsimpson(1,a,b);
itsimpson(4,a,b);
itsimpson(8,a,b);
itsimpson(20,a,b);
printf("\n");
return(0);
}