@c Language: Brazilian Portuguese, Encoding: iso-8859-1
@c /interpol.texi/1.3/Sat Jun  2 00:13:22 2007//
@menu
* Introdu@value{cedilha}@~{a}o a interpol::
* Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para interpol::
@end menu

@node Introdu@value{cedilha}@~{a}o a interpol, Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para interpol, interpol, interpol
@section Introdu@value{cedilha}@~{a}o a interpol

Pacote @code{interpol} define os m@'{e}todos Lagrangiano, linear e o de
splines c@'{u}bicos para interpola@value{cedilha}@~{a}o polinomial.



Coment@'{a}rios, corre@value{cedilha}@~{o}es e sugest@~{o}es, por favor contacte-me em @var{'mario AT edu DOT xunta DOT es'}.



@node Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para interpol,  , Introdu@value{cedilha}@~{a}o a interpol, interpol
@section Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para interpol


@deffn {Fun@value{cedilha}@~{a}o} lagrange (@var{pontos})
@deffnx {Fun@value{cedilha}@~{a}o} lagrange (@var{pontos}, @var{op@value{cedilha}@~{a}o})
Calcula a interpola@value{cedilha}@~{a}o polinomial atrav@'{e}s do m@'{e}todo Lagrangiano. O argumento @var{pontos} deve ser um dos seguintes:

@itemize @bullet
@item
uma matriz de duas colunas, @code{p:matrix([2,4],[5,6],[9,3])},
@item
uma lista de pares, @code{p: [[2,4],[5,6],[9,3]]},
@item
uma lista de n@'{u}meros, @code{p: [4,6,3]}, e nesse caso as abcissas ir@~{a}o ser atribu@'{i}das automaticamente aos valores 1, 2, 3, etc.
@end itemize

Nos dois primeiros casos os pares s@~{a}o ordenados em rela@value{cedilha}@~{a}o @`a primeira coordenada antes de fazer os c@'{a}lculos.

Com o argumento @var{op@value{cedilha}@~{a}o} @'{e} poss@'{i}vel escolher o nome da vari@'{a}vel independente, o qual @'{e} @code{'x} por padr@~{a}o; para definir qualquer outra, z por exemplo, escreva @code{varname='z}. 

Exemplos:

@example
(%i1) load("interpol")$
(%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
(%i3) lagrange(p);
                 4        3         2
             73 x    701 x    8957 x    5288 x   186
(%o3)        ----- - ------ + ------- - ------ + ---
              420     210       420      105      5
(%i4) f(x):=''%;
                     4        3         2
                 73 x    701 x    8957 x    5288 x   186
(%o4)    f(x) := ----- - ------ + ------- - ------ + ---
                  420     210       420      105      5
(%i5) /* Evaluate the polynomial at some points */
      map(f,[2.3,5/7,%pi]);
                             919062
(%o5)  [- 1.567534999999992, ------,
                             84035
                         4          3           2
                   73 %pi    701 %pi    8957 %pi    5288 %pi   186
                   ------- - -------- + --------- - -------- + ---]
                     420       210         420        105       5
(%i6) %,numer;
(%o6) [- 1.567534999999992, 10.9366573451538, 2.89319655125692]
(%i7) /* Plot the polynomial together with points */
      plot2d([f(x),[discrete,p]],[x,0,10],
           [gnuplot_curve_styles,
                 ["with lines","with points pointsize 3"]])$
(%i8) /* Change variable name */
      lagrange(p, varname=w);
                 4        3         2
             73 w    701 w    8957 w    5288 w   186
(%o8)        ----- - ------ + ------- - ------ + ---
              420     210       420      105      5
@end example

@end deffn


@deffn {Fun@value{cedilha}@~{a}o} charfun2 (@var{x}, @var{a}, @var{b})
Retorna @code{true}, i. e., verdadeiro se o n@'{u}mero @var{x} pertence ao intervalo @math{[a, b)}, e @code{false}, i. e., falsono caso contr@'{a}rio.
@end deffn


@deffn {Fun@value{cedilha}@~{a}o} linearinterpol (@var{pontos})
@deffnx {Fun@value{cedilha}@~{a}o} linearinterpol (@var{pontos}, @var{op@value{cedilha}@~{a}o})
Calcula a interpola@value{cedilha}@~{a}o polinomial atrav@'{e}s do m@'{e}todo linear. O argumento @var{pontos} deve ser um dos seguintes:

@itemize @bullet
@item
uma matriz de duas colunas, @code{p:matrix([2,4],[5,6],[9,3])},
@item
uma lista de pares, @code{p: [[2,4],[5,6],[9,3]]},
@item
uma lista de n@'{u}meros, @code{p: [4,6,3]}, e nesse caso as abcissas ir@~{a}o ser atribu@'{i}das automaticamente aos valores 1, 2, 3, etc.
@end itemize

Nos dois primeiros casos os pares s@~{a}o ordenados em rela@value{cedilha}@~{a}o @`a primeira coordenada antes de fazer os c@'{a}lculos.

