using System; public class HPLNotParallel { public static void Main( string[] args ) { if ( args.Length == 0 ) { Console.WriteLine( "Usage: hplnotparallel.exe " ); return; } int n = Int32.Parse( args[0] ); int maxRandNum = 9; double[,] a = new double[n,n]; // initialize matrix Random rand = new Random(); for ( int i = 0; i < n; i++ ) for ( int j = 0; j < n; j++ ) a [i,j] = (i + j + 1) / (j + 1); //Math.Round( rand.NextDouble() * maxRandNum ); double[,] l = new double[n,n]; double[,] u = new double[n,n]; double[] b = new double[n]; double[] y = new double[n]; double[] x = new double[n]; for ( int i = 0; i < n; i++ ) b [i] = 1 << i; //Math.Round( rand.NextDouble() * maxRandNum ); // Calculating l and u matrixes for ( int i = 0; i < n; i++ ) { for ( int j = 0; j < n; j++ ) { if ( i == j ) { // Main diagonal u [i,j] = 1; l [i,j] = a [i,j]; for ( int k = 0; k < i; k++ ) l [i,j] -= l [i,k] * u [k,j]; } else if ( i < j ) { // Above diagonal l [i,j] = 0; u [i,j] = a [i,j]; for ( int k = 0; k < i; k++ ) u[i,j] -= l [i,k] * u [k,j]; u [i,j] = u [i,j] / l [i,i]; } else { // Beyond diagonal u [i,j] = 0; l [i,j] = a [i,j]; for ( int k = 0; k < j; k++ ) l [i,j] -= l [i,k] * u [k,j]; } } // Calculating y [i] y [i] = b[i]; for ( int k = 0; k < i; k++ ) y [i] -= l [i,k] * y [k]; y [i] = y[i] / l [i,i]; } // Calculating x [i] for ( int i = n - 1; i >= 0; i-- ) { x [i] = y [i]; for ( int j = n - 1; j > i; j-- ) x [i] -= u [i,j] * x [j]; x [i] = x [i] / u [i, i]; } PrintVector( x ); } public static void PrintMatrix( double[,] a, int h, int w ) { for ( int i = 0; i < h; i++ ) { for ( int j = 0; j < w; j++ ) Console.Write( "\t{0:0.00}", a[i, j] ); Console.WriteLine(); } Console.WriteLine(); } public static void PrintVector( double[] a ) { for ( int i = 0; i < a.Length; i++ ) Console.Write( "\t{0:0.00}", a[i] ); Console.WriteLine(); } }