A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/infusion/Complex.js below:

rawify/Complex.js: The RAW Complex.js is a complex numbers library written in JavaScript

Complex.js - ℂ in JavaScript

Complex.js is a well tested JavaScript library to work with complex number arithmetic in JavaScript. It implements every elementary complex number manipulation function and the API is intentionally similar to Fraction.js. Furthermore, it's the basis of Polynomial.js and Math.js.

let Complex = require('complex.js');

let c = new Complex("99.3+8i");
c.mul({re: 3, im: 9}).div(4.9).sub(3, 2);

A classical use case for complex numbers is solving quadratic equations ax² + bx + c = 0 for all a, b, c ∈ ℝ:

function quadraticRoot(a, b, c) {
  let sqrt = Complex(b * b - 4 * a * c).sqrt()
  let x1 = Complex(-b).add(sqrt).div(2 * a)
  let x2 = Complex(-b).sub(sqrt).div(2 * a)
  return {x1, x2}
}

// quadraticRoot(1, 4, 5) -> -2 ± i

For cubic roots have a look at RootFinder which uses Complex.js.

Any function (see below) as well as the constructor of the Complex class parses its input like this.

You can pass either Objects, Doubles or Strings.

new Complex({re: real, im: imaginary});
new Complex({arg: angle, abs: radius});
new Complex({phi: angle, r: radius});
new Complex([real, imaginary]); // Vector/Array syntax

If there are other attributes on the passed object, they're not getting preserved and have to be merged manually.

Note: Object attributes have to be of type Number to avoid undefined behavior.

new Complex("123.45");
new Complex("15+3i");
new Complex("i");
new Complex(3, 2); // 3+2i

Every complex number object exposes its real and imaginary part as attribute re and im:

let c = new Complex(3, 2);

console.log("Real part:", c.re); // 3
console.log("Imaginary part:", c.im); // 2

Returns the complex sign, defined as the complex number normalized by it's absolute value

Adds another complex number

Subtracts another complex number

Multiplies the number with another complex number

Divides the number by another complex number

Returns the number raised to the complex exponent (Note: Complex.ZERO.pow(0) = Complex.ONE by convention)

Returns the complex square root of the number

Returns e^n with complex exponent n.

Returns the natural logarithm (base E) of the actual complex number

Note: The logarithm to a different base can be calculated with z.log().div(Math.log(base)).

Calculates the magnitude of the complex number

Calculates the angle of the complex number

Calculates the multiplicative inverse of the complex number (1 / z)

Calculates the conjugate of the complex number (multiplies the imaginary part with -1)

Negates the number (multiplies both the real and imaginary part with -1) in order to get the additive inverse

Complex floor([places=0])

Floors the complex number parts towards zero

Ceils the complex number parts off zero

Complex round([places=0])

Rounds the complex number parts

Checks if both numbers are exactly the same, if both numbers are infinite they are considered not equal.

Checks if the given number is not a number

Checks if the given number is finite

Returns a new Complex instance with the same real and imaginary properties

Returns a Vector of the actual complex number with two components

Returns a string representation of the actual number. As of v1.9.0 the output is a bit more human readable

new Complex(1, 2).toString(); // 1 + 2i
new Complex(0, 1).toString(); // i
new Complex(9, 0).toString(); // 9
new Complex(1, 1).toString(); // 1 + i

Returns the real part of the number if imaginary part is zero. Otherwise null

The following trigonometric functions are defined on Complex.js:

Trig Arcus Hyperbolic Area-Hyperbolic sin() asin() sinh() asinh() cos() acos() cosh() acosh() tan() atan() tanh() atanh() cot() acot() coth() acoth() sec()  asec() sech() asech() csc() acsc() csch() acsch()

Complex numbers can also be seen as a vector in the 2D space. Here is a simple overview of basic operations and how to implement them with complex.js:

let v1 = new Complex(1, 0);
let v2 = new Complex(1, 1);
scale(v1, factor):= v1.mul(factor)
translate(v1, v2):= v1.add(v2)
Rotate vector around center
rotate(v, angle):= v.mul({abs: 1, arg: angle})
Rotate vector around a point
rotate(v, p, angle):= v.sub(p).mul({abs: 1, arg: angle}).add(p)
Distance to another vector
distance(v1, v2):= v1.sub(v2).abs()

A complex zero value (south pole on the Riemann Sphere)

A complex one instance

A complex infinity value (north pole on the Riemann Sphere)

A complex NaN value (not on the Riemann Sphere)

An imaginary number i instance

A complex PI instance

A complex euler number instance

A small epsilon value used for equals() comparison in order to circumvent double imprecision.

You can install Complex.js via npm:

Or with yarn:

Alternatively, download or clone the repository:

git clone https://github.com/rawify/Complex.js

Include the complex.min.js file in your project:

<script src="path/to/complex.min.js"></script>
<script>
    console.log(Complex("4+3i"));
</script>

Or in a Node.js project:

const Complex = require('complex.js');

or

import Complex from 'complex.js';

As every library I publish, Complex.js is also built to be as small as possible after compressing it with Google Closure Compiler in advanced mode. Thus the coding style orientates a little on maxing-out the compression rate. Please make sure you keep this style if you plan to extend the library.

After cloning the Git repository run:

npm install
npm run build

Testing the source against the shipped test suite is as easy as

Copyright (c) 2024, Robert Eisele Licensed under the MIT license.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4