10 ms·
Symbolic Algebraic Library written entirely in C#
- NonEUCitizen 9y agoWhat is the license for this? Thanks.
- colejohnson66 9y agoThere isn’t one, so legally it’s illegal to use
- kwhitefoot 9y agoSez who?
- kittiepryde 9y agoCopyright law
- ahmgeek 9y agoThe author of this is my friend, I told him as most of his projects has no licenses. He's going to add them soon, my hunch says it will be MIT, meanwhile feel free to open issue in the repo to tell him.
- Clubber 9y agoFYI, 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 9y agothanks, your PR gonna be merged soon.
- tomdre 9y agoI 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 9y agohttps://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 9y agoThanks! 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
- ibluesun 9y agoafter parsing the symbolic calculations you can execute them as a normal function call in case of single variable for example var result = SymbolicVariable.Parse("sin(3*x)").Execute(2); in case of multi variables you can send the values based on their alphabet order var d = SymbolicVariable.Parse("a^b^c"); Assert.AreEqual("a^(b^c)", d.ToString()); var r = d.Execute(3, 2, 4); Assert.AreEqual(43046721.0, r); or by assigning them to a dictionary of Dictionary<string, double>
- studentik 9y agosmath.info is much more advanced
- kwhitefoot 9y agoSMath Studio is an application not a library.
- ibluesun 9y agoyou 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.
- gravypod 9y agoDo 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 9y agoI 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 9y agoSuppose 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 9y agowell 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 9y agoMy 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.
- naasking 9y agoI 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
- dharmatech 9y agoNice! Does it feature equation solving, variable elimination, etc? See for example: https://gist.github.com/dharmatech/a5e74ef03d98b3ff1c45 https://gist.github.com/dharmatech/a5e74ef03d98b3ff1c45
- ibluesun 9y agoare you trying to solve system of linear equations ?!!
- dharmatech 9y agoThat system of equations contains quadratic equations.