[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Índice] | [ ? ]

# 56. interpol

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Índice] | [ ? ]

## 56.1 Introdução a interpol

Pacote `interpol` define os métodos Lagrangiano, linear e o de splines cúbicos para interpolação polinomial.

Comentários, correções e sugestões, por favor contacte-me em 'mario AT edu DOT xunta DOT es'.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Índice] | [ ? ]

## 56.2 Funções e Variáveis Definidas para interpol

Função: lagrange (pontos)
Função: lagrange (pontos, opção)

  Calcula a interpolação polinomial através do método Lagrangiano. O argumento pontos deve ser um dos seguintes:

  - uma matriz de duas colunas, `p:matrix([2,4],[5,6],[9,3])`,
  - uma lista de pares, `p: [[2,4],[5,6],[9,3]]`,
  - uma lista de números, `p: [4,6,3]`, e nesse caso as abcissas irão ser atribuídas automaticamente aos valores 1, 2, 3, etc.

  Nos dois primeiros casos os pares são ordenados em relação à primeira coordenada antes de fazer os cálculos.

  Com o argumento opção é possível escolher o nome da variável independente, o qual é `'x` por padrão; para definir qualquer outra, z por exemplo, escreva `varname='z`.

  Exemplos:

      (%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

Função: charfun2 (x, a, b)

  Retorna `true`, i. e., verdadeiro se o número x pertence ao intervalo [a, b), e `false`, i. e., falsono caso contrário.

Função: linearinterpol (pontos)
Função: linearinterpol (pontos, opção)

  Calcula a interpolação polinomial através do método linear. O argumento pontos deve ser um dos seguintes:

  - uma matriz de duas colunas, `p:matrix([2,4],[5,6],[9,3])`,
  - uma lista de pares, `p: [[2,4],[5,6],[9,3]]`,
  - uma lista de números, `p: [4,6,3]`, e nesse caso as abcissas irão ser atribuídas automaticamente aos valores 1, 2, 3, etc.

  Nos dois primeiros casos os pares são ordenados em relação à primeira coordenada antes de fazer os cálculos.

  Com o argumento opção é possível escolher o nome da variável independente, o qual é `'x` por padrão; para definir qualquer outra, z por exemplo, escreva `varname='z`.

  Examples:

      (%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

Função: cspline (pontos)
Função: cspline (pontos, opção1, opção2, ...)

  Calcula a interpolação polnomial pelo método de splines ( polinômios de ordem k que interpolam os dados e têm k-1 derivadas contínuas em todo o intervalo ) cúbicos. O argumento pontos deve ser um dos seguintes:

  - uma matriz de duas colunas, `p:matrix([2,4],[5,6],[9,3])`,
  - uma lista de pares, `p: [[2,4],[5,6],[9,3]]`,
  - uma lista de números, `p: [4,6,3]`, e nesse caso as abcissas irão ser atribuídas automaticamente aos valores 1, 2, 3, etc.

  Nos dois primeiros casos os pares são ordenados em relação à primeira coordenada antes de fazer os cálculos.

  Existem três opções para ajustar necessidades específicas:

  - `'d1`, o padrão é `'unknown`, é a primeira derivada em x_1; se essa primeira derivada for desconhecida, `'unknown`, a segunda derivada em x_1 é igualada a 0 (o spline cúbico natural); se essa primeira derivada for igual a um número, a segunda derivada é calculada baseando-se nesse número.
  - `'dn`, o padrão é `'unknown`, é a primeira derivada em x_n; se essa primeira derivada for desconhecida, `'unknown`, a segunda derivada em x_n é igualada a 0 (o spline cúbico natural); se essa primeira derivada for igual a um número, a segunda derivada é calculada baseando-se nesse número.
  - `'nome_var`, o padrão é `'x`, é o nome da variável independente.

  Exemplos:

      (%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"]])$

[ << ] | [ >> ] |  |  |  |  |  | [Top] | [Contents] | [Índice] | [ ? ]

This document was generated by Viktor T. Toth on Setembro, 27 2018 using texi2html 1.76.