1 @c Language: Brazilian Portuguese, Encoding: iso-8859-1
2 @c /Numerical.texi/1.25/Sat Jun 2 00:12:59 2007/-ko/
4 * Introdução a Numérico::
6 * Funções e Variáveis Definidas para Numérico::
7 * Funções e Variáveis Definidas para Séries de Fourier::
10 @node Introdução a Numérico, Pacotes de Fourier, Numérico, Numérico
11 @section Introdução a Numérico
13 @node Pacotes de Fourier, Funções e Variáveis Definidas para Numérico, Introdução a Numérico, Numérico
14 @section Pacotes de Fourier
15 O pacote @code{fft} compreende funções para computação numérica (não simbólica)
16 das transformações rápidas de Fourier.
17 @code{load ("fft")} chama esse pacote.
20 O pacote @code{fourie} compreende funções para computação simbólica
22 @code{load ("fourie")} chama esse pacote.
23 Existem funções no pacote @code{fourie} para calcular coeficientes da
24 integral de Fourier e algumas funções para manipulação de expressões.
25 Veja @code{Funções e Variáveis Definidas para Séries}.
27 @c end concepts Numerical
29 @node Funções e Variáveis Definidas para Numérico, Funções e Variáveis Definidas para Séries de Fourier, Pacotes de Fourier, Numérico
30 @section Funções e Variáveis Definidas para Numérico
31 @c NOTE: Let's keep POLARTORECT, RECTTOPOLAR, and IFT before FFT
32 @c in this file. Otherwise DESCRIBE returns the FFT text (because
33 @c POLARTORECT, etc are list in the heading of FFT with @defunx).
35 @deffn {Função} polartorect (@var{magnitude_array}, @var{phase_array})
37 Traduz valores complexos da forma @code{r %e^(%i t)} para a forma @code{a + b %i}.
38 @code{load ("fft")} chama essa função dentro do Maxima. Veja também @code{fft}.
40 O módulo e a fase, @code{r} e @code{t}, São tomados de @var{magnitude_array} e
41 @var{phase_array}, respectivamente. Os valores originais de arrays de entrada são
42 substituídos pelas partes real e emaginária, @code{a} e @code{b}, no retorno. As saídas são
50 Os arrays de entrada devem ter o mesmo tamanho e ser unidimensionais.
51 O tamanho do array não deve ser uma potência de 2.
53 @code{polartorect} é a função inversa de @code{recttopolar}.
57 @deffn {Função} recttopolar (@var{real_array}, @var{imaginary_array})
59 Traduz valores complexos da forma @code{a + b %i} para a forma @code{r %e^(%i t)}.
60 @code{load ("fft")} chama essa função dentro do Maxima. Veja também @code{fft}.
62 As partes real e imaginária, @code{a} e @code{b}, são tomadas de @var{real_array} e
63 @var{imaginary_array}, respectivamente. Os valores originais dos arrays de entrada
64 são substituídos pelo módulo e pelo ângulo, @code{r} e @code{t}, no retorno. As saídas são
72 O ângulo calculado encontra-se no intervalo de @code{-%pi} a @code{%pi}.
74 Os arrays de entrada devem ter o mesmo tamanho e ser unidimensionais.
75 O tamanho do array não deve ser uma potência de 2.
77 @code{recttopolar} é a função inversa de @code{polartorect}.
81 @deffn {Função} ift (@var{real_array}, @var{imaginary_array})
83 Transformação rápida inversa discreta de Fourier . @code{load ("fft")} chama essa função
86 @code{ift} realiza a transformação rápida complexa de Fourier sobre
87 arrays em ponto flutuante unidimensionais. A transformação inversa é definida como
90 x[j]: sum (y[j] exp (+2 %i %pi j k / n), k, 0, n-1)
93 Veja @code{fft} para maiores detalhes.
97 @deffn {Função} fft (@var{real_array}, @var{imaginary_array})
98 @deffnx {Função} ift (@var{real_array}, @var{imaginary_array})
99 @deffnx {Função} recttopolar (@var{real_array}, @var{imaginary_array})
100 @deffnx {Função} polartorect (@var{magnitude_array}, @var{phase_array})
102 Transformação rápidada de Fourier e funções relacionadas. @code{load ("fft")}
103 chama essas funções dentro do Maxima.
105 @code{fft} e @code{ift} realiza transformação rápida complexa de Fourier e
106 a transformação inversa, respectivamente, sobre arrays em ponto flutuante
107 unidimensionais. O tamanho de @var{imaginary_array} deve ser igual ao tamanho de @var{real_array}.
109 @code{fft} e @code{ift} operam in-loco. Isto é, sobre o retorno de @code{fft} ou de @code{ift},
110 O conteúdo original dos arrays de entrada é substituído pela saída.
111 A função @code{fillarray} pode fazer uma cópia de um array, isso pode
114 A transformação discreta de Fourier e sua transformação inversa são definidas
115 como segue. Tome @code{x} sendo os dados originais, com
118 x[i]: real_array[i] + %i imaginary_array[i]
121 Tome @code{y} sendo os dados transformados. A transformação normal e sua transformação inversa são
124 y[k]: (1/n) sum (x[j] exp (-2 %i %pi j k / n), j, 0, n-1)
126 x[j]: sum (y[j] exp (+2 %i %pi j k / n), k, 0, n-1)
129 Arrays adequadas podem ser alocadas pela função @code{array}. Por exemplo:
132 array (my_array, float, n-1)$
135 declara um array unidimensional com n elementos, indexado de 0 a
136 n-1 inclusive. O número de elementos n deve ser igual a 2^m para algum m.
138 @code{fft} pode ser aplicada a dados reais (todos os arrays imaginários são iguais a zero) para obter
139 coeficientes seno e cosseno. Após chamar @code{fft}, os coeficientes
140 seno e cosseno, digamos @code{a} e @code{b}, podem ser calculados como
150 a[j]: real_array[j] + real_array[n-j]
151 b[j]: imaginary_array[j] - imaginary_array[n-j]
154 para j variando de 1 a n/2-1, e
157 a[n/2]: real_array[n/2]
161 @code{recttopolar} traduz valores complexos da forma @code{a + b %i} para
162 a forma @code{r %e^(%i t)}. Veja @code{recttopolar}.
164 @code{polartorect} traduz valores complexos da forma @code{r %e^(%i t)}
165 para a forma @code{a + b %i}. Veja @code{polartorect}.
167 @code{demo ("fft")} exibe uma demonstração do pacote @code{fft}.
171 @defvr {Variável de opção} fortindent
174 @code{fortindent} controla a margem esquerda de indentação de
175 expressões mostradas pelo comando @code{fortran}. 0 fornece indentação
176 normal (i.e., 6 espaços), e valores positivos farão com que
177 expressões sejam mostrados mais além para a direita.
181 @deffn {Função} fortran (@var{expr})
182 Mostra @var{expr} como uma declaração Fortran.
183 A linha de saída é indentada com espaços.
184 Se a linha for muito longa, @code{fortran} imprime linhas de continuação.
185 @code{fortran} mostra o operador de exponenciação @code{^} como @code{**},
186 e mostra um número complexo @code{a + b %i} na forma @code{(a,b)}.
188 @var{expr} pode ser uma equação. Nesse caso, @code{fortran} mostra uma declaração de
189 atribuição, atribuindo o primeiro membro (esquerda) da equação ao segundo membro (direita).
190 Em particular, se o primeiro membro @var{expr} é um nome de uma matriz,
191 então @code{fortran} mostra uma declaração de atribuição para cada elemento da matriz.
193 Se @var{expr} não for alguma coisa reconhecida por @code{fortran},
194 a expressão é mostrada no formato @code{grind} sem reclamação.
195 @code{fortran} não conhece listas, arrays ou funções.
197 @code{fortindent} controla o margem esquerda das linhas mostradas.
198 0 é a margem normal (i.e., indentada 6 espaços). Incrementando @code{fortindent}
199 faz com que expressões sejam mostradas adiante para a direita.
201 quando @code{fortspaces} for @code{true}, @code{fortran} preenche
202 cada linha mostrada com espaços em branco até completar 80 columas.
204 @code{fortran} avalia seus argumentos;
205 colocando um apóstrofo em um argumento evita avaliação.
206 @code{fortran} sempre retorna @code{done}.
211 (%i1) expr: (a + b)^12$
212 (%i2) fortran (expr);
215 (%i3) fortran ('x=expr);
218 (%i4) fortran ('x=expand (expr));
219 x = b**12+12*a*b**11+66*a**2*b**10+220*a**3*b**9+495*a**4*b**8+792
220 1 *a**5*b**7+924*a**6*b**6+792*a**7*b**5+495*a**8*b**4+220*a**9*b
221 2 **3+66*a**10*b**2+12*a**11*b+a**12
223 (%i5) fortran ('x=7+5*%i);
226 (%i6) fortran ('x=[1,2,3,4]);
237 @defvr {Variável de opção} fortspaces
238 Valor padrão: @code{false}
240 Quando @code{fortspaces} for @code{true}, @code{fortran} preenche
241 cada linha mostrada com espaços em branco até completar 80 columas.
245 @deffn {Função} horner (@var{expr}, @var{x})
246 @deffnx {Função} horner (@var{expr})
247 Retorna uma representação rearranjada de @var{expr} como
248 na regra de Horner, usando @var{x} como variável principal se isso for especificado.
249 @code{x} pode ser omitido e nesse caso a variável principal da forma de expressão racional
250 canônica de @var{expr} é usada.
252 @code{horner} algumas vezes melhora a estabilidade se @code{expr} for
253 ser numericamente avaliada. Isso também é útil se Maxima é usado para
254 gerar programas para rodar em Fortran. Veja também @code{stringout}.
257 (%i1) expr: 1e-155*x^2 - 5.5*x + 5.2e155;
259 (%o1) 1.0E-155 x - 5.5 x + 5.2E+155
260 (%i2) expr2: horner (%, x), keepfloat: true;
261 (%o2) (1.0E-155 x - 5.5) x + 5.2E+155
262 (%i3) ev (expr, x=1e155);
263 Maxima encountered a Lisp error:
265 floating point overflow
267 Automatically continuing.
268 To reenable the Lisp debugger set *debugger-hook* to nil.
269 (%i4) ev (expr2, x=1e155);
276 @deffn {Função} find_root (@var{f}(@var{x}), @var{x}, @var{a}, @var{b})
277 @deffnx {Função} find_root (@var{f}, @var{a}, @var{b})
278 Encontra a raíz da função @var{f} com a variável @var{x} percorrendo o intervalo @code{[@var{a}, @var{b}]}.
280 sinal diferente em cada ponto final. Se essa condição não for alcançada, a
281 action of the function is governed by @code{find_root_error}. If
282 @code{find_root_error} is @code{true} then an error occurs, otherwise the value of
283 @code{find_root_error} is returned (thus for plotting @code{find_root_error} might be set to
284 0.0). De outra forma (dado que Maxima pode avaliar o primeiro argumento
285 no intervalo especificado, e que o intervalo é contínuo) @code{find_root} é
286 garantido vir para cima com a raíz (ou um deles se existir mais
287 que uma raíz). A precisão de @code{find_root} é governada por
288 @code{intpolabs} e @code{intpolrel} os quais devem ser números em ponto flutuante
289 não negativos. @code{find_root} encerrará quando o primeiro argumento avaliar para
290 alguma coisa menor que ou igual a @code{intpolabs} ou se sucessivas
291 aproximações da raíz diferirem por não mais que @code{intpolrel * <um dos aproximandos>}.
292 O valor padrão de @code{intpolabs} e @code{intpolrel} são
293 0.0 de forma que @code{find_root} pega como boa uma resposta como for possível com a
294 precisão aritmética simples que tivermos. O primeiro argumento pode ser uma
295 equação. A ordem dos dois últimos argumentos é irrelevante. Dessa forma
298 find_root (sin(x) = x/2, x, %pi, 0.1);
304 find_root (sin(x) = x/2, x, 0.1, %pi);
307 O método usado é uma busca binária no intervalo especificado pelos últimos
308 dois argumentos. Quando o resultado da busca for encontrado a função é fechada o suficiente para ser
309 linear, isso inicia usando interpolação linear.
313 @c f(x):=(mode_declare(x,float),sin(x)-x/2.0);
314 @c find_root(sin(x)-x/2,x,0.1,%pi) time= 60 msec
315 @c find_root(f(x),x,0.1,%pi); time= 68 msec
317 @c find_root(f(x),x,0.1,%pi); time= 26 msec
318 @c find_root(f,0.1,%pi); time= 5 msec
320 @c STUFF BELOW GENERATED FROM THE FOLLOWING
321 @c f(x) := sin(x) - x/2;
322 @c find_root (sin(x) - x/2, x, 0.1, %pi);
323 @c find_root (sin(x) = x/2, x, 0.1, %pi);
324 @c find_root (f(x), x, 0.1, %pi);
325 @c find_root (f, 0.1, %pi);
327 (%i1) f(x) := sin(x) - x/2;
329 (%o1) f(x) := sin(x) - -
331 (%i2) find_root (sin(x) - x/2, x, 0.1, %pi);
332 (%o2) 1.895494267033981
333 (%i3) find_root (sin(x) = x/2, x, 0.1, %pi);
334 (%o3) 1.895494267033981
335 (%i4) find_root (f(x), x, 0.1, %pi);
336 (%o4) 1.895494267033981
337 (%i5) find_root (f, 0.1, %pi);
338 (%o5) 1.895494267033981
343 @defvr {Variável de opção} find_root_abs
346 @code{find_root_abs} é a precisão do comando @code{find_root}. A precisão é
347 governada por @code{find_root_abs} e @code{find_root_rel} que devem ser
348 números não negativos em ponto flutuante. @code{find_root} terminará quando o
349 primeiro argumento avaliar para alguma coisa menor que ou igual a @code{find_root_abs} ou se
350 sucessivos aproximandos para a raíz diferirem por não mais que @code{find_root_rel * <um dos aproximandos>}.
351 Os valores padrão de @code{find_root_abs} e
352 @code{find_root_rel} são 0.0 de forma que @code{find_root} tome como boa uma resposta que for possível
353 com a precisão aritmética simples que tivermos.
357 @defvr {Variável de opção} find_root_error
358 Valor padrão: @code{true}
360 @code{find_root_error} governa o comportamento de @code{find_root}.
361 Quando @code{find_root} for chamada, ela determina se a função
362 a ser resolvida satisfaz ou não a condição que os valores da
363 função nos pontos finais do intervalo de interpolação são opostos
364 em sinal. Se eles forem de sinais opostos, a interpolação prossegue.
365 Se eles forem de mesmo sinal, e @code{find_root_error} for @code{true}, então um erro é
366 sinalizado. Se eles forem de mesmo sinal e @code{find_root_error} não for @code{true}, o
367 valor de @code{find_root_error} é retornado. Dessa forma para montagem de gráfico, @code{find_root_error}
368 pode ser escolhida para 0.0.
372 @defvr {Variável de opção} find_root_rel
375 @code{find_root_rel} é a precisão do comando @code{find_root} e é
376 governada por @code{find_root_abs} e @code{find_root_rel} que devem ser
377 números não negativos em ponto flutuante. @code{find_root} terminará quando o
378 primeiro argumento avaliar para alguma coisa menor que ou igual a @code{find_root_abs} ou se
379 sucessivos aproximandos para a raíz diferirem de não mais que @code{find_root_rel * <um dos aproximandos>}.
380 Os valores padrão de @code{find_root_labs} e
381 @code{find_root_rel} é 0.0 de forma que @code{find_root} toma como boa uma resposta que for possível
382 com a precisão aritmética simples que tivermos.
386 @deffn {Função} newton (@var{expr}, @var{x}, @var{x_0}, @var{eps})
387 Retorna uma solução aproximada de @code{@var{expr} = 0} através do método de Newton,
388 considerando @var{expr} como sendo uma função de uma variável, @var{x}.
389 A busca pela solução começa com @code{@var{x} = @var{x_0}}
390 e prossegue até @code{abs(@var{expr}) < @var{eps}}
391 (com @var{expr} avaliada para o valor corrente de @var{x}).
393 @code{newton} permite que variáveis indefinidas apareçam em @var{expr},
394 contanto que o teste de terminação @code{abs(@var{expr}) < @var{eps}} avalie
395 para @code{true} ou @code{false}.
396 Dessa forma não é necessário que @var{expr} avalie para um número.
398 @code{load("newton1")} chama essa função.
400 Veja também @code{realroots}, @code{allroots}, @code{find_root}, e @code{mnewton}.
406 @c newton (cos (u), u, 1, 1/100);
407 @c ev (cos (u), u = %);
409 @c newton (x^2 - a^2, x, a/2, a^2/100);
410 @c ev (x^2 - a^2, x = %);
413 (%i1) load ("newton1");
414 (%o1) /usr/share/maxima/5.10.0cvs/share/numeric/newton1.mac
415 (%i2) newton (cos (u), u, 1, 1/100);
416 (%o2) 1.570675277161251
417 (%i3) ev (cos (u), u = %);
418 (%o3) 1.2104963335033528E-4
419 (%i4) assume (a > 0);
421 (%i5) newton (x^2 - a^2, x, a/2, a^2/100);
422 (%o5) 1.00030487804878 a
423 (%i6) ev (x^2 - a^2, x = %);
425 (%o6) 6.098490481853958E-4 a
430 @node Funções e Variáveis Definidas para Séries de Fourier, , Funções e Variáveis Definidas para Numérico, Numérico
431 @section Funções e Variáveis Definidas para Séries de Fourier
434 @deffn {Função} equalp (@var{x}, @var{y})
435 Retorna @code{true} se @code{equal (@var{x}, @var{y})} de outra forma @code{false} (não fornece uma
436 mensagem de erro como @code{equal (x, y)} poderia fazer nesse caso).
441 @deffn {Função} remfun (@var{f}, @var{expr})
442 @deffnx {Função} remfun (@var{f}, @var{expr}, @var{x})
443 @code{remfun (@var{f}, @var{expr})}
444 substitue todas as ocorrências de @code{@var{f} (@var{arg})} por @var{arg} em @var{expr}.
446 @code{remfun (@var{f}, @var{expr}, @var{x})}
447 substitue todas as ocorrências de @code{@var{f} (@var{arg})} por @var{arg} em @var{expr}
448 somente se @var{arg} contiver a variável @var{x}.
453 @deffn {Função} funp (@var{f}, @var{expr})
454 @deffnx {Função} funp (@var{f}, @var{expr}, @var{x})
455 @code{funp (@var{f}, @var{expr})}
456 retorna @code{true} se @var{expr} contém a função @var{f}.
458 @code{funp (@var{f}, @var{expr}, @var{x})}
459 retorna @code{true} se @var{expr} contém a função @var{f} e a variável
460 @var{x} em algum lugar no argumento de uma das instâncias de @var{f}.
465 @deffn {Função} absint (@var{f}, @var{x}, @var{halfplane})
466 @deffnx {Função} absint (@var{f}, @var{x})
467 @deffnx {Função} absint (@var{f}, @var{x}, @var{a}, @var{b})
468 @code{absint (@var{f}, @var{x}, @var{halfplane})}
469 retorna a integral indefinida de @var{f} com relação a
470 @var{x} no dado semi-plano (@code{pos}, @code{neg}, ou @code{both}).
471 @var{f} pode conter expressões da forma
472 @code{abs (x)}, @code{abs (sin (x))}, @code{abs (a) * exp (-abs (b) * abs (x))}.
474 @code{absint (@var{f}, @var{x})} é equivalente a @code{absint (@var{f}, @var{x}, pos)}.
476 @code{absint (@var{f}, @var{x}, @var{a}, @var{b})}
477 retorna a integral definida de @var{f} com relação a @var{x} de @var{a} até @var{b}.
478 @c SAME LIST AS ABOVE ??
479 @var{f} pode incluir valores absolutos.
485 @deffn {Função} fourier (@var{f}, @var{x}, @var{p})
486 Retorna uma lista de coeficientes de Fourier de @code{@var{f}(@var{x})} definidos
487 sobre o intervalo @code{[-p, p]}.
492 @c NEES EXPANSION. WHAT IS THE ARGUMENT l ??
493 @deffn {Função} foursimp (@var{l})
494 Simplifica @code{sin (n %pi)} para 0 se @code{sinnpiflag} for @code{true} e
495 @code{cos (n %pi)} para @code{(-1)^n} se @code{cosnpiflag} for @code{true}.
500 @defvr {Variável de opção} sinnpiflag
501 Valor padrão: @code{true}
503 Veja @code{foursimp}.
507 @defvr {Variável de opção} cosnpiflag
508 Valor padrão: @code{true}
510 Veja @code{foursimp}.
514 @c NEEDS EXPANSION. EXPLAIN x AND p HERE (DO NOT REFER SOMEWHERE ELSE)
515 @deffn {Função} fourexpand (@var{l}, @var{x}, @var{p}, @var{limit})
516 Constrói e retorna a série de Fourier partindo da lista de
517 coeficientes de Fourier @var{l} até (up through) @var{limit} termos (@var{limit}
518 pode ser @code{inf}). @var{x} e @var{p} possuem o mesmo significado que em
524 @c NEEDS EXPANSION. WHAT IS THE ARGUMENT p ??
525 @deffn {Função} fourcos (@var{f}, @var{x}, @var{p})
526 Retorna os coeficientes do cosseno de Fourier para @code{@var{f}(@var{x})} definida sobre @code{[0, %pi]}.
532 @deffn {Função} foursin (@var{f}, @var{x}, @var{p})
533 Retorna os coeficientes do seno de Fourier para @code{@var{f}(@var{x})} definida sobre @code{[0, @var{p}]}.
539 @deffn {Função} totalfourier (@var{f}, @var{x}, @var{p})
540 Retorna @code{fourexpand (foursimp (fourier (@var{f}, @var{x}, @var{p})), @var{x}, @var{p}, 'inf)}.
546 @deffn {Função} fourint (@var{f}, @var{x})
547 Constrói e retorna uma lista de coeficientes de integral de Fourier de @code{@var{f}(@var{x})}
548 definida sobre @code{[minf, inf]}.
554 @deffn {Função} fourintcos (@var{f}, @var{x})
555 Retorna os coeficientes da integral do cosseno de Fourier para @code{@var{f}(@var{x})} on @code{[0, inf]}.
561 @deffn {Função} fourintsin (@var{f}, @var{x})
562 Retorna os coeficientes da integral do seno de Fourier para @code{@var{f}(@var{x})} on @code{[0, inf]}.