
Symbolic Algebraic Library written entirely in C# - ahmgeek
https://github.com/ibluesun/SymbolicAlgebra
======
tomdre
I worked with GiNaC [https://www.ginac.de/](https://www.ginac.de/) and noticed
that the bottleneck was variable substitutions, e.g., replace a variable with
a constant and simplify the expression. I'm still dreaming of an efficient
CAS.

~~~
dsharlet
[https://github.com/dsharlet/ComputerAlgebra](https://github.com/dsharlet/ComputerAlgebra)
(disclaimer: my project) might do what you want, it lets you manipulate
expressions and then compile them to "native" .net functions that can be
evaluated with high performance.

~~~
tomdre
Thanks! I'll have a look at it for sure. During my phd I developed a tool for
reachability analysis of polynomial dynamical systems
[https://github.com/dreossi/sapo](https://github.com/dreossi/sapo) I needed
expression manipulation to compute Bernestein coefficients of polynomials

------
Clubber
FYI, small typo in the last line of your README.

vap p = SymbolicVariable.Parse("(sin(x)^3+cos(x)^5-x^3*y-3) | x");

should be

var p = ...

~~~
ahmgeek
thanks, your PR gonna be merged soon.

------
naasking
I wrote a simple algebra system in C# [1] that uses term rewriting expressed
as algebraic identities to simplify terms. You can then compile them to .NET
functions for efficient execution.

It uses a recursion limit, but I sketched out a design that eliminates the
need for it by use of a specific data structure as used in the Simplify
theorem prover to ensure termination in the presence of rewriting. Haven't
gotten around to it unfortunately.

[1]
[https://github.com/naasking/Algebra.NET](https://github.com/naasking/Algebra.NET)

~~~
runald
You forgot to include [1], I think.

~~~
naasking
Ha, thanks, fixed!

------
NonEUCitizen
What is the license for this? Thanks.

~~~
colejohnson66
There isn’t one, so legally it’s illegal to use

~~~
kwhitefoot
Sez who?

~~~
kittiepryde
Copyright law

------
dharmatech
Nice!

Does it feature equation solving, variable elimination, etc? See for example:

[https://gist.github.com/dharmatech/a5e74ef03d98b3ff1c45](https://gist.github.com/dharmatech/a5e74ef03d98b3ff1c45)

~~~
ibluesun
are you trying to solve system of linear equations ?!!

~~~
dharmatech
That system of equations contains quadratic equations.

------
gravypod
Do you plan on supporting latex math expressions? That way we can visualize
and run the same functions so we can make sure there is no typo.

~~~
ibluesun
I know latex expressions .. but I don't know exactly how do you want to merge
them.

a use case would be helpful for me.

~~~
gravypod
Suppose I find a paper submitted to a conference. The conference lets me
download the original latex source of the paper. If I want to take the
function they wrote out and take the derivative of it I'd currently have to
rewrite the expression. Unfortunately this is very risky with extremely large
and complex functions. Ideally it would be cool to just copy a latex
expression into your "SymbolicVariable.Parse" method and tell it that it's
written in LaTeX.

Copy and paste has a much lower chance to incur errors than rewriting an
expression.

~~~
ibluesun
well I think that would be another layer before sending this to parser

so we can convert the latex expression and send it to the library after that
.. I guess it is doable if we are limiting ourself to the math expressions
only.

~~~
qubex
My hard-earned lesson is that representation and manipulation should not be
commingled. Traditional mathematical notation is too irregular and
idiosyncratic to be safely handled by a symbolic mathematics system. That’s
part of the reason why a trained eye can almost always spot the output of a
CAS because though correct it almost always expresses stuff in vaguely
’mechanistic’ and/or longwinded ways.

Mentioned elsewhere: I built an (incomplete) implementation of the Risch
algorithm for symbolic integration and slapped a MathML-parsing front end on
it, and frequently ran into ambiguous cases where the ”abstract syntax” of the
purported integral wasn’t what any sane human mathematician would think it
could be, yet these errors were self-consistent (limits on double- and higher
integrals being circumstances that constantly vexed me).

No, don’t suggest or try doing both of these things in the same place. Keep
them separate. It’s just basic software architecture.

------
studentik
smath.info is much more advanced

~~~
ibluesun
you can check my opensource project that seems to make the same as smath

it is called Quantity System
[http://QuantitySystem.org](http://QuantitySystem.org)

and it blends numerical and symbolic in the same context and it supports units
in the context of quantities

check the specs and tell me your opinion.

