diff options
Diffstat (limited to 'macros/generic/polexpr/polexpr-changes.html')
-rw-r--r-- | macros/generic/polexpr/polexpr-changes.html | 629 |
1 files changed, 629 insertions, 0 deletions
diff --git a/macros/generic/polexpr/polexpr-changes.html b/macros/generic/polexpr/polexpr-changes.html new file mode 100644 index 0000000000..51392f6565 --- /dev/null +++ b/macros/generic/polexpr/polexpr-changes.html @@ -0,0 +1,629 @@ + +<!DOCTYPE html> + +<html lang="en"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> + + <title>CHANGES — polexpr 0.8.7 documentation</title> + <link rel="stylesheet" type="text/css" href="polexpr.css" /> + <link rel="prev" title="polexpr reference" href="polexpr-ref.html" /> + </head><body> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="polexpr-ref.html" title="polexpr reference" + accesskey="P">previous</a></li> + <li class="nav-item nav-item-0"><a href="polexpr.html">polexpr 0.8.7 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">CHANGES</a></li> + </ul> + </div> + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + <div class="body" role="main"> + + <section id="changes"> +<h1>CHANGES</h1> +<section id="v0-1-2018-01-11-initial-release-features"> +<span id="firstrelease"></span><h2>v0.1 (2018/01/11): initial release. Features:</h2> +<ul class="simple"> +<li><p>The <a class="reference internal" href="polexpr-ref.html#poldef"><span class="std std-ref">\poldef</span></a> parser itself,</p></li> +<li><p>Differentiation and anti-differentiation,</p></li> +<li><p>Euclidean division and GCDs,</p></li> +<li><p>Various utilities such as <a class="reference internal" href="polexpr-ref.html#polfromcsv"><span class="std std-ref">\PolFromCSV</span></a>, +<a class="reference internal" href="polexpr-ref.html#polmapcoeffs"><span class="std std-ref">\PolMapCoeffs</span></a>, +<a class="reference internal" href="polexpr-ref.html#poltocsv"><span class="std std-ref">\PolToCSV</span></a>, <a class="reference internal" href="polexpr-ref.html#poltoexpr"><span class="std std-ref">\PolToExpr</span></a>, …</p></li> +</ul> +<p>Only one-variable polynomials so far.</p> +</section> +<section id="v0-2-2018-01-14"> +<h2>v0.2 (2018/01/14)</h2> +<ul class="simple"> +<li><p>Fix: <code class="docutils literal notranslate"><span class="pre">"README</span> <span class="pre">thinks</span> <span class="pre">\numexpr</span> <span class="pre">recognizes</span> <span class="pre">^</span> <span class="pre">operator"</span></code>.</p></li> +<li><p>Convert README to reStructuredText markup.</p></li> +<li><p>Move main documentation from README to separate <code class="docutils literal notranslate"><span class="pre">polexpr.txt</span></code> file.</p></li> +<li><p>Provide <code class="docutils literal notranslate"><span class="pre">polexpr.html</span></code> as obtained via <a class="reference external" href="http://docutils.sourceforge.net/docs/index.html">DocUtils</a> <code class="docutils literal notranslate"><span class="pre">rst2html.py</span></code>.</p></li> +<li><p>Convert README to (CTAN compatible) Markdown markup.</p></li> +</ul> +<p>Due to lack of available time the test suite might not be extensive +enough. Bug reports are very welcome!</p> +</section> +<section id="v0-3-2018-01-17"> +<h2>v0.3 (2018/01/17)</h2> +<ul> +<li><p>bug fixes:</p> +<ul> +<li><p>the <code class="docutils literal notranslate"><span class="pre">0.1</span></code> <a class="reference internal" href="polexpr-ref.html#polevalat"><span class="std std-ref">\PolEval</span></a> accepted expressions for its +second argument, but this was removed by mistake at <code class="docutils literal notranslate"><span class="pre">0.2</span></code>. Restored.</p> +<p><strong>Attention</strong>: at <code class="docutils literal notranslate"><span class="pre">0.4</span></code> this has been reverted again, and +<a class="reference internal" href="polexpr-ref.html#polevalatexpr"><span class="std std-ref">\PolEval{P}\AtExpr{foo}</span></a> syntax is needed for +using expressions in the second argument.</p> +</li> +</ul> +</li> +<li><p>incompatible or breaking changes:</p> +<ul class="simple"> +<li><p><a class="reference internal" href="polexpr-ref.html#poltoexpr"><span class="std std-ref">\PolToExpr</span></a> now by default uses <em>descending</em> +powers (it also treats differently coefficients equal to 1 or -1.) +Use <a class="reference internal" href="polexpr-ref.html#id78"><span class="std std-ref">\PolToExpr*</span></a> for <em>ascending</em> powers.</p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polevalat"><span class="std std-ref">\PolEval</span></a> reduced the output to smallest terms, +but as this is costly with big fractions and not needed if e.g. +wrapped in an <code class="docutils literal notranslate"><span class="pre">\xintRound</span></code> or <code class="docutils literal notranslate"><span class="pre">\xintFloat</span></code>, this step has been +removed; the former meaning is available as +<a class="reference internal" href="polexpr-ref.html#polevalreducedat"><span class="std std-ref">\PolEvalReduced</span></a>.</p></li> +</ul> +</li> +<li><p>new (or newly documented) macros:</p> +<ul class="simple"> +<li><p><a class="reference internal" href="polexpr-ref.html#poltypesetcmd"><span class="std std-ref">\PolTypesetCmd</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poltypesetcmdprefix"><span class="std std-ref">\PolTypesetCmdPrefix</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poltypesetmonomialcmd"><span class="std std-ref">\PolTypesetMonomialCmd</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polevalreducedat"><span class="std std-ref">\PolEvalReducedAt</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poltofloatexpr"><span class="std std-ref">\PolToFloatExpr</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poltoexproneterm"><span class="std std-ref">\PolToExprOneTerm</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poltofloatexproneterm"><span class="std std-ref">\PolToFloatExprOneTerm</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poltoexprcmd"><span class="std std-ref">\PolToExprCmd</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poltofloatexprcmd"><span class="std std-ref">\PolToFloatExprCmd</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poltoexprtermprefix"><span class="std std-ref">\PolToExprTermPrefix</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poltoexprvar"><span class="std std-ref">\PolToExprVar</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poltoexprtimes"><span class="std std-ref">\PolToExprTimes</span></a></p></li> +</ul> +</li> +<li><p>improvements:</p> +<ul> +<li><p>documentation has a table of contents, internal hyperlinks, +standardized signature notations and added explanations.</p></li> +<li><p>one can do <code class="docutils literal notranslate"><span class="pre">\PolLet{g}={f}</span></code> or <code class="docutils literal notranslate"><span class="pre">\PolLet{g}{f}</span></code>.</p></li> +<li><p><code class="docutils literal notranslate"><span class="pre">\PolToExpr{f}</span></code> is highly customizable.</p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poldef"><span class="std std-ref">\poldef</span></a> and other defining macros prepare the +polynomial functions for usage within <code class="docutils literal notranslate"><span class="pre">\xintthefloatexpr</span></code> (or +<code class="docutils literal notranslate"><span class="pre">\xintdeffloatvar</span></code>). Coefficients are pre-rounded to the floating +point precision. Indispensible for numerical algorithms, as exact +fractions, even reduced, quickly become very big. See the documentation +about how to use the exact polynomials also in floating point context.</p> +<p><strong>Attention</strong>: this has been reverted at <code class="docutils literal notranslate"><span class="pre">0.4</span></code>. The macro +<a class="reference internal" href="polexpr-ref.html#polgenfloatvariant"><span class="std std-ref">\PolGenFloatVariant</span></a> must be used for +generation floating point polynomial functions.</p> +</li> +</ul> +</li> +</ul> +</section> +<section id="v0-3-1-2018-01-18"> +<h2>v0.3.1 (2018/01/18)</h2> +<p>Fixes two typos in example code included in the documentation.</p> +</section> +<section id="v0-4-2018-02-16"> +<h2>v0.4 (2018/02/16)</h2> +<ul> +<li><p>bug fixes:</p> +<ul class="simple"> +<li><p>when Euclidean division gave a zero remainder, the internal +representation of this zero polynomial could be faulty; this +could cause mysterious bugs in conjunction with other package +macros such as <a class="reference internal" href="polexpr-ref.html#polmapcoeffs"><span class="std std-ref">\PolMapCoeffs</span></a>.</p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polgcd"><span class="std std-ref">\PolGCD</span></a> was buggy in case of first polynomial being +of lesser degree than the second one.</p></li> +</ul> +</li> +<li><p>breaking changes:</p> +<ul> +<li><p>formerly <a class="reference internal" href="polexpr-ref.html#polevalat"><span class="std std-ref">\PolEval{P}\At{foo}</span></a> allowed <code class="docutils literal notranslate"><span class="pre">foo</span></code> to +be an expression, which was transparently handled via +<code class="docutils literal notranslate"><span class="pre">\xinttheexpr</span></code>. Now, <code class="docutils literal notranslate"><span class="pre">foo</span></code> must be a fraction (or a macro +expanding to such) in the format acceptable by <code class="docutils literal notranslate"><span class="pre">xintfrac.sty</span></code> +macros. Use <a class="reference internal" href="polexpr-ref.html#polevalatexpr"><span class="std std-ref">\PolEval{P}\AtExpr{foo}</span></a> for more +general arguments using expression syntax. E.g., if <code class="docutils literal notranslate"><span class="pre">foo</span></code> is the +name of a variable known to <code class="docutils literal notranslate"><span class="pre">\xintexpr</span></code>.</p> +<p>The same holds for <a class="reference internal" href="polexpr-ref.html#polevalreducedat"><span class="std std-ref">\PolEvalReduced</span></a> +and <a class="reference internal" href="polexpr-ref.html#polfloatevalat"><span class="std std-ref">\PolFloatEval</span></a>.</p> +</li> +<li><p>the <code class="docutils literal notranslate"><span class="pre">3.0</span></code> automatic generation of floating point variants has +been reverted. Not only do <em>not</em> the package macros automatically +generate floating point variants of newly created polynomials, +they actually make pre-existing such variant undefined.</p> +<p>See <a class="reference internal" href="polexpr-ref.html#polgenfloatvariant"><span class="std std-ref">\PolGenFloatVariant</span></a>.</p> +</li> +</ul> +</li> +<li><p>new non-expandable macros:</p> +<ul class="simple"> +<li><p><a class="reference internal" href="polexpr-ref.html#polgenfloatvariant"><span class="std std-ref">\PolGenFloatVariant</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polgloballet"><span class="std std-ref">\PolGlobalLet</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poltypesetone"><span class="std std-ref">\PolTypesetOne</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polquo"><span class="std std-ref">\PolQuo</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polrem"><span class="std std-ref">\PolRem</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poltosturm"><span class="std std-ref">\PolToSturm</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#id35"><span class="std std-ref">\PolToSturm*</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsettosturmchainsignchangesat"><span class="std std-ref">\PolSetToSturmChainSignChangesAt</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsettonbofzeroswithin"><span class="std std-ref">\PolSetToNbOfZerosWithin</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmisolatezeros"><span class="std std-ref">\PolSturmIsolateZeros</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polrefineinterval"><span class="std std-ref">\PolRefineInterval*</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#id46"><span class="std std-ref">\PolRefineInterval[N]</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polensureintervallength"><span class="std std-ref">\PolEnsureIntervalLength</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polensureintervallengths"><span class="std std-ref">\PolEnsureIntervalLengths</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polprintintervals"><span class="std std-ref">\PolPrintIntervals</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polprintintervalsprintexactzero"><span class="std std-ref">\PolPrintIntervalsPrintExactZero</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polprintintervalsprintleftendpoint"><span class="std std-ref">\PolPrintIntervalsPrintLeftEndPoint</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polprintintervalsprintrightendpoint"><span class="std std-ref">\PolPrintIntervalsPrintRightEndPoint</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#id20"><span class="std std-ref">\PolReduceCoeffs*</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polmakemonic"><span class="std std-ref">\PolMakeMonic</span></a></p></li> +</ul> +</li> +<li><p>new expandable macros:</p> +<ul class="simple"> +<li><p><a class="reference internal" href="polexpr-ref.html#poltoexpronetermstylea"><span class="std std-ref">\PolToExprOneTermStyleA</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polifcoeffisplusorminusone"><span class="std std-ref">\PolIfCoeffIsPlusOrMinusOne</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polleadingcoeff"><span class="std std-ref">\PolLeadingCoeff</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmchainlength"><span class="std std-ref">\PolSturmChainLength</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmnbofisolatedzeros"><span class="std std-ref">\PolSturmNbOfIsolatedZeros</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmifzeroexactlyknown"><span class="std std-ref">\PolSturmIfZeroExactlyKnown</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmisolatedzeroleft"><span class="std std-ref">\PolSturmIsolatedZeroLeft</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmisolatedzeroright"><span class="std std-ref">\PolSturmIsolatedZeroRight</span></a></p></li> +<li><p><code class="docutils literal notranslate"><span class="pre">\PolPrintIntervalsTheEndPoint</span></code> (removed at 0.7)</p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polprintintervalstheindex"><span class="std std-ref">\PolPrintIntervalsTheIndex</span></a></p></li> +<li><p><code class="docutils literal notranslate"><span class="pre">\PolIfEndPointIsPositive</span></code> (removed at 0.7)</p></li> +<li><p><code class="docutils literal notranslate"><span class="pre">\PolIfEndPointIsNegative</span></code> (removed at 0.7)</p></li> +<li><p><code class="docutils literal notranslate"><span class="pre">\PolIfEndPointIsZero</span></code> (removed at 0.7)</p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polintervalwidth"><span class="std std-ref">\PolIntervalWidth</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poldectostring"><span class="std std-ref">\PolDecToString</span></a></p></li> +</ul> +</li> +<li><p>improvements:</p> +<p>The main new feature is implementation of the <a class="reference external" href="https://en.wikipedia.org/wiki/Sturm%27s_theorem">Sturm algorithm</a> +for localization of the real roots of polynomials.</p> +</li> +</ul> +</section> +<section id="v0-4-1-2018-03-01"> +<h2>v0.4.1 (2018/03/01)</h2> +<p>Synced with xint 1.3.</p> +</section> +<section id="v0-4-2-2018-03-03"> +<h2>v0.4.2 (2018/03/03)</h2> +<p>Documentation fix.</p> +</section> +<section id="v0-5-2018-04-08"> +<h2>v0.5 (2018/04/08)</h2> +<ul class="simple"> +<li><p>bug fixes:</p> +<ul> +<li><p><a class="reference internal" href="polexpr-ref.html#polget"><span class="std std-ref">\PolGet{polname}\fromarray\macro</span></a> +crashed when <code class="docutils literal notranslate"><span class="pre">\macro</span></code> was +an <a class="reference external" href="https://www.ctan.org/pkg/xint">xinttools</a> array macro with no items. It now produces the zero +polynomial.</p></li> +</ul> +</li> +<li><p>breaking changes:</p> +<ul> +<li><p><a class="reference internal" href="polexpr-ref.html#poltosturm"><span class="std std-ref">\PolToSturm</span></a> creates primitive integer coefficients +polynomials. This speeds up localization of roots via +<a class="reference internal" href="polexpr-ref.html#polsturmisolatezeros"><span class="std std-ref">\PolSturmIsolateZeros</span></a>. In case of user +protests the author will make available again the code producing the +bona fide Sturm polynomials as used formerly.</p></li> +<li><p>polynomials created from <a class="reference internal" href="polexpr-ref.html#polfromcsv"><span class="std std-ref">\PolFromCSV</span></a> or +<a class="reference internal" href="polexpr-ref.html#polget"><span class="std std-ref">\PolGet</span></a> +get their coefficients normalized via <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a>‘s <code class="docutils literal notranslate"><span class="pre">\xintRaw</span></code>.</p></li> +</ul> +</li> +<li><p>experimental change:</p> +<ul> +<li><p>optional argument to <a class="reference internal" href="polexpr-ref.html#polsturmisolatezeros"><span class="std std-ref">\PolSturmIsolateZeros</span></a> +(see <code class="docutils literal notranslate"><span class="pre">The</span> <span class="pre">degree</span> <span class="pre">41</span> <span class="pre">polynomial</span> <span class="pre">with</span> <span class="pre">-2,</span> <span class="pre">-1.9,</span> <span class="pre">-1.8,</span> <span class="pre">...,</span> <span class="pre">0,</span> <span class="pre">0.1,</span> <span class="pre">...,</span> +<span class="pre">1.9,</span> <span class="pre">2</span> <span class="pre">as</span> <span class="pre">roots</span></code> in <code class="docutils literal notranslate"><span class="pre">polexpr-examples.pdf</span></code>). It will presumably be +replaced in future by an interval specification.</p></li> +</ul> +</li> +<li><p>new non-expandable macro:</p> +<ul> +<li><p><a class="reference internal" href="polexpr-ref.html#polmakeprimitive"><span class="std std-ref">\PolMakePrimitive</span></a></p></li> +</ul> +</li> +<li><p>new expandable macro:</p> +<ul> +<li><p><a class="reference internal" href="polexpr-ref.html#policontent"><span class="std std-ref">\PolIContent</span></a></p></li> +</ul> +</li> +</ul> +</section> +<section id="v0-5-1-2018-04-22"> +<h2>v0.5.1 (2018/04/22)</h2> +<ul class="simple"> +<li><p>new feature:</p> +<ul> +<li><p>the character <code class="docutils literal notranslate"><span class="pre">'</span></code> can be used in polynomial names.</p></li> +</ul> +</li> +</ul> +</section> +<section id="v0-6-2018-11-20"> +<h2>v0.6 (2018/11/20)</h2> +<ul class="simple"> +<li><p>bugfix:</p> +<ul> +<li><p>the starred variant +<a class="reference internal" href="polexpr-ref.html#id35"><span class="std std-ref">\PolToSturm*{<polname>}{<sturmname>}</span></a> +was broken. On the occasion of the fix, its meaning has +been modified, see its documentation.</p></li> +<li><p>using <a class="reference internal" href="polexpr-ref.html#poltosturm"><span class="std std-ref">\PolToSturm</span></a> with a constant polynomial +caused a division by zero error.</p></li> +</ul> +</li> +<li><p>new macro:</p> +<ul> +<li><p><a class="reference internal" href="polexpr-ref.html#id38"><span class="std std-ref">\PolSturmIsolateZeros*</span></a> +acts like the <a class="reference internal" href="polexpr-ref.html#polsturmisolatezeros"><span class="std std-ref">non-starred variant</span></a> then computes all the multiplicities.</p></li> +</ul> +</li> +<li><p>new expandable macros:</p> +<ul> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmisolatedzeromultiplicity"><span class="std std-ref">\PolSturmIsolatedZeroMultiplicity{<sturmname>}{<index>}</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmnbofrootsoflessthanorequalto"><span class="std std-ref">\PolSturmNbOfRootsOf{<sturmname>}\LessThanOrEqualTo{<value>}</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmnbofrootsoflessthanorequaltoexpr"><span class="std std-ref">\PolSturmNbOfRootsOf{<sturmname>}\LessThanOrEqualToExpr{<num. expr.>}</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmnbwithmultofrootsoflessthanorequalto"><span class="std std-ref">\PolSturmNbWithMultOfRootsOf{<sturmname>}\LessThanOrEqualTo{<value>}</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmnbwithmultofrootsoflessthanorequaltoexpr"><span class="std std-ref">\PolSturmNbWithMultOfRootsOf{<sturmname>}\LessThanOrEqualToExpr{<num. expr.>}</span></a></p></li> +</ul> +</li> +</ul> +</section> +<section id="v0-7-2018-12-08-v0-7-1-bugfix-v0-7-2-2nd-bugfix-2018-12-09"> +<h2>v0.7 (2018/12/08), v0.7.1 (bugfix), v0.7.2 (2nd bugfix) (2018/12/09)</h2> +<ul class="simple"> +<li><p>breaking changes:</p> +<ul> +<li><p>although <a class="reference internal" href="polexpr-ref.html#polprintintervals"><span class="std std-ref">\PolPrintIntervals[<varname>]{<sturmname>}</span></a> default output +remains the same, some auxiliary macros for user-customization +have been removed: <code class="docutils literal notranslate"><span class="pre">\PolPrintIntervalsTheEndPoint</span></code>, +<code class="docutils literal notranslate"><span class="pre">\PolIfEndPointIsPositive{T}{F}</span></code>, +<code class="docutils literal notranslate"><span class="pre">\PolIfEndPointIsNegative{T}{F}</span></code>, and +<code class="docutils literal notranslate"><span class="pre">\PolIfEndPointIsZero{T}{F}</span></code>.</p></li> +</ul> +</li> +<li><p>bugfix:</p> +<ul> +<li><p>it could happen that, contrarily to documentation, an interval computed +by <a class="reference internal" href="polexpr-ref.html#polsturmisolatezeros"><span class="std std-ref">\PolSturmIsolateZeros{<sturmname>}</span></a> had +zero as an endpoint,</p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polensureintervallength"><span class="std std-ref">\PolEnsureIntervalLength{<sturmname>}{<index>}{<exponent>}</span></a> could under certain circumstances erroneously +replace a non-zero root by zero,</p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polensureintervallengths"><span class="std std-ref">\PolEnsureIntervalLengths{<sturmname>}{<exponent>}</span></a> crashed when used with a polynomial with no +real roots, hence for which no isolation intervals existed (thanks to +Thomas Söll for report).</p></li> +</ul> +</li> +<li><p>new macros:</p> +<ul> +<li><p><a class="reference internal" href="polexpr-ref.html#id41"><span class="std std-ref">\PolSturmIsolateZeros**{<sturmname>}</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmisolatezerosgetmultiplicitiesandrationalroots"><span class="std std-ref">\PolSturmIsolateZerosGetMultiplicitiesAndRationalRoots{<sturmname>}</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmisolatezerosandfindrationalroots"><span class="std std-ref">\PolSturmIsolateZerosAndFindRationalRoots{<sturmname>}</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polexprsetup"><span class="std std-ref">\polexprsetup</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#id61"><span class="std std-ref">\PolPrintIntervals*</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polprintintervalsnorealroots"><span class="std std-ref">\PolPrintIntervalsNoRealRoots</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polprintintervalsbeginenv"><span class="std std-ref">\PolPrintIntervalsBeginEnv</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polprintintervalsendenv"><span class="std std-ref">\PolPrintIntervalsEndEnv</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polprintintervalsknownroot"><span class="std std-ref">\PolPrintIntervalsKnownRoot</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polprintintervalsunknownroot"><span class="std std-ref">\PolPrintIntervalsUnknownRoot</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polprintintervalsprintmultiplicity"><span class="std std-ref">\PolPrintIntervalsPrintMultiplicity</span></a></p></li> +</ul> +</li> +<li><p>new expandable macros:</p> +<ul> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmnbofrationalroots"><span class="std std-ref">\PolSturmNbOfRationalRoots{<sturmname>}</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmnbofrationalrootswithmultiplicities"><span class="std std-ref">\PolSturmNbOfRationalRootsWithMultiplicities{<sturmname>}</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmrationalroot"><span class="std std-ref">\PolSturmRationalRoot{<sturmname>}{<k>}</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmrationalrootindex"><span class="std std-ref">\PolSturmRationalRootIndex{<sturmname>}{<k>}</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polsturmrationalrootmultiplicity"><span class="std std-ref">\PolSturmRationalRootMultiplicity{<sturmname>}{<k>}</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polprintintervalsthevar"><span class="std std-ref">\PolPrintIntervalsTheVar</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polprintintervalsthesturmname"><span class="std std-ref">\PolPrintIntervalsTheSturmName</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polprintintervalsthemultiplicity"><span class="std std-ref">\PolPrintIntervalsTheMultiplicity</span></a></p></li> +</ul> +</li> +</ul> +</section> +<section id="v0-7-3-2019-02-04"> +<h2>v0.7.3 (2019/02/04)</h2> +<ul class="simple"> +<li><p>bugfix:</p> +<ul> +<li><p>Debugging information not destined to user showed in log if root +finding was done under <code class="docutils literal notranslate"><span class="pre">\xintverbosetrue</span></code> regime.</p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#polprintintervalsthevar"><span class="std std-ref">\PolPrintIntervalsTheVar</span></a> remained +defined after <a class="reference internal" href="polexpr-ref.html#polprintintervals"><span class="std std-ref">\PolPrintIntervals</span></a> but was +left undefined after <a class="reference internal" href="polexpr-ref.html#id61"><span class="std std-ref">\PolPrintIntervals*</span></a> +(reported by Jürgen Gilg). Now remains defined in both cases, and +<a class="reference internal" href="polexpr-ref.html#polprintintervalsthesturmname"><span class="std std-ref">\PolPrintIntervalsTheSturmName</span></a> +also.</p></li> +<li><p>Polynomial names ending in digits caused errors (reported by Thomas +Söll).</p></li> +</ul> +</li> +</ul> +</section> +<section id="v0-7-4-2019-02-12"> +<h2>v0.7.4 (2019/02/12)</h2> +<ul class="simple"> +<li><p>bugfix:</p> +<ul> +<li><p>20000000000 is too big for <code class="docutils literal notranslate"><span class="pre">\numexpr</span></code>, shouldn’t I know that? +Thanks to Jürgen Gilg for report.</p></li> +</ul> +</li> +</ul> +</section> +<section id="v0-7-5-2020-01-31"> +<h2>v0.7.5 (2020/01/31)</h2> +<p>Synced with xintexpr 1.4. Requires it.</p> +</section> +<section id="v0-8-2021-03-29"> +<span id="polexpr08release"></span><h2>v0.8 (2021/03/29)</h2> +<p>Synced with xintexpr 1.4d. Requires it.</p> +<ul class="simple"> +<li><p>breaking changes:</p> +<ul> +<li><p>As the usability of character <code class="docutils literal notranslate"><span class="pre">'</span></code> in names has been extended +from <code class="docutils literal notranslate"><span class="pre">\poldef</span></code> to also generally <code class="docutils literal notranslate"><span class="pre">\xintexpr</span></code>, <code class="docutils literal notranslate"><span class="pre">\xintdefvar</span></code>, +and <code class="docutils literal notranslate"><span class="pre">\xintdeffunc</span></code>, it means that the infix operators +<code class="docutils literal notranslate"><span class="pre">'and'</span></code>, <code class="docutils literal notranslate"><span class="pre">'or'</span></code>, and <code class="docutils literal notranslate"><span class="pre">'mod'</span></code> must be replaced +by <code class="docutils literal notranslate"><span class="pre">&&</span></code>, <code class="docutils literal notranslate"><span class="pre">||</span></code>, and <code class="docutils literal notranslate"><span class="pre">/:</span></code> if they +follow immediately a variable name (similarly <code class="docutils literal notranslate"><span class="pre">'xor'</span></code> must +be replaced by the <code class="docutils literal notranslate"><span class="pre">xor()</span></code> function in such case).</p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poltoexpr"><span class="std std-ref">\PolToExpr</span></a> by default uses a catcode 12 +<code class="docutils literal notranslate"><span class="pre">^</span></code>. See its documentation and the new configuration +<a class="reference internal" href="polexpr-ref.html#poltoexprcaret"><span class="std std-ref">\PolToExprCaret</span></a>.</p></li> +</ul> +</li> +<li><p>deprecated:</p> +<ul> +<li><p>Usage of <code class="docutils literal notranslate"><span class="pre">P/Q</span></code> for the euclidean quotient of two polynomials is +deprecated. Start using <code class="docutils literal notranslate"><span class="pre">quo(P,Q)</span></code> in its place.</p></li> +</ul> +</li> +<li><p>bugfix:</p> +<ul> +<li><p>The <code class="docutils literal notranslate"><span class="pre">\xintglobaldefstrue</span></code> setting was obeyed only partially +by the polexpr macros defining polynomials.</p></li> +<li><p>The <code class="docutils literal notranslate"><span class="pre">\xintexpr</span></code> variables storing the values of the extremities of the +intervals as found by <a class="reference internal" href="polexpr-ref.html#polsturmisolatezeros"><span class="std std-ref">\PolSturmIsolateZeros</span></a> were not updated at 0.7.5 to the xintexpr 1.4 +format and thus caused low-level TeX errors if used.</p></li> +<li><p>Attempting to use in <code class="docutils literal notranslate"><span class="pre">\poldef</span></code> a function previously declared +via <code class="docutils literal notranslate"><span class="pre">\xintdeffunc</span></code> which made usage of the indexing or slicing +“ople” syntax typically caused <code class="docutils literal notranslate"><span class="pre">TeX</span> <span class="pre">capacity</span> <span class="pre">exceeded</span></code> error. +Indeed 0.7.5 only partially made polexpr able to cope with the +extended possibilities for xintexpr 1.4 user-declared functions. +Hopefully <code class="docutils literal notranslate"><span class="pre">0.8</span></code> achieves full functionality in this context.</p></li> +</ul> +</li> +<li><p>new macros:</p> +<ul> +<li><p><a class="reference internal" href="polexpr-ref.html#polnewpolverbosefalse"><span class="std std-ref">\polnewpolverbosefalse</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poltoexprcaret"><span class="std std-ref">\PolToExprCaret</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#poltoexprinvar"><span class="std std-ref">\PolToExprInVar</span></a></p></li> +<li><p>alongside the major new functionalities described in the next item +<a class="reference internal" href="polexpr-ref.html#poltypeset"><span class="std std-ref">\PolTypeset</span></a> and <a class="reference internal" href="polexpr-ref.html#poltoexpr"><span class="std std-ref">\PolToExpr</span></a> have +been enhanced to accept as argument a general expression and not +only a pre-declared polynomial name.</p></li> +</ul> +</li> +<li><p>new features:</p> +<ul> +<li><p>The package is usable under Plain and probably most any TeX format, +and not only under LaTeX.</p></li> +<li><p>The core of the package has been rewritten entirely in order to +start letting <code class="docutils literal notranslate"><span class="pre">\xintexpr</span></code> recognize a polynomial type as a genuine +variable. This has allowed:</p> +<ul> +<li><p>to solve the reduced inter-operability problems between polexpr +and <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> which arose as consequences to the deep <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> <code class="docutils literal notranslate"><span class="pre">1.4</span></code> +evolution,</p></li> +<li><p>to make available most of the functionality associated to +expandable macros directly in the <code class="docutils literal notranslate"><span class="pre">\xinteval</span></code> syntax as +operators or functions,</p></li> +<li><p>to provide (expandable) functional interface in <code class="docutils literal notranslate"><span class="pre">\xinteval</span></code> to +features previously available only via (for some, non-expandable) +macro interface such as gcd computations.</p></li> +</ul> +</li> +</ul> +</li> +</ul> +<p>See the updated <a class="reference internal" href="polexpr-ref.html#quick"><span class="std std-ref">Quick syntax overview</span></a> and then +<a class="reference internal" href="polexpr-ref.html#polexpr08"><span class="std std-ref">the extended syntax description</span></a>.</p> +</section> +<section id="v0-8-1-2021-04-12"> +<h2>v0.8.1 (2021/04/12)</h2> +<ul class="simple"> +<li><p>breaking changes:</p> +<ul> +<li><p>renamed v0.8’s <code class="docutils literal notranslate"><span class="pre">icontent()</span></code> to <a class="reference internal" href="polexpr-ref.html#cont"><span class="std std-ref">cont()</span></a>.</p></li> +<li><p>renamed v0.8’s <code class="docutils literal notranslate"><span class="pre">lcoeff()</span></code> to <a class="reference internal" href="polexpr-ref.html#lc"><span class="std std-ref">lc()</span></a>.</p></li> +</ul> +</li> +<li><p>bugfix:</p> +<ul> +<li><p>Sadly, <code class="docutils literal notranslate"><span class="pre">diff1()</span></code>, <code class="docutils literal notranslate"><span class="pre">diff2()</span></code>, <code class="docutils literal notranslate"><span class="pre">diffn()</span></code> were broken +for polynomials of degrees 8 or more, due to a typo and +insufficient testing.</p></li> +<li><p>The package should have (as documented) required <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> 1.4d +but in practice it accepted to work with <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> 1.4c, whose +<code class="docutils literal notranslate"><span class="pre">\xinteval</span></code> does not know how to “output” a polynomial.</p></li> +<li><p>The definition of one of the two variants of +<a class="reference internal" href="polexpr-ref.html#polsturmnbofrootsoflessthanorequalto"><span class="std std-ref">\PolSturmNbOfRootsOf…</span></a> +was broken by an end-of-line space, left-over +from mass conversion from LaTeX to TeX syntax.</p></li> +</ul> +</li> +<li><p>added:</p> +<ul> +<li><p><a class="reference internal" href="polexpr-ref.html#lpol"><span class="std std-ref">lpol()</span></a></p></li> +<li><p><a class="reference internal" href="polexpr-ref.html#lcoeffs"><span class="std std-ref">lcoeffs()</span></a></p></li> +</ul> +</li> +</ul> +</section> +<section id="v0-8-2-2021-05-05"> +<h2>v0.8.2 (2021/05/05)</h2> +<ul class="simple"> +<li><p>breaking change:</p> +<ul> +<li><p>usage of <code class="docutils literal notranslate"><span class="pre">\xintPFloat</span></code> in place of <code class="docutils literal notranslate"><span class="pre">\xintFloat</span></code> for +<a class="reference internal" href="polexpr-ref.html#poltofloatexprcmd"><span class="std std-ref">\PolToFloatExprCmd</span></a>.</p></li> +</ul> +</li> +<li><p>improved:</p> +<ul> +<li><p>Some <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> functions such as <code class="docutils literal notranslate"><span class="pre">rseq()</span></code> use the semi-colon, +and it was mentioned in the documentation that <a class="reference internal" href="polexpr-ref.html#poldef"><span class="std std-ref">\poldef</span></a> +will be confused by this and that inner semi-colons could be +set within braces <code class="docutils literal notranslate"><span class="pre">{;}</span></code> as a work-around. It was not clear from +this documentation that also <a class="reference internal" href="polexpr-ref.html#id5"><span class="std std-ref">\PolDef</span></a> required +this work-around. With this relase only <a class="reference internal" href="polexpr-ref.html#poldef"><span class="std std-ref">\poldef</span></a> but +not <a class="reference internal" href="polexpr-ref.html#id5"><span class="std std-ref">\PolDef</span></a> needs the work-around.</p></li> +</ul> +</li> +<li><p>track <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> <code class="docutils literal notranslate"><span class="pre">1.4e</span></code> changes relative to powers.</p></li> +</ul> +</section> +<section id="v0-8-3-2021-05-27"> +<h2>v0.8.3 (2021/05/27)</h2> +<ul class="simple"> +<li><p>small internal update to track an <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> <code class="docutils literal notranslate"><span class="pre">1.4h</span></code> change +regarding handling of exceptions. Will require this version at +least on loading.</p></li> +</ul> +</section> +<section id="v0-8-4-2021-11-01"> +<h2>v0.8.4 (2021/11/01)</h2> +<ul class="simple"> +<li><p>bugfix: <a class="reference internal" href="polexpr-ref.html#id41"><span class="std std-ref">\PolSturmIsolateZeros**{<sturmname>}</span></a> did not declare the <code class="docutils literal notranslate"><span class="pre"><sturmname>_norr</span></code> and +<code class="docutils literal notranslate"><span class="pre"><sturmname>_sqf_norr</span></code> polynomials if original polynomial had no real +root!</p></li> +</ul> +</section> +<section id="v0-8-5-2021-11-30"> +<h2>v0.8.5 (2021/11/30)</h2> +<ul class="simple"> +<li><p>bugfix: support for the <code class="docutils literal notranslate"><span class="pre">intfrom()</span></code> function was in the code, +but the declaration to the polynomial parser had not been done.</p></li> +<li><p>track (belatedly) upstream deprecation of <code class="docutils literal notranslate"><span class="pre">\xintSignedFrac</span></code> and +<code class="docutils literal notranslate"><span class="pre">\xintSignedFwOver</span></code> at <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> <code class="docutils literal notranslate"><span class="pre">1.4g</span></code></p></li> +</ul> +</section> +<section id="v0-8-6-2022-01-09"> +<h2>v0.8.6 (2022/01/09)</h2> +<ul class="simple"> +<li><p>provide a separate <code class="docutils literal notranslate"><span class="pre">polexpr-examples.pdf</span></code> with examples formerly +shown as part of the html documentation.</p></li> +<li><p>minor improvement to the computation of a priori bounds on real roots.</p></li> +<li><p>add <a class="reference internal" href="polexpr-ref.html#polprintintervalsrowseparator"><span class="std std-ref">\PolPrintIntervalsRowSeparator</span></a> +and allow usage of <code class="docutils literal notranslate"><span class="pre">amsmath</span></code> environments in custom +<a class="reference internal" href="polexpr-ref.html#polprintintervalsbeginenv"><span class="std std-ref">\PolPrintIntervalsBeginEnv</span></a> and +<a class="reference internal" href="polexpr-ref.html#polprintintervalsendenv"><span class="std std-ref">\PolPrintIntervalsEndEnv</span></a>.</p></li> +</ul> +</section> +<section id="v0-8-7-2022-05-14"> +<h2>v0.8.7 (2022/05/14)</h2> +<ul class="simple"> +<li><p>bugfix: catcode sanitization by <a class="reference internal" href="polexpr-ref.html#poldef"><span class="std std-ref">\poldef</span></a> was minimal +ever since <code class="docutils literal notranslate"><span class="pre">0.1</span></code> and handled only the semi-colon. Thus e.g. the +active <code class="docutils literal notranslate"><span class="pre">!</span></code> from babel-french caused errors and <code class="docutils literal notranslate"><span class="pre">\string!</span></code> was +needed as work-around for factorials. Now the same sanitization as +for <code class="docutils literal notranslate"><span class="pre">\xintdefvar</span></code> and <code class="docutils literal notranslate"><span class="pre">\xintdeffunc</span></code> is applied. This however can +only work at locations where the catcodes are not yet frozen at the +time <code class="docutils literal notranslate"><span class="pre">\poldef</span></code> expands.</p></li> +<li><p>split the html documentation into three files and enhance it via CSS +styling.</p></li> +</ul> +</section> +</section> + + + <div class="clearer"></div> + </div> + </div> + </div> + <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> + <div class="sphinxsidebarwrapper"><h3>Contents of this page</h3> +<ul> +<li><a class="reference internal" href="#">CHANGES</a><ul> +<li><a class="reference internal" href="#v0-1-2018-01-11-initial-release-features">v0.1 (2018/01/11): initial release. Features:</a></li> +<li><a class="reference internal" href="#v0-2-2018-01-14">v0.2 (2018/01/14)</a></li> +<li><a class="reference internal" href="#v0-3-2018-01-17">v0.3 (2018/01/17)</a></li> +<li><a class="reference internal" href="#v0-3-1-2018-01-18">v0.3.1 (2018/01/18)</a></li> +<li><a class="reference internal" href="#v0-4-2018-02-16">v0.4 (2018/02/16)</a></li> +<li><a class="reference internal" href="#v0-4-1-2018-03-01">v0.4.1 (2018/03/01)</a></li> +<li><a class="reference internal" href="#v0-4-2-2018-03-03">v0.4.2 (2018/03/03)</a></li> +<li><a class="reference internal" href="#v0-5-2018-04-08">v0.5 (2018/04/08)</a></li> +<li><a class="reference internal" href="#v0-5-1-2018-04-22">v0.5.1 (2018/04/22)</a></li> +<li><a class="reference internal" href="#v0-6-2018-11-20">v0.6 (2018/11/20)</a></li> +<li><a class="reference internal" href="#v0-7-2018-12-08-v0-7-1-bugfix-v0-7-2-2nd-bugfix-2018-12-09">v0.7 (2018/12/08), v0.7.1 (bugfix), v0.7.2 (2nd bugfix) (2018/12/09)</a></li> +<li><a class="reference internal" href="#v0-7-3-2019-02-04">v0.7.3 (2019/02/04)</a></li> +<li><a class="reference internal" href="#v0-7-4-2019-02-12">v0.7.4 (2019/02/12)</a></li> +<li><a class="reference internal" href="#v0-7-5-2020-01-31">v0.7.5 (2020/01/31)</a></li> +<li><a class="reference internal" href="#v0-8-2021-03-29">v0.8 (2021/03/29)</a></li> +<li><a class="reference internal" href="#v0-8-1-2021-04-12">v0.8.1 (2021/04/12)</a></li> +<li><a class="reference internal" href="#v0-8-2-2021-05-05">v0.8.2 (2021/05/05)</a></li> +<li><a class="reference internal" href="#v0-8-3-2021-05-27">v0.8.3 (2021/05/27)</a></li> +<li><a class="reference internal" href="#v0-8-4-2021-11-01">v0.8.4 (2021/11/01)</a></li> +<li><a class="reference internal" href="#v0-8-5-2021-11-30">v0.8.5 (2021/11/30)</a></li> +<li><a class="reference internal" href="#v0-8-6-2022-01-09">v0.8.6 (2022/01/09)</a></li> +<li><a class="reference internal" href="#v0-8-7-2022-05-14">v0.8.7 (2022/05/14)</a></li> +</ul> +</li> +</ul> + + <div role="note" aria-label="source link"> + <h3>This Page</h3> + <ul class="this-page-menu"> + <li><a href="polexpr-changes.rst.txt" + rel="nofollow">Show Source</a></li> + </ul> + </div> + <div> + <h4>Previous topic</h4> + <p class="topless"><a href="polexpr-ref.html" + title="previous chapter">polexpr reference</a></p> + </div> + </div> + </div> + <div class="clearer"></div> + </div> + <div class="related" role="navigation" aria-label="related navigation"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="polexpr-ref.html" title="polexpr reference" + >previous</a></li> + <li class="nav-item nav-item-0"><a href="polexpr.html">polexpr 0.8.7 documentation</a> »</li> + <li class="nav-item nav-item-this"><a href="">CHANGES</a></li> + </ul> + </div> + <div class="footer" role="contentinfo"> + © Copyright 2022, Jean-François Burnol. + Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.0.0+/f58771c09. + </div> + </body> +</html>
\ No newline at end of file |