summaryrefslogtreecommitdiff
path: root/macros/generic/polexpr/polexpr.html
blob: 23dafab2c2db05e1e6d257f1dec60ee5cc7bda9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190

<!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>Introduction to polexpr &#8212; polexpr 0.8.7 documentation</title>
    <link rel="stylesheet" type="text/css" href="polexpr.css" />
    <link rel="next" 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="N">next</a></li>
        <li class="nav-item nav-item-0"><a href="#">polexpr 0.8.7 documentation</a> &#187;</li>
        <li class="nav-item nav-item-this"><a href="">Introduction to polexpr</a></li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body" role="main">
            
  <section id="introduction-to-polexpr">
<h1>Introduction to polexpr</h1>
<p><a class="reference external" href="https://www.ctan.org/pkg/polexpr">polexpr</a> is a TeX and LaTeX macro package.</p>
<p>To use it with Plain or formats other than LaTeX:</p>
<div class="highlight-latex notranslate"><div class="highlight"><pre><span></span><span class="k">\input</span> polexpr.sty
</pre></div>
</div>
<p>To use it with LaTeX:</p>
<div class="highlight-latex notranslate"><div class="highlight"><pre><span></span><span class="k">\usepackage</span><span class="nb">{</span>polexpr<span class="nb">}</span>
</pre></div>
</div>
<p><a class="reference external" href="https://www.ctan.org/pkg/polexpr">polexpr</a> loads <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> and extends its syntax with a polynomial type.</p>
<p>Polynomials are defined via the <a class="reference internal" href="polexpr-ref.html#quick"><span class="std std-ref">\poldef</span></a> parser and
can then be manipulated via TeX macros for various operations such
as obtaining G.C.D.s, computing derivatives, or indefinite
integrals… many of these functionalities are available directly
via functions in the syntax recognized by the <code class="docutils literal notranslate"><span class="pre">\poldef</span></code> parser.</p>
<p>Apart from the final step of internally creating some TeX macros
associated with the polynomial name, this is all done completely
expandably, and a polynomial expression can be fetched directly to
<code class="docutils literal notranslate"><span class="pre">\xinteval</span></code> for a completely expandable operation from start to
finish.</p>
<p>For polynomials fully declared via <code class="docutils literal notranslate"><span class="pre">\poldef</span></code>, root localization
implementing the <a class="reference external" href="https://en.wikipedia.org/wiki/Sturm%27s_theorem">Sturm algorithm</a> is available via macros.
Arbitrarily long decimal expansion of all real roots can be
obtained, and all rational roots can be found exactly.</p>
<p>The legacy documentation section which showed examples of root
localization has been moved to the <a class="reference external" href="polexpr-examples.pdf">polexpr-examples.pdf</a> document, where both the TeX code and its
output are displayed.</p>
<p>To access this document (if the previous link for some reason does not
work):</p>
<div class="highlight-latex notranslate"><div class="highlight"><pre><span></span>texdoc polexpr-examples
</pre></div>
</div>
<section id="usage-via-xintsession">
<h2>Usage via <a class="reference external" href="https://www.ctan.org/pkg/xintsession">xintsession</a></h2>
<p>The simplest manner to get a feeling for the package abilities regarding
in particularl root localization is to use it on the command line
via the <a class="reference external" href="https://www.ctan.org/pkg/xintsession">xintsession</a> interface.  Here is an example:</p>
<div class="highlight-latex notranslate"><div class="highlight"><pre><span></span><span class="s">$</span><span class="nb"> rlwrap etex xintsession</span>
<span class="o">[</span><span class="nb">...xintsession welcome message...</span><span class="o">]</span><span class="nb"></span>
<span class="nb">Starting in exact mode </span><span class="o">(</span><span class="nb">floating point evaluations use </span><span class="m">16</span><span class="nb"> digits</span><span class="o">)</span><span class="nb"></span>
<span class="nb">&gt;&gt;&gt; &amp;pol</span>
<span class="nb">pol mode </span><span class="o">(</span><span class="nb">i.e. function definitions use </span><span class="nv">\poldef</span><span class="o">)</span><span class="nb"></span>
<span class="nb">&gt;&gt;&gt; f</span><span class="o">(</span><span class="nb">x</span><span class="o">)</span><span class="nb"> :</span><span class="o">=</span><span class="nb"> x^</span><span class="m">7</span><span class="nb"> </span><span class="o">-</span><span class="nb"> x^</span><span class="m">6</span><span class="nb"> </span><span class="o">-</span><span class="nb"> </span><span class="m">2</span><span class="nb">x </span><span class="o">+</span><span class="nb"> </span><span class="m">1</span><span class="nb">;</span>
<span class="nb">f </span><span class="o">=</span><span class="nb"> x^</span><span class="m">7</span><span class="o">-</span><span class="nb">x^</span><span class="m">6</span><span class="o">-</span><span class="m">2</span><span class="o">*</span><span class="nb">x</span><span class="o">+</span><span class="m">1</span><span class="nb"></span>
<span class="nb">    </span><span class="o">--</span><span class="nb">&gt; &amp;GenFloat</span><span class="o">(</span><span class="nb">f</span><span class="o">)</span><span class="nb"> lets f become usable as function in fp mode</span>
<span class="nb">    </span><span class="o">--</span><span class="nb">&gt; &amp;ROOTS</span><span class="o">(</span><span class="nb">f</span><span class="o">)</span><span class="nb"> </span><span class="o">(</span><span class="nb">resp. &amp;ROOTS</span><span class="o">(</span><span class="nb">f,N</span><span class="o">))</span><span class="nb"> finds all rational roots exactly and</span>
<span class="nb">        all irrational roots with at least </span><span class="m">10</span><span class="nb"> </span><span class="o">(</span><span class="nb">resp. N</span><span class="o">)</span><span class="nb"> fractional digits</span>
<span class="nb">&gt;&gt;&gt; &amp;ROOTS</span><span class="o">(</span><span class="nb">f</span><span class="o">)</span><span class="nb"></span>
<span class="nb">Solving for real roots of f and assigning them </span><span class="o">(</span><span class="nb">please wait...</span><span class="o">)</span><span class="nb"></span>
<span class="o">(</span><span class="nb">mult. </span><span class="m">1</span><span class="o">)</span><span class="nb"> Rootf_</span><span class="m">1</span><span class="nb"> </span><span class="o">=</span><span class="nb"> </span><span class="o">-</span><span class="m">1</span><span class="nb">.</span><span class="m">0719678841</span><span class="nb">...</span>
<span class="o">(</span><span class="nb">mult. </span><span class="m">1</span><span class="o">)</span><span class="nb"> Rootf_</span><span class="m">2</span><span class="nb"> </span><span class="o">=</span><span class="nb"> </span><span class="m">0</span><span class="nb">.</span><span class="m">4962386948</span><span class="nb">...</span>
<span class="o">(</span><span class="nb">mult. </span><span class="m">1</span><span class="o">)</span><span class="nb"> Rootf_</span><span class="m">3</span><span class="nb"> </span><span class="o">=</span><span class="nb"> </span><span class="m">1</span><span class="nb">.</span><span class="m">3151140860</span><span class="nb">...</span>
<span class="nb">Square</span><span class="o">-</span><span class="nb">free irrational part: x^</span><span class="m">7</span><span class="o">-</span><span class="nb">x^</span><span class="m">6</span><span class="o">-</span><span class="m">2</span><span class="o">*</span><span class="nb">x</span><span class="o">+</span><span class="m">1</span><span class="nb"></span>
<span class="nb">    </span><span class="o">--</span><span class="nb">&gt; &amp;REFINEROOTS</span><span class="o">(</span><span class="nb">f,N</span><span class="o">)</span><span class="nb"> to extend real irr. roots to N fractional digits</span>
<span class="nb">&gt;&gt;&gt; &amp;REFINEROOTS</span><span class="o">(</span><span class="nb">f,</span><span class="m">40</span><span class="o">)</span><span class="nb"></span>
<span class="nb">Refining real roots of f to </span><span class="m">40</span><span class="nb"> digits </span><span class="o">(</span><span class="nb">please wait...</span><span class="o">)</span><span class="nb"></span>
<span class="o">(</span><span class="nb">mult. </span><span class="m">1</span><span class="o">)</span><span class="nb"> Rootf_</span><span class="m">1</span><span class="nb"> </span><span class="o">=</span><span class="nb"> </span><span class="o">-</span><span class="m">1</span><span class="nb">.</span><span class="m">0719678841080266034109100331975342338141</span><span class="nb">...</span>
<span class="o">(</span><span class="nb">mult. </span><span class="m">1</span><span class="o">)</span><span class="nb"> Rootf_</span><span class="m">2</span><span class="nb"> </span><span class="o">=</span><span class="nb"> </span><span class="m">0</span><span class="nb">.</span><span class="m">4962386948771497344730618510143671567979</span><span class="nb">...</span>
<span class="o">(</span><span class="nb">mult. </span><span class="m">1</span><span class="o">)</span><span class="nb"> Rootf_</span><span class="m">3</span><span class="nb"> </span><span class="o">=</span><span class="nb"> </span><span class="m">1</span><span class="nb">.</span><span class="m">3151140860165192656960005018679846354234</span><span class="nb">...</span>
</pre></div>
</div>
<p>The <a class="reference external" href="https://www.ctan.org/pkg/xintsession">xintsession</a> interface allows to define polynomial variables via its
<code class="docutils literal notranslate"><span class="pre">&amp;pol</span></code> mode.  It also exposes <a class="reference internal" href="polexpr-ref.html#polexpr08"><span class="std std-ref">all polynomial functions added to the
xintexpr syntax</span></a> by <code class="docutils literal notranslate"><span class="pre">polexpr</span></code>.  Further, as seen in the
example above it also covers some of the <code class="docutils literal notranslate"><span class="pre">polexpr</span></code> capabilities
currently implemented via user macros.  This is to be considered a work
in progress, the above <code class="docutils literal notranslate"><span class="pre">&amp;ROOTS</span></code> and <code class="docutils literal notranslate"><span class="pre">&amp;REFINEROOTS</span></code> may be renamed
into something else, and may have been so already since this
documentation was written.</p>
<p>Any input on the command line at the <a class="reference external" href="https://www.ctan.org/pkg/xintsession">xintsession</a> <code class="docutils literal notranslate"><span class="pre">&gt;&gt;&gt;</span></code> prompt which
starts with a backslash is executed as TeX macros, so all macros of
<code class="docutils literal notranslate"><span class="pre">polexpr</span></code> are in fact already available, including those typesetting
material in background of the interactive session on command line.  The
<code class="docutils literal notranslate"><span class="pre">&amp;ROOTS</span></code> and <code class="docutils literal notranslate"><span class="pre">&amp;REFINEROOTS</span></code> direct their outputs to the
terminal rather than to the TeX page as would the typesetting macros
defined by <code class="docutils literal notranslate"><span class="pre">polexpr</span></code> itself.</p>
</section>
<section id="license-is-lppl-1-3c">
<h2>License is LPPL 1.3c</h2>
<p>This work is distributed under the conditions of the
LaTeX Project Public License version 1.3c.</p>
<p>See README.md for details.</p>
</section>
<section id="in-memoriam-jurgen-gilg-1967-2022">
<h2>In memoriam: Jürgen Gilg (1967-2022)</h2>
<p>My first contact with Jürgen was in January 2018, and his <em>little
question</em> about usage of <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> for differentiating polynomials
proved the direct cause for the <a class="reference internal" href="polexpr-changes.html#firstrelease"><span class="std std-ref">creation of polexpr</span></a>.  His regular comments and questions (often, jointly
with Thomas Söll) largely contributed to motivate the author into
investing time and effort into the somewhat strange occupation of
developing such unusual TeX/LaTeX packages.  The topics of our
discussions evolved over the years and were not limited to TeX, LaTeX,
PSTricks or PostScript matters.</p>
<p>I learned to discover and appreciate his unassuming and kind character.
He was very conscientious in all his projects with others and was often
overly generous in his appreciation of people’s contributions.  On
receiving the sad news of his unexpected and untimely death, I initially
thought I had been knowing him for at least 10 years, but it is actually
only a bit more than 4 years… I will sorely miss this friendship with
a gentle soul from <em>over the Rhine</em>.</p>
<p>I dedicate the work which has gone into <a class="reference external" href="https://www.ctan.org/pkg/polexpr">polexpr</a> to Jürgen’s memory.</p>
<div class="toctree-wrapper compound">
</div>
</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="#">Introduction to polexpr</a><ul>
<li><a class="reference internal" href="#usage-via-xintsession">Usage via xintsession</a></li>
<li><a class="reference internal" href="#license-is-lppl-1-3c">License is LPPL 1.3c</a></li>
<li><a class="reference internal" href="#in-memoriam-jurgen-gilg-1967-2022">In memoriam: Jürgen Gilg (1967-2022)</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.rst.txt"
            rel="nofollow">Show Source</a></li>
    </ul>
   </div>
  <div>
    <h4>Next topic</h4>
    <p class="topless"><a href="polexpr-ref.html"
                          title="next chapter">polexpr reference</a></p>
  </div>
<h3><a href="#">Table of Contents</a></h3>
<ul>
<li class="toctree-l1"><a class="reference internal" href="polexpr-ref.html">polexpr reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="polexpr-changes.html">CHANGES</a></li>
</ul>

        </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"
             >next</a></li>
        <li class="nav-item nav-item-0"><a href="#">polexpr 0.8.7 documentation</a> &#187;</li>
        <li class="nav-item nav-item-this"><a href="">Introduction to polexpr</a></li> 
      </ul>
    </div>
    <div class="footer" role="contentinfo">
        &#169; Copyright 2022, Jean-François Burnol.
      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.0.0+/f58771c09.
    </div>
  </body>
</html>