gauss-test.js (2080B)
1 var vows = require('vows'); 2 var assert = require('assert'); 3 var suite = vows.describe('jStat'); 4 5 require('../env.js'); 6 7 suite.addBatch({ 8 'linearalgebra': { 9 'topic': function() { 10 return jStat; 11 }, 12 // See "gauss elimination {{1, -3, 1, 4}, {2, -8, 8, -2}, {-6, 3, -15, 9}}" 13 // on Wolfram Alpha 14 'gauss elimination example 1': function(jStat) { 15 var A = [[1, -3, 1], [2, -8, 8], [-6, 3, -15]]; 16 var B = [[4], [-2], [9]]; 17 var tol = 0.000001; 18 var result = jStat.gauss_elimination(A, B); 19 assert.epsilon(tol, result[0], 3); 20 assert.epsilon(tol, result[1], -1); 21 assert.epsilon(tol, result[2], -2); 22 }, 23 // See "gauss elimination {{1, 1, 3}, {3, -2, 4}}" on Wolfram Alpha 24 'gauss elimination example 2': function(jStat) { 25 var A = [[1, 1], [3, -2]]; 26 var B = [[3], [4]]; 27 var tol = 0.000001; 28 var result = jStat.gauss_elimination(A, B); 29 assert.epsilon(tol, result[0], 2); 30 assert.epsilon(tol, result[1], 1); 31 }, 32 //Sanity check, should not do anything if already solved 33 'gauss elimination example 3': function(jStat) { 34 var A = jStat.identity(4); 35 var B = [[1], [2], [3], [4]]; 36 var result = jStat.gauss_elimination(A, B); 37 var tol = 0.000001; 38 assert.epsilon(tol, result[0], 1); 39 assert.epsilon(tol, result[1], 2); 40 assert.epsilon(tol, result[2], 3); 41 assert.epsilon(tol, result[3], 4); 42 }, 43 // Use "{{1,1,1,1,10}, {0,1,1,1,9},{0,0,1,1,7},{0,0,0,1,4}}" on Wolfram 44 // Since the matrix already has a lower left hand zero triangle, this just 45 // tests the back-substitution portion of the algorithm 46 'gauss elimination example 4': function(jStat) { 47 var A = [[1,1,1,1],[0,1,1,1],[0,0,1,1],[0,0,0,1]]; 48 var B = [[10], [9], [7], [4]]; 49 var result = jStat.gauss_elimination(A, B); 50 var tol = 0.000001; 51 assert.epsilon(tol, result[3], 4); 52 assert.epsilon(tol, result[2], 3); 53 assert.epsilon(tol, result[1], 2); 54 assert.epsilon(tol, result[0], 1); 55 } 56 } 57 }); 58 59 suite.export(module);