-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathcomplex.min.js
22 lines (21 loc) · 7.6 KB
/
complex.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
Complex.js v2.0.3 11/02/2016
Copyright (c) 2016, Robert Eisele ([email protected])
Dual licensed under the MIT or GPL Version 2 licenses.
*/
(function(n){function k(a,b){if(void 0===a||null===a)e.re=e.im=0;else if(void 0!==b)e.re=a,e.im=b;else switch(typeof a){case "object":"im"in a&&"re"in a?(e.re=a.re,e.im=a.im):"abs"in a&&"arg"in a?(e.re=a.abs*Math.cos(a.arg),e.im=a.abs*Math.sin(a.arg)):"r"in a&&"phi"in a?(e.re=a.r*Math.cos(a.phi),e.im=a.r*Math.sin(a.phi)):2===a.length?(e.re=a[0],e.im=a[1]):l();break;case "string":e.im=e.re=0;var c=a.match(/\d+\.?\d*e[+-]?\d+|\d+\.?\d*|\.\d+|./g),d=1,h=0;null===c&&l();for(var f=0;f<c.length;f++){var g=
c[f];" "!==g&&"\t"!==g&&"\n"!==g&&("+"===g?d++:"-"===g?h++:("i"===g||"I"===g?(0===d+h&&l()," "===c[f+1]||isNaN(c[f+1])?e.im+=parseFloat((h%2?"-":"")+"1"):(e.im+=parseFloat((h%2?"-":"")+c[f+1]),f++)):((0===d+h||isNaN(g))&&l(),"i"===c[f+1]||"I"===c[f+1]?(e.im+=parseFloat((h%2?"-":"")+g),f++):e.re+=parseFloat((h%2?"-":"")+g)),d=h=0))}0<d+h&&l();break;case "number":e.im=0;e.re=a;break;default:l()}}function l(){throw SyntaxError("Invalid Param");}function g(a){return.5*(Math.exp(a)-Math.exp(-a))}function f(a){return.5*
(Math.exp(a)+Math.exp(-a))}function m(a,b){var c=Math.abs(a),d=Math.abs(b);return 0===a?Math.log(d):0===b?Math.log(c):3E3>c&&3E3>d?.5*Math.log(a*a+b*b):Math.log(a/Math.cos(Math.atan2(b,a)))}function d(a,b){if(!(this instanceof d))return new d(a,b);k(a,b);this.re=e.re;this.im=e.im}var e={re:0,im:0};d.prototype={re:0,im:0,sign:function(){var a=this.abs();return new d(this.re/a,this.im/a)},add:function(a,b){k(a,b);return new d(this.re+e.re,this.im+e.im)},sub:function(a,b){k(a,b);return new d(this.re-
e.re,this.im-e.im)},mul:function(a,b){k(a,b);return 0===e.im&&0===this.im?new d(this.re*e.re,0):new d(this.re*e.re-this.im*e.im,this.re*e.im+this.im*e.re)},div:function(a,b){k(a,b);a=this.re;b=this.im;var c=e.re,f=e.im;if(0===f)return 0===c?new d(0!==a?a/0:0,0!==b?b/0:0):new d(a/c,b/c);if(Math.abs(c)<Math.abs(f)){var g=c/f;c=c*g+f;return new d((a*g+b)/c,(b*g-a)/c)}g=f/c;c=f*g+c;return new d((a+b*g)/c,(b-a*g)/c)},pow:function(a,b){k(a,b);a=this.re;b=this.im;if(0===a&&0===b)return d.ZERO;if(0===e.im){if(0===
b&&0<=a)return new d(Math.pow(a,e.re),0);if(0===a)switch((e.re%4+4)%4){case 0:return new d(Math.pow(b,e.re),0);case 1:return new d(0,Math.pow(b,e.re));case 2:return new d(-Math.pow(b,e.re),0);case 3:return new d(0,-Math.pow(b,e.re))}}var c=Math.atan2(b,a),f=m(a,b);a=Math.exp(e.re*f-e.im*c);b=e.im*f+e.re*c;return new d(a*Math.cos(b),a*Math.sin(b))},sqrt:function(){var a=this.re,b=this.im,c=this.abs();if(0<=a){if(0===b)return new d(Math.sqrt(a),0);var e=.5*Math.sqrt(2*(c+a))}else e=Math.abs(b)/Math.sqrt(2*
(c-a));a=0>=a?.5*Math.sqrt(2*(c-a)):Math.abs(b)/Math.sqrt(2*(c+a));return new d(e,0>b?-a:a)},exp:function(){var a=Math.exp(this.re);return new d(a*Math.cos(this.im),a*Math.sin(this.im))},log:function(){var a=this.re,b=this.im;return new d(m(a,b),Math.atan2(b,a))},abs:function(){var a=this.re;var b=this.im,c=Math.abs(a),d=Math.abs(b);3E3>c&&3E3>d?a=Math.sqrt(c*c+d*d):(c<d?(c=d,d=a/b):d=b/a,a=c*Math.sqrt(1+d*d));return a},arg:function(){return Math.atan2(this.im,this.re)},sin:function(){var a=this.re,
b=this.im;return new d(Math.sin(a)*f(b),Math.cos(a)*g(b))},cos:function(){var a=this.re,b=this.im;return new d(Math.cos(a)*f(b),-Math.sin(a)*g(b))},tan:function(){var a=2*this.re,b=2*this.im,c=Math.cos(a)+f(b);return new d(Math.sin(a)/c,g(b)/c)},cot:function(){var a=2*this.re,b=2*this.im,c=Math.cos(a)-f(b);return new d(-Math.sin(a)/c,g(b)/c)},sec:function(){var a=this.re,b=this.im,c=.5*f(2*b)+.5*Math.cos(2*a);return new d(Math.cos(a)*f(b)/c,Math.sin(a)*g(b)/c)},csc:function(){var a=this.re,b=this.im,
c=.5*f(2*b)-.5*Math.cos(2*a);return new d(Math.sin(a)*f(b)/c,-Math.cos(a)*g(b)/c)},asin:function(){var a=this.re,b=this.im,c=(new d(b*b-a*a+1,-2*a*b)).sqrt(),a=(new d(c.re-b,c.im+a)).log();return new d(a.im,-a.re)},acos:function(){var a=this.re,b=this.im,c=(new d(b*b-a*a+1,-2*a*b)).sqrt(),a=(new d(c.re-b,c.im+a)).log();return new d(Math.PI/2-a.im,a.re)},atan:function(){var a=this.re,b=this.im;if(0===a){if(1===b)return new d(0,Infinity);if(-1===b)return new d(0,-Infinity)}var c=a*a+(1-b)*(1-b),a=(new d((1-
b*b-a*a)/c,-2*a/c)).log();return new d(-.5*a.im,.5*a.re)},acot:function(){var a=this.re,b=this.im;if(0===b)return new d(Math.atan2(1,a),0);var c=a*a+b*b;return 0!==c?(new d(a/c,-b/c)).atan():(new d(0!==a?a/0:0,0!==b?-b/0:0)).atan()},asec:function(){var a=this.re,b=this.im;if(0===a&&0===b)return new d(0,Infinity);var c=a*a+b*b;return 0!==c?(new d(a/c,-b/c)).acos():(new d(0!==a?a/0:0,0!==b?-b/0:0)).acos()},acsc:function(){var a=this.re,b=this.im;if(0===a&&0===b)return new d(Math.PI/2,Infinity);var c=
a*a+b*b;return 0!==c?(new d(a/c,-b/c)).asin():(new d(0!==a?a/0:0,0!==b?-b/0:0)).asin()},sinh:function(){var a=this.re,b=this.im;return new d(g(a)*Math.cos(b),f(a)*Math.sin(b))},cosh:function(){var a=this.re,b=this.im;return new d(f(a)*Math.cos(b),g(a)*Math.sin(b))},tanh:function(){var a=2*this.re,b=2*this.im,c=f(a)+Math.cos(b);return new d(g(a)/c,Math.sin(b)/c)},coth:function(){var a=2*this.re,b=2*this.im,c=f(a)-Math.cos(b);return new d(g(a)/c,-Math.sin(b)/c)},csch:function(){var a=this.re,b=this.im,
c=Math.cos(2*b)-f(2*a);return new d(-2*g(a)*Math.cos(b)/c,2*f(a)*Math.sin(b)/c)},sech:function(){var a=this.re,b=this.im,c=Math.cos(2*b)+f(2*a);return new d(2*f(a)*Math.cos(b)/c,-2*g(a)*Math.sin(b)/c)},asinh:function(){var a=this.im;this.im=-this.re;this.re=a;var b=this.asin();this.re=-this.im;this.im=a;a=b.re;b.re=-b.im;b.im=a;return b},acosh:function(){var a=this.acos();if(0>=a.im){var b=a.re;a.re=-a.im;a.im=b}else b=a.im,a.im=-a.re,a.re=b;return a},atanh:function(){var a=this.re,b=this.im,c=1<
a&&0===b,e=1-a,f=1+a,g=e*e+b*b,a=0!==g?new d((f*e-b*b)/g,(b*e+f*b)/g):new d(-1!==a?a/0:0,0!==b?b/0:0),b=a.re;a.re=m(a.re,a.im)/2;a.im=Math.atan2(a.im,b)/2;c&&(a.im=-a.im);return a},acoth:function(){var a=this.re,b=this.im;if(0===a&&0===b)return new d(0,Math.PI/2);var c=a*a+b*b;return 0!==c?(new d(a/c,-b/c)).atanh():(new d(0!==a?a/0:0,0!==b?-b/0:0)).atanh()},acsch:function(){var a=this.re,b=this.im;if(0===b)return new d(0!==a?Math.log(a+Math.sqrt(a*a+1)):Infinity,0);var c=a*a+b*b;return 0!==c?(new d(a/
c,-b/c)).asinh():(new d(0!==a?a/0:0,0!==b?-b/0:0)).asinh()},asech:function(){var a=this.re,b=this.im;if(0===a&&0===b)return new d(Infinity,0);var c=a*a+b*b;return 0!==c?(new d(a/c,-b/c)).acosh():(new d(0!==a?a/0:0,0!==b?-b/0:0)).acosh()},inverse:function(){var a=this.re,b=this.im,c=a*a+b*b;return new d(0!==a?a/c:0,0!==b?-b/c:0)},conjugate:function(){return new d(this.re,-this.im)},neg:function(){return new d(-this.re,-this.im)},ceil:function(a){a=Math.pow(10,a||0);return new d(Math.ceil(this.re*a)/
a,Math.ceil(this.im*a)/a)},floor:function(a){a=Math.pow(10,a||0);return new d(Math.floor(this.re*a)/a,Math.floor(this.im*a)/a)},round:function(a){a=Math.pow(10,a||0);return new d(Math.round(this.re*a)/a,Math.round(this.im*a)/a)},equals:function(a,b){k(a,b);return Math.abs(e.re-this.re)<=d.EPSILON&&Math.abs(e.im-this.im)<=d.EPSILON},clone:function(){return new d(this.re,this.im)},toString:function(){var a=this.re,b=this.im,c="";if(isNaN(a)||isNaN(b))return"NaN";0!==a&&(c+=a);0!==b&&(0!==a?c+=0>b?" - ":
" + ":0>b&&(c+="-"),b=Math.abs(b),1!==b&&(c+=b),c+="i");return c?c:"0"},toVector:function(){return[this.re,this.im]},valueOf:function(){return 0===this.im?this.re:null},isNaN:function(){return isNaN(this.re)||isNaN(this.im)},isFinite:function(){return isFinite(this.re)&&isFinite(this.im)}};d.ZERO=new d(0,0);d.ONE=new d(1,0);d.I=new d(0,1);d.PI=new d(Math.PI,0);d.E=new d(Math.E,0);d.EPSILON=1E-16;"function"===typeof define&&define.amd?define([],function(){return d}):"object"===typeof exports?module.exports=
d:n.Complex=d})(this);