Existe uma implementação C aberta para a solução de equações quárticas:
Estou pensando em uma implementação da solução da Ferrari. Na Wikipedia, li que a solução é estável em termos computacionais apenas para algumas das combinações possíveis de sinais dos coeficientes. Mas talvez eu tenha sorte ... Consegui uma solução pragmática resolvendo analiticamente usando um sistema de álgebra computacional e exportando para C. Mas se houver uma implementação testada, prefiro usá-la. Eu procuro um método rápido e prefiro não usar um localizador de raiz geral.
Eu preciso apenas de soluções reais.
polynomials
nonlinear-equations
roots
highsciguy
fonte
fonte
Respostas:
Eu desaconselho fortemente o uso de soluções de formulário fechado, pois elas tendem a ser numericamente muito instáveis. Você precisa tomar muito cuidado na maneira e na ordem de suas avaliações dos parâmetros discriminantes e outros.
O exemplo clássico é o da equação quadrática . Calcular as raízes como causará problemas para os polinômios em que desde então você recebe o cancelamento no numerador. Você precisa calcular .ax2+bx+c=0
Higham, em sua obra-prima "Precisão e estabilidade de algoritmos numéricos" (2ª ed., SIAM), usa um método de pesquisa direta para encontrar coeficientes de um polinômio cúbico para o qual a solução cúbica analítica clássica fornece resultados muito imprecisos. O exemplo que ele fornece é . Para este polinômio, as raízes estão bem separadas e, portanto, o problema não está mal condicionado. Entretanto, se ele calcula as raízes usando a abordagem analítica e avalia o polinômio nessas raízes, ele obtém um resíduo de enquanto usa um método padrão estável (o método da matriz companheira) , o resíduo é da ordem[a,b,c]=[1.732,1,1.2704] O(10−2) O(10−15) . Ele propõe uma ligeira modificação no algoritmo, mas, mesmo assim, ele pode encontrar um conjunto de coeficientes que levam a resíduos de que definitivamente não é bom. Veja p480-481 do livro mencionado acima.O(10−11)
No seu caso, eu aplicaria o método de Bairstow . Ele usa uma combinação iterativa de iteração de Newton em formas quadráticas (e as raízes do quadrático são resolvidas) e deflação. É facilmente implementável e existem até algumas implementações disponíveis na web.
fonte
Veja estes:
Resolver quárticas e Cubics para gráficos , publicado originalmente em Gráficos Gems V . O código original está aqui . Veja também isto e isto .
Um método universal de resolução de equações quárticas .
fonte
As receitas numéricas em c fornecem expressão de forma fechada para raízes reais de quadrática e cúbica que, presumivelmente, possuem precisão decente. Como a solução algébrica do quártico envolve a solução de um cubico e, em seguida, a solução de dois quadráticos, talvez um quártico de forma fechada com boa precisão não esteja fora de questão.
fonte