Apa yang baru AngouriMath 1.2?

Salam pembuka. Selama 7 bulan terakhir saya telah mengerjakan pembaruan AngouriMath terbesar . Dan ada sesuatu untuk diceritakan.





Singkatnya

Pada November 2019, saya menyadari bahwa dunia ini, lebih tepatnya dunia dotnet, tidak memiliki perpustakaan aljabar simbolis untuk menyederhanakan ekspresi, menyelesaikan persamaan, menurunkan lateks, dan sebagainya. Jadi saya memutuskan untuk membuatnya.





Tapi ada ...

Mendengar apa yang saya lakukan, orang yang berbeda muncul dengan solusi yang berbeda. Tulis ulang SymPy, buat pembungkus di atas SageMath untuk Dotnet, spiral Wolfram | Alpha, gunakan mathnet.symbolics primitif (mereka sendiri berbicara tentang keprimitifan).





Tetapi semua ini memiliki keterbatasan atau kesulitan. Hal yang sama yang saya kerjakan adalah pustaka yang sangat ringan yang ditulis dan dioptimalkan untuk .NET. Sumber terbuka, tentu saja. (di bawah MIT)





Perbarui 1.2

Pada bulan Agustus, salah satu kontributor utama @ HappyPig375 membantu menulis ulang sebagian besar pustaka ke hierarki tipe normal. Sekarang ada tipe terpisah untuk setiap operator atau fungsi. Itu adalah titik kritis, yang sebelumnya perpustakaan itu lambat, canggung, dan sama sekali tidak jelas. Sekarang mari kita bahas apa yang telah dilakukan sejak saat itu.





Ekspresi adalah rekor

Sebagai contoh, seperti inilah deklarasi operator penjumlahan





public sealed partial record Sumf(Entity Augend, Entity Addend) : NumericNode
      
      



Berkat ini, kami dapat dengan mudah menerapkan pencocokan pola baru:





internal static Entity CommonRules(Entity x) => x switch
{
    // (a * f(x)) * g(x) = a * (f(x) * g(x))
    Mulf(Mulf(Number const1, Function func1), Function func2) => func1 * func2 * const1,

    // (a/b) * (c/d) = (a*c)/(b*d)
    Mulf(Divf(var any1, var any2), Divf(var any3, var any4)) => any1 * any3 / (any2 * any4),

    // a / (b / c) = a * c / b
    Divf(var any1, Divf(var any2, var any3)) => any1 * any3 / any2,
      
      



(ini adalah contoh pola yang berfungsi saat menyederhanakan ekspresi)





Matematika

, .





, , , .





12 , (sinh(x)



(e.Pow(x) - e.Pow(-x)) / 2



).





Abs Signum. abs : (|x|)



. , , ( | , ).





Phi ( ).





WriteLine(@"phi(8)".EvalNumerical());
WriteLine(@"(|-3 + 4i|)".EvalNumerical());
WriteLine(@"sinh(3)".Simplify());
WriteLine(@"sec(0.5)".Simplify());
      
      







4
5
(e ^ 3 - 1 / e ^ 3) / 2
sec(1/2)
      
      



. , NaN, . - SpecialSet, .





- . - , - , . : not



, or



, xor



, and



, implies



.





, Boolean



, EvaluableBoolean



. , EvaluableNumerical



, Number



.





WriteLine(@"(true or b) implies c".Simplify());
      
      



( c



)





Boolean



, . : =



, <



, >



, <=



, >=



.





. , a > b > c



, (a > b > c



, a > b and b > c



).





WriteLine(@"a < b >= c".Simplify());
      
      



( a < b and b >= c



)





. .





- FiniteSet, , . . : { 1, 2, 3 }



.





/ : [1; 2]



, (1; 2)



, [1; 2)



, (1; 2]



. .





SpecialSet



"" . CC



, RR



, QQ



, ZZ



, BB



  , , , , .





ConditionalSet



set-builder notation, : { x : x > 0 and x^2 = y }



( x



, y



).





WriteLine(@"({ 1, 2 } \/ { 5 }) /\ { x : x in [2; 3] and x > 0 } ".Simplify());
      
      



( { 2 }



)





, . .





WriteLine("tan(a x) / (b x)".Limit("x", 0));
WriteLine("(sin(t) - t) / t3".Limit("t", 0));
      
      



( a / b



-1/6



)





"Provided"

, . , sqrt(x) provided x >= 0



. x, NaN.





, NaN, . , NaN NaN.





-

Piecewise



- Provided



. -, , Piecewise



, Provided



, .





, Piecewise



:





Entity abs = "piecewise(x provided x > 0, -x provided x <= 0)";
WriteLine(abs.Substitute("x", 3).EvalNumerical());
WriteLine(abs.Substitute("x", -3).EvalNumerical());
      
      



( 3 )





, / .





, , AngouriMathBaseException



. p/invoke



- - , , , AngouriMathBaseException



, . , , catch- ( ).





, . , 1.1.0.5. .





F#

API AngouriMath F#. , , F# . - , .





Interactive

, AngouriMath Jupyter. AngouriMath.Interactive ILatexiseable



LaTeX- MathJax ( ).





Contoh sederhana penggunaan AngouriMath.Interactive di Jupyter
AngouriMath.Interactive Jupyter

. , ? , . ([ThreadStatic]



), .





- , Solve



Simplify



, .





, . , , . ,





using var _ = MaxExpansionTermCount.Set(10);
// - 
      
      



(, Set



, IDisposable



).





. , . , . , .





- , ( ).





Tautan

  1. Github proyek.





  2. Situs proyek.





  3. Lebih detail Apa yang baru .





  4. Rencana untuk pembaruan berikutnya.





  5. Profil saya ada di GitHub.





  6. SymPy - menginspirasi dan memberikan ide.








All Articles