add.js

/**
 * @classdesc A library for adding a scalar/array/matrix to a scalar/array/matrix. This library will always return matrix type.   
 * @class matrix/add
 * @hideconstructor
 */

var U = require('./mUtils');
var matrix = require('../matrix');

//Add a scalar to a matrix 
function matrix_add_scalar(A,c)
{
		var M = [];
		
        for(var i = 0; i < A.length; i++)
        {
            M[i] = [];
            for(var j = 0; j< A[0].length; j++)
            {
                M[i][j] = A[i][j] + c;

            }
        }

		return M;
}
module.exports.matrix_add_scalar = matrix_add_scalar;


//Generic add function that handles matrix or scalar 
function matrix_add(A,B)
{
		var M = [];
		var returnVal = 'Dimension Error';

		if(U.isScalar(B))
		{
			B = U.getScalar(B);
			returnVal = matrix_add_scalar(A,B);
		}else if(U.isScalar(A)){
			A = U.getScalar(A);
			returnVal = matrix_add_scalar(B,A);
		}
		else if(U.is2D(A) && U.is2D(B) && U.matrix_compare_size(A,B)) 
		{
			for(var i =0; i<A.length; i++)
			{
				M[i] = [];
				for(var j = 0; j<A[0].length;j++)
				{
					M[i][j] = A[i][j]+B[i][j];
				}
				returnVal = M;  
			}
		}
		else
		{
			throw 'Dimension Error!';
		}
		return returnVal; 
}

//Add static method  
matrix.add = function(A,B)
{
    return new matrix(matrix_add(matrix.make(A).value,matrix.make(B).value));
}

/**
 * Add a scalar/array/matrix to self
 * @function add
 * @param {scalar/array/matrix} x - Adds a scalar/array/matrix to self
 * @returns {matrix}
 * @memberof matrix/add
 * @example // Add a scalar to a matrix
 * var M = require('./src/matrix_lib'); // or require('math-script')
 * var A = M.zeros(2,2); // Create 2x2 matrix of zeros
 * A = A.add(1); // Add scalar
 * console.log(A.print())
 * //Result 
 * //1.000           1.000
 * //1.000           1.000
 * 
 * // Add a matrix to a matrix
 * var B = M.ident(2,2).add(A) // Add "A" to a 2x2 identity matrix
 * console.log(B.print())
 * //Result
 * //2.000           1.000
 * //1.000           2.000
 * @example
 * // Use add in execute environment  
 * var M = require('./src/matrix_lib'); // or require('math-script')
 * M.execute(function(M){
 * 
 * var A = M.make([[1,2],[3,4]]); // Create a 2x2 matrix
 * var B = A + A + 1; // Add matrices and scalars together 
 * console.log(B.print())
 * 
 * });
 * //Result
 * //3.000           5.000
 * //7.000           9.000
 */
matrix.prototype.add = function(x)
{
    var M = matrix_add(this.value,matrix.make(x).value);
    return matrix.make(M);
};

matrix.prototype.__plus = function(x)
{
    var M = matrix_add(this.value,matrix.make(x).value);
    return matrix.make(M);
};

// Scalar overload support
matrix.numberOverrides.__plus = function(x){
	return matrix.make(x).add(this);
}