Kann mir jemand sagen, wo der Fehler im Programm ist? Bei Aufruf stürzzt es ab
Es ist ein C Programm
Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double betrag(double x)
{
if (x>=0)
{ return x;}
else
{ return (-x);}
}
double wurzel(double x)
{
x = pow(x, 0.5);
return (x);
}
void Romberg_Integration(double a, double b, int imax, double (*f)(double), double T[imax][imax],double wert)
{
int i,j;
double h[imax];
double x[imax];
int n[imax];
double summe;
double F[imax][imax];
/*definiere Schrittweitenfolge*/
h[0] = b-a;
for(i=1; i<imax; i++)
{
h[i] = pow(2,(-i));
h[i] = h[i] * h[0];
}
/*definiere Anzahl der Stützstellen*/
for(i=0; i<imax; i++)
{
n[i] = pow(2,i) + 1;
}
/*definiere Stützstellen*/
x[0]= a;
for(i=1; i<n[i]; i++)
{
x[i] = a + i*h[i];
x[n[i]] = b;
}
for(i=1; i<n[i]-1; i++)
{
summe += (*f) (x[i]);
}
/*definiere erste Spalte der Matrix(zusammengesetzte Trapezregel)*/
for(i=0; i<imax; i++)
{
T[i][0] = (*f) (a) + (*f) (b) + 2*summe;
T[i][0] *= (h[i]/2);
}
/*definiere übrigen Näherungen des Schemas*/
for(i=1; i<imax; i++)
{
for(j=1; j<=i; j++)
{
T[i][j] = pow(4,j) * T[i][j-1] - T[i-1][j-1] ;
T[i][j] = T[i][j] / (pow(4,j)-1) ;
}
}
/*Extrapolationsschema ausgeben*/
printf("Die Nährungen für das Integral von a nach b von f(x)dx lauten: \n");
for(i=0; i<imax; i++)
{
for(j=0; j<=i; j++)
{
printf(" %lf ", T[i][j], i,j);
}
printf("\n");
}
printf("\n");
/*absolute Fehler der Näherungen*/
for(i=0; i<imax; i++)
{
for(j=0; j<=i; j++)
{
F[i][j] = T[i][j] - wert;
F[i][j] = betrag(F[i][j]);
}
}
printf("Die absoluten Fehler der Näherungen betragen: \n");
for(i=0; i<imax; i++)
{
for(j=0; j<=i; j++)
{
printf(" %lf ", F[i][j], i,j);
}
printf("\n");
}
printf("\n");
}
double funktion1(double x)
{
x = pow(x,1/8);
return x;
}
double funktion2(double x)
{
x = 1 + x*x;
x = 1/x;
return x;
}
/*double funktion3(double x)
{
double const pi = 3.141592654;
x = ( sin(x) / (wurzel(2) );
x = exp (x);
x = x * ( 1/(2*pi));
return x;
}*/
int main()
{
double const pi = 3.141592654;
int imax = 5;
double a1 = 0;
double b1 = 1;
double wert1 = 8/9;
double a2 = -1;
double b2 = 1;
double wert2 = pi/2;
double a3 = 0;
double b3 = 2*pi;
double wert3 = 1.1289609;
double T[imax][imax];
Romberg_Integration(a1,b1,5,funktion1,T,wert1);
Romberg_Integration(a2,b2,5,funktion2,T,wert2);
// Romberg_Integration(a3,b3,5,funktion3,T,wert3);
system("PAUSE");
return 0;
}