Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Radici di polinomi con astuzia e sacrificio

Analisi, geometria, algebra, topologia...

Moderatori: Foto UtenteDirtyDeeds, Foto UtentePietroBaima, Foto UtenteIanero

3
voti

[31] Re: Radici di polinomi con astuzia e sacrificio

Messaggioda Foto Utentexyz » 31 mar 2019, 14:53

Quindi il trucco è abbassare il grado del polinomio. Io mi ero messo a cercare qualche trucco per individuate le radici dalla sequenza delle derivate ma il teorema di Abel-Ruffini non si può aggirare.

Ritornando al problema iniziale. Bisogna trovare tutti gli zeri di questo polinomio:

P(x)\,=\, x^7+3\,x^6+5\,x^5+7\,x^4+7\,x^3+5\,x^2+3\,x+1

    1. Calcolare la derivata prima:

    P'(x)\,=\, 7\,x^6+18\,x^5+25\,x^4+28\,x^3+21\,x^2+10\,x+3
    2. Calcolare il massimo comune multiplo polinomiale (gcd) tra P(x) e P'(x)\;:

    Q(x) = \mbox{gcd}(P(x),\,P'(x)) = x^4+2\,x^3+2\,x^2+2\,x+1

    Se Q(x) è uguale a 1 allora P(x) e P'(x) sono coprimi, in questo caso il procedimento si ferma qui e non è possibile andare avanti, altrimenti tutti gli zeri di Q(x) sono anche di P(x).
    3. Calcolare il secondo fattore polinomiale R(x) con una divisione tra i polinomi P(x) e Q(x):

    P(x) = Q(x) \cdot R(x)

    R(x) = \frac{P(x)}{Q(x)} = x^3+x^2+x+1

    Il resto della divisione è nullo visto che Q(x) per costruzione è un fattore polinomiale di P(x)\;.
    4. Trovare se possibile gli zeri di Q(x) e R(x) con le formule note di risoluzione quelle equazioni dal primo al quarto grado.

    In questo caso Q(x) è di grado 4 e R(x) è di grado 3 (la somma deve essere uguale al grado di P(x)\;).

    Gli zeri di Q(x)\;:

      x_{q0} = -\imath \quad    \mbox{molteplicità 1}
      x_{q1} =  \imath  \qquad \mbox{molteplicità 1}
      x_{q2} = -1         \quad    \mbox{molteplicità 2}
    La presenza di almeno uno zero di molteplicità maggiore di 1 ha reso possibile la fattorizzazione con la derivata prima.

    Gli zeri di R(x)\;:

      x_{r0} = -\imath \quad    \mbox{molteplicità 1}
      x_{r1} = \imath \qquad   \mbox{molteplicità 1}
      x_{r2} = -1         \quad    \mbox{molteplicità 1}
    5. Unire tutti gli zeri con la loro molteplicità di Q(x) e R(x) per ottenere tutti gli zeri di P(x)\;:

      x_{p0} = -\imath \quad    \mbox{molteplicità 2}
      x_{p1} = \imath \qquad   \mbox{molteplicità 2}
      x_{p2} = -1         \quad    \mbox{molteplicità 3}

Questo è tutto, salvo errori :-)

P.S. Le formule per trovare gli zeri dei polinomi dal primo al quarto grado:

https://it.wikipedia.org/wiki/Equazione_lineare
https://it.wikipedia.org/wiki/Equazione ... ondo_grado
https://it.wikipedia.org/wiki/Equazione_di_terzo_grado
https://it.wikipedia.org/wiki/Equazione_di_quarto_grado
Avatar utente
Foto Utentexyz
5.930 2 4 5
G.Master EY
G.Master EY
 
Messaggi: 1572
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

1
voti

[32] Re: Radici di polinomi con astuzia e sacrificio

Messaggioda Foto UtenteIanero » 1 apr 2019, 17:01

=D> =D> =D> =D> =D>
Servo, dai a costui una moneta, perché ha bisogno di trarre guadagno da ciò che impara.
Euclide.
Avatar utente
Foto UtenteIanero
7.309 5 8 13
Master EY
Master EY
 
Messaggi: 3768
Iscritto il: 21 mar 2012, 15:47

4
voti

[33] Re: Radici di polinomi con astuzia e sacrificio

Messaggioda Foto Utentexyz » 5 apr 2019, 20:51

Aggiungo alla discussione alcuni script creati da me per cercare di risolvere il problema.

Questo semplice script per Maxima esegue i vari passi per la risoluzione del problema come descritto nel post precedente:

Codice: Seleziona tutto
P(x):=x^7+3*x^6+5*x^5+7*x^4+7*x^3+5*x^2+3*x+1;

PP(x):=diff(P(x),x)$
display(PP(x))$

Q(x):=gcd(P(x), PP(x))$
display(Q(x))$

R(x):=divide(P(x), Q(x))[1]$
display(R(x))$

solve(Q(x), x);
multiplicities;

solve(R(x), x);
multiplicities;


