Próximo: Funções e Variáveis Definidas para Séries de Fourier, Anterior: Pacotes de Fourier, Acima: Numérico [Conteúdo][Índice]
Traduz valores complexos da forma r %e^(%i t)
para a forma a + b %i
.
load ("fft")
chama essa função dentro do Maxima. Veja também fft
.
O módulo e a fase, r
e t
, São tomados de magnitude_array e
phase_array, respectivamente. Os valores originais de arrays de entrada são
substituídos pelas partes real e emaginária, a
e b
, no retorno. As saídas são
calculadas como
a: r cos (t) b: r sin (t)
Os arrays de entrada devem ter o mesmo tamanho e ser unidimensionais. O tamanho do array não deve ser uma potência de 2.
polartorect
é a função inversa de recttopolar
.
Traduz valores complexos da forma a + b %i
para a forma r %e^(%i t)
.
load ("fft")
chama essa função dentro do Maxima. Veja também fft
.
As partes real e imaginária, a
e b
, são tomadas de real_array e
imaginary_array, respectivamente. Os valores originais dos arrays de entrada
são substituídos pelo módulo e pelo ângulo, r
e t
, no retorno. As saídas são
calculadas como
r: sqrt (a^2 + b^2) t: atan2 (b, a)
O ângulo calculado encontra-se no intervalo de -%pi
a %pi
.
Os arrays de entrada devem ter o mesmo tamanho e ser unidimensionais. O tamanho do array não deve ser uma potência de 2.
recttopolar
é a função inversa de polartorect
.
Transformação rápida inversa discreta de Fourier . load ("fft")
chama essa função
dentro do Maxima.
ift
realiza a transformação rápida complexa de Fourier sobre
arrays em ponto flutuante unidimensionais. A transformação inversa é definida como
x[j]: sum (y[j] exp (+2 %i %pi j k / n), k, 0, n-1)
Veja fft
para maiores detalhes.
Transformação rápidada de Fourier e funções relacionadas. load ("fft")
chama essas funções dentro do Maxima.
fft
e ift
realiza transformação rápida complexa de Fourier e
a transformação inversa, respectivamente, sobre arrays em ponto flutuante
unidimensionais. O tamanho de imaginary_array deve ser igual ao tamanho de real_array.
fft
e ift
operam in-loco. Isto é, sobre o retorno de fft
ou de ift
,
O conteúdo original dos arrays de entrada é substituído pela saída.
A função fillarray
pode fazer uma cópia de um array, isso pode
ser necessário.
A transformação discreta de Fourier e sua transformação inversa são definidas
como segue. Tome x
sendo os dados originais, com
x[i]: real_array[i] + %i imaginary_array[i]
Tome y
sendo os dados transformados. A transformação normal e sua transformação inversa são
y[k]: (1/n) sum (x[j] exp (-2 %i %pi j k / n), j, 0, n-1) x[j]: sum (y[j] exp (+2 %i %pi j k / n), k, 0, n-1)
Arrays adequadas podem ser alocadas pela função array
. Por exemplo:
array (my_array, float, n-1)$
declara um array unidimensional com n elementos, indexado de 0 a n-1 inclusive. O número de elementos n deve ser igual a 2^m para algum m.
fft
pode ser aplicada a dados reais (todos os arrays imaginários são iguais a zero) para obter
coeficientes seno e cosseno. Após chamar fft
, os coeficientes
seno e cosseno, digamos a
e b
, podem ser calculados como
a[0]: real_array[0] b[0]: 0
e
a[j]: real_array[j] + real_array[n-j] b[j]: imaginary_array[j] - imaginary_array[n-j]
para j variando de 1 a n/2-1, e
a[n/2]: real_array[n/2] b[n/2]: 0
recttopolar
traduz valores complexos da forma a + b %i
para
a forma r %e^(%i t)
. Veja recttopolar
.
polartorect
traduz valores complexos da forma r %e^(%i t)
para a forma a + b %i
. Veja polartorect
.
demo ("fft")
exibe uma demonstração do pacote fft
.
Valor padrão: 0
fortindent
controla a margem esquerda de indentação de
expressões mostradas pelo comando fortran
. 0 fornece indentação
normal (i.e., 6 espaços), e valores positivos farão com que
expressões sejam mostrados mais além para a direita.
Mostra expr como uma declaração Fortran.
A linha de saída é indentada com espaços.
Se a linha for muito longa, fortran
imprime linhas de continuação.
fortran
mostra o operador de exponenciação ^
como **
,
e mostra um número complexo a + b %i
na forma (a,b)
.
expr pode ser uma equação. Nesse caso, fortran
mostra uma declaração de
atribuição, atribuindo o primeiro membro (esquerda) da equação ao segundo membro (direita).
Em particular, se o primeiro membro expr é um nome de uma matriz,
então fortran
mostra uma declaração de atribuição para cada elemento da matriz.
Se expr não for alguma coisa reconhecida por fortran
,
a expressão é mostrada no formato grind
sem reclamação.
fortran
não conhece listas, arrays ou funções.
fortindent
controla o margem esquerda das linhas mostradas.
0 é a margem normal (i.e., indentada 6 espaços). Incrementando fortindent
faz com que expressões sejam mostradas adiante para a direita.
quando fortspaces
for true
, fortran
preenche
cada linha mostrada com espaços em branco até completar 80 columas.
fortran
avalia seus argumentos;
colocando um apóstrofo em um argumento evita avaliação.
fortran
sempre retorna done
.
Exemplos:
(%i1) expr: (a + b)^12$ (%i2) fortran (expr); (b+a)**12 (%o2) done (%i3) fortran ('x=expr); x = (b+a)**12 (%o3) done (%i4) fortran ('x=expand (expr)); x = b**12+12*a*b**11+66*a**2*b**10+220*a**3*b**9+495*a**4*b**8+792 1 *a**5*b**7+924*a**6*b**6+792*a**7*b**5+495*a**8*b**4+220*a**9*b 2 **3+66*a**10*b**2+12*a**11*b+a**12 (%o4) done (%i5) fortran ('x=7+5*%i); x = (7,5) (%o5) done (%i6) fortran ('x=[1,2,3,4]); x = [1,2,3,4] (%o6) done (%i7) f(x) := x^2$ (%i8) fortran (f); f (%o8) done
Valor padrão: false
Quando fortspaces
for true
, fortran
preenche
cada linha mostrada com espaços em branco até completar 80 columas.
Retorna uma representação rearranjada de expr como
na regra de Horner, usando x como variável principal se isso for especificado.
x
pode ser omitido e nesse caso a variável principal da forma de expressão racional
canônica de expr é usada.
horner
algumas vezes melhora a estabilidade se expr
for
ser numericamente avaliada. Isso também é útil se Maxima é usado para
gerar programas para rodar em Fortran. Veja também stringout
.
(%i1) expr: 1e-155*x^2 - 5.5*x + 5.2e155; 2 (%o1) 1.0E-155 x - 5.5 x + 5.2E+155 (%i2) expr2: horner (%, x), keepfloat: true; (%o2) (1.0E-155 x - 5.5) x + 5.2E+155 (%i3) ev (expr, x=1e155); Maxima encountered a Lisp error: floating point overflow Automatically continuing. To reenable the Lisp debugger set *debugger-hook* to nil. (%i4) ev (expr2, x=1e155); (%o4) 7.0E+154
Encontra a raíz da função f com a variável x percorrendo o intervalo [a, b]
.
A função deve ter um
sinal diferente em cada ponto final. Se essa condição não for alcançada, a
action of the function is governed by find_root_error
. If
find_root_error
is true
then an error occurs, otherwise the value of
find_root_error
is returned (thus for plotting find_root_error
might be set to
0.0). De outra forma (dado que Maxima pode avaliar o primeiro argumento
no intervalo especificado, e que o intervalo é contínuo) find_root
é
garantido vir para cima com a raíz (ou um deles se existir mais
que uma raíz). A precisão de find_root
é governada por
intpolabs
e intpolrel
os quais devem ser números em ponto flutuante
não negativos. find_root
encerrará quando o primeiro argumento avaliar para
alguma coisa menor que ou igual a intpolabs
ou se sucessivas
aproximações da raíz diferirem por não mais que intpolrel * <um dos aproximandos>
.
O valor padrão de intpolabs
e intpolrel
são
0.0 de forma que find_root
pega como boa uma resposta como for possível com a
precisão aritmética simples que tivermos. O primeiro argumento pode ser uma
equação. A ordem dos dois últimos argumentos é irrelevante. Dessa forma
find_root (sin(x) = x/2, x, %pi, 0.1);
é equivalente a
find_root (sin(x) = x/2, x, 0.1, %pi);
O método usado é uma busca binária no intervalo especificado pelos últimos dois argumentos. Quando o resultado da busca for encontrado a função é fechada o suficiente para ser linear, isso inicia usando interpolação linear.
Examples:
(%i1) f(x) := sin(x) - x/2; x (%o1) f(x) := sin(x) - - 2 (%i2) find_root (sin(x) - x/2, x, 0.1, %pi); (%o2) 1.895494267033981 (%i3) find_root (sin(x) = x/2, x, 0.1, %pi); (%o3) 1.895494267033981 (%i4) find_root (f(x), x, 0.1, %pi); (%o4) 1.895494267033981 (%i5) find_root (f, 0.1, %pi); (%o5) 1.895494267033981
Valor padrão: 0.0
find_root_abs
é a precisão do comando find_root
. A precisão é
governada por find_root_abs
e find_root_rel
que devem ser
números não negativos em ponto flutuante. find_root
terminará quando o
primeiro argumento avaliar para alguma coisa menor que ou igual a find_root_abs
ou se
sucessivos aproximandos para a raíz diferirem por não mais que find_root_rel * <um dos aproximandos>
.
Os valores padrão de find_root_abs
e
find_root_rel
são 0.0 de forma que find_root
tome como boa uma resposta que for possível
com a precisão aritmética simples que tivermos.
Valor padrão: true
find_root_error
governa o comportamento de find_root
.
Quando find_root
for chamada, ela determina se a função
a ser resolvida satisfaz ou não a condição que os valores da
função nos pontos finais do intervalo de interpolação são opostos
em sinal. Se eles forem de sinais opostos, a interpolação prossegue.
Se eles forem de mesmo sinal, e find_root_error
for true
, então um erro é
sinalizado. Se eles forem de mesmo sinal e find_root_error
não for true
, o
valor de find_root_error
é retornado. Dessa forma para montagem de gráfico, find_root_error
pode ser escolhida para 0.0.
Valor padrão: 0.0
find_root_rel
é a precisão do comando find_root
e é
governada por find_root_abs
e find_root_rel
que devem ser
números não negativos em ponto flutuante. find_root
terminará quando o
primeiro argumento avaliar para alguma coisa menor que ou igual a find_root_abs
ou se
sucessivos aproximandos para a raíz diferirem de não mais que find_root_rel * <um dos aproximandos>
.
Os valores padrão de find_root_labs
e
find_root_rel
é 0.0 de forma que find_root
toma como boa uma resposta que for possível
com a precisão aritmética simples que tivermos.
Retorna uma solução aproximada de expr = 0
através do método de Newton,
considerando expr como sendo uma função de uma variável, x.
A busca pela solução começa com x = x_0
e prossegue até abs(expr) < eps
(com expr avaliada para o valor corrente de x).
newton
permite que variáveis indefinidas apareçam em expr,
contanto que o teste de terminação abs(expr) < eps
avalie
para true
ou false
.
Dessa forma não é necessário que expr avalie para um número.
load("newton1")
chama essa função.
Veja também realroots
, allroots
, find_root
, e mnewton
.
Exemplos:
(%i1) load ("newton1"); (%o1) /usr/share/maxima/5.10.0cvs/share/numeric/newton1.mac (%i2) newton (cos (u), u, 1, 1/100); (%o2) 1.570675277161251 (%i3) ev (cos (u), u = %); (%o3) 1.2104963335033528E-4 (%i4) assume (a > 0); (%o4) [a > 0] (%i5) newton (x^2 - a^2, x, a/2, a^2/100); (%o5) 1.00030487804878 a (%i6) ev (x^2 - a^2, x = %); 2 (%o6) 6.098490481853958E-4 a
Próximo: Funções e Variáveis Definidas para Séries de Fourier, Anterior: Pacotes de Fourier, Acima: Numérico [Conteúdo][Índice]