Sophie

Sophie

distrib > Fedora > 18 > x86_64 > by-pkgid > c64a64792fee4c8a9dc3781e16e92174 > files > 281

sagemath-doc-fr-5.9-9.fc18.noarch.rpm


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>Problèmes fréquents concernant les fonctions &mdash; Tutoriel Sage v5.9</title>
    
    <link rel="stylesheet" href="_static/sage.css" type="text/css" />
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '',
        VERSION:     '5.9',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="_static/jquery.js"></script>
    <script type="text/javascript" src="_static/underscore.js"></script>
    <script type="text/javascript" src="_static/doctools.js"></script>
    <script type="text/javascript" src="_static/translations.js"></script>
    <link rel="shortcut icon" href="_static/favicon.ico"/>
    <link rel="top" title="Tutoriel Sage v5.9" href="index.html" />
    <link rel="up" title="Visite guidée" href="tour.html" />
    <link rel="next" title="Anneaux de base" href="tour_rings.html" />
    <link rel="prev" title="Graphiques" href="tour_plotting.html" />
    <link rel="icon" href="_static/sageicon.png" type="image/x-icon" />

  </head>
  <body>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="Index général"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="py-modindex.html" title="Index des modules Python"
             >modules</a> |</li>
        <li class="right" >
          <a href="tour_rings.html" title="Anneaux de base"
             accesskey="N">suivant</a> |</li>
        <li class="right" >
          <a href="tour_plotting.html" title="Graphiques"
             accesskey="P">précédent</a> |</li>
  
    
      <a href="../index.html"><img src="_static/sagelogo.png" style="vertical-align: middle" title="Sage Logo"></a>
    
  
  
        <li><a href="index.html">Tutoriel Sage v5.9</a> &raquo;</li>

          <li><a href="tour.html" accesskey="U">Visite guidée</a> &raquo;</li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="problemes-frequents-concernant-les-fonctions">