Output con gli zeri e la loro molteplicità:

P(x):={{x}^{7}}+3 {{x}^{6}}+5 {{x}^{5}}+7 {{x}^{4}}+7 {{x}^{3}}+5 {{x}^{2}}+3 x+1
PP(x)=7 {{x}^{6}}+18 {{x}^{5}}+25 {{x}^{4}}+28 {{x}^{3}}+21 {{x}^{2}}+10 x+3
Q(x)={{x}^{4}}+2 {{x}^{3}}+2 {{x}^{2}}+2 x+1
R(x)={{x}^{3}}+{{x}^{2}}+x+1
[x=-\imath,x=\imath,x=-1]
[1,1,2]
[x=-\imath,x=\imath,x=-1]
[1,1,1]

Prima di questa discussione non conoscevo il teorema di Gauss–Lucas, riguarda una particolare proprietà. Gli zeri, considerati come punti nel piano complesso ℂ, della derivata prima di un polinomio sono inclusi nel convex hull formato dagli zeri del polinomio iniziale.

Il grafico del polinomio in esame con tutte le sue derivate fino a un polinomio di primo grado:

plot-1.png
Plot 1

Un altro polinomio sempre di settimo grado fa vedere meglio questa proprietà:

plot-2.png
Plot 2


Sono utilizzati gli stessi colori per i punti delle radici e il convex hull. I vai convex hull sono annidati come in una matrioska.

Lo script in Python per generare le immagini precedenti, usa come librerie NumPy, SymPy, SciPy e Matplotlib:

Codice: Seleziona tutto
#!/usr/bin/env python3

import sys

from itertools import cycle, tee

import numpy as np

from sympy import *
from sympy.abc import x
from mpmath.libmp.libhyper import NoConvergence

from scipy.spatial import ConvexHull
from scipy.spatial.qhull import QhullError

import matplotlib.pyplot as plt


init_printing(use_unicode=True)

plt.rc('text', usetex=True)
plt.rc('font', family='serif')


# pprint = print_latex

# Tableau 20

palette = ['#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c',
           '#98df8a', '#d62728', '#ff9896', '#9467bd', '#c5b0d5',
           '#8c564b', '#c49c94', '#e377c2', '#f7b6d2', '#7f7f7f',
           '#c7c7c7', '#bcbd22', '#dbdb8d', '#17becf', '#9edae5']

(col_ring1, col_ring2) = tee(cycle(palette))


def main():

    p = Poly([1, 3, 5, 7, 7, 5, 3, 1], x, domain=polys.domains.CC)
#    p = Poly([1, 1, 1, 1, 1, 1, 1, 1], x, domain=polys.domains.CC)

    grade = degree(p)

    equations = [diff(p, (x, n)) for n in range(grade)]

    plt.grid()
    plt.axes().set_aspect('equal', 'datalim')

    for n in range(grade):

        col1 = next(col_ring2)
        col2 = next(col_ring2)

        expr = equations[n]

        try:
            sol = solve(expr)
        except NoConvergence:
            try:
                sol = roots(expr)
            except NoConvergence:
                try:
                    sol = nroots(expr, n=10)
                except NoConvergence:
                    print('No Solution found:', sys.exc_info()[0])
                    continue

        nsol = len(sol)
        if nsol == 0:
            continue

        points = np.empty([nsol, 2])

        for i, s in enumerate(sol):
            points[i] = np.array([re(s), im(s)])

        if nsol >= 3:

            try:
                hull = ConvexHull(points)

                plt.fill(points[hull.vertices, 0], points[hull.vertices, 1],
                         c=col2, alpha=0.35)

                for simp in hull.simplices:
                    plt.plot(points[simp, 0], points[simp, 1], '-', c=col1)

            except QhullError:
                pass

        plt.plot(points[:, 0], points[:, 1], 'o', c=col1)

        pprint(expr.as_expr())

        for n, s in enumerate(sol):
            print('root {}: '.format(n + 1), end='')
            pprint(s)

        print()

    plt.title('${}$'.format(latex(p.as_expr())))
    plt.suptitle('Roots', fontsize=16)
    plt.xlabel('real', fontsize=14)
    plt.ylabel('imaginary', fontsize=14)

#    plt.savefig('plot.png')
    plt.show()


if __name__ == '__main__':
    main()


Alla fine questa parte non è servita per trovare la soluzione al problema iniziale.
Avatar utente
Foto Utentexyz
5.930 2 4 5
G.Master EY
G.Master EY
 
Messaggi: 1572
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[34] Re: Radici di polinomi con astuzia e sacrificio

Messaggioda Foto UtenteIanero » 5 apr 2019, 21:49

Complimenti per questo bel post =D>
Servo, dai a costui una moneta, perché ha bisogno di trarre guadagno da ciò che impara.
Euclide.
Avatar utente
Foto UtenteIanero
7.309 5 8 13
Master EY
Master EY
 
Messaggi: 3768
Iscritto il: 21 mar 2012, 15:47

Precedente

Torna a Matematica generale

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti