1 @c /interpol.texi/1.2/Fri Feb 23 20:00:44 2007//
3 * Introdução a interpol::
4 * Definições para interpol::
7 @node Introdução a interpol, Definições para interpol, interpol, interpol
8 @section Introdução a interpol
10 Pacote @code{interpol} define os métodos Lagrangiano, linear e o de
11 splines cúbicos para interpolação polinomial.
15 Comentários, correções e sugestões, por favor contacte-me em @var{'mario AT edu DOT xunta DOT es'}.
19 @node Definições para interpol, , Introdução a interpol, interpol
20 @section Definições para interpol
23 @deffn {Função} lagrange (@var{pontos})
24 @deffnx {Função} lagrange (@var{pontos}, @var{opção})
25 Calcula a interpolação polinomial através do método Lagrangiano. O argumento @var{pontos} deve ser um dos seguintes:
29 uma matriz de duas colunas, @code{p:matrix([2,4],[5,6],[9,3])},
31 uma lista de pares, @code{p: [[2,4],[5,6],[9,3]]},
33 uma lista de números, @code{p: [4,6,3]}, e nesse caso as abcissas irão ser atribuídas automaticamente aos valores 1, 2, 3, etc.
36 Nos dois primeiros casos os pares são ordenados em relação à primeira coordenada antes de fazer os cálculos.
38 Com o argumento @var{opção} é possível escolher o nome da variável independente, o qual é @code{'x} por padrão; para definir qualquer outra, z por exemplo, escreva @code{varname='z}.
43 (%i1) load("interpol")$
44 (%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
47 73 x 701 x 8957 x 5288 x 186
48 (%o3) ----- - ------ + ------- - ------ + ---
52 73 x 701 x 8957 x 5288 x 186
53 (%o4) f(x) := ----- - ------ + ------- - ------ + ---
55 (%i5) /* Evaluate the polynomial at some points */
58 (%o5) [- 1.567534999999992, ------,
61 73 %pi 701 %pi 8957 %pi 5288 %pi 186
62 ------- - -------- + --------- - -------- + ---]
65 (%o6) [- 1.567534999999992, 10.9366573451538, 2.89319655125692]
66 (%i7) /* Plot the polynomial together with points */
67 plot2d([f(x),[discrete,p]],[x,0,10],
68 [gnuplot_curve_styles,
69 ["with lines","with points pointsize 3"]])$
70 (%i8) /* Change variable name */
71 lagrange(p, varname=w);
73 73 w 701 w 8957 w 5288 w 186
74 (%o8) ----- - ------ + ------- - ------ + ---
81 @deffn {Função} charfun2 (@var{x}, @var{a}, @var{b})
82 Retorna @code{true}, i. e., verdadeiro se o número @var{x} pertence ao intervalo @math{[a, b)}, e @code{false}, i. e., falsono caso contrário.
86 @deffn {Função} linearinterpol (@var{pontos})
87 @deffnx {Função} linearinterpol (@var{pontos}, @var{opção})
88 Calcula a interpolação polinomial através do método linear. O argumento @var{pontos} deve ser um dos seguintes:
92 uma matriz de duas colunas, @code{p:matrix([2,4],[5,6],[9,3])},
94 uma lista de pares, @code{p: [[2,4],[5,6],[9,3]]},
96 uma lista de números, @code{p: [4,6,3]}, e nesse caso as abcissas irão ser atribuídas automaticamente aos valores 1, 2, 3, etc.
99 Nos dois primeiros casos os pares são ordenados em relação à primeira coordenada antes de fazer os cálculos.
101 Com o argumento @var{opção} é possível escolher o nome da variável independente, o qual é @code{'x} por padrão; para definir qualquer outra, z por exemplo, escreva @code{varname='z}.
105 (%i1) load("interpol")$
106 (%i2) p: matrix([7,2],[8,3],[1,5],[3,2],[6,7])$
107 (%i3) linearinterpol(p);
109 (%o3) (-- - ---) charfun2(x, minf, 3)
111 + (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7)
113 + (--- - 3) charfun2(x, 3, 6)
118 (%o4) f(x) := (-- - ---) charfun2(x, minf, 3)
120 + (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7)
122 + (--- - 3) charfun2(x, 3, 6)
124 (%i5) /* Evaluate the polynomial at some points */
125 map(f,[7.3,25/7,%pi]);
127 (%o5) [2.3, --, ----- - 3]
130 (%o6) [2.3, 2.952380952380953, 2.235987755982989]
131 (%i7) /* Plot the polynomial together with points */
132 plot2d(['(f(x)),[discrete,args(p)]],[x,-5,20],
133 [gnuplot_curve_styles,
134 ["with lines","with points pointsize 3"]])$
135 (%i8) /* Change variable name */
136 linearinterpol(p, varname='s);
138 (%o8) (-- - ---) charfun2(s, minf, 3)
140 + (s - 5) charfun2(s, 7, inf) + (37 - 5 s) charfun2(s, 6, 7)
142 + (--- - 3) charfun2(s, 3, 6)
150 @deffn {Função} cspline (@var{pontos})
151 @deffnx {Função} cspline (@var{pontos}, @var{opção1}, @var{opção2}, ...)
152 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 @var{pontos} deve ser um dos
157 uma matriz de duas colunas, @code{p:matrix([2,4],[5,6],[9,3])},
159 uma lista de pares, @code{p: [[2,4],[5,6],[9,3]]},
161 uma lista de números, @code{p: [4,6,3]}, e nesse caso as abcissas irão ser atribuídas automaticamente aos valores 1, 2, 3, etc.
164 Nos dois primeiros casos os pares são ordenados em relação à primeira coordenada antes de fazer os cálculos.
166 Existem três opções para ajustar necessidades específicas:
169 @code{'d1}, o padrão é @code{'unknown}, é a primeira derivada em @math{x_1}; se essa primeira derivada for desconhecida, @code{'unknown}, a segunda derivada em @math{x_1} é igualada a 0 (o spline cúbico natural); se
171 derivada for igual a um número, a segunda derivada é calculada baseando-se nesse número.
174 @code{'dn}, o padrão é @code{'unknown}, é a primeira derivada em @math{x_n}; se essa primeira derivada for desconhecida, @code{'unknown}, a segunda derivada em @math{x_n} é igualada a 0 (o spline cúbico natural); se
176 derivada for igual a um número, a segunda derivada é calculada baseando-se nesse número.
179 @code{'nome_var}, o padrão é @code{'x}, é o nome da variável independente.
184 (%i1) load("interpol")$
185 (%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
186 (%i3) /* Unknown first derivatives at the extremes
187 is equivalent to natural cubic splines */
190 1159 x 1159 x 6091 x 8283
191 (%o3) (------- - ------- - ------ + ----) charfun2(x, minf, 3)
194 2587 x 5174 x 494117 x 108928
195 + (- ------- + ------- - -------- + ------) charfun2(x, 7, inf)
198 4715 x 15209 x 579277 x 199575
199 + (------- - -------- + -------- - ------) charfun2(x, 6, 7)
202 3287 x 2223 x 48275 x 9609
203 + (- ------- + ------- - ------- + ----) charfun2(x, 3, 6)
207 (%i5) /* Some evaluations */
208 map(f,[2.3,5/7,%pi]), numer;
209 (%o5) [1.991460766423356, 5.823200187269903, 2.227405312429507]
210 (%i6) /* Plotting interpolating function */
211 plot2d(['(f(x)),[discrete,p]],[x,0,10],
212 [gnuplot_curve_styles,
213 ["with lines","with points pointsize 3"]])$
214 (%i7) /* New call, but giving values at the derivatives */
215 cspline(p,d1=0,dn=0);
217 1949 x 11437 x 17027 x 1247
218 (%o7) (------- - -------- + ------- + ----) charfun2(x, minf, 3)
221 1547 x 35581 x 68068 x 173546
222 + (- ------- + -------- - ------- + ------) charfun2(x, 7, inf)
225 607 x 35147 x 55706 x 38420
226 + (------ - -------- + ------- - -----) charfun2(x, 6, 7)
229 3895 x 1807 x 5146 x 2148
230 + (- ------- + ------- - ------ + ----) charfun2(x, 3, 6)
232 (%i8) /* Defining new interpolating function */
234 (%i9) /* Plotting both functions together */
235 plot2d(['(f(x)),'(g(x)),[discrete,p]],[x,0,10],
236 [gnuplot_curve_styles,
237 ["with lines","with lines","with points pointsize 3"]])$