function r = uniform_dataset ( m, n, seed ) %*****************************************************************************80 % %% UNIFORM_DATASET generates a uniform dataset and writes it to a file. % % Discussion: % % UNIFORM_DATASET generates a uniform random data and writes it to a file. % % Usage: % % r = uniform_dataset ( m, n, seed ) % % where % % * M, the spatial dimension, % * N, the number of points to generate, % * SEED, the seed, a positive integer. % * R is the M by N array created. % % creates an M by N uniform random dataset and writes it to the % file "uniform_M_N.txt". % % Licensing: % % This code is distributed under the GNU LGPL license. % % Modified: % % 05 December 2009 % % Author: % % John Burkardt % timestamp ( ); fprintf ( 1, '\n' ); fprintf ( 1, 'UNIFORM_DATASET\n' ); fprintf ( 1, ' MATLAB version\n' ); fprintf ( 1, '\n' ); fprintf ( 1, ' Generate a uniform pseudorandom dataset.\n' ); fprintf ( 1, '\n' ); fprintf ( 1, ' The program requests input values from the user:\n' ); fprintf ( 1, '\n' ); fprintf ( 1, ' * M, the spatial dimension,\n' ); fprintf ( 1, ' * N, the number of points to generate,\n' ); fprintf ( 1, ' * SEED, a seed for the random number generator.\n' ); fprintf ( 1, '\n' ); fprintf ( 1, ' The program generates the data and writes it to the file\n' ); fprintf ( 1, '\n' ); fprintf ( 1, ' uniform_M_N.txt\n' ); fprintf ( 1, '\n' ); fprintf ( 1, ' where "M" and "N" are the numeric values.\n' ); % % Get the spatial dimension. % if ( nargin < 1 ) fprintf ( 1, '\n' ); m = input ( ' Enter the spatial dimension M: ' ); end fprintf ( 1, '\n' ); fprintf ( 1, ' Spatial dimension M = %d\n', m ); % % Get the number of points. % if ( nargin < 2 ) fprintf ( 1, '\n' ); n = input ( ' Enter the number of points N: ' ); end fprintf ( 1, ' Number of points N = %d\n', n ); % % Get the seed. % if ( nargin < 3 ) fprintf ( 1, '\n' ); seed = input ( ' Enter the seed: ' ); end fprintf ( 1, ' The seed = %d\n', seed ); % % Compute the data. % [ r, seed ] = r8mat_uniform_01 ( m, n, seed ); % % Write it to a file. % output_filename = ... strcat ( 'uniform_', num2str ( m ), '_', num2str ( n ), '.txt' ); r8mat_write ( output_filename, m, n, r ); fprintf ( 1, '\n' ); fprintf ( 1, ' The data was written to the file "%s".\n', ... output_filename ); % % Terminate. % fprintf ( 1, '\n' ); fprintf ( 1, 'UNIFORM_DATASET:\n' ); fprintf ( 1, ' Normal end of execution.\n' ); fprintf ( 1, '\n' ); timestamp ( ); return end function r8mat_write ( output_filename, m, n, table ) %*****************************************************************************80 % %% R8MAT_WRITE writes an R8MAT file. % % Licensing: % % This code is distributed under the GNU LGPL license. % % Modified: % % 11 August 2009 % % Author: % % John Burkardt % % Parameters: % % Input, string OUTPUT_FILENAME, the output filename. % % Input, integer M, the spatial dimension. % % Input, integer N, the number of points. % % Input, real TABLE(M,N), the points. % % % Open the file. % output_unit = fopen ( output_filename, 'wt' ); if ( output_unit < 0 ) fprintf ( 1, '\n' ); fprintf ( 1, 'R8MAT_WRITE - Error!\n' ); fprintf ( 1, ' Could not open the output file.\n' ); error ( 'R8MAT_WRITE - Error!' ); return; end % % Write the data. % % For smaller data files, and less precision, try: % % fprintf ( output_unit, ' %14.6f', table(i,j) ); % for j = 1 : n for i = 1 : m fprintf ( output_unit, ' %24.16f', table(i,j) ); end fprintf ( output_unit, '\n' ); end % % Close the file. % fclose ( output_unit ); return end function [ r, seed ] = r8mat_uniform_01 ( m, n, seed ) %*****************************************************************************80 % %% R8MAT_UNIFORM_01 returns a unit pseudorandom R8MAT. % % Licensing: % % This code is distributed under the GNU LGPL license. % % Modified: % % 21 September 2006 % % Author: % % John Burkardt % % Reference: % % Paul Bratley, Bennett Fox, Linus Schrage, % A Guide to Simulation, % Second Edition, % Springer, 1987, % ISBN: 0387964673, % LC: QA76.9.C65.B73. % % Bennett Fox, % Algorithm 647: % Implementation and Relative Efficiency of Quasirandom % Sequence Generators, % ACM Transactions on Mathematical Software, % Volume 12, Number 4, December 1986, pages 362-376. % % Pierre L'Ecuyer, % Random Number Generation, % in Handbook of Simulation, % edited by Jerry Banks, % Wiley, 1998, % ISBN: 0471134031, % LC: T57.62.H37. % % Peter Lewis, Allen Goodman, James Miller, % A Pseudo-Random Number Generator for the System/360, % IBM Systems Journal, % Volume 8, Number 2, 1969, pages 136-143. % % Parameters: % % Input, integer M, N, the number of rows and columns in the array. % % Input, integer SEED, the integer "seed" used to generate % the output random number. % % Output, real R(M,N), an array of random values between 0 and 1. % % Output, integer SEED, the updated seed. This would % normally be used as the input seed on the next call. % i4_huge = 2147483647; if ( seed == 0 ) fprintf ( 1, '\n' ); fprintf ( 1, 'R8MAT_UNIFORM_01 - Fatal error!\n' ); fprintf ( 1, ' Input SEED = 0!\n' ); error ( 'R8MAT_UNIFORM_01 - Fatal error!' ); end for j = 1 : n for i = 1 : m seed = floor ( seed ); seed = mod ( seed, i4_huge ); if ( seed < 0 ) seed = seed + i4_huge; end k = floor ( seed / 127773 ); seed = 16807 * ( seed - k * 127773 ) - k * 2836; if ( seed < 0 ) seed = seed + i4_huge; end r(i,j) = seed * 4.656612875E-10; end end return end function timestamp ( ) %*****************************************************************************80 % %% TIMESTAMP prints the current YMDHMS date as a timestamp. % % Licensing: % % This code is distributed under the GNU LGPL license. % % Modified: % % 14 February 2003 % % Author: % % John Burkardt % t = now; c = datevec ( t ); s = datestr ( c, 0 ); fprintf ( 1, '%s\n', s ); return end