<span id="section-functions-issues"></span><h1>Problèmes fréquents concernant les fonctions<a class="headerlink" href="#problemes-frequents-concernant-les-fonctions" title="Lien permanent vers ce titre">¶</a></h1>
<p>La définition de fonctions, par exemple pour calculer leurs dérivées ou
tracer leurs courbes représentatives, donne lieu à un certain nombre de
confusions. Le but de cette section est de clarifier quelques points à
l&#8217;origine de ces confusions.</p>
<p>Il y a plusieurs façons de définir un objet que l&#8217;on peut légitimement
appeler «&nbsp;fonction&nbsp;».</p>
<p>1. Définir une fonction Python, comme expliqué dans la section <a class="reference internal" href="tour_help.html#section-functions"><em>Fonctions, indentation et itération</em></a>. Les fonctions Python peuvent être utilisées
pour tracer des courbes, mais pas dérivées ou intégrées symboliquement:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: def f(z): return z^2</span>
<span class="go">sage: type(f)</span>
<span class="go">&lt;type &#39;function&#39;&gt;</span>
<span class="go">sage: f(3)</span>
<span class="go">9</span>
<span class="go">sage: plot(f, 0, 2)</span>
</pre></div>
</div>
<p>Remarquez la syntaxe de la dernière ligne. Écrire plutôt <tt class="docutils literal"><span class="pre">plot(f(z),</span> <span class="pre">0,</span> <span class="pre">2)</span></tt>
provoquerait une erreur&nbsp;: en effet, le <tt class="docutils literal"><span class="pre">z</span></tt> qui apparaît dans
la définition de <tt class="docutils literal"><span class="pre">f</span></tt> est une variable muette qui n&#8217;a pas de sens
en-dehors de la définition. Un simple <tt class="docutils literal"><span class="pre">f(z)</span></tt> déclenche la même erreur.
En l&#8217;occurrence, faire de <tt class="docutils literal"><span class="pre">z</span></tt> une variable symbolique comme dans
l&#8217;exemple ci-dessous fonctionne, mais cette façon de faire soulève
d&#8217;autres problèmes (voir le point&nbsp;4 ci-dessous), et il vaut mieux
s&#8217;abstenir de l&#8217;utiliser</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: var(&#39;z&#39;)   # on définit z comme variable symbolique</span>
<span class="go">z</span>
<span class="go">sage: f(z)</span>
<span class="go">z^2</span>
<span class="go">sage: plot(f(z), 0, 2)</span>
</pre></div>
</div>
<p>L&#8217;appel de fonction <tt class="docutils literal"><span class="pre">f(z)</span></tt> renvoie ici l&#8217;expression symbolique
<tt class="docutils literal"><span class="pre">z^2</span></tt>, qui est alors utilisée par la fonction <tt class="docutils literal"><span class="pre">plot</span></tt>.</p>
<p>2. Définir une expression symbolique fonctionnelle («&nbsp;appelable&nbsp;»). Une
telle expression représente une fonction dont on peut tracer le graphe,
et que l&#8217;on peut aussi dériver ou intégrer symboliquement</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: g(x) = x^2</span>
<span class="go">sage: g        # g envoie x sur x^2</span>
<span class="go">x |--&gt; x^2</span>
<span class="go">sage: g(3)</span>
<span class="go">9</span>
<span class="go">sage: Dg = g.derivative(); Dg</span>
<span class="go">x |--&gt; 2*x</span>
<span class="go">sage: Dg(3)</span>
<span class="go">6</span>
<span class="go">sage: type(g)</span>
<span class="go">&lt;type &#39;sage.symbolic.expression.Expression&#39;&gt;</span>
<span class="go">sage: plot(g, 0, 2)</span>
</pre></div>
</div>
<p>Notez que, si <tt class="docutils literal"><span class="pre">g</span></tt> est une expression symbolique fonctionnelle
(<tt class="docutils literal"><span class="pre">x</span> <span class="pre">|--&gt;</span> <span class="pre">x^2</span></tt>), l&#8217;objet <tt class="docutils literal"><span class="pre">g(x)</span></tt> (<tt class="docutils literal"><span class="pre">x^2</span></tt>) est d&#8217;une nature un
peu différente. Les expressions comme <tt class="docutils literal"><span class="pre">g(x)</span></tt> peuvent aussi être
tracées, dérivées, intégrées, etc., avec cependant quelques difficultés
illustrées dans le point 5 ci-dessous.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: g(x)</span>
<span class="go">x^2</span>
<span class="go">sage: type(g(x))</span>
<span class="go">&lt;type &#39;sage.symbolic.expression.Expression&#39;&gt;</span>
<span class="go">sage: g(x).derivative()</span>
<span class="go">2*x</span>
<span class="go">sage: plot(g(x), 0, 2)</span>
</pre></div>
</div>
<p>3. Utiliser une fonction usuelle prédéfinie de Sage. Celles-ci peuvent
servir à tracer des courbes, et, indirectement, être dérivées ou intégrées</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: type(sin)</span>
<span class="go">&lt;class &#39;sage.functions.trig.Function_sin&#39;&gt;</span>
<span class="go">sage: plot(sin, 0, 2)</span>
<span class="go">sage: type(sin(x))</span>
<span class="go">&lt;type &#39;sage.symbolic.expression.Expression&#39;&gt;</span>
<span class="go">sage: plot(sin(x), 0, 2)</span>
</pre></div>
</div>
<p>Il n&#8217;est pas possible de dériver la fonction <tt class="docutils literal"><span class="pre">sin</span></tt> tout court pour
obtenir <tt class="docutils literal"><span class="pre">cos</span></tt></p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: f = sin</span>
<span class="go">sage: f.derivative()</span>
<span class="gt">Traceback (most recent call last):</span>
<span class="c">...</span>
<span class="gr">AttributeError</span>: <span class="n">...</span>
</pre></div>
</div>
<p>Une possibilité est de remplacer <tt class="docutils literal"><span class="pre">f</span> <span class="pre">=</span> <span class="pre">sin</span></tt> par <tt class="docutils literal"><span class="pre">f</span> <span class="pre">=</span> <span class="pre">sin(x)</span></tt>, mais il
est généralement préférable de définir une expression symbolique
fonctionnelle <tt class="docutils literal"><span class="pre">f(x)</span> <span class="pre">=</span> <span class="pre">sin(x)</span></tt></p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: S(x) = sin(x)</span>
<span class="go">sage: S.derivative()</span>
<span class="go">x |--&gt; cos(x)</span>
</pre></div>
</div>
<p>Examinons maintenant quelques problèmes fréquents.</p>
<p>4. Évaluation accidentelle</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: def h(x):</span>
<span class="gp">... </span>      <span class="k">if</span> <span class="n">x</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
<span class="gp">... </span>          <span class="k">return</span> <span class="mi">0</span>
<span class="gp">... </span>      <span class="k">else</span><span class="p">:</span>
<span class="gp">... </span>          <span class="k">return</span> <span class="n">x</span><span class="o">-</span><span class="mi">2</span>
</pre></div>
</div>
<p>Problème&nbsp;: <tt class="docutils literal"><span class="pre">plot(h(x),</span> <span class="pre">0,</span> <span class="pre">4)</span></tt> trace la droite <img class="math" src="_images/math/9c36931fc180e3596ce6d7b1fb1aa3da65686661.png" alt="y = x - 2"/>, et non pas la
fonction affine par morceaux définie par <tt class="docutils literal"><span class="pre">h</span></tt>. Pourquoi&nbsp;? Lors de l&#8217;exécution,
<tt class="docutils literal"><span class="pre">plot(h(x),</span> <span class="pre">0,</span> <span class="pre">4)</span></tt> évalue d&#8217;abord <tt class="docutils literal"><span class="pre">h(x)</span></tt> : la fonction
Python <tt class="docutils literal"><span class="pre">h</span></tt> est appelée avec le paramètre <tt class="docutils literal"><span class="pre">x</span></tt>, et la condition <tt class="docutils literal"><span class="pre">x</span> <span class="pre">&lt;</span> <span class="pre">2</span></tt>
est donc évaluée.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: type(x &lt; 2)</span>
<span class="go">&lt;type &#39;sage.symbolic.expression.Expression&#39;&gt;</span>
</pre></div>
</div>
<p>Or, l&#8217;évaluation d&#8217;une inégalité symbolique renvoie False quand la
condition n&#8217;est pas clairement vraie. Ainsi, <tt class="docutils literal"><span class="pre">h(x)</span></tt> s&#8217;évalue en
<tt class="docutils literal"><span class="pre">x</span> <span class="pre">-</span> <span class="pre">2</span></tt>, et c&#8217;est cette expression-là qui est finalement tracée.</p>
<p>Solution&nbsp;: Il ne faut pas utiliser <tt class="docutils literal"><span class="pre">plot(h(x),</span> <span class="pre">0,</span> <span class="pre">4)</span></tt>, mais plutôt</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: def h(x):</span>
<span class="gp">... </span>      <span class="k">if</span> <span class="n">x</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
<span class="gp">... </span>          <span class="k">return</span> <span class="mi">0</span>
<span class="gp">... </span>      <span class="k">else</span><span class="p">:</span>
<span class="gp">... </span>          <span class="k">return</span> <span class="n">x</span><span class="o">-</span><span class="mi">2</span>
<span class="go">sage: plot(h, 0, 4)</span>
</pre></div>
</div>
<p>5. Constante plutôt que fonction</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: f = x</span>
<span class="go">sage: g = f.derivative()</span>
<span class="go">sage: g</span>
<span class="go">1</span>
</pre></div>
</div>
<p>Problème&nbsp;: <tt class="docutils literal"><span class="pre">g(3)</span></tt> déclenche une erreur avec le message «&nbsp;ValueError:
the number of arguments must be less than or equal to 0&nbsp;».</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: type(f)</span>
<span class="go">&lt;type &#39;sage.symbolic.expression.Expression&#39;&gt;</span>
<span class="go">sage: type(g)</span>
<span class="go">&lt;type &#39;sage.symbolic.expression.Expression&#39;&gt;</span>
</pre></div>
</div>
<p>En effet, <tt class="docutils literal"><span class="pre">g</span></tt> n&#8217;est pas une fonction, mais une constante, sans
variable en laquelle on peut l&#8217;évaluer.</p>
<p>Solution&nbsp;: il y a plusieurs possibilités.</p>
<ul>
<li><p class="first">Définir <tt class="docutils literal"><span class="pre">f</span></tt> comme une expression symbolique fonctionnelle</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: f(x) = x        # au lieu de &#39;f = x&#39;</span>
<span class="go">sage: g = f.derivative()</span>
<span class="go">sage: g</span>
<span class="go">x |--&gt; 1</span>
<span class="go">sage: g(3)</span>
<span class="go">1</span>
<span class="go">sage: type(g)</span>
<span class="go">&lt;type &#39;sage.symbolic.expression.Expression&#39;&gt;</span>
</pre></div>
</div>
</li>
<li><p class="first">Ou, sans changer la définition de <tt class="docutils literal"><span class="pre">f</span></tt>, définir <tt class="docutils literal"><span class="pre">g</span></tt> comme une
expression symbolique fonctionnelle</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: f = x</span>
<span class="go">sage: g(x) = f.derivative()  # au lieu de &#39;g = f.derivative()&#39;</span>
<span class="go">sage: g</span>
<span class="go">x |--&gt; 1</span>
<span class="go">sage: g(3)</span>
<span class="go">1</span>
<span class="go">sage: type(g)</span>
<span class="go">&lt;type &#39;sage.symbolic.expression.Expression&#39;&gt;</span>
</pre></div>
</div>
</li>
<li><p class="first">Ou encore, avec <tt class="docutils literal"><span class="pre">f</span></tt> et <tt class="docutils literal"><span class="pre">g</span></tt> définies comme dans l&#8217;exemple de
départ, donner explicitement la variable à remplacer par sa valeur</p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: f = x</span>
<span class="go">sage: g = f.derivative()</span>
<span class="go">sage: g</span>
<span class="go">1</span>
<span class="go">sage: g(x=3)    # au lieu de  &#39;g(3)&#39;</span>
<span class="go">1</span>
</pre></div>
</div>
</li>
</ul>
<p>Nous terminons en mettant encore une fois en évidence la différence entre
les dérivées des expressions <tt class="docutils literal"><span class="pre">f</span></tt> définies par <tt class="docutils literal"><span class="pre">f</span> <span class="pre">=</span> <span class="pre">x</span></tt> et par <tt class="docutils literal"><span class="pre">f(x)</span>
<span class="pre">=</span> <span class="pre">x</span></tt></p>
<div class="highlight-python"><div class="highlight"><pre><span class="go">sage: f(x) = x</span>
<span class="go">sage: g = f.derivative()</span>
<span class="go">sage: g.variables()  # variables apparaissant dans g</span>
<span class="go">()</span>
<span class="go">sage: g.arguments()  # paramètres auxquels on peut donner une valeur dans g</span>
<span class="go">(x,)</span>
<span class="go">sage: f = x</span>
<span class="go">sage: h = f.derivative()</span>
<span class="go">sage: h.variables()</span>
<span class="go">()</span>
<span class="go">sage: h.arguments()</span>
<span class="go">()</span>
</pre></div>
</div>
<p>Comme l&#8217;illustre cet exemple, <tt class="docutils literal"><span class="pre">h</span></tt> n&#8217;accepte pas de paramètres. C&#8217;est
pour cela que <tt class="docutils literal"><span class="pre">h(3)</span></tt> déclenche une erreur.</p>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
            <h4>Sujet précédent</h4>
            <p class="topless"><a href="tour_plotting.html"
                                  title="Chapitre précédent">Graphiques</a></p>
            <h4>Sujet suivant</h4>
            <p class="topless"><a href="tour_rings.html"
                                  title="Chapitre suivant">Anneaux de base</a></p>
            <h3>Cette page</h3>
            <ul class="this-page-menu">
              <li><a href="_sources/tour_functions.txt"
                     rel="nofollow">Montrer la source</a></li>
            </ul>
          <div id="searchbox" style="display: none">
            <h3>Recherche rapide</h3>
              <form class="search" action="search.html" method="get">
                <input type="text" name="q" size="18" />
                <!-- The shading of the "Go" button should be consistent -->
                <!-- with the colour of the header and footer. See the file -->
                <!-- doc/common/themes/sage/theme.conf for colours used by -->
                <!-- the Sage theme. -->
                <input type="submit" style="background-color: #B8B9F6" value="Go" />
                <input type="hidden" name="check_keywords" value="yes" />
                <input type="hidden" name="area" value="default" />
              </form>
              <p class="searchtip" style="font-size: 90%">
              Saisissez un mot clef ou un nom de module, classe ou fonction.
              </p>
          </div>
          <script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="Index général"
             >index</a></li>
        <li class="right" >
          <a href="py-modindex.html" title="Index des modules Python"
             >modules</a> |</li>
        <li class="right" >
          <a href="tour_rings.html" title="Anneaux de base"
             >suivant</a> |</li>
        <li class="right" >
          <a href="tour_plotting.html" title="Graphiques"
             >précédent</a> |</li>
  
    
      <a href="../index.html"><img src="_static/sagelogo.png" style="vertical-align: middle" title="Sage Logo"></a>
    
  
  
        <li><a href="index.html">Tutoriel Sage v5.9</a> &raquo;</li>

          <li><a href="tour.html" >Visite guidée</a> &raquo;</li> 
      </ul>
    </div>
    
    <div class="footer">
        &copy; Copyright 2005--2011, The Sage Development Team.
      Créé avec <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
    </div>
    <script type="text/javascript">
/*global jQuery, window */
/* Sphinx sidebar toggle.  Putting this code at the end of the body
 * enables the toggle for the live, static, and offline docs.  Note:
 * sage.misc.html.math_parse() eats jQuery's dollar-sign shortcut. */
var jq = jQuery;  
jq(document).ready(function () {
    var bar, bod, bg, fg, key, tog, wid_old, wid_new, resize, get_state, set_state;
    bod = jq('div.bodywrapper');
    bar = jq('div.sphinxsidebar');
    tog = jq('<div class="sphinxsidebartoggle"></div>');
    
    /* Delayed resize helper.  Not perfect but good enough. */
    resize = function () {
        setTimeout(function () {
            tog.height(bod.height());
        }, 100);
    };
    jq(window).resize(function () {
        resize();
    });
    
    /* Setup and add the toggle. See Sphinx v0.5.1 default.css. */
    fg = jq('div.sphinxsidebar p a').css('color') || 'rgb(152, 219, 204)';
    bg = jq('div.document').css('background-color') || 'rgb(28, 78, 99)';
    wid_old = '230px';
    wid_new = '5px';
    tog.css('background-color', bg)
        .css('border-width', '0px')
        .css('border-right', wid_new + ' ridge ' + bg)
        .css('cursor', 'pointer')
        .css('position', 'absolute')
        .css('left', '-' + wid_new)
        .css('top', '0px')
        .css('width', wid_new);
    bod.css('position', 'relative');
    bod.prepend(tog);
    resize();
    
    /* Cookie helpers. */
    key = 'sphinxsidebar=';
    set_state = function (s) {
        var date = new Date();
        /* Expiry in 7 days. */
        date.setTime(date.getTime() + (7 * 24 * 3600 * 1000));
        document.cookie = key + encodeURIComponent(s) + '; expires=' +
            date.toUTCString() + '; path=/';
    };
    get_state = function () {
        var i, c, crumbs = document.cookie.split(';');
        for (i = 0; i < crumbs.length; i += 1) {
            c = crumbs[i].replace(/^\s+/, '');
            if (c.indexOf(key) === 0) {
                return decodeURIComponent(c.substring(key.length, c.length));
            }
        }
        return null;
    };
    
    /* Event handlers. */
    tog.mouseover(function (ev) {
        tog.css('border-right-color', fg);
    }).mouseout(function (ev) {
        tog.css('border-right-color', bg);
    }).click(function (ev) {
        if (bod.hasClass('wide')) {
            bod.removeClass('wide');
            bod.css('margin-left', wid_old);
            bar.css('width', wid_old);
            bar.show();
            set_state('visible');
        } else {
            set_state('hidden');
            bar.hide();
            bar.css('width', '0px');
            bod.css('margin-left', wid_new);
            bod.addClass('wide');
        }
        resize();
    });
    
    /* Hide the normally visible sidebar? */
    if (get_state() === 'hidden') {
        tog.trigger('click');
    } else {
        set_state('visible');
    }
});
    </script>
  </body>
</html>