//  -----------------------------------------------------------------
//  -------  Numerische Mathematik  Prüfung 3.22     ----------------
//  -------  Ib 03                                   ----------------
//  -------  Gauss-Quadratur     (für n=4)           ----------------
//  -------                                          ----------------
//  -------  2005 Februar 3     Manfred Vogel        ----------------
//  -----------------------------------------------------------------


class GaussQuadratur {

	// Integrationsintervall [a, b]
	static final double a = 0.0;
	static final double b = Math.PI;
	
	// Ordnung, Stützstellen und Gewichte der Gauss-Quadratur
	static final int n = 4;
	static final double grid[]   = { 0.8611363116, 0.3399810436, -0.3399810436, -0.8611363116 };
	static final double weight[] = { 0.3478548451, 0.6521451549,  0.6521451549,  0.3478548451 };


	// definiert die zu integrierende Funktion f
	static double f(double x)
	{
		if( x==0.0) return 1.0;
		return Math.sin(x) / x ;
	}


	// implementiert die Gauss-Quadratur
	static double gauss(double a, double b, int n)
	{
		double sum=0.0;
		for (int j=0; j<n ; j++)
		{
			sum += weight[j] * f( ((b-a)*grid[j]+b+a)/2.0 );
		}
		return sum*(b-a)/2.0;
	}
	

	public static void main(String[] args)
	{
		double integral = gauss(a, b, n);
		
		System.out.println("\n\n");
		System.out.println(" ** Gauss-Quadratur 4. Ordnung ** " + "\n");
		System.out.print  ("    Integral( f(x), x=a..b ) = " + integral);
		System.out.println("\n\n");
	}
}