Com o argumento @var{op@value{cedilha}@~{a}o} @'{e} poss@'{i}vel escolher o nome da vari@'{a}vel independente, o qual @'{e} @code{'x} por padr@~{a}o; para definir qualquer outra, z por exemplo, escreva @code{varname='z}. 

Examples:
@example
(%i1) load("interpol")$
(%i2) p: matrix([7,2],[8,3],[1,5],[3,2],[6,7])$
(%i3) linearinterpol(p);
        13   3 x
(%o3)  (-- - ---) charfun2(x, minf, 3)
        2     2
 + (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7)
    5 x
 + (--- - 3) charfun2(x, 3, 6)
     3

(%i4) f(x):=''%;
                13   3 x
(%o4)  f(x) := (-- - ---) charfun2(x, minf, 3)
                2     2
 + (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7)
    5 x
 + (--- - 3) charfun2(x, 3, 6)
     3
(%i5)  /* Evaluate the polynomial at some points */
       map(f,[7.3,25/7,%pi]);
                            62  5 %pi
(%o5)                 [2.3, --, ----- - 3]
                            21    3
(%i6) %,numer;
(%o6)  [2.3, 2.952380952380953, 2.235987755982989]
(%i7)  /* Plot the polynomial together with points */
       plot2d(['(f(x)),[discrete,args(p)]],[x,-5,20],
           [gnuplot_curve_styles,
                 ["with lines","with points pointsize 3"]])$
(%i8)  /* Change variable name */
       linearinterpol(p, varname='s);
       13   3 s
(%o8) (-- - ---) charfun2(s, minf, 3)
       2     2
 + (s - 5) charfun2(s, 7, inf) + (37 - 5 s) charfun2(s, 6, 7)
    5 s
 + (--- - 3) charfun2(s, 3, 6)
     3
@end example

@end deffn



@deffn {Fun@value{cedilha}@~{a}o} cspline (@var{pontos})
@deffnx {Fun@value{cedilha}@~{a}o} cspline (@var{pontos}, @var{op@value{cedilha}@~{a}o1}, @var{op@value{cedilha}@~{a}o2}, ...)
Calcula a interpola@value{cedilha}@~{a}o polnomial pelo m@'{e}todo de splines ( polin@^{o}mios de ordem k que interpolam os dados e t@^{e}m k-1 derivadas cont@'{i}nuas em todo o intervalo ) c@'{u}bicos. O argumento @var{pontos} deve ser um dos seguintes:

@itemize @bullet
@item
uma matriz de duas colunas, @code{p:matrix([2,4],[5,6],[9,3])},
@item
uma lista de pares, @code{p: [[2,4],[5,6],[9,3]]},
@item
uma lista de n@'{u}meros, @code{p: [4,6,3]}, e nesse caso as abcissas ir@~{a}o ser atribu@'{i}das automaticamente aos valores 1, 2, 3, etc.
@end itemize

Nos dois primeiros casos os pares s@~{a}o ordenados em rela@value{cedilha}@~{a}o @`a primeira coordenada antes de fazer os c@'{a}lculos.

Existem tr@^{e}s op@value{cedilha}@~{o}es para ajustar necessidades espec@'{i}ficas:
@itemize @bullet
@item
@code{'d1}, o padr@~{a}o @'{e} @code{'unknown}, @'{e} a primeira derivada em @math{x_1}; se essa primeira derivada for desconhecida, @code{'unknown}, a segunda derivada em @math{x_1} @'{e} igualada a 0 (o spline c@'{u}bico natural); se essa primeira derivada for igual a um n@'{u}mero, a segunda derivada @'{e} calculada baseando-se nesse n@'{u}mero.

@item
@code{'dn}, o padr@~{a}o @'{e} @code{'unknown}, @'{e} a primeira derivada em @math{x_n}; se essa primeira derivada for desconhecida, @code{'unknown}, a segunda derivada em @math{x_n} @'{e} igualada a 0 (o spline c@'{u}bico natural); se essa primeira derivada for igual a um n@'{u}mero, a segunda derivada @'{e} calculada baseando-se nesse n@'{u}mero.

@item
@code{'nome_var}, o padr@~{a}o @'{e} @code{'x}, @'{e} o nome da vari@'{a}vel independente.
@end itemize

Exemplos:
@example
(%i1) load("interpol")$
(%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
(%i3) /* Unknown first derivatives at the extremes
         is equivalent to natural cubic splines */
      cspline(p);
              3         2
        1159 x    1159 x    6091 x   8283
(%o3)  (------- - ------- - ------ + ----) charfun2(x, minf, 3)
         3288      1096      3288    1096
            3         2
      2587 x    5174 x    494117 x   108928
 + (- ------- + ------- - -------- + ------) charfun2(x, 7, inf)
       1644       137       1644      137
          3          2
    4715 x    15209 x    579277 x   199575
 + (------- - -------- + -------- - ------) charfun2(x, 6, 7)
     1644       274        1644      274
            3         2
      3287 x    2223 x    48275 x   9609
 + (- ------- + ------- - ------- + ----) charfun2(x, 3, 6)
       4932       274      1644     274

(%i4) f(x):=''%$
(%i5) /* Some evaluations */
      map(f,[2.3,5/7,%pi]), numer;
(%o5) [1.991460766423356, 5.823200187269903, 2.227405312429507]
(%i6) /* Plotting interpolating function */
      plot2d(['(f(x)),[discrete,p]],[x,0,10],
          [gnuplot_curve_styles,
               ["with lines","with points pointsize 3"]])$
(%i7) /* New call, but giving values at the derivatives */
      cspline(p,d1=0,dn=0);
              3          2
        1949 x    11437 x    17027 x   1247
(%o7)  (------- - -------- + ------- + ----) charfun2(x, minf, 3)
         2256       2256      2256     752
            3          2
      1547 x    35581 x    68068 x   173546
 + (- ------- + -------- - ------- + ------) charfun2(x, 7, inf)
        564       564        141      141
         3          2
    607 x    35147 x    55706 x   38420
 + (------ - -------- + ------- - -----) charfun2(x, 6, 7)
     188       564        141      47
            3         2
      3895 x    1807 x    5146 x   2148
 + (- ------- + ------- - ------ + ----) charfun2(x, 3, 6)
       5076       188      141      47
(%i8) /* Defining new interpolating function */
      g(x):=''%$
(%i9) /* Plotting both functions together */
      plot2d(['(f(x)),'(g(x)),[discrete,p]],[x,0,10],
           [gnuplot_curve_styles,
              ["with lines","with lines","with points pointsize 3"]])$
@end example

@end deffn
