Popularity
5.3
Growing
Activity
6.7
Declining
656
24
61

Programming language: C#
Tags: Mathematics

# AngouriMath alternatives and similar packages

Based on the "Mathematics" category.
Alternatively, view AngouriMath alternatives based on common mentions on social networks and blogs.

• ### MathNet

Math.NET Numerics
• ### Microsoft Automatic Graph Layout

A set of tools for graph layout and viewing
• ### Access the most powerful time series database as a service

Ingest, store, & analyze all types of time series data in a fully-managed, purpose-built database. Keep data forever with low-cost storage and superior data compression.
• ### WPF-Math

A collection of .NET libraries for rendering mathematical formulae using the LaTeX typesetting style, for the WPF and Avalonia XAML-based frameworks
• ### UnitConversion

Expansible Unit Conversion Library for .Net Core and .Net Framework
• ### AutoDiff

A .NET library that provides fast, accurate and automatic differentiation (computes derivative / gradient) of mathematical functions.
• ### MKL.NET

A simple cross platform .NET API for Intel MKL
• ### Rationals

🔟 Implementation of rational number arithmetic for .NET with arbitrary precision.
• ### Vim.Math3d

A .NET Standard 2.0 library for simple and efficient 3D math that is a feature-rich replacement for System.Numerics https://vimaec.github.io/Math3D
• ### GeometRi

Simple and lightweight computational geometry library for .Net
• ### Jodo.Numerics

Simple, reliable .NET libraries covering numbers, geometry and data structures
• ### ALGLIB

ALGLIB is a cross-platform numerical analysis and data processing library. It supports several programming languages (C++, C#, Delphi) and several operating systems (Windows and POSIX, including Linux) [Proprietary] and [Free Edition]

Do you think we are missing an alternative of AngouriMath or a related project?

### Popular Comparisons

AngouriMath

New open-source cross-platform symbolic algebra library for C# · F# · Jupyter · C++ (WIP) Get started · Examples · Contributions · What's new · Website

Status board

#### Builds and tests

Kernel/C# F# Interactive C++
Build
Test

Note, that all tests and builds are tested for the following three operating systems: Windows, Ubuntu, Mac OS.

Kernel/C# F# C++
??? ???

#### Versions

Kernel/C#
F#
Interactive
Experimental
Terminal
C++ WIP WIP

There are also latest-master versions (updated on every push to master) on MyGet: | MyGet | Downloads | |-------|-----------| | | | | | | | | | | | |

Source to install from MyGet:

https://www.myget.org/F/angourimath/api/v3/index.json


#### Other info

[![Powered by AngouriMath](https://img.shields.io/badge/Powered%20by-AngouriMath-purple?style=flat-square&labelColor=646)](https://am.angouri.org)


AngouriMath is an open source symbolic algebra library. That is, via AngouriMath, you can automatically solve equations, systems of equations, differentiate, parse from string, compile expressions, work with matrices, find limits, convert an expression to LaTeX, and many other things.

## Where can be used?

The two areas of use:

🧪 Research / Data Science [click 🖱️]

## AngouriMath for research

As F#, great first-functional language, skyrocketing in the area of data analysis and interactive research, AngouriMath offers a few ways to conveniently work with symbolic expressions.

### Notebooks

Notebooks provide amazing experience working with function visualization, for functions over one and two variables. With dotnet/interactive, it can be used in Visual Studio Code notebooks as well as Jupyter notebooks. To install the package, simply run this in the notebook:

#r "nuget:AngouriMath.Interactive,*-*"


### Terminal

[[gif](./Sources/Terminal/terminal.gif)](./Sources/Terminal)

As both a demonstration sample and a convenient tool, this repository includes tool called AngouriMath.Terminal. It is a CLI-based program to interact with AngouriMath (as opposed to API-based interaction, that is, consuming it as a lib).

Or build from sources:

git clone https://github.com/asc-community/AngouriMath
cd AngouriMath/Sources/Terminal/AngouriMath.Terminal
dotnet run -c release


See the online Jupyter notebook on how to use the F# API of AngouriMath. Note, that the C# API is still available via open AngouriMath command, then you can call the main library's methods.

See its [source folder](./Sources/Terminal).

### More

💻 Software Development [click 🖱️]

It is installed from nuget for both C# and F# and can be used by Web/Desktop/Mobile development.

## Installing the library

1. Install AngouriMath from NuGet.
2. Write the following code: cs using AngouriMath; using System; Entity expr = "x + sin(y)"; Console.WriteLine(expr); 
3. Run.

More detailed Quick Start.

If you are new to AM, we suggest you checking out some samples instead of reading boring documentation. If you want to contribute, we would be happy to welcome you in our community.

Official website: am.angouri.org.

## Examples

Expand any section to see. Examples with live shell are on the website.

Computations

Use as a simple calculator:

Entity expr = "1 + 2 * log(3, 9)";
Console.WriteLine(expr.EvalNumerical());

Console.WriteLine("2 / 3 + sqrt(-16)".EvalNumerical());
>>> 2 / 3 + 4i

Console.WriteLine("(-2) ^ 3".EvalNumerical());


Build expressions with variables and substitute them:

Entity expr = "2x + sin(x) / sin(2 ^ x)";
var subs = expr.Substitute("x", 0.3m);
Console.WriteLine(subs);


Simplify complicated expressions:

Console.WriteLine("2x + x + 3 + (4 a * a^6) / a^3 / 5".Simplify());

var expr = "1/2 + sin(pi / 4) + (sin(3x)2 + cos(3x)2)";
Console.WriteLine(expr.Simplify());


Compiled functions work 15x+ faster

var x = MathS.Variable("x");
var expr = MathS.Sin(x) + MathS.Sqrt(x) / (MathS.Sqrt(x) + MathS.Cos(x)) + MathS.Pow(x, 3);
var func = expr.Compile(x);
Console.WriteLine(func.Substitute(3));

var expr = "sin(x) + sqrt(x) / (sqrt(x) + cos(x)) + x3";
var compiled = expr.Compile("x");
Console.WriteLine(compiled.Substitute(4));


Algebra

Entity expr1 = "a and b or c";

// Those are the same
Entity expr3 = "a -> b";
Entity expr3 = "a implies b";

Entity expr = "a -> true";
Console.WriteLine(MathS.SolveBooleanTable(expr, "a"));

>>> Matrix[2 x 1]
>>> False
>>> True


Next, solve some equations:

Console.WriteLine("x^2 + x + a".SolveEquation("x"));


Under developing now and forever (always available)

Entity expr = "(sin(x)^2 - sin(x) + a)(b - x)((-3) * x + 2 + 3 * x ^ 2 + (x + (-3)) * x ^ 3)";
Console.WriteLine(expr.SolveEquation("x").Latexise());


Try some inequalities:

Console.WriteLine("(x - 6)(x + 9) >= 0".Solve("x"));


Systems of equations:

var system = MathS.Equations(
"x^2 + y + a",
"y - 0.1x + b"
);
Console.WriteLine(system);
var solutions = system.Solve("x", "y");
Console.WriteLine(solutions);


System:

Result:

var system = MathS.Equations(
"cos(x2 + 1)^2 + 3y",
"y * (-1) + 4cos(x2 + 1)"
);
Console.WriteLine(system.Latexise());
var solutions = system.Solve("x", "y");
Console.WriteLine(solutions);


(solution matrix is too complicated to show)

Calculus

Find derivatives:

Entity func = "x^2 + ln(cos(x) + 3) + 4x";
Entity derivative = func.Differentiate("x");
Console.WriteLine(derivative.Simplify());


Find limits:

WriteLine("(a x^2 + b x) / (e x - h x^2 - 3)".Limit("x", "+oo").InnerSimplified);


Find integrals:

WriteLine("x^2 + a x".Integrate("x").InnerSimplified);


Sets

There are four types of sets:

WriteLine("{ 1, 2 }".Latexise());
WriteLine("[3; +oo)".Latexise());
WriteLine("RR".Latexise());
WriteLine("{ x : x^8 + a x < 0 }".Latexise());


And there operators:

WriteLine(@"A \/ B".Latexise());
WriteLine(@"A /\ B".Latexise());
WriteLine(@"A \ B".Latexise());


Syntax

You can build LaTeX with AngouriMath:

var expr = "x ^ y + sqrt(x) + integral(sqrt(x) / a, x, 1) + derive(sqrt(x) / a, x, 1) + limit(sqrt(x) / a, x, +oo)";
Console.WriteLine(expr.Latexise());
>>> {x}^{y}+\sqrt{x}+\int \left[\frac{\sqrt{x}}{a}\right] dx+\frac{d\left[\frac{\sqrt{x}}{a}\right]}{dx}+\lim_{x\to \infty } \left[\frac{\sqrt{x}}{a}\right]


You can parse Entity from string with

var expr = MathS.FromString("x + 2 + sqrt(x)");
Entity expr = "x + 2 + sqrt(x)";


A few convenient features: x2 => x^2, a x => a * x, (...)2 => (...)^2, 2(...) => 2 * (...)

Compilation

Now you can compile expressions with pritimives into native lambdas. They will be at least as fast as if you wrote them in line in code, or faster if you have same subexpressions in your expression.

Entity expr = "a and x > 3";
var func = expr.Compile<bool, double, bool>("a", "x");
WriteLine(func(true, 6));
WriteLine(func(false, 6));
WriteLine(func(true, 2));
WriteLine(func(false, 2));


Output:

True
False
False
False


You are guaranteed that all functions in AM run in one thread. It is also guaranteed that you can safely run multiple functions from AM in different threads, that is, all static variables and lazy properties are thread-safe.

There is also support of cancellation a task. However, to avoid injecting the cancellation token argument into all methods, we use AsyncLocal<T> instead. That is why instead of passing your token to all methods what you need is to pass it once to the MathS.Multithreading.SetLocalCancellationToken(CancellationToken) method.

There is a sample code demonstrating cancellation:

var cancellationTokenSource = new CancellationTokenSource();

try
{
}
catch (OperationCanceledException)
{
LabelState.Text = "Operation canceled";
}


F#

Not everything is supported directly from F#, so if something missing, you will need to call the necessary methods from AngouriMath.

open Functions
open Operators
open Shortcuts

printfn "%O" (solutions "x" "x + 2 = 0")

printfn "%O" (simplified (solutions "x" "x^2 + 2 a x + a^2 = 0"))

printfn "%O" (dy/dx "x^2 + a x")

printfn "%O" (integral "x" "x2 + e")

printfn "%O" (lim x->0 "sin(a x) / x")

printfn "%O" (latex "x / e + alpha + sqrt(x) + integral(y + 3, y, 1)")



C++ (Experimental)

At the moment, AngouriMath.CPP is in the experimental phase. See how to get AngouriMath for C++.

#include <AngouriMath.h>

int main()
{
AngouriMath::Entity expr = "x y + 2";
std::cout << expr.Differentiate("x");
}


## Contribution

AngouriMath is a free open-source project, there is no big company backing us. That is why we warmly welcome any contributors to the project. Aside from volunteer donations, you can help developing the project: check the [guide for developers](./CONTRIBUTING.md).