Implementação de código aberto da aproximação racional a uma função

15

Estou procurando alguma implementação de código aberto (qualquer um de Python, C, C ++, Fortran é bom) de aproximação racional a uma função. Algo ao longo do artigo [1]. Dou-lhe uma função e ele me devolve dois polinômios, cuja razão é a aproximação no intervalo determinado e o erro está oscilando com a mesma amplitude e é uma aproximação ótima ou próxima a ela.

Aqui está o que eu encontrei:

  • Parece que a chebfun pode fazer isso, mas não tenho acesso ao Matlab *.

  • Há um programa simples na seção 5-13 "Aproximação Racional de Chebyshev" em Receitas Numéricas (NR).

  • O Mathematica EconomizedRationalApproximation e MiniMaxApproximation

Fiquei me perguntando se há algo mais novo (possivelmente melhor testado) do que o código NR.

Minha aplicação é que eu tenho um conjunto de funções especiais, cerca de 10, que são dadas como séries hipergeométricas ou alguma fórmula que possui cancelamentos numéricos, e eu quero ter uma função de avaliação robusta, rápida e precisa, que está sendo chamada em o loop mais interno do cálculo de dois elementos da matriz de partículas nos cálculos de Hartree Fock. Eu coloquei um exemplo simples de uma função que funciona para mim em [2]. Como você pode ver, é usando uma fórmula direta ou uma série em torno de x = 0 que calculei usando o SymPy. Funciona meio que, mas a precisão não é boa, cerca de x = 1 cerca de metade dos dígitos significativos são perdidos (mas para x = 0,1 e x = 1e5 é preciso para quase todos os dígitos significativos). Estou procurando uma melhor aproximação.

[1] Deun, J. e Trefethen, LN (2011). Uma implementação robusta do método Carathéodory-Fejér para aproximação racional. BIT Numerical Mathematics, 51 (4), 1039-1050. doi: 10.1007 / s10543-011-0331-7 ( junho de 2010 e-print )

[2] https://gist.github.com/3831580.

(*) Nem no site da chebfun, que me dá 404, mas Pedro sugeriu que esse deve ser o problema do meu provedor.

Ondřej Čertík
fonte

Respostas:

4

Isso pode ser de alguma ajuda? http://www.alglib.net/interpolation/rational.php

GertVdE
fonte
11
Obrigado, acho que isso vai dar. Eu preciso aprender a usá-lo. No momento, estou pressionando o tempo, então usei o MiniMaxApproximation do Mathematica para fazer o trabalho, mas quero aprender a fazer isso usando as ferramentas de código aberto.
Ondřej Čertík 5/10/12
10

Muitas vezes, realizar as melhores aproximações racionais pontuais pode ser realizado por iterações "manuais" do algoritmo Remez : interpole uma aproximação racional com erros de sinal alternativos (relativos ou absolutos) em uma estimativa inicial dos pontos de interpolação, localize um (ou mais) pontos em que o erro real excede o dos pontos de interpolação e do pivô (trocando um ou mais dos pontos adivinhados por eles, de maneira a preservar erros de sinal alternativos). É uma boa maneira de entender a teoria desde o início. Quando a precisão exigida é modesta, acho que a implementação de uma planilha ajuda-me a percorrer os cálculos e a adaptar os problemas por meio de recortar e colar.

y=1 1/x1 1x2insira a descrição da imagem aqui

Se abaixarmos a linha reta pela metade da distância no ponto de "erro máximo", teremos três pontos "equi-oscilatórios" de erro absoluto, contando os dois pontos finais e esse ponto crítico no interior. Assim, uma melhor aproximação polinomial linear a uma função convexa suave pode ser encontrada quase por inspeção.

O próprio software Chebfun é de código aberto ( licença no estilo BSD ) desde a v4.0. Não sei por que os links para seus sites podem ter retornado um erro 404 naquele momento, mas agora eles estão na v5.2.1. (Eles também têm um repositório GitHub .) O projeto Chebfun visa mais do que as melhores aproximações racionais, com o conceito central sendo uma sintaxe semelhante ao vetor Matlab para funções (reais univariadas) em um intervalo.

Para completar o círculo, é necessário fazê-lo funcionar no Octave, e não no Matlab. Havia um tópico sobre os mantenedores da Oitava sobre isso, iniciado em 2010. Um artigo de 2012 dos autores / mantenedores da Chebfun sugere que algum esforço foi feito para a compatibilidade da Oitava por parte deles.

Olhar a página de projetos relacionados ao Chebfun sugere que, como o software Chebfun é de código aberto, talvez seja possível fazer essa porta ou fazer uso de um dos pacotes de código aberto listados lá, como o Olivier Verdier pychebfun, um Python Chebyshev Functions projeto hospedado no GitHub.

hardmath
fonte
11
Este link no site da Chebfun possui documentação sobre como fazer aproximações racionais usando-o: chebfun.org/docs/guide/guide04.html
Ondřej Čertík