xFunc.Maths 4.2.0-preview.2

This is a prerelease version of xFunc.Maths.
There is a newer version of this package available.
See the version list below for details.
The owner has unlisted this package. This could mean that the package is deprecated, has security vulnerabilities or shouldn't be used anymore.
dotnet add package xFunc.Maths --version 4.2.0-preview.2
NuGet\Install-Package xFunc.Maths -Version 4.2.0-preview.2
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="xFunc.Maths" Version="4.2.0-preview.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add xFunc.Maths --version 4.2.0-preview.2
#r "nuget: xFunc.Maths, 4.2.0-preview.2"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install xFunc.Maths as a Cake Addin
#addin nuget:?package=xFunc.Maths&version=4.2.0-preview.2&prerelease

// Install xFunc.Maths as a Cake Tool
#tool nuget:?package=xFunc.Maths&version=4.2.0-preview.2&prerelease

Master: Build Status codecov
Dev: Build Status codecov
xFunc.Maths: NuGet Downloads
xFunc.DotnetTool: NuGet

xFunc

xFunc is a simple and easy to use application that allows you to build mathematical and logical expressions. It's written on C#. The library includes well-documented code that allows developers to parse strings to expression tree, to analyze (derivate, simplify) expressions by using lexer, parser and etc.

xFunc is a small-sized and portable application that you can use to create complex mathematical expressions which will be automatically computed. It can be used by teachers and students alike.

Note: The WPF application (xFunc UI) was migrated to a separate repository xFunc.UI.

Features:

  • Calculating expressions (supported functions and operations);
  • Supporting measures of angles;
  • Derivative and simplifying expressions;
  • Plotting graphs;
  • Truth tables;
  • Supported Framework: .NET Standard 2.1+;

Usage

The main class of xFunc library is Processor.

Processor

It allows you to:

Parse:

var processor = new Processor();
var exp = processor.Parse("2 + x"); 

// 'exp' will contain the expression tree for later use
// you can calculate it or process it by analyzers (Differentiator, Simplifier, etc.)

// 'exp' has a parameter
// we should provide a value for varible 'x'
var parameters = new ParameterCollection
{
    { "x", 10 }
};
var result = exp.Execute(parameters);

// result will be equal to 12

Note: The Parse method won't simplify expression automatically, it will return the complete representation of provided string expression.

Solve:

This method parses string expression (like Parse method) and then calculates it (returns object which implements IResult interface).

There is two overloads of this method (common and generic). The common returns just IResult (you can access result by Result property). The generic allows to return specific implementation of IResult (eg. NumberResult).

var processor = new Processor();
processor.Solve<NumberResult>("2 + 2"); // will return 4.0 (double)

// or

processor.Solve("2 + 2").Result; // will return 4.0 (object)

If your expression has any parameter, you need to assign a value to it (otherwise xFunc will throw an exception), because Processor has a build-in collection of parameters and user functions, you don't need to use ExpressionParameters directly:

processor.Solve("x := 10");

// or explicitly throught Parameters property

processor.Parameters.Variables.Add("x", 10);

Note: The Solve method automatically simplifies expression, to control this behavior you can use simplify argument. It's useful for differentiation, because it will eliminate unnecessary expression nodes.

Simplify:

var processor = new Processor();

processor.Solve<ExpressionResult>("simplify(arcsin(sin(x)))");
// or
processor.Simplify("arcsin(sin(x))");
// will return simplified expression = "x"

Detailed simplification rules

Differentiate:

var processor = new Processor();

processor.Solve<ExpressionResult>("deriv(2x)");
// or
processor.Differentiate("2x");
// will return "2"

You can specified variable (default is "x") of differentiation:

var processor = new Processor();
processor.Differentiate("2y", Variable.Y); // will return "2"
processor.Differentiate("2x + sin(y)", new Variable("x")); // will return "2"

Performance

Processor

Version Method Mean Allocated
3.7.3 Parse 166,581.4 ns 63770 B
4.0.0 Parse 24,604.93 ns 4760 B
3.7.3 Solve 232,498.0 ns 96952 B
4.0.0 Solve 39,971.82 ns 10673 B

More details

Bug Tracker

Please, if you have a bug or a feature request, create a new issue. Before creating any issue, please search for existing issues.

License

xFunc is released under MIT License.

Thanks

@RonnyCSHARP

Fluent.Ribbon
Azure Pipelines
Coverlet
ReportGenerator
xUnit
Moq

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
4.4.1 1,179 12/10/2023
4.4.0 925 9/13/2023
4.3.0 229 8/8/2023
4.2.0 756 7/5/2023
4.1.0 4,371 5/23/2022
4.0.1 2,138 4/29/2021
4.0.0 17,368 1/22/2021
3.7.3 1,512 10/6/2020
3.7.2 814 9/4/2020
3.7.1 3,150 7/21/2019
3.7.0 925 6/30/2019
3.6.0 1,305 4/13/2019
3.5.0 1,443 2/19/2018
3.4.0 2,451 2/26/2017
3.3.0 1,493 12/18/2016
3.2.1 1,530 12/4/2016
3.2.0 1,490 12/3/2016
3.1.0 1,538 10/14/2016
3.0.0 1,785 7/10/2016
2.15.16 5,301 5/5/2015
2.15.15 1,747 11/18/2014
2.15.12 1,486 6/19/2014
2.15.10 1,421 6/13/2014
2.15.8 1,374 6/11/2014
2.15.7 1,426 5/29/2014
2.15.6 1,432 5/26/2014
2.15.5 1,410 5/17/2014
2.15.4 1,426 5/14/2014
2.14.1 1,441 5/6/2014
2.13.3 1,548 5/3/2014
2.13.2 1,456 4/29/2014
2.13.0 1,387 4/28/2014
2.12.3 1,423 4/24/2014
2.12.1 1,448 4/22/2014
2.12.0 1,594 4/20/2014
2.11.4 1,530 4/6/2014
2.11.3 1,500 3/22/2014
2.11.2 1,510 2/22/2014
2.11.1 1,486 2/21/2014
2.11.0 1,506 2/18/2014
2.10.2 1,484 11/12/2013
2.10.1 1,451 11/6/2013
2.10.0 1,430 11/4/2013
2.9.0 1,466 11/2/2013
2.8.3 1,451 10/25/2013
2.8.2 1,414 10/21/2013
2.8.1 1,417 10/20/2013
2.7.1 1,456 10/6/2013
2.7.0 1,467 10/5/2013
2.5.11 1,421 9/25/2013
2.5.9 1,473 9/23/2013
2.5.8 1,410 9/22/2013
2.5.5 1,431 9/15/2013
2.5.3 1,456 9/13/2013
2.5.2 1,452 9/11/2013
2.4.1 1,506 8/17/2013
2.3.2 1,739 7/12/2013
2.3.0 1,708 6/26/2013
2.2.2 1,548 6/18/2013
2.2.1.1 1,617 6/13/2013
2.2.1 1,623 6/13/2013
2.2.0 1,561 6/8/2013
2.1.1.2 1,474 4/27/2013
2.1.1 1,646 4/14/2013
2.1.0.4 1,530 4/3/2013
2.1.0.1 1,549 3/22/2013
2.0.7 1,623 3/15/2013
2.0.6 1,567 3/14/2013
2.0.5 1,577 3/9/2013
2.0.2.7 1,494 3/2/2013
2.0.2.6 1,494 2/28/2013
2.0.2.3 1,533 2/17/2013
2.0.2 1,572 2/9/2013
2.0.0.1 1,511 2/7/2013
2.0.0 1,556 2/7/2013