@@ -1498,6 +1498,32 @@ <h2 class="screen-reader-text">Skip links</h2>
14981498
14991499
15001500
1501+ < li >
1502+ < a
1503+ href ="/compute-engine/reference/linear-algebra/ "
1504+ data-url ="/compute-engine/changelog/ "
1505+ class ="">
1506+
1507+ < svg class ="nav__icon ">
1508+ < use xlink:href ="/assets/icons.svg#reference "> </ use >
1509+ </ svg >
1510+
1511+ Linear Algebra
1512+ </ a >
1513+ </ li >
1514+
1515+
1516+
1517+
1518+
1519+
1520+
1521+
1522+
1523+
1524+
1525+
1526+
15011527 < li >
15021528 < a
15031529 href ="/compute-engine/reference/logic/ "
@@ -2331,6 +2357,59 @@ <h2 class="screen-reader-text">Skip links</h2>
23312357
23322358
23332359< h1 id ="cortexjs-compute-engine-changelog " tabindex ="-1 "> CortexJS Compute Engine Changelog</ h1 >
2360+ < h2 id ="0.21.0 " tabindex ="-1 "> 0.21.0</ h2 >
2361+ < p > < strong > Release Date:</ strong > 2023-11-02</ p >
2362+ < h3 id ="new-features " tabindex ="-1 "> New Features</ h3 >
2363+ < ul >
2364+ < li >
2365+ < p > < strong > #125</ strong > Parse and serialize environemnts, i.e.
2366+ < code > \begin{matrix} 1 & 2 \\ 3 & 4 \end{matrix}</ code > will be parsed as
2367+ < code > ["Matrix", ["List", ["List", 1, 2], ["List", 3, 4]]]</ code > .</ p >
2368+ < p > A new section on < a href ="/compute-engine/reference/linear-algebra/#formatting "> Linear Algebra</ a >
2369+ has some details on the supported formats.</ p >
2370+ < p > The linear algebra operations are limited at the moment, but will be expanded
2371+ in the future.</ p >
2372+ </ li >
2373+ < li >
2374+ < p > Added < code > IsSame</ code > function, which is the function expression corresponding to
2375+ < code > expr.isSame()</ code > .</ p >
2376+ </ li >
2377+ < li >
2378+ < p > Added < code > CanonicalOrder</ code > function, which sorts the arguments of commutative
2379+ functions into canonical order. This is useful to compare two non-canonical
2380+ expressions for equality.</ p >
2381+ </ li >
2382+ </ ul >
2383+ < pre > < code class ="language-js "> ce.< span class ="hljs-title function_ "> box</ span > ([< span class ="hljs-string "> "CanonicalOrder"</ span > , [< span class ="hljs-string "> "Add"</ span > , < span class ="hljs-number "> 1</ span > , < span class ="hljs-string "> "x"</ span > ]]).< span class ="hljs-title function_ "> isSame</ span > (
2384+ ce.< span class ="hljs-title function_ "> box</ span > ([< span class ="hljs-string "> "CanonicalOrder"</ span > , [< span class ="hljs-string "> "Add"</ span > , < span class ="hljs-string "> "x"</ span > , < span class ="hljs-number "> 1</ span > ]])
2385+ );
2386+ < span class ="hljs-comment "> // -> true</ span >
2387+ </ code > </ pre >
2388+ < h3 id ="bug-fix " tabindex ="-1 "> Bug Fix</ h3 >
2389+ < ul >
2390+ < li > When evaluating a sum (< code > \sum</ code > ) with a bound that is not a number, return the
2391+ sum expression instead of an error.</ li >
2392+ </ ul >
2393+ < h2 id ="0.20.2 " tabindex ="-1 "> 0.20.2</ h2 >
2394+ < p > < strong > Release Date:</ strong > 2023-10-31</ p >
2395+ < h3 id ="bug-fixes " tabindex ="-1 "> Bug Fixes</ h3 >
2396+ < ul >
2397+ < li > Fixed numerical evaluation of integrals and limits when parsed from LaTeX.</ li >
2398+ </ ul >
2399+ < pre > < code class ="language-json "> console.info(ce.parse('\\lim_< span class ="hljs-punctuation "> {</ span > x \\to < span class ="hljs-number "> 0</ span > < span class ="hljs-punctuation "> }</ span > \\frac< span class ="hljs-punctuation "> {</ span > \\sin(x)< span class ="hljs-punctuation "> }</ span > < span class ="hljs-punctuation "> {</ span > x< span class ="hljs-punctuation "> }</ span > ').value);
2400+ < span class ="hljs-comment "> // -> 1</ span >
2401+
2402+ console.info(ce.parse('\\int_< span class ="hljs-punctuation "> {</ span > < span class ="hljs-number "> 0</ span > < span class ="hljs-punctuation "> }</ span > ^< span class ="hljs-punctuation "> {</ span > < span class ="hljs-number "> 2</ span > < span class ="hljs-punctuation "> }</ span > x^< span class ="hljs-number "> 2</ span > dx').value);
2403+ < span class ="hljs-comment "> // -> 2.6666666666666665</ span >
2404+ </ code > </ pre >
2405+ < h2 id ="0.20.1 " tabindex ="-1 "> 0.20.1</ h2 >
2406+ < p > < strong > Release Date:</ strong > 2023-10-31</ p >
2407+ < h3 id ="bug-fixes-1 " tabindex ="-1 "> Bug Fixes</ h3 >
2408+ < ul >
2409+ < li > Fixed evaluation of functions with multiple arguments</ li >
2410+ < li > Fixed compilation of some function assignments</ li >
2411+ < li > Improved serialization of function assignment</ li >
2412+ </ ul >
23342413< h2 id ="0.20.0 " tabindex ="-1 "> 0.20.0</ h2 >
23352414< p > < strong > Release Date:</ strong > 2023-10-30</ p >
23362415< h3 id ="breaking-changes " tabindex ="-1 "> Breaking Changes</ h3 >
@@ -2348,7 +2427,7 @@ <h3 id="breaking-changes" tabindex="-1">Breaking Changes</h3>
23482427custom invisible operators, use the < code > InvisibleOperator</ code > function.</ p >
23492428</ li >
23502429</ ul >
2351- < h3 id ="bug-fixes " tabindex ="-1 "> Bug Fixes</ h3 >
2430+ < h3 id ="bug-fixes-2 " tabindex ="-1 "> Bug Fixes</ h3 >
23522431< ul >
23532432< li > < strong > #25</ strong > Correctly parse chained relational operators, i.e. < code > a < b <= c</ code > </ li >
23542433< li > < strong > #126</ strong > Logic operators only accepted up to two arguments.</ li >
@@ -2381,7 +2460,7 @@ <h3 id="new-features-and-improvements" tabindex="-1">New Features and Improvemen
23812460</ ul >
23822461< h2 id ="0.19.1 " tabindex ="-1 "> 0.19.1</ h2 >
23832462< p > < strong > Release Date:</ strong > 2023-10-26</ p >
2384- < h3 id ="bug-fixes-1 " tabindex ="-1 "> Bug Fixes</ h3 >
2463+ < h3 id ="bug-fixes-3 " tabindex ="-1 "> Bug Fixes</ h3 >
23852464< ul >
23862465< li > Assigning a function to an indentifier works correctly now, i.e.</ li >
23872466</ ul >
@@ -2396,7 +2475,7 @@ <h3 id="breaking-changes-1" tabindex="-1">Breaking Changes</h3>
23962475instead. The < code > domain</ code > property is still supported for backward compatibility,
23972476but will be removed in a future version.</ li >
23982477</ ul >
2399- < h3 id ="bug-fixes-2 " tabindex ="-1 "> Bug Fixes</ h3 >
2478+ < h3 id ="bug-fixes-4 " tabindex ="-1 "> Bug Fixes</ h3 >
24002479< ul >
24012480< li > When invoking a declared function in a numeric operation, correctly infer the
24022481result type.</ li >
@@ -2415,7 +2494,7 @@ <h3 id="bug-fixes-2" tabindex="-1">Bug Fixes</h3>
24152494The unit test case was incorrect and did not detect the problem. The unit test
24162495case has been fixed and the returned values are now correct.</ li >
24172496</ ul >
2418- < h3 id ="new-features " tabindex ="-1 "> New Features</ h3 >
2497+ < h3 id ="new-features-1 " tabindex ="-1 "> New Features</ h3 >
24192498< ul >
24202499< li > Implemented < code > Union</ code > and < code > Intersection</ code > of collections, for example:</ li >
24212500</ ul >
@@ -2489,7 +2568,7 @@ <h3 id="improvements" tabindex="-1">Improvements</h3>
24892568</ ul >
24902569< h2 id ="0.18.1 " tabindex ="-1 "> 0.18.1</ h2 >
24912570< p > < strong > Release Date:</ strong > 2023-10-16</ p >
2492- < h3 id ="bug-fixes-3 " tabindex ="-1 "> Bug Fixes</ h3 >
2571+ < h3 id ="bug-fixes-5 " tabindex ="-1 "> Bug Fixes</ h3 >
24932572< ul >
24942573< li > Parsing of whole numbers while in < code > rational</ code > mode would return incorrect
24952574results.</ li >
@@ -2506,7 +2585,7 @@ <h3 id="improvements-1" tabindex="-1">Improvements</h3>
25062585</ ul >
25072586< h2 id ="0.18.0 " tabindex ="-1 "> 0.18.0</ h2 >
25082587< p > < strong > Release Date:</ strong > 2023-10-16</ p >
2509- < h3 id ="new-features-1 " tabindex ="-1 "> New Features</ h3 >
2588+ < h3 id ="new-features-2 " tabindex ="-1 "> New Features</ h3 >
25102589< ul >
25112590< li > Expanded LaTeX dictionary with < code > \max</ code > , < code > \min</ code > , < code > \sup</ code > , < code > \inf</ code > and < code > \lim</ code >
25122591functions</ li >
@@ -2576,7 +2655,7 @@ <h3 id="breaking-changes-2" tabindex="-1">Breaking Changes</h3>
25762655determined by the context in which it is used, or by the < code > ce.assume()</ code > method.
25772656In some circumstances, the domain of a symbol can be < code > undefined</ code > .</ li >
25782657</ ul >
2579- < h3 id ="new-features-2 " tabindex ="-1 "> New Features</ h3 >
2658+ < h3 id ="new-features-3 " tabindex ="-1 "> New Features</ h3 >
25802659< ul >
25812660< li > Symbolic derivatives of expressions can be calculated using the < code > D</ code > function.
25822661For example, < code > ce.box(["D", ce.parse("x^2 + 3x + 1"), "x"]).evaluate().latex</ code >
@@ -2609,7 +2688,7 @@ <h3 id="breaking-changes-3" tabindex="-1">Breaking Changes</h3>
26092688in the expression that are defined outside of the local scope and are not
26102689arguments of the function, if a function.</ li >
26112690</ ul >
2612- < h3 id ="new-features-3 " tabindex ="-1 "> New Features</ h3 >
2691+ < h3 id ="new-features-4 " tabindex ="-1 "> New Features</ h3 >
26132692< ul >
26142693< li >
26152694< p > < strong > Domain Inference</ strong > when the domain of a symbol is not set explicitly (for
@@ -2699,7 +2778,7 @@ <h3 id="improvements-4" tabindex="-1">Improvements</h3>
26992778< li > The documentation at https://cortexjs.io/compute-engine/ has been
27002779significantly rewritten with help from an AI-powered writing assistant.</ li >
27012780</ ul >
2702- < h3 id ="bug-fixes-4 " tabindex ="-1 "> Bug Fixes</ h3 >
2781+ < h3 id ="bug-fixes-6 " tabindex ="-1 "> Bug Fixes</ h3 >
27032782< ul >
27042783< li > The LaTeX string returned in < code > ["Error"]</ code > expression was incorrectly tagged as
27052784< code > Latex</ code > instead of < code > LatexString</ code > .</ li >
@@ -2816,7 +2895,7 @@ <h3 id="improvements-6" tabindex="-1">Improvements</h3>
28162895</ ul >
28172896< h2 id ="0.13.0 " tabindex ="-1 "> 0.13.0</ h2 >
28182897< p > < strong > Release Date:</ strong > 2023-09-09</ p >
2819- < h3 id ="new-features-4 " tabindex ="-1 "> New Features</ h3 >
2898+ < h3 id ="new-features-5 " tabindex ="-1 "> New Features</ h3 >
28202899< ul >
28212900< li > Some expressions can be compiled to Javascript. This is useful to evaluate an
28222901expression many times, for example in a loop. The compiled expression is
@@ -2882,7 +2961,7 @@ <h3 id="improvements-8" tabindex="-1">Improvements</h3>
28822961< li > Improved accuracy of some operations, for example
28832962< code > expr.parse("1e999 + 1").simplify()</ code > </ li >
28842963</ ul >
2885- < h3 id ="bug-fixes-5 " tabindex ="-1 "> Bug Fixes</ h3 >
2964+ < h3 id ="bug-fixes-7 " tabindex ="-1 "> Bug Fixes</ h3 >
28862965< ul >
28872966< li > When < code > ce.numericMode === "auto"</ code > , square roots of negative numbers would
28882967return an expression instead of a complex number.</ li >
@@ -2909,7 +2988,7 @@ <h3 id="improvements-9" tabindex="-1">Improvements</h3>
29092988precisely controlled. The < code > hold</ code > symbol attribute is now < code > holdUntil</ code > and can
29102989specify at which stage the substitution should take place.</ li >
29112990</ ul >
2912- < h3 id ="bug-fixes-6 " tabindex ="-1 "> Bug Fixes</ h3 >
2991+ < h3 id ="bug-fixes-8 " tabindex ="-1 "> Bug Fixes</ h3 >
29132992< ul >
29142993< li > Some constants would return a value as bignum or complex even when the
29152994< code > numericMode</ code > did not allow it.</ li >
@@ -2925,7 +3004,7 @@ <h3 id="breaking-changes-8" tabindex="-1">Breaking Changes</h3>
29253004< li > < code > expr.isLiteral</ code > has been removed. Use < code > expr.numericValue !== null</ code > and
29263005< code > expr.string !== null</ code > instead.</ li >
29273006</ ul >
2928- < h3 id ="bug-fixes-7 " tabindex ="-1 "> Bug Fixes</ h3 >
3007+ < h3 id ="bug-fixes-9 " tabindex ="-1 "> Bug Fixes</ h3 >
29293008< ul >
29303009< li > Calling < code > ce.forget()</ code > would not affect expressions that previously referenced
29313010the symbol.</ li >
@@ -3345,14 +3424,14 @@ <h3 id="improvements-15" tabindex="-1">Improvements</h3>
33453424
33463425
33473426
3348- < meta itemprop ="datePublished " content ="October 30 , 2023 ">
3427+ < meta itemprop ="datePublished " content ="November 02 , 2023 ">
33493428
33503429
33513430
33523431
33533432
33543433
3355- < p class ="page__date "> < svg class ="icon1quarterem "> < use role ="none " xlink:href ="/assets/icons.svg#calendar-days "/> </ svg > < strong > Updated</ strong > < time datetime ="2023-10-30 " > October 30 , 2023</ time > </ p >
3434+ < p class ="page__date "> < svg class ="icon1quarterem "> < use role ="none " xlink:href ="/assets/icons.svg#calendar-days "/> </ svg > < strong > Updated</ strong > < time datetime ="2023-11-02 " > November 02 , 2023</ time > </ p >
33563435
33573436
33583437 < p class ="page__meta-link "> < svg class ="icon1quarterem "> < use role ="none " xlink:href ="/assets/icons.svg#bug "/> </ svg > < strong > Problem? Feedback?</ strong > File a report at < a href ="https://github.com/cortex-js/cortexjs.io "> github.com/cortex-js/cortexjs.io</ a > </ p >
0 commit comments