SwiftMath alternatives and similar libraries
Based on the "Math" category.
Alternatively, view SwiftMath alternatives based on common mentions on social networks and blogs.
-
Expression
A cross-platform Swift library for evaluating mathematical expressions at runtime -
SigmaSwiftStatistics
A collection of functions for statistical calculation written in Swift. -
VectorMath
A Swift library for Mac and iOS that implements common 2D and 3D vector and matrix functions, useful for games or vector-based graphics -
SwiftSimplify
๐ฅท High-performance polyline simplification library - port of simplify.js -
Matft
Numpy-like library in swift. (Multi-dimensional Array, ndarray, matrix and vector library) -
Arithmosophi
A set of protocols for Arithmetic, Statistics and Logical operations -
Swift-MathEagle
A general math framework to make using math easy. Currently supports function solving and optimisation, matrix and vector algebra, complex numbers, big int, big frac, big rational, graphs and general handy extensions and functions. -
Surge
Surge has been moved to its own organization on GitHub (@Jounce)
Appwrite - The Open Source Firebase alternative introduces iOS support
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of SwiftMath or a related project?
README
SwiftMath
SwiftMath is a Swift framework providing some useful math constructs and functions, like complex numbers, vectors, matrices, quaternions, and polynomials.
:warning: SwiftMath is work in progress, in alpha state. Master is currently targeting Swift 2.1.
Requirements
SwiftMath requires iOS 8.0+ / OS X 10.9+.
Installation
SwiftMath can be installed with the dependency manager Carthage.
- Add the following line to your project's Cartfile
github "madbat/SwiftMath"
- In the terminal, run
carthage update
- Link your project target(s) with the built frameworks. Application targets should also ensure that the framework gets copied into their application bundle.
Usage
Vector3
Vector3 โ as the name suggests โ represents a vector in the three-dimensional Euclidean space (aka RรRรR). Some of the most common uses of 3D vectors consist in encoding physical quantities like position, velocity, acceleration, force, and many others.
let v1 = Vector3(x: 1, y: 2, z: 3)
let v2 = Vector3(x: 5, y: 6, z: 7)
// vector sum
let v3 = v1 + v2 // Vector3(x: 6, y: 8, z: 10)
// length
v3.length // equals v3.norm
// zero vector
Vector3.zero() // Vector3(x: 0, y: 0, z: 0)
// unit-length vector
v3.unit() // divides v3 by its length
Vector2
Pretty much like Vector3
, but for 2D vectors.
Complex
Complex numbers extend real numbers in order to solve problems that cannot be solved with real numbers alone. For example, the roots of a polynomial equation of degree > 1 can always be expressed with complex numbers, but not with real numbers.
// the default constructor for Complex takes the real and imaginary parts as parameters
let c1 = Complex(1.0, 3.0)
c1.re // 1.0
c1.im // 3.0
// a complex can also be constructed by using the property i defined on Float and Double
let c2 = 5 + 1.i // Complex(5.0, 1.0)
// complex conjugate
c2.conj() // Complex(5.0, -1.0)
// polar form
let c3 = Complex(abs: 2.0, arg: -4.0)
let realComplex = Complex(10.0, 0.0)
realComplex.isReal // true
Quaternion
Quaternions extend complex numbers to 4 dimensions. They're handy to rotate three-dimensional vectors.
// rotating a vector by ฯ/2 around its x axis
let original = Vector3(x: 3, y: 4, z: 0)
let rotation = Quaternion(axis: Vector3(x: 1, y: 0, z: 0), angle: Double.PI/2.0)
let rotated = original.rotate(rotation) // Vector3(x: 3, y: 0, z: 4.0)
Polynomial
Polynomial lets you represent โ and find the roots of โ a polynomial expression.
The following snippet shows how to express the polynomial x^2 + 4x + 8
let p = Polynomial(1, 4, 8)
Use Polynomial's roots()
method to calculate its roots, represented as a (multi)set of complex numbers:
p.roots() // returns { (-2 - 2i), (-2 + 2i) }
For polynomials of degree <= 4, roots()
defaults to using the analytic method, while for polynomials of higher degrees it uses the the Durand-Kerner method.
It is possible to force the root finding process to use the numeric method also for polynomials
of degree <= 4, using roots(preferClosedFormSolution: false)
.
Contributing
Contributions in any form (especially pull requests) are very welcome!
License
SwiftMath is released under the MIT License. See the LICENSE file for more info.
*Note that all licence references and agreements mentioned in the SwiftMath README section above
are relevant to that project's source code only.