| [ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
Esse capítulo descreve rotinas para calcular aproximações de Chebyshev para funções com uma variável dependente. Uma aproximação de Chebyshev é uma truncagem das séries f(x) = \sum c_n T_n(x), onde os polinômios de Chebyshev T_n(x) = \cos(n \arccos x) fornecem uma base ortogonal de polinômios do intervalo [-1,1] com a função peso 1 / \sqrt{1-x^2}. Os primeiros poucos polinômios de Chebyshev são, T_0(x) = 1, T_1(x) = x, T_2(x) = 2 x^2 - 1. Para informação adicional veja Abramowitz & Stegun, Capítulo 22.
As funções descritas nesse capítulo são declaradas no arquivo de cabeçalho ‘gsl_chebyshev.h’.
| [ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
Uma série de Chebyshev é armazenada usando a seguinte estrutura,
typedef struct
{
double * c; /* coefficients c[0] .. c[order] */
int order; /* order of expansion */
double a; /* lower interval point */
double b; /* upper interval point */
...
} gsl_cheb_series
A aproximação é feita sobre o intervalo [a,b] usando order+1 termos, incluindo o coeficiente c[0]. As séries são calculadas usando a seguinte convenção, que é necessária quando acessamos os coeficientes diretamente.
| [ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
Essa função aloca espaço para uma série de Chebyshev de ordem n
e retorna um apontador para uma nova estrutura gsl_cheb_series.
Essa função libera uma série de Chebyshev cs que foi alocada anteriormente.
Essa função calcula a aproximação de Chebyshev cs para a função f sobre o intervalo (a,b) para a ordem especificada anteriormente. O cálculo da aproximação de Chebyshev é um processo O(n^2) (53), e requer n avaliações de função.
| [ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
As seguintes funções fornecem informação sobre uma série de Chebyshev que já existe.
Essa função retorna a ordem da série de Chebyshev cs.
Essas funções retornam o tamanho do vetor estático de coeficiente de Chebyshev
c[] e um apontador para sua primeira localização na memória para as séries de
Chebyshev cs.
| [ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
Essa função avalia a série de Chebyshev cs em um dado ponto x.
Essa função calcula a série de Chebyshev cs em um dado ponto x, estimando ambos o resultado result das séries e seu erro absoluto abserr. O erro estimado é feito a partir do primeiro termo negligenciado nas séries.
Essa função avalia a série de Chebyshev cs em um dado ponto x, para (no máximo) a dada ordem order.
Essa função avalia uma série de Chebyshev cs em um dado ponto x, estimando ambos o resultado result da série e seu erro absoluto abserr, para (no máximo) a ordem dada order. O erro estimado é feito a partir do primeiro termo negligenciado na série.
| [ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
As seguintes funções permitem a uma série de Chebyshev ser diferenciada ou integrada, produzindo uma nóva série de Chebyshev. Note que o erro estimado produzido pela avaliação da série derivada irá ser estimado para baixo devido à contribuição dos termos de alta ordem sendo abandonados.
Essa função calcula a derivada da série cs, armazenando os coeficientes da derivada em deriv alocada anteriormente. As duas séries cs e deriv devem ter sido alocadas com a mesma ordem.
Essa função calcula a integral da série cs, armazenando os coeficientes da integral em integ alocada anteriormente. As duas séries cs e integ devem ter sido alocadas com a mesma ordem. O limite inferior da integração é tomado para ser o início do intervalo a.
| [ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
O seguinte programa exemplo calcula aproximações de Chebyshev para uma função degrau. Essa é uma aproximação extremamente difícil de fazer, devido a descontinuidades, e foi escolhida como um exemplo onde o erro de aproximação é visível. Para funções planas a aproximação de Chebyshev converge extremamente rápido e erros podem não serem visíveis.
#include <stdio.h>
#include <gsl/gsl_math.h>
#include <gsl/gsl_chebyshev.h>
double
f (double x, void *p)
{
if (x < 0.5)
return 0.25;
else
return 0.75;
}
int
main (void)
{
int i, n = 10000;
gsl_cheb_series *cs = gsl_cheb_alloc (40);
gsl_function F;
F.function = f;
F.params = 0;
gsl_cheb_init (cs, &F, 0.0, 1.0);
for (i = 0; i < n; i++)
{
double x = i / (double)n;
double r10 = gsl_cheb_eval_n (cs, 10, x);
double r40 = gsl_cheb_eval (cs, x);
printf ("%g %g %g %g\n",
x, GSL_FN_EVAL (&F, x), r10, r40);
}
gsl_cheb_free (cs);
return 0;
}
A saída do programa fornece a função original, uma aproximação de décima ordem e uma aproximação de quadragésima ordem, todas com amostras retiradas em intervalos de 0.001 em x.

| [ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
O seguinte artigo descreve o uso de séries de Chebyshev,
| [ << ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
Esse documento foi gerado em 23 de Julho de 2013 usando texi2html 5.0.