made with requirebin
Last active
September 30, 2015 21:39
-
-
Save fibo/345763d95f093b9d9350 to your computer and use it in GitHub Desktop.
requirebin sketch
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Code from http://g14n.info/algebra/#quick-start | |
// This is a 60 seconds tutorial to get your hands dirty with algebra. | |
///////////////////////////////////////////////////////////////////// | |
// First of all, import algebra package. | |
var algebra = require('algebra'); | |
/// Scalars | |
/////////// | |
// Use the Real numbers as scalars. | |
var R = algebra.Real; | |
// Every operator is implemented both as a static function and as an object method. | |
// Static operators return raw data, while class methods return object instances. | |
// Use static addition operator to add three numbers. | |
console.log(R.add(1, 2, 3)); // 1 + 2 + 3 = 6 | |
// Create two real number objects: x = 2, y = -2 | |
var x = new R(2), | |
y = new R(-2); | |
// The value of *r* is the result of x multiplied by y. | |
var r = x.mul(y); | |
console.log(r.data); // 2 * (-2) = -4 | |
console.log(x.data); // still 2 | |
console.log(y.data); // still -2 | |
// Raw numbers are coerced, operators can be chained when it makes sense. | |
// Of course you can reassign x, for example, x value will be 0.1: x -> x + 3 -> x * 2 -> x ^-1 | |
x = x.add(3).mul(2).inv(); | |
console.log(x.data); // ((2 + 3) * 2)^(-1) = 0.1 | |
// Comparison operators *equal* and *notEqual* are available, but they cannot be chained. | |
x.equal(0.1) // true | |
x.notEqual(Math.PI) // true | |
/// Vectors | |
/////////// | |
// Create vector space of dimension 2 over Reals. | |
var R2 = algebra.VectorSpace(R)(2); | |
// Create two vectors and add them. | |
var v1 = new R2([0, 1]); | |
var v2 = new R2([1, -2]); | |
// v1 -> v1 + v2 -> [0, 1] + [1, -2] = [1, -1] | |
v1 = v1.add(v2); | |
console.log(v1.data); // [1, -1] | |
/// Matrices | |
//////////// | |
// Create space of matrices 3 x 2 over Reals. | |
var R3x2 = algebra.MatrixSpace(R)(3, 2); | |
// Create a matrix. | |
// | 1 1 | | |
// m1 = | 0 1 | | |
// | 1 0 | | |
// | |
var m1 = new R3x2([1, 1, | |
0, 1, | |
1, 0]); | |
// Multiply m1 by v1, the result is a vector v3 with dimension 3. | |
// In fact we are multiplying a 3 x 2 matrix by a 2 dimensional vector, but v1 is traited as a column vector so it is like a 2 x 1 matrix. | |
// Then, following the row by column multiplication law we have | |
// 3 x 2 by 2 x 1 which gives a 3 x 1 | |
// ↑ ↑ | |
// +------+----→ by removing the middle indices. | |
// | |
// | 1 1 | | |
// v3 = m1 * v1 = | 0 1 | * [1 , -1] = [0, -1, 1] | |
// | 1 0 | | |
var v3 = m1.mul(v1); | |
console.log(v3.data); // [0, -1, 1] | |
// Let's try with two square matrices 2 x 2. | |
var R2x2 = algebra.MatrixSpace(R)(2, 2); | |
var m2 = new R2x2([1, 0, | |
0, 2]), | |
m3 = new R2x2([0, -1, | |
1, 0]); | |
m2 = m2.mul(m3); | |
console.log(m2.data); // [0, -1, | |
// 2, 0] | |
// Since m2 is a square matrix we can calculate its determinant. | |
console.log(m2.determinant.data); // 2 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){function algebraGroup(given,naming){var group={};if(typeof given==="undefined")given={};if(typeof naming==="undefined")naming={};var defaultNaming={compositionLaw:"addition",identity:"zero",inverseCompositionLaw:"subtraction",inversion:"negation"};function prop(name){if(typeof naming[name]==="string")return naming[name];if(typeof defaultNaming[name]==="string")return defaultNaming[name];return name}function compositionLaw(){return[].slice.call(arguments).reduce(given.compositionLaw)}function contains(){var arg=[].slice.call(arguments);for(var i in arg)if(!given.contains(arg[i]))return false;return true}function notContains(a){return!contains(a)}function disequality(a,b){return!given.equality(a,b)}function inverseCompositionLaw(a){var rest=[].slice.call(arguments,1);return compositionLaw(a,rest.map(given.inversion).reduce(given.compositionLaw))}group[prop("contains")]=contains;group[prop("notContains")]=notContains;group[prop("compositionLaw")]=compositionLaw;group[prop("inversion")]=given.inversion;group[prop("inverseCompositionLaw")]=inverseCompositionLaw;group[prop("equality")]=given.equality;group[prop("disequality")]=disequality;var e=given.identity;if(notContains(e))throw new TypeError('"identity" must be contained in group set');if(disequality(given.compositionLaw(e,e),e))throw new TypeError('"identity" is not neutral');group[prop("identity")]=e;return group}module.exports=algebraGroup},{}],2:[function(require,module,exports){var group=require("algebra-group");function algebraRing(identity,given){var ring=group({identity:identity[0],contains:given.contains,equality:given.equality,compositionLaw:given.addition,inversion:given.negation});function multiplication(){return[].slice.call(arguments).reduce(given.multiplication)}function inversion(a){if(ring.equality(a,ring.zero))throw new TypeError("algebra-ring: Cannot divide by zero.");return given.inversion(a)}function division(a){var rest=[].slice.call(arguments,1);return given.multiplication(a,rest.map(given.inversion).reduce(given.multiplication))}ring.multiplication=multiplication;ring.inversion=inversion;ring.division=division;var one=identity[1];if(ring.notContains(one))throw new TypeError('algebra-ring: "identity" must be contained in ring set');if(ring.disequality(given.multiplication(one,one),one))throw new TypeError('algebra-ring: "identity" is not neutral');if(ring.notContains(identity[1]))throw new TypeError('algebra-ring:"identity" must be contained in ring set');ring.one=identity[1];return ring}module.exports=algebraRing},{"algebra-group":1}],3:[function(require,module,exports){var ring=require("algebra-ring");var twoPow=Math.pow.bind(null,2);function arrayfy1(operator,dim){return function(a){var b=[];for(var i=0;i<dim;i++)b.push(operator(a[i]));return b}}function arrayfy2(operator,dim){return function(a,b){var c=[];for(var i=0;i<dim;i++)c.push(operator(a[i],b[i]));return c}}function iterateCayleyDickson(given,iterations){var field=ring([given.zero,given.one],given);if(iterations===0)return field;var fieldZero=field.zero,fieldOne=field.one,fieldAddition=field.addition,fieldMultiplication=field.multiplication,fieldNegation=field.negation,fieldDisequality=field.disequality,fieldNotContains=field.notContains;var one=[],zero=[],dim=twoPow(iterations);one.push(fieldOne);zero.push(fieldZero);for(var i=1;i<dim;i++){one.push(fieldZero);zero.push(fieldZero)}function equality(a,b){for(var i=0;i<dim;i++)if(fieldDisequality(a[i],b[i]))return false;return true}function contains(a){for(var i=0;i<dim;i++)if(fieldNotContains(a[i]))return false;return true}function buildConjugation(fieldNegation,iterations){if(iterations===0)return function(a){return a};var dim=twoPow(iterations);function conjugation(b){var p=[b[0]],i;for(i=1;i<dim;i++)p.push(fieldNegation(b[i]));return p}return conjugation}var conjugation=buildConjugation(fieldNegation,iterations);function buildMultiplication(fieldAddition,fieldNegation,fieldMultiplication,iterations){if(iterations===0)return function(a,b){return[fieldMultiplication(a,b)]};var dim=twoPow(iterations),halfDim=twoPow(iterations-1);var add=arrayfy2(fieldAddition,halfDim),conj=buildConjugation(fieldNegation,iterations-1),mul=buildMultiplication(fieldAddition,fieldNegation,fieldMultiplication,iterations-1),neg=arrayfy1(fieldNegation,halfDim);function multiplication(a,b){var c=[];var p=[],q=[],r=[],s=[];for(var i1=0;i1<halfDim;i1++){p.push(a[i1]);r.push(b[i1])}for(var i2=halfDim;i2<dim;i2++){q.push(a[i2]);s.push(b[i2])}var t=add(mul(p,r),neg(mul(conj(s),q))),u=add(mul(s,p),mul(q,conj(r)));for(var i3=0;i3<halfDim;i3++)c.push(t[i3]);for(var i4=0;i4<halfDim;i4++)c.push(u[i4]);return c}return multiplication}var multiplication=buildMultiplication(fieldAddition,fieldNegation,fieldMultiplication,iterations);function norm(a){var n=fieldZero,squares=multiplication(a,conjugation(a));for(var i=0;i<dim;i++)n=fieldAddition(n,squares[i]);return n}function inversion(a){var n=norm(a);var b=conjugation(a);for(var i=0;i<dim;i++)b[i]=field.division(b[i],n);return b}var addition=arrayfy2(fieldAddition,dim),negation=arrayfy1(fieldNegation,dim);var algebra=ring([zero,one],{contains:contains,equality:equality,addition:addition,negation:negation,multiplication:multiplication,inversion:inversion});algebra.conjugation=conjugation;algebra.norm=norm;return algebra}module.exports=iterateCayleyDickson},{"algebra-ring":2}],4:[function(require,module,exports){if(typeof Object.create==="function"){module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:false,writable:true,configurable:true}})}}else{module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor;ctor.prototype.constructor=ctor}}},{}],5:[function(require,module,exports){var isFinite=require("is-finite");module.exports=Number.isInteger||function(val){return typeof val==="number"&&isFinite(val)&&Math.floor(val)===val}},{"is-finite":6}],6:[function(require,module,exports){"use strict";var numberIsNan=require("number-is-nan");module.exports=Number.isFinite||function(val){return!(typeof val!=="number"||numberIsNan(val)||val===Infinity||val===-Infinity)}},{"number-is-nan":7}],7:[function(require,module,exports){"use strict";module.exports=Number.isNaN||function(x){return x!==x}},{}],8:[function(require,module,exports){function matrixToArrayIndex(i,j,numCols){return j+i*numCols}function subMatrix(data,numRows,numCols,row,col){var sub=[];for(var i=0;i<numRows;i++)for(var j=0;j<numCols;j++)if(i!==row&&j!==col)sub.push(data[matrixToArrayIndex(i,j,numCols)]);return sub}function determinant(data,scalar,order){if(data.length===1)return data[0];if(typeof order==="undefined")order=Math.sqrt(data.length);if(order%1!==0)throw new TypeError("data.lenght must be a square");if(typeof scalar==="undefined"){scalar={addition:function(a,b){return a+b},multiplication:function(a,b){return a*b},negation:function(a){return-a}}}var det;var startingCol=0,startingRow=0;for(var col=0;col<order;col++){var subData=subMatrix(data,order,order,startingRow,col);var cofactor=determinant(subData,scalar,order-1);if((startingRow+col)%2===1)cofactor=scalar.negation(cofactor);var index=matrixToArrayIndex(startingRow,col,order);if(typeof det==="undefined")det=scalar.multiplication(data[index],cofactor);else det=scalar.addition(det,scalar.multiplication(data[index],cofactor))}return det}module.exports=determinant},{}],9:[function(require,module,exports){module.exports=function(cb){cb()}},{}],10:[function(require,module,exports){function Element(data,check){if(typeof data==="undefined")throw new TypeError("Undefined data");if(check(data))this.data=data;else throw new TypeError("Invalid data = "+data)}function valueOf(){return this.data}Element.prototype.valueOf=valueOf;module.exports=Element},{}],11:[function(require,module,exports){var determinant=require("laplace-determinant"),inherits=require("inherits"),itemsPool=require("./itemsPool"),isInteger=require("is-integer"),matrixToArrayIndex=require("./matrixToArrayIndex"),rowByColumnMultiplication=require("./rowByColumnMultiplication"),toData=require("./toData"),VectorSpace=require("./VectorSpace");function MatrixSpace(Scalar){return function(numRows,numCols){function createIdentity(scalarZero,scalarOne,rank){var identity=[];for(var i=0;i<rank;i++)for(var j=0;j<rank;j++)if(i===j)identity.push(scalarOne);else identity.push(scalarZero);return identity}if(typeof numCols==="undefined")numCols=numRows;var dimension=numRows*numCols,indices=[numRows,numCols],isSquare=numRows===numCols;function staticRightMultiplication(leftNumRows,leftNumCols,left,right){var leftData=toData(left),rightData=toData(right),rightNumCols=rightData.length/leftNumCols;if(!isInteger(rightNumCols))throw new TypeError("left num cols != right num rows");return rowByColumnMultiplication(Scalar,leftData,leftNumRows,rightData,rightNumCols)}var Vector=VectorSpace(Scalar)(dimension);function Matrix(data){Vector.call(this,data);this.numCols=numCols;this.numRows=numRows;Object.defineProperties(this,{numCols:{writable:false,value:numCols},numRows:{writable:false,value:numRows}});function matrixDeterminant(){var det=determinant(data,Scalar,numRows);return new Scalar(det)}if(isSquare){Object.defineProperty(this,"determinant",{get:matrixDeterminant})}}inherits(Matrix,Vector);function rightMultiplication(right){var left=this.data,leftNumCols=this.numCols,leftNumRows=this.numRows,rightData=toData(right);var data=staticRightMultiplication(leftNumRows,leftNumCols,left,right);var rightNumCols=rightData.length/leftNumCols,rightNumRows=leftNumCols;var leftIsVector=leftNumRows===1,rightIsVector=rightNumCols===1;if(leftIsVector&&rightIsVector)return new Scalar(data[0]);var VectorSpace=itemsPool.getVectorSpace();if(leftIsVector){var LeftVector=VectorSpace(Scalar)(rightNumCols);return new LeftVector(data)}if(rightIsVector){var RightVector=VectorSpace(Scalar)(leftNumRows);return new RightVector(data)}var MatrixSpace=itemsPool.getMatrixSpace();var Matrix=MatrixSpace(Scalar)(rightNumRows,rightNumCols);return new Matrix(data)}Matrix.prototype.multiplication=rightMultiplication;if(isSquare){var rank=numRows;var identity=createIdentity(Scalar.zero,Scalar.one,rank);Object.defineProperty(Matrix,"identity",{writable:false,value:identity})}Object.defineProperties(Matrix,{isSquare:{writable:false,value:isSquare},numCols:{writable:false,value:numCols},numRows:{writable:false,value:numRows},zero:{writable:false,value:Vector.zero}});function transpose(numRows,numCols,matrix){var data=toData(matrix),transposedData=[];for(var i=0;i<numRows;i++)for(var j=0;j<numCols;j++){transposedData[matrixToArrayIndex(j,i,numRows)]=data[matrixToArrayIndex(i,j,numCols)]}return transposedData}function matrixTransposition(){var data=this.data,numCols=this.numCols,numRows=this.numRows;var transposedData=transpose(numRows,numCols,data);var TransposedMatrix=MatrixSpace(Scalar)(numCols,numRows);return new TransposedMatrix(transposedData)}Matrix.prototype.transpose=matrixTransposition;Matrix.addition=Vector.addition;Matrix.multiplication=staticRightMultiplication.bind(null,numRows,numCols);Matrix.negation=Vector.negation;Matrix.subtraction=Vector.subtraction;Matrix.transpose=transpose.bind(null,numRows,numCols);Matrix.add=Matrix.addition;Matrix.mul=Matrix.multiplication;Matrix.neg=Matrix.negation;Matrix.sub=Matrix.subtraction;Matrix.prototype.mul=rightMultiplication;Matrix.prototype.tr=matrixTransposition;Matrix.prototype.t=matrixTransposition;Matrix.tr=Matrix.transpose;return Matrix}}itemsPool.setMatrixSpace(MatrixSpace);module.exports=MatrixSpace},{"./VectorSpace":12,"./itemsPool":16,"./matrixToArrayIndex":17,"./rowByColumnMultiplication":20,"./toData":21,inherits:4,"is-integer":5,"laplace-determinant":8}],12:[function(require,module,exports){var algebraGroup=require("algebra-group"),coerced=require("./coerced"),comparison=require("./comparison"),Element=require("./Element"),inherits=require("inherits"),itemsPool=require("./itemsPool"),method=require("./method"),rowByColumnMultiplication=require("./rowByColumnMultiplication.js"),toData=require("./toData");var nAryMethod=method.nAry,unaryMethod=method.unary;function VectorSpace(Scalar){return function(dimension){function createZero(scalarZero,dimension){var vectorZero=[];for(var i=0;i<dimension;i++)vectorZero.push(scalarZero);return vectorZero}var zero=createZero(Scalar.zero,dimension);function _contains(a){if(a.length!==dimension)return false;for(var i=0;i<dimension;i++)if(!Scalar.contains(a[i]))return false;return true}function _equality(a,b){for(var i=0;i<dimension;i++)if(!Scalar.equality(a[i],b[i]))return false;return true}function _addition(a,b){var c=[];for(var i=0;i<dimension;i++)c.push(Scalar.addition(a[i],b[i]));return c}function _negation(a){var b=[];for(var i=0;i<dimension;i++)b.push(Scalar.negation(a[i]));return b}var g=algebraGroup({identity:zero,contains:_contains,equality:_equality,compositionLaw:_addition,inversion:_negation});var addition=coerced(g.addition),contains=coerced(g.contains),disequality=coerced(g.disequality),equality=coerced(g.equality),negation=coerced(g.negation),notContains=coerced(g.notContains),subtraction=coerced(g.subtraction);function Vector(data){Element.call(this,data,contains);function vectorNorm(){var result=Scalar.multiplication(data[0],data[0]);for(var i=1;i<dimension;i++)result=Scalar.addition(result,Scalar.multiplication(data[i],data[i]));return new Scalar(result)}Object.defineProperty(this,"norm",{get:vectorNorm})}inherits(Vector,Element);Object.defineProperty(Vector,"zero",{writable:false,value:zero});function crossProduct(right){var rightData=toData(right)}if(dimension===3){Vector.prototype.crossProduct=crossProduct;Vector.prototype.cross=crossProduct;Vector.prototype.x=crossProduct}function scalarProduct(vector1,vector2){var vectorData1=toData(vector1),vectorData2=toData(vector2);if(vectorData1.length!==vectorData2.length)throw new TypeError("Vectors has not the same dimension");var result=Scalar.multiplication(vectorData1[0],vectorData2[0]);for(var i=1;i<dimension;i++){result=Scalar.addition(result,Scalar.multiplication(vectorData1[i],vectorData2[i]))}return result}function vectorScalarProduct(vector){var result=scalarProduct(this.data,vector);return new Scalar(result)}Vector.prototype.scalarProduct=vectorScalarProduct;function perScalarProduct(Scalar){var data=this.data,ScalarData=toData(Scalar);for(var i=0;i<dimension;i++)data[i]=Scalar.mul(data[i],ScalarData);this.data=data;return this}Vector.prototype.perScalarProduct=perScalarProduct;function transpose(){var data=this.data;var MatrixSpace=itemsPool.getMatrixSpace();var Matrix=MatrixSpace(Scalar)(1,dimension);return new Matrix(data)}Vector.prototype.transpose=transpose;Vector.prototype.equality=comparison(equality);Vector.prototype.disequality=comparison(disequality);Vector.prototype.addition=nAryMethod(addition,Vector);Vector.prototype.subtraction=nAryMethod(subtraction,Vector);Vector.prototype.negation=unaryMethod(negation,Vector);Vector.contains=contains;Vector.disequality=disequality;Vector.equality=equality;Vector.notContains=notContains;Vector.addition=addition;Vector.subtraction=subtraction;Vector.negation=negation;Vector.scalarProduct=scalarProduct;Vector.eq=Vector.equality;Vector.ne=Vector.disequality;Vector.equal=Vector.equality;Vector.notEqual=Vector.disequality;Vector.notEq=Vector.disequality;Vector.add=Vector.addition;Vector.neg=Vector.negation;Vector.sub=Vector.subtraction;Vector.prototype.add=Vector.prototype.addition;Vector.prototype.neg=Vector.prototype.negation;Vector.prototype.sub=Vector.prototype.subtraction;Vector.prototype.dotProduct=vectorScalarProduct;Vector.prototype.dot=vectorScalarProduct;return Vector}}itemsPool.setVectorSpace(VectorSpace);module.exports=VectorSpace},{"./Element":10,"./coerced":13,"./comparison":14,"./itemsPool":16,"./method":18,"./rowByColumnMultiplication.js":20,"./toData":21,"algebra-group":1,inherits:4}],13:[function(require,module,exports){var toData=require("./toData");function coerced(operator){return function(){return operator.apply(null,[].slice.call(arguments).map(toData))}}module.exports=coerced},{"./toData":21}],14:[function(require,module,exports){function comparison(operator){return function(){return operator.bind(null,this.data).apply(null,arguments)}}module.exports=comparison},{}],15:[function(require,module,exports){var algebraRing=require("algebra-ring"),coerced=require("./coerced"),comparison=require("./comparison"),Element=require("./Element"),inherits=require("inherits"),method=require("./method");var nAryMethod=method.nAry,unaryMethod=method.unary;function createScalar(identity,given){var r=algebraRing(identity,given);function Scalar(data){Element.call(this,data,given.contains)}inherits(Scalar,Element);if(typeof given.conjugation==="undefined")given.conjugation=function(a){return a};var addition=coerced(given.addition),contains=coerced(given.contains),conjugation=coerced(given.conjugation),disequality=coerced(given.disequality),equality=coerced(given.equality),negation=coerced(given.negation),notContains=coerced(given.notContains),subtraction=coerced(given.subtraction);var multiplication=coerced(given.multiplication),division=coerced(given.division),inversion=coerced(given.inversion);Scalar.prototype.equality=comparison(equality);Scalar.prototype.disequality=comparison(disequality);Scalar.prototype.addition=function(){var data=addition.bind(null,this.data).apply(null,arguments);return new Scalar(data)};Scalar.prototype.subtraction=nAryMethod(subtraction,Scalar);Scalar.prototype.negation=unaryMethod(negation,Scalar);Scalar.prototype.conjugation=unaryMethod(conjugation,Scalar);Scalar.prototype.multiplication=nAryMethod(multiplication,Scalar);Scalar.prototype.division=nAryMethod(division,Scalar);Scalar.prototype.inversion=unaryMethod(inversion,Scalar);Scalar.addition=addition;Scalar.contains=contains;Scalar.conjugation=conjugation;Scalar.disequality=disequality;Scalar.equality=equality;Scalar.negation=negation;Scalar.notContains=notContains;Scalar.subtraction=subtraction;Scalar.multiplication=multiplication;Scalar.division=division;Scalar.inversion=inversion;Scalar.eq=Scalar.equality;Scalar.ne=Scalar.disequality;Scalar.equal=Scalar.equality;Scalar.notEqual=Scalar.disequality;Scalar.notEq=Scalar.disequality;Scalar.add=Scalar.addition;Scalar.neg=Scalar.negation;Scalar.sub=Scalar.subtraction;Scalar.div=Scalar.division;Scalar.inv=Scalar.inversion;Scalar.mul=Scalar.multiplication;Scalar.conj=Scalar.conj;Scalar.prototype.eq=Scalar.prototype.equality;Scalar.prototype.ne=Scalar.prototype.disequality;Scalar.prototype.equal=Scalar.prototype.equality;Scalar.prototype.notEqual=Scalar.prototype.disequality;Scalar.prototype.notEq=Scalar.prototype.disequality;Scalar.prototype.add=Scalar.prototype.addition;Scalar.prototype.neg=Scalar.prototype.negation;Scalar.prototype.sub=Scalar.prototype.subtraction;Scalar.prototype.mul=Scalar.prototype.multiplication;Scalar.prototype.div=Scalar.prototype.division;Scalar.prototype.inv=Scalar.prototype.inversion;Scalar.prototype.conj=Scalar.prototype.conjugation;Scalar.zero=new Scalar(identity[0]);Scalar.one=new Scalar(identity[1]);return Scalar}module.exports=createScalar},{"./Element":10,"./coerced":13,"./comparison":14,"./method":18,"algebra-ring":2,inherits:4}],16:[function(require,module,exports){function itemsPool(){var MatrixSpace,VectorSpace;function getMatrixSpace(){if(typeof MatrixSpace==="undefined")throw new Error("MatrixSpace not yet in items pool");return MatrixSpace}this.getMatrixSpace=getMatrixSpace;function setMatrixSpace(item){if(typeof MatrixSpace==="undefined")MatrixSpace=item;else throw new Error("MatrixSpace already in items pool")}this.setMatrixSpace=setMatrixSpace;function getVectorSpace(){if(typeof VectorSpace==="undefined")throw new Error("VectorSpace not yet in items pool");return VectorSpace}this.getVectorSpace=getVectorSpace;function setVectorSpace(item){if(typeof VectorSpace==="undefined")VectorSpace=item;else throw new Error("VectorSpace already in items pool")}this.setVectorSpace=setVectorSpace}module.exports=new itemsPool},{}],17:[function(require,module,exports){function matrixToArrayIndex(i,j,numCols){return j+i*numCols}module.exports=matrixToArrayIndex},{}],18:[function(require,module,exports){function unaryMethod(operator,Scalar){return function(){var data=operator(this.data);return new Scalar(data)}}exports.unary=unaryMethod;function nAryMethod(operator,Scalar){return function(){var data=operator.bind(null,this.data).apply(null,arguments);return new Scalar(data)}}exports.nAry=nAryMethod},{}],19:[function(require,module,exports){var realField={zero:0,one:1,contains:function(a,b){return typeof a==="number"&&isFinite(a)},equality:function(a,b){return a===b},addition:function(a,b){return a+b},negation:function(a){return-a},multiplication:function(a,b){return a*b},inversion:function(a){return 1/a}};module.exports=realField},{}],20:[function(require,module,exports){var isInteger=require("is-integer"),matrixToArrayIndex=require("./matrixToArrayIndex");function rowByColumnMultiplication(scalar,leftMatrix,leftNumRows,rightMatrix,rightNumCols){var leftNumCols=leftMatrix.length/leftNumRows,rightNumRows=rightMatrix.length/rightNumCols;if(!isInteger(leftNumCols))throw new TypeError("leftNumCols does not divide leftMatrix.length");if(!isInteger(rightNumRows))throw new TypeError("rightNumRows does not divide rightMatrix.length");if(leftNumCols!==rightNumRows)throw new TypeError("Left num cols != right num rows");var commonIndex=leftNumCols,data=[],rows=leftNumRows,cols=rightNumCols;for(var i=0;i<rows;i++){for(var j=0;j<cols;j++){var leftIndex=matrixToArrayIndex(i,0,commonIndex),rightIndex=matrixToArrayIndex(0,j,cols);var rightElement=rightMatrix[rightIndex],leftElement=leftMatrix[leftIndex];var element=scalar.multiplication(leftElement,rightElement);for(var k=1;k<commonIndex;k++){leftIndex=matrixToArrayIndex(i,k,commonIndex);rightIndex=matrixToArrayIndex(k,j,cols);rightElement=rightMatrix[rightIndex];leftElement=leftMatrix[leftIndex];element=scalar.addition(element,scalar.multiplication(rightElement,leftElement))}data.push(element)}}return data}module.exports=rowByColumnMultiplication},{"./matrixToArrayIndex":17,"is-integer":5}],21:[function(require,module,exports){function toData(arg){var data;if(typeof arg.data==="undefined")data=arg;else data=arg.data;if(typeof data==="undefined")throw new TypeError("No data");return data}module.exports=toData},{}],algebra:[function(require,module,exports){require("strict-mode")(function(){var iterateCayleyDickson=require("cayley-dickson"),realField=require("./src/realField"),createScalar=require("./src/createScalar");var K0=iterateCayleyDickson(realField,0),K1=iterateCayleyDickson(realField,1),K2=iterateCayleyDickson(realField,2),K3=iterateCayleyDickson(realField,3);exports.Real=createScalar([K0.zero,K0.one],K0);exports.Complex=createScalar([K1.zero,K1.one],K1);exports.Quaternion=createScalar([K2.zero,K2.one],K2);exports.Octonion=createScalar([K3.zero,K3.one],K3);exports.VectorSpace=require("./src/VectorSpace");exports.MatrixSpace=require("./src/MatrixSpace")})},{"./src/MatrixSpace":11,"./src/VectorSpace":12,"./src/createScalar":15,"./src/realField":19,"cayley-dickson":3,"strict-mode":9}]},{},[]);var algebra=require("algebra");var R=algebra.Real;console.log(R.add(1,2,3));var x=new R(2),y=new R(-2);var r=x.mul(y);console.log(r.data);console.log(x.data);console.log(y.data);x=x.add(3).mul(2).inv();console.log(x.data);x.equal(.1);x.notEqual(Math.PI);var R2=algebra.VectorSpace(R)(2);var v1=new R2([0,1]);var v2=new R2([1,-2]);v1=v1.add(v2);console.log(v1.data);var R3x2=algebra.MatrixSpace(R)(3,2);var m1=new R3x2([1,1,0,1,1,0]);var v3=m1.mul(v1);console.log(v3.data);var R2x2=algebra.MatrixSpace(R)(2,2);var m2=new R2x2([1,0,0,2]),m3=new R2x2([0,-1,1,0]);m2=m2.mul(m3);console.log(m2.data);console.log(m2.determinant.data); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "requirebin-sketch", | |
"version": "1.0.0", | |
"dependencies": { | |
"algebra": "0.6.2" | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div id="log"></div> | |
<!-- code stolen from http://stackoverflow.com/a/20256785/1217468 --> | |
<script> | |
(function () { | |
var old = console.log; | |
var logger = document.getElementById('log'); | |
console.log = function (message) { | |
if (typeof message == 'object') { | |
logger.innerHTML += (JSON && JSON.stringify ? JSON.stringify(message) : message) + '<br />'; | |
} else { | |
logger.innerHTML += message + '<br />'; | |
} | |
} | |
})(); | |
</script> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!-- contents of this file will be placed inside the <head> --> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment