# include # include # include # include "test_lls.h" # include "r8lib.h" int main ( ); void test01 ( ); /******************************************************************************/ int main ( ) /******************************************************************************/ /* Purpose: MAIN is the main program for TEST_LLS_TEST. Discussion: TEST_LLS_TEST tests the TEST_LLS library. Licensing: This code is distributed under the MIT license. Modified: 07 September 2012 Author: John Burkardt */ { timestamp ( ); printf ( "\n" ); printf ( "TEST_LLS_TEST\n" ); printf ( " C version\n" ); printf ( " Test the TEST_LLS library.\n" ); printf ( " This test also requires the R8LIB library.\n" ); test01 ( ); /* Terminate. */ printf ( "\n" ); printf ( "TEST_LLS_TEST\n" ); printf ( " Normal end of execution.\n" ); printf ( "\n" ); timestamp ( ); return 0; } /******************************************************************************/ void test01 ( ) /******************************************************************************/ /* Purpose: TEST01 summarizes the test data. Licensing: This code is distributed under the MIT license. Modified: 07 September 2012 Author: John Burkardt */ { double *a; double *b; double b_norm; int i; int j; int m; int n; int prob; int prob_num; double *r; double r_norm; double *x; double x_norm; printf ( "\n" ); printf ( "TEST01\n" ); printf ( " Get each least squares test and compute the maximum residual.\n" ); printf ( " The L2 norm of the residual MUST be no greater than\n" ); printf ( " the L2 norm of the right hand side, else 0 is a better solution.\n" ); prob_num = p00_prob_num ( ); printf ( "\n" ); printf ( " Number of problems = %d\n", prob_num ); printf ( "\n" ); printf ( " Index M N ||B|| ||X|| ||R||\n" ); printf ( "\n" ); for ( prob = 1; prob <= prob_num; prob++ ) { m = p00_m ( prob ); n = p00_n ( prob ); a = p00_a ( prob, m, n ); b = p00_b ( prob, m ); x = p00_x ( prob, n ); r = ( double * ) malloc ( m * sizeof ( double ) ); for ( i = 0; i < m; i++ ) { r[i] = - b[i]; for ( j = 0; j < n; j++ ) { r[i] = r[i] + a[i+j*m] * x[j]; } } b_norm = r8vec_norm ( m, b ); x_norm = r8vec_norm ( n, x ); r_norm = r8vec_norm ( m, r ); printf ( " %5d %4d %4d %12g %12g %12g\n", prob, m, n, b_norm, x_norm, r_norm ); free ( a ); free ( b ); free ( r ); free ( x ); } return; }