Arrels de polinomis

L'aplicació neix amb el desig de donar solució "a la meva manera", al problema del càlcul de les arrels reals d'un polinomi donat

Descripció

L'aplicació (de línia d'ordres), accepta els coeficients del polinomi, i una precisió per als cálculs, i calcula els zeros reals del polinomi.

Descripció del codi

Aplicació Java de línia d'ordres.

La idea de l'algorismo es aquesta:

  • Delimitar les regions amb zeros (això es pot fer calculant els zeros de la funció derivada)
  • Aplicar Bolzano a cadascuna d'aquestes zones per a trobar aquest zero

Però sembla un peix que es mossega la cua! Necessitem calcular els zeros de la funció derivada per a delimitar els zeros del nostre polinomi!

Doncs fácil: Apliquem recursivitat, fins a arribar a un polinomi al que es pugui calcular fácilment els zeros (pot derivarse reiteradament, fins a trobar una funció afí)


Desavantatges:

  • Si el grau del polinomi és gran (n), la derivació produeix números molt grans (tipus factorial n!), amb els que s'haurà d'operar.
  • Les operacions tindran una compmlexitat en funció de la mida dels números, que pot arribar a ser una funció de de log(n!)

Però per a graus raonables que ens podem trobar a la vida real, no hauría d'haver problema


L'algorisme s'ha programat sense presuposar cap tipus de dades de coma flotant (està expressat amb els generics de Java)

L'aplicació permet fer ús de Double o BigDecimal, però podria implementar-se fàcilment una versió per a Float

És una prova de concepte ... En realitat hagués estat suficient amb programar-lo per a BigDecimal, però els algorismes amb generics molen més, i poden ser il.lustratius per als que comencen


L'aplicació no ha estat provada exhaustivament, i és possible que es pugui tunejar una mica més per a que sigui més precisa o que funcioni en més casos, però crec que el codi té moltes possibilitats.

Crec que pot tunejarse convenientment per a que funcioni en tots els casos.

Pantalles

Arrels de polinomis (2023)

Descarregar

Versions

image

Les calculadores d'arrels de polinomis són un clàssic de les carreres d'informàtica.

Contribueixo amb la meva versió de la solució al problema.

No és una solució molt eficient, ja que en el pitjor cas la complexitat computacional és O(G^2), essent G el grau del polinomi

Però crec que fa el treball amb efectivitat


L'algoritme es basa en el càlcul de les arrels d'un polinomi, suposant conegudes les arrels de la seva funció derivada

Sota aquesta suposició, és molt senzill calcular les arrels, ja que podem conèixer al límit del rang a on es troben les arrels (Veure: Propietats de les arrels polinòmiques)

I d'aquesta manera, en combinació amb les arrels de la funció derivada, podem delimitar els rangs de cadascuna de les possibles arrels i, simplement aplicant el teorema de Bolzano, podem calcular els zeros

Però ... no necessitem la funció que estem programent per a calcular les arrels de la funció derivada?

No hi ha problema: farem ús de la recursivitat, i la funció recursiva (la que calcula les arrels d'un polinomi), té un cas de terminació per al cas d'un polinomi de grau zero (una constant), que suposarem que no té arrels.

I com la funció derivada té un grau menys que el polinomi original, llavors, aplicant la recursivitat, arrivarem al càlcul de les arrels d'un polinomi de grau zero, amb solució trivial, i problema solucionat


Aquesta manera de procedir pot crear la necessitat de tenir alta precisió als càlculs, però això no és problema si fem ús de la classe BigDecimal de Java

Descàrregues