1 @c Language: Brazilian Portuguese, Encoding: iso-8859-1
2 @c /orthopoly.texi/1.11/Sat Jun 2 00:13:29 2007//
4 * Introdução a polinômios ortogonais::
5 * Funções e Variáveis Definidas para polinômios ortogonais::
8 @node Introdução a polinômios ortogonais, Funções e Variáveis Definidas para polinômios ortogonais, orthopoly, orthopoly
9 @section Introdução a polinômios ortogonais
11 @code{orthopoly} é um pacote para avaliação simbólica e numérica de
12 muitos tipos de polinômios ortogonais, incluindo polinômios de Chebyshev,
13 Laguerre, Hermite, Jacobi, Legendre, e ultraesférico
14 (Gegenbauer). Adicionalmentey, @code{orthopoly} inclui suporte funções esféricas segundo o critério de
15 Bessel, esféricas segundo o critério de Hankel, e funções harmônica esféricas.
17 Em sua maior parte, @code{orthopoly} segue as convenções de Abramowitz e Stegun
18 @i{Handbook of Mathematical Functions}, Chapter 22 (10th printing, December 1972);
19 adicionalmente, usamos Gradshteyn e Ryzhik,
20 @i{Table of Integrals, Series, and Products} (1980 corrected and
21 enlarged edition), e Eugen Merzbacher @i{Quantum Mechanics} (2nd edition, 1970).
23 @c INSTALLATION INSTRUCTIONS NO LONGER RELEVANT
24 @c BUT MAYBE SOME OF THESE FILES SHOULD BE MENTIONED IN ANOTHER CONTEXT
25 @c This will create a directory @code{orthopoly_x} (again x is the release
26 @c identifier) that contains the source file @code{orthopoly.lisp}, user
27 @c documentation in html and texi formats, a sample maxima initialization file
28 @c @code{orthopoly-init.lisp}, a README file, a testing routine
29 @c @code{test_orthopoly.mac}, and two demonstration files.
31 @c Start Maxima and compile orthopoly. To do this, use the command
33 @c (c1) compile_file("orthopoly.lisp");
35 Barton Willis da University de Nebraska e Kearney (UNK) escreveu
36 o pacote @code{orthopoly} e sua documetação. O pacote
37 é liberado segundo a licença pública geral GNU (GPL).
39 @subsection Iniciando com orthopoly
41 @code{load ("orthopoly")} torna o pacote @code{orthopoly} disponível para uso.
43 Para encontrar o polinômio de Legendre de terceira ordem,
49 (%i1) legendre_p (3, x);
52 (%o1) - ---------- + ----------- - 6 (1 - x) + 1
56 Para expressar esse polinômio como uma soma de potências de @var{x}, aplique @var{ratsimp} ou @var{rat}
57 para o resultado anterior.
59 @c CONTINUING PREVIOUS EXAMPLE HERE
61 @c [ratsimp (%), rat (%)];
64 (%i2) [ratsimp (%), rat (%)];
67 (%o2)/R/ [----------, ----------]
71 Alternativamente, faça o segundo argumento para @code{legendre_p} (sua variável ``principal'')
72 uma expressão racional canônica (CRE) usando @code{rat(x)} em lugar de somente @code{x}.
75 @c legendre_p (3, rat (x));
78 (%i1) legendre_p (3, rat (x));
85 Para avaliação em ponto flutuante, @code{orthopoly} usa uma análise de erro durante a execução
86 para estimar uma associação superior para o erro. Por exemplo,
89 @c jacobi_p (150, 2, 3, 0.2);
92 (%i1) jacobi_p (150, 2, 3, 0.2);
93 (%o1) interval(- 0.062017037936715, 1.533267919277521E-11)
96 intervalos possuem a forma @code{interval (@var{c}, @var{r})}, onde @var{c} é o
97 centro e @var{r} é o raio do intervalo. Uma vez que Maxima
98 não suporta aritmética sobre intervalos, em algumas situações, tais
99 como em gráficos, você vai querer suprimir o erro e sair somente com o
100 centro do intervalo. Para fazer isso, escolha a variável de
101 opção @code{orthopoly_returns_intervals} para @code{false}.
104 @c orthopoly_returns_intervals : false;
105 @c jacobi_p (150, 2, 3, 0.2);
108 (%i1) orthopoly_returns_intervals : false;
110 (%i2) jacobi_p (150, 2, 3, 0.2);
111 (%o2) - 0.062017037936715
114 Veja a seção @pxref{Avaliação em Ponto Flutuante} para maiores informaçõesfor more information.
116 Muitas funções em @code{orthopoly} possuem uma propriedade @code{gradef}; dessa forma
119 @c diff (hermite (n, x), x);
120 @c diff (gen_laguerre (n, a, x), x);
123 (%i1) diff (hermite (n, x), x);
126 (%i2) diff (gen_laguerre (n, a, x), x);
128 n L (x) - (n + a) L (x) unit_step(n)
130 (%o2) ------------------------------------------
134 A função de um único passo no segundo exemplo previne um erro que poderia
135 de outra forma surgir através da avaliação de @var{n} para 0.
137 @c CONTINUING PREVIOUS EXAMPLE HERE
146 A propriedade @code{gradef} somente aplica para a variável ``principal''; dderivadas com
147 relação a outros argumentos usualmente resultam em uma mensagem de erro; por exemplo
150 @c diff (hermite (n, x), x);
151 @c diff (hermite (n, x), n);
154 (%i1) diff (hermite (n, x), x);
157 (%i2) diff (hermite (n, x), n);
159 Maxima doesn't know the derivative of hermite with respect the first argument
160 -- an error. Quitting. To debug this try debugmode(true);
163 Geralmente, funções em @code{orthopoly} mapeiam sobre listas e matrizes. Para
164 o mapeamento para avaliação total, as variáveis de opção
165 @code{doallmxops} e @code{listarith} devem ambas serem @code{true} (o valor padrão).
166 Para ilustrar o mapeamento sobre matrizes, considere
170 @c m : matrix ([0, x], [y, 0]);
174 (%i1) hermite (2, x);
177 (%i2) m : matrix ([0, x], [y, 0]);
181 (%i3) hermite (2, m);
183 [ - 2 - 2 (1 - 2 x ) ]
186 [ - 2 (1 - 2 y ) - 2 ]
189 No segundo exemplo, o elemento @code{i, j} do valor
190 é @code{hermite (2, m[i,j])}; isso não é o mesmo que calcular
191 @code{-2 + 4 m . m}, como visto no próximo exemplo.
193 @c CONTINUING PREVIOUS EXAMPLE HERE
195 @c -2 * matrix ([1, 0], [0, 1]) + 4 * m . m;
198 (%i4) -2 * matrix ([1, 0], [0, 1]) + 4 * m . m;
204 Se você avaliar uma função em um ponto fora do seu domínio, geralmente
205 @code{orthopoly} retorna uma função não avaliada. Por exemplo,
208 @c legendre_p (2/3, x);
211 (%i1) legendre_p (2/3, x);
216 @code{orthopoly} suporta tradução em TeX; @code{orthopoly} também faz saídas
217 bidimensionais em um terminal.
220 @c spherical_harmonic (l, m, theta, phi);
222 @c jacobi_p (n, a, a - b, x/2);
226 (%i1) spherical_harmonic (l, m, theta, phi);
231 $$Y_@{l@}^@{m@}\left(\vartheta,\varphi\right)$$
233 (%i3) jacobi_p (n, a, a - b, x/2);
238 $$P_@{n@}^@{\left(a,a-b\right)@}\left(@{@{x@}\over@{2@}@}\right)$$
242 @subsection Limitations
244 Quando uma expressão envolve muitos polinômios ortogonais com
245 ordens simbólicas, é possível que a expressão atualmente
246 tenda para zero, e ainda ocorre também que Maxima estar incapacitado de simplificar essa expressão para zero. Se você
247 faz uma divisão por tal quantidade que tende a zero, você pode estar em apuros. Por exemplo,
248 a seguinte expressão tende para zero para inteiros @var{n} maiores que 1, e ainda ocorre também que Maxima
249 está incapacitado de simplificar essa expressão para zero.
252 @c (2*n - 1) * legendre_p (n - 1, x) * x - n * legendre_p (n, x) + (1 - n) * legendre_p (n - 2, x);
255 (%i1) (2*n - 1) * legendre_p (n - 1, x) * x - n * legendre_p (n, x) + (1 - n) * legendre_p (n - 2, x);
256 (%o1) (2 n - 1) P (x) x - n P (x) + (1 - n) P (x)
260 Para um @var{n} específico, podemos reduzir a expressão a zero.
262 @c CONTINUING PREVIOUS EXAMPLE HERE
264 @c ev (% ,n = 10, ratsimp);
267 (%i2) ev (% ,n = 10, ratsimp);
271 Geralmente, a forma polinomial de um polinômio ortogonal esteja adequada de forma hostil
272 para avaliaçao em ponto flutuante. Aqui está um exemplo.
274 @c ACTUALLY NEEDS load("orthopoly"); BEFORE ANYTHING ELSE
276 @c p : jacobi_p (100, 2, 3, x)$
277 @c subst (0.2, x, p);
278 @c jacobi_p (100, 2, 3, 0.2);
279 @c float(jacobi_p (100, 2, 3, 2/10));
282 (%i1) p : jacobi_p (100, 2, 3, x)$
284 (%i2) subst (0.2, x, p);
285 (%o2) 3.4442767023833592E+35
286 (%i3) jacobi_p (100, 2, 3, 0.2);
287 (%o3) interval(0.18413609135169, 6.8990300925815987E-12)
288 (%i4) float(jacobi_p (100, 2, 3, 2/10));
289 (%o4) 0.18413609135169
292 O verdadeiro valor está em torno de 0.184; ess calculo suporta erro de
293 cancelamento por extremo subtrativo.Expandindo o polinômio e então
294 avaliando, fornecendo um melhor resultado.
295 @c CONTINUING PREVIOUS EXAMPLE HERE
298 @c subst (0.2, x, p);
302 (%i6) subst (0.2, x, p);
303 (%o6) 0.18413609766122982
306 Essa não é uma regra geral; expandindo o polinômio não resulta sempre
307 em expressões que são melhores adaptadas a avaliação numérica.
308 Com grande folga, o melhor caminho para fazer avaliação numérica é fazer um ou mais
309 argumentos da função serem números em ponto flutuante. Em função disso,
310 algorítmos especializados em ponto flutuante são usados para avaliação.
312 A função @code{float} do Maxima é até certo ponto indiscriminada; se você aplicar
313 @code{float} a uma expressão envolvendo um polinômio ortogonal com um
314 grau simbólico ou um parâmetro de ordem, esses parâmetos (inteiros) podem ser
315 convertido em números em ponto flutuante; após o que, a expressão não irá avaliar
316 completamente. Considere
319 @c assoc_legendre_p (n, 1, x);
321 @c ev (%, n=2, x=0.9);
324 (%i1) assoc_legendre_p (n, 1, x);
332 (%i3) ev (%, n=2, x=0.9);
338 A expressão em (%o3) não irá avaliar para um número em ponto flutuante; @code{orthopoly} não
339 reconhece valores em ponto flutuante em lugares onde deve haver valores inteiros. Similarmente,
340 avaliação numérica da função @code{pochhammer} para ordens que
341 excedam @code{pochhammer_max_index} pode ser perturbador; considere
344 @c x : pochhammer (1, 10), pochhammer_max_index : 5;
347 (%i1) x : pochhammer (1, 10), pochhammer_max_index : 5;
352 Aplicando @code{float} não avalia @var{x} para um número em ponto flutuante
354 @c CONTINUING PREVIOUS EXAMPLE HERE
364 Para avaliar @var{x} para um número em ponto flutuante, você irá precisar associar
365 @code{pochhammer_max_index} a 11 ou mais e aplicar @code{float} a @var{x}.
367 @c CONTINUING PREVIOUS EXAMPLE HERE
369 @c float (x), pochhammer_max_index : 11;
372 (%i3) float (x), pochhammer_max_index : 11;
376 O valor padrão de @code{pochhammer_max_index} é 100;
377 modifique esse valor após chama @code{orthopoly}.
379 Finalmente, tenha consciência que os livros citados nas referências adotam diferentes definições de
380 polinômios ortogonais; geralmente adotamos as convenções
381 citadas nas convenções de Abramowitz e Stegun.
383 Antes de você suspeitar de um erro no pacote @code{orthopoly}, verifique alguns casos especiais
384 para determinar se suas definições coincidem com aquelas usadas por @code{orthopoly}.
385 Definitions muitas vezes diferem por uma normalização; ocasionalmente, autores
386 utilizam versões ``modificadas'' das funções que fazem a família
387 ortogonal sobre um intervalo diferente do intervalo @math{(-1, 1)}. Para definir, por exemplo,
388 um polinômio de Legendre que é ortogonal a @math{(0, 1)}, defina
391 @c shifted_legendre_p (n, x) := legendre_p (n, 2*x - 1)$
392 @c shifted_legendre_p (2, rat (x));
393 @c legendre_p (2, rat (x));
396 (%i1) shifted_legendre_p (n, x) := legendre_p (n, 2*x - 1)$
398 (%i2) shifted_legendre_p (2, rat (x));
400 (%o2)/R/ 6 x - 6 x + 1
401 (%i3) legendre_p (2, rat (x));
408 @anchor{Avaliação em Ponto Flutuante}
409 @subsection Avaliação em Ponto Flutuante
411 Muitas funções em @code{orthopoly} utilizam análise de erro durante a execução para
412 estimar o erro em avaliações em ponto flutuante; as
413 exceções são funções de Bessel esféricas e os polinômios associados de
414 Legendre do segundo tipo. Para avaliações numéricas, as funções
415 de Bessel esféricas chamam funções da coleção de programas @code{SLATEC}. Nenhum método especializado é usado
416 para avaliação numérica dos polinômios associados de Legendre do
419 A análise de erro durante a execução ignora erros que são de segunda ordem ou maior
420 na máquina (também conhecida como perda de algarismos). A análise de erro durante a execução também
421 ignora alguns poucos outros tipos de erro. É possível (embora não provável)
422 que o erro atual exceda o estimado.
424 Intervalos possuem a forma @code{interval (@var{c}, @var{r})}, onde @var{c} é o centro
425 do intervalo e @var{r} é seu raio. O
426 centro de um intervalo pode sr um número complexo, e o raio é sempre um número real positivo.
428 Aqui está um exemplo.
432 @c y0 : jacobi_p (100, 2, 3, 0.2);
433 @c y1 : bfloat (jacobi_p (100, 2, 3, 1/5));
439 (%i2) y0 : jacobi_p (100, 2, 3, 0.2);
440 (%o2) interval(0.1841360913516871, 6.8990300925815987E-12)
441 (%i3) y1 : bfloat (jacobi_p (100, 2, 3, 1/5));
442 (%o3) 1.8413609135168563091370224958913493690868904463668b-1
445 Vamos testar o quanto o erro atual é é menor que o erro estimado
447 @c CONTINUING PREVIOUS EXAMPLE HERE
449 @c is (abs (part (y0, 1) - y1) < part (y0, 2));
452 (%i4) is (abs (part (y0, 1) - y1) < part (y0, 2));
456 Realmente, por esse exemplo o erro estimado é um maior que
459 Maxima não suporta aritmética sobre intervalos.
462 @c legendre_p (7, 0.1) + legendre_p (8, 0.1);
465 (%i1) legendre_p (7, 0.1) + legendre_p (8, 0.1);
466 (%o1) interval(0.18032072148437508, 3.1477135311021797E-15)
467 + interval(- 0.19949294375000004, 3.3769353084291579E-15)
470 Um usuário pode definir operadores aritméticos que fazem matemática de intervalos. Para
471 definir adição de intervalos, podemos definir
475 @c "@+"(x,y) := interval (part (x, 1) + part (y, 1), part (x, 2) + part (y, 2))$
476 @c legendre_p (7, 0.1) @+ legendre_p (8, 0.1);
481 (%i2) "@@+"(x,y) := interval (part (x, 1) + part (y, 1), part (x, 2) + part (y, 2))$
483 (%i3) legendre_p (7, 0.1) @@+ legendre_p (8, 0.1);
484 (%o3) interval(- 0.019172222265624955, 6.5246488395313372E-15)
487 As rotinas eseciais em ponto flutuante são chamadas quando os argumentos
488 forem complexos. Por exemplo,
491 @c legendre_p (10, 2 + 3.0*%i);
494 (%i1) legendre_p (10, 2 + 3.0*%i);
495 (%o1) interval(- 3.876378825E+7 %i - 6.0787748E+7,
496 1.2089173052721777E-6)
499 Let's compare this to the true value.
502 @c float (expand (legendre_p (10, 2 + 3*%i)));
505 (%i1) float (expand (legendre_p (10, 2 + 3*%i)));
506 (%o1) - 3.876378825E+7 %i - 6.0787748E+7
509 Adicionalmente, quando os argumentos forem grandes números em ponto flutuante, as rotinas especiais
510 de ponto flutuante são chamadas; todavia, tos grandes números em ponto flutuante são convertidos para números em ponto flutuante de dupla precisão
511 e o resultado final é número em ponto flutuante de precisão dupla.
514 @c ultraspherical (150, 0.5b0, 0.9b0);
517 (%i1) ultraspherical (150, 0.5b0, 0.9b0);
518 (%o1) interval(- 0.043009481257265, 3.3750051301228864E-14)
521 @subsection Gráficos e @code{orthopoly}
523 Para montar gráficos de expressões que envolvem polinômios ortogonais, você
524 deve azer duas coisas:
527 Escolher a variável de opção @code{orthopoly_returns_intervals} para @code{false},
529 Colocar apóstrofo em qualquer chamada a funções do pacote @code{orthopoly}.
531 Se chamadas a funções não receberem apóstrofo, Maxima irá avaliá-las para polinômios antes
532 de montar o gráfico; conseq@"{u}êntemente, as rotinas especializadas em ponto flutuante não serão chamadas.
533 Aqui está um exemplo de como montar o gráfico de uma expressão que envolve
534 um polinômio de Legendre.
537 @c plot2d ('(legendre_p (5, x)), [x, 0, 1]), orthopoly_returns_intervals : false;
540 (%i1) plot2d ('(legendre_p (5, x)), [x, 0, 1]), orthopoly_returns_intervals : false;
545 @image{@value{figuresfolder}/orthopoly1,8cm}
548 A expressão @i{completa} @code{legendre_p (5, x)} recebe apóstrofo; isso é
549 diferente de apenas colocar apóstrofo no nome da função usando @code{'legendre_p (5, @var{x})}.
551 @subsection Funções Diversas
553 O pacote @code{orthopoly} define o
554 síbolo de Pochhammer e uma função de passo de unidade. @code{orthopoly} utiliza
555 a função delta de Kronecker e a função de passo de unidade em
556 declarações @code{gradef}.
558 Para converter os símbolos Pochhammer em quocientes da funções gama,
559 use @code{makegamma}.
562 @c makegamma (pochhammer (x, n));
563 @c makegamma (pochhammer (1/2, 1/2));
566 (%i1) makegamma (pochhammer (x, n));
570 (%i2) makegamma (pochhammer (1/2, 1/2));
576 Derivadas de símbolos de Pochhammer são fornecidas em termos de @code{psi}
580 @c diff (pochhammer (x, n), x);
581 @c diff (pochhammer (x, n), n);
584 (%i1) diff (pochhammer (x, n), x);
585 (%o1) (x) (psi (x + n) - psi (x))
587 (%i2) diff (pochhammer (x, n), n);
588 (%o2) (x) psi (x + n)
592 Vocêprecisa ser cuidadoso com expressões como (%o1); a diferença das
593 funções @code{psi} possuem polinômios quando @code{@var{x} = -1, -2, .., -@var{n}}. Esses polinômios
594 cacelam-se com fatores em @code{pochhammer (@var{x}, @var{n})} fazendo da derivada um polinômio
595 de grau @code{@var{n} - 1} quando @var{n} for um inteiro positivo.
597 O símbolo de Pochhammer é definido de ordens negativas até sua
598 representação como um quociente de funções gama. Considere
601 @c q : makegamma (pochhammer (x, n));
602 @c sublis ([x=11/3, n= -6], q);
605 (%i1) q : makegamma (pochhammer (x, n));
609 (%i2) sublis ([x=11/3, n= -6], q);
615 Alternativamente, podemos tomar ese resultado diretamente.
618 @c pochhammer (11/3, -6);
621 (%i1) pochhammer (11/3, -6);
627 A função passo de unidade é contínua à esquerda; dessa forma
630 @c [unit_step (-1/10), unit_step (0), unit_step (1/10)];
633 (%i1) [unit_step (-1/10), unit_step (0), unit_step (1/10)];
637 Se você precisa de uma função de unidade de passo que é ou contínua à esquerda ou contínua à direita
638 em zero, defina sua própria função de unidade de passo usando @code{signum}; por exemplo,
641 @c xunit_step (x) := (1 + signum (x))/2$
642 @c [xunit_step (-1/10), xunit_step (0), xunit_step (1/10)];
645 (%i1) xunit_step (x) := (1 + signum (x))/2$
647 (%i2) [xunit_step (-1/10), xunit_step (0), xunit_step (1/10)];
653 Não redefina a própria @code{unit_step}; alguns código em @code{orthopoly}
654 requerem que a função de passo de unidade seja contínua à esquerda.
656 @subsection Algorítmos
658 Geralmente, @code{orthopoly} faz avaliações simbólicas pelo uso de uma representação
659 hipergeométrica de polinômios ortogonais. As funções
660 hipegeométricas são avaliadas usando as funções (não documetadas) @code{hypergeo11}
661 e @code{hypergeo21}. As excessões são as funções de Bessel metade inteiras
662 e a função de Legendre associada de segundo tipo. As funções de Bessel metade inteiras são
663 avaliadas usando uma representação explícita, e a função de Legendre
664 associada de segundo tipo é avaliada usando recursividade.
666 Para avaliação em ponto flutuante, nós novamente convertemos muitas fuções em
667 uma forma hipergeométrica; nós avaliamos as funções hipergeométricas usando
668 recursividade para frente. Novamente, as excessões são as funções de Bessel metade inteiras
669 e a função de Legendre associada de segundo tipo. Numericamente,
670 as funções de Bessel meio inteiras são avaliadas usando o código SLATEC.
672 @node Funções e Variáveis Definidas para polinômios ortogonais, , Introdução a polinômios ortogonais, orthopoly
673 @section Funções e Variáveis Definidas para polinômios ortogonais
675 @deffn {Função} assoc_legendre_p (@var{n}, @var{m}, @var{x})
676 As funções de Legendre associadas de primeiro tipo.
678 Referência: Abramowitz e Stegun, equações 22.5.37, página 779, 8.6.6
679 (segunda equação), página 334, e 8.2.5, página 333.
682 @deffn {Função} assoc_legendre_q (@var{n}, @var{m}, @var{x})
683 A função de Legendre associada de segundo tipo.
685 Referência: Abramowitz e Stegun, equação 8.5.3 e 8.1.8.
688 @deffn {Função} chebyshev_t (@var{n}, @var{x})
689 A função de Chebyshev de primeiro tipo.
691 Referência: Abramowitz e Stegun, equação 22.5.47,página 779.
694 @deffn {Função} chebyshev_u (@var{n}, @var{x})
695 A função de Chebyshev do segundo tipo.
697 Referência: Abramowitz e Stegun, equação 22.5.48,página 779.
700 @deffn {Função} gen_laguerre (@var{n}, @var{a}, @var{x})
701 O poliômio generalizado de Laguerre.
703 Referência: Abramowitz e Stegun, equação 22.5.54,página 780.
706 @deffn {Função} hermite (@var{n}, @var{x})
707 O polinômio de Hermite.
709 Referência: Abramowitz e Stegun, equação 22.5.55,página 780.
712 @deffn {Função} intervalp (@var{e})
713 Retorna @code{true} se a entrada for um intervalo e retorna @code{false} se não for.
716 @deffn {Função} jacobi_p (@var{n}, @var{a}, @var{b}, @var{x})
717 o polinômio de Jacobi.
719 Os polinômios de Jacobi são atualmente definidos para todo
720 @var{a} e @var{b}; todavia, o peso do polinômio de
721 Jacobi @code{(1 - @var{x})^@var{a} (1 + @var{x})^@var{b}} não é integrável para @code{@var{a} <= -1} ou
722 @code{@var{b} <= -1}.
724 Referência: Abramowitz e Stegun, equação 22.5.42,página 779.
727 @deffn {Função} laguerre (@var{n}, @var{x})
728 O polinômio de Laguerre.
730 Referência: Abramowitz e Stegun, equatções 22.5.16 e 22.5.54,página 780.
733 @deffn {Função} legendre_p (@var{n}, @var{x})
734 O polinômio de Legendre de primeiro tipo.
736 Referência: Abramowitz e Stegun, equações 22.5.50 e 22.5.51,página 779.
739 @deffn {Função} legendre_q (@var{n}, @var{x})
740 O polinômio de Legendre de primeiro tipo.
742 Referência: Abramowitz e Stegun, equações 8.5.3 e 8.1.8.
745 @deffn {Função} orthopoly_recur (@var{f}, @var{args})
746 Retorna uma relação recursiva para a família de funções ortogonais
747 @var{f} com argumentos @var{args}. A recursividade é com
748 relação ao grau do polinômio.
751 @c orthopoly_recur (legendre_p, [n, x]);
754 (%i1) orthopoly_recur (legendre_p, [n, x]);
755 (2 n - 1) P (x) x + (1 - n) P (x)
757 (%o1) P (x) = -----------------------------------------
761 O segundo argumento a @code{orthopoly_recur} deve ser uma lista com o
762 número correto de argumentos para a função @var{f}; se o número de argumetnos não for o correto,
763 Maxima sinaliza com um erro.
766 @c orthopoly_recur (jacobi_p, [n, x]);
769 (%i1) orthopoly_recur (jacobi_p, [n, x]);
771 Function jacobi_p needs 4 arguments, instead it received 2
772 -- an error. Quitting. To debug this try debugmode(true);
775 Adicionalmente, quando @var{f} não for o nome de uma das
776 famílias de polinômios ortogonais, um erro é sinalizado.
779 @c orthopoly_recur (foo, [n, x]);
782 (%i1) orthopoly_recur (foo, [n, x]);
784 A recursion relation for foo isn't known to Maxima
785 -- an error. Quitting. To debug this try debugmode(true);
789 @defvr {Variable} orthopoly_returns_intervals
790 Valor padrão: @code{true}
792 Quando @code{orthopoly_returns_intervals} for @code{true}, resultados em ponto flutuante são retornados na
793 forma @code{interval (@var{c}, @var{r})}, onde @var{c} é o centro de um intervalo
794 e @var{r} é seu raio. O centro pode ser um número complexo; nesse
795 caso, o intervalo é um disco no plano complexo.
798 @deffn {Função} orthopoly_weight (@var{f}, @var{args})
800 Retorna uma lista de três elementos; o primeiro elemento é
801 a fórmula do peso para a família de polinômios ortogonais
802 @var{f} com argumentos fornecidos pela lista @var{args}; os
803 segundos e terceiros elementos fornecem os pontos finais inferior e superior
804 do intervalo de ortogonalidade. Por exemplo,
807 @c w : orthopoly_weight (hermite, [n, x]);
808 @c integrate (w[1] * hermite (3, x) * hermite (2, x), x, w[2], w[3]);
811 (%i1) w : orthopoly_weight (hermite, [n, x]);
814 (%o1) [%e , - inf, inf]
815 (%i2) integrate (w[1] * hermite (3, x) * hermite (2, x), x, w[2], w[3]);
819 A variável principal de @var{f} deve ser um símbolo; Se não for, Maxima
820 sinaliza com um erro.
824 @deffn {Função} pochhammer (@var{n}, @var{x})
825 O símbolo de Pochhammer. Para inteiros não negativos @var{n} com
826 @code{@var{n} <= pochhammer_max_index}, a expressão @code{pochhammer (@var{x}, @var{n})}
827 avalia para o produto @code{@var{x} (@var{x} + 1) (@var{x} + 2) ... (@var{x} + n - 1)}
828 when @code{@var{n} > 0} e
829 para 1 quando @code{@var{n} = 0}. Para valores negativos de @var{n},
830 @code{pochhammer (@var{x}, @var{n})} é definido como @code{(-1)^@var{n} / pochhammer (1 - @var{x}, -@var{n})}.
834 @c pochhammer (x, 3);
835 @c pochhammer (x, -3);
838 (%i1) pochhammer (x, 3);
839 (%o1) x (x + 1) (x + 2)
840 (%i2) pochhammer (x, -3);
842 (%o2) - -----------------------
843 (1 - x) (2 - x) (3 - x)
846 Para converter um símbolo de Pochhammer em um quociente de funções gama,
847 (veja Abramowitz e Stegun, equação 6.1.22) use @code{makegamma}; por exemplo
850 @c makegamma (pochhammer (x, n));
853 (%i1) makegamma (pochhammer (x, n));
859 Quando @var{n} exceder @code{pochhammer_max_index} ou quando @var{n}
860 for simbólico, @code{pochhammer} retorna uma forma substantiva.
863 @c pochhammer (x, n);
866 (%i1) pochhammer (x, n);
872 @defvr {Variável} pochhammer_max_index
875 @code{pochhammer (@var{n}, @var{x})} expande para um produto se e somente se
876 @code{@var{n} <= pochhammer_max_index}.
881 @c pochhammer (x, 3), pochhammer_max_index : 3;
882 @c pochhammer (x, 4), pochhammer_max_index : 3;
885 (%i1) pochhammer (x, 3), pochhammer_max_index : 3;
886 (%o1) x (x + 1) (x + 2)
887 (%i2) pochhammer (x, 4), pochhammer_max_index : 3;
892 Referência: Abramowitz e Stegun, equação 6.1.16,página 256.
895 @deffn {Função} spherical_bessel_j (@var{n}, @var{x})
896 A Função de Bessel esférica de primeiro tipo.
898 Referência: Abramowitz e Stegun, equações 10.1.8,página 437 e 10.1.15,página 439.
901 @deffn {Função} spherical_bessel_y (@var{n}, @var{x})
902 A Função de Bessel esférica de segundo tipo.
904 Referência: Abramowitz e Stegun, equações 10.1.9,página 437 e 10.1.15,página 439.
907 @deffn {Função} spherical_hankel1 (@var{n}, @var{x})
908 A Função de Hankel esférica de
911 Referência: Abramowitz e Stegun, equação 10.1.36,página 439.
914 @deffn {Função} spherical_hankel2 (@var{n}, @var{x})
915 A Função de Hankel esférica de segundo tipo.
917 Referência: Abramowitz e Stegun, equação 10.1.17,página 439.
920 @deffn {Função} spherical_harmonic (@var{n}, @var{m}, @var{x}, @var{y})
921 A função armônica esférica.
923 Referência: Merzbacher 9.64.
926 @deffn {Função} unit_step (@var{x})
927 A função de passo de unidade contínua à esquerda; dessa forma
928 @code{unit_step (@var{x})} tende para @code{@var{x} <= 0} e é igual a
929 1 para @code{@var{x} > 0}.
931 Se você quiser uma função de passo de unidade que
932 tome o valor 1/2 em zero, use @code{(1 + signum (@var{x}))/2}.
935 @deffn {Função} ultraspherical (@var{n}, @var{a}, @var{x})
936 A função polinômial ultraesférica (também conhecida como função polinomial de Gegenbauer).
938 Referência: Abramowitz e Stegun, equação 22.5.46,página 779.