Anterior: Introdução a interpol, Acima: interpol [Conteúdo][Índice]
Calcula a interpolação polinomial através do método Lagrangiano. O argumento pontos deve ser um dos seguintes:
p:matrix([2,4],[5,6],[9,3]),
p: [[2,4],[5,6],[9,3]],
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
Retorna true, i. e., verdadeiro se o número x pertence ao intervalo [a, b), e false, i. e., falsono caso contrário.
Calcula a interpolação polinomial através do método linear. O argumento pontos deve ser um dos seguintes:
p:matrix([2,4],[5,6],[9,3]),
p: [[2,4],[5,6],[9,3]],
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
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:
p:matrix([2,4],[5,6],[9,3]),
p: [[2,4],[5,6],[9,3]],
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"]])$
Anterior: Introdução a interpol, Acima: interpol [Conteúdo][Índice]