real IntegraleDeterministico::gauss() { resetIntegral(); real omega1 = ((real)128.)/225; real omega23 = ((322+13*sqrt((real)70))/900); real omega45 = ((322-13*sqrt((real)70))/900); real xi23 = ( ((real)1) /3)*sqrt(5-2*sqrt( (real)(10./7) )); real xi45 = ( ((real)1) /3)*sqrt(5+2*sqrt( (real)(10./7) )); for (int i = 0; i < intervalli(); i++) { real c = (x_i(i+1)+x_i(i))/2.; real m = (x_i(i+1)-x_i(i))/2.; // http://mathworld.wolfram.com/Legendre-GaussQuadrature.html add( m*omega1*f_test(c) ); // root = 0 add( m*omega23*f_test(c - m*xi23) ); add( m*omega23*f_test(c + m*xi23) ); add( m*omega45*f_test(c - m*xi45) ); add( m*omega45*f_test(c + m*xi45) ); } return getIntegral(); }
int main(void) { if( test(-1) != 1 ) fail( __LINE__ ); if( test(0) != 1 ) fail( __LINE__ ); if( test(1) != 1 ) fail( __LINE__ ); if( u_test(-1) != 1 ) fail( __LINE__ ); if( u_test(0) != 1 ) fail( __LINE__ ); if( u_test(1) != 1 ) fail( __LINE__ ); if( a_test(-2) != 1 ) fail( __LINE__ ); if( a_test(-1) != 1 ) fail( __LINE__ ); if( a_test(0) != 1 ) fail( __LINE__ ); if( b_test(INT_MIN+1) != 1 ) fail( __LINE__ ); if( b_test(INT_MIN) != 1 ) fail( __LINE__ ); if( b_test(INT_MAX) != 1 ) fail( __LINE__ ); if( c_test(INT_MAX-1) != 1 ) fail( __LINE__ ); if( c_test(INT_MAX) != 1 ) fail( __LINE__ ); if( c_test(INT_MIN) != 1 ) fail( __LINE__ ); if( d_test(INT_MAX-1) != 1 ) fail( __LINE__ ); if( d_test(INT_MAX) != 1 ) fail( __LINE__ ); if( d_test(2) != 1 ) fail( __LINE__ ); if( e_test(INT_MIN+1) != 1 ) fail( __LINE__ ); if( e_test(INT_MIN) != 1 ) fail( __LINE__ ); if( e_test(INT_MAX) != 1 ) fail( __LINE__ ); if( f_test(INT_MAX-1) != 1 ) fail( __LINE__ ); if( f_test(INT_MAX) != 1 ) fail( __LINE__ ); if( f_test(INT_MIN) != 1 ) fail( __LINE__ ); _PASS; }
real IntegraleDeterministico::simpson() { resetIntegral(); for (int i = 0; i < intervalli()-1; i+=2) { add( h()/3 * (f_test(x_i(i)) + 4*f_test(x_i(i+1)) + f_test(x_i(i+2)) ) ); } return getIntegral(); }
real IntegraleDeterministico::trapezi() { resetIntegral(); for (int i = 0; i < intervalli(); i++) { add( h()/2 * (f_test(x_i(i)) + f_test(x_i(i+1)) ) ); } return getIntegral(); }
int main(void) { f_init(); while (f_test()) { sleep(1); } return 0; }