<?xml version="1.0" encoding="UTF-8"?>
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns4="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="external" xml:lang="pt">
    <refnamediv>
        <refname>external</refname>
        <refpurpose>objeto Scilab, função ou rotina externa</refpurpose>
    </refnamediv>
    <refsection role="description">
        <title>Descrição</title>
        <para>Função ou rotina externa para uso com comandos específicos.</para>
        <para>Uma "external" é uma função ou rotina que é usada como argumento em
            algumas primitivas de alto nível (tais como <literal>ode</literal>,
            <literal>optim</literal>, <literal>schur</literal>...).
        </para>
        <para>A seqüência de chamamento da "external" (função ou rotina) é imposta
            pela primitiva de alto nível que configura os argumentos da
            external.
        </para>
        <para>Por exemplo, a função externa costfunc é um argumento da primitiva
            optim . Sua seqüência de chamamento deve ser:
            <literal>[f,g,ind]=costfunc(x,ind)</literal> e <literal>optim</literal> (a
            primitiva de otimização de alto nível) é invocada como segue:
        </para>
        <programlisting role=""><![CDATA[
optim(costfunc,...)
 ]]></programlisting>
        <para>
            Aqui <literal>costfunc</literal> (a função de custo a ser minimizada
            pela primitiva <literal>optim</literal>) avalia <literal>f=f(x)</literal>
            e <literal>g=</literal> gradiente de <literal>f</literal> em
            <literal>x</literal> (<literal>ind</literal> é um inteiro. Seu uso é
            esclarecido na ajuda de <literal>optim</literal>).
        </para>
        <para>Se a função externa necessita de outros valores, estas variáveis
            podem ser definidas em seu ambiente. Elas também podem ser colocadas em
            uma lista. Por exemplo, a função externa
        </para>
        <programlisting role=""><![CDATA[
[f,g,ind] = costfunc(x,ind,a,b,c)
 ]]></programlisting>
        <para>
            é válida para <literal>optim</literal> se o external (função
            externa) é <literal>list(costfunc,a,b,c)</literal> e a chamada a
            <literal>optim</literal> é, então:
        </para>
        <programlisting role=""><![CDATA[
optim(list(costfunc,a1,b1,c1),....
 ]]></programlisting>
        <para>Um external também pode ser uma rotina FORTRAN ou C: isto é
            conveniente para acelerar computações.
        </para>
        <para>TO nome da rotina é fornecido para a primitiva de alto nível como um
            string. A seqüência de chamamento da rotina também é imposta.
        </para>
        <para>Rotinas FORTRAN ou C podem ser dinamicamente linkadas ("ligadas,
            conectadas") (ver <literal>link</literal>)
        </para>
    </refsection>
    <refsection role="see also">
        <title>Ver Também</title>
        <simplelist type="inline">
            <member>
                <link linkend="ode">ode</link>
            </member>
            <member>
                <link linkend="optim">optim</link>
            </member>
            <member>
                <link linkend="impl">impl</link>
            </member>
            <member>
                <link linkend="dassl">dassl</link>
            </member>
            <member>
                <link linkend="intg">intg</link>
            </member>
            <member>
                <link linkend="schur">schur</link>
            </member>
        </simplelist>
    </refsection>
</refentry>
