AngouriMath

Navigation

Try AngouriMath online


If you want to try Jupyter online, try here.

It seems like you are using a phone. We are sorry, but to experience the online demo of the library, you need a larger screen.

An empty prompt

A bunch of examples

Learn more with demos



Parsing from stringEvaluationSolvingCalculusLaTeX
Boolean algebraCompilationF# & JupyterMultithreading

Parsing from string


AngouriMath allows to parse an expression from a string in runtime. Not only that, it allows to use some pretty syntax, for example, you may omit the multiplication operator or powers.

Many mathematical objects may be parsed from a syntax which you normally write outside of algebra systems!

Try it here!

Evaluate & Simplify


Of course, you can evaluate expressions here to a number, boolean, or other types depending on your expression. As well as for many other functions, this is available as a method of Entity or as an extension.

You can also simplify symbolic expressions even if they are not evaluable to a number. Just run the Simplify method. If you need a custom simplification criterion for the simplifier to follow (e. g. you hate complex numbers), you may set it in the runtime settings.

Try it here!

Solving equations


AM allows to solve equations, inequalities, so-called statements, systems of equations, inequalities, unions of equations, etc. All you need to use it to know a fairly simple syntax.

But first, let me define word Statement. We call a Statement an expression that is true for some values of variables, or false for some other. For example, "x + 2 > 0" is a Statement which is true for some x and false for others.

Try it here!

Calculus


We can analytically find a derivative, integral, and limit over a variable.

Integration and differentiation is performed via .Integrate and .Differentiate respectively, and the only argument is the variable.

Limit takes the variable and the destination (where the variable tends), but it might also take the side from which the variable approaches the destination.

Try it here!

Boolean algebra


As it could have been already noticed, you can work with boolean operators and variables in AngouriMath.

Operators are similar to the syntax in python, such that "or", "and", "not". Also, there's "xor" and "implies".

Try it here!

LaTeX


LaTeX is a popular format for mathematical formulas. For example, could be rendered like this: "\sqrt{x} + \int{\sin(x)}dx - \lim_{x \to 0}{y \over f(x)}" \[ \sqrt{x} + \int{\sin(x)}dx - \lim_{x \to 0}{y \over f(x)} \]

Try it here!

Compilation


With the version 1.3, you can compile expressions into native delegates. Not only that you can compile those with numerical types, but you can also compile them into predicates with the bool return type (if your expression involves conditions).

Try it here!

F# & Jupyter


F# is a great functional language, which might be convenient for research and scripting. Install AngouriMath.Interactive so that you can use it from both F# scripts and Jupyter Notebook.

Instruction If you already installed Jupyter and Interactive for it, install package by copying this to your first cell:

#r "nuget:AngouriMath.Interactive, *-*"
Interactive.magic();

Multithreading


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 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.

Example
var cancellationTokenSource = new CancellationTokenSource();

// That goes instead of passing your token to methods
MathS.Multithreading.SetLocalCancellationToken(
    cancellationTokenSource.Token);
    
// Then you normally run your task
var currTask = Task.Run(() => InputText.Text.Solve("x"),
    cancellationTokenSource.Token);
    
try
{
    await currTask;
    LabelState.Text = currTask.Result.ToString();
}
catch (OperationCanceledException)
{
    LabelState.Text = "Operation canceled";
}
























2019-2021 Angouri · Project's repo · Site's repo · Octicons