Ich wurde in letzter Zeit vermehrt nach der Möglichkeit des Gleichungslösens mittels Math.NET gefragt.
Die Bibliothek implementiert bisher (Release 0.18) keine Algorithmen zum Lösen von Gleichungen, nicht mal für den einfachsten Fall, der linearen Gleichung. Einzige Ausnahme ist der MatrixSim
Operator, mit dem (irreguläre) lineare Gleichungssystem via
Gaussverfahren und Zurückeinsetzen (im LR Verfahren) automatisiert
gelöst werden können. So können beispielsweise Systeme wie:
2*a + 3*b -4*c = -13
a + -x*b + 3*c = t^2
t*a + t^2*b = -t
einfach nach [a,b,c] gelöst werden:
MatrixSim([[2,a,t],[3,-x,t^2],[-4,3,0]],[-13,t^2,-t])
liefert den passenden Vektor zurück. Ist das System irregulär (zb.
singulär oder unterdefiniert) so werden neue Parameter eingeführt, je
einer pro Freiheitsgrad. Achtung: Ist das System überdefiniert, so
ignoriert es zur Zeit diese Überdefiniertheit bzw. die entsprechenden
rechten Seiten!
MatrixSim hilft allerdings nichts, auch nur die einfachste Gleichung wie
2*x-3 = t
nach x aufzulösen. Die Polynome, die in der Release 0.18 eingeführt
werden, helfen jedoch zumindest bei Polynomialen Gleichungen der Form
a*x^3 + b*x^2 + c*x + d = 0
weiter. Ist das Grad klein genug, so kann mit allgemeinen
Lösungsformeln gearbeitet werden, andernfalls mit
Faktorisierungsstrategien, oder evtl. zur Approximation auf Verfahren
wie das von Newton zurückgegriffen werden. Ich werde versuchen, in
diesem Bereich etwas zu implementieren ... damit erhält Math.NET
zumindest einen Solver für einfache Problemstellungen ...