C#で数式処理できるライブラリ

前の投稿でMath.NET Numericsを使いました。
c#でマイク音声をFFTする - wildpieの日記
Math.NETのページを見ていたら数式処理ができるライブラリがあったので試してみました。mathnet/mathnet-symbolics · GitHub

Math.NET Symbolics

インストールはNugetで簡単にできます。
ためしにこの簡単な数式を計算してみましょう。
f:id:wildpie:20140929174143p:plain

var s = Expr.Symbol("s");

var G1 = 1/(s + 1);
var G2 = s/(s + 2);

var G = G1*G2;
Infix.Print(G); // s/((1 + s)*(2 + s))
LaTeX.Print(G); // \frac{s}{\left(1 + s\right)\left(2 + s\right)}

var simplify = Rational.Simplify(s, G);
Infix.Print(simplify); // s/(2 + 3*s + s^2)

var d = Calculus.Differentiate(s, G1);
Infix.Print(d); // -1/(1 + s)^2

var symbols = new Dictionary<string, FloatingPoint>
    {
        {"s", 1.0}
    };
Evaluate.Evaluate(symbols, G1).RealValue; // 0.5

ちなみにPythonのsympyだと・・・

import sympy
sympy.init_printing()

s = sympy.Symbol('s')

G1 = 1 / (s + 1)
G2 = s / (s + 2)
G = G1 * G2
print G # s/((s + 1)*(s + 2))

部分分数分解のやり方は分かんないです。