-1
votes

Comment trouver du polynôme pour les racines données avec sympty / python

Supposons que j'ai un polynôme de troisième degré avec des racines à -2, 1 et 3, comment puis-je trouver son équation? Est-ce que cela résolvable avec symboly ou peut-être qu'il existe d'autres manières avec Python en général?

La fonction peut aimer et je veux résoudre A , B , C , d . xxx

Pendant ce que le polynôme est en cinquième degré?

Mise à jour:

Merci pour les réponses. Il semble que l'utilisation de la formule de Vieta a simplifié la question. Mais parfois, le nombre de racines pour un polynôme de n-ème degré ne correspond pas à N. Par exemple, un polynôme de cinquième degré peut être exprimé comme suit: xxx

si Alors, est-ce encore résolu?

S'il vous plaît voir ma solution ci-dessous pour cette mise à jour


4 commentaires

Je voudrais juste prendre l'approche mathématique et utiliser les formules de Vieta. Si un polynôme N degré N est raconté A, B, C, D ..., alors le polynôme peut être représenté comme c (X-A) (XB) (XC) (XD) ..., avec C étant une constante inconnue . C est là parce que vous pouvez multiplier un polynôme par tout et les racines resteront les mêmes, de sorte que vous ne savez pas ce que cela a été multiplié par.


@Primusa merci, je vais essayer et je regarde ce approche maintenant


@Primusa désolé je ne comprends pas tout à fait. J'ai lu votre solution, mais une liste de 7 racines a en effet renvoyé le polynôme de 7e degré. Par exemple, si j'ai une liste de racine4, 2, 5, comment pourrais-je obtenir un polynôme de 5ème degré? Est-ce que je manque quelque chose? (BTW, je lis toujours toutes les réponses et je lesesse)


Vous devez savoir combien de racines il y a, sinon vous ne pouvez pas connaître le maquillage exact du polynôme. Disons que vous avez un polynôme de 5ème degré et vous savez qu'il y a une double racine à 4, une double racine à 2, et une racine à 5. Vous pouvez transmettre [4, 4, 2, 2, 5] pour obtenir le polynôme résultant. Si vous savez simplement [4, 2, 5] et que c'est un 5ème degré, ce n'est pas assez d'informations pour faire un polynôme. Il peut être [4, 4, 4, 2, 5], ou [4, 2, 2, 5, 5] ... etc.


5 Réponses :


1
votes

Utiliser symboly code> pour construire un polynôme à partir des racines, puis obtenir les coefficients: xxx pré>

sortie: p>

Poly(x**7 - 20*x**6 + 154*x**5 - 560*x**4 + 889*x**3 - 140*x**2 - 1044*x + 720, x, domain='ZZ')
[1, -20, 154, -560, 889, -140, -1044, 720]


0 commentaires

1
votes
def polyn(*roots):
    def _polyn(x):
        val = 1
        for r in roots:
            val *= x - r
        return val
    return _polyn

f3 = polyn(-2, 1, 2)

for i in range(-10, 11):
    assert f(i) == f3(i)
# Above code passed on Win 10, 3.7.2

0 commentaires

2
votes

Il y a un ensemble de fonctions de base poly dans numpy : xxx

Les valeurs sur une plage de valeurs peuvent également être évaluées avec : xxx


0 commentaires

2
votes

Cela devrait faire l'affaire pour un polynôme à n'importe quel degré. Le symbole d'astérisque permet de tout nombre d'arguments.

def c_find(*roots):
    from sympy import Symbol
    x = Symbol('x')
    whole =1
    for root in roots:
        whole *=(x-root)
    print('f(x) =',whole.expand())


8 commentaires

Merci pour la solution, mais si vous avez un polynôme de cinquième degré mais seulement avec trois racines?


Si vous voulez un polynôme au 5ème degré avec seulement trois racines, ajoutez deux zéros! Pour un polynôme au nième degré avec des racines numériques X Ajoutez (n-x) zéros aux racines transmises à la fonction. Bonne question


De cette façon, je pense que vous ajoutez à une racine de 0


Ouais, whoops - tu as raison. Vous devez si vous êtes des racines 3,4,5 Vous auriez besoin de deux autres numéros supplémentaires à l'argument transmis à la fonction et que ces deux chiffres devraient provenir des trois racines que vous connaissez déjà.


Si je dois transmettre une liste comme argument dans votre fonction. Que dois-je ajouter? Je reçois typeError: type (s) d'opérande non pris en charge pour -: «Symbole» et 'Liste' .


Hmm, je ne sais pas pourquoi c'est. Tant que vous définissez la fonction exactement comme indiqué ci-dessus, cela devrait être bien. Pour appeler la fonction Tout ce que vous faites est de type C_Find () remplissant la parenthèse avec toutes vos racines séparées par des virgules. Je couronne Python 3.7. Cela pourrait être quelque chose de spécifique à votre construction et je jouerais avec elle pour voir si vous pouvez trouver l'erreur.


Désolé pour ça. J'utilise réellement une liste de liste et j'ai essayé de boucler correctement pour le transmettre comme l'argumentaire de la fonction. Cela me donne un stratagème de haut degré car je me trompe mal. Je ne comprends pas la bonne façon.


Il suffit de poster ma réponse et de l'avoir enfin. Merci pour votre fonction.



0
votes

Merci pour toutes les réponses. Après avoir joué avec vos solutions. Pour ma mise à jour avec des racines répétées, j'ai proposé la solution suivante: xxx

par exemple: xxx

Retournera: xxx


0 commentaires