<?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:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org"
          xml:id="interp" xml:lang="pt">
    <refnamediv>
        <refname>interp</refname>
        <refpurpose>função de avaliação de spline cúbico</refpurpose>
    </refnamediv>
    <refsynopsisdiv>
        <title>Seqüência de Chamamento</title>
        <synopsis>
            [yp, yp1, yp2, yp3] = interp(xp, x, y, d)
            [yp, yp1, yp2, yp3] = interp(xp, x, y, d, out_mode)
        </synopsis>
    </refsynopsisdiv>
    <refsection>
        <title>Parâmetros</title>
        <variablelist>
            <varlistentry>
                <term>xp</term>
                <listitem>
                    <para>vetor ou matriz de reais</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>x,y,d</term>
                <listitem>
                    <para>vetores de reais de mesmo tamanho definindo uma função de
                        spline cúbico ou sub-spline (chamado <literal>s</literal> a partir
                        daqui)
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>out_mode</term>
                <listitem>
                    <para>
                        (opcional) string definido a avaliação de <literal>s</literal>
                        fora do intervalo [x<subscript>1</subscript>, x<subscript>n</subscript>].
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>yp</term>
                <listitem>
                    <para>
                        vetor ou matriz de mesmo tamanho que <literal>xp</literal>,
                        avaliação elemento a elemento de <literal>s</literal> em
                        <literal>xp</literal> (yp(i)=s(xp(i) ou yp(i,j)=s(xp(i,j))
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>yp1, yp2, yp3</term>
                <listitem>
                    <para>vetores (ou matrizes) de mesmo tamanho que
                        <literal>xp</literal>, avaliação elemento a elemento das derivadas
                        sucessivas de <literal>s</literal> em <literal>xp</literal>
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>Descrição</title>
        <para>
            Dados três vetores <literal>(x,y,d)</literal> ddefinindo uma função
            de spline cúbico ou sup-spline (ver <link linkend="splin">splin</link>)
            com
            <emphasis>
                s(x<subscript>i</subscript>) = y<subscript>i</subscript>,  e 
                s'(x<subscript>i</subscript>) = d<subscript>i</subscript>
            </emphasis>
            esta função avalia
            <literal>s</literal> (e <literal>s', s'', s'''</literal> se necessário) em
            <literal>xp(i)</literal> :
        </para>
        <para>
            <table align="center">
            <tr align="center">
                <td><emphasis>
                        yp<subscript>i</subscript> = s(xp<subscript>i</subscript>)
                           ou   
                        yp<subscript>ij</subscript> = s(xp<subscript>ij</subscript>)
                    </emphasis>
                </td>
            </tr>
            <tr align="center">
                <td><emphasis>
                        yp1<subscript>i</subscript> = s'(xp<subscript>i</subscript>)
                           ou   
                        yp1<subscript>ij</subscript> = s'(xp<subscript>ij</subscript>)
                    </emphasis>
                </td>
            </tr>
            <tr align="center">
                <td><emphasis>
                        yp2<subscript>i</subscript> = s''(xp<subscript>i</subscript>)
                           ou   
                        yp2<subscript>ij</subscript> = s''(xp<subscript>ij</subscript>)
                    </emphasis>
                </td>
            </tr>
            <tr align="center">
                <td><emphasis>
                        yp3<subscript>i</subscript> = s'''(xp<subscript>i</subscript>)
                           ou   
                        yp3<subscript>ij</subscript> = s'''(xp<subscript>ij</subscript>)
                    </emphasis>
                </td>
            </tr>
            </table>
        </para>
        <para>
            O parâmetro <literal>out_mode</literal> ajusta a regra de avaliação
            para extrapolação, i.e., para <literal>xp(i)</literal> fora de
            [x<subscript>1</subscript>, x<subscript>n</subscript>] :
        </para>
        <variablelist>
            <varlistentry>
                <term>"by_zero"</term>
                <listitem>
                    <para>uma extrapolação por zero é feita </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>"by_nan"</term>
                <listitem>
                    <para>extrapolação por NaN </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>"C0"</term>
                <listitem>
                    <para>a extrapolação é definida como segue :
                        <table align="center">
                        <tr align="center"><td><emphasis>
                            xp<subscript>i</subscript> &lt; x<subscript>1</subscript>  ⇒ 
                            yp<subscript>i</subscript> = y<subscript>1</subscript>
                            </emphasis></td></tr>
                        <tr align="center"><td><emphasis>
                            xp<subscript>i</subscript> > x<subscript>n</subscript>  ⇒ 
                            yp<subscript>i</subscript> = y<subscript>n</subscript>
                            </emphasis></td></tr>
                        </table>
                    </para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>"natural"</term>
                <listitem>
                    <para>a extrapolação é definida como segue (p<subscript>i</subscript>(x) sendo
                        o polinômio que define <literal>s</literal> em
                        [x<subscript>i</subscript>, x<subscript>i+1</subscript>]) :
                    </para>
                    <table align="center">
                    <tr align="center"><td><emphasis>
                        xp<subscript>i</subscript> &lt; x<subscript>1</subscript>  ⇒ 
                        yp<subscript>i</subscript> = p<subscript>1</subscript>(xp<subscript>i</subscript>)
                        </emphasis></td></tr>
                    <tr align="center"><td><emphasis>
                        xp<subscript>i</subscript> > x<subscript>n</subscript>  ⇒ 
                        yp<subscript>i</subscript> = p<subscript>n-1</subscript>(xp<subscript>i</subscript>)
                        </emphasis></td></tr>
                    </table>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>"linear"</term>
                <listitem>
                    <para>a extrapolação é definida como segue :</para>
                    <table align="center">
                    <tr align="center"><td><emphasis>
                        xp<subscript>i</subscript> &lt; x<subscript>1</subscript>  ⇒ 
                        yp<subscript>i</subscript> = y<subscript>1</subscript> +
                            d<subscript>1</subscript>.(xp<subscript>i</subscript> - x<subscript>1</subscript>)
                        </emphasis></td></tr>
                    <tr align="center"><td><emphasis>
                        xp<subscript>i</subscript> > x<subscript>n</subscript>  ⇒ 
                        yp<subscript>i</subscript> = y<subscript>n</subscript> +
                            d<subscript>n</subscript>.(xp<subscript>i</subscript> - x<subscript>n</subscript>)
                        </emphasis></td></tr>
                    </table>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term>"periodic"</term>
                <listitem>
                    <para>
                        <literal>s</literal> é estendido por periodicidade :
                    </para>
                    <table align="center">
                    <tr><td><emphasis>
                        yp<subscript>i</subscript> = s( x<subscript>1</subscript> + (xp<subscript>i</subscript> - x<subscript>1</subscript>) modulo (x<subscript>n</subscript>-x<subscript>1</subscript>) )
                        </emphasis></td></tr>
                    </table>
               </listitem>
            </varlistentry>
        </variablelist>
    </refsection>
    <refsection>
        <title>Exemplos </title>
        <programlisting role="example"><![CDATA[
// veja os exemplos de splin e lsq_splin

// um exemplo exibindo as continuidades C2 e C1 de um spline e um sub-spline
a = -8; b = 8;
x = linspace(a,b,20)';
y = sinc(x);
dk = splin(x,y);  // not_a_knot
df = splin(x,y, "fast");
xx = linspace(a,b,800)';
[yyk, yy1k, yy2k] = interp(xx, x, y, dk);
[yyf, yy1f, yy2f] = interp(xx, x, y, df);
clf()
subplot(3,1,1)
plot2d(xx, [yyk yyf])
plot2d(x, y, style=-9)
legends(["spline não é um nó","sub-spline rápido","pontos de interpolação"],...
        [1 2 -9], "ur",%f)
xtitle("interpolação por spline")
subplot(3,1,2)
plot2d(xx, [yy1k yy1f])
legends(["spline não é um nó","sub-spline rápido"], [1 2], "ur",%f)
xtitle("interpolação por spline (derivadas)")
subplot(3,1,3)
plot2d(xx, [yy2k yy2f])
legends(["spline não é um nó","sub-spline rápido"], [1 2], "lr",%f)
xtitle("interpolação por splines (segundas derivadas)")
 ]]></programlisting>
        <scilab:image>
            a = -8; b = 8;
            x = linspace(a,b,20)';
            y = sinc(x);
            dk = splin(x,y);  // not_a_knot
            df = splin(x,y, "fast");
            xx = linspace(a,b,800)';
            [yyk, yy1k, yy2k] = interp(xx, x, y, dk);
            [yyf, yy1f, yy2f] = interp(xx, x, y, df);
            clf()
            subplot(3,1,1)
            plot2d(xx, [yyk yyf])
            plot2d(x, y, style=-9)
            legends(["not_a_knot spline","fast sub-spline","interpolation points"],...
            [1 2 -9], "ur",%f)
            xtitle("spline interpolation")
            subplot(3,1,2)
            plot2d(xx, [yy1k yy1f])
            legends(["not_a_knot spline","fast sub-spline"], [1 2], "ur",%f)
            xtitle("spline interpolation (derivatives)")
            subplot(3,1,3)
            plot2d(xx, [yy2k yy2f])
            legends(["not_a_knot spline","fast sub-spline"], [1 2], "lr",%f)
            xtitle("spline interpolation (second derivatives)")
        </scilab:image>
        <programlisting role="example"><![CDATA[
// aqui está um exemplo mostrando as diferentes possibilidades de extrapolação
x = linspace(0,1,11)';
y = cosh(x-0.5);
d = splin(x,y);
xx = linspace(-0.5,1.5,401)';
yy0 = interp(xx,x,y,d,"C0");
yy1 = interp(xx,x,y,d,"linear");
yy2 = interp(xx,x,y,d,"natural");
yy3 = interp(xx,x,y,d,"periodic");
clf()
plot2d(xx,[yy0 yy1 yy2 yy3],style=2:5,frameflag=2,leg="C0@linear@natural@periodic")
xtitle(" Modos diferentes de avaliar um spline fora de seu domínio")
 ]]></programlisting>
        <scilab:image>
            x = linspace(0,1,11)';
            y = cosh(x-0.5);
            d = splin(x,y);
            xx = linspace(-0.5,1.5,401)';
            yy0 = interp(xx,x,y,d,"C0");
            yy1 = interp(xx,x,y,d,"linear");
            yy2 = interp(xx,x,y,d,"natural");
            yy3 = interp(xx,x,y,d,"periodic");
            clf()
            plot2d(xx,[yy0 yy1 yy2 yy3],style=2:5,frameflag=2,leg="C0@linear@natural@periodic")
            xtitle(" different way to evaluate a spline outside its domain")
        </scilab:image>
    </refsection>
    <refsection role="see also">
        <title>Ver Também</title>
        <simplelist type="inline">
            <member>
                <link linkend="splin">splin</link>
            </member>
            <member>
                <link linkend="lsq_splin">lsq_splin</link>
            </member>
        </simplelist>
    </refsection>
</refentry>
