DÉRIVÉ D'1 POLYNOME SIMPLE

Signaler
Messages postés
240
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
22 mars 2009
-
Messages postés
276
Date d'inscription
jeudi 12 janvier 2006
Statut
Membre
Dernière intervention
22 décembre 2008
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/46959-derive-d-1-polynome-simple

Messages postés
276
Date d'inscription
jeudi 12 janvier 2006
Statut
Membre
Dernière intervention
22 décembre 2008

@VERDI_P : Oui, mais si tu dois parser un polynome où il peut y avoir des termes de même degré, et que tu veux conserver l'ordre des termes et leur duplicité, tu dois passer par un tableau de structure monome. Surtout que mon programme doit enfait aussi gérer les sommes de "bases" différentes ("x", "y", "z", "sin(x)", ...).

Sans quoi tu as bien raison [;)]

Fremy
Messages postés
202
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
29 janvier 2019

bof, un polynome se représente dans un simple vecteur par ses coordonnées dans la base implicite (1, x, xˆ2, x^3, ... x^n): un tableau numérique à une seule dimension suffit.

Rappel: l'espace des polynomes est un espace vectoriel, tout polynome a donc des coordonnées définies dans un espace de dimension 1, qui est celui de chacun de ses monomes, autrement dit un simple nombre réel s’il s'agit d'un polynome des réels vers les réels.

Exemples:
* le polynome 4 correspondrait au tableau:
double x[] = {4};
* le polynome 3·x^7 - 12·x^2 + 10.5·x correspondrait au tableau:
double x[] = {0, 10.5, -12, 0, 0, 0, 0, 3};
Pour faciliter la gestion des polynomes de degré quelconque, on a intérêt à n’y stocker que les coefficients utiles (et supprimer les coefficients d'indice supérieur au degré du polymnome, qui sont tous nuls). Du coup la représentation avec un Vector<double> est aussi bien. On emploiera donc la généricité des Vector<T>... dont les instances contiennent la valeur du degré maximum du polynome, et un tableau interne contenant les coefficients.

Du coup l'algorithme pour dériver le polynome (ou aussi l'intégrer en fournissant le coeficient de degré zero arbitraire qu'on peut fixer à zéro) est on ne peut plus simple: il suffit de créer un vecteur dont le degré est réduit de 1 (ou aumenté de 1 si on intègre), puis de décaler d'une position dans le vecteur cible les coefficients du vecteur source après les avoir multiplié par leur position dans le vecteur source (ou divisé par leur position dans le vecteur cible, sachant que cette position indicielle ne peut alors pas être nulle et vaut au moins 1).

C'est de l'algèbre linéaire très élémentaire... Faut-il autant de lignes de code et une représentation aussi compliquée (et lente et inefficace) gérer chaque polynome dans une liste chainée??? J'ai de gros doûte sur la pertinence et la réutilisabilité de ce code.
Messages postés
276
Date d'inscription
jeudi 12 janvier 2006
Statut
Membre
Dernière intervention
22 décembre 2008

La dérivée d'un polynome = Somme des dérivées des monomes (a*x^n) le composant.

La dérivée d'un monome = n*a*x^(n-1)

N'est-ce pas plus simple à comprendre ici en deux lignes qu'en lisant ton code ?

> Manque d'objets et de fonctions au nom clair
_______________________________________________

J'ai moi-même réalisé le même genre de truc dans un cadre plus étendu, et je te conseille le système de classe suivant :

Polynom [ Monom[] monoms; String toString(); Polynom derivatedPolynom(); Polynom toOrdonatedPolynom() ]
Monom [ Double a; Double n; String toString() ]

REM :
- toOrdonatedPolynom : Retourne un polynome egal au premier dans lequel tous les monomes semblables (de même n) ont été regroupés et placés dans l'ordre décroissant dans le tableau "monoms".
- toString renvoie une représentation de l'objet sous forme lisible humainement
- Tu peux bien sûr étendre l'objet Polynom et Monom pour les faire correspondre à tes besoins (par exemple ajouter un fonction statique Polynom parse(String) qui permet et générer un polynome depuis une chaine de caractère.
Messages postés
9
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
16 mars 2009

Bonjour,

Votre programme est sans doute intéressant mais, dans 6 mois, vous ne saurez plus vraiment ce qu'il fait car il n'y a aucun commentaire !
Dans ce cas, ne pas mettre la source à disposition des lecteurs car cela devient inutilisable, sans oublier le manque de cadrages (indentations) corrects (comme dans beaucoup de programmes proposés) qui rend la lecture désagréable.
Un bon programme doit être opérationnel, bien écrit, maintenable et agréable à lire !
Les commentaires sont indispensables, y compris pour soi même, pour y voir plus clair et pouvoir envisager des améliorations plus tard !
Cela devrait faire partie de la charte, de même qu'une bonne orthographe dans les textes de présentation et dans les commentaires ... quand il y en a !
Mais on peut vous pardonner puisque vous êtes débutant et vous tenterez sans doute d'améliorer votre écriture, quel que soit le produit utilisé...
Afficher les 8 commentaires