Git Product home page Git Product logo

angourimath's Introduction

AngouriMath logo

AngouriMath

New, leading symbolic algebra library in .NET. Everything one would need.
Download ( C# , F# ) · Examples · Contributions · License


GitHub Workflow Status (event) Codecov Nuget (with prereleases) Discord GitHub

What is it about?

AngouriMath now supports Jupyter integration

AngouriMath is an open source symbolic algebra library. That is, via AngouriMath, you can automatically solve equations, systems of equations, work with sets, differentiate, parse from string, and try many other features.

It is not a CAS, so you can use it in any your project by installing it from NuGet. AngouriMath can be used in calculators, algebra systems, educational/quiz apps, graphics, TeX rendering applications, etc.

It is free to use even in commercial projects. We work on it a lot, so your requests on issues are likely to be considered within a few hours.

Finally, if still not sure about it, you can try it even before installation!

Try live

Although most functions are convenient to use only from C#, there are some optimized for F#.

README navigation:

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.

For any questions, feel free to contact us via Discord.

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

Start with boolean 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("x2 + 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(
    "x2 + 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:

var func = "x2 + ln(cos(x) + 3) + 4x";
var derivative = func.Differentiate("x");
Console.WriteLine(derivative.Simplify());

Find limits:

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

Find integrals:

WriteLine("x2 + 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 : x8 + 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 * (...)

F#

Download

Not everything is supported directly from F#, so if something missing, you will need to address that functional from AngouriMath.

open Functions
open Operators
open FromToString


solve "x" "x + 2 = 0"

simplify (solve "x" "x2 + 2 a x + a2 = 0")

differentiate "x" "x2 + a x"

integrate "x" "x2 + e"

limit "x" "0" "sin(a x) / x"

"sin(a x) / x" &&& "x" --> 0

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

Jupyter integration

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

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

Now any ILatexiseable will be displayed as LaTeX:

Check the F# and C# samples.

Contribution

We appreciate and welcome any contributors to AngouriMath. Current tasks can be tracked on this page.

Use pull requests to contribute to it. We also appreciate early pull requests so that we know what you are improving and can help you with something.

Documentation for contributors and developers is here.

License

The project is open source, but can be used in closed commercial projects. There is no restriction on it with the only requirement to keep the MIT license with all distributives of AngouriMath.

angourimath's People

Contributors

happypig375 avatar momodeve avatar theseems avatar whiteblackgoose avